nlcurl 0.7.0 → 0.9.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 +149 -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 +75 -37
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +217 -85
- package/dist/cache/store.js.map +1 -1
- package/dist/cache/types.d.ts +10 -39
- package/dist/cache/types.d.ts.map +1 -1
- 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 +41 -40
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +65 -42
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +13 -17
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +23 -15
- 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 +61 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +159 -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 +31 -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 +33 -113
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +49 -66
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +45 -59
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +66 -78
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +136 -77
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +58 -43
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +141 -56
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/cache.d.ts +65 -0
- package/dist/dns/cache.d.ts.map +1 -0
- package/dist/dns/cache.js +119 -0
- package/dist/dns/cache.js.map +1 -0
- package/dist/dns/codec.d.ts +29 -19
- package/dist/dns/codec.d.ts.map +1 -1
- package/dist/dns/codec.js +73 -39
- package/dist/dns/codec.js.map +1 -1
- package/dist/dns/doh-resolver.d.ts +17 -31
- package/dist/dns/doh-resolver.d.ts.map +1 -1
- package/dist/dns/doh-resolver.js +47 -48
- package/dist/dns/doh-resolver.js.map +1 -1
- 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 +166 -0
- package/dist/dns/dot-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +19 -30
- package/dist/dns/https-rr.d.ts.map +1 -1
- package/dist/dns/https-rr.js +22 -40
- package/dist/dns/https-rr.js.map +1 -1
- package/dist/dns/types.d.ts +31 -59
- package/dist/dns/types.d.ts.map +1 -1
- package/dist/dns/types.js +3 -14
- package/dist/dns/types.js.map +1 -1
- 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 +81 -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 +19 -21
- package/dist/hsts/store.d.ts.map +1 -1
- package/dist/hsts/store.js +20 -28
- package/dist/hsts/store.js.map +1 -1
- package/dist/hsts/types.d.ts +10 -14
- package/dist/hsts/types.d.ts.map +1 -1
- package/dist/http/alt-svc.d.ts +27 -52
- package/dist/http/alt-svc.d.ts.map +1 -1
- package/dist/http/alt-svc.js +17 -67
- package/dist/http/alt-svc.js.map +1 -1
- 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 +14 -23
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +21 -17
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +56 -20
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +23 -59
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +61 -55
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +23 -59
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +107 -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 +20 -36
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +41 -36
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +25 -38
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +17 -38
- 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 +24 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/middleware/circuit-breaker.d.ts +44 -0
- package/dist/middleware/circuit-breaker.d.ts.map +1 -0
- package/dist/middleware/circuit-breaker.js +96 -0
- package/dist/middleware/circuit-breaker.js.map +1 -0
- 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 +11 -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 +129 -0
- package/dist/proxy/auth.js.map +1 -0
- package/dist/proxy/env-proxy.d.ts +5 -15
- package/dist/proxy/env-proxy.d.ts.map +1 -1
- package/dist/proxy/env-proxy.js +5 -23
- package/dist/proxy/env-proxy.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +12 -19
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +5 -8
- 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 +8 -10
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +16 -37
- package/dist/sse/parser.d.ts.map +1 -1
- package/dist/sse/parser.js +31 -28
- package/dist/sse/parser.js.map +1 -1
- package/dist/tls/constants.d.ts +21 -72
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +21 -72
- 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 +68 -85
- package/dist/tls/ech.d.ts.map +1 -1
- package/dist/tls/ech.js +54 -102
- package/dist/tls/ech.js.map +1 -1
- 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 +10 -17
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +41 -18
- 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 +5 -4
- package/dist/tls/pin-verification.d.ts.map +1 -1
- package/dist/tls/pin-verification.js +5 -11
- package/dist/tls/pin-verification.js.map +1 -1
- package/dist/tls/session-cache.d.ts +27 -39
- package/dist/tls/session-cache.d.ts.map +1 -1
- package/dist/tls/session-cache.js +20 -24
- package/dist/tls/session-cache.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +26 -45
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +15 -31
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +10 -15
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +98 -18
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +32 -31
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +74 -47
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +81 -86
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +70 -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 +16 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -1
- package/dist/tls/stealth/tls12-handshake.js +10 -2
- package/dist/tls/stealth/tls12-handshake.js.map +1 -1
- package/dist/tls/types.d.ts +46 -60
- 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 -30
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +15 -46
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +18 -8
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +19 -27
- 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 -53
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +96 -38
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +24 -41
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +26 -33
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +23 -28
- package/dist/ws/permessage-deflate.d.ts.map +1 -1
- package/dist/ws/permessage-deflate.js +18 -26
- package/dist/ws/permessage-deflate.js.map +1 -1
- package/package.json +2 -2
- package/dist/http/h3/detection.d.ts +0 -17
- package/dist/http/h3/detection.d.ts.map +0 -1
- package/dist/http/h3/detection.js +0 -59
- package/dist/http/h3/detection.js.map +0 -1
package/dist/http/form-data.js
CHANGED
|
@@ -1,56 +1,39 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
|
-
/**
|
|
3
|
-
* Builds a `multipart/form-data` request body per RFC 7578.
|
|
4
|
-
*
|
|
5
|
-
* Generates a cryptographically random boundary and serializes all fields
|
|
6
|
-
* into a single `Buffer` suitable for use as a request body. The
|
|
7
|
-
* corresponding `Content-Type` header (including the boundary parameter)
|
|
8
|
-
* is available via {@link FormData.contentType}.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* const form = new FormData();
|
|
13
|
-
* form.append("username", "alice");
|
|
14
|
-
* form.append("avatar", { data: avatarBuffer, filename: "avatar.png", contentType: "image/png" });
|
|
15
|
-
*
|
|
16
|
-
* const response = await post("https://example.com/upload", form);
|
|
17
|
-
* ```
|
|
18
|
-
*/
|
|
2
|
+
/** Multipart form-data encoder for HTTP request bodies. */
|
|
19
3
|
export class FormData {
|
|
20
4
|
fields = [];
|
|
21
5
|
boundary;
|
|
6
|
+
/** Create a new FormData instance with a random boundary. */
|
|
22
7
|
constructor() {
|
|
23
8
|
this.boundary = `----NLcURL${randomBytes(24).toString("hex")}`;
|
|
24
9
|
}
|
|
25
10
|
/**
|
|
26
|
-
*
|
|
11
|
+
* Append a field to the form.
|
|
27
12
|
*
|
|
28
|
-
* @param {string}
|
|
29
|
-
* @param {FormValue} value -
|
|
30
|
-
* @returns {this}
|
|
13
|
+
* @param {string} name - Field name.
|
|
14
|
+
* @param {FormValue} value - String value or file attachment.
|
|
15
|
+
* @returns {this} This instance for chaining.
|
|
31
16
|
*/
|
|
32
17
|
append(name, value) {
|
|
33
18
|
this.fields.push({ name, value });
|
|
34
19
|
return this;
|
|
35
20
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Returns the `Content-Type` header value including the boundary parameter.
|
|
38
|
-
* Must be set on the request for the server to parse the body correctly.
|
|
39
|
-
*/
|
|
21
|
+
/** Content-Type header value including the boundary parameter. */
|
|
40
22
|
get contentType() {
|
|
41
23
|
return `multipart/form-data; boundary=${this.boundary}`;
|
|
42
24
|
}
|
|
43
25
|
/**
|
|
44
|
-
*
|
|
26
|
+
* Return the multipart boundary string.
|
|
27
|
+
*
|
|
28
|
+
* @returns {string} The boundary delimiter.
|
|
45
29
|
*/
|
|
46
30
|
getBoundary() {
|
|
47
31
|
return this.boundary;
|
|
48
32
|
}
|
|
49
33
|
/**
|
|
50
|
-
*
|
|
51
|
-
* `multipart/form-data` format per RFC 7578.
|
|
34
|
+
* Encode all fields into a multipart form-data buffer.
|
|
52
35
|
*
|
|
53
|
-
* @returns {Buffer}
|
|
36
|
+
* @returns {Buffer} Wire-format multipart body.
|
|
54
37
|
*/
|
|
55
38
|
encode() {
|
|
56
39
|
const parts = [];
|
|
@@ -76,11 +59,6 @@ export class FormData {
|
|
|
76
59
|
return Buffer.concat(parts);
|
|
77
60
|
}
|
|
78
61
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Escapes double quotes and backslashes in header parameter values
|
|
81
|
-
* and strips control characters (\r, \n, \0) to prevent header injection
|
|
82
|
-
* in Content-Disposition fields.
|
|
83
|
-
*/
|
|
84
62
|
function escapeQuotes(str) {
|
|
85
63
|
return str
|
|
86
64
|
.replace(/[\r\n\0]/g, "")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-data.js","sourceRoot":"","sources":["../../src/http/form-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"form-data.js","sourceRoot":"","sources":["../../src/http/form-data.ts"],"names":[],"mappings":"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"}
|
package/dist/http/h1/client.d.ts
CHANGED
|
@@ -2,41 +2,29 @@ import type { Duplex } from "node:stream";
|
|
|
2
2
|
import type { NLcURLRequest } from "../../core/request.js";
|
|
3
3
|
import { NLcURLResponse } from "../../core/response.js";
|
|
4
4
|
import type { RequestTimings } from "../../core/request.js";
|
|
5
|
-
/**
|
|
6
|
-
* Options shared across all HTTP/1.1 client functions.
|
|
7
|
-
*
|
|
8
|
-
* @typedef {Object} H1ClientOptions
|
|
9
|
-
* @property {Array<[string,string]>} [defaultHeaders] - Profile-level headers prepended before request-specific headers.
|
|
10
|
-
*/
|
|
5
|
+
/** Options for the HTTP/1.1 client. */
|
|
11
6
|
export interface H1ClientOptions {
|
|
7
|
+
/** Default headers to include in every request. */
|
|
12
8
|
defaultHeaders?: Array<[string, string]>;
|
|
13
9
|
}
|
|
14
10
|
/**
|
|
15
|
-
*
|
|
16
|
-
* fully buffered response. Blocks until all response body bytes are received.
|
|
11
|
+
* Send an HTTP/1.1 request and buffer the entire response body.
|
|
17
12
|
*
|
|
18
|
-
* @param {Duplex}
|
|
19
|
-
* @param {NLcURLRequest}
|
|
20
|
-
* @param {H1ClientOptions}
|
|
21
|
-
* @param {Partial<RequestTimings>} [timings
|
|
22
|
-
* @returns {Promise<NLcURLResponse>}
|
|
23
|
-
* @throws {HTTPError} If the connection is closed before the response completes.
|
|
24
|
-
* @throws {TimeoutError} If the response timeout is exceeded.
|
|
13
|
+
* @param {Duplex} stream - Duplex stream (typically a TLS socket).
|
|
14
|
+
* @param {NLcURLRequest} request - Request to send.
|
|
15
|
+
* @param {H1ClientOptions} [options] - Client options.
|
|
16
|
+
* @param {Partial<RequestTimings>} [timings] - Partial timings object to populate.
|
|
17
|
+
* @returns {Promise<NLcURLResponse>} Buffered HTTP response.
|
|
25
18
|
*/
|
|
26
19
|
export declare function sendH1Request(stream: Duplex, request: NLcURLRequest, options?: H1ClientOptions, timings?: Partial<RequestTimings>): Promise<NLcURLResponse>;
|
|
27
20
|
/**
|
|
28
|
-
*
|
|
29
|
-
* streaming response whose body is available as a `Readable` stream on
|
|
30
|
-
* `response.body`. The headers are fully parsed before resolving;
|
|
31
|
-
* the body is streamed asynchronously.
|
|
21
|
+
* Send an HTTP/1.1 request with a streaming response body.
|
|
32
22
|
*
|
|
33
|
-
* @param {Duplex}
|
|
34
|
-
* @param {NLcURLRequest}
|
|
35
|
-
* @param {H1ClientOptions}
|
|
36
|
-
* @param {Partial<RequestTimings>} [timings
|
|
37
|
-
* @returns {Promise<NLcURLResponse>}
|
|
38
|
-
* @throws {HTTPError} If the connection is closed before headers are received.
|
|
39
|
-
* @throws {TimeoutError} If the response timeout is exceeded.
|
|
23
|
+
* @param {Duplex} stream - Duplex stream (typically a TLS socket).
|
|
24
|
+
* @param {NLcURLRequest} request - Request to send.
|
|
25
|
+
* @param {H1ClientOptions} [options] - Client options.
|
|
26
|
+
* @param {Partial<RequestTimings>} [timings] - Partial timings object to populate.
|
|
27
|
+
* @returns {Promise<NLcURLResponse>} HTTP response with a readable body stream.
|
|
40
28
|
*/
|
|
41
29
|
export declare function sendH1StreamingRequest(stream: Duplex, request: NLcURLRequest, options?: H1ClientOptions, timings?: Partial<RequestTimings>): Promise<NLcURLResponse>;
|
|
42
30
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1C;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuEzK;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuDlL"}
|
package/dist/http/h1/client.js
CHANGED
|
@@ -5,16 +5,13 @@ import { encodeRequest, drainRequestBody } from "./encoder.js";
|
|
|
5
5
|
import { HttpResponseParser } from "./parser.js";
|
|
6
6
|
import { decompressBody, createDecompressStream } from "../../utils/encoding.js";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* fully buffered response. Blocks until all response body bytes are received.
|
|
8
|
+
* Send an HTTP/1.1 request and buffer the entire response body.
|
|
10
9
|
*
|
|
11
|
-
* @param {Duplex}
|
|
12
|
-
* @param {NLcURLRequest}
|
|
13
|
-
* @param {H1ClientOptions}
|
|
14
|
-
* @param {Partial<RequestTimings>} [timings
|
|
15
|
-
* @returns {Promise<NLcURLResponse>}
|
|
16
|
-
* @throws {HTTPError} If the connection is closed before the response completes.
|
|
17
|
-
* @throws {TimeoutError} If the response timeout is exceeded.
|
|
10
|
+
* @param {Duplex} stream - Duplex stream (typically a TLS socket).
|
|
11
|
+
* @param {NLcURLRequest} request - Request to send.
|
|
12
|
+
* @param {H1ClientOptions} [options] - Client options.
|
|
13
|
+
* @param {Partial<RequestTimings>} [timings] - Partial timings object to populate.
|
|
14
|
+
* @returns {Promise<NLcURLResponse>} Buffered HTTP response.
|
|
18
15
|
*/
|
|
19
16
|
export async function sendH1Request(stream, request, options = {}, timings = {}) {
|
|
20
17
|
const preparedRequest = await drainRequestBody(request);
|
|
@@ -39,7 +36,6 @@ export async function sendH1Request(stream, request, options = {}, timings = {})
|
|
|
39
36
|
}
|
|
40
37
|
const parser = new HttpResponseParser(request.method ?? "GET");
|
|
41
38
|
const onDownloadProgress = request.onDownloadProgress;
|
|
42
|
-
let downloadedBytes = 0;
|
|
43
39
|
let downloadTotalBytes = 0;
|
|
44
40
|
const parsed = await readResponse(stream, parser, request);
|
|
45
41
|
if (onDownloadProgress) {
|
|
@@ -83,18 +79,13 @@ export async function sendH1Request(stream, request, options = {}, timings = {})
|
|
|
83
79
|
});
|
|
84
80
|
}
|
|
85
81
|
/**
|
|
86
|
-
*
|
|
87
|
-
* streaming response whose body is available as a `Readable` stream on
|
|
88
|
-
* `response.body`. The headers are fully parsed before resolving;
|
|
89
|
-
* the body is streamed asynchronously.
|
|
82
|
+
* Send an HTTP/1.1 request with a streaming response body.
|
|
90
83
|
*
|
|
91
|
-
* @param {Duplex}
|
|
92
|
-
* @param {NLcURLRequest}
|
|
93
|
-
* @param {H1ClientOptions}
|
|
94
|
-
* @param {Partial<RequestTimings>} [timings
|
|
95
|
-
* @returns {Promise<NLcURLResponse>}
|
|
96
|
-
* @throws {HTTPError} If the connection is closed before headers are received.
|
|
97
|
-
* @throws {TimeoutError} If the response timeout is exceeded.
|
|
84
|
+
* @param {Duplex} stream - Duplex stream (typically a TLS socket).
|
|
85
|
+
* @param {NLcURLRequest} request - Request to send.
|
|
86
|
+
* @param {H1ClientOptions} [options] - Client options.
|
|
87
|
+
* @param {Partial<RequestTimings>} [timings] - Partial timings object to populate.
|
|
88
|
+
* @returns {Promise<NLcURLResponse>} HTTP response with a readable body stream.
|
|
98
89
|
*/
|
|
99
90
|
export async function sendH1StreamingRequest(stream, request, options = {}, timings = {}) {
|
|
100
91
|
const preparedRequest = await drainRequestBody(request);
|
|
@@ -172,7 +163,7 @@ function readResponse(stream, parser, request) {
|
|
|
172
163
|
catch (err) {
|
|
173
164
|
settled = true;
|
|
174
165
|
cleanup();
|
|
175
|
-
reject(err);
|
|
166
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
176
167
|
}
|
|
177
168
|
};
|
|
178
169
|
const onEnd = () => {
|
|
@@ -244,7 +235,7 @@ function readStreamingHeaders(stream, parser, request, bodyStream) {
|
|
|
244
235
|
cleanup();
|
|
245
236
|
bodyStream.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
246
237
|
if (!headersResolved)
|
|
247
|
-
reject(err);
|
|
238
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
248
239
|
}
|
|
249
240
|
};
|
|
250
241
|
const onEnd = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
import type { NLcURLRequest } from "../../core/request.js";
|
|
2
|
+
import type { Duplex } from "node:stream";
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
-
* socket. Merges `defaultHeaders` (lowest priority) with `request.headers`
|
|
5
|
-
* (highest priority), computes `Content-Length` when a body is present,
|
|
6
|
-
* and validates header names and values for forbidden characters.
|
|
4
|
+
* Encode an HTTP/1.1 request into a wire-format buffer.
|
|
7
5
|
*
|
|
8
|
-
* @param {NLcURLRequest}
|
|
9
|
-
* @param {Array<[string,string]>} defaultHeaders -
|
|
10
|
-
* @returns {Buffer}
|
|
11
|
-
* @throws {Error} If any header name or value contains CR, LF, or NUL characters.
|
|
6
|
+
* @param {NLcURLRequest} request - Request to encode.
|
|
7
|
+
* @param {Array<[string, string]>} defaultHeaders - Default headers to merge.
|
|
8
|
+
* @returns {Buffer} Wire-format request buffer.
|
|
12
9
|
*/
|
|
13
10
|
export declare function encodeRequest(request: NLcURLRequest, defaultHeaders: Array<[string, string]>): Buffer;
|
|
14
11
|
/**
|
|
15
|
-
*
|
|
12
|
+
* Write a streaming request body using chunked transfer-encoding.
|
|
13
|
+
* The request headers (including Transfer-Encoding: chunked) must already
|
|
14
|
+
* be written to the socket via `encodeRequest()`.
|
|
16
15
|
*
|
|
17
|
-
* @param {
|
|
18
|
-
* @
|
|
16
|
+
* @param {Duplex} socket - The transport socket.
|
|
17
|
+
* @param {ReadableStream<Uint8Array>} body - Streaming body.
|
|
18
|
+
* @returns {Promise<void>} Resolves when body is fully sent.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeChunkedBody(socket: Duplex, body: ReadableStream<Uint8Array>): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Drain a ReadableStream into a single buffer.
|
|
23
|
+
*
|
|
24
|
+
* @param {ReadableStream<Uint8Array>} stream - Web ReadableStream.
|
|
25
|
+
* @returns {Promise<Buffer>} Concatenated buffer of all chunks.
|
|
19
26
|
*/
|
|
20
27
|
export declare function drainReadableStream(stream: ReadableStream<Uint8Array>): Promise<Buffer>;
|
|
21
28
|
/**
|
|
22
|
-
*
|
|
23
|
-
* returns a new request with the buffered body. Otherwise returns the request
|
|
24
|
-
* unchanged. This must be called before passing the request to
|
|
25
|
-
* `encodeRequest()` for HTTP/1.1 requests.
|
|
29
|
+
* Drain a request's streaming body into a buffered request.
|
|
26
30
|
*
|
|
27
|
-
* @param {NLcURLRequest} request -
|
|
28
|
-
* @returns {Promise<NLcURLRequest>} Request with body fully buffered
|
|
31
|
+
* @param {NLcURLRequest} request - Request with a possible streaming body.
|
|
32
|
+
* @returns {Promise<NLcURLRequest>} Request with the body fully buffered.
|
|
29
33
|
*/
|
|
30
34
|
export declare function drainRequestBody(request: NLcURLRequest): Promise<NLcURLRequest>;
|
|
31
35
|
//# sourceMappingURL=encoder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAsErG;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBtG;AAqBD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7F;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAMrF"}
|
package/dist/http/h1/encoder.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { FormData } from "../form-data.js";
|
|
2
2
|
import { validateHeaderName, validateHeaderValue } from "../../core/validation.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* socket. Merges `defaultHeaders` (lowest priority) with `request.headers`
|
|
6
|
-
* (highest priority), computes `Content-Length` when a body is present,
|
|
7
|
-
* and validates header names and values for forbidden characters.
|
|
4
|
+
* Encode an HTTP/1.1 request into a wire-format buffer.
|
|
8
5
|
*
|
|
9
|
-
* @param {NLcURLRequest}
|
|
10
|
-
* @param {Array<[string,string]>} defaultHeaders -
|
|
11
|
-
* @returns {Buffer}
|
|
12
|
-
* @throws {Error} If any header name or value contains CR, LF, or NUL characters.
|
|
6
|
+
* @param {NLcURLRequest} request - Request to encode.
|
|
7
|
+
* @param {Array<[string, string]>} defaultHeaders - Default headers to merge.
|
|
8
|
+
* @returns {Buffer} Wire-format request buffer.
|
|
13
9
|
*/
|
|
14
10
|
export function encodeRequest(request, defaultHeaders) {
|
|
15
11
|
const url = new URL(request.url);
|
|
@@ -30,10 +26,25 @@ export function encodeRequest(request, defaultHeaders) {
|
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
28
|
let bodyBuffer;
|
|
29
|
+
let isStreamBody = false;
|
|
33
30
|
if (request.body !== undefined && request.body !== null) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
headerMap.
|
|
31
|
+
if (request.body instanceof ReadableStream) {
|
|
32
|
+
isStreamBody = true;
|
|
33
|
+
if (!headerMap.has("transfer-encoding")) {
|
|
34
|
+
headerMap.set("transfer-encoding", "chunked");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
bodyBuffer = serializeBody(request.body);
|
|
39
|
+
if (headerMap.has("content-length")) {
|
|
40
|
+
const declaredLength = parseInt(headerMap.get("content-length"), 10);
|
|
41
|
+
if (!Number.isNaN(declaredLength) && declaredLength !== bodyBuffer.length) {
|
|
42
|
+
throw new Error(`Content-Length mismatch: header declares ${declaredLength} bytes but body is ${bodyBuffer.length} bytes`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
headerMap.set("content-length", String(bodyBuffer.length));
|
|
47
|
+
}
|
|
37
48
|
}
|
|
38
49
|
if (!headerMap.has("content-type")) {
|
|
39
50
|
if (request.body instanceof FormData) {
|
|
@@ -63,6 +74,34 @@ export function encodeRequest(request, defaultHeaders) {
|
|
|
63
74
|
}
|
|
64
75
|
return head;
|
|
65
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Write a streaming request body using chunked transfer-encoding.
|
|
79
|
+
* The request headers (including Transfer-Encoding: chunked) must already
|
|
80
|
+
* be written to the socket via `encodeRequest()`.
|
|
81
|
+
*
|
|
82
|
+
* @param {Duplex} socket - The transport socket.
|
|
83
|
+
* @param {ReadableStream<Uint8Array>} body - Streaming body.
|
|
84
|
+
* @returns {Promise<void>} Resolves when body is fully sent.
|
|
85
|
+
*/
|
|
86
|
+
export async function writeChunkedBody(socket, body) {
|
|
87
|
+
const reader = body.getReader();
|
|
88
|
+
try {
|
|
89
|
+
while (true) {
|
|
90
|
+
const { done, value } = await reader.read();
|
|
91
|
+
if (done)
|
|
92
|
+
break;
|
|
93
|
+
const chunk = Buffer.from(value);
|
|
94
|
+
const sizeHex = chunk.length.toString(16);
|
|
95
|
+
socket.write(`${sizeHex}\r\n`);
|
|
96
|
+
socket.write(chunk);
|
|
97
|
+
socket.write("\r\n");
|
|
98
|
+
}
|
|
99
|
+
socket.write("0\r\n\r\n");
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
reader.releaseLock();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
66
105
|
function serializeBody(body) {
|
|
67
106
|
if (body === null || body === undefined)
|
|
68
107
|
return Buffer.alloc(0);
|
|
@@ -85,10 +124,10 @@ function serializeBody(body) {
|
|
|
85
124
|
return Buffer.alloc(0);
|
|
86
125
|
}
|
|
87
126
|
/**
|
|
88
|
-
*
|
|
127
|
+
* Drain a ReadableStream into a single buffer.
|
|
89
128
|
*
|
|
90
|
-
* @param {ReadableStream<Uint8Array>} stream -
|
|
91
|
-
* @returns {Promise<Buffer>}
|
|
129
|
+
* @param {ReadableStream<Uint8Array>} stream - Web ReadableStream.
|
|
130
|
+
* @returns {Promise<Buffer>} Concatenated buffer of all chunks.
|
|
92
131
|
*/
|
|
93
132
|
export async function drainReadableStream(stream) {
|
|
94
133
|
const reader = stream.getReader();
|
|
@@ -107,13 +146,10 @@ export async function drainReadableStream(stream) {
|
|
|
107
146
|
return Buffer.concat(chunks);
|
|
108
147
|
}
|
|
109
148
|
/**
|
|
110
|
-
*
|
|
111
|
-
* returns a new request with the buffered body. Otherwise returns the request
|
|
112
|
-
* unchanged. This must be called before passing the request to
|
|
113
|
-
* `encodeRequest()` for HTTP/1.1 requests.
|
|
149
|
+
* Drain a request's streaming body into a buffered request.
|
|
114
150
|
*
|
|
115
|
-
* @param {NLcURLRequest} request -
|
|
116
|
-
* @returns {Promise<NLcURLRequest>} Request with body fully buffered
|
|
151
|
+
* @param {NLcURLRequest} request - Request with a possible streaming body.
|
|
152
|
+
* @returns {Promise<NLcURLRequest>} Request with the body fully buffered.
|
|
117
153
|
*/
|
|
118
154
|
export async function drainRequestBody(request) {
|
|
119
155
|
if (request.body instanceof ReadableStream) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"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"}
|
package/dist/http/h1/parser.d.ts
CHANGED
|
@@ -1,29 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Represents a fully parsed HTTP/1.1 response, including status, headers, and
|
|
3
|
-
* the buffered body.
|
|
4
|
-
*
|
|
5
|
-
* @typedef {Object} ParsedResponse
|
|
6
|
-
* @property {string} httpVersion - HTTP version string (e.g. `"HTTP/1.1"`).
|
|
7
|
-
* @property {number} statusCode - HTTP status code.
|
|
8
|
-
* @property {string} statusMessage - HTTP status text.
|
|
9
|
-
* @property {Map<string,string>} headers - Normalized, lowercase header map.
|
|
10
|
-
* @property {Array<[string,string]>} rawHeaders - Original header pairs in transmission order.
|
|
11
|
-
* @property {Buffer} body - Fully buffered, unchunked response body.
|
|
12
|
-
*/
|
|
1
|
+
/** Parsed HTTP/1.x response. */
|
|
13
2
|
export interface ParsedResponse {
|
|
3
|
+
/** HTTP version string (e.g. "1.1"). */
|
|
14
4
|
httpVersion: string;
|
|
5
|
+
/** Response status code. */
|
|
15
6
|
statusCode: number;
|
|
7
|
+
/** Response status message. */
|
|
16
8
|
statusMessage: string;
|
|
9
|
+
/** Case-insensitive header map (last value wins). */
|
|
17
10
|
headers: Map<string, string>;
|
|
11
|
+
/** Raw header pairs preserving original casing and order. */
|
|
18
12
|
rawHeaders: Array<[string, string]>;
|
|
13
|
+
/** Response body buffer. */
|
|
19
14
|
body: Buffer;
|
|
20
15
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Incremental HTTP/1.1 response parser. Feed data buffers via {@link HttpResponseParser.feed}
|
|
23
|
-
* until it returns `true`, then retrieve the result via {@link HttpResponseParser.getResult}.
|
|
24
|
-
* Supports chunked transfer encoding, content-length delimited bodies, and
|
|
25
|
-
* connection-close terminated bodies.
|
|
26
|
-
*/
|
|
16
|
+
/** Incremental HTTP/1.x response parser. */
|
|
27
17
|
export declare class HttpResponseParser {
|
|
28
18
|
private requestMethod;
|
|
29
19
|
private state;
|
|
@@ -38,62 +28,42 @@ export declare class HttpResponseParser {
|
|
|
38
28
|
private bodyChunks;
|
|
39
29
|
private bodyBytesRead;
|
|
40
30
|
private result;
|
|
41
|
-
/**
|
|
42
|
-
* Optional callback invoked for each body chunk received in streaming mode.
|
|
43
|
-
* When set, each chunk is forwarded here in addition to being buffered
|
|
44
|
-
* internally.
|
|
45
|
-
*
|
|
46
|
-
* @type {((chunk: Buffer) => void) | undefined}
|
|
47
|
-
*/
|
|
31
|
+
/** Callback for body chunks during incremental parsing. */
|
|
48
32
|
onBodyChunk?: (chunk: Buffer) => void;
|
|
49
33
|
private static readonly MAX_HEADER_SIZE;
|
|
50
34
|
private static readonly MAX_BODY_SIZE;
|
|
35
|
+
private static readonly MAX_HEADER_COUNT;
|
|
51
36
|
/**
|
|
52
|
-
*
|
|
37
|
+
* Create a new HTTP response parser.
|
|
53
38
|
*
|
|
54
|
-
* @param {string} [requestMethod
|
|
55
|
-
* Required to correctly determine whether a body is expected (e.g. HEAD has no body).
|
|
39
|
+
* @param {string} [requestMethod] - HTTP method of the originating request.
|
|
56
40
|
*/
|
|
57
41
|
constructor(requestMethod?: string);
|
|
58
42
|
/**
|
|
59
|
-
*
|
|
60
|
-
* machine. Returns `true` when a complete response has been parsed.
|
|
43
|
+
* Feed data into the parser.
|
|
61
44
|
*
|
|
62
|
-
* @param {Buffer} data -
|
|
63
|
-
* @returns {boolean} `true`
|
|
64
|
-
* {@link HttpResponseParser.getResult} may be called; `false` if more data is needed.
|
|
65
|
-
* @throws {Error} If any parse error is encountered (malformed status line, invalid header, etc.).
|
|
45
|
+
* @param {Buffer} data - Incoming data chunk.
|
|
46
|
+
* @returns {boolean} `true` when the response is fully parsed.
|
|
66
47
|
*/
|
|
67
48
|
feed(data: Buffer): boolean;
|
|
68
49
|
/**
|
|
69
|
-
*
|
|
70
|
-
* {@link HttpResponseParser.feed} has returned `true`.
|
|
50
|
+
* Return the fully parsed response.
|
|
71
51
|
*
|
|
72
|
-
* @returns {ParsedResponse}
|
|
73
|
-
* @throws {Error} If the response has not been fully parsed yet.
|
|
52
|
+
* @returns {ParsedResponse} Parsed response including body.
|
|
74
53
|
*/
|
|
75
54
|
getResult(): ParsedResponse;
|
|
76
|
-
/**
|
|
77
|
-
* Returns `true` once all response headers have been parsed, regardless
|
|
78
|
-
* of whether the body is complete.
|
|
79
|
-
*
|
|
80
|
-
* @returns {boolean} Whether headers have been fully parsed.
|
|
81
|
-
*/
|
|
55
|
+
/** Whether response headers have been fully parsed. */
|
|
82
56
|
get headersParsed(): boolean;
|
|
83
57
|
/**
|
|
84
|
-
*
|
|
85
|
-
* body. May be called as soon as {@link HttpResponseParser.headersParsed} is `true`.
|
|
58
|
+
* Return parsed headers without body data.
|
|
86
59
|
*
|
|
87
|
-
* @returns {Omit<ParsedResponse,
|
|
88
|
-
* @throws {Error} If headers have not been fully parsed yet.
|
|
60
|
+
* @returns {Omit<ParsedResponse, "body">} Response metadata excluding the body.
|
|
89
61
|
*/
|
|
90
62
|
getHeadersResult(): Omit<ParsedResponse, "body">;
|
|
91
63
|
/**
|
|
92
|
-
*
|
|
93
|
-
* complete response. Useful when the transport stream carries pipelined
|
|
94
|
-
* responses.
|
|
64
|
+
* Return unconsumed data remaining in the parser buffer.
|
|
95
65
|
*
|
|
96
|
-
* @returns {Buffer}
|
|
66
|
+
* @returns {Buffer} Leftover bytes after the parsed response.
|
|
97
67
|
*/
|
|
98
68
|
getRemainder(): Buffer;
|
|
99
69
|
private parseStatusLine;
|
|
@@ -103,13 +73,7 @@ export declare class HttpResponseParser {
|
|
|
103
73
|
private parseChunkedBody;
|
|
104
74
|
private emitOrAccumulate;
|
|
105
75
|
private finalize;
|
|
106
|
-
/**
|
|
107
|
-
* Signals the parser that the underlying TCP connection was closed by the
|
|
108
|
-
* remote peer — used for HTTP/1.x responses whose body is delimited by
|
|
109
|
-
* connection closure rather than a `Content-Length` header or chunked
|
|
110
|
-
* transfer encoding. Triggers finalization so callers can retrieve the
|
|
111
|
-
* accumulated body via {@link getResult}.
|
|
112
|
-
*/
|
|
76
|
+
/** Signal that the connection has closed, finalizing any in-progress response. */
|
|
113
77
|
connectionClosed(): void;
|
|
114
78
|
}
|
|
115
79
|
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/http/h1/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/http/h1/parser.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,6DAA6D;IAC7D,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAUD,4CAA4C;AAC5C,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAA+B;IAE7C,2DAA2D;IACpD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAU;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAa;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAE/C;;;;OAIG;gBACS,aAAa,SAAQ;IAIjC;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAuB3B;;;;OAIG;IACH,SAAS,IAAI,cAAc;IAO3B,uDAAuD;IACvD,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;;OAIG;IACH,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IAahD;;;;OAIG;IACH,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,YAAY;IAqDpB,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,QAAQ;IAYhB,kFAAkF;IAClF,gBAAgB,IAAI,IAAI;CAKzB"}
|