nlcurl 0.1.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/LICENSE +21 -0
- package/README.md +162 -0
- package/dist/cli/args.d.ts +42 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +262 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +114 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +22 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +105 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cookies/jar.d.ts +41 -0
- package/dist/cookies/jar.d.ts.map +1 -0
- package/dist/cookies/jar.js +148 -0
- package/dist/cookies/jar.js.map +1 -0
- package/dist/cookies/parser.d.ts +24 -0
- package/dist/cookies/parser.d.ts.map +1 -0
- package/dist/cookies/parser.js +93 -0
- package/dist/cookies/parser.js.map +1 -0
- package/dist/core/client.d.ts +79 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +106 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +36 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +65 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/request.d.ts +96 -0
- package/dist/core/request.d.ts.map +1 -0
- package/dist/core/request.js +5 -0
- package/dist/core/request.js.map +1 -0
- package/dist/core/response.d.ts +48 -0
- package/dist/core/response.d.ts.map +1 -0
- package/dist/core/response.js +65 -0
- package/dist/core/response.js.map +1 -0
- package/dist/core/session.d.ts +60 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +305 -0
- package/dist/core/session.js.map +1 -0
- package/dist/fingerprints/akamai.d.ts +17 -0
- package/dist/fingerprints/akamai.d.ts.map +1 -0
- package/dist/fingerprints/akamai.js +30 -0
- package/dist/fingerprints/akamai.js.map +1 -0
- package/dist/fingerprints/database.d.ts +33 -0
- package/dist/fingerprints/database.d.ts.map +1 -0
- package/dist/fingerprints/database.js +68 -0
- package/dist/fingerprints/database.js.map +1 -0
- package/dist/fingerprints/extensions.d.ts +49 -0
- package/dist/fingerprints/extensions.d.ts.map +1 -0
- package/dist/fingerprints/extensions.js +178 -0
- package/dist/fingerprints/extensions.js.map +1 -0
- package/dist/fingerprints/ja3.d.ts +32 -0
- package/dist/fingerprints/ja3.d.ts.map +1 -0
- package/dist/fingerprints/ja3.js +64 -0
- package/dist/fingerprints/ja3.js.map +1 -0
- package/dist/fingerprints/profiles/chrome.d.ts +30 -0
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -0
- package/dist/fingerprints/profiles/chrome.js +202 -0
- package/dist/fingerprints/profiles/chrome.js.map +1 -0
- package/dist/fingerprints/profiles/edge.d.ts +16 -0
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -0
- package/dist/fingerprints/profiles/edge.js +61 -0
- package/dist/fingerprints/profiles/edge.js.map +1 -0
- package/dist/fingerprints/profiles/firefox.d.ts +13 -0
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -0
- package/dist/fingerprints/profiles/firefox.js +160 -0
- package/dist/fingerprints/profiles/firefox.js.map +1 -0
- package/dist/fingerprints/profiles/safari.d.ts +16 -0
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -0
- package/dist/fingerprints/profiles/safari.js +140 -0
- package/dist/fingerprints/profiles/safari.js.map +1 -0
- package/dist/fingerprints/profiles/tor.d.ts +14 -0
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -0
- package/dist/fingerprints/profiles/tor.js +136 -0
- package/dist/fingerprints/profiles/tor.js.map +1 -0
- package/dist/fingerprints/types.d.ts +104 -0
- package/dist/fingerprints/types.d.ts.map +1 -0
- package/dist/fingerprints/types.js +9 -0
- package/dist/fingerprints/types.js.map +1 -0
- package/dist/http/h1/client.d.ts +21 -0
- package/dist/http/h1/client.d.ts.map +1 -0
- package/dist/http/h1/client.js +136 -0
- package/dist/http/h1/client.js.map +1 -0
- package/dist/http/h1/encoder.d.ts +11 -0
- package/dist/http/h1/encoder.d.ts.map +1 -0
- package/dist/http/h1/encoder.js +75 -0
- package/dist/http/h1/encoder.js.map +1 -0
- package/dist/http/h1/parser.d.ts +61 -0
- package/dist/http/h1/parser.d.ts.map +1 -0
- package/dist/http/h1/parser.js +258 -0
- package/dist/http/h1/parser.js.map +1 -0
- package/dist/http/h2/client.d.ts +48 -0
- package/dist/http/h2/client.d.ts.map +1 -0
- package/dist/http/h2/client.js +376 -0
- package/dist/http/h2/client.js.map +1 -0
- package/dist/http/h2/frames.d.ts +65 -0
- package/dist/http/h2/frames.d.ts.map +1 -0
- package/dist/http/h2/frames.js +184 -0
- package/dist/http/h2/frames.js.map +1 -0
- package/dist/http/h2/hpack.d.ts +27 -0
- package/dist/http/h2/hpack.d.ts.map +1 -0
- package/dist/http/h2/hpack.js +423 -0
- package/dist/http/h2/hpack.js.map +1 -0
- package/dist/http/negotiator.d.ts +36 -0
- package/dist/http/negotiator.d.ts.map +1 -0
- package/dist/http/negotiator.js +101 -0
- package/dist/http/negotiator.js.map +1 -0
- package/dist/http/pool.d.ts +63 -0
- package/dist/http/pool.d.ts.map +1 -0
- package/dist/http/pool.js +177 -0
- package/dist/http/pool.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/interceptor.d.ts +27 -0
- package/dist/middleware/interceptor.d.ts.map +1 -0
- package/dist/middleware/interceptor.js +35 -0
- package/dist/middleware/interceptor.js.map +1 -0
- package/dist/middleware/rate-limiter.d.ts +26 -0
- package/dist/middleware/rate-limiter.d.ts.map +1 -0
- package/dist/middleware/rate-limiter.js +59 -0
- package/dist/middleware/rate-limiter.js.map +1 -0
- package/dist/middleware/retry.d.ts +17 -0
- package/dist/middleware/retry.d.ts.map +1 -0
- package/dist/middleware/retry.js +64 -0
- package/dist/middleware/retry.js.map +1 -0
- package/dist/proxy/http-proxy.d.ts +23 -0
- package/dist/proxy/http-proxy.d.ts.map +1 -0
- package/dist/proxy/http-proxy.js +93 -0
- package/dist/proxy/http-proxy.js.map +1 -0
- package/dist/proxy/socks.d.ts +24 -0
- package/dist/proxy/socks.d.ts.map +1 -0
- package/dist/proxy/socks.js +196 -0
- package/dist/proxy/socks.js.map +1 -0
- package/dist/tls/constants.d.ts +142 -0
- package/dist/tls/constants.d.ts.map +1 -0
- package/dist/tls/constants.js +163 -0
- package/dist/tls/constants.js.map +1 -0
- package/dist/tls/node-engine.d.ts +22 -0
- package/dist/tls/node-engine.d.ts.map +1 -0
- package/dist/tls/node-engine.js +190 -0
- package/dist/tls/node-engine.js.map +1 -0
- package/dist/tls/stealth/client-hello.d.ts +38 -0
- package/dist/tls/stealth/client-hello.d.ts.map +1 -0
- package/dist/tls/stealth/client-hello.js +197 -0
- package/dist/tls/stealth/client-hello.js.map +1 -0
- package/dist/tls/stealth/engine.d.ts +16 -0
- package/dist/tls/stealth/engine.d.ts.map +1 -0
- package/dist/tls/stealth/engine.js +196 -0
- package/dist/tls/stealth/engine.js.map +1 -0
- package/dist/tls/stealth/handshake.d.ts +45 -0
- package/dist/tls/stealth/handshake.d.ts.map +1 -0
- package/dist/tls/stealth/handshake.js +403 -0
- package/dist/tls/stealth/handshake.js.map +1 -0
- package/dist/tls/stealth/key-schedule.d.ts +85 -0
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -0
- package/dist/tls/stealth/key-schedule.js +141 -0
- package/dist/tls/stealth/key-schedule.js.map +1 -0
- package/dist/tls/stealth/record-layer.d.ts +74 -0
- package/dist/tls/stealth/record-layer.d.ts.map +1 -0
- package/dist/tls/stealth/record-layer.js +167 -0
- package/dist/tls/stealth/record-layer.js.map +1 -0
- package/dist/tls/types.d.ts +58 -0
- package/dist/tls/types.d.ts.map +1 -0
- package/dist/tls/types.js +6 -0
- package/dist/tls/types.js.map +1 -0
- package/dist/utils/buffer-reader.d.ts +32 -0
- package/dist/utils/buffer-reader.d.ts.map +1 -0
- package/dist/utils/buffer-reader.js +99 -0
- package/dist/utils/buffer-reader.js.map +1 -0
- package/dist/utils/buffer-writer.d.ts +35 -0
- package/dist/utils/buffer-writer.d.ts.map +1 -0
- package/dist/utils/buffer-writer.js +121 -0
- package/dist/utils/buffer-writer.js.map +1 -0
- package/dist/utils/encoding.d.ts +19 -0
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +63 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +56 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/url.d.ts +22 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +56 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/ws/client.d.ts +63 -0
- package/dist/ws/client.d.ts.map +1 -0
- package/dist/ws/client.js +273 -0
- package/dist/ws/client.js.map +1 -0
- package/dist/ws/frame.d.ts +44 -0
- package/dist/ws/frame.d.ts.map +1 -0
- package/dist/ws/frame.js +146 -0
- package/dist/ws/frame.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HPACK: Header Compression for HTTP/2 (RFC 7541).
|
|
3
|
+
*
|
|
4
|
+
* Implements both encoding and decoding of HPACK-compressed header
|
|
5
|
+
* blocks. Zero dependencies beyond Node.js built-ins.
|
|
6
|
+
*/
|
|
7
|
+
export declare class HPACKEncoder {
|
|
8
|
+
private dynamicTable;
|
|
9
|
+
private staticIndex;
|
|
10
|
+
private staticFullIndex;
|
|
11
|
+
constructor(tableSize?: number);
|
|
12
|
+
/**
|
|
13
|
+
* Encode a list of headers into an HPACK header block.
|
|
14
|
+
*/
|
|
15
|
+
encode(headers: Array<[string, string]>): Buffer;
|
|
16
|
+
updateTableSize(newSize: number): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class HPACKDecoder {
|
|
19
|
+
private dynamicTable;
|
|
20
|
+
constructor(tableSize?: number);
|
|
21
|
+
/**
|
|
22
|
+
* Decode an HPACK header block into a list of headers.
|
|
23
|
+
*/
|
|
24
|
+
decode(data: Buffer): Array<[string, string]>;
|
|
25
|
+
private getEntry;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=hpack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hpack.d.ts","sourceRoot":"","sources":["../../../src/http/h2/hpack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8KH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAsB;gBAEjC,SAAS,GAAE,MAAa;IAkBpC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM;IAgChD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGvC;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;gBAEvB,SAAS,GAAE,MAAa;IAIpC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA8D7C,OAAO,CAAC,QAAQ;CAWjB"}
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HPACK: Header Compression for HTTP/2 (RFC 7541).
|
|
3
|
+
*
|
|
4
|
+
* Implements both encoding and decoding of HPACK-compressed header
|
|
5
|
+
* blocks. Zero dependencies beyond Node.js built-ins.
|
|
6
|
+
*/
|
|
7
|
+
import { BufferWriter } from '../../utils/buffer-writer.js';
|
|
8
|
+
// ---- Static table (Appendix A) ----
|
|
9
|
+
const STATIC_TABLE = [
|
|
10
|
+
['', ''], // index 0 is unused
|
|
11
|
+
[':authority', ''],
|
|
12
|
+
[':method', 'GET'],
|
|
13
|
+
[':method', 'POST'],
|
|
14
|
+
[':path', '/'],
|
|
15
|
+
[':path', '/index.html'],
|
|
16
|
+
[':scheme', 'http'],
|
|
17
|
+
[':scheme', 'https'],
|
|
18
|
+
[':status', '200'],
|
|
19
|
+
[':status', '204'],
|
|
20
|
+
[':status', '206'],
|
|
21
|
+
[':status', '304'],
|
|
22
|
+
[':status', '400'],
|
|
23
|
+
[':status', '404'],
|
|
24
|
+
[':status', '500'],
|
|
25
|
+
['accept-charset', ''],
|
|
26
|
+
['accept-encoding', 'gzip, deflate'],
|
|
27
|
+
['accept-language', ''],
|
|
28
|
+
['accept-ranges', ''],
|
|
29
|
+
['accept', ''],
|
|
30
|
+
['access-control-allow-origin', ''],
|
|
31
|
+
['age', ''],
|
|
32
|
+
['allow', ''],
|
|
33
|
+
['authorization', ''],
|
|
34
|
+
['cache-control', ''],
|
|
35
|
+
['content-disposition', ''],
|
|
36
|
+
['content-encoding', ''],
|
|
37
|
+
['content-language', ''],
|
|
38
|
+
['content-length', ''],
|
|
39
|
+
['content-location', ''],
|
|
40
|
+
['content-range', ''],
|
|
41
|
+
['content-type', ''],
|
|
42
|
+
['cookie', ''],
|
|
43
|
+
['date', ''],
|
|
44
|
+
['etag', ''],
|
|
45
|
+
['expect', ''],
|
|
46
|
+
['expires', ''],
|
|
47
|
+
['from', ''],
|
|
48
|
+
['host', ''],
|
|
49
|
+
['if-match', ''],
|
|
50
|
+
['if-modified-since', ''],
|
|
51
|
+
['if-none-match', ''],
|
|
52
|
+
['if-range', ''],
|
|
53
|
+
['if-unmodified-since', ''],
|
|
54
|
+
['last-modified', ''],
|
|
55
|
+
['link', ''],
|
|
56
|
+
['location', ''],
|
|
57
|
+
['max-forwards', ''],
|
|
58
|
+
['proxy-authenticate', ''],
|
|
59
|
+
['proxy-authorization', ''],
|
|
60
|
+
['range', ''],
|
|
61
|
+
['referer', ''],
|
|
62
|
+
['refresh', ''],
|
|
63
|
+
['retry-after', ''],
|
|
64
|
+
['server', ''],
|
|
65
|
+
['set-cookie', ''],
|
|
66
|
+
['strict-transport-security', ''],
|
|
67
|
+
['transfer-encoding', ''],
|
|
68
|
+
['user-agent', ''],
|
|
69
|
+
['vary', ''],
|
|
70
|
+
['via', ''],
|
|
71
|
+
['www-authenticate', ''],
|
|
72
|
+
];
|
|
73
|
+
// ---- Dynamic table ----
|
|
74
|
+
class DynamicTable {
|
|
75
|
+
entries = [];
|
|
76
|
+
currentSize = 0;
|
|
77
|
+
maxSize;
|
|
78
|
+
constructor(maxSize = 4096) {
|
|
79
|
+
this.maxSize = maxSize;
|
|
80
|
+
}
|
|
81
|
+
add(name, value) {
|
|
82
|
+
const entrySize = name.length + value.length + 32;
|
|
83
|
+
// Evict entries to make room
|
|
84
|
+
while (this.currentSize + entrySize > this.maxSize && this.entries.length > 0) {
|
|
85
|
+
const evicted = this.entries.pop();
|
|
86
|
+
this.currentSize -= evicted[0].length + evicted[1].length + 32;
|
|
87
|
+
}
|
|
88
|
+
if (entrySize <= this.maxSize) {
|
|
89
|
+
this.entries.unshift([name, value]);
|
|
90
|
+
this.currentSize += entrySize;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
get(index) {
|
|
94
|
+
return this.entries[index];
|
|
95
|
+
}
|
|
96
|
+
get length() {
|
|
97
|
+
return this.entries.length;
|
|
98
|
+
}
|
|
99
|
+
updateMaxSize(newMax) {
|
|
100
|
+
this.maxSize = newMax;
|
|
101
|
+
while (this.currentSize > this.maxSize && this.entries.length > 0) {
|
|
102
|
+
const evicted = this.entries.pop();
|
|
103
|
+
this.currentSize -= evicted[0].length + evicted[1].length + 32;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// ---- Integer encoding/decoding (RFC 7541 section 5.1) ----
|
|
108
|
+
function encodeInteger(w, value, prefix, mask) {
|
|
109
|
+
const maxPrefix = (1 << prefix) - 1;
|
|
110
|
+
if (value < maxPrefix) {
|
|
111
|
+
w.writeUInt8(mask | value);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
w.writeUInt8(mask | maxPrefix);
|
|
115
|
+
value -= maxPrefix;
|
|
116
|
+
while (value >= 128) {
|
|
117
|
+
w.writeUInt8((value & 0x7f) | 0x80);
|
|
118
|
+
value >>= 7;
|
|
119
|
+
}
|
|
120
|
+
w.writeUInt8(value);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function decodeInteger(data, offset, prefix) {
|
|
124
|
+
const maxPrefix = (1 << prefix) - 1;
|
|
125
|
+
let value = data[offset] & maxPrefix;
|
|
126
|
+
let bytesRead = 1;
|
|
127
|
+
if (value === maxPrefix) {
|
|
128
|
+
let shift = 0;
|
|
129
|
+
let byte;
|
|
130
|
+
do {
|
|
131
|
+
byte = data[offset + bytesRead];
|
|
132
|
+
bytesRead++;
|
|
133
|
+
value += (byte & 0x7f) << shift;
|
|
134
|
+
shift += 7;
|
|
135
|
+
} while (byte & 0x80);
|
|
136
|
+
}
|
|
137
|
+
return { value, bytesRead };
|
|
138
|
+
}
|
|
139
|
+
// ---- String encoding/decoding ----
|
|
140
|
+
function encodeString(w, str, huffman = false) {
|
|
141
|
+
// For simplicity, we use raw encoding (not Huffman).
|
|
142
|
+
// Huffman encoding can improve compression but is not required.
|
|
143
|
+
const buf = Buffer.from(str, 'latin1');
|
|
144
|
+
if (huffman) {
|
|
145
|
+
const encoded = huffmanEncode(buf);
|
|
146
|
+
encodeInteger(w, encoded.length, 7, 0x80);
|
|
147
|
+
w.writeBytes(encoded);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
encodeInteger(w, buf.length, 7, 0x00);
|
|
151
|
+
w.writeBytes(buf);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function decodeString(data, offset) {
|
|
155
|
+
const isHuffman = !!(data[offset] & 0x80);
|
|
156
|
+
const { value: length, bytesRead: intBytes } = decodeInteger(data, offset, 7);
|
|
157
|
+
const raw = data.subarray(offset + intBytes, offset + intBytes + length);
|
|
158
|
+
const str = isHuffman ? huffmanDecode(raw).toString('latin1') : raw.toString('latin1');
|
|
159
|
+
return { value: str, bytesRead: intBytes + length };
|
|
160
|
+
}
|
|
161
|
+
// ---- HPACK Encoder ----
|
|
162
|
+
export class HPACKEncoder {
|
|
163
|
+
dynamicTable;
|
|
164
|
+
staticIndex;
|
|
165
|
+
staticFullIndex;
|
|
166
|
+
constructor(tableSize = 4096) {
|
|
167
|
+
this.dynamicTable = new DynamicTable(tableSize);
|
|
168
|
+
// Build static table indices
|
|
169
|
+
this.staticIndex = new Map();
|
|
170
|
+
this.staticFullIndex = new Map();
|
|
171
|
+
for (let i = 1; i < STATIC_TABLE.length; i++) {
|
|
172
|
+
const [name, value] = STATIC_TABLE[i];
|
|
173
|
+
const key = `${name}\0${value}`;
|
|
174
|
+
if (!this.staticFullIndex.has(key)) {
|
|
175
|
+
this.staticFullIndex.set(key, i);
|
|
176
|
+
}
|
|
177
|
+
if (!this.staticIndex.has(name)) {
|
|
178
|
+
this.staticIndex.set(name, i);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Encode a list of headers into an HPACK header block.
|
|
184
|
+
*/
|
|
185
|
+
encode(headers) {
|
|
186
|
+
const w = new BufferWriter(1024);
|
|
187
|
+
for (const [name, value] of headers) {
|
|
188
|
+
const fullKey = `${name}\0${value}`;
|
|
189
|
+
const fullIdx = this.staticFullIndex.get(fullKey);
|
|
190
|
+
if (fullIdx !== undefined) {
|
|
191
|
+
// Indexed header field (section 6.1)
|
|
192
|
+
encodeInteger(w, fullIdx, 7, 0x80);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
const nameIdx = this.staticIndex.get(name);
|
|
196
|
+
if (nameIdx !== undefined) {
|
|
197
|
+
// Literal header with incremental indexing (section 6.2.1)
|
|
198
|
+
encodeInteger(w, nameIdx, 6, 0x40);
|
|
199
|
+
encodeString(w, value);
|
|
200
|
+
this.dynamicTable.add(name, value);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
// Literal header with incremental indexing, new name
|
|
204
|
+
w.writeUInt8(0x40);
|
|
205
|
+
encodeString(w, name);
|
|
206
|
+
encodeString(w, value);
|
|
207
|
+
this.dynamicTable.add(name, value);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return w.toBuffer();
|
|
211
|
+
}
|
|
212
|
+
updateTableSize(newSize) {
|
|
213
|
+
this.dynamicTable.updateMaxSize(newSize);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// ---- HPACK Decoder ----
|
|
217
|
+
export class HPACKDecoder {
|
|
218
|
+
dynamicTable;
|
|
219
|
+
constructor(tableSize = 4096) {
|
|
220
|
+
this.dynamicTable = new DynamicTable(tableSize);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Decode an HPACK header block into a list of headers.
|
|
224
|
+
*/
|
|
225
|
+
decode(data) {
|
|
226
|
+
const headers = [];
|
|
227
|
+
let offset = 0;
|
|
228
|
+
while (offset < data.length) {
|
|
229
|
+
const byte = data[offset];
|
|
230
|
+
if (byte & 0x80) {
|
|
231
|
+
// Indexed header field (section 6.1)
|
|
232
|
+
const { value: index, bytesRead } = decodeInteger(data, offset, 7);
|
|
233
|
+
offset += bytesRead;
|
|
234
|
+
const entry = this.getEntry(index);
|
|
235
|
+
headers.push(entry);
|
|
236
|
+
}
|
|
237
|
+
else if (byte & 0x40) {
|
|
238
|
+
// Literal with incremental indexing (section 6.2.1)
|
|
239
|
+
const { value: nameIndex, bytesRead: intBytes } = decodeInteger(data, offset, 6);
|
|
240
|
+
offset += intBytes;
|
|
241
|
+
let name;
|
|
242
|
+
if (nameIndex > 0) {
|
|
243
|
+
name = this.getEntry(nameIndex)[0];
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
const { value: n, bytesRead: strBytes } = decodeString(data, offset);
|
|
247
|
+
name = n;
|
|
248
|
+
offset += strBytes;
|
|
249
|
+
}
|
|
250
|
+
const { value, bytesRead: valBytes } = decodeString(data, offset);
|
|
251
|
+
offset += valBytes;
|
|
252
|
+
this.dynamicTable.add(name, value);
|
|
253
|
+
headers.push([name, value]);
|
|
254
|
+
}
|
|
255
|
+
else if (byte & 0x20) {
|
|
256
|
+
// Dynamic table size update (section 6.3)
|
|
257
|
+
const { value: newSize, bytesRead } = decodeInteger(data, offset, 5);
|
|
258
|
+
offset += bytesRead;
|
|
259
|
+
this.dynamicTable.updateMaxSize(newSize);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// Literal without indexing (section 6.2.2) or
|
|
263
|
+
// Literal never indexed (section 6.2.3)
|
|
264
|
+
const prefix = (byte & 0x10) ? 4 : 4;
|
|
265
|
+
const { value: nameIndex, bytesRead: intBytes } = decodeInteger(data, offset, prefix);
|
|
266
|
+
offset += intBytes;
|
|
267
|
+
let name;
|
|
268
|
+
if (nameIndex > 0) {
|
|
269
|
+
name = this.getEntry(nameIndex)[0];
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
const { value: n, bytesRead: strBytes } = decodeString(data, offset);
|
|
273
|
+
name = n;
|
|
274
|
+
offset += strBytes;
|
|
275
|
+
}
|
|
276
|
+
const { value, bytesRead: valBytes } = decodeString(data, offset);
|
|
277
|
+
offset += valBytes;
|
|
278
|
+
headers.push([name, value]);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return headers;
|
|
282
|
+
}
|
|
283
|
+
getEntry(index) {
|
|
284
|
+
if (index < STATIC_TABLE.length) {
|
|
285
|
+
return STATIC_TABLE[index];
|
|
286
|
+
}
|
|
287
|
+
const dynIndex = index - STATIC_TABLE.length;
|
|
288
|
+
const entry = this.dynamicTable.get(dynIndex);
|
|
289
|
+
if (!entry) {
|
|
290
|
+
throw new Error(`HPACK: invalid index ${index}`);
|
|
291
|
+
}
|
|
292
|
+
return entry;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// ---- Huffman coding (RFC 7541 Appendix B) ----
|
|
296
|
+
// Huffman table: [code, bitLength] for each byte value (0-256, where 256 = EOS)
|
|
297
|
+
const HUFFMAN_TABLE = [
|
|
298
|
+
[0x1ff8, 13], [0x7fffd8, 23], [0xfffffe2, 28], [0xfffffe3, 28],
|
|
299
|
+
[0xfffffe4, 28], [0xfffffe5, 28], [0xfffffe6, 28], [0xfffffe7, 28],
|
|
300
|
+
[0xfffffe8, 28], [0xffffea, 24], [0x3ffffffc, 30], [0xfffffe9, 28],
|
|
301
|
+
[0xfffffea, 28], [0x3ffffffd, 30], [0xfffffeb, 28], [0xfffffec, 28],
|
|
302
|
+
[0xfffffed, 28], [0xfffffee, 28], [0xfffffef, 28], [0xffffff0, 28],
|
|
303
|
+
[0xffffff1, 28], [0xffffff2, 28], [0x3ffffffe, 30], [0xffffff3, 28],
|
|
304
|
+
[0xffffff4, 28], [0xffffff5, 28], [0xffffff6, 28], [0xffffff7, 28],
|
|
305
|
+
[0xffffff8, 28], [0xffffff9, 28], [0xffffffa, 28], [0xffffffb, 28],
|
|
306
|
+
[0x14, 6], [0x3f8, 10], [0x3f9, 10], [0xffa, 12],
|
|
307
|
+
[0x1ff9, 13], [0x15, 6], [0xf8, 8], [0x7fa, 11],
|
|
308
|
+
[0x3fa, 10], [0x3fb, 10], [0xf9, 8], [0x7fb, 11],
|
|
309
|
+
[0xfa, 8], [0x16, 6], [0x17, 6], [0x18, 6],
|
|
310
|
+
[0x0, 5], [0x1, 5], [0x2, 5], [0x19, 6],
|
|
311
|
+
[0x1a, 6], [0x1b, 6], [0x1c, 6], [0x1d, 6],
|
|
312
|
+
[0x1e, 6], [0x1f, 6], [0x5c, 7], [0xfb, 8],
|
|
313
|
+
[0x7ffc, 15], [0x20, 6], [0xffb, 12], [0x3fc, 10],
|
|
314
|
+
[0x1ffa, 13], [0x21, 6], [0x5d, 7], [0x5e, 7],
|
|
315
|
+
[0x5f, 7], [0x60, 7], [0x61, 7], [0x62, 7],
|
|
316
|
+
[0x63, 7], [0x64, 7], [0x65, 7], [0x66, 7],
|
|
317
|
+
[0x67, 7], [0x68, 7], [0x69, 7], [0x6a, 7],
|
|
318
|
+
[0x6b, 7], [0x6c, 7], [0x6d, 7], [0x6e, 7],
|
|
319
|
+
[0x6f, 7], [0x70, 7], [0x71, 7], [0x72, 7],
|
|
320
|
+
[0xfc, 8], [0x73, 7], [0xfd, 8], [0x1ffb, 13],
|
|
321
|
+
[0x7fff0, 19], [0x1ffc, 13], [0x3ffc, 14], [0x22, 6],
|
|
322
|
+
[0x7ffd, 15], [0x3, 5], [0x23, 6], [0x4, 5],
|
|
323
|
+
[0x24, 6], [0x5, 5], [0x25, 6], [0x26, 6],
|
|
324
|
+
[0x27, 6], [0x6, 5], [0x74, 7], [0x75, 7],
|
|
325
|
+
[0x28, 6], [0x29, 6], [0x2a, 6], [0x7, 5],
|
|
326
|
+
[0x2b, 6], [0x76, 7], [0x2c, 6], [0x8, 5],
|
|
327
|
+
[0x9, 5], [0x2d, 6], [0x77, 7], [0x78, 7],
|
|
328
|
+
[0x79, 7], [0x7a, 7], [0x7b, 7], [0x7ffe, 15],
|
|
329
|
+
[0x7fc, 11], [0x3ffd, 14], [0x1ffd, 13], [0xffffffc, 28],
|
|
330
|
+
[0xfffe6, 20], [0x3fffd2, 22], [0xfffe7, 20], [0xfffe8, 20],
|
|
331
|
+
[0x3fffd3, 22], [0x3fffd4, 22], [0x3fffd5, 22], [0x7fffd9, 23],
|
|
332
|
+
[0x3fffd6, 22], [0x7fffda, 23], [0x7fffdb, 23], [0x7fffdc, 23],
|
|
333
|
+
[0x7fffdd, 23], [0x7fffde, 23], [0xffffeb, 24], [0x7fffdf, 23],
|
|
334
|
+
[0xffffec, 24], [0xffffed, 24], [0x3fffd7, 22], [0x7fffe0, 23],
|
|
335
|
+
[0xffffee, 24], [0x7fffe1, 23], [0x7fffe2, 23], [0x7fffe3, 23],
|
|
336
|
+
[0x7fffe4, 23], [0x1fffdc, 21], [0x3fffd8, 22], [0x7fffe5, 23],
|
|
337
|
+
[0x3fffd9, 22], [0x7fffe6, 23], [0x7fffe7, 23], [0xffffef, 24],
|
|
338
|
+
[0x3fffda, 22], [0x1fffdd, 21], [0xfffe9, 20], [0x3fffdb, 22],
|
|
339
|
+
[0x3fffdc, 22], [0x7fffe8, 23], [0x7fffe9, 23], [0x1fffde, 21],
|
|
340
|
+
[0x7fffea, 23], [0x3fffdd, 22], [0x3fffde, 22], [0xfffff0, 24],
|
|
341
|
+
[0x1fffdf, 21], [0x3fffdf, 22], [0x7fffeb, 23], [0x7fffec, 23],
|
|
342
|
+
[0x1fffe0, 21], [0x1fffe1, 21], [0x3fffe0, 22], [0x1fffe2, 21],
|
|
343
|
+
[0x7fffed, 23], [0x3fffe1, 22], [0x7fffee, 23], [0x7fffef, 23],
|
|
344
|
+
[0xfffea, 20], [0x3fffe2, 22], [0x3fffe3, 22], [0x3fffe4, 22],
|
|
345
|
+
[0x7ffff0, 23], [0x3fffe5, 22], [0x3fffe6, 22], [0x7ffff1, 23],
|
|
346
|
+
[0x3ffffe0, 26], [0x3ffffe1, 26], [0xfffeb, 20], [0x7fff1, 19],
|
|
347
|
+
[0x3fffe7, 22], [0x7ffff2, 23], [0x3fffe8, 22], [0x1ffffec, 25],
|
|
348
|
+
[0x3ffffe2, 26], [0x3ffffe3, 26], [0x3ffffe4, 26], [0x7ffffde, 27],
|
|
349
|
+
[0x7ffffdf, 27], [0x3ffffe5, 26], [0xfffff1, 24], [0x1ffffed, 25],
|
|
350
|
+
[0x7fff2, 19], [0x1fffe3, 21], [0x3ffffe6, 26], [0x7ffffe0, 27],
|
|
351
|
+
[0x7ffffe1, 27], [0x3ffffe7, 26], [0x7ffffe2, 27], [0xfffff2, 24],
|
|
352
|
+
[0x1fffe4, 21], [0x1fffe5, 21], [0x3ffffe8, 26], [0x3ffffe9, 26],
|
|
353
|
+
[0xffffffd, 28], [0x7ffffe3, 27], [0x7ffffe4, 27], [0x7ffffe5, 27],
|
|
354
|
+
[0xfffec, 20], [0xfffff3, 24], [0xfffed, 20], [0x1fffe6, 21],
|
|
355
|
+
[0x3fffe9, 22], [0x1fffe7, 21], [0x1fffe8, 21], [0x7ffff3, 23],
|
|
356
|
+
[0x3fffea, 22], [0x3fffeb, 22], [0x1ffffee, 25], [0x1ffffef, 25],
|
|
357
|
+
[0xfffff4, 24], [0xfffff5, 24], [0x3ffffea, 26], [0x7ffff4, 23],
|
|
358
|
+
[0x3ffffeb, 26], [0x7ffffe6, 27], [0x3ffffec, 26], [0x3ffffed, 26],
|
|
359
|
+
[0x7ffffe7, 27], [0x7ffffe8, 27], [0x7ffffe9, 27], [0x7ffffea, 27],
|
|
360
|
+
[0x7ffffeb, 27], [0xffffffe, 28], [0x7ffffec, 27], [0x7ffffed, 27],
|
|
361
|
+
[0x7ffffee, 27], [0x7ffffef, 27], [0x7fffff0, 27], [0x3ffffee, 26],
|
|
362
|
+
[0x3fffffff, 30], // EOS (256)
|
|
363
|
+
];
|
|
364
|
+
function huffmanEncode(input) {
|
|
365
|
+
let bits = 0n;
|
|
366
|
+
let bitLen = 0;
|
|
367
|
+
for (let i = 0; i < input.length; i++) {
|
|
368
|
+
const [code, codeLen] = HUFFMAN_TABLE[input[i]];
|
|
369
|
+
bits = (bits << BigInt(codeLen)) | BigInt(code);
|
|
370
|
+
bitLen += codeLen;
|
|
371
|
+
}
|
|
372
|
+
// Pad with EOS prefix
|
|
373
|
+
const padding = (8 - (bitLen % 8)) % 8;
|
|
374
|
+
if (padding > 0) {
|
|
375
|
+
bits = (bits << BigInt(padding)) | ((1n << BigInt(padding)) - 1n);
|
|
376
|
+
bitLen += padding;
|
|
377
|
+
}
|
|
378
|
+
const byteLen = bitLen / 8;
|
|
379
|
+
const result = Buffer.alloc(Number(byteLen));
|
|
380
|
+
for (let i = Number(byteLen) - 1; i >= 0; i--) {
|
|
381
|
+
result[i] = Number(bits & 0xffn);
|
|
382
|
+
bits >>= 8n;
|
|
383
|
+
}
|
|
384
|
+
return result;
|
|
385
|
+
}
|
|
386
|
+
function buildHuffmanTree() {
|
|
387
|
+
const root = { children: [null, null] };
|
|
388
|
+
for (let i = 0; i < HUFFMAN_TABLE.length; i++) {
|
|
389
|
+
const [code, bitLen] = HUFFMAN_TABLE[i];
|
|
390
|
+
let node = root;
|
|
391
|
+
for (let j = bitLen - 1; j >= 0; j--) {
|
|
392
|
+
const bit = (code >> j) & 1;
|
|
393
|
+
if (!node.children[bit]) {
|
|
394
|
+
node.children[bit] = { children: [null, null] };
|
|
395
|
+
}
|
|
396
|
+
node = node.children[bit];
|
|
397
|
+
}
|
|
398
|
+
node.value = i;
|
|
399
|
+
}
|
|
400
|
+
return root;
|
|
401
|
+
}
|
|
402
|
+
const HUFFMAN_TREE = buildHuffmanTree();
|
|
403
|
+
function huffmanDecode(input) {
|
|
404
|
+
const output = [];
|
|
405
|
+
let node = HUFFMAN_TREE;
|
|
406
|
+
for (let i = 0; i < input.length; i++) {
|
|
407
|
+
for (let j = 7; j >= 0; j--) {
|
|
408
|
+
const bit = (input[i] >> j) & 1;
|
|
409
|
+
node = node.children[bit];
|
|
410
|
+
if (!node) {
|
|
411
|
+
throw new Error('HPACK: invalid Huffman code');
|
|
412
|
+
}
|
|
413
|
+
if (node.value !== undefined) {
|
|
414
|
+
if (node.value === 256)
|
|
415
|
+
return Buffer.from(output); // EOS
|
|
416
|
+
output.push(node.value);
|
|
417
|
+
node = HUFFMAN_TREE;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return Buffer.from(output);
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=hpack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hpack.js","sourceRoot":"","sources":["../../../src/http/h2/hpack.ts"],"names":[],"mappings":"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AAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,E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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol negotiator.
|
|
3
|
+
*
|
|
4
|
+
* Establishes TLS connections, determines the negotiated ALPN protocol,
|
|
5
|
+
* and returns either an H1 or H2 transport ready for request dispatch.
|
|
6
|
+
*/
|
|
7
|
+
import type { BrowserProfile } from '../fingerprints/types.js';
|
|
8
|
+
import { type PoolOptions } from './pool.js';
|
|
9
|
+
import type { NLcURLRequest } from '../core/request.js';
|
|
10
|
+
import { NLcURLResponse } from '../core/response.js';
|
|
11
|
+
export interface NegotiatorOptions {
|
|
12
|
+
/** Use stealth TLS engine for full fingerprint control. */
|
|
13
|
+
stealth?: boolean;
|
|
14
|
+
/** Browser profile for TLS/H2 fingerprinting. */
|
|
15
|
+
profile?: BrowserProfile;
|
|
16
|
+
/** Allow insecure TLS connections (skip certificate verification). */
|
|
17
|
+
insecure?: boolean;
|
|
18
|
+
/** Connection pool options. */
|
|
19
|
+
pool?: PoolOptions;
|
|
20
|
+
}
|
|
21
|
+
export declare class ProtocolNegotiator {
|
|
22
|
+
private readonly standardEngine;
|
|
23
|
+
private readonly stealthEngine;
|
|
24
|
+
private readonly pool;
|
|
25
|
+
constructor(poolOptions?: PoolOptions);
|
|
26
|
+
/**
|
|
27
|
+
* Send a request, reusing pooled connections when possible.
|
|
28
|
+
*/
|
|
29
|
+
send(request: NLcURLRequest, options?: NegotiatorOptions): Promise<NLcURLResponse>;
|
|
30
|
+
/**
|
|
31
|
+
* Close all connections.
|
|
32
|
+
*/
|
|
33
|
+
close(): void;
|
|
34
|
+
private connect;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=negotiator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiator.d.ts","sourceRoot":"","sources":["../../src/http/negotiator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D,OAAO,EAAkC,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7E,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iDAAiD;IACjD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;gBAE1B,WAAW,CAAC,EAAE,WAAW;IAMrC;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,cAAc,CAAC;IA6D1B;;OAEG;IACH,KAAK,IAAI,IAAI;YAMC,OAAO;CAsBtB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol negotiator.
|
|
3
|
+
*
|
|
4
|
+
* Establishes TLS connections, determines the negotiated ALPN protocol,
|
|
5
|
+
* and returns either an H1 or H2 transport ready for request dispatch.
|
|
6
|
+
*/
|
|
7
|
+
import { NodeTLSEngine } from '../tls/node-engine.js';
|
|
8
|
+
import { StealthTLSEngine } from '../tls/stealth/engine.js';
|
|
9
|
+
import { originOf } from '../utils/url.js';
|
|
10
|
+
import { supportsZstd, sanitizeAcceptEncoding } from '../utils/encoding.js';
|
|
11
|
+
import { ConnectionPool } from './pool.js';
|
|
12
|
+
import { sendH1Request } from './h1/client.js';
|
|
13
|
+
export class ProtocolNegotiator {
|
|
14
|
+
standardEngine;
|
|
15
|
+
stealthEngine;
|
|
16
|
+
pool;
|
|
17
|
+
constructor(poolOptions) {
|
|
18
|
+
this.standardEngine = new NodeTLSEngine();
|
|
19
|
+
this.stealthEngine = new StealthTLSEngine();
|
|
20
|
+
this.pool = new ConnectionPool(poolOptions);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Send a request, reusing pooled connections when possible.
|
|
24
|
+
*/
|
|
25
|
+
async send(request, options = {}) {
|
|
26
|
+
const url = new URL(request.url);
|
|
27
|
+
const origin = originOf(url.toString());
|
|
28
|
+
const timings = {};
|
|
29
|
+
// Try to reuse a pooled connection
|
|
30
|
+
let poolEntry = this.pool.get(origin);
|
|
31
|
+
if (!poolEntry) {
|
|
32
|
+
// Establish new connection
|
|
33
|
+
const connectStart = Date.now();
|
|
34
|
+
const socket = await this.connect(url, request, options);
|
|
35
|
+
const connectEnd = Date.now();
|
|
36
|
+
timings.connect = connectEnd - connectStart;
|
|
37
|
+
const alpn = socket.connectionInfo.alpnProtocol;
|
|
38
|
+
const protocol = alpn === 'h2' ? 'h2' : 'h1';
|
|
39
|
+
const defaultHeaders = sanitizeProfileHeaders(options.profile?.headers.headers ?? []);
|
|
40
|
+
poolEntry = this.pool.put(origin, socket, protocol, protocol === 'h2' ? options.profile?.h2 : undefined, defaultHeaders);
|
|
41
|
+
}
|
|
42
|
+
// Dispatch based on protocol
|
|
43
|
+
if (poolEntry.protocol === 'h2' && poolEntry.h2Client) {
|
|
44
|
+
poolEntry.h2Client.sendPreface();
|
|
45
|
+
const response = await poolEntry.h2Client.request(request, timings);
|
|
46
|
+
return response;
|
|
47
|
+
}
|
|
48
|
+
// HTTP/1.1
|
|
49
|
+
let response;
|
|
50
|
+
try {
|
|
51
|
+
response = await sendH1Request(poolEntry.socket, request, { defaultHeaders: sanitizeProfileHeaders(options.profile?.headers.headers ?? []) }, timings);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
// Connection is in unknown state — remove from pool
|
|
55
|
+
this.pool.remove(poolEntry);
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
// Check if we can reuse the connection
|
|
59
|
+
const connection = response.headers['connection'];
|
|
60
|
+
if (connection?.toLowerCase() === 'close') {
|
|
61
|
+
this.pool.remove(poolEntry);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.pool.release(poolEntry);
|
|
65
|
+
}
|
|
66
|
+
return response;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Close all connections.
|
|
70
|
+
*/
|
|
71
|
+
close() {
|
|
72
|
+
this.pool.close();
|
|
73
|
+
}
|
|
74
|
+
// ---- Internal ----
|
|
75
|
+
async connect(url, request, options) {
|
|
76
|
+
const engine = (request.stealth ?? options.stealth) ? this.stealthEngine : this.standardEngine;
|
|
77
|
+
const port = url.port ? parseInt(url.port, 10) : url.protocol === 'https:' ? 443 : 80;
|
|
78
|
+
const tlsOptions = {
|
|
79
|
+
host: url.hostname,
|
|
80
|
+
port,
|
|
81
|
+
servername: url.hostname,
|
|
82
|
+
insecure: options.insecure ?? false,
|
|
83
|
+
alpnProtocols: options.profile?.tls.alpnProtocols ?? ['h2', 'http/1.1'],
|
|
84
|
+
timeout: typeof request.timeout === 'number' ? request.timeout : request.timeout?.connect,
|
|
85
|
+
signal: request.signal,
|
|
86
|
+
};
|
|
87
|
+
return engine.connect(tlsOptions, options.profile);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* On runtimes that lack zstd decompression (Node < 22), strip zstd from
|
|
92
|
+
* the accept-encoding default header so servers never respond with it.
|
|
93
|
+
*/
|
|
94
|
+
function sanitizeProfileHeaders(headers) {
|
|
95
|
+
if (supportsZstd)
|
|
96
|
+
return headers;
|
|
97
|
+
return headers.map(([k, v]) => k.toLowerCase() === 'accept-encoding'
|
|
98
|
+
? [k, sanitizeAcceptEncoding(v)]
|
|
99
|
+
: [k, v]);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=negotiator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiator.js","sourceRoot":"","sources":["../../src/http/negotiator.ts"],"names":[],"mappings":"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"}
|