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
package/dist/http/h1/client.js
CHANGED
|
@@ -5,21 +5,23 @@ 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);
|
|
21
18
|
const encoded = encodeRequest(preparedRequest, options.defaultHeaders ?? []);
|
|
22
19
|
const sendStart = Date.now();
|
|
20
|
+
const onUploadProgress = request.onUploadProgress;
|
|
21
|
+
if (onUploadProgress) {
|
|
22
|
+
const total = encoded.length;
|
|
23
|
+
onUploadProgress({ bytes: 0, totalBytes: total, percent: 0 });
|
|
24
|
+
}
|
|
23
25
|
await new Promise((resolve, reject) => {
|
|
24
26
|
stream.write(encoded, (err) => {
|
|
25
27
|
if (err)
|
|
@@ -28,8 +30,18 @@ export async function sendH1Request(stream, request, options = {}, timings = {})
|
|
|
28
30
|
resolve();
|
|
29
31
|
});
|
|
30
32
|
});
|
|
33
|
+
if (onUploadProgress) {
|
|
34
|
+
const total = encoded.length;
|
|
35
|
+
onUploadProgress({ bytes: total, totalBytes: total, percent: 100 });
|
|
36
|
+
}
|
|
31
37
|
const parser = new HttpResponseParser(request.method ?? "GET");
|
|
38
|
+
const onDownloadProgress = request.onDownloadProgress;
|
|
39
|
+
let downloadTotalBytes = 0;
|
|
32
40
|
const parsed = await readResponse(stream, parser, request);
|
|
41
|
+
if (onDownloadProgress) {
|
|
42
|
+
downloadTotalBytes = parsed.body.length;
|
|
43
|
+
onDownloadProgress({ bytes: downloadTotalBytes, totalBytes: downloadTotalBytes, percent: 100 });
|
|
44
|
+
}
|
|
33
45
|
timings.firstByte = Date.now() - sendStart;
|
|
34
46
|
const encoding = parsed.headers.get("content-encoding");
|
|
35
47
|
let body;
|
|
@@ -67,18 +79,13 @@ export async function sendH1Request(stream, request, options = {}, timings = {})
|
|
|
67
79
|
});
|
|
68
80
|
}
|
|
69
81
|
/**
|
|
70
|
-
*
|
|
71
|
-
* streaming response whose body is available as a `Readable` stream on
|
|
72
|
-
* `response.body`. The headers are fully parsed before resolving;
|
|
73
|
-
* the body is streamed asynchronously.
|
|
82
|
+
* Send an HTTP/1.1 request with a streaming response body.
|
|
74
83
|
*
|
|
75
|
-
* @param {Duplex}
|
|
76
|
-
* @param {NLcURLRequest}
|
|
77
|
-
* @param {H1ClientOptions}
|
|
78
|
-
* @param {Partial<RequestTimings>} [timings
|
|
79
|
-
* @returns {Promise<NLcURLResponse>}
|
|
80
|
-
* @throws {HTTPError} If the connection is closed before headers are received.
|
|
81
|
-
* @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.
|
|
82
89
|
*/
|
|
83
90
|
export async function sendH1StreamingRequest(stream, request, options = {}, timings = {}) {
|
|
84
91
|
const preparedRequest = await drainRequestBody(request);
|
|
@@ -156,7 +163,7 @@ function readResponse(stream, parser, request) {
|
|
|
156
163
|
catch (err) {
|
|
157
164
|
settled = true;
|
|
158
165
|
cleanup();
|
|
159
|
-
reject(err);
|
|
166
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
160
167
|
}
|
|
161
168
|
};
|
|
162
169
|
const onEnd = () => {
|
|
@@ -228,7 +235,7 @@ function readStreamingHeaders(stream, parser, request, bodyStream) {
|
|
|
228
235
|
cleanup();
|
|
229
236
|
bodyStream.destroy(err instanceof Error ? err : new Error(String(err)));
|
|
230
237
|
if (!headersResolved)
|
|
231
|
-
reject(err);
|
|
238
|
+
reject(err instanceof Error ? err : new Error(String(err)));
|
|
232
239
|
}
|
|
233
240
|
};
|
|
234
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":"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;AASjF;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,OAAsB,EAAE,UAA2B,EAAE,EAAE,UAAmC,EAAE;IAC9I,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAClD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAC1C,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACtD,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAE3B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3D,IAAI,kBAAkB,EAAE,CAAC;QACvB,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACxC,kBAAkB,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACxD,IAAI,IAAY,CAAC;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,UAAU,EAAE,MAAM,CAAC,aAAa;QAChC,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;QACzE,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;YACjC,KAAK,EAAE,CAAC;SACT;QACD,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;SAC/B;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAc,EAAE,OAAsB,EAAE,UAA2B,EAAE,EAAE,UAAmC,EAAE;IACvJ,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAC1C,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC;IAErC,MAAM,CAAC,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAEpF,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAE/E,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM,EAAE,WAAW,CAAC,UAAU;QAC9B,UAAU,EAAE,WAAW,CAAC,aAAa;QACrC,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;QAC9E,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;YACjC,KAAK,EAAE,CAAC;SACT;QACD,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;SAC/B;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,MAA0B,EAAE,OAAsB;IACtF,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAgD,CAAC;QAErD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;QACrG,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,YAAY,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,SAAS,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,MAA0B,EAAE,OAAsB,EAAE,UAAuB;IACvH,OAAO,IAAI,OAAO,CAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,KAAgD,CAAC;QAErD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;QACrG,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,IAAI,YAAY,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhC,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC7C,eAAe,GAAG,IAAI,CAAC;oBACvB,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAED,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,UAAU,CAAC,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,eAAe;oBAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpF,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACrC,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,IAAI,SAAS,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,eAAe;oBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,31 +1,24 @@
|
|
|
1
1
|
import type { NLcURLRequest } from "../../core/request.js";
|
|
2
2
|
/**
|
|
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.
|
|
3
|
+
* Encode an HTTP/1.1 request into a wire-format buffer.
|
|
7
4
|
*
|
|
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.
|
|
5
|
+
* @param {NLcURLRequest} request - Request to encode.
|
|
6
|
+
* @param {Array<[string, string]>} defaultHeaders - Default headers to merge.
|
|
7
|
+
* @returns {Buffer} Wire-format request buffer.
|
|
12
8
|
*/
|
|
13
9
|
export declare function encodeRequest(request: NLcURLRequest, defaultHeaders: Array<[string, string]>): Buffer;
|
|
14
10
|
/**
|
|
15
|
-
*
|
|
11
|
+
* Drain a ReadableStream into a single buffer.
|
|
16
12
|
*
|
|
17
|
-
* @param {ReadableStream<Uint8Array>} stream -
|
|
18
|
-
* @returns {Promise<Buffer>}
|
|
13
|
+
* @param {ReadableStream<Uint8Array>} stream - Web ReadableStream.
|
|
14
|
+
* @returns {Promise<Buffer>} Concatenated buffer of all chunks.
|
|
19
15
|
*/
|
|
20
16
|
export declare function drainReadableStream(stream: ReadableStream<Uint8Array>): Promise<Buffer>;
|
|
21
17
|
/**
|
|
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.
|
|
18
|
+
* Drain a request's streaming body into a buffered request.
|
|
26
19
|
*
|
|
27
|
-
* @param {NLcURLRequest} request -
|
|
28
|
-
* @returns {Promise<NLcURLRequest>} Request with body fully buffered
|
|
20
|
+
* @param {NLcURLRequest} request - Request with a possible streaming body.
|
|
21
|
+
* @returns {Promise<NLcURLRequest>} Request with the body fully buffered.
|
|
29
22
|
*/
|
|
30
23
|
export declare function drainRequestBody(request: NLcURLRequest): Promise<NLcURLRequest>;
|
|
31
24
|
//# 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;AAIxE
|
|
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;AAIxE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAyDrG;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);
|
|
@@ -85,10 +81,10 @@ function serializeBody(body) {
|
|
|
85
81
|
return Buffer.alloc(0);
|
|
86
82
|
}
|
|
87
83
|
/**
|
|
88
|
-
*
|
|
84
|
+
* Drain a ReadableStream into a single buffer.
|
|
89
85
|
*
|
|
90
|
-
* @param {ReadableStream<Uint8Array>} stream -
|
|
91
|
-
* @returns {Promise<Buffer>}
|
|
86
|
+
* @param {ReadableStream<Uint8Array>} stream - Web ReadableStream.
|
|
87
|
+
* @returns {Promise<Buffer>} Concatenated buffer of all chunks.
|
|
92
88
|
*/
|
|
93
89
|
export async function drainReadableStream(stream) {
|
|
94
90
|
const reader = stream.getReader();
|
|
@@ -107,13 +103,10 @@ export async function drainReadableStream(stream) {
|
|
|
107
103
|
return Buffer.concat(chunks);
|
|
108
104
|
}
|
|
109
105
|
/**
|
|
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.
|
|
106
|
+
* Drain a request's streaming body into a buffered request.
|
|
114
107
|
*
|
|
115
|
-
* @param {NLcURLRequest} request -
|
|
116
|
-
* @returns {Promise<NLcURLRequest>} Request with body fully buffered
|
|
108
|
+
* @param {NLcURLRequest} request - Request with a possible streaming body.
|
|
109
|
+
* @returns {Promise<NLcURLRequest>} Request with the body fully buffered.
|
|
117
110
|
*/
|
|
118
111
|
export async function drainRequestBody(request) {
|
|
119
112
|
if (request.body instanceof ReadableStream) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEnF
|
|
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,41 @@ 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;
|
|
51
35
|
/**
|
|
52
|
-
*
|
|
36
|
+
* Create a new HTTP response parser.
|
|
53
37
|
*
|
|
54
|
-
* @param {string} [requestMethod
|
|
55
|
-
* Required to correctly determine whether a body is expected (e.g. HEAD has no body).
|
|
38
|
+
* @param {string} [requestMethod] - HTTP method of the originating request.
|
|
56
39
|
*/
|
|
57
40
|
constructor(requestMethod?: string);
|
|
58
41
|
/**
|
|
59
|
-
*
|
|
60
|
-
* machine. Returns `true` when a complete response has been parsed.
|
|
42
|
+
* Feed data into the parser.
|
|
61
43
|
*
|
|
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.).
|
|
44
|
+
* @param {Buffer} data - Incoming data chunk.
|
|
45
|
+
* @returns {boolean} `true` when the response is fully parsed.
|
|
66
46
|
*/
|
|
67
47
|
feed(data: Buffer): boolean;
|
|
68
48
|
/**
|
|
69
|
-
*
|
|
70
|
-
* {@link HttpResponseParser.feed} has returned `true`.
|
|
49
|
+
* Return the fully parsed response.
|
|
71
50
|
*
|
|
72
|
-
* @returns {ParsedResponse}
|
|
73
|
-
* @throws {Error} If the response has not been fully parsed yet.
|
|
51
|
+
* @returns {ParsedResponse} Parsed response including body.
|
|
74
52
|
*/
|
|
75
53
|
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
|
-
*/
|
|
54
|
+
/** Whether response headers have been fully parsed. */
|
|
82
55
|
get headersParsed(): boolean;
|
|
83
56
|
/**
|
|
84
|
-
*
|
|
85
|
-
* body. May be called as soon as {@link HttpResponseParser.headersParsed} is `true`.
|
|
57
|
+
* Return parsed headers without body data.
|
|
86
58
|
*
|
|
87
|
-
* @returns {Omit<ParsedResponse,
|
|
88
|
-
* @throws {Error} If headers have not been fully parsed yet.
|
|
59
|
+
* @returns {Omit<ParsedResponse, "body">} Response metadata excluding the body.
|
|
89
60
|
*/
|
|
90
61
|
getHeadersResult(): Omit<ParsedResponse, "body">;
|
|
91
62
|
/**
|
|
92
|
-
*
|
|
93
|
-
* complete response. Useful when the transport stream carries pipelined
|
|
94
|
-
* responses.
|
|
63
|
+
* Return unconsumed data remaining in the parser buffer.
|
|
95
64
|
*
|
|
96
|
-
* @returns {Buffer}
|
|
65
|
+
* @returns {Buffer} Leftover bytes after the parsed response.
|
|
97
66
|
*/
|
|
98
67
|
getRemainder(): Buffer;
|
|
99
68
|
private parseStatusLine;
|
|
@@ -103,13 +72,7 @@ export declare class HttpResponseParser {
|
|
|
103
72
|
private parseChunkedBody;
|
|
104
73
|
private emitOrAccumulate;
|
|
105
74
|
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
|
-
*/
|
|
75
|
+
/** Signal that the connection has closed, finalizing any in-progress response. */
|
|
113
76
|
connectionClosed(): void;
|
|
114
77
|
}
|
|
115
78
|
//# 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;IAElD;;;;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;IAyCpB,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,QAAQ;IAYhB,kFAAkF;IAClF,gBAAgB,IAAI,IAAI;CAKzB"}
|
package/dist/http/h1/parser.js
CHANGED
|
@@ -6,12 +6,7 @@ var ParserState;
|
|
|
6
6
|
ParserState[ParserState["ChunkedBody"] = 3] = "ChunkedBody";
|
|
7
7
|
ParserState[ParserState["Complete"] = 4] = "Complete";
|
|
8
8
|
})(ParserState || (ParserState = {}));
|
|
9
|
-
/**
|
|
10
|
-
* Incremental HTTP/1.1 response parser. Feed data buffers via {@link HttpResponseParser.feed}
|
|
11
|
-
* until it returns `true`, then retrieve the result via {@link HttpResponseParser.getResult}.
|
|
12
|
-
* Supports chunked transfer encoding, content-length delimited bodies, and
|
|
13
|
-
* connection-close terminated bodies.
|
|
14
|
-
*/
|
|
9
|
+
/** Incremental HTTP/1.x response parser. */
|
|
15
10
|
export class HttpResponseParser {
|
|
16
11
|
requestMethod;
|
|
17
12
|
state = ParserState.StatusLine;
|
|
@@ -26,33 +21,23 @@ export class HttpResponseParser {
|
|
|
26
21
|
bodyChunks = [];
|
|
27
22
|
bodyBytesRead = 0;
|
|
28
23
|
result = null;
|
|
29
|
-
/**
|
|
30
|
-
* Optional callback invoked for each body chunk received in streaming mode.
|
|
31
|
-
* When set, each chunk is forwarded here in addition to being buffered
|
|
32
|
-
* internally.
|
|
33
|
-
*
|
|
34
|
-
* @type {((chunk: Buffer) => void) | undefined}
|
|
35
|
-
*/
|
|
24
|
+
/** Callback for body chunks during incremental parsing. */
|
|
36
25
|
onBodyChunk;
|
|
37
26
|
static MAX_HEADER_SIZE = 262144;
|
|
38
27
|
static MAX_BODY_SIZE = 134217728;
|
|
39
28
|
/**
|
|
40
|
-
*
|
|
29
|
+
* Create a new HTTP response parser.
|
|
41
30
|
*
|
|
42
|
-
* @param {string} [requestMethod
|
|
43
|
-
* Required to correctly determine whether a body is expected (e.g. HEAD has no body).
|
|
31
|
+
* @param {string} [requestMethod] - HTTP method of the originating request.
|
|
44
32
|
*/
|
|
45
33
|
constructor(requestMethod = "GET") {
|
|
46
34
|
this.requestMethod = requestMethod.toUpperCase();
|
|
47
35
|
}
|
|
48
36
|
/**
|
|
49
|
-
*
|
|
50
|
-
* machine. Returns `true` when a complete response has been parsed.
|
|
37
|
+
* Feed data into the parser.
|
|
51
38
|
*
|
|
52
|
-
* @param {Buffer} data -
|
|
53
|
-
* @returns {boolean} `true`
|
|
54
|
-
* {@link HttpResponseParser.getResult} may be called; `false` if more data is needed.
|
|
55
|
-
* @throws {Error} If any parse error is encountered (malformed status line, invalid header, etc.).
|
|
39
|
+
* @param {Buffer} data - Incoming data chunk.
|
|
40
|
+
* @returns {boolean} `true` when the response is fully parsed.
|
|
56
41
|
*/
|
|
57
42
|
feed(data) {
|
|
58
43
|
this.buffer = Buffer.concat([this.buffer, data]);
|
|
@@ -79,11 +64,9 @@ export class HttpResponseParser {
|
|
|
79
64
|
return true;
|
|
80
65
|
}
|
|
81
66
|
/**
|
|
82
|
-
*
|
|
83
|
-
* {@link HttpResponseParser.feed} has returned `true`.
|
|
67
|
+
* Return the fully parsed response.
|
|
84
68
|
*
|
|
85
|
-
* @returns {ParsedResponse}
|
|
86
|
-
* @throws {Error} If the response has not been fully parsed yet.
|
|
69
|
+
* @returns {ParsedResponse} Parsed response including body.
|
|
87
70
|
*/
|
|
88
71
|
getResult() {
|
|
89
72
|
if (!this.result) {
|
|
@@ -91,21 +74,14 @@ export class HttpResponseParser {
|
|
|
91
74
|
}
|
|
92
75
|
return this.result;
|
|
93
76
|
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns `true` once all response headers have been parsed, regardless
|
|
96
|
-
* of whether the body is complete.
|
|
97
|
-
*
|
|
98
|
-
* @returns {boolean} Whether headers have been fully parsed.
|
|
99
|
-
*/
|
|
77
|
+
/** Whether response headers have been fully parsed. */
|
|
100
78
|
get headersParsed() {
|
|
101
79
|
return this.state === ParserState.Body || this.state === ParserState.ChunkedBody || this.state === ParserState.Complete;
|
|
102
80
|
}
|
|
103
81
|
/**
|
|
104
|
-
*
|
|
105
|
-
* body. May be called as soon as {@link HttpResponseParser.headersParsed} is `true`.
|
|
82
|
+
* Return parsed headers without body data.
|
|
106
83
|
*
|
|
107
|
-
* @returns {Omit<ParsedResponse,
|
|
108
|
-
* @throws {Error} If headers have not been fully parsed yet.
|
|
84
|
+
* @returns {Omit<ParsedResponse, "body">} Response metadata excluding the body.
|
|
109
85
|
*/
|
|
110
86
|
getHeadersResult() {
|
|
111
87
|
if (!this.headersParsed) {
|
|
@@ -120,11 +96,9 @@ export class HttpResponseParser {
|
|
|
120
96
|
};
|
|
121
97
|
}
|
|
122
98
|
/**
|
|
123
|
-
*
|
|
124
|
-
* complete response. Useful when the transport stream carries pipelined
|
|
125
|
-
* responses.
|
|
99
|
+
* Return unconsumed data remaining in the parser buffer.
|
|
126
100
|
*
|
|
127
|
-
* @returns {Buffer}
|
|
101
|
+
* @returns {Buffer} Leftover bytes after the parsed response.
|
|
128
102
|
*/
|
|
129
103
|
getRemainder() {
|
|
130
104
|
return this.buffer;
|
|
@@ -299,13 +273,7 @@ export class HttpResponseParser {
|
|
|
299
273
|
body: Buffer.concat(this.bodyChunks),
|
|
300
274
|
};
|
|
301
275
|
}
|
|
302
|
-
/**
|
|
303
|
-
* Signals the parser that the underlying TCP connection was closed by the
|
|
304
|
-
* remote peer — used for HTTP/1.x responses whose body is delimited by
|
|
305
|
-
* connection closure rather than a `Content-Length` header or chunked
|
|
306
|
-
* transfer encoding. Triggers finalization so callers can retrieve the
|
|
307
|
-
* accumulated body via {@link getResult}.
|
|
308
|
-
*/
|
|
276
|
+
/** Signal that the connection has closed, finalizing any in-progress response. */
|
|
309
277
|
connectionClosed() {
|
|
310
278
|
if (this.state === ParserState.Body && this.contentLength === -1) {
|
|
311
279
|
this.finalize();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/http/h1/parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/http/h1/parser.ts"],"names":[],"mappings":"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"}
|