nlcurl 0.3.1 → 0.5.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 (187) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/args.d.ts.map +1 -1
  3. package/dist/cli/args.js +84 -90
  4. package/dist/cli/args.js.map +1 -1
  5. package/dist/cli/index.js +25 -25
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/output.d.ts +2 -2
  8. package/dist/cli/output.d.ts.map +1 -1
  9. package/dist/cli/output.js +55 -55
  10. package/dist/cli/output.js.map +1 -1
  11. package/dist/cookies/jar.d.ts +1 -1
  12. package/dist/cookies/jar.d.ts.map +1 -1
  13. package/dist/cookies/jar.js +20 -22
  14. package/dist/cookies/jar.js.map +1 -1
  15. package/dist/cookies/parser.d.ts +1 -1
  16. package/dist/cookies/parser.d.ts.map +1 -1
  17. package/dist/cookies/parser.js +20 -22
  18. package/dist/cookies/parser.js.map +1 -1
  19. package/dist/core/client.d.ts +3 -3
  20. package/dist/core/client.d.ts.map +1 -1
  21. package/dist/core/client.js +9 -8
  22. package/dist/core/client.js.map +1 -1
  23. package/dist/core/errors.d.ts +64 -21
  24. package/dist/core/errors.d.ts.map +1 -1
  25. package/dist/core/errors.js +112 -36
  26. package/dist/core/errors.js.map +1 -1
  27. package/dist/core/request.d.ts +10 -5
  28. package/dist/core/request.d.ts.map +1 -1
  29. package/dist/core/response.d.ts +2 -2
  30. package/dist/core/response.d.ts.map +1 -1
  31. package/dist/core/response.js +6 -8
  32. package/dist/core/response.js.map +1 -1
  33. package/dist/core/session.d.ts +7 -6
  34. package/dist/core/session.d.ts.map +1 -1
  35. package/dist/core/session.js +58 -43
  36. package/dist/core/session.js.map +1 -1
  37. package/dist/core/validation.d.ts +96 -0
  38. package/dist/core/validation.d.ts.map +1 -0
  39. package/dist/core/validation.js +246 -0
  40. package/dist/core/validation.js.map +1 -0
  41. package/dist/fingerprints/akamai.d.ts +1 -1
  42. package/dist/fingerprints/akamai.d.ts.map +1 -1
  43. package/dist/fingerprints/akamai.js +3 -7
  44. package/dist/fingerprints/akamai.js.map +1 -1
  45. package/dist/fingerprints/database.d.ts +7 -7
  46. package/dist/fingerprints/database.d.ts.map +1 -1
  47. package/dist/fingerprints/database.js +12 -18
  48. package/dist/fingerprints/database.js.map +1 -1
  49. package/dist/fingerprints/extensions.d.ts.map +1 -1
  50. package/dist/fingerprints/extensions.js +4 -4
  51. package/dist/fingerprints/extensions.js.map +1 -1
  52. package/dist/fingerprints/ja3.d.ts +1 -1
  53. package/dist/fingerprints/ja3.d.ts.map +1 -1
  54. package/dist/fingerprints/ja3.js +12 -12
  55. package/dist/fingerprints/ja3.js.map +1 -1
  56. package/dist/fingerprints/profiles/chrome.d.ts +1 -1
  57. package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
  58. package/dist/fingerprints/profiles/chrome.js +59 -100
  59. package/dist/fingerprints/profiles/chrome.js.map +1 -1
  60. package/dist/fingerprints/profiles/edge.d.ts +1 -1
  61. package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
  62. package/dist/fingerprints/profiles/edge.js +26 -26
  63. package/dist/fingerprints/profiles/edge.js.map +1 -1
  64. package/dist/fingerprints/profiles/firefox.d.ts +1 -1
  65. package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
  66. package/dist/fingerprints/profiles/firefox.js +35 -85
  67. package/dist/fingerprints/profiles/firefox.js.map +1 -1
  68. package/dist/fingerprints/profiles/safari.d.ts +1 -1
  69. package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
  70. package/dist/fingerprints/profiles/safari.js +35 -68
  71. package/dist/fingerprints/profiles/safari.js.map +1 -1
  72. package/dist/fingerprints/profiles/tor.d.ts +1 -1
  73. package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
  74. package/dist/fingerprints/profiles/tor.js +24 -57
  75. package/dist/fingerprints/profiles/tor.js.map +1 -1
  76. package/dist/fingerprints/types.d.ts +1 -1
  77. package/dist/fingerprints/types.d.ts.map +1 -1
  78. package/dist/http/h1/client.d.ts +4 -4
  79. package/dist/http/h1/client.d.ts.map +1 -1
  80. package/dist/http/h1/client.js +31 -31
  81. package/dist/http/h1/client.js.map +1 -1
  82. package/dist/http/h1/encoder.d.ts +1 -1
  83. package/dist/http/h1/encoder.d.ts.map +1 -1
  84. package/dist/http/h1/encoder.js +21 -20
  85. package/dist/http/h1/encoder.js.map +1 -1
  86. package/dist/http/h1/parser.d.ts +1 -1
  87. package/dist/http/h1/parser.d.ts.map +1 -1
  88. package/dist/http/h1/parser.js +29 -33
  89. package/dist/http/h1/parser.js.map +1 -1
  90. package/dist/http/h2/client.d.ts +5 -4
  91. package/dist/http/h2/client.d.ts.map +1 -1
  92. package/dist/http/h2/client.js +88 -76
  93. package/dist/http/h2/client.js.map +1 -1
  94. package/dist/http/h2/frames.d.ts +7 -3
  95. package/dist/http/h2/frames.d.ts.map +1 -1
  96. package/dist/http/h2/frames.js +16 -12
  97. package/dist/http/h2/frames.js.map +1 -1
  98. package/dist/http/h2/hpack.d.ts.map +1 -1
  99. package/dist/http/h2/hpack.js +331 -130
  100. package/dist/http/h2/hpack.js.map +1 -1
  101. package/dist/http/negotiator.d.ts +4 -4
  102. package/dist/http/negotiator.d.ts.map +1 -1
  103. package/dist/http/negotiator.js +45 -48
  104. package/dist/http/negotiator.js.map +1 -1
  105. package/dist/http/pool.d.ts +5 -5
  106. package/dist/http/pool.d.ts.map +1 -1
  107. package/dist/http/pool.js +5 -5
  108. package/dist/http/pool.js.map +1 -1
  109. package/dist/index.d.ts +16 -14
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +10 -9
  112. package/dist/index.js.map +1 -1
  113. package/dist/middleware/interceptor.d.ts +2 -2
  114. package/dist/middleware/interceptor.d.ts.map +1 -1
  115. package/dist/middleware/interceptor.js.map +1 -1
  116. package/dist/middleware/rate-limiter.d.ts.map +1 -1
  117. package/dist/middleware/rate-limiter.js +2 -0
  118. package/dist/middleware/rate-limiter.js.map +1 -1
  119. package/dist/middleware/retry.d.ts +6 -4
  120. package/dist/middleware/retry.d.ts.map +1 -1
  121. package/dist/middleware/retry.js +9 -7
  122. package/dist/middleware/retry.js.map +1 -1
  123. package/dist/proxy/http-proxy.d.ts +1 -1
  124. package/dist/proxy/http-proxy.d.ts.map +1 -1
  125. package/dist/proxy/http-proxy.js +14 -14
  126. package/dist/proxy/http-proxy.js.map +1 -1
  127. package/dist/proxy/socks.d.ts +1 -1
  128. package/dist/proxy/socks.d.ts.map +1 -1
  129. package/dist/proxy/socks.js +57 -28
  130. package/dist/proxy/socks.js.map +1 -1
  131. package/dist/tls/constants.d.ts.map +1 -1
  132. package/dist/tls/constants.js +1 -4
  133. package/dist/tls/constants.js.map +1 -1
  134. package/dist/tls/node-engine.d.ts +2 -2
  135. package/dist/tls/node-engine.d.ts.map +1 -1
  136. package/dist/tls/node-engine.js +58 -58
  137. package/dist/tls/node-engine.js.map +1 -1
  138. package/dist/tls/stealth/client-hello.d.ts +1 -1
  139. package/dist/tls/stealth/client-hello.d.ts.map +1 -1
  140. package/dist/tls/stealth/client-hello.js +8 -14
  141. package/dist/tls/stealth/client-hello.js.map +1 -1
  142. package/dist/tls/stealth/engine.d.ts +2 -2
  143. package/dist/tls/stealth/engine.d.ts.map +1 -1
  144. package/dist/tls/stealth/engine.js +23 -26
  145. package/dist/tls/stealth/engine.js.map +1 -1
  146. package/dist/tls/stealth/handshake.d.ts +3 -3
  147. package/dist/tls/stealth/handshake.d.ts.map +1 -1
  148. package/dist/tls/stealth/handshake.js +62 -74
  149. package/dist/tls/stealth/handshake.js.map +1 -1
  150. package/dist/tls/stealth/key-schedule.d.ts +2 -2
  151. package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
  152. package/dist/tls/stealth/key-schedule.js +20 -20
  153. package/dist/tls/stealth/key-schedule.js.map +1 -1
  154. package/dist/tls/stealth/record-layer.d.ts +1 -1
  155. package/dist/tls/stealth/record-layer.d.ts.map +1 -1
  156. package/dist/tls/stealth/record-layer.js +13 -13
  157. package/dist/tls/stealth/record-layer.js.map +1 -1
  158. package/dist/tls/types.d.ts +4 -4
  159. package/dist/tls/types.d.ts.map +1 -1
  160. package/dist/utils/buffer-reader.d.ts.map +1 -1
  161. package/dist/utils/buffer-reader.js.map +1 -1
  162. package/dist/utils/buffer-writer.d.ts.map +1 -1
  163. package/dist/utils/buffer-writer.js +6 -0
  164. package/dist/utils/buffer-writer.js.map +1 -1
  165. package/dist/utils/encoding.d.ts +1 -1
  166. package/dist/utils/encoding.d.ts.map +1 -1
  167. package/dist/utils/encoding.js +23 -25
  168. package/dist/utils/encoding.js.map +1 -1
  169. package/dist/utils/happy-eyeballs.d.ts +26 -0
  170. package/dist/utils/happy-eyeballs.d.ts.map +1 -0
  171. package/dist/utils/happy-eyeballs.js +201 -0
  172. package/dist/utils/happy-eyeballs.js.map +1 -0
  173. package/dist/utils/logger.d.ts +48 -7
  174. package/dist/utils/logger.d.ts.map +1 -1
  175. package/dist/utils/logger.js +61 -13
  176. package/dist/utils/logger.js.map +1 -1
  177. package/dist/utils/url.d.ts.map +1 -1
  178. package/dist/utils/url.js +2 -2
  179. package/dist/utils/url.js.map +1 -1
  180. package/dist/ws/client.d.ts +2 -2
  181. package/dist/ws/client.d.ts.map +1 -1
  182. package/dist/ws/client.js +76 -71
  183. package/dist/ws/client.js.map +1 -1
  184. package/dist/ws/frame.d.ts.map +1 -1
  185. package/dist/ws/frame.js +8 -8
  186. package/dist/ws/frame.js.map +1 -1
  187. package/package.json +61 -57
