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.
Files changed (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +162 -0
  3. package/dist/cli/args.d.ts +42 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +262 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/index.d.ts +8 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +114 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/output.d.ts +22 -0
  12. package/dist/cli/output.d.ts.map +1 -0
  13. package/dist/cli/output.js +105 -0
  14. package/dist/cli/output.js.map +1 -0
  15. package/dist/cookies/jar.d.ts +41 -0
  16. package/dist/cookies/jar.d.ts.map +1 -0
  17. package/dist/cookies/jar.js +148 -0
  18. package/dist/cookies/jar.js.map +1 -0
  19. package/dist/cookies/parser.d.ts +24 -0
  20. package/dist/cookies/parser.d.ts.map +1 -0
  21. package/dist/cookies/parser.js +93 -0
  22. package/dist/cookies/parser.js.map +1 -0
  23. package/dist/core/client.d.ts +79 -0
  24. package/dist/core/client.d.ts.map +1 -0
  25. package/dist/core/client.js +106 -0
  26. package/dist/core/client.js.map +1 -0
  27. package/dist/core/errors.d.ts +36 -0
  28. package/dist/core/errors.d.ts.map +1 -0
  29. package/dist/core/errors.js +65 -0
  30. package/dist/core/errors.js.map +1 -0
  31. package/dist/core/request.d.ts +96 -0
  32. package/dist/core/request.d.ts.map +1 -0
  33. package/dist/core/request.js +5 -0
  34. package/dist/core/request.js.map +1 -0
  35. package/dist/core/response.d.ts +48 -0
  36. package/dist/core/response.d.ts.map +1 -0
  37. package/dist/core/response.js +65 -0
  38. package/dist/core/response.js.map +1 -0
  39. package/dist/core/session.d.ts +60 -0
  40. package/dist/core/session.d.ts.map +1 -0
  41. package/dist/core/session.js +305 -0
  42. package/dist/core/session.js.map +1 -0
  43. package/dist/fingerprints/akamai.d.ts +17 -0
  44. package/dist/fingerprints/akamai.d.ts.map +1 -0
  45. package/dist/fingerprints/akamai.js +30 -0
  46. package/dist/fingerprints/akamai.js.map +1 -0
  47. package/dist/fingerprints/database.d.ts +33 -0
  48. package/dist/fingerprints/database.d.ts.map +1 -0
  49. package/dist/fingerprints/database.js +68 -0
  50. package/dist/fingerprints/database.js.map +1 -0
  51. package/dist/fingerprints/extensions.d.ts +49 -0
  52. package/dist/fingerprints/extensions.d.ts.map +1 -0
  53. package/dist/fingerprints/extensions.js +178 -0
  54. package/dist/fingerprints/extensions.js.map +1 -0
  55. package/dist/fingerprints/ja3.d.ts +32 -0
  56. package/dist/fingerprints/ja3.d.ts.map +1 -0
  57. package/dist/fingerprints/ja3.js +64 -0
  58. package/dist/fingerprints/ja3.js.map +1 -0
  59. package/dist/fingerprints/profiles/chrome.d.ts +30 -0
  60. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -0
  61. package/dist/fingerprints/profiles/chrome.js +202 -0
  62. package/dist/fingerprints/profiles/chrome.js.map +1 -0
  63. package/dist/fingerprints/profiles/edge.d.ts +16 -0
  64. package/dist/fingerprints/profiles/edge.d.ts.map +1 -0
  65. package/dist/fingerprints/profiles/edge.js +61 -0
  66. package/dist/fingerprints/profiles/edge.js.map +1 -0
  67. package/dist/fingerprints/profiles/firefox.d.ts +13 -0
  68. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -0
  69. package/dist/fingerprints/profiles/firefox.js +160 -0
  70. package/dist/fingerprints/profiles/firefox.js.map +1 -0
  71. package/dist/fingerprints/profiles/safari.d.ts +16 -0
  72. package/dist/fingerprints/profiles/safari.d.ts.map +1 -0
  73. package/dist/fingerprints/profiles/safari.js +140 -0
  74. package/dist/fingerprints/profiles/safari.js.map +1 -0
  75. package/dist/fingerprints/profiles/tor.d.ts +14 -0
  76. package/dist/fingerprints/profiles/tor.d.ts.map +1 -0
  77. package/dist/fingerprints/profiles/tor.js +136 -0
  78. package/dist/fingerprints/profiles/tor.js.map +1 -0
  79. package/dist/fingerprints/types.d.ts +104 -0
  80. package/dist/fingerprints/types.d.ts.map +1 -0
  81. package/dist/fingerprints/types.js +9 -0
  82. package/dist/fingerprints/types.js.map +1 -0
  83. package/dist/http/h1/client.d.ts +21 -0
  84. package/dist/http/h1/client.d.ts.map +1 -0
  85. package/dist/http/h1/client.js +136 -0
  86. package/dist/http/h1/client.js.map +1 -0
  87. package/dist/http/h1/encoder.d.ts +11 -0
  88. package/dist/http/h1/encoder.d.ts.map +1 -0
  89. package/dist/http/h1/encoder.js +75 -0
  90. package/dist/http/h1/encoder.js.map +1 -0
  91. package/dist/http/h1/parser.d.ts +61 -0
  92. package/dist/http/h1/parser.d.ts.map +1 -0
  93. package/dist/http/h1/parser.js +258 -0
  94. package/dist/http/h1/parser.js.map +1 -0
  95. package/dist/http/h2/client.d.ts +48 -0
  96. package/dist/http/h2/client.d.ts.map +1 -0
  97. package/dist/http/h2/client.js +376 -0
  98. package/dist/http/h2/client.js.map +1 -0
  99. package/dist/http/h2/frames.d.ts +65 -0
  100. package/dist/http/h2/frames.d.ts.map +1 -0
  101. package/dist/http/h2/frames.js +184 -0
  102. package/dist/http/h2/frames.js.map +1 -0
  103. package/dist/http/h2/hpack.d.ts +27 -0
  104. package/dist/http/h2/hpack.d.ts.map +1 -0
  105. package/dist/http/h2/hpack.js +423 -0
  106. package/dist/http/h2/hpack.js.map +1 -0
  107. package/dist/http/negotiator.d.ts +36 -0
  108. package/dist/http/negotiator.d.ts.map +1 -0
  109. package/dist/http/negotiator.js +101 -0
  110. package/dist/http/negotiator.js.map +1 -0
  111. package/dist/http/pool.d.ts +63 -0
  112. package/dist/http/pool.d.ts.map +1 -0
  113. package/dist/http/pool.js +177 -0
  114. package/dist/http/pool.js.map +1 -0
  115. package/dist/index.d.ts +22 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +23 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/middleware/interceptor.d.ts +27 -0
  120. package/dist/middleware/interceptor.d.ts.map +1 -0
  121. package/dist/middleware/interceptor.js +35 -0
  122. package/dist/middleware/interceptor.js.map +1 -0
  123. package/dist/middleware/rate-limiter.d.ts +26 -0
  124. package/dist/middleware/rate-limiter.d.ts.map +1 -0
  125. package/dist/middleware/rate-limiter.js +59 -0
  126. package/dist/middleware/rate-limiter.js.map +1 -0
  127. package/dist/middleware/retry.d.ts +17 -0
  128. package/dist/middleware/retry.d.ts.map +1 -0
  129. package/dist/middleware/retry.js +64 -0
  130. package/dist/middleware/retry.js.map +1 -0
  131. package/dist/proxy/http-proxy.d.ts +23 -0
  132. package/dist/proxy/http-proxy.d.ts.map +1 -0
  133. package/dist/proxy/http-proxy.js +93 -0
  134. package/dist/proxy/http-proxy.js.map +1 -0
  135. package/dist/proxy/socks.d.ts +24 -0
  136. package/dist/proxy/socks.d.ts.map +1 -0
  137. package/dist/proxy/socks.js +196 -0
  138. package/dist/proxy/socks.js.map +1 -0
  139. package/dist/tls/constants.d.ts +142 -0
  140. package/dist/tls/constants.d.ts.map +1 -0
  141. package/dist/tls/constants.js +163 -0
  142. package/dist/tls/constants.js.map +1 -0
  143. package/dist/tls/node-engine.d.ts +22 -0
  144. package/dist/tls/node-engine.d.ts.map +1 -0
  145. package/dist/tls/node-engine.js +190 -0
  146. package/dist/tls/node-engine.js.map +1 -0
  147. package/dist/tls/stealth/client-hello.d.ts +38 -0
  148. package/dist/tls/stealth/client-hello.d.ts.map +1 -0
  149. package/dist/tls/stealth/client-hello.js +197 -0
  150. package/dist/tls/stealth/client-hello.js.map +1 -0
  151. package/dist/tls/stealth/engine.d.ts +16 -0
  152. package/dist/tls/stealth/engine.d.ts.map +1 -0
  153. package/dist/tls/stealth/engine.js +196 -0
  154. package/dist/tls/stealth/engine.js.map +1 -0
  155. package/dist/tls/stealth/handshake.d.ts +45 -0
  156. package/dist/tls/stealth/handshake.d.ts.map +1 -0
  157. package/dist/tls/stealth/handshake.js +403 -0
  158. package/dist/tls/stealth/handshake.js.map +1 -0
  159. package/dist/tls/stealth/key-schedule.d.ts +85 -0
  160. package/dist/tls/stealth/key-schedule.d.ts.map +1 -0
  161. package/dist/tls/stealth/key-schedule.js +141 -0
  162. package/dist/tls/stealth/key-schedule.js.map +1 -0
  163. package/dist/tls/stealth/record-layer.d.ts +74 -0
  164. package/dist/tls/stealth/record-layer.d.ts.map +1 -0
  165. package/dist/tls/stealth/record-layer.js +167 -0
  166. package/dist/tls/stealth/record-layer.js.map +1 -0
  167. package/dist/tls/types.d.ts +58 -0
  168. package/dist/tls/types.d.ts.map +1 -0
  169. package/dist/tls/types.js +6 -0
  170. package/dist/tls/types.js.map +1 -0
  171. package/dist/utils/buffer-reader.d.ts +32 -0
  172. package/dist/utils/buffer-reader.d.ts.map +1 -0
  173. package/dist/utils/buffer-reader.js +99 -0
  174. package/dist/utils/buffer-reader.js.map +1 -0
  175. package/dist/utils/buffer-writer.d.ts +35 -0
  176. package/dist/utils/buffer-writer.d.ts.map +1 -0
  177. package/dist/utils/buffer-writer.js +121 -0
  178. package/dist/utils/buffer-writer.js.map +1 -0
  179. package/dist/utils/encoding.d.ts +19 -0
  180. package/dist/utils/encoding.d.ts.map +1 -0
  181. package/dist/utils/encoding.js +63 -0
  182. package/dist/utils/encoding.js.map +1 -0
  183. package/dist/utils/logger.d.ts +24 -0
  184. package/dist/utils/logger.d.ts.map +1 -0
  185. package/dist/utils/logger.js +56 -0
  186. package/dist/utils/logger.js.map +1 -0
  187. package/dist/utils/url.d.ts +22 -0
  188. package/dist/utils/url.d.ts.map +1 -0
  189. package/dist/utils/url.js +56 -0
  190. package/dist/utils/url.js.map +1 -0
  191. package/dist/ws/client.d.ts +63 -0
  192. package/dist/ws/client.d.ts.map +1 -0
  193. package/dist/ws/client.js +273 -0
  194. package/dist/ws/client.js.map +1 -0
  195. package/dist/ws/frame.d.ts +44 -0
  196. package/dist/ws/frame.d.ts.map +1 -0
  197. package/dist/ws/frame.js +146 -0
  198. package/dist/ws/frame.js.map +1 -0
  199. 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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"}