nlcurl 0.6.0 → 0.7.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/dist/cache/store.d.ts +89 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +402 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/types.d.ts +101 -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/cookies/jar.d.ts +11 -0
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +50 -4
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +2 -0
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +14 -0
- 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/core/client.js +3 -0
- package/dist/core/client.js.map +1 -1
- package/dist/core/request.d.ts +68 -2
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/response.d.ts +22 -0
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +32 -0
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +23 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +101 -3
- package/dist/core/session.js.map +1 -1
- package/dist/core/validation.d.ts +2 -1
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +5 -4
- package/dist/core/validation.js.map +1 -1
- package/dist/dns/codec.d.ts +37 -0
- package/dist/dns/codec.d.ts.map +1 -0
- package/dist/dns/codec.js +254 -0
- package/dist/dns/codec.js.map +1 -0
- package/dist/dns/doh-resolver.d.ts +52 -0
- package/dist/dns/doh-resolver.d.ts.map +1 -0
- package/dist/dns/doh-resolver.js +192 -0
- package/dist/dns/doh-resolver.js.map +1 -0
- package/dist/dns/https-rr.d.ts +51 -0
- package/dist/dns/https-rr.d.ts.map +1 -0
- package/dist/dns/https-rr.js +127 -0
- package/dist/dns/https-rr.js.map +1 -0
- package/dist/dns/types.d.ts +110 -0
- package/dist/dns/types.d.ts.map +1 -0
- package/dist/dns/types.js +34 -0
- package/dist/dns/types.js.map +1 -0
- package/dist/hsts/store.d.ts +41 -0
- package/dist/hsts/store.d.ts.map +1 -0
- package/dist/hsts/store.js +171 -0
- package/dist/hsts/store.js.map +1 -0
- package/dist/hsts/types.d.ts +28 -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 +85 -0
- package/dist/http/alt-svc.d.ts.map +1 -0
- package/dist/http/alt-svc.js +220 -0
- package/dist/http/alt-svc.js.map +1 -0
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +16 -0
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h3/detection.d.ts +17 -0
- package/dist/http/h3/detection.d.ts.map +1 -0
- package/dist/http/h3/detection.js +59 -0
- package/dist/http/h3/detection.js.map +1 -0
- package/dist/http/negotiator.d.ts +24 -1
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +88 -18
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +2 -2
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js.map +1 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +4 -0
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/proxy/env-proxy.d.ts +21 -0
- package/dist/proxy/env-proxy.d.ts.map +1 -0
- package/dist/proxy/env-proxy.js +74 -0
- package/dist/proxy/env-proxy.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +2 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +19 -6
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.js +1 -1
- package/dist/proxy/socks.js.map +1 -1
- package/dist/sse/parser.d.ts +70 -0
- package/dist/sse/parser.d.ts.map +1 -0
- package/dist/sse/parser.js +153 -0
- package/dist/sse/parser.js.map +1 -0
- package/dist/tls/ech.d.ts +147 -0
- package/dist/tls/ech.d.ts.map +1 -0
- package/dist/tls/ech.js +401 -0
- package/dist/tls/ech.js.map +1 -0
- package/dist/tls/node-engine.d.ts +9 -1
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +39 -1
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/pin-verification.d.ts +9 -0
- package/dist/tls/pin-verification.d.ts.map +1 -0
- package/dist/tls/pin-verification.js +34 -0
- package/dist/tls/pin-verification.js.map +1 -0
- package/dist/tls/session-cache.d.ts +70 -0
- package/dist/tls/session-cache.d.ts.map +1 -0
- package/dist/tls/session-cache.js +80 -0
- package/dist/tls/session-cache.js.map +1 -0
- package/dist/tls/stealth/client-hello.d.ts +21 -0
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +116 -0
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +152 -30
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +2 -1
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +118 -5
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/tls12-handshake.d.ts +14 -0
- package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -0
- package/dist/tls/stealth/tls12-handshake.js +462 -0
- package/dist/tls/stealth/tls12-handshake.js.map +1 -0
- package/dist/tls/types.d.ts +16 -0
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/utils/encoding.d.ts +8 -6
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +92 -24
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/happy-eyeballs.d.ts +3 -0
- package/dist/utils/happy-eyeballs.d.ts.map +1 -1
- package/dist/utils/happy-eyeballs.js +42 -2
- package/dist/utils/happy-eyeballs.js.map +1 -1
- package/dist/ws/client.d.ts +3 -0
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +63 -7
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +4 -2
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +8 -5
- package/dist/ws/frame.js.map +1 -1
- package/dist/ws/permessage-deflate.d.ts +58 -0
- package/dist/ws/permessage-deflate.d.ts.map +1 -0
- package/dist/ws/permessage-deflate.js +148 -0
- package/dist/ws/permessage-deflate.js.map +1 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/http-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"http-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/http-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAIhC;;;;;;;;;GASG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CA0G3H"}
|
package/dist/proxy/http-proxy.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as net from "node:net";
|
|
2
|
+
import * as tls from "node:tls";
|
|
2
3
|
import { ProxyError } from "../core/errors.js";
|
|
3
4
|
/**
|
|
4
5
|
* Opens a TCP connection to an HTTP CONNECT proxy and tunnels through it to
|
|
@@ -14,11 +15,23 @@ import { ProxyError } from "../core/errors.js";
|
|
|
14
15
|
export async function httpProxyConnect(proxy, targetHost, targetPort) {
|
|
15
16
|
return new Promise((resolve, reject) => {
|
|
16
17
|
let settled = false;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
let socket;
|
|
19
|
+
if (proxy.secure) {
|
|
20
|
+
const tlsOpts = {
|
|
21
|
+
host: proxy.host,
|
|
22
|
+
port: proxy.port,
|
|
23
|
+
rejectUnauthorized: true,
|
|
24
|
+
...(proxy.family ? { family: proxy.family } : {}),
|
|
25
|
+
};
|
|
26
|
+
socket = tls.connect(tlsOpts);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
socket = net.createConnection({
|
|
30
|
+
host: proxy.host,
|
|
31
|
+
port: proxy.port,
|
|
32
|
+
family: proxy.family,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
22
35
|
const timeoutMs = proxy.timeout ?? 30_000;
|
|
23
36
|
let timer;
|
|
24
37
|
if (timeoutMs > 0) {
|
|
@@ -30,7 +43,7 @@ export async function httpProxyConnect(proxy, targetHost, targetPort) {
|
|
|
30
43
|
}
|
|
31
44
|
}, timeoutMs);
|
|
32
45
|
}
|
|
33
|
-
socket.once("connect", () => {
|
|
46
|
+
socket.once(proxy.secure ? "secureConnect" : "connect", () => {
|
|
34
47
|
let connectReq = `CONNECT ${targetHost}:${targetPort} HTTP/1.1\r\n`;
|
|
35
48
|
connectReq += `Host: ${targetHost}:${targetPort}\r\n`;
|
|
36
49
|
if (proxy.auth) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../src/proxy/http-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../src/proxy/http-proxy.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy/socks.js
CHANGED
|
@@ -53,7 +53,7 @@ async function socks5Handshake(socket, proxy, host, port) {
|
|
|
53
53
|
pass.copy(authReq, 3 + user.length);
|
|
54
54
|
await socketWrite(socket, authReq);
|
|
55
55
|
const authResult = await socketRead(socket, 2);
|
|
56
|
-
if (authResult[1] !== 0x00) {
|
|
56
|
+
if (authResult.length < 2 || authResult[1] !== 0x00) {
|
|
57
57
|
throw new ProxyError("SOCKS5 authentication failed");
|
|
58
58
|
}
|
|
59
59
|
}
|
package/dist/proxy/socks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socks.js","sourceRoot":"","sources":["../../src/proxy/socks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"socks.js","sourceRoot":"","sources":["../../src/proxy/socks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-Sent Events (SSE) parser following the W3C EventSource specification.
|
|
3
|
+
*
|
|
4
|
+
* Provides both a streaming `SSEParser` class for incremental parsing and a
|
|
5
|
+
* convenience `parseSSEStream()` async generator for consuming a `Readable`
|
|
6
|
+
* stream of SSE events.
|
|
7
|
+
*
|
|
8
|
+
* @see https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation
|
|
9
|
+
*/
|
|
10
|
+
import type { Readable } from "node:stream";
|
|
11
|
+
import type { ServerSentEvent } from "../core/request.js";
|
|
12
|
+
/**
|
|
13
|
+
* Incremental SSE event parser. Feed raw bytes/text via {@link SSEParser.feed}
|
|
14
|
+
* and retrieve complete events via {@link SSEParser.pull}.
|
|
15
|
+
*
|
|
16
|
+
* Follows the W3C algorithm: events are delimited by blank lines, fields are
|
|
17
|
+
* prefixed by `event:`, `data:`, `id:`, or `retry:`. Lines beginning with `:`
|
|
18
|
+
* are treated as comments and ignored. Unknown fields are ignored.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SSEParser {
|
|
21
|
+
/** Maximum allowed length for a single buffered line (64 KB). */
|
|
22
|
+
private static readonly MAX_LINE_LENGTH;
|
|
23
|
+
/** Maximum allowed total size of accumulated data lines per event (1 MB). */
|
|
24
|
+
private static readonly MAX_EVENT_SIZE;
|
|
25
|
+
private buffer;
|
|
26
|
+
private eventType;
|
|
27
|
+
private dataLines;
|
|
28
|
+
private dataSize;
|
|
29
|
+
private lastEventId;
|
|
30
|
+
private retry;
|
|
31
|
+
private readonly events;
|
|
32
|
+
/**
|
|
33
|
+
* Feeds raw text from the SSE stream into the parser. Call this each time
|
|
34
|
+
* a chunk of data is received. Complete events are buffered internally
|
|
35
|
+
* and retrieved via {@link pull}.
|
|
36
|
+
*
|
|
37
|
+
* @param {string} text - Raw text chunk from the event stream.
|
|
38
|
+
*/
|
|
39
|
+
feed(text: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Retrieves and removes the next complete SSE event from the internal
|
|
42
|
+
* queue. Returns `null` when no complete events are available.
|
|
43
|
+
*
|
|
44
|
+
* @returns {ServerSentEvent | null}
|
|
45
|
+
*/
|
|
46
|
+
pull(): ServerSentEvent | null;
|
|
47
|
+
/**
|
|
48
|
+
* Flushes the parser, processing any remaining incomplete buffer as if
|
|
49
|
+
* the stream ended. Call after the stream closes to emit any pending event.
|
|
50
|
+
*/
|
|
51
|
+
flush(): void;
|
|
52
|
+
private processLine;
|
|
53
|
+
private dispatchEvent;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Async generator that yields parsed {@link ServerSentEvent} objects from
|
|
57
|
+
* a `Readable` stream. Useful for consuming SSE responses from
|
|
58
|
+
* `NLcURLResponse.body` in streaming mode.
|
|
59
|
+
*
|
|
60
|
+
* @param {Readable} stream - The response body stream (must be text/event-stream).
|
|
61
|
+
* @yields {ServerSentEvent} Each complete SSE event as it arrives.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* const response = await session.get(url, { stream: true });
|
|
65
|
+
* for await (const event of parseSSEStream(response.body!)) {
|
|
66
|
+
* console.log(event.event, event.data);
|
|
67
|
+
* }
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseSSEStream(stream: Readable): AsyncGenerator<ServerSentEvent, void, undefined>;
|
|
70
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/sse/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAU;IACjD,6EAA6E;IAC7E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAa;IAEnD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAEhD;;;;;;OAMG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAexB;;;;;OAKG;IACH,IAAI,IAAI,eAAe,GAAG,IAAI;IAI9B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,WAAW;IAiDnB,OAAO,CAAC,aAAa;CAmBtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAuB,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,CAiBxG"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental SSE event parser. Feed raw bytes/text via {@link SSEParser.feed}
|
|
3
|
+
* and retrieve complete events via {@link SSEParser.pull}.
|
|
4
|
+
*
|
|
5
|
+
* Follows the W3C algorithm: events are delimited by blank lines, fields are
|
|
6
|
+
* prefixed by `event:`, `data:`, `id:`, or `retry:`. Lines beginning with `:`
|
|
7
|
+
* are treated as comments and ignored. Unknown fields are ignored.
|
|
8
|
+
*/
|
|
9
|
+
export class SSEParser {
|
|
10
|
+
/** Maximum allowed length for a single buffered line (64 KB). */
|
|
11
|
+
static MAX_LINE_LENGTH = 65_536;
|
|
12
|
+
/** Maximum allowed total size of accumulated data lines per event (1 MB). */
|
|
13
|
+
static MAX_EVENT_SIZE = 1_048_576;
|
|
14
|
+
buffer = "";
|
|
15
|
+
eventType = "";
|
|
16
|
+
dataLines = [];
|
|
17
|
+
dataSize = 0;
|
|
18
|
+
lastEventId = "";
|
|
19
|
+
retry = undefined;
|
|
20
|
+
events = [];
|
|
21
|
+
/**
|
|
22
|
+
* Feeds raw text from the SSE stream into the parser. Call this each time
|
|
23
|
+
* a chunk of data is received. Complete events are buffered internally
|
|
24
|
+
* and retrieved via {@link pull}.
|
|
25
|
+
*
|
|
26
|
+
* @param {string} text - Raw text chunk from the event stream.
|
|
27
|
+
*/
|
|
28
|
+
feed(text) {
|
|
29
|
+
this.buffer += text;
|
|
30
|
+
if (this.buffer.length > SSEParser.MAX_LINE_LENGTH) {
|
|
31
|
+
throw new Error(`SSE line exceeds maximum length of ${SSEParser.MAX_LINE_LENGTH} bytes`);
|
|
32
|
+
}
|
|
33
|
+
const lines = this.buffer.split(/\r\n|\r|\n/);
|
|
34
|
+
this.buffer = lines.pop();
|
|
35
|
+
for (const line of lines) {
|
|
36
|
+
this.processLine(line);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Retrieves and removes the next complete SSE event from the internal
|
|
41
|
+
* queue. Returns `null` when no complete events are available.
|
|
42
|
+
*
|
|
43
|
+
* @returns {ServerSentEvent | null}
|
|
44
|
+
*/
|
|
45
|
+
pull() {
|
|
46
|
+
return this.events.shift() ?? null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Flushes the parser, processing any remaining incomplete buffer as if
|
|
50
|
+
* the stream ended. Call after the stream closes to emit any pending event.
|
|
51
|
+
*/
|
|
52
|
+
flush() {
|
|
53
|
+
if (this.buffer.length > 0) {
|
|
54
|
+
this.processLine(this.buffer);
|
|
55
|
+
this.buffer = "";
|
|
56
|
+
}
|
|
57
|
+
this.dispatchEvent();
|
|
58
|
+
}
|
|
59
|
+
processLine(line) {
|
|
60
|
+
if (line === "") {
|
|
61
|
+
this.dispatchEvent();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (line.startsWith(":"))
|
|
65
|
+
return;
|
|
66
|
+
const colonIdx = line.indexOf(":");
|
|
67
|
+
let field;
|
|
68
|
+
let value;
|
|
69
|
+
if (colonIdx === -1) {
|
|
70
|
+
field = line;
|
|
71
|
+
value = "";
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
field = line.substring(0, colonIdx);
|
|
75
|
+
value = line.substring(colonIdx + 1);
|
|
76
|
+
if (value.startsWith(" ")) {
|
|
77
|
+
value = value.substring(1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
switch (field) {
|
|
81
|
+
case "event":
|
|
82
|
+
this.eventType = value;
|
|
83
|
+
break;
|
|
84
|
+
case "data":
|
|
85
|
+
this.dataSize += value.length + 1;
|
|
86
|
+
if (this.dataSize > SSEParser.MAX_EVENT_SIZE) {
|
|
87
|
+
throw new Error(`SSE event data exceeds maximum size of ${SSEParser.MAX_EVENT_SIZE} bytes`);
|
|
88
|
+
}
|
|
89
|
+
this.dataLines.push(value);
|
|
90
|
+
break;
|
|
91
|
+
case "id":
|
|
92
|
+
if (!value.includes("\0")) {
|
|
93
|
+
this.lastEventId = value;
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
case "retry": {
|
|
97
|
+
const parsed = parseInt(value, 10);
|
|
98
|
+
if (!Number.isNaN(parsed) && parsed >= 0 && String(parsed) === value.trim()) {
|
|
99
|
+
this.retry = parsed;
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
dispatchEvent() {
|
|
106
|
+
if (this.dataLines.length === 0) {
|
|
107
|
+
this.eventType = "";
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const event = {
|
|
111
|
+
event: this.eventType || "message",
|
|
112
|
+
data: this.dataLines.join("\n"),
|
|
113
|
+
id: this.lastEventId,
|
|
114
|
+
retry: this.retry,
|
|
115
|
+
};
|
|
116
|
+
this.events.push(event);
|
|
117
|
+
this.dataLines = [];
|
|
118
|
+
this.dataSize = 0;
|
|
119
|
+
this.eventType = "";
|
|
120
|
+
this.retry = undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Async generator that yields parsed {@link ServerSentEvent} objects from
|
|
125
|
+
* a `Readable` stream. Useful for consuming SSE responses from
|
|
126
|
+
* `NLcURLResponse.body` in streaming mode.
|
|
127
|
+
*
|
|
128
|
+
* @param {Readable} stream - The response body stream (must be text/event-stream).
|
|
129
|
+
* @yields {ServerSentEvent} Each complete SSE event as it arrives.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* const response = await session.get(url, { stream: true });
|
|
133
|
+
* for await (const event of parseSSEStream(response.body!)) {
|
|
134
|
+
* console.log(event.event, event.data);
|
|
135
|
+
* }
|
|
136
|
+
*/
|
|
137
|
+
export async function* parseSSEStream(stream) {
|
|
138
|
+
const parser = new SSEParser();
|
|
139
|
+
for await (const chunk of stream) {
|
|
140
|
+
const text = typeof chunk === "string" ? chunk : chunk.toString("utf8");
|
|
141
|
+
parser.feed(text);
|
|
142
|
+
let event;
|
|
143
|
+
while ((event = parser.pull()) !== null) {
|
|
144
|
+
yield event;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
parser.flush();
|
|
148
|
+
let event;
|
|
149
|
+
while ((event = parser.pull()) !== null) {
|
|
150
|
+
yield event;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/sse/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A parsed ECHConfig entry from an ECHConfigList.
|
|
3
|
+
*/
|
|
4
|
+
export interface ECHConfig {
|
|
5
|
+
/** ECH version (0xfe0d for draft-13+). */
|
|
6
|
+
version: number;
|
|
7
|
+
/** Length of this config. */
|
|
8
|
+
length: number;
|
|
9
|
+
/** The opaque config contents. */
|
|
10
|
+
contents: Buffer;
|
|
11
|
+
/** The public_name (the "cover" domain, e.g. "cloudflare-ech.com"). */
|
|
12
|
+
publicName: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parsed ECH configuration ready for use in a TLS connection.
|
|
16
|
+
*/
|
|
17
|
+
export interface ECHParameters {
|
|
18
|
+
/** Raw ECHConfigList to pass to Node.js TLS or encode in ClientHello. */
|
|
19
|
+
echConfigList: Buffer;
|
|
20
|
+
/** The public_name (outer SNI) that replaces the true SNI in the outer ClientHello. */
|
|
21
|
+
outerSNI: string;
|
|
22
|
+
/** Parsed individual ECH configs. */
|
|
23
|
+
configs: ECHConfig[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* ECH configuration options for the library.
|
|
27
|
+
*/
|
|
28
|
+
export interface ECHOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Whether to enable ECH when an ECHConfigList is available from HTTPS-RR.
|
|
31
|
+
* @default true when HTTPS-RR is enabled
|
|
32
|
+
*/
|
|
33
|
+
enabled?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Pre-configured ECHConfigList (base64 or raw Buffer).
|
|
36
|
+
* When set, bypasses HTTPS-RR discovery.
|
|
37
|
+
*/
|
|
38
|
+
echConfigList?: string | Buffer;
|
|
39
|
+
/**
|
|
40
|
+
* Whether to use GREASE ECH when no real ECH config is available.
|
|
41
|
+
* GREASE ECH pads ClientHello to resist distinguishing ECH-capable clients.
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
grease?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parses an ECHConfigList from raw bytes (as received from HTTPS-RR or config).
|
|
48
|
+
*
|
|
49
|
+
* ECHConfigList format (draft-ietf-tls-esni §4):
|
|
50
|
+
* ```
|
|
51
|
+
* struct {
|
|
52
|
+
* uint16 length;
|
|
53
|
+
* ECHConfig echConfigs<1..2^16-1>;
|
|
54
|
+
* } ECHConfigList;
|
|
55
|
+
*
|
|
56
|
+
* struct {
|
|
57
|
+
* uint16 version;
|
|
58
|
+
* uint16 length;
|
|
59
|
+
* opaque contents<1..2^16-1>;
|
|
60
|
+
* } ECHConfig;
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @param data Raw ECHConfigList bytes.
|
|
64
|
+
* @returns Parsed ECH parameters, or null if invalid.
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseECHConfigList(data: Buffer): ECHParameters | null;
|
|
67
|
+
/**
|
|
68
|
+
* Generates a GREASE ECH extension for the outer ClientHello.
|
|
69
|
+
* This makes ECH-capable clients indistinguishable from non-ECH clients
|
|
70
|
+
* by including a random ECH extension even when no real config is available.
|
|
71
|
+
*
|
|
72
|
+
* @returns A plausible-looking random ECH extension payload.
|
|
73
|
+
*/
|
|
74
|
+
export declare function generateGreaseECH(): Buffer;
|
|
75
|
+
/** Parsed HPKE key configuration from an ECHConfig. */
|
|
76
|
+
export interface HpkeKeyConfig {
|
|
77
|
+
configId: number;
|
|
78
|
+
kemId: number;
|
|
79
|
+
publicKey: Buffer;
|
|
80
|
+
cipherSuites: Array<{
|
|
81
|
+
kdfId: number;
|
|
82
|
+
aeadId: number;
|
|
83
|
+
}>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parses the HpkeKeyConfig from ECHConfig contents.
|
|
87
|
+
*
|
|
88
|
+
* HpkeKeyConfig layout:
|
|
89
|
+
* ```
|
|
90
|
+
* struct {
|
|
91
|
+
* uint8 config_id;
|
|
92
|
+
* uint16 kem_id;
|
|
93
|
+
* opaque public_key<1..2^16-1>;
|
|
94
|
+
* HpkeSymmetricCipherSuite cipher_suites<4..2^16-4>;
|
|
95
|
+
* } HpkeKeyConfig;
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare function parseHpkeKeyConfig(contents: Buffer): HpkeKeyConfig | null;
|
|
99
|
+
/**
|
|
100
|
+
* Extracts the `maximum_name_length` field from ECHConfig contents.
|
|
101
|
+
* This value determines how much padding is added to the inner ClientHello.
|
|
102
|
+
*/
|
|
103
|
+
export declare function getMaxNameLength(contents: Buffer): number;
|
|
104
|
+
/**
|
|
105
|
+
* Builds the ECH outer extension data (type=outer) for the ClientHello.
|
|
106
|
+
*
|
|
107
|
+
* Layout:
|
|
108
|
+
* ```
|
|
109
|
+
* uint8 type = 0x00 (outer)
|
|
110
|
+
* uint16 kdf_id
|
|
111
|
+
* uint16 aead_id
|
|
112
|
+
* uint8 config_id
|
|
113
|
+
* opaque enc<0..2^16-1>
|
|
114
|
+
* opaque payload<1..2^16-1>
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export declare function buildECHOuterExtData(kdfId: number, aeadId: number, configId: number, enc: Buffer, payload: Buffer): Buffer;
|
|
118
|
+
/** Parameters needed to construct an ECH-encrypted ClientHello. */
|
|
119
|
+
export interface ECHEncryptionParams {
|
|
120
|
+
/** The selected ECHConfig entry. */
|
|
121
|
+
config: ECHConfig;
|
|
122
|
+
/** Raw bytes of the selected ECHConfig (version + length + contents). */
|
|
123
|
+
configRaw: Buffer;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Extracts the raw bytes of the first ECHConfig entry from an ECHConfigList.
|
|
127
|
+
* Returns the `version(2) + length(2) + contents(configLength)` bytes.
|
|
128
|
+
*/
|
|
129
|
+
export declare function extractFirstECHConfigRaw(echConfigList: Buffer): Buffer | null;
|
|
130
|
+
/**
|
|
131
|
+
* Core ECH encryption: encrypts an inner ClientHello body using HPKE and
|
|
132
|
+
* returns all values needed to populate the outer ECH extension.
|
|
133
|
+
*
|
|
134
|
+
* @param innerCHBody Serialized inner ClientHello body (after handshake header).
|
|
135
|
+
* @param outerCHAAD Full outer ClientHello handshake message with ECH payload zeroed.
|
|
136
|
+
* @param config The selected ECHConfig entry.
|
|
137
|
+
* @param configRaw Raw bytes of the ECHConfig entry (version + length + contents).
|
|
138
|
+
* @returns ECH outer extension data and HPKE metadata.
|
|
139
|
+
*/
|
|
140
|
+
export declare function echEncryptInner(innerCHBody: Buffer, outerCHAAD: Buffer, config: ECHConfig, configRaw: Buffer): {
|
|
141
|
+
extensionData: Buffer;
|
|
142
|
+
enc: Buffer;
|
|
143
|
+
kdfId: number;
|
|
144
|
+
aeadId: number;
|
|
145
|
+
configId: number;
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=ech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ech.d.ts","sourceRoot":"","sources":["../../src/tls/ech.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,aAAa,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwCrE;AAgDD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA0B1C;AAED,uDAAuD;AACvD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAiCzE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBzD;AA2ID;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB1H;AAED,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAqBtM"}
|