nlcurl 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +41 -8
  2. package/dist/cache/store.d.ts +89 -0
  3. package/dist/cache/store.d.ts.map +1 -0
  4. package/dist/cache/store.js +402 -0
  5. package/dist/cache/store.js.map +1 -0
  6. package/dist/cache/types.d.ts +101 -0
  7. package/dist/cache/types.d.ts.map +1 -0
  8. package/dist/cache/types.js +2 -0
  9. package/dist/cache/types.js.map +1 -0
  10. package/dist/cookies/jar.d.ts +20 -0
  11. package/dist/cookies/jar.d.ts.map +1 -1
  12. package/dist/cookies/jar.js +64 -10
  13. package/dist/cookies/jar.js.map +1 -1
  14. package/dist/cookies/parser.d.ts +2 -10
  15. package/dist/cookies/parser.d.ts.map +1 -1
  16. package/dist/cookies/parser.js +49 -2
  17. package/dist/cookies/parser.js.map +1 -1
  18. package/dist/cookies/psl-data.d.ts +12 -0
  19. package/dist/cookies/psl-data.d.ts.map +1 -0
  20. package/dist/cookies/psl-data.js +10166 -0
  21. package/dist/cookies/psl-data.js.map +1 -0
  22. package/dist/cookies/public-suffix.d.ts +37 -0
  23. package/dist/cookies/public-suffix.d.ts.map +1 -0
  24. package/dist/cookies/public-suffix.js +140 -0
  25. package/dist/cookies/public-suffix.js.map +1 -0
  26. package/dist/core/client.js +4 -0
  27. package/dist/core/client.js.map +1 -1
  28. package/dist/core/request.d.ts +73 -3
  29. package/dist/core/request.d.ts.map +1 -1
  30. package/dist/core/response.d.ts +22 -0
  31. package/dist/core/response.d.ts.map +1 -1
  32. package/dist/core/response.js +32 -0
  33. package/dist/core/response.js.map +1 -1
  34. package/dist/core/session.d.ts +23 -0
  35. package/dist/core/session.d.ts.map +1 -1
  36. package/dist/core/session.js +108 -4
  37. package/dist/core/session.js.map +1 -1
  38. package/dist/core/validation.d.ts +11 -0
  39. package/dist/core/validation.d.ts.map +1 -1
  40. package/dist/core/validation.js +22 -1
  41. package/dist/core/validation.js.map +1 -1
  42. package/dist/dns/codec.d.ts +37 -0
  43. package/dist/dns/codec.d.ts.map +1 -0
  44. package/dist/dns/codec.js +254 -0
  45. package/dist/dns/codec.js.map +1 -0
  46. package/dist/dns/doh-resolver.d.ts +52 -0
  47. package/dist/dns/doh-resolver.d.ts.map +1 -0
  48. package/dist/dns/doh-resolver.js +192 -0
  49. package/dist/dns/doh-resolver.js.map +1 -0
  50. package/dist/dns/https-rr.d.ts +51 -0
  51. package/dist/dns/https-rr.d.ts.map +1 -0
  52. package/dist/dns/https-rr.js +127 -0
  53. package/dist/dns/https-rr.js.map +1 -0
  54. package/dist/dns/types.d.ts +110 -0
  55. package/dist/dns/types.d.ts.map +1 -0
  56. package/dist/dns/types.js +34 -0
  57. package/dist/dns/types.js.map +1 -0
  58. package/dist/hsts/store.d.ts +41 -0
  59. package/dist/hsts/store.d.ts.map +1 -0
  60. package/dist/hsts/store.js +171 -0
  61. package/dist/hsts/store.js.map +1 -0
  62. package/dist/hsts/types.d.ts +28 -0
  63. package/dist/hsts/types.d.ts.map +1 -0
  64. package/dist/hsts/types.js +2 -0
  65. package/dist/hsts/types.js.map +1 -0
  66. package/dist/http/alt-svc.d.ts +85 -0
  67. package/dist/http/alt-svc.d.ts.map +1 -0
  68. package/dist/http/alt-svc.js +220 -0
  69. package/dist/http/alt-svc.js.map +1 -0
  70. package/dist/http/form-data.d.ts +59 -0
  71. package/dist/http/form-data.d.ts.map +1 -0
  72. package/dist/http/form-data.js +90 -0
  73. package/dist/http/form-data.js.map +1 -0
  74. package/dist/http/h1/client.d.ts.map +1 -1
  75. package/dist/http/h1/client.js +21 -3
  76. package/dist/http/h1/client.js.map +1 -1
  77. package/dist/http/h1/encoder.d.ts +17 -0
  78. package/dist/http/h1/encoder.d.ts.map +1 -1
  79. package/dist/http/h1/encoder.js +53 -5
  80. package/dist/http/h1/encoder.js.map +1 -1
  81. package/dist/http/h1/parser.d.ts.map +1 -1
  82. package/dist/http/h1/parser.js +7 -1
  83. package/dist/http/h1/parser.js.map +1 -1
  84. package/dist/http/h2/client.d.ts.map +1 -1
  85. package/dist/http/h2/client.js +58 -8
  86. package/dist/http/h2/client.js.map +1 -1
  87. package/dist/http/h2/hpack.d.ts +7 -0
  88. package/dist/http/h2/hpack.d.ts.map +1 -1
  89. package/dist/http/h2/hpack.js +13 -0
  90. package/dist/http/h2/hpack.js.map +1 -1
  91. package/dist/http/h3/detection.d.ts +17 -0
  92. package/dist/http/h3/detection.d.ts.map +1 -0
  93. package/dist/http/h3/detection.js +59 -0
  94. package/dist/http/h3/detection.js.map +1 -0
  95. package/dist/http/negotiator.d.ts +26 -1
  96. package/dist/http/negotiator.d.ts.map +1 -1
  97. package/dist/http/negotiator.js +93 -18
  98. package/dist/http/negotiator.js.map +1 -1
  99. package/dist/http/pool.d.ts +2 -2
  100. package/dist/http/pool.d.ts.map +1 -1
  101. package/dist/http/pool.js.map +1 -1
  102. package/dist/index.d.ts +19 -1
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +14 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/middleware/rate-limiter.d.ts.map +1 -1
  107. package/dist/middleware/rate-limiter.js +4 -0
  108. package/dist/middleware/rate-limiter.js.map +1 -1
  109. package/dist/middleware/retry.js +2 -2
  110. package/dist/middleware/retry.js.map +1 -1
  111. package/dist/proxy/env-proxy.d.ts +21 -0
  112. package/dist/proxy/env-proxy.d.ts.map +1 -0
  113. package/dist/proxy/env-proxy.js +74 -0
  114. package/dist/proxy/env-proxy.js.map +1 -0
  115. package/dist/proxy/http-proxy.d.ts +2 -0
  116. package/dist/proxy/http-proxy.d.ts.map +1 -1
  117. package/dist/proxy/http-proxy.js +29 -6
  118. package/dist/proxy/http-proxy.js.map +1 -1
  119. package/dist/proxy/socks.js +10 -1
  120. package/dist/proxy/socks.js.map +1 -1
  121. package/dist/sse/parser.d.ts +70 -0
  122. package/dist/sse/parser.d.ts.map +1 -0
  123. package/dist/sse/parser.js +153 -0
  124. package/dist/sse/parser.js.map +1 -0
  125. package/dist/tls/ech.d.ts +147 -0
  126. package/dist/tls/ech.d.ts.map +1 -0
  127. package/dist/tls/ech.js +401 -0
  128. package/dist/tls/ech.js.map +1 -0
  129. package/dist/tls/node-engine.d.ts +9 -1
  130. package/dist/tls/node-engine.d.ts.map +1 -1
  131. package/dist/tls/node-engine.js +54 -1
  132. package/dist/tls/node-engine.js.map +1 -1
  133. package/dist/tls/pin-verification.d.ts +9 -0
  134. package/dist/tls/pin-verification.d.ts.map +1 -0
  135. package/dist/tls/pin-verification.js +34 -0
  136. package/dist/tls/pin-verification.js.map +1 -0
  137. package/dist/tls/session-cache.d.ts +70 -0
  138. package/dist/tls/session-cache.d.ts.map +1 -0
  139. package/dist/tls/session-cache.js +80 -0
  140. package/dist/tls/session-cache.js.map +1 -0
  141. package/dist/tls/stealth/client-hello.d.ts +21 -0
  142. package/dist/tls/stealth/client-hello.d.ts.map +1 -1
  143. package/dist/tls/stealth/client-hello.js +116 -0
  144. package/dist/tls/stealth/client-hello.js.map +1 -1
  145. package/dist/tls/stealth/engine.d.ts.map +1 -1
  146. package/dist/tls/stealth/engine.js +152 -30
  147. package/dist/tls/stealth/engine.js.map +1 -1
  148. package/dist/tls/stealth/handshake.d.ts +2 -1
  149. package/dist/tls/stealth/handshake.d.ts.map +1 -1
  150. package/dist/tls/stealth/handshake.js +118 -5
  151. package/dist/tls/stealth/handshake.js.map +1 -1
  152. package/dist/tls/stealth/tls12-handshake.d.ts +14 -0
  153. package/dist/tls/stealth/tls12-handshake.d.ts.map +1 -0
  154. package/dist/tls/stealth/tls12-handshake.js +462 -0
  155. package/dist/tls/stealth/tls12-handshake.js.map +1 -0
  156. package/dist/tls/types.d.ts +40 -0
  157. package/dist/tls/types.d.ts.map +1 -1
  158. package/dist/utils/encoding.d.ts +8 -6
  159. package/dist/utils/encoding.d.ts.map +1 -1
  160. package/dist/utils/encoding.js +92 -24
  161. package/dist/utils/encoding.js.map +1 -1
  162. package/dist/utils/happy-eyeballs.d.ts +3 -0
  163. package/dist/utils/happy-eyeballs.d.ts.map +1 -1
  164. package/dist/utils/happy-eyeballs.js +42 -2
  165. package/dist/utils/happy-eyeballs.js.map +1 -1
  166. package/dist/ws/client.d.ts +3 -0
  167. package/dist/ws/client.d.ts.map +1 -1
  168. package/dist/ws/client.js +63 -7
  169. package/dist/ws/client.js.map +1 -1
  170. package/dist/ws/frame.d.ts +4 -2
  171. package/dist/ws/frame.d.ts.map +1 -1
  172. package/dist/ws/frame.js +18 -18
  173. package/dist/ws/frame.js.map +1 -1
  174. package/dist/ws/permessage-deflate.d.ts +58 -0
  175. package/dist/ws/permessage-deflate.d.ts.map +1 -0
  176. package/dist/ws/permessage-deflate.js +148 -0
  177. package/dist/ws/permessage-deflate.js.map +1 -0
  178. package/package.json +3 -2
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Alt-Svc (Alternative Services) implementation per RFC 7838.
3
+ *
4
+ * Parses `Alt-Svc` response headers and maintains a store of alternative
5
+ * service entries. This is the primary mechanism for HTTP/3 discovery:
6
+ * servers advertise `h3=":443"` in Alt-Svc to indicate QUIC availability.
7
+ *
8
+ * @see https://datatracker.ietf.org/doc/html/rfc7838
9
+ */
10
+ const DEFAULT_MAX_AGE = 86400;
11
+ const DEFAULT_MAX_ENTRIES = 1000;
12
+ /**
13
+ * In-memory store for Alt-Svc (Alternative Services) per RFC 7838.
14
+ *
15
+ * Tracks alternative service advertisements from HTTP response headers
16
+ * and provides lookup for the best alternative to use for a given origin.
17
+ *
18
+ * Primary use case: HTTP/3 discovery via `h3=":443"` advertisements.
19
+ */
20
+ export class AltSvcStore {
21
+ entries = new Map();
22
+ maxEntries;
23
+ totalEntries = 0;
24
+ constructor(config) {
25
+ this.maxEntries = config?.maxEntries ?? DEFAULT_MAX_ENTRIES;
26
+ }
27
+ /**
28
+ * Parses an `Alt-Svc` response header value and stores the entries
29
+ * associated with the given origin.
30
+ *
31
+ * @param origin Origin of the response (e.g. "https://example.com:443").
32
+ * @param headerValue Raw `Alt-Svc` header value.
33
+ *
34
+ * @example
35
+ * store.parseHeader("https://example.com:443", 'h3=":443"; ma=86400, h2=":443"');
36
+ */
37
+ parseHeader(origin, headerValue) {
38
+ const trimmed = headerValue.trim();
39
+ if (trimmed === "clear") {
40
+ this.clear(origin);
41
+ return;
42
+ }
43
+ const now = Date.now();
44
+ const parsed = parseAltSvcHeader(trimmed, origin, now);
45
+ if (parsed.length === 0)
46
+ return;
47
+ const existing = this.entries.get(origin);
48
+ if (existing) {
49
+ this.totalEntries -= existing.length;
50
+ }
51
+ while (this.totalEntries + parsed.length > this.maxEntries) {
52
+ this.evictOldest();
53
+ }
54
+ this.entries.set(origin, parsed);
55
+ this.totalEntries += parsed.length;
56
+ }
57
+ /**
58
+ * Looks up the best available alternative service for a given origin.
59
+ * Prefers h3 over h2. Expired entries are pruned during lookup.
60
+ *
61
+ * @param origin Origin to look up alternatives for.
62
+ * @returns The best Alt-Svc entry, or undefined if no valid alternative exists.
63
+ */
64
+ lookup(origin) {
65
+ const entries = this.entries.get(origin);
66
+ if (!entries)
67
+ return undefined;
68
+ const now = Date.now();
69
+ const valid = entries.filter((e) => now - e.storedAt < e.maxAge * 1000);
70
+ if (valid.length === 0) {
71
+ this.entries.delete(origin);
72
+ this.totalEntries -= entries.length;
73
+ return undefined;
74
+ }
75
+ if (valid.length !== entries.length) {
76
+ this.totalEntries -= entries.length - valid.length;
77
+ this.entries.set(origin, valid);
78
+ }
79
+ const h3 = valid.find((e) => e.alpn === "h3");
80
+ if (h3)
81
+ return h3;
82
+ const h3Draft = valid.find((e) => e.alpn.startsWith("h3-"));
83
+ if (h3Draft)
84
+ return h3Draft;
85
+ return valid[0];
86
+ }
87
+ /**
88
+ * Checks if there's an h3 alternative available for an origin.
89
+ */
90
+ hasH3(origin) {
91
+ const entry = this.lookup(origin);
92
+ return entry !== undefined && (entry.alpn === "h3" || entry.alpn.startsWith("h3-"));
93
+ }
94
+ /**
95
+ * Removes all alternative service entries for a specific origin.
96
+ */
97
+ clear(origin) {
98
+ const entries = this.entries.get(origin);
99
+ if (entries) {
100
+ this.totalEntries -= entries.length;
101
+ this.entries.delete(origin);
102
+ }
103
+ }
104
+ /**
105
+ * Removes all entries from the store.
106
+ */
107
+ clearAll() {
108
+ this.entries.clear();
109
+ this.totalEntries = 0;
110
+ }
111
+ /**
112
+ * Returns the total number of stored entries.
113
+ */
114
+ get size() {
115
+ return this.totalEntries;
116
+ }
117
+ evictOldest() {
118
+ let oldestOrigin;
119
+ let oldestTime = Infinity;
120
+ for (const [origin, entries] of this.entries) {
121
+ for (const entry of entries) {
122
+ if (entry.storedAt < oldestTime) {
123
+ oldestTime = entry.storedAt;
124
+ oldestOrigin = origin;
125
+ }
126
+ }
127
+ }
128
+ if (oldestOrigin) {
129
+ this.clear(oldestOrigin);
130
+ }
131
+ }
132
+ }
133
+ /**
134
+ * Parses an Alt-Svc header value into structured entries.
135
+ *
136
+ * Format: `protocol="host:port"; ma=86400; persist=1, ...`
137
+ *
138
+ * Per RFC 7838 §3:
139
+ * - `protocol` is the ALPN protocol identifier
140
+ * - The quoted value is the authority `host:port`
141
+ * - `ma` is max-age in seconds (default 24h)
142
+ * - `persist` indicates whether to retain across network changes
143
+ */
144
+ function parseAltSvcHeader(value, origin, now) {
145
+ const entries = [];
146
+ const originUrl = new URL(origin);
147
+ const defaultHost = originUrl.hostname;
148
+ const defaultPort = parseInt(originUrl.port) || (originUrl.protocol === "https:" ? 443 : 80);
149
+ const alternatives = splitAltSvc(value);
150
+ for (const alt of alternatives) {
151
+ const entry = parseSingleAltSvc(alt.trim(), defaultHost, defaultPort, now);
152
+ if (entry)
153
+ entries.push(entry);
154
+ }
155
+ return entries;
156
+ }
157
+ /**
158
+ * Splits Alt-Svc header by commas, respecting quoted strings.
159
+ */
160
+ function splitAltSvc(value) {
161
+ const parts = [];
162
+ let current = "";
163
+ let inQuotes = false;
164
+ for (const ch of value) {
165
+ if (ch === '"') {
166
+ inQuotes = !inQuotes;
167
+ current += ch;
168
+ }
169
+ else if (ch === "," && !inQuotes) {
170
+ parts.push(current);
171
+ current = "";
172
+ }
173
+ else {
174
+ current += ch;
175
+ }
176
+ }
177
+ if (current)
178
+ parts.push(current);
179
+ return parts;
180
+ }
181
+ /**
182
+ * Parses a single Alt-Svc alternative entry.
183
+ *
184
+ * Format: `h3=":443"; ma=86400; persist=1`
185
+ */
186
+ function parseSingleAltSvc(alt, defaultHost, defaultPort, now) {
187
+ const match = alt.match(/^([a-zA-Z0-9-]+)="([^"]*)"/);
188
+ if (!match)
189
+ return null;
190
+ const alpn = match[1];
191
+ const authority = match[2];
192
+ let host = defaultHost;
193
+ let port = defaultPort;
194
+ if (authority) {
195
+ const colonIdx = authority.lastIndexOf(":");
196
+ if (colonIdx >= 0) {
197
+ const hostPart = authority.substring(0, colonIdx);
198
+ const portPart = authority.substring(colonIdx + 1);
199
+ if (hostPart)
200
+ host = hostPart;
201
+ const parsedPort = parseInt(portPart, 10);
202
+ if (!isNaN(parsedPort) && parsedPort > 0 && parsedPort <= 65535) {
203
+ port = parsedPort;
204
+ }
205
+ }
206
+ }
207
+ let maxAge = DEFAULT_MAX_AGE;
208
+ let persist = false;
209
+ const params = alt.substring(match[0].length);
210
+ const maMatch = params.match(/;\s*ma=(\d+)/);
211
+ if (maMatch) {
212
+ maxAge = parseInt(maMatch[1], 10);
213
+ }
214
+ const persistMatch = params.match(/;\s*persist=1/);
215
+ if (persistMatch) {
216
+ persist = true;
217
+ }
218
+ return { alpn, host, port, maxAge, persist, storedAt: now };
219
+ }
220
+ //# sourceMappingURL=alt-svc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alt-svc.js","sourceRoot":"","sources":["../../src/http/alt-svc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Represents a single form field value. Either a string or a file descriptor.
3
+ */
4
+ export interface FormFile {
5
+ /** The file content as a Buffer. */
6
+ data: Buffer;
7
+ /** The filename to use in the Content-Disposition header. */
8
+ filename: string;
9
+ /** The MIME type of the file. Defaults to `application/octet-stream`. */
10
+ contentType?: string;
11
+ }
12
+ export type FormValue = string | FormFile;
13
+ /**
14
+ * Builds a `multipart/form-data` request body per RFC 7578.
15
+ *
16
+ * Generates a cryptographically random boundary and serializes all fields
17
+ * into a single `Buffer` suitable for use as a request body. The
18
+ * corresponding `Content-Type` header (including the boundary parameter)
19
+ * is available via {@link FormData.contentType}.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const form = new FormData();
24
+ * form.append("username", "alice");
25
+ * form.append("avatar", { data: avatarBuffer, filename: "avatar.png", contentType: "image/png" });
26
+ *
27
+ * const response = await post("https://example.com/upload", form);
28
+ * ```
29
+ */
30
+ export declare class FormData {
31
+ private readonly fields;
32
+ private readonly boundary;
33
+ constructor();
34
+ /**
35
+ * Appends a field to the form data.
36
+ *
37
+ * @param {string} name - The field name.
38
+ * @param {FormValue} value - A string value or a {@link FormFile} descriptor.
39
+ * @returns {this} The `FormData` instance for chaining.
40
+ */
41
+ append(name: string, value: FormValue): this;
42
+ /**
43
+ * Returns the `Content-Type` header value including the boundary parameter.
44
+ * Must be set on the request for the server to parse the body correctly.
45
+ */
46
+ get contentType(): string;
47
+ /**
48
+ * Returns the boundary string used for this form data instance.
49
+ */
50
+ getBoundary(): string;
51
+ /**
52
+ * Serializes all appended fields into a single `Buffer` in
53
+ * `multipart/form-data` format per RFC 7578.
54
+ *
55
+ * @returns {Buffer} The encoded multipart body.
56
+ */
57
+ encode(): Buffer;
58
+ }
59
+ //# sourceMappingURL=form-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-data.d.ts","sourceRoot":"","sources":["../../src/http/form-data.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiD;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;;IAMlC;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAK5C;;;OAGG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;OAKG;IACH,MAAM,IAAI,MAAM;CA2BjB"}
@@ -0,0 +1,90 @@
1
+ import { randomBytes } from "node:crypto";
2
+ /**
3
+ * Builds a `multipart/form-data` request body per RFC 7578.
4
+ *
5
+ * Generates a cryptographically random boundary and serializes all fields
6
+ * into a single `Buffer` suitable for use as a request body. The
7
+ * corresponding `Content-Type` header (including the boundary parameter)
8
+ * is available via {@link FormData.contentType}.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const form = new FormData();
13
+ * form.append("username", "alice");
14
+ * form.append("avatar", { data: avatarBuffer, filename: "avatar.png", contentType: "image/png" });
15
+ *
16
+ * const response = await post("https://example.com/upload", form);
17
+ * ```
18
+ */
19
+ export class FormData {
20
+ fields = [];
21
+ boundary;
22
+ constructor() {
23
+ this.boundary = `----NLcURL${randomBytes(24).toString("hex")}`;
24
+ }
25
+ /**
26
+ * Appends a field to the form data.
27
+ *
28
+ * @param {string} name - The field name.
29
+ * @param {FormValue} value - A string value or a {@link FormFile} descriptor.
30
+ * @returns {this} The `FormData` instance for chaining.
31
+ */
32
+ append(name, value) {
33
+ this.fields.push({ name, value });
34
+ return this;
35
+ }
36
+ /**
37
+ * Returns the `Content-Type` header value including the boundary parameter.
38
+ * Must be set on the request for the server to parse the body correctly.
39
+ */
40
+ get contentType() {
41
+ return `multipart/form-data; boundary=${this.boundary}`;
42
+ }
43
+ /**
44
+ * Returns the boundary string used for this form data instance.
45
+ */
46
+ getBoundary() {
47
+ return this.boundary;
48
+ }
49
+ /**
50
+ * Serializes all appended fields into a single `Buffer` in
51
+ * `multipart/form-data` format per RFC 7578.
52
+ *
53
+ * @returns {Buffer} The encoded multipart body.
54
+ */
55
+ encode() {
56
+ const parts = [];
57
+ const CRLF = "\r\n";
58
+ for (const { name, value } of this.fields) {
59
+ parts.push(Buffer.from(`--${this.boundary}${CRLF}`, "utf-8"));
60
+ if (typeof value === "string") {
61
+ parts.push(Buffer.from(`Content-Disposition: form-data; name="${escapeQuotes(name)}"${CRLF}`, "utf-8"));
62
+ parts.push(Buffer.from(CRLF, "utf-8"));
63
+ parts.push(Buffer.from(value, "utf-8"));
64
+ }
65
+ else {
66
+ const filename = escapeQuotes(value.filename);
67
+ const contentType = value.contentType ?? "application/octet-stream";
68
+ parts.push(Buffer.from(`Content-Disposition: form-data; name="${escapeQuotes(name)}"; filename="${filename}"${CRLF}`, "utf-8"));
69
+ parts.push(Buffer.from(`Content-Type: ${contentType}${CRLF}`, "utf-8"));
70
+ parts.push(Buffer.from(CRLF, "utf-8"));
71
+ parts.push(value.data);
72
+ }
73
+ parts.push(Buffer.from(CRLF, "utf-8"));
74
+ }
75
+ parts.push(Buffer.from(`--${this.boundary}--${CRLF}`, "utf-8"));
76
+ return Buffer.concat(parts);
77
+ }
78
+ }
79
+ /**
80
+ * Escapes double quotes and backslashes in header parameter values
81
+ * and strips control characters (\r, \n, \0) to prevent header injection
82
+ * in Content-Disposition fields.
83
+ */
84
+ function escapeQuotes(str) {
85
+ return str
86
+ .replace(/[\r\n\0]/g, "")
87
+ .replace(/\\/g, "\\\\")
88
+ .replace(/"/g, '\\"');
89
+ }
90
+ //# sourceMappingURL=form-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-data.js","sourceRoot":"","sources":["../../src/http/form-data.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAmDzK;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAsDlL"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAKxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwEzK;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAE,eAAoB,EAAE,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAuDlL"}
@@ -1,7 +1,7 @@
1
1
  import { PassThrough } from "node:stream";
2
2
  import { NLcURLResponse } from "../../core/response.js";
3
3
  import { HTTPError, TimeoutError } from "../../core/errors.js";
4
- import { encodeRequest } from "./encoder.js";
4
+ import { encodeRequest, drainRequestBody } from "./encoder.js";
5
5
  import { HttpResponseParser } from "./parser.js";
6
6
  import { decompressBody, createDecompressStream } from "../../utils/encoding.js";
7
7
  /**
@@ -17,8 +17,14 @@ import { decompressBody, createDecompressStream } from "../../utils/encoding.js"
17
17
  * @throws {TimeoutError} If the response timeout is exceeded.
18
18
  */
19
19
  export async function sendH1Request(stream, request, options = {}, timings = {}) {
20
- const encoded = encodeRequest(request, options.defaultHeaders ?? []);
20
+ const preparedRequest = await drainRequestBody(request);
21
+ const encoded = encodeRequest(preparedRequest, options.defaultHeaders ?? []);
21
22
  const sendStart = Date.now();
23
+ const onUploadProgress = request.onUploadProgress;
24
+ if (onUploadProgress) {
25
+ const total = encoded.length;
26
+ onUploadProgress({ bytes: 0, totalBytes: total, percent: 0 });
27
+ }
22
28
  await new Promise((resolve, reject) => {
23
29
  stream.write(encoded, (err) => {
24
30
  if (err)
@@ -27,8 +33,19 @@ export async function sendH1Request(stream, request, options = {}, timings = {})
27
33
  resolve();
28
34
  });
29
35
  });
36
+ if (onUploadProgress) {
37
+ const total = encoded.length;
38
+ onUploadProgress({ bytes: total, totalBytes: total, percent: 100 });
39
+ }
30
40
  const parser = new HttpResponseParser(request.method ?? "GET");
41
+ const onDownloadProgress = request.onDownloadProgress;
42
+ let downloadedBytes = 0;
43
+ let downloadTotalBytes = 0;
31
44
  const parsed = await readResponse(stream, parser, request);
45
+ if (onDownloadProgress) {
46
+ downloadTotalBytes = parsed.body.length;
47
+ onDownloadProgress({ bytes: downloadTotalBytes, totalBytes: downloadTotalBytes, percent: 100 });
48
+ }
32
49
  timings.firstByte = Date.now() - sendStart;
33
50
  const encoding = parsed.headers.get("content-encoding");
34
51
  let body;
@@ -80,7 +97,8 @@ export async function sendH1Request(stream, request, options = {}, timings = {})
80
97
  * @throws {TimeoutError} If the response timeout is exceeded.
81
98
  */
82
99
  export async function sendH1StreamingRequest(stream, request, options = {}, timings = {}) {
83
- const encoded = encodeRequest(request, options.defaultHeaders ?? []);
100
+ const preparedRequest = await drainRequestBody(request);
101
+ const encoded = encodeRequest(preparedRequest, options.defaultHeaders ?? []);
84
102
  const sendStart = Date.now();
85
103
  await new Promise((resolve, reject) => {
86
104
  stream.write(encoded, (err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAajF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,OAAsB,EAAE,UAA2B,EAAE,EAAE,UAAmC,EAAE;IAC9I,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAC1C,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3D,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACxD,IAAI,IAAY,CAAC;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,UAAU,EAAE,MAAM,CAAC,aAAa;QAChC,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;QACzE,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;YACjC,KAAK,EAAE,CAAC;SACT;QACD,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;SAC/B;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAc,EAAE,OAAsB,EAAE,UAA2B,EAAE,EAAE,UAAmC,EAAE;IACvJ,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG;gBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAC1C,OAAO,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC;IAErC,MAAM,CAAC,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAEpF,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAE3C,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAE/E,OAAO,IAAI,cAAc,CAAC;QACxB,MAAM,EAAE,WAAW,CAAC,UAAU;QAC9B,UAAU,EAAE,WAAW,CAAC,aAAa;QACrC,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAC;QAC9E,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;YAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC;YACjC,KAAK,EAAE,CAAC;SACT;QACD,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;SAC/B;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,MAA0B,EAAE,OAAsB;IACtF,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAgD,CAAC;QAErD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;QACrG,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,YAAY,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,SAAS,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,MAA0B,EAAE,OAAsB,EAAE,UAAuB;IACvH,OAAO,IAAI,OAAO,CAA+B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,KAAgD,CAAC;QAErD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;QACrG,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,IAAI,YAAY,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhC,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;oBAC7C,eAAe,GAAG,IAAI,CAAC;oBACvB,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAED,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,UAAU,CAAC,OAAO,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,eAAe;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;oBACrC,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,IAAI,SAAS,CAAC,2CAA2C,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxE,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,eAAe;oBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/http/h1/client.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,21 @@ import type { NLcURLRequest } from "../../core/request.js";
11
11
  * @throws {Error} If any header name or value contains CR, LF, or NUL characters.
12
12
  */
13
13
  export declare function encodeRequest(request: NLcURLRequest, defaultHeaders: Array<[string, string]>): Buffer;
14
+ /**
15
+ * Reads all bytes from a `ReadableStream<Uint8Array>` and returns a single `Buffer`.
16
+ *
17
+ * @param {ReadableStream<Uint8Array>} stream - The readable stream to drain.
18
+ * @returns {Promise<Buffer>} A buffer containing all bytes from the stream.
19
+ */
20
+ export declare function drainReadableStream(stream: ReadableStream<Uint8Array>): Promise<Buffer>;
21
+ /**
22
+ * If the request body is a `ReadableStream`, drains it into a `Buffer` and
23
+ * returns a new request with the buffered body. Otherwise returns the request
24
+ * unchanged. This must be called before passing the request to
25
+ * `encodeRequest()` for HTTP/1.1 requests.
26
+ *
27
+ * @param {NLcURLRequest} request - The request to pre-process.
28
+ * @returns {Promise<NLcURLRequest>} Request with body fully buffered (if needed).
29
+ */
30
+ export declare function drainRequestBody(request: NLcURLRequest): Promise<NLcURLRequest>;
14
31
  //# sourceMappingURL=encoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,uBAAuB,CAAC;AAExE;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAwDrG"}
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAe,MAAM,uBAAuB,CAAC;AAIxE;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAyDrG;AAqBD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7F;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAMrF"}
@@ -1,3 +1,5 @@
1
+ import { FormData } from "../form-data.js";
2
+ import { validateHeaderName, validateHeaderValue } from "../../core/validation.js";
1
3
  /**
2
4
  * Serializes an HTTP/1.1 request into a `Buffer` ready to be written to a
3
5
  * socket. Merges `defaultHeaders` (lowest priority) with `request.headers`
@@ -34,7 +36,10 @@ export function encodeRequest(request, defaultHeaders) {
34
36
  headerMap.set("content-length", String(bodyBuffer.length));
35
37
  }
36
38
  if (!headerMap.has("content-type")) {
37
- if (request.body !== null && request.body !== undefined && typeof request.body === "object" && !Buffer.isBuffer(request.body) && !(request.body instanceof URLSearchParams) && !(request.body instanceof ReadableStream)) {
39
+ if (request.body instanceof FormData) {
40
+ headerMap.set("content-type", request.body.contentType);
41
+ }
42
+ else if (request.body !== null && request.body !== undefined && typeof request.body === "object" && !Buffer.isBuffer(request.body) && !(request.body instanceof URLSearchParams) && !(request.body instanceof ReadableStream)) {
38
43
  headerMap.set("content-type", "application/json");
39
44
  }
40
45
  else if (request.body instanceof URLSearchParams) {
@@ -46,9 +51,8 @@ export function encodeRequest(request, defaultHeaders) {
46
51
  }
47
52
  }
48
53
  for (const [k, v] of headerMap) {
49
- if (/[\r\n\0]/.test(k) || /[\r\n\0]/.test(v)) {
50
- throw new Error(`Invalid header: name or value contains forbidden characters`);
51
- }
54
+ validateHeaderName(k);
55
+ validateHeaderValue(k, v);
52
56
  lines.push(`${k}: ${v}`);
53
57
  }
54
58
  lines.push("");
@@ -69,9 +73,53 @@ function serializeBody(body) {
69
73
  if (body instanceof URLSearchParams) {
70
74
  return Buffer.from(body.toString(), "utf-8");
71
75
  }
72
- if (typeof body === "object" && !(body instanceof ReadableStream)) {
76
+ if (body instanceof FormData) {
77
+ return body.encode();
78
+ }
79
+ if (body instanceof ReadableStream) {
80
+ throw new Error("ReadableStream body must be pre-drained before encoding. Use drainRequestBody() first.");
81
+ }
82
+ if (typeof body === "object") {
73
83
  return Buffer.from(JSON.stringify(body), "utf-8");
74
84
  }
75
85
  return Buffer.alloc(0);
76
86
  }
87
+ /**
88
+ * Reads all bytes from a `ReadableStream<Uint8Array>` and returns a single `Buffer`.
89
+ *
90
+ * @param {ReadableStream<Uint8Array>} stream - The readable stream to drain.
91
+ * @returns {Promise<Buffer>} A buffer containing all bytes from the stream.
92
+ */
93
+ export async function drainReadableStream(stream) {
94
+ const reader = stream.getReader();
95
+ const chunks = [];
96
+ try {
97
+ while (true) {
98
+ const { done, value } = await reader.read();
99
+ if (done)
100
+ break;
101
+ chunks.push(value);
102
+ }
103
+ }
104
+ finally {
105
+ reader.releaseLock();
106
+ }
107
+ return Buffer.concat(chunks);
108
+ }
109
+ /**
110
+ * If the request body is a `ReadableStream`, drains it into a `Buffer` and
111
+ * returns a new request with the buffered body. Otherwise returns the request
112
+ * unchanged. This must be called before passing the request to
113
+ * `encodeRequest()` for HTTP/1.1 requests.
114
+ *
115
+ * @param {NLcURLRequest} request - The request to pre-process.
116
+ * @returns {Promise<NLcURLRequest>} Request with body fully buffered (if needed).
117
+ */
118
+ export async function drainRequestBody(request) {
119
+ if (request.body instanceof ReadableStream) {
120
+ const buffered = await drainReadableStream(request.body);
121
+ return { ...request, body: buffered };
122
+ }
123
+ return request;
124
+ }
77
125
  //# sourceMappingURL=encoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"encoder.js","sourceRoot":"","sources":["../../../src/http/h1/encoder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/http/h1/parser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAUD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAA+B;IAE7C;;;;;;OAMG;IACI,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAU;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAa;IAElD;;;;;OAKG;gBACS,aAAa,SAAQ;IAIjC;;;;;;;;OAQG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAuB3B;;;;;;OAMG;IACH,SAAS,IAAI,cAAc;IAO3B;;;;;OAKG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;;;;OAMG;IACH,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IAahD;;;;;;OAMG;IACH,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,YAAY;IAsCpB,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,QAAQ;IAYhB;;;;;;OAMG;IACH,gBAAgB,IAAI,IAAI;CAKzB"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/http/h1/parser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAUD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAA+B;IAE7C;;;;;;OAMG;IACI,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAU;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAa;IAElD;;;;;OAKG;gBACS,aAAa,SAAQ;IAIjC;;;;;;;;OAQG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAuB3B;;;;;;OAMG;IACH,SAAS,IAAI,cAAc;IAO3B;;;;;OAKG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;;;;OAMG;IACH,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC;IAahD;;;;;;OAMG;IACH,YAAY,IAAI,MAAM;IAItB,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,SAAS;IA8BjB,OAAO,CAAC,gBAAgB;IA0CxB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,QAAQ;IAYhB;;;;;;OAMG;IACH,gBAAgB,IAAI,IAAI;CAKzB"}