@@ -1,4 +1,4 @@
1
- import { BufferWriter } from '../../utils/buffer-writer.js';
1
+ import { BufferWriter } from "../../utils/buffer-writer.js";
2
2
  /**
3
3
  * HTTP/2 frame type identifiers as defined in RFC 7540 §11.2.
4
4
  *
@@ -41,27 +41,31 @@ export const SettingsParam = {
41
41
  MAX_FRAME_SIZE: 0x5,
42
42
  MAX_HEADER_LIST_SIZE: 0x6,
43
43
  };
44
+ /** RFC 7540 §4.2: Maximum value for SETTINGS_MAX_FRAME_SIZE (2^24 - 1). */
45
+ const PROTOCOL_MAX_FRAME_SIZE = 16_777_215;
44
46
  /**
45
47
  * Attempts to parse one HTTP/2 frame starting at `offset` in `data`.
46
48
  * Returns `null` if insufficient bytes are available for a complete frame.
47
49
  *
48
- * @param {Buffer} data - Input buffer potentially containing one or more frames.
49
- * @param {number} offset - Byte offset within `data` at which to start parsing.
50
+ * @param {Buffer} data - Input buffer potentially containing one or more frames.
51
+ * @param {number} offset - Byte offset within `data` at which to start parsing.
52
+ * @param {number} [maxFrameSize=16777215] - Maximum permitted payload length.
53
+ * Frames whose length field exceeds this value cause a `FRAME_SIZE_ERROR`.
54
+ * Callers should pass the peer's `SETTINGS_MAX_FRAME_SIZE` value here.
50
55
  * @returns {{ frame: H2Frame; bytesRead: number } | null} Parsed frame and total bytes consumed,
51
56
  * or `null` if more data is required.
57
+ * @throws {Error} If the frame's length field exceeds `maxFrameSize`.
52
58
  */
