nomagick commited on
Commit
b6846ab
·
unverified ·
1 Parent(s): 2991e30

curl-impersonate: add zstd compression options

Browse files
backend/functions/Dockerfile CHANGED
@@ -8,7 +8,7 @@ RUN apt-get update \
8
  && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
9
  && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
10
  && apt-get update \
11
- && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 \
12
  --no-install-recommends \
13
  && rm -rf /var/lib/apt/lists/*
14
 
 
8
  && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
9
  && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
10
  && apt-get update \
11
+ && apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 zstd \
12
  --no-install-recommends \
13
  && rm -rf /var/lib/apt/lists/*
14
 
backend/functions/package-lock.json CHANGED
@@ -40,6 +40,7 @@
40
  "puppeteer-page-proxy": "^1.3.0",
41
  "robots-parser": "^3.0.1",
42
  "set-cookie-parser": "^2.6.0",
 
43
  "stripe": "^11.11.0",
44
  "tiktoken": "^1.0.16",
45
  "tld-extract": "^2.1.0",
@@ -3701,9 +3702,7 @@
3701
  "node_modules/buffer-from": {
3702
  "version": "1.1.2",
3703
  "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
3704
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
3705
- "dev": true,
3706
- "peer": true
3707
  },
3708
  "node_modules/busboy": {
3709
  "version": "1.6.0",
@@ -4761,6 +4760,12 @@
4761
  "url": "https://github.com/fb55/domutils?sponsor=1"
4762
  }
4763
  },
 
 
 
 
 
 
4764
  "node_modules/duplexify": {
4765
  "version": "4.1.3",
4766
  "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
@@ -7288,6 +7293,12 @@
7288
  "url": "https://github.com/sponsors/ljharb"
7289
  }
7290
  },
 
 
 
 
 
 
7291
  "node_modules/isarray": {
7292
  "version": "2.0.5",
7293
  "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
@@ -10043,6 +10054,75 @@
10043
  "path2d": "^0.2.0"
10044
  }
10045
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10046
  "node_modules/pend": {
10047
  "version": "1.2.0",
10048
  "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -10345,6 +10425,19 @@
10345
  "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
10346
  "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
10347
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
10348
  "node_modules/process-warning": {
10349
  "version": "3.0.0",
10350
  "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
@@ -11576,6 +11669,18 @@
11576
  "simple-concat": "^1.0.0"
11577
  }
11578
  },
 
 
 
 
 
 
 
 
 
 
 
 
11579
  "node_modules/sisteransi": {
11580
  "version": "1.0.5",
11581
  "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
@@ -12932,6 +13037,15 @@
12932
  "node": ">=4.0"
12933
  }
12934
  },
 
 
 
 
 
 
 
 
 
12935
  "node_modules/y18n": {
12936
  "version": "5.0.8",
12937
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
 
40
  "puppeteer-page-proxy": "^1.3.0",
41
  "robots-parser": "^3.0.1",
42
  "set-cookie-parser": "^2.6.0",
43
+ "simple-zstd": "^1.4.2",
44
  "stripe": "^11.11.0",
45
  "tiktoken": "^1.0.16",
46
  "tld-extract": "^2.1.0",
 
3702
  "node_modules/buffer-from": {
3703
  "version": "1.1.2",
3704
  "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
3705
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
 
 
3706
  },
3707
  "node_modules/busboy": {
3708
  "version": "1.6.0",
 
4760
  "url": "https://github.com/fb55/domutils?sponsor=1"
4761
  }
4762
  },
4763
+ "node_modules/duplex-maker": {
4764
+ "version": "1.0.0",
4765
+ "resolved": "https://registry.npmjs.org/duplex-maker/-/duplex-maker-1.0.0.tgz",
4766
+ "integrity": "sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA==",
4767
+ "license": "MIT"
4768
+ },
4769
  "node_modules/duplexify": {
4770
  "version": "4.1.3",
4771
  "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
 
7293
  "url": "https://github.com/sponsors/ljharb"
7294
  }
7295
  },
7296
+ "node_modules/is-zst": {
7297
+ "version": "1.0.0",
7298
+ "resolved": "https://registry.npmjs.org/is-zst/-/is-zst-1.0.0.tgz",
7299
+ "integrity": "sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww==",
7300
+ "license": "MIT"
7301
+ },
7302
  "node_modules/isarray": {
7303
  "version": "2.0.5",
7304
  "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
 
10054
  "path2d": "^0.2.0"
10055
  }
10056
  },
10057
+ "node_modules/peek-stream": {
10058
+ "version": "1.1.3",
10059
+ "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
10060
+ "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
10061
+ "license": "MIT",
10062
+ "dependencies": {
10063
+ "buffer-from": "^1.0.0",
10064
+ "duplexify": "^3.5.0",
10065
+ "through2": "^2.0.3"
10066
+ }
10067
+ },
10068
+ "node_modules/peek-stream/node_modules/duplexify": {
10069
+ "version": "3.7.1",
10070
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
10071
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
10072
+ "license": "MIT",
10073
+ "dependencies": {
10074
+ "end-of-stream": "^1.0.0",
10075
+ "inherits": "^2.0.1",
10076
+ "readable-stream": "^2.0.0",
10077
+ "stream-shift": "^1.0.0"
10078
+ }
10079
+ },
10080
+ "node_modules/peek-stream/node_modules/isarray": {
10081
+ "version": "1.0.0",
10082
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
10083
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
10084
+ "license": "MIT"
10085
+ },
10086
+ "node_modules/peek-stream/node_modules/readable-stream": {
10087
+ "version": "2.3.8",
10088
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
10089
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
10090
+ "license": "MIT",
10091
+ "dependencies": {
10092
+ "core-util-is": "~1.0.0",
10093
+ "inherits": "~2.0.3",
10094
+ "isarray": "~1.0.0",
10095
+ "process-nextick-args": "~2.0.0",
10096
+ "safe-buffer": "~5.1.1",
10097
+ "string_decoder": "~1.1.1",
10098
+ "util-deprecate": "~1.0.1"
10099
+ }
10100
+ },
10101
+ "node_modules/peek-stream/node_modules/safe-buffer": {
10102
+ "version": "5.1.2",
10103
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
10104
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
10105
+ "license": "MIT"
10106
+ },
10107
+ "node_modules/peek-stream/node_modules/string_decoder": {
10108
+ "version": "1.1.1",
10109
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
10110
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
10111
+ "license": "MIT",
10112
+ "dependencies": {
10113
+ "safe-buffer": "~5.1.0"
10114
+ }
10115
+ },
10116
+ "node_modules/peek-stream/node_modules/through2": {
10117
+ "version": "2.0.5",
10118
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
10119
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
10120
+ "license": "MIT",
10121
+ "dependencies": {
10122
+ "readable-stream": "~2.3.6",
10123
+ "xtend": "~4.0.1"
10124
+ }
10125
+ },
10126
  "node_modules/pend": {
10127
  "version": "1.2.0",
10128
  "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
 
10425
  "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
10426
  "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
10427
  },
10428
+ "node_modules/process-streams": {
10429
+ "version": "1.0.3",
10430
+ "resolved": "https://registry.npmjs.org/process-streams/-/process-streams-1.0.3.tgz",
10431
+ "integrity": "sha512-xkIaM5vYnyekB88WyET78YEqXiaJRy0xcvIdE22n+myhvBT7LlLmX6iAtq7jDvVH8CUx2rqQsd32JdRyJMV3NA==",
10432
+ "funding": [
10433
+ "https://www.paypal.com/donate/?hosted_button_id=GB656ZSAEQEXN",
10434
+ "https://de.liberapay.com/nils.knappmeier/"
10435
+ ],
10436
+ "license": "MIT",
10437
+ "dependencies": {
10438
+ "duplex-maker": "^1.0.0"
10439
+ }
10440
+ },
10441
  "node_modules/process-warning": {
10442
  "version": "3.0.0",
10443
  "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz",
 
11669
  "simple-concat": "^1.0.0"
11670
  }
11671
  },
11672
+ "node_modules/simple-zstd": {
11673
+ "version": "1.4.2",
11674
+ "resolved": "https://registry.npmjs.org/simple-zstd/-/simple-zstd-1.4.2.tgz",
11675
+ "integrity": "sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A==",
11676
+ "license": "MIT",
11677
+ "dependencies": {
11678
+ "is-zst": "^1.0.0",
11679
+ "peek-stream": "^1.1.3",
11680
+ "process-streams": "^1.0.1",
11681
+ "through2": "^4.0.2"
11682
+ }
11683
+ },
11684
  "node_modules/sisteransi": {
11685
  "version": "1.0.5",
11686
  "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
 
13037
  "node": ">=4.0"
13038
  }
13039
  },
13040
+ "node_modules/xtend": {
13041
+ "version": "4.0.2",
13042
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
13043
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
13044
+ "license": "MIT",
13045
+ "engines": {
13046
+ "node": ">=0.4"
13047
+ }
13048
+ },
13049
  "node_modules/y18n": {
13050
  "version": "5.0.8",
13051
  "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
backend/functions/package.json CHANGED
@@ -60,6 +60,7 @@
60
  "puppeteer-page-proxy": "^1.3.0",
61
  "robots-parser": "^3.0.1",
62
  "set-cookie-parser": "^2.6.0",
 
63
  "stripe": "^11.11.0",
64
  "tiktoken": "^1.0.16",
65
  "tld-extract": "^2.1.0",
 
60
  "puppeteer-page-proxy": "^1.3.0",
61
  "robots-parser": "^3.0.1",
62
  "set-cookie-parser": "^2.6.0",
63
+ "simple-zstd": "^1.4.2",
64
  "stripe": "^11.11.0",
65
  "tiktoken": "^1.0.16",
66
  "tld-extract": "^2.1.0",
backend/functions/src/services/curl.ts CHANGED
@@ -11,6 +11,7 @@ import { TempFileManager } from '../shared';
11
  import { readFile } from 'fs/promises';
12
  import { pathToFileURL } from 'url';
13
  import { createBrotliDecompress, createInflate, createGunzip } from 'zlib';
 
14
 
15
  @singleton()
16
  export class CurlControl extends AsyncService {
@@ -43,7 +44,7 @@ export class CurlControl extends AsyncService {
43
  'Sec-Fetch-Mode': 'navigate',
44
  'Sec-Fetch-User': '?1',
45
  'Sec-Fetch-Dest': 'document',
46
- 'Accept-Encoding': 'gzip, deflate, br',
47
  'Accept-Language': 'en-US,en;q=0.9',
48
  };
49
 
@@ -157,6 +158,12 @@ export class CurlControl extends AsyncService {
157
  stream = decompressed;
158
  break;
159
  }
 
 
 
 
 
 
160
  default: {
161
  break;
162
  }
 
11
  import { readFile } from 'fs/promises';
12
  import { pathToFileURL } from 'url';
13
  import { createBrotliDecompress, createInflate, createGunzip } from 'zlib';
14
+ import { ZSTDDecompress } from 'simple-zstd';
15
 
16
  @singleton()
17
  export class CurlControl extends AsyncService {
 
44
  'Sec-Fetch-Mode': 'navigate',
45
  'Sec-Fetch-User': '?1',
46
  'Sec-Fetch-Dest': 'document',
47
+ 'Accept-Encoding': 'gzip, deflate, br, zstd',
48
  'Accept-Language': 'en-US,en;q=0.9',
49
  };
50
 
 
158
  stream = decompressed;
159
  break;
160
  }
161
+ case 'zstd': {
162
+ const decompressed = ZSTDDecompress();
163
+ stream.pipe(decompressed);
164
+ stream = decompressed;
165
+ break;
166
+ }
167
  default: {
168
  break;
169
  }
backend/functions/src/types.d.ts CHANGED
@@ -14,8 +14,15 @@ declare module 'jsdom' {
14
  constructor(html: string, options?: any);
15
  window: typeof window;
16
  }
17
- export class VirtualConsole extends EventEmitter{
18
  constructor();
19
  sendTo(console: any, options?: any);
20
  }
21
  }
 
 
 
 
 
 
 
 
14
  constructor(html: string, options?: any);
15
  window: typeof window;
16
  }
17
+ export class VirtualConsole extends EventEmitter {
18
  constructor();
19
  sendTo(console: any, options?: any);
20
  }
21
  }
22
+
23
+ declare module 'simple-zstd' {
24
+ import { Duplex } from 'stream';
25
+ export function ZSTDCompress(lvl: Number): Duplex;
26
+ export function ZSTDDecompress(): Duplex;
27
+ export function ZSTDDecompressMaybe(): Duplex;
28
+ }