nlcurl 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +143 -140
- package/dist/cache/groups.d.ts +75 -0
- package/dist/cache/groups.d.ts.map +1 -0
- package/dist/cache/groups.js +118 -0
- package/dist/cache/groups.js.map +1 -0
- package/dist/cache/no-vary-search.d.ts +33 -0
- package/dist/cache/no-vary-search.d.ts.map +1 -0
- package/dist/cache/no-vary-search.js +148 -0
- package/dist/cache/no-vary-search.js.map +1 -0
- package/dist/cache/range.d.ts +120 -0
- package/dist/cache/range.d.ts.map +1 -0
- package/dist/cache/range.js +193 -0
- package/dist/cache/range.js.map +1 -0
- package/dist/cache/store.d.ts +111 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +414 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/types.d.ts +69 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cli/args.d.ts +4 -37
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +3 -4
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.d.ts +0 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +14 -20
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +14 -20
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +33 -31
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +69 -33
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +14 -16
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +30 -13
- package/dist/cookies/parser.js.map +1 -1
- package/dist/cookies/psl-data.d.ts +1 -1
- package/dist/cookies/psl-data.js +1 -1
- package/dist/cookies/public-suffix.d.ts +5 -27
- package/dist/cookies/public-suffix.d.ts.map +1 -1
- package/dist/cookies/public-suffix.js +5 -37
- package/dist/cookies/public-suffix.js.map +1 -1
- package/dist/core/auth.d.ts +30 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +34 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/client.d.ts +28 -40
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +34 -41
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +64 -88
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +64 -88
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +63 -85
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +64 -59
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +70 -52
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +81 -70
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +198 -71
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +44 -42
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +47 -58
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +59 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +99 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +39 -0
- package/dist/dns/codec.d.ts.map +1 -0
- package/dist/dns/codec.js +238 -0
- package/dist/dns/codec.js.map +1 -0
- package/dist/dns/doh-resolver.d.ts +38 -0
- package/dist/dns/doh-resolver.d.ts.map +1 -0
- package/dist/dns/doh-resolver.js +191 -0
- package/dist/dns/doh-resolver.js.map +1 -0
- package/dist/dns/dot-resolver.d.ts +89 -0
- package/dist/dns/dot-resolver.d.ts.map +1 -0
- package/dist/dns/dot-resolver.js +158 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +40 -0
- package/dist/dns/https-rr.d.ts.map +1 -0
- package/dist/dns/https-rr.js +109 -0
- package/dist/dns/https-rr.js.map +1 -0
- package/dist/dns/types.d.ts +82 -0
- package/dist/dns/types.d.ts.map +1 -0
- package/dist/dns/types.js +23 -0
- package/dist/dns/types.js.map +1 -0
- package/dist/fingerprints/akamai.d.ts +3 -11
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +3 -11
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +6 -14
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +6 -14
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts +56 -71
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +58 -71
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +12 -30
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +12 -30
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/ja4.d.ts +18 -0
- package/dist/fingerprints/ja4.d.ts.map +1 -0
- package/dist/fingerprints/ja4.js +83 -0
- package/dist/fingerprints/ja4.js.map +1 -0
- package/dist/fingerprints/profiles/chrome.d.ts +18 -21
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +35 -31
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +7 -10
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +7 -10
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +8 -11
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +8 -11
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +11 -14
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +11 -14
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +5 -8
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +5 -8
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +42 -73
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/hsts/store.d.ts +39 -0
- package/dist/hsts/store.d.ts.map +1 -0
- package/dist/hsts/store.js +163 -0
- package/dist/hsts/store.js.map +1 -0
- package/dist/hsts/types.d.ts +24 -0
- package/dist/hsts/types.d.ts.map +1 -0
- package/dist/hsts/types.js +2 -0
- package/dist/hsts/types.js.map +1 -0
- package/dist/http/alt-svc.d.ts +67 -0
- package/dist/http/alt-svc.d.ts.map +1 -0
- package/dist/http/alt-svc.js +186 -0
- package/dist/http/alt-svc.js.map +1 -0
- package/dist/http/early-hints.d.ts +23 -0
- package/dist/http/early-hints.d.ts.map +1 -0
- package/dist/http/early-hints.js +33 -0
- package/dist/http/early-hints.js.map +1 -0
- package/dist/http/form-data.d.ts +17 -35
- package/dist/http/form-data.d.ts.map +1 -1
- package/dist/http/form-data.js +12 -34
- package/dist/http/form-data.js.map +1 -1
- package/dist/http/h1/client.d.ts +14 -26
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +29 -22
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +10 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +10 -17
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +22 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +15 -47
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +18 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +29 -64
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +53 -84
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +48 -76
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +16 -35
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +16 -35
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/h3/detection.d.ts +15 -0
- package/dist/http/h3/detection.d.ts.map +1 -0
- package/dist/http/h3/detection.js +41 -0
- package/dist/http/h3/detection.js.map +1 -0
- package/dist/http/negotiator.d.ts +43 -33
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +99 -41
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +34 -64
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +22 -41
- package/dist/http/pool.js.map +1 -1
- package/dist/http/resumable-upload.d.ts +76 -0
- package/dist/http/resumable-upload.d.ts.map +1 -0
- package/dist/http/resumable-upload.js +104 -0
- package/dist/http/resumable-upload.js.map +1 -0
- package/dist/http/trailers.d.ts +29 -0
- package/dist/http/trailers.d.ts.map +1 -0
- package/dist/http/trailers.js +57 -0
- package/dist/http/trailers.js.map +1 -0
- package/dist/index.d.ts +36 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/interceptor.d.ts +13 -32
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js +11 -16
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +8 -17
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +15 -12
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry-after.d.ts +15 -0
- package/dist/middleware/retry-after.d.ts.map +1 -0
- package/dist/middleware/retry-after.js +36 -0
- package/dist/middleware/retry-after.js.map +1 -0
- package/dist/middleware/retry.d.ts +9 -18
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +12 -9
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/auth.d.ts +73 -0
- package/dist/proxy/auth.d.ts.map +1 -0
- package/dist/proxy/auth.js +128 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +11 -0
- package/dist/proxy/env-proxy.d.ts.map +1 -0
- package/dist/proxy/env-proxy.js +56 -0
- package/dist/proxy/env-proxy.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +13 -18
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +24 -14
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +13 -20
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +6 -9
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +47 -0
- package/dist/sse/parser.d.ts.map +1 -0
- package/dist/sse/parser.js +139 -0
- package/dist/sse/parser.js.map +1 -0
- package/dist/tls/constants.d.ts +15 -74
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +15 -74
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/ct.d.ts +78 -0
- package/dist/tls/ct.d.ts.map +1 -0
- package/dist/tls/ct.js +175 -0
- package/dist/tls/ct.js.map +1 -0
- package/dist/tls/early-data.d.ts +45 -0
- package/dist/tls/early-data.d.ts.map +1 -0
- package/dist/tls/early-data.js +46 -0
- package/dist/tls/early-data.js.map +1 -0
- package/dist/tls/ech.d.ts +130 -0
- package/dist/tls/ech.d.ts.map +1 -0
- package/dist/tls/ech.js +353 -0
- package/dist/tls/ech.js.map +1 -0
- package/dist/tls/keylog.d.ts +34 -0
- package/dist/tls/keylog.d.ts.map +1 -0
- package/dist/tls/keylog.js +64 -0
- package/dist/tls/keylog.js.map +1 -0
- package/dist/tls/node-engine.d.ts +15 -14
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +54 -14
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/ocsp.d.ts +55 -0
- package/dist/tls/ocsp.d.ts.map +1 -0
- package/dist/tls/ocsp.js +131 -0
- package/dist/tls/ocsp.js.map +1 -0
- package/dist/tls/pin-verification.d.ts +10 -0
- package/dist/tls/pin-verification.d.ts.map +1 -0
- package/dist/tls/pin-verification.js +28 -0
- package/dist/tls/pin-verification.js.map +1 -0
- package/dist/tls/session-cache.d.ts +58 -0
- package/dist/tls/session-cache.d.ts.map +1 -0
- package/dist/tls/session-cache.js +76 -0
- package/dist/tls/session-cache.js.map +1 -0
- package/dist/tls/stealth/client-hello.d.ts +34 -32
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +116 -11
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +5 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +163 -47
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +23 -32
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +112 -27
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +59 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +46 -58
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +52 -75
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +47 -63
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/stealth/tls12-handshake.d.ts +30 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -0
- package/dist/tls/stealth/tls12-handshake.js +470 -0
- package/dist/tls/stealth/tls12-handshake.js.map +1 -0
- package/dist/tls/types.d.ts +46 -48
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/buffer-reader.d.ts +26 -81
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js +26 -81
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts +30 -66
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +30 -66
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/compression.d.ts +18 -0
- package/dist/utils/compression.d.ts.map +1 -0
- package/dist/utils/compression.js +34 -0
- package/dist/utils/compression.js.map +1 -0
- package/dist/utils/dictionary-transport.d.ts +97 -0
- package/dist/utils/dictionary-transport.d.ts.map +1 -0
- package/dist/utils/dictionary-transport.js +171 -0
- package/dist/utils/dictionary-transport.js.map +1 -0
- package/dist/utils/encoding.d.ts +12 -28
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +77 -40
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +20 -7
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +57 -25
- package/dist/utils/happy-eyeballs.js.map +1 -1
- package/dist/utils/logger.d.ts +54 -81
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +92 -64
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/tcp-fast-open.d.ts +30 -0
- package/dist/utils/tcp-fast-open.d.ts.map +1 -0
- package/dist/utils/tcp-fast-open.js +36 -0
- package/dist/utils/tcp-fast-open.js.map +1 -0
- package/dist/utils/url.d.ts +18 -25
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +18 -25
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +35 -52
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +92 -37
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +27 -42
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +25 -37
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +53 -0
- package/dist/ws/permessage-deflate.d.ts.map +1 -0
- package/dist/ws/permessage-deflate.js +140 -0
- package/dist/ws/permessage-deflate.js.map +1 -0
- package/package.json +62 -62
|
@@ -1,53 +1,35 @@
|
|
|
1
1
|
const INITIAL_CAPACITY = 1024;
|
|
2
2
|
const GROWTH_FACTOR = 2;
|
|
3
3
|
const MAX_CAPACITY = 256 * 1024 * 1024;
|
|
4
|
-
/**
|
|
5
|
-
* Growable binary buffer writer that serializes typed values in big-endian byte
|
|
6
|
-
* order. The internal buffer doubles in capacity as needed. Call
|
|
7
|
-
* {@link BufferWriter.toBuffer} to obtain the written bytes as a new `Buffer`.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* const w = new BufferWriter();
|
|
11
|
-
* w.writeUInt8(0x16);
|
|
12
|
-
* w.writeUInt16(0x0303);
|
|
13
|
-
* w.writeVector16(data);
|
|
14
|
-
* return w.toBuffer();
|
|
15
|
-
*/
|
|
4
|
+
/** Auto-growing big-endian buffer builder. */
|
|
16
5
|
export class BufferWriter {
|
|
17
6
|
_buf;
|
|
18
7
|
_pos;
|
|
19
8
|
/**
|
|
20
|
-
*
|
|
9
|
+
* Create a writer with the given initial capacity.
|
|
21
10
|
*
|
|
22
|
-
* @param {number} [capacity
|
|
11
|
+
* @param {number} [capacity] - Initial buffer allocation in bytes.
|
|
23
12
|
*/
|
|
24
13
|
constructor(capacity = INITIAL_CAPACITY) {
|
|
25
14
|
this._buf = Buffer.allocUnsafe(capacity);
|
|
26
15
|
this._pos = 0;
|
|
27
16
|
}
|
|
28
|
-
/** Current write position (
|
|
17
|
+
/** Current write position (identical to the number of bytes written). */
|
|
29
18
|
get position() {
|
|
30
19
|
return this._pos;
|
|
31
20
|
}
|
|
32
|
-
/** Number of bytes
|
|
21
|
+
/** Number of bytes written so far. */
|
|
33
22
|
get length() {
|
|
34
23
|
return this._pos;
|
|
35
24
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Returns a copy of the written bytes as a new `Buffer`. The returned buffer
|
|
38
|
-
* contains only the bytes that have been written, regardless of the internal
|
|
39
|
-
* capacity.
|
|
40
|
-
*
|
|
41
|
-
* @returns {Buffer} Copy of all written data.
|
|
42
|
-
*/
|
|
25
|
+
/** Copy the written region into a new buffer and return it. */
|
|
43
26
|
toBuffer() {
|
|
44
27
|
return Buffer.from(this._buf.subarray(0, this._pos));
|
|
45
28
|
}
|
|
46
29
|
/**
|
|
47
|
-
*
|
|
30
|
+
* Write an unsigned 8-bit integer.
|
|
48
31
|
*
|
|
49
|
-
* @param {number} value -
|
|
50
|
-
* @returns {this} This instance for chaining.
|
|
32
|
+
* @param {number} value - Value to write.
|
|
51
33
|
*/
|
|
52
34
|
writeUInt8(value) {
|
|
53
35
|
this.ensureCapacity(1);
|
|
@@ -56,10 +38,9 @@ export class BufferWriter {
|
|
|
56
38
|
return this;
|
|
57
39
|
}
|
|
58
40
|
/**
|
|
59
|
-
*
|
|
41
|
+
* Write an unsigned 16-bit big-endian integer.
|
|
60
42
|
*
|
|
61
|
-
* @param {number} value -
|
|
62
|
-
* @returns {this} This instance for chaining.
|
|
43
|
+
* @param {number} value - Value to write.
|
|
63
44
|
*/
|
|
64
45
|
writeUInt16(value) {
|
|
65
46
|
this.ensureCapacity(2);
|
|
@@ -68,10 +49,9 @@ export class BufferWriter {
|
|
|
68
49
|
return this;
|
|
69
50
|
}
|
|
70
51
|
/**
|
|
71
|
-
*
|
|
52
|
+
* Write an unsigned 24-bit big-endian integer.
|
|
72
53
|
*
|
|
73
|
-
* @param {number} value -
|
|
74
|
-
* @returns {this} This instance for chaining.
|
|
54
|
+
* @param {number} value - Value to write.
|
|
75
55
|
*/
|
|
76
56
|
writeUInt24(value) {
|
|
77
57
|
this.ensureCapacity(3);
|
|
@@ -82,10 +62,9 @@ export class BufferWriter {
|
|
|
82
62
|
return this;
|
|
83
63
|
}
|
|
84
64
|
/**
|
|
85
|
-
*
|
|
65
|
+
* Write an unsigned 32-bit big-endian integer.
|
|
86
66
|
*
|
|
87
|
-
* @param {number} value -
|
|
88
|
-
* @returns {this} This instance for chaining.
|
|
67
|
+
* @param {number} value - Value to write.
|
|
89
68
|
*/
|
|
90
69
|
writeUInt32(value) {
|
|
91
70
|
this.ensureCapacity(4);
|
|
@@ -94,10 +73,9 @@ export class BufferWriter {
|
|
|
94
73
|
return this;
|
|
95
74
|
}
|
|
96
75
|
/**
|
|
97
|
-
*
|
|
76
|
+
* Write raw bytes into the buffer.
|
|
98
77
|
*
|
|
99
|
-
* @param {Buffer | Uint8Array} data -
|
|
100
|
-
* @returns {this} This instance for chaining.
|
|
78
|
+
* @param {Buffer | Uint8Array} data - Bytes to append.
|
|
101
79
|
*/
|
|
102
80
|
writeBytes(data) {
|
|
103
81
|
this.ensureCapacity(data.length);
|
|
@@ -111,12 +89,9 @@ export class BufferWriter {
|
|
|
111
89
|
return this;
|
|
112
90
|
}
|
|
113
91
|
/**
|
|
114
|
-
*
|
|
115
|
-
* Equivalent to `writeUInt8(data.length)` followed by `writeBytes(data)`.
|
|
92
|
+
* Write a length-prefixed vector with a 1-byte length prefix.
|
|
116
93
|
*
|
|
117
|
-
* @param {Buffer | Uint8Array} data - Data to write
|
|
118
|
-
* @returns {this} This instance for chaining.
|
|
119
|
-
* @throws {RangeError} If `data.length` exceeds 255.
|
|
94
|
+
* @param {Buffer | Uint8Array} data - Data to write.
|
|
120
95
|
*/
|
|
121
96
|
writeVector8(data) {
|
|
122
97
|
if (data.length > 0xff) {
|
|
@@ -127,12 +102,9 @@ export class BufferWriter {
|
|
|
127
102
|
return this;
|
|
128
103
|
}
|
|
129
104
|
/**
|
|
130
|
-
*
|
|
131
|
-
* Equivalent to `writeUInt16(data.length)` followed by `writeBytes(data)`.
|
|
105
|
+
* Write a length-prefixed vector with a 2-byte big-endian length prefix.
|
|
132
106
|
*
|
|
133
|
-
* @param {Buffer | Uint8Array} data - Data to write
|
|
134
|
-
* @returns {this} This instance for chaining.
|
|
135
|
-
* @throws {RangeError} If `data.length` exceeds 65 535.
|
|
107
|
+
* @param {Buffer | Uint8Array} data - Data to write.
|
|
136
108
|
*/
|
|
137
109
|
writeVector16(data) {
|
|
138
110
|
if (data.length > 0xffff) {
|
|
@@ -143,12 +115,9 @@ export class BufferWriter {
|
|
|
143
115
|
return this;
|
|
144
116
|
}
|
|
145
117
|
/**
|
|
146
|
-
*
|
|
147
|
-
* Equivalent to `writeUInt24(data.length)` followed by `writeBytes(data)`.
|
|
118
|
+
* Write a length-prefixed vector with a 3-byte big-endian length prefix.
|
|
148
119
|
*
|
|
149
|
-
* @param {Buffer | Uint8Array} data - Data to write
|
|
150
|
-
* @returns {this} This instance for chaining.
|
|
151
|
-
* @throws {RangeError} If `data.length` exceeds 16 777 215.
|
|
120
|
+
* @param {Buffer | Uint8Array} data - Data to write.
|
|
152
121
|
*/
|
|
153
122
|
writeVector24(data) {
|
|
154
123
|
if (data.length > 0xffffff) {
|
|
@@ -159,13 +128,10 @@ export class BufferWriter {
|
|
|
159
128
|
return this;
|
|
160
129
|
}
|
|
161
130
|
/**
|
|
162
|
-
*
|
|
163
|
-
* advances the cursor, and returns the byte offset of the reserved region.
|
|
164
|
-
* Use this to write a length prefix, then later patch it with
|
|
165
|
-
* {@link BufferWriter.patchUInt16} or {@link BufferWriter.patchUInt24}.
|
|
131
|
+
* Reserve space and return its offset for later patching.
|
|
166
132
|
*
|
|
167
133
|
* @param {number} size - Number of bytes to reserve.
|
|
168
|
-
* @returns {number}
|
|
134
|
+
* @returns {number} Starting offset of the reserved region.
|
|
169
135
|
*/
|
|
170
136
|
reserve(size) {
|
|
171
137
|
this.ensureCapacity(size);
|
|
@@ -174,21 +140,19 @@ export class BufferWriter {
|
|
|
174
140
|
return offset;
|
|
175
141
|
}
|
|
176
142
|
/**
|
|
177
|
-
*
|
|
178
|
-
* Does not advance the write cursor.
|
|
143
|
+
* Overwrite a previously reserved 16-bit value.
|
|
179
144
|
*
|
|
180
|
-
* @param {number} offset - Byte offset
|
|
181
|
-
* @param {number} value
|
|
145
|
+
* @param {number} offset - Byte offset to patch.
|
|
146
|
+
* @param {number} value - New 16-bit value.
|
|
182
147
|
*/
|
|
183
148
|
patchUInt16(offset, value) {
|
|
184
149
|
this._buf.writeUInt16BE(value, offset);
|
|
185
150
|
}
|
|
186
151
|
/**
|
|
187
|
-
*
|
|
188
|
-
* Does not advance the write cursor.
|
|
152
|
+
* Overwrite a previously reserved 24-bit value.
|
|
189
153
|
*
|
|
190
|
-
* @param {number} offset - Byte offset
|
|
191
|
-
* @param {number} value
|
|
154
|
+
* @param {number} offset - Byte offset to patch.
|
|
155
|
+
* @param {number} value - New 24-bit value.
|
|
192
156
|
*/
|
|
193
157
|
patchUInt24(offset, value) {
|
|
194
158
|
this._buf[offset] = (value >>> 16) & 0xff;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer-writer.js","sourceRoot":"","sources":["../../src/utils/buffer-writer.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAEvC
|
|
1
|
+
{"version":3,"file":"buffer-writer.js","sourceRoot":"","sources":["../../src/utils/buffer-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Supported request body compression encodings. */
|
|
2
|
+
export type RequestEncoding = "gzip" | "deflate" | "br";
|
|
3
|
+
/**
|
|
4
|
+
* Compress a request body buffer with the specified encoding.
|
|
5
|
+
*
|
|
6
|
+
* @param {Buffer} body - Uncompressed body bytes.
|
|
7
|
+
* @param {RequestEncoding} encoding - Compression algorithm.
|
|
8
|
+
* @returns {Promise<Buffer>} Compressed buffer.
|
|
9
|
+
*/
|
|
10
|
+
export declare function compressBody(body: Buffer, encoding: RequestEncoding): Promise<Buffer>;
|
|
11
|
+
/**
|
|
12
|
+
* Determine whether a body is large enough to benefit from compression.
|
|
13
|
+
*
|
|
14
|
+
* @param {number} bodySize - Body size in bytes.
|
|
15
|
+
* @returns {boolean} `true` if the body meets the minimum threshold.
|
|
16
|
+
*/
|
|
17
|
+
export declare function shouldCompress(bodySize: number): boolean;
|
|
18
|
+
//# sourceMappingURL=compression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"AAOA,oDAAoD;AACpD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;AAExD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAW3F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as zlib from "node:zlib";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const gzipAsync = promisify(zlib.gzip);
|
|
4
|
+
const deflateAsync = promisify(zlib.deflate);
|
|
5
|
+
const brotliCompressAsync = promisify(zlib.brotliCompress);
|
|
6
|
+
/**
|
|
7
|
+
* Compress a request body buffer with the specified encoding.
|
|
8
|
+
*
|
|
9
|
+
* @param {Buffer} body - Uncompressed body bytes.
|
|
10
|
+
* @param {RequestEncoding} encoding - Compression algorithm.
|
|
11
|
+
* @returns {Promise<Buffer>} Compressed buffer.
|
|
12
|
+
*/
|
|
13
|
+
export async function compressBody(body, encoding) {
|
|
14
|
+
switch (encoding) {
|
|
15
|
+
case "gzip":
|
|
16
|
+
return gzipAsync(body);
|
|
17
|
+
case "deflate":
|
|
18
|
+
return deflateAsync(body);
|
|
19
|
+
case "br":
|
|
20
|
+
return brotliCompressAsync(body);
|
|
21
|
+
default:
|
|
22
|
+
return body;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Determine whether a body is large enough to benefit from compression.
|
|
27
|
+
*
|
|
28
|
+
* @param {number} bodySize - Body size in bytes.
|
|
29
|
+
* @returns {boolean} `true` if the body meets the minimum threshold.
|
|
30
|
+
*/
|
|
31
|
+
export function shouldCompress(bodySize) {
|
|
32
|
+
return bodySize >= 1024;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=compression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAK3D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,QAAyB;IACxE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,IAAI,CAAoB,CAAC;QAC5C,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,IAAI,CAAoB,CAAC;QAC/C,KAAK,IAAI;YACP,OAAO,mBAAmB,CAAC,IAAI,CAAoB,CAAC;QACtD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,QAAQ,IAAI,IAAI,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/** Stored compression dictionary with associated metadata. */
|
|
2
|
+
export interface CompressionDictionary {
|
|
3
|
+
/** SHA-256 hash of the dictionary data in structured field format. */
|
|
4
|
+
hash: string;
|
|
5
|
+
/** URL from which the dictionary was fetched. */
|
|
6
|
+
url: string;
|
|
7
|
+
/** Raw dictionary bytes. */
|
|
8
|
+
data: Buffer;
|
|
9
|
+
/** Timestamp (ms since epoch) when the dictionary was stored. */
|
|
10
|
+
storedAt: number;
|
|
11
|
+
/** URL match pattern from the `Use-As-Dictionary` header. */
|
|
12
|
+
matchPattern?: string;
|
|
13
|
+
/** Expiry timestamp (ms since epoch). */
|
|
14
|
+
expiresAt?: number;
|
|
15
|
+
}
|
|
16
|
+
/** Configuration for the compression dictionary store. */
|
|
17
|
+
export interface DictionaryConfig {
|
|
18
|
+
/** Maximum number of dictionaries to cache. */
|
|
19
|
+
maxEntries?: number;
|
|
20
|
+
/** Maximum individual dictionary size in bytes. */
|
|
21
|
+
maxDictionarySize?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse a `Use-As-Dictionary` response header.
|
|
25
|
+
*
|
|
26
|
+
* @param {string} header - Raw header value.
|
|
27
|
+
* @returns {{ match?: string; matchDest?: string[]; id?: string } | null} Parsed fields, or `null` if the header is empty.
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseUseAsDictionary(header: string): {
|
|
30
|
+
match?: string;
|
|
31
|
+
matchDest?: string[];
|
|
32
|
+
id?: string;
|
|
33
|
+
} | null;
|
|
34
|
+
/**
|
|
35
|
+
* Compute the SHA-256 structured hash of dictionary data.
|
|
36
|
+
*
|
|
37
|
+
* @param {Buffer} data - Raw dictionary bytes.
|
|
38
|
+
* @returns {string} Hash string in structured field byte-sequence format.
|
|
39
|
+
*/
|
|
40
|
+
export declare function computeDictionaryHash(data: Buffer): string;
|
|
41
|
+
/**
|
|
42
|
+
* Build an `Available-Dictionary` request header value.
|
|
43
|
+
*
|
|
44
|
+
* @param {string} hash - Dictionary hash.
|
|
45
|
+
* @returns {string} Header value string.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildAvailableDictionaryHeader(hash: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Append dictionary-based encodings to an `Accept-Encoding` header.
|
|
50
|
+
*
|
|
51
|
+
* @param {string} [existingEncoding] - Current `Accept-Encoding` value.
|
|
52
|
+
* @returns {string} Updated encoding string with `dcb` and `dcz` appended.
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildDictionaryAcceptEncoding(existingEncoding?: string): string;
|
|
55
|
+
/** Cache of compression dictionaries for shared dictionary transport. */
|
|
56
|
+
export declare class DictionaryStore {
|
|
57
|
+
private readonly dictionaries;
|
|
58
|
+
private readonly maxEntries;
|
|
59
|
+
private readonly maxDictionarySize;
|
|
60
|
+
/**
|
|
61
|
+
* Create a new dictionary store.
|
|
62
|
+
*
|
|
63
|
+
* @param {DictionaryConfig} [config] - Cache size and dictionary size limits.
|
|
64
|
+
*/
|
|
65
|
+
constructor(config?: DictionaryConfig);
|
|
66
|
+
/**
|
|
67
|
+
* Store a dictionary response.
|
|
68
|
+
*
|
|
69
|
+
* @param {string} url - URL the dictionary was fetched from.
|
|
70
|
+
* @param {Buffer} data - Raw dictionary bytes.
|
|
71
|
+
* @param {{ match?: string; id?: string }} [metadata] - Match pattern and ID from the response header.
|
|
72
|
+
* @param {number} [maxAge] - Maximum age in seconds.
|
|
73
|
+
*/
|
|
74
|
+
store(url: string, data: Buffer, metadata?: {
|
|
75
|
+
match?: string;
|
|
76
|
+
id?: string;
|
|
77
|
+
}, maxAge?: number): void;
|
|
78
|
+
/**
|
|
79
|
+
* Find a dictionary whose match pattern covers the given request URL.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} requestUrl - URL being requested.
|
|
82
|
+
* @returns {CompressionDictionary | undefined} Matching dictionary, or `undefined` if none found.
|
|
83
|
+
*/
|
|
84
|
+
findForUrl(requestUrl: string): CompressionDictionary | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Retrieve a dictionary by its hash.
|
|
87
|
+
*
|
|
88
|
+
* @param {string} hash - Dictionary hash string.
|
|
89
|
+
* @returns {CompressionDictionary | undefined} Dictionary entry, or `undefined` if not found.
|
|
90
|
+
*/
|
|
91
|
+
getByHash(hash: string): CompressionDictionary | undefined;
|
|
92
|
+
/** Number of dictionaries currently stored. */
|
|
93
|
+
get size(): number;
|
|
94
|
+
/** Remove all stored dictionaries. */
|
|
95
|
+
clear(): void;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=dictionary-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dictionary-transport.d.ts","sourceRoot":"","sources":["../../src/utils/dictionary-transport.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,IAAI,CA2BP;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/E;AAED,yEAAyE;AACzE,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IACzE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C;;;;OAIG;gBACS,MAAM,CAAC,EAAE,gBAAgB;IAKrC;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA2BnG;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAmBjE;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAI1D,+CAA+C;IAC/C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,sCAAsC;IACtC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* Parse a `Use-As-Dictionary` response header.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} header - Raw header value.
|
|
6
|
+
* @returns {{ match?: string; matchDest?: string[]; id?: string } | null} Parsed fields, or `null` if the header is empty.
|
|
7
|
+
*/
|
|
8
|
+
export function parseUseAsDictionary(header) {
|
|
9
|
+
if (!header)
|
|
10
|
+
return null;
|
|
11
|
+
const result = {};
|
|
12
|
+
const matchRegex = /match="([^"]+)"/;
|
|
13
|
+
const matchMatch = header.match(matchRegex);
|
|
14
|
+
if (matchMatch) {
|
|
15
|
+
result.match = matchMatch[1];
|
|
16
|
+
}
|
|
17
|
+
const destRegex = /match-dest=\(([^)]*)\)/;
|
|
18
|
+
const destMatch = header.match(destRegex);
|
|
19
|
+
if (destMatch) {
|
|
20
|
+
result.matchDest = destMatch[1]
|
|
21
|
+
.split(/\s+/)
|
|
22
|
+
.map((s) => s.replace(/"/g, ""))
|
|
23
|
+
.filter(Boolean);
|
|
24
|
+
}
|
|
25
|
+
const idRegex = /id="([^"]+)"/;
|
|
26
|
+
const idMatch = header.match(idRegex);
|
|
27
|
+
if (idMatch) {
|
|
28
|
+
result.id = idMatch[1];
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compute the SHA-256 structured hash of dictionary data.
|
|
34
|
+
*
|
|
35
|
+
* @param {Buffer} data - Raw dictionary bytes.
|
|
36
|
+
* @returns {string} Hash string in structured field byte-sequence format.
|
|
37
|
+
*/
|
|
38
|
+
export function computeDictionaryHash(data) {
|
|
39
|
+
const hash = createHash("sha256").update(data).digest("base64");
|
|
40
|
+
return `:${hash}:`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build an `Available-Dictionary` request header value.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} hash - Dictionary hash.
|
|
46
|
+
* @returns {string} Header value string.
|
|
47
|
+
*/
|
|
48
|
+
export function buildAvailableDictionaryHeader(hash) {
|
|
49
|
+
return hash;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Append dictionary-based encodings to an `Accept-Encoding` header.
|
|
53
|
+
*
|
|
54
|
+
* @param {string} [existingEncoding] - Current `Accept-Encoding` value.
|
|
55
|
+
* @returns {string} Updated encoding string with `dcb` and `dcz` appended.
|
|
56
|
+
*/
|
|
57
|
+
export function buildDictionaryAcceptEncoding(existingEncoding) {
|
|
58
|
+
const base = existingEncoding ?? "gzip, deflate, br";
|
|
59
|
+
const encodings = base.split(",").map((s) => s.trim());
|
|
60
|
+
if (!encodings.includes("dcb"))
|
|
61
|
+
encodings.push("dcb");
|
|
62
|
+
if (!encodings.includes("dcz"))
|
|
63
|
+
encodings.push("dcz");
|
|
64
|
+
return encodings.join(", ");
|
|
65
|
+
}
|
|
66
|
+
/** Cache of compression dictionaries for shared dictionary transport. */
|
|
67
|
+
export class DictionaryStore {
|
|
68
|
+
dictionaries = new Map();
|
|
69
|
+
maxEntries;
|
|
70
|
+
maxDictionarySize;
|
|
71
|
+
/**
|
|
72
|
+
* Create a new dictionary store.
|
|
73
|
+
*
|
|
74
|
+
* @param {DictionaryConfig} [config] - Cache size and dictionary size limits.
|
|
75
|
+
*/
|
|
76
|
+
constructor(config) {
|
|
77
|
+
this.maxEntries = config?.maxEntries ?? 50;
|
|
78
|
+
this.maxDictionarySize = config?.maxDictionarySize ?? 10 * 1024 * 1024;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Store a dictionary response.
|
|
82
|
+
*
|
|
83
|
+
* @param {string} url - URL the dictionary was fetched from.
|
|
84
|
+
* @param {Buffer} data - Raw dictionary bytes.
|
|
85
|
+
* @param {{ match?: string; id?: string }} [metadata] - Match pattern and ID from the response header.
|
|
86
|
+
* @param {number} [maxAge] - Maximum age in seconds.
|
|
87
|
+
*/
|
|
88
|
+
store(url, data, metadata, maxAge) {
|
|
89
|
+
if (data.length > this.maxDictionarySize)
|
|
90
|
+
return;
|
|
91
|
+
if (this.dictionaries.size >= this.maxEntries) {
|
|
92
|
+
let oldest;
|
|
93
|
+
let oldestTime = Infinity;
|
|
94
|
+
for (const [key, entry] of this.dictionaries) {
|
|
95
|
+
if (entry.storedAt < oldestTime) {
|
|
96
|
+
oldestTime = entry.storedAt;
|
|
97
|
+
oldest = key;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (oldest)
|
|
101
|
+
this.dictionaries.delete(oldest);
|
|
102
|
+
}
|
|
103
|
+
const hash = computeDictionaryHash(data);
|
|
104
|
+
const now = Date.now();
|
|
105
|
+
this.dictionaries.set(hash, {
|
|
106
|
+
hash,
|
|
107
|
+
url,
|
|
108
|
+
data,
|
|
109
|
+
storedAt: now,
|
|
110
|
+
matchPattern: metadata?.match,
|
|
111
|
+
expiresAt: maxAge ? now + maxAge * 1000 : undefined,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Find a dictionary whose match pattern covers the given request URL.
|
|
116
|
+
*
|
|
117
|
+
* @param {string} requestUrl - URL being requested.
|
|
118
|
+
* @returns {CompressionDictionary | undefined} Matching dictionary, or `undefined` if none found.
|
|
119
|
+
*/
|
|
120
|
+
findForUrl(requestUrl) {
|
|
121
|
+
const now = Date.now();
|
|
122
|
+
for (const dict of this.dictionaries.values()) {
|
|
123
|
+
if (dict.expiresAt && dict.expiresAt < now) {
|
|
124
|
+
this.dictionaries.delete(dict.hash);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (dict.matchPattern) {
|
|
128
|
+
if (matchesPattern(requestUrl, dict.matchPattern, dict.url)) {
|
|
129
|
+
return dict;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Retrieve a dictionary by its hash.
|
|
137
|
+
*
|
|
138
|
+
* @param {string} hash - Dictionary hash string.
|
|
139
|
+
* @returns {CompressionDictionary | undefined} Dictionary entry, or `undefined` if not found.
|
|
140
|
+
*/
|
|
141
|
+
getByHash(hash) {
|
|
142
|
+
return this.dictionaries.get(hash);
|
|
143
|
+
}
|
|
144
|
+
/** Number of dictionaries currently stored. */
|
|
145
|
+
get size() {
|
|
146
|
+
return this.dictionaries.size;
|
|
147
|
+
}
|
|
148
|
+
/** Remove all stored dictionaries. */
|
|
149
|
+
clear() {
|
|
150
|
+
this.dictionaries.clear();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function matchesPattern(requestUrl, pattern, dictionaryUrl) {
|
|
154
|
+
try {
|
|
155
|
+
const dictBase = new URL(dictionaryUrl);
|
|
156
|
+
const reqUrl = new URL(requestUrl);
|
|
157
|
+
if (reqUrl.origin !== dictBase.origin)
|
|
158
|
+
return false;
|
|
159
|
+
if (pattern === "*" || pattern === "/*")
|
|
160
|
+
return true;
|
|
161
|
+
if (pattern.endsWith("*")) {
|
|
162
|
+
const prefix = pattern.slice(0, -1);
|
|
163
|
+
return reqUrl.pathname.startsWith(prefix);
|
|
164
|
+
}
|
|
165
|
+
return reqUrl.pathname === pattern;
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=dictionary-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dictionary-transport.js","sourceRoot":"","sources":["../../src/utils/dictionary-transport.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/encoding.d.ts
CHANGED
|
@@ -1,44 +1,28 @@
|
|
|
1
1
|
import { Transform } from "node:stream";
|
|
2
|
-
/**
|
|
3
|
-
* `true` when the current Node.js runtime provides native Zstandard
|
|
4
|
-
* decompression support (`zlib.zstdDecompress`). `false` on older Node.js
|
|
5
|
-
* versions that lack the API.
|
|
6
|
-
*/
|
|
2
|
+
/** Whether the current Node.js build supports zstd decompression. */
|
|
7
3
|
export declare const supportsZstd: boolean;
|
|
8
4
|
/**
|
|
9
|
-
*
|
|
10
|
-
* `contentEncoding`. Supports `gzip`, `x-gzip`, `deflate`, `br` (Brotli),
|
|
11
|
-
* `zstd` (when available), and `identity`. Unrecognized encodings are
|
|
12
|
-
* returned as-is.
|
|
5
|
+
* Decompress a response body according to `Content-Encoding` layers.
|
|
13
6
|
*
|
|
14
|
-
* @param {Buffer}
|
|
15
|
-
* @param {string | undefined} contentEncoding -
|
|
16
|
-
* @returns {Promise<Buffer>} Decompressed
|
|
7
|
+
* @param {Buffer} body - Compressed body bytes.
|
|
8
|
+
* @param {string | undefined} contentEncoding - Comma-separated encoding list.
|
|
9
|
+
* @returns {Promise<Buffer>} Decompressed buffer.
|
|
17
10
|
*/
|
|
18
11
|
export declare function decompressBody(body: Buffer, contentEncoding: string | undefined): Promise<Buffer>;
|
|
19
12
|
/**
|
|
20
|
-
*
|
|
21
|
-
* using the algorithm indicated by `contentEncoding`. Returns `null` when
|
|
22
|
-
* no transform is needed (unknown or `identity` encoding).
|
|
13
|
+
* Create a streaming decompressor for the given `Content-Encoding`.
|
|
23
14
|
*
|
|
24
|
-
* @param {string | undefined} contentEncoding -
|
|
25
|
-
* @returns {Transform | null}
|
|
15
|
+
* @param {string | undefined} contentEncoding - Comma-separated encoding list.
|
|
16
|
+
* @returns {Transform | null} Transform stream, or `null` if no decompression is needed.
|
|
26
17
|
*/
|
|
27
18
|
export declare function createDecompressStream(contentEncoding: string | undefined): Transform | null;
|
|
28
|
-
/**
|
|
29
|
-
* Returns the default `Accept-Encoding` header value supported by this
|
|
30
|
-
* Node.js runtime. Includes `zstd` when Zstandard is available.
|
|
31
|
-
*
|
|
32
|
-
* @returns {string} E.g. `"gzip, deflate, br, zstd"` or `"gzip, deflate, br"`.
|
|
33
|
-
*/
|
|
19
|
+
/** Return the default `Accept-Encoding` header value for this runtime. */
|
|
34
20
|
export declare function defaultAcceptEncoding(): string;
|
|
35
21
|
/**
|
|
36
|
-
*
|
|
37
|
-
* current runtime does not support Zstandard decompression. Otherwise returns
|
|
38
|
-
* the value unchanged.
|
|
22
|
+
* Strip unsupported encodings (e.g. `zstd`) from an `Accept-Encoding` value.
|
|
39
23
|
*
|
|
40
|
-
* @param {string} value -
|
|
41
|
-
* @returns {string} Sanitized
|
|
24
|
+
* @param {string} value - Original `Accept-Encoding` header value.
|
|
25
|
+
* @returns {string} Sanitized header value.
|
|
42
26
|
*/
|
|
43
27
|
export declare function sanitizeAcceptEncoding(value: string): string;
|
|
44
28
|
//# sourceMappingURL=encoding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/utils/encoding.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AASxC,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,OAAsC,CAAC;AAwClE;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAWvG;AA2BD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CA0C5F;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO5D"}
|