53
- export function readFrame(data, offset) {
59
+ export function readFrame(data, offset, maxFrameSize = PROTOCOL_MAX_FRAME_SIZE) {
54
60
  if (data.length - offset < 9)
55
61
  return null;
56
- const length = (data[offset] << 16) |
57
- (data[offset + 1] << 8) |
58
- data[offset + 2];
62
+ const length = (data[offset] << 16) | (data[offset + 1] << 8) | data[offset + 2];
63
+ if (length > maxFrameSize) {
64
+ throw new Error(`FRAME_SIZE_ERROR: frame payload length ${length} exceeds limit ${maxFrameSize}`);
65
+ }
59
66
  const type = data[offset + 3];
60
67
  const flags = data[offset + 4];
61
- const streamId = ((data[offset + 5] & 0x7f) << 24) |
62
- (data[offset + 6] << 16) |
63
- (data[offset + 7] << 8) |
64
- data[offset + 8];
68
+ const streamId = ((data[offset + 5] & 0x7f) << 24) | (data[offset + 6] << 16) | (data[offset + 7] << 8) | data[offset + 8];
65
69
  if (data.length - offset - 9 < length)
66
70
  return null;
67
71
  const payload = data.subarray(offset + 9, offset + 9 + length);
@@ -259,5 +263,5 @@ export function buildRstStreamFrame(streamId, errorCode) {
259
263
  *
260
264
  * @see {@link https://datatracker.ietf.org/doc/html/rfc7540#section-3.5}
261
265
  */
262
- export const H2_PREFACE = Buffer.from('PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n', 'ascii');
266
+ export const H2_PREFACE = Buffer.from("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n", "ascii");
263
267
  //# sourceMappingURL=frames.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../../src/http/h2/frames.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../../src/http/h2/frames.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hpack.d.ts","sourceRoot":"","sources":["../../../src/http/h2/hpack.ts"],"names":[],"mappings":"AAgKA;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAsB;IAE7C;;;;OAIG;gBACS,SAAS,GAAE,MAAa;IAiBpC;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM;IA6BhD;;;;;;OAMG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGvC;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IAEnC;;;;OAIG;gBACS,SAAS,GAAE,MAAa;IAIpC;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAyD7C,OAAO,CAAC,QAAQ;CAWjB"}
1
+ {"version":3,"file":"hpack.d.ts","sourceRoot":"","sources":["../../../src/http/h2/hpack.ts"],"names":[],"mappings":"AAqKA;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,eAAe,CAAsB;IAE7C;;;;OAIG;gBACS,SAAS,GAAE,MAAa;IAiBpC;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM;IA6BhD;;;;;;OAMG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGvC;AAED;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAe;IAEnC;;;;OAIG;gBACS,SAAS,GAAE,MAAa;IAIpC;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAyD7C,OAAO,CAAC,QAAQ;CAcjB"}
@@ -1,67 +1,67 @@
1
- import { BufferWriter } from '../../utils/buffer-writer.js';
1
+ import { BufferWriter } from "../../utils/buffer-writer.js";
2
2
  const STATIC_TABLE = [
3
- ['', ''],
4
- [':authority', ''],
5
- [':method', 'GET'],
6
- [':method', 'POST'],
7
- [':path', '/'],
8
- [':path', '/index.html'],
9
- [':scheme', 'http'],
10
- [':scheme', 'https'],
11
- [':status', '200'],
12
- [':status', '204'],
13
- [':status', '206'],
14
- [':status', '304'],
15
- [':status', '400'],
16
- [':status', '404'],
17
- [':status', '500'],
18
- ['accept-charset', ''],
19
- ['accept-encoding', 'gzip, deflate'],
20
- ['accept-language', ''],
21
- ['accept-ranges', ''],
22
- ['accept', ''],
23
- ['access-control-allow-origin', ''],
24
- ['age', ''],
25
- ['allow', ''],
26
- ['authorization', ''],
27
- ['cache-control', ''],
28
- ['content-disposition', ''],
29
- ['content-encoding', ''],
30
- ['content-language', ''],
31
- ['content-length', ''],
32
- ['content-location', ''],
33
- ['content-range', ''],
34
- ['content-type', ''],
35
- ['cookie', ''],
36
- ['date', ''],
37
- ['etag', ''],
38
- ['expect', ''],
39
- ['expires', ''],
40
- ['from', ''],
41
- ['host', ''],
42
- ['if-match', ''],
43
- ['if-modified-since', ''],
44
- ['if-none-match', ''],
45
- ['if-range', ''],
46
- ['if-unmodified-since', ''],
47
- ['last-modified', ''],
48
- ['link', ''],
49
- ['location', ''],
50
- ['max-forwards', ''],
51
- ['proxy-authenticate', ''],
52
- ['proxy-authorization', ''],
53
- ['range', ''],
54
- ['referer', ''],
55
- ['refresh', ''],
56
- ['retry-after', ''],
57
- ['server', ''],
58
- ['set-cookie', ''],
59
- ['strict-transport-security', ''],
60
- ['transfer-encoding', ''],
61
- ['user-agent', ''],
62
- ['vary', ''],
63
- ['via', ''],
64
- ['www-authenticate', ''],
3
+ ["", ""],
4
+ [":authority", ""],
5
+ [":method", "GET"],
6
+ [":method", "POST"],
7
+ [":path", "/"],
8
+ [":path", "/index.html"],
9
+ [":scheme", "http"],
10
+ [":scheme", "https"],
11
+ [":status", "200"],
12
+ [":status", "204"],
13
+ [":status", "206"],
14
+ [":status", "304"],
15
+ [":status", "400"],
16
+ [":status", "404"],
17
+ [":status", "500"],
18
+ ["accept-charset", ""],
19
+ ["accept-encoding", "gzip, deflate"],
20
+ ["accept-language", ""],
21
+ ["accept-ranges", ""],
22
+ ["accept", ""],
23
+ ["access-control-allow-origin", ""],
24
+ ["age", ""],
25
+ ["allow", ""],
26
+ ["authorization", ""],
27
+ ["cache-control", ""],
28
+ ["content-disposition", ""],
29
+ ["content-encoding", ""],
30
+ ["content-language", ""],
31
+ ["content-length", ""],
32
+ ["content-location", ""],
33
+ ["content-range", ""],
34
+ ["content-type", ""],
35
+ ["cookie", ""],
36
+ ["date", ""],
37
+ ["etag", ""],
38
+ ["expect", ""],
39
+ ["expires", ""],
40
+ ["from", ""],
41
+ ["host", ""],
42
+ ["if-match", ""],
43
+ ["if-modified-since", ""],
44
+ ["if-none-match", ""],
45
+ ["if-range", ""],
46
+ ["if-unmodified-since", ""],
47
+ ["last-modified", ""],
48
+ ["link", ""],
49
+ ["location", ""],
50
+ ["max-forwards", ""],
51
+ ["proxy-authenticate", ""],
52
+ ["proxy-authorization", ""],
53
+ ["range", ""],
54
+ ["referer", ""],
55
+ ["refresh", ""],
56
+ ["retry-after", ""],
57
+ ["server", ""],
58
+ ["set-cookie", ""],
59
+ ["strict-transport-security", ""],
60
+ ["transfer-encoding", ""],
61
+ ["user-agent", ""],
62
+ ["vary", ""],
63
+ ["via", ""],
64
+ ["www-authenticate", ""],
65
65
  ];
66
66
  class DynamicTable {
67
67
  entries = [];
@@ -118,6 +118,12 @@ function decodeInteger(data, offset, prefix) {
118
118
  let shift = 0;
119
119
  let byte;
120
120
  do {
121
+ if (offset + bytesRead >= data.length) {
122
+ throw new Error("HPACK: unexpected end of integer encoding");
123
+ }
124
+ if (shift > 28) {
125
+ throw new Error("HPACK: integer overflow in decoding");
126
+ }
121
127
  byte = data[offset + bytesRead];
122
128
  bytesRead++;
123
129
  value += (byte & 0x7f) << shift;
@@ -127,7 +133,7 @@ function decodeInteger(data, offset, prefix) {
127
133
  return { value, bytesRead };
128
134
  }
129
135
  function encodeString(w, str, huffman = false) {
130
- const buf = Buffer.from(str, 'latin1');
136
+ const buf = Buffer.from(str, "latin1");
131
137
  if (huffman) {
132
138
  const encoded = huffmanEncode(buf);
133
139
  encodeInteger(w, encoded.length, 7, 0x80);
@@ -142,7 +148,7 @@ function decodeString(data, offset) {
142
148
  const isHuffman = !!(data[offset] & 0x80);
143
149
  const { value: length, bytesRead: intBytes } = decodeInteger(data, offset, 7);
144
150
  const raw = data.subarray(offset + intBytes, offset + intBytes + length);
145
- const str = isHuffman ? huffmanDecode(raw).toString('latin1') : raw.toString('latin1');
151
+ const str = isHuffman ? huffmanDecode(raw).toString("latin1") : raw.toString("latin1");
146
152
  return { value: str, bytesRead: intBytes + length };
147
153
  }
148
154
  /**
@@ -298,6 +304,9 @@ export class HPACKDecoder {
298
304
  return headers;
299
305
  }
300
306
  getEntry(index) {
307
+ if (index === 0) {
308
+ throw new Error("HPACK: invalid index 0");
309
+ }
301
310
  if (index < STATIC_TABLE.length) {
302
311
  return STATIC_TABLE[index];
303
312
  }
@@ -310,70 +319,262 @@ export class HPACKDecoder {
310
319
  }
311
320
  }
312
321
  const HUFFMAN_TABLE = [
313
- [0x1ff8, 13], [0x7fffd8, 23], [0xfffffe2, 28], [0xfffffe3, 28],
314
- [0xfffffe4, 28], [0xfffffe5, 28], [0xfffffe6, 28], [0xfffffe7, 28],
315
- [0xfffffe8, 28], [0xffffea, 24], [0x3ffffffc, 30], [0xfffffe9, 28],
316
- [0xfffffea, 28], [0x3ffffffd, 30], [0xfffffeb, 28], [0xfffffec, 28],
317
- [0xfffffed, 28], [0xfffffee, 28], [0xfffffef, 28], [0xffffff0, 28],
318
- [0xffffff1, 28], [0xffffff2, 28], [0x3ffffffe, 30], [0xffffff3, 28],
319
- [0xffffff4, 28], [0xffffff5, 28], [0xffffff6, 28], [0xffffff7, 28],
320
- [0xffffff8, 28], [0xffffff9, 28], [0xffffffa, 28], [0xffffffb, 28],
321
- [0x14, 6], [0x3f8, 10], [0x3f9, 10], [0xffa, 12],
322
- [0x1ff9, 13], [0x15, 6], [0xf8, 8], [0x7fa, 11],
323
- [0x3fa, 10], [0x3fb, 10], [0xf9, 8], [0x7fb, 11],
324
- [0xfa, 8], [0x16, 6], [0x17, 6], [0x18, 6],
325
- [0x0, 5], [0x1, 5], [0x2, 5], [0x19, 6],
326
- [0x1a, 6], [0x1b, 6], [0x1c, 6], [0x1d, 6],
327
- [0x1e, 6], [0x1f, 6], [0x5c, 7], [0xfb, 8],
328
- [0x7ffc, 15], [0x20, 6], [0xffb, 12], [0x3fc, 10],
329
- [0x1ffa, 13], [0x21, 6], [0x5d, 7], [0x5e, 7],
330
- [0x5f, 7], [0x60, 7], [0x61, 7], [0x62, 7],
331
- [0x63, 7], [0x64, 7], [0x65, 7], [0x66, 7],
332
- [0x67, 7], [0x68, 7], [0x69, 7], [0x6a, 7],
333
- [0x6b, 7], [0x6c, 7], [0x6d, 7], [0x6e, 7],
334
- [0x6f, 7], [0x70, 7], [0x71, 7], [0x72, 7],
335
- [0xfc, 8], [0x73, 7], [0xfd, 8], [0x1ffb, 13],
336
- [0x7fff0, 19], [0x1ffc, 13], [0x3ffc, 14], [0x22, 6],
337
- [0x7ffd, 15], [0x3, 5], [0x23, 6], [0x4, 5],
338
- [0x24, 6], [0x5, 5], [0x25, 6], [0x26, 6],
339
- [0x27, 6], [0x6, 5], [0x74, 7], [0x75, 7],
340
- [0x28, 6], [0x29, 6], [0x2a, 6], [0x7, 5],
341
- [0x2b, 6], [0x76, 7], [0x2c, 6], [0x8, 5],
342
- [0x9, 5], [0x2d, 6], [0x77, 7], [0x78, 7],
343
- [0x79, 7], [0x7a, 7], [0x7b, 7], [0x7ffe, 15],
344
- [0x7fc, 11], [0x3ffd, 14], [0x1ffd, 13], [0xffffffc, 28],
345
- [0xfffe6, 20], [0x3fffd2, 22], [0xfffe7, 20], [0xfffe8, 20],
346
- [0x3fffd3, 22], [0x3fffd4, 22], [0x3fffd5, 22], [0x7fffd9, 23],
347
- [0x3fffd6, 22], [0x7fffda, 23], [0x7fffdb, 23], [0x7fffdc, 23],
348
- [0x7fffdd, 23], [0x7fffde, 23], [0xffffeb, 24], [0x7fffdf, 23],
349
- [0xffffec, 24], [0xffffed, 24], [0x3fffd7, 22], [0x7fffe0, 23],
350
- [0xffffee, 24], [0x7fffe1, 23], [0x7fffe2, 23], [0x7fffe3, 23],
351
- [0x7fffe4, 23], [0x1fffdc, 21], [0x3fffd8, 22], [0x7fffe5, 23],
352
- [0x3fffd9, 22], [0x7fffe6, 23], [0x7fffe7, 23], [0xffffef, 24],
353
- [0x3fffda, 22], [0x1fffdd, 21], [0xfffe9, 20], [0x3fffdb, 22],
354
- [0x3fffdc, 22], [0x7fffe8, 23], [0x7fffe9, 23], [0x1fffde, 21],
355
- [0x7fffea, 23], [0x3fffdd, 22], [0x3fffde, 22], [0xfffff0, 24],
356
- [0x1fffdf, 21], [0x3fffdf, 22], [0x7fffeb, 23], [0x7fffec, 23],
357
- [0x1fffe0, 21], [0x1fffe1, 21], [0x3fffe0, 22], [0x1fffe2, 21],
358
- [0x7fffed, 23], [0x3fffe1, 22], [0x7fffee, 23], [0x7fffef, 23],
359
- [0xfffea, 20], [0x3fffe2, 22], [0x3fffe3, 22], [0x3fffe4, 22],
360
- [0x7ffff0, 23], [0x3fffe5, 22], [0x3fffe6, 22], [0x7ffff1, 23],
361
- [0x3ffffe0, 26], [0x3ffffe1, 26], [0xfffeb, 20], [0x7fff1, 19],
362
- [0x3fffe7, 22], [0x7ffff2, 23], [0x3fffe8, 22], [0x1ffffec, 25],
363
- [0x3ffffe2, 26], [0x3ffffe3, 26], [0x3ffffe4, 26], [0x7ffffde, 27],
364
- [0x7ffffdf, 27], [0x3ffffe5, 26], [0xfffff1, 24], [0x1ffffed, 25],
365
- [0x7fff2, 19], [0x1fffe3, 21], [0x3ffffe6, 26], [0x7ffffe0, 27],
366
- [0x7ffffe1, 27], [0x3ffffe7, 26], [0x7ffffe2, 27], [0xfffff2, 24],
367
- [0x1fffe4, 21], [0x1fffe5, 21], [0x3ffffe8, 26], [0x3ffffe9, 26],
368
- [0xffffffd, 28], [0x7ffffe3, 27], [0x7ffffe4, 27], [0x7ffffe5, 27],
369
- [0xfffec, 20], [0xfffff3, 24], [0xfffed, 20], [0x1fffe6, 21],
370
- [0x3fffe9, 22], [0x1fffe7, 21], [0x1fffe8, 21], [0x7ffff3, 23],
371
- [0x3fffea, 22], [0x3fffeb, 22], [0x1ffffee, 25], [0x1ffffef, 25],
372
- [0xfffff4, 24], [0xfffff5, 24], [0x3ffffea, 26], [0x7ffff4, 23],
373
- [0x3ffffeb, 26], [0x7ffffe6, 27], [0x3ffffec, 26], [0x3ffffed, 26],
374
- [0x7ffffe7, 27], [0x7ffffe8, 27], [0x7ffffe9, 27], [0x7ffffea, 27],
375
- [0x7ffffeb, 27], [0xffffffe, 28], [0x7ffffec, 27], [0x7ffffed, 27],
376
- [0x7ffffee, 27], [0x7ffffef, 27], [0x7fffff0, 27], [0x3ffffee, 26],
322
+ [0x1ff8, 13],
323
+ [0x7fffd8, 23],
324
+ [0xfffffe2, 28],
325
+ [0xfffffe3, 28],
326
+ [0xfffffe4, 28],
327
+ [0xfffffe5, 28],
328
+ [0xfffffe6, 28],
329
+ [0xfffffe7, 28],
330
+ [0xfffffe8, 28],
331
+ [0xffffea, 24],
332
+ [0x3ffffffc, 30],
333
+ [0xfffffe9, 28],
334
+ [0xfffffea, 28],
335
+ [0x3ffffffd, 30],
336
+ [0xfffffeb, 28],
337
+ [0xfffffec, 28],
338
+ [0xfffffed, 28],
339
+ [0xfffffee, 28],
340
+ [0xfffffef, 28],
341
+ [0xffffff0, 28],
342
+ [0xffffff1, 28],
343
+ [0xffffff2, 28],
344
+ [0x3ffffffe, 30],
345
+ [0xffffff3, 28],
346
+ [0xffffff4, 28],
347
+ [0xffffff5, 28],
348
+ [0xffffff6, 28],
349
+ [0xffffff7, 28],
350
+ [0xffffff8, 28],
351
+ [0xffffff9, 28],
352
+ [0xffffffa, 28],
353
+ [0xffffffb, 28],
354
+ [0x14, 6],
355
+ [0x3f8, 10],
356
+ [0x3f9, 10],
357
+ [0xffa, 12],
358
+ [0x1ff9, 13],
359
+ [0x15, 6],
360
+ [0xf8, 8],
361
+ [0x7fa, 11],
362
+ [0x3fa, 10],
363
+ [0x3fb, 10],
364
+ [0xf9, 8],
365
+ [0x7fb, 11],
366
+ [0xfa, 8],
367
+ [0x16, 6],
368
+ [0x17, 6],
369
+ [0x18, 6],
370
+ [0x0, 5],
371
+ [0x1, 5],
372
+ [0x2, 5],
373
+ [0x19, 6],
374
+ [0x1a, 6],
375
+ [0x1b, 6],
376
+ [0x1c, 6],
377
+ [0x1d, 6],
378
+ [0x1e, 6],
379
+ [0x1f, 6],
380
+ [0x5c, 7],
381
+ [0xfb, 8],
382
+ [0x7ffc, 15],
383
+ [0x20, 6],
384
+ [0xffb, 12],
385
+ [0x3fc, 10],
386
+ [0x1ffa, 13],
387
+ [0x21, 6],
388
+ [0x5d, 7],
389
+ [0x5e, 7],
390
+ [0x5f, 7],
391
+ [0x60, 7],
392
+ [0x61, 7],
393
+ [0x62, 7],
394
+ [0x63, 7],
395
+ [0x64, 7],
396
+ [0x65, 7],
397
+ [0x66, 7],
398
+ [0x67, 7],
399
+ [0x68, 7],
400
+ [0x69, 7],
401
+ [0x6a, 7],
402
+ [0x6b, 7],
403
+ [0x6c, 7],
404
+ [0x6d, 7],
405
+ [0x6e, 7],
406
+ [0x6f, 7],
407
+ [0x70, 7],
408
+ [0x71, 7],
409
+ [0x72, 7],
410
+ [0xfc, 8],
411
+ [0x73, 7],
412
+ [0xfd, 8],
413
+ [0x1ffb, 13],
414
+ [0x7fff0, 19],
415
+ [0x1ffc, 13],
416
+ [0x3ffc, 14],
417
+ [0x22, 6],
418
+ [0x7ffd, 15],
419
+ [0x3, 5],
420
+ [0x23, 6],
421
+ [0x4, 5],
422
+ [0x24, 6],
423
+ [0x5, 5],
424
+ [0x25, 6],
425
+ [0x26, 6],
426
+ [0x27, 6],
427
+ [0x6, 5],
428
+ [0x74, 7],
429
+ [0x75, 7],
430
+ [0x28, 6],
431
+ [0x29, 6],
432
+ [0x2a, 6],
433
+ [0x7, 5],
434
+ [0x2b, 6],
435
+ [0x76, 7],
436
+ [0x2c, 6],
437
+ [0x8, 5],
438
+ [0x9, 5],
439
+ [0x2d, 6],
440
+ [0x77, 7],
441
+ [0x78, 7],
442
+ [0x79, 7],
443
+ [0x7a, 7],
444
+ [0x7b, 7],
445
+ [0x7ffe, 15],
446
+ [0x7fc, 11],
447
+ [0x3ffd, 14],
448
+ [0x1ffd, 13],
449
+ [0xffffffc, 28],
450
+ [0xfffe6, 20],
451
+ [0x3fffd2, 22],
452
+ [0xfffe7, 20],
453
+ [0xfffe8, 20],
454
+ [0x3fffd3, 22],
455
+ [0x3fffd4, 22],
456
+ [0x3fffd5, 22],
457
+ [0x7fffd9, 23],
458
+ [0x3fffd6, 22],
459
+ [0x7fffda, 23],
460
+ [0x7fffdb, 23],
461
+ [0x7fffdc, 23],
462
+ [0x7fffdd, 23],
463
+ [0x7fffde, 23],
464
+ [0xffffeb, 24],
465
+ [0x7fffdf, 23],
466
+ [0xffffec, 24],
467
+ [0xffffed, 24],
468
+ [0x3fffd7, 22],
469
+ [0x7fffe0, 23],
470
+ [0xffffee, 24],
471
+ [0x7fffe1, 23],
472
+ [0x7fffe2, 23],
473
+ [0x7fffe3, 23],
474
+ [0x7fffe4, 23],
475
+ [0x1fffdc, 21],
476
+ [0x3fffd8, 22],
477
+ [0x7fffe5, 23],
478
+ [0x3fffd9, 22],
479
+ [0x7fffe6, 23],
480
+ [0x7fffe7, 23],
481
+ [0xffffef, 24],
482
+ [0x3fffda, 22],
483
+ [0x1fffdd, 21],
484
+ [0xfffe9, 20],
485
+ [0x3fffdb, 22],
486
+ [0x3fffdc, 22],
487
+ [0x7fffe8, 23],
488
+ [0x7fffe9, 23],
489
+ [0x1fffde, 21],
490
+ [0x7fffea, 23],
491
+ [0x3fffdd, 22],
492
+ [0x3fffde, 22],
493
+ [0xfffff0, 24],
494
+ [0x1fffdf, 21],
495
+ [0x3fffdf, 22],
496
+ [0x7fffeb, 23],
497
+ [0x7fffec, 23],
498
+ [0x1fffe0, 21],
499
+ [0x1fffe1, 21],
500
+ [0x3fffe0, 22],
501
+ [0x1fffe2, 21],
502
+ [0x7fffed, 23],
503
+ [0x3fffe1, 22],
504
+ [0x7fffee, 23],
505
+ [0x7fffef, 23],
506
+ [0xfffea, 20],
507
+ [0x3fffe2, 22],
508
+ [0x3fffe3, 22],
509
+ [0x3fffe4, 22],
510
+ [0x7ffff0, 23],
511
+ [0x3fffe5, 22],
512
+ [0x3fffe6, 22],
513
+ [0x7ffff1, 23],
514
+ [0x3ffffe0, 26],
515
+ [0x3ffffe1, 26],
516
+ [0xfffeb, 20],
517
+ [0x7fff1, 19],
518
+ [0x3fffe7, 22],
519
+ [0x7ffff2, 23],
520
+ [0x3fffe8, 22],
521
+ [0x1ffffec, 25],
522
+ [0x3ffffe2, 26],
523
+ [0x3ffffe3, 26],
524
+ [0x3ffffe4, 26],
525
+ [0x7ffffde, 27],
526
+ [0x7ffffdf, 27],
527
+ [0x3ffffe5, 26],
528
+ [0xfffff1, 24],
529
+ [0x1ffffed, 25],
530
+ [0x7fff2, 19],
531
+ [0x1fffe3, 21],
532
+ [0x3ffffe6, 26],
533
+ [0x7ffffe0, 27],
534
+ [0x7ffffe1, 27],
535
+ [0x3ffffe7, 26],
536
+ [0x7ffffe2, 27],
537
+ [0xfffff2, 24],
538
+ [0x1fffe4, 21],
539
+ [0x1fffe5, 21],
540
+ [0x3ffffe8, 26],
541
+ [0x3ffffe9, 26],
542
+ [0xffffffd, 28],
543
+ [0x7ffffe3, 27],
544
+ [0x7ffffe4, 27],
545
+ [0x7ffffe5, 27],
546
+ [0xfffec, 20],
547
+ [0xfffff3, 24],
548
+ [0xfffed, 20],
549
+ [0x1fffe6, 21],
550
+ [0x3fffe9, 22],
551
+ [0x1fffe7, 21],
552
+ [0x1fffe8, 21],
553
+ [0x7ffff3, 23],
554
+ [0x3fffea, 22],
555
+ [0x3fffeb, 22],
556
+ [0x1ffffee, 25],
557
+ [0x1ffffef, 25],
558
+ [0xfffff4, 24],
559
+ [0xfffff5, 24],
560
+ [0x3ffffea, 26],
561
+ [0x7ffff4, 23],
562
+ [0x3ffffeb, 26],
563
+ [0x7ffffe6, 27],
564
+ [0x3ffffec, 26],
565
+ [0x3ffffed, 26],
566
+ [0x7ffffe7, 27],
567
+ [0x7ffffe8, 27],
568
+ [0x7ffffe9, 27],
569
+ [0x7ffffea, 27],
570
+ [0x7ffffeb, 27],
571
+ [0xffffffe, 28],
572
+ [0x7ffffec, 27],
573
+ [0x7ffffed, 27],
574
+ [0x7ffffee, 27],
575
+ [0x7ffffef, 27],
576
+ [0x7fffff0, 27],
577
+ [0x3ffffee, 26],
377
578
  [0x3fffffff, 30],
378
579
  ];
379
580
  function huffmanEncode(input) {
@@ -422,7 +623,7 @@ function huffmanDecode(input) {
422
623
  const bit = (input[i] >> j) & 1;
423
624
  node = node.children[bit];
424
625
  if (!node) {
425
- throw new Error('HPACK: invalid Huffman code');
626
+ throw new Error("HPACK: invalid Huffman code");
426
627
  }
427
628
  if (node.value !== undefined) {
428
629
  if (node.value === 256)