@nifrajs/node 2.11.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/generated/node-outcome.d.ts +19 -0
- package/dist/generated/node-outcome.d.ts.map +1 -0
- package/dist/generated/node-outcome.js +4 -0
- package/dist/generated/node-outcome.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +187 -24
- package/dist/index.js.map +1 -1
- package/package.json +8 -6
- package/src/generated/node-outcome.ts +21 -0
- package/src/index.ts +224 -52
package/README.md
CHANGED
|
@@ -42,6 +42,17 @@ await serve(app, {
|
|
|
42
42
|
})
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
By default, `request.url` reflects the inbound `Host` header. Do not use that value for
|
|
46
|
+
security decisions unless the deployment validates it. Set `allowedHosts` to reject unknown
|
|
47
|
+
host authorities, or set `canonicalHost` behind a trusted proxy to build URLs from a fixed
|
|
48
|
+
authority. If neither option is set, treat the host in `request.url` as client-controlled.
|
|
49
|
+
|
|
50
|
+
## Static files
|
|
51
|
+
|
|
52
|
+
The optional `static` root is served before `app.fetch` for GET and HEAD requests. It is a
|
|
53
|
+
public asset directory and must contain nothing private: no secrets, source maps, build
|
|
54
|
+
metadata, or user uploads.
|
|
55
|
+
|
|
45
56
|
## Graceful shutdown on signals
|
|
46
57
|
|
|
47
58
|
Opt in to SIGTERM/SIGINT handling so a `docker stop` / Ctrl-C drains in-flight requests
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type NodeServeOutcome = {
|
|
2
|
+
readonly kind: "response";
|
|
3
|
+
readonly response: Response;
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: "json";
|
|
6
|
+
readonly status: number;
|
|
7
|
+
/** Header record after native hooks; repeated values are retained as arrays. */
|
|
8
|
+
readonly headers: Readonly<Record<string, string | readonly string[]>> | undefined;
|
|
9
|
+
/** Queued `Set-Cookie` lines, or `undefined`; the adapter emits one header line each. */
|
|
10
|
+
readonly cookies: readonly string[] | undefined;
|
|
11
|
+
/** The JSON body already stringified, or `null` for an empty (204) response. */
|
|
12
|
+
readonly body: string | null;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: "body";
|
|
15
|
+
readonly status: number;
|
|
16
|
+
readonly headers: Readonly<Record<string, string | readonly string[]>> | undefined;
|
|
17
|
+
readonly body: string | Uint8Array;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=node-outcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-outcome.d.ts","sourceRoot":"","sources":["../../src/generated/node-outcome.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAC1D;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAClF,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;IAC/C,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;IAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;CACnC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-outcome.js","sourceRoot":"","sources":["../../src/generated/node-outcome.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,4FAA4F"}
|
package/dist/index.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ type WsUpgradeOutcome = {
|
|
|
47
47
|
readonly handler: NifraWsHandler;
|
|
48
48
|
readonly data: unknown;
|
|
49
49
|
readonly pubsub: WsPubSub;
|
|
50
|
+
readonly maxPayloadBytes?: number;
|
|
50
51
|
};
|
|
51
52
|
export type RequestProtocol = "http" | "https";
|
|
52
53
|
export type RequestProtocolOption = RequestProtocol | ((request: IncomingMessage) => RequestProtocol);
|
|
@@ -64,6 +65,14 @@ export interface ServeStaticOptions {
|
|
|
64
65
|
readonly immutable?: boolean;
|
|
65
66
|
/** Extra headers merged onto every served file. */
|
|
66
67
|
readonly headers?: Readonly<Record<string, string>>;
|
|
68
|
+
/**
|
|
69
|
+
* Whether a path with a dot-leading segment (`/.env`, `/.git/config`, `/.hidden/app.js`) is
|
|
70
|
+
* served. Default `"deny"`: answered `404` - the same response as a missing file, so probing
|
|
71
|
+
* can't distinguish "hidden" from "absent". Dotfiles land in build output by accident, not by
|
|
72
|
+
* design (`.env` next to the bundle, a `.git` dir in a copied tree), so serving them is opt-in.
|
|
73
|
+
* Set `"allow"` if the directory deliberately contains them (e.g. `/.well-known`).
|
|
74
|
+
*/
|
|
75
|
+
readonly dotfiles?: "deny" | "allow";
|
|
67
76
|
}
|
|
68
77
|
export interface ServeOptions {
|
|
69
78
|
readonly port: number;
|
|
@@ -76,6 +85,10 @@ export interface ServeOptions {
|
|
|
76
85
|
* `request.url` sees the public scheme. Forwarded headers are not trusted implicitly.
|
|
77
86
|
*/
|
|
78
87
|
readonly protocol?: RequestProtocolOption;
|
|
88
|
+
/** Reject requests whose normalized Host authority is not in this allowlist or callback result. */
|
|
89
|
+
readonly allowedHosts?: readonly string[] | ((host: string) => boolean);
|
|
90
|
+
/** Use this validated authority when constructing Request.url, ignoring the inbound Host value. */
|
|
91
|
+
readonly canonicalHost?: string;
|
|
79
92
|
/**
|
|
80
93
|
* Install SIGTERM/SIGINT handlers that call `stop()` for a graceful drain on
|
|
81
94
|
* `docker stop` / Ctrl-C. Off by default - taking over process signals is opt-in,
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -36,6 +36,10 @@ const INTERNAL_ERROR_BODY = '{"ok":false,"error":"internal_error"}';
|
|
|
36
36
|
const EMPTY_BUFFER = Buffer.alloc(0);
|
|
37
37
|
const NODE_RESPONSE_BODY = Symbol.for("nifra.response.body");
|
|
38
38
|
const RESPONSE_RESULT = Symbol.for("nifra.response.result");
|
|
39
|
+
/** Core's proof that a header record's names are already the lowercase wire spelling - set once per
|
|
40
|
+
* request by the native response walk, which had to look at the same keys anyway. Declared by key
|
|
41
|
+
* rather than imported: the same cross-package convention as the two marks above. */
|
|
42
|
+
const LOWERCASE_HEADER_KEYS = Symbol.for("nifra.headers.lowercase");
|
|
39
43
|
function isBodylessStatus(status) {
|
|
40
44
|
return status === 204 || status === 205 || status === 304;
|
|
41
45
|
}
|
|
@@ -190,6 +194,106 @@ function appendCookiesToNodeHeaders(headers, cookies) {
|
|
|
190
194
|
}
|
|
191
195
|
const DEFAULT_DRAIN_MS = 10_000;
|
|
192
196
|
const DRAIN_POLL_MS = 10;
|
|
197
|
+
function normalizeHostAuthority(value) {
|
|
198
|
+
if (value.length === 0 || /[\r\n\s@/?#]/.test(value))
|
|
199
|
+
return undefined;
|
|
200
|
+
let hostname;
|
|
201
|
+
let port;
|
|
202
|
+
if (value.startsWith("[")) {
|
|
203
|
+
const close = value.indexOf("]");
|
|
204
|
+
if (close === -1)
|
|
205
|
+
return undefined;
|
|
206
|
+
hostname = value.slice(1, close);
|
|
207
|
+
const rest = value.slice(close + 1);
|
|
208
|
+
if (rest !== "") {
|
|
209
|
+
if (!rest.startsWith(":"))
|
|
210
|
+
return undefined;
|
|
211
|
+
port = rest.slice(1);
|
|
212
|
+
}
|
|
213
|
+
if (hostname.length === 0 || !/^[0-9a-f:.%]+$/i.test(hostname))
|
|
214
|
+
return undefined;
|
|
215
|
+
hostname = `[${hostname.toLowerCase()}]`;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
const colon = value.indexOf(":");
|
|
219
|
+
if (colon === -1) {
|
|
220
|
+
hostname = value;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
if (value.indexOf(":", colon + 1) !== -1)
|
|
224
|
+
return undefined;
|
|
225
|
+
hostname = value.slice(0, colon);
|
|
226
|
+
port = value.slice(colon + 1);
|
|
227
|
+
}
|
|
228
|
+
if (hostname.length === 0 || !/^[a-z0-9.-]+$/i.test(hostname))
|
|
229
|
+
return undefined;
|
|
230
|
+
hostname = hostname.toLowerCase();
|
|
231
|
+
}
|
|
232
|
+
if (port !== undefined) {
|
|
233
|
+
if (!/^\d{1,5}$/.test(port))
|
|
234
|
+
return undefined;
|
|
235
|
+
const numericPort = Number(port);
|
|
236
|
+
if (!Number.isSafeInteger(numericPort) || numericPort > 65_535)
|
|
237
|
+
return undefined;
|
|
238
|
+
port = String(numericPort);
|
|
239
|
+
}
|
|
240
|
+
return port === undefined ? hostname : `${hostname}:${port}`;
|
|
241
|
+
}
|
|
242
|
+
function hostPolicyOf(options) {
|
|
243
|
+
let allowedHosts;
|
|
244
|
+
if (options.allowedHosts !== undefined && typeof options.allowedHosts !== "function") {
|
|
245
|
+
const normalized = new Set();
|
|
246
|
+
for (const host of options.allowedHosts) {
|
|
247
|
+
const parsed = normalizeHostAuthority(host);
|
|
248
|
+
if (parsed === undefined)
|
|
249
|
+
throw new TypeError(`@nifrajs/node: invalid allowed host ${host}`);
|
|
250
|
+
normalized.add(parsed);
|
|
251
|
+
}
|
|
252
|
+
allowedHosts = normalized;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
allowedHosts = options.allowedHosts;
|
|
256
|
+
}
|
|
257
|
+
const canonicalHost = options.canonicalHost === undefined ? undefined : normalizeHostAuthority(options.canonicalHost);
|
|
258
|
+
if (options.canonicalHost !== undefined && canonicalHost === undefined) {
|
|
259
|
+
throw new TypeError(`@nifrajs/node: invalid canonical host ${options.canonicalHost}`);
|
|
260
|
+
}
|
|
261
|
+
return { allowedHosts, canonicalHost };
|
|
262
|
+
}
|
|
263
|
+
// Last inbound Host and what it normalized to. Normalization is pure and the value repeats for
|
|
264
|
+
// every request of a deployment (one authority, reused across connections), so a one-entry memo
|
|
265
|
+
// turns three regex tests plus the slicing into a string compare - measured 135ns -> ~3ns per
|
|
266
|
+
// request on Node 26. A miss just runs the normalizer, so an attacker rotating the header only
|
|
267
|
+
// gives up the cache, never correctness.
|
|
268
|
+
let lastHostInput;
|
|
269
|
+
let lastHostOutput;
|
|
270
|
+
function normalizeHostCached(value) {
|
|
271
|
+
if (value === lastHostInput)
|
|
272
|
+
return lastHostOutput;
|
|
273
|
+
const normalized = normalizeHostAuthority(value);
|
|
274
|
+
lastHostInput = value;
|
|
275
|
+
lastHostOutput = normalized;
|
|
276
|
+
return normalized;
|
|
277
|
+
}
|
|
278
|
+
function requestHost(req, policy) {
|
|
279
|
+
const inbound = typeof req.headers.host === "string" ? req.headers.host : "localhost";
|
|
280
|
+
const normalized = normalizeHostCached(inbound);
|
|
281
|
+
if (normalized === undefined)
|
|
282
|
+
return undefined;
|
|
283
|
+
if (policy.allowedHosts !== undefined) {
|
|
284
|
+
try {
|
|
285
|
+
const allowed = typeof policy.allowedHosts === "function"
|
|
286
|
+
? policy.allowedHosts(normalized)
|
|
287
|
+
: policy.allowedHosts.has(normalized);
|
|
288
|
+
if (!allowed)
|
|
289
|
+
return undefined;
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return policy.canonicalHost ?? normalized;
|
|
296
|
+
}
|
|
193
297
|
const STATIC_CONTENT_TYPES = {
|
|
194
298
|
".js": "text/javascript; charset=utf-8",
|
|
195
299
|
".mjs": "text/javascript; charset=utf-8",
|
|
@@ -224,7 +328,13 @@ function staticStateOf(options) {
|
|
|
224
328
|
while (to > from && raw.charCodeAt(to - 1) === 47)
|
|
225
329
|
to--;
|
|
226
330
|
const prefix = raw === "/" ? "/" : `/${raw.slice(from, to)}`;
|
|
227
|
-
return {
|
|
331
|
+
return {
|
|
332
|
+
root,
|
|
333
|
+
prefix,
|
|
334
|
+
immutable: options.immutable !== false,
|
|
335
|
+
headers: options.headers,
|
|
336
|
+
denyDotfiles: options.dotfiles !== "allow",
|
|
337
|
+
};
|
|
228
338
|
}
|
|
229
339
|
/**
|
|
230
340
|
* Resolve a request URL to a file under the served root - **synchronously**, so non-matching requests
|
|
@@ -252,9 +362,21 @@ function staticMatch(state, rawUrl) {
|
|
|
252
362
|
// Reject traversal in the REQUEST form before it ever reaches the filesystem path join: a `..`
|
|
253
363
|
// path segment (or a backslash Windows would treat as a separator) has no legitimate use in an
|
|
254
364
|
// asset URL. Segment-precise on purpose - a filename merely CONTAINING `..` (`logo..png`) is legal.
|
|
255
|
-
|
|
365
|
+
// The same segment pass covers dotfiles: the check runs post-decode, so `%2E`-spelled dots are
|
|
366
|
+
// already plain `.` here. Denied dotfiles answer 404, not 403 - identical to a missing file, so
|
|
367
|
+
// probing can't distinguish "hidden" from "absent" (traversal keeps its 403: `..` is an attack
|
|
368
|
+
// shape, and there is nothing behind it to conceal).
|
|
369
|
+
const segments = rel.split("/");
|
|
370
|
+
if (segments.includes("..") || rel.includes("\\")) {
|
|
256
371
|
return { reject: new Response("Forbidden", { status: 403 }) };
|
|
257
372
|
}
|
|
373
|
+
if (state.denyDotfiles) {
|
|
374
|
+
for (const segment of segments) {
|
|
375
|
+
if (segment.charCodeAt(0) === 46 /* '.' */) {
|
|
376
|
+
return { reject: new Response("Not Found", { status: 404 }) };
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
258
380
|
const file = resolve(state.root, rel);
|
|
259
381
|
// Confine to the served directory - the resolved path must sit at or below root.
|
|
260
382
|
const contained = relative(state.root, file);
|
|
@@ -349,11 +471,12 @@ export function serve(app, options) {
|
|
|
349
471
|
let inFlight = 0;
|
|
350
472
|
let closed = false;
|
|
351
473
|
const protocol = protocolResolver(options.protocol);
|
|
474
|
+
const hostPolicy = hostPolicyOf(options);
|
|
352
475
|
const staticState = options.static !== undefined ? staticStateOf(options.static) : undefined;
|
|
353
476
|
const server = createServer((nodeReq, nodeRes) => {
|
|
354
477
|
inFlight += 1;
|
|
355
478
|
try {
|
|
356
|
-
const handled = handle(app, nodeReq, nodeRes, protocol, staticState);
|
|
479
|
+
const handled = handle(app, nodeReq, nodeRes, protocol, staticState, hostPolicy);
|
|
357
480
|
if (handled instanceof Promise) {
|
|
358
481
|
void handled.finally(() => {
|
|
359
482
|
inFlight -= 1;
|
|
@@ -374,8 +497,8 @@ export function serve(app, options) {
|
|
|
374
497
|
if (resolveWs !== undefined) {
|
|
375
498
|
let wssPromise;
|
|
376
499
|
server.on("upgrade", (nodeReq, socket, head) => {
|
|
377
|
-
void handleUpgrade(resolveWs, protocol, nodeReq, socket, head, () => {
|
|
378
|
-
wssPromise ??= loadWsServer();
|
|
500
|
+
void handleUpgrade(resolveWs, protocol, hostPolicy, nodeReq, socket, head, (maxPayloadBytes) => {
|
|
501
|
+
wssPromise ??= loadWsServer(maxPayloadBytes);
|
|
379
502
|
return wssPromise;
|
|
380
503
|
});
|
|
381
504
|
});
|
|
@@ -420,7 +543,12 @@ export function serve(app, options) {
|
|
|
420
543
|
server.listen(options.port, options.hostname, onListening);
|
|
421
544
|
});
|
|
422
545
|
}
|
|
423
|
-
function handle(app, nodeReq, nodeRes, getProtocol, staticState) {
|
|
546
|
+
function handle(app, nodeReq, nodeRes, getProtocol, staticState, hostPolicy) {
|
|
547
|
+
const host = requestHost(nodeReq, hostPolicy);
|
|
548
|
+
if (host === undefined) {
|
|
549
|
+
writeBadRequest(nodeRes);
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
424
552
|
let protocol;
|
|
425
553
|
try {
|
|
426
554
|
protocol = getProtocol(nodeReq);
|
|
@@ -460,7 +588,7 @@ function handle(app, nodeReq, nodeRes, getProtocol, staticState) {
|
|
|
460
588
|
const resolveNodeSource = app.resolveNodeSource;
|
|
461
589
|
if (typeof resolveNodeSource === "function") {
|
|
462
590
|
try {
|
|
463
|
-
const outcome = resolveNodeSource.call(app, toNodeRequestSource(nodeReq, protocol), platform, NODE_OUTCOME_RUNTIME);
|
|
591
|
+
const outcome = resolveNodeSource.call(app, toNodeRequestSource(nodeReq, protocol, host), platform, NODE_OUTCOME_RUNTIME);
|
|
464
592
|
return outcome instanceof Promise
|
|
465
593
|
? outcome.then((settled) => writeNodeOutcome(settled, nodeRes), () => writeInternalError(nodeRes))
|
|
466
594
|
: writeNodeOutcome(outcome, nodeRes);
|
|
@@ -470,7 +598,7 @@ function handle(app, nodeReq, nodeRes, getProtocol, staticState) {
|
|
|
470
598
|
return;
|
|
471
599
|
}
|
|
472
600
|
}
|
|
473
|
-
const request = toWebRequest(nodeReq, protocol);
|
|
601
|
+
const request = toWebRequest(nodeReq, protocol, host);
|
|
474
602
|
const resolveNode = app.resolveNode;
|
|
475
603
|
if (typeof resolveNode === "function") {
|
|
476
604
|
try {
|
|
@@ -512,6 +640,14 @@ function writeInternalError(nodeRes) {
|
|
|
512
640
|
nodeRes.writeHead(500, { "content-type": "application/json" });
|
|
513
641
|
nodeRes.end(INTERNAL_ERROR_BODY);
|
|
514
642
|
}
|
|
643
|
+
function writeBadRequest(nodeRes) {
|
|
644
|
+
const body = "Bad Request";
|
|
645
|
+
nodeRes.writeHead(400, {
|
|
646
|
+
"content-type": "text/plain; charset=utf-8",
|
|
647
|
+
"content-length": String(Buffer.byteLength(body)),
|
|
648
|
+
});
|
|
649
|
+
nodeRes.end(body);
|
|
650
|
+
}
|
|
515
651
|
/** True when every header name in the record is already free of ASCII uppercase - the gate for
|
|
516
652
|
* skipping the per-request lowercase normalization copy in {@link writeJsonOutcome}. */
|
|
517
653
|
function allHeaderKeysLowercase(record) {
|
|
@@ -533,7 +669,9 @@ function allHeaderKeysLowercase(record) {
|
|
|
533
669
|
function writeJsonOutcome(outcome, nodeRes) {
|
|
534
670
|
// The outcome's record is the request's own (`c.set.headers`, already mutated by any native
|
|
535
671
|
// response hooks), and its writers - middleware twins and the framework's own additions - emit
|
|
536
|
-
// lowercase names.
|
|
672
|
+
// lowercase names. Confirmed either by core's mark (the native response walk already looked at
|
|
673
|
+
// these keys, so re-walking them here is the same pass twice) or, when the record never went
|
|
674
|
+
// through that walk, by the scan below. Either way the record is then used as-is and the additions
|
|
537
675
|
// below mutate it in place; nothing reads it after the write. Only a mixed-case key (a user's
|
|
538
676
|
// hand-set `X-Foo`) pays the normalization copy, keeping the wire byte-identical to undici's
|
|
539
677
|
// `Headers` lowercasing on every other runtime.
|
|
@@ -548,7 +686,8 @@ function writeJsonOutcome(outcome, nodeRes) {
|
|
|
548
686
|
// frame on a bare route). A literal keeps it in fast mode.
|
|
549
687
|
headers = {};
|
|
550
688
|
}
|
|
551
|
-
else if (
|
|
689
|
+
else if (source[LOWERCASE_HEADER_KEYS] === true ||
|
|
690
|
+
allHeaderKeysLowercase(source)) {
|
|
552
691
|
headers = source;
|
|
553
692
|
}
|
|
554
693
|
else {
|
|
@@ -633,17 +772,16 @@ function normalizeProtocol(value) {
|
|
|
633
772
|
return value;
|
|
634
773
|
throw new Error(`@nifrajs/node: protocol must be "http" or "https" (got ${JSON.stringify(value)})`);
|
|
635
774
|
}
|
|
636
|
-
function toWebRequest(req, protocol) {
|
|
637
|
-
const host = req.headers.host ?? "localhost";
|
|
775
|
+
function toWebRequest(req, protocol, host) {
|
|
638
776
|
const url = `${protocol}://${host}${req.url ?? "/"}`;
|
|
639
777
|
const method = req.method ?? "GET";
|
|
640
778
|
return makeWebRequest(req, method, url, headerRecordFromNode(req.headers));
|
|
641
779
|
}
|
|
642
|
-
function toNodeRequestSource(req, protocol) {
|
|
780
|
+
function toNodeRequestSource(req, protocol, host) {
|
|
643
781
|
const method = req.method ?? "GET";
|
|
644
782
|
return method === "GET" || method === "HEAD"
|
|
645
|
-
? new LeanNodeGetSource(req, method, protocol)
|
|
646
|
-
: new LazyNodeRequestSource(req, method, protocol);
|
|
783
|
+
? new LeanNodeGetSource(req, method, protocol, host)
|
|
784
|
+
: new LazyNodeRequestSource(req, method, protocol, host);
|
|
647
785
|
}
|
|
648
786
|
/**
|
|
649
787
|
* Split an origin-form request target ("/path?q#frag") into pathname + search without synthesizing
|
|
@@ -688,14 +826,16 @@ class LazyNodeRequestSource {
|
|
|
688
826
|
urlValue;
|
|
689
827
|
nodeReq;
|
|
690
828
|
protocol;
|
|
691
|
-
|
|
829
|
+
host;
|
|
830
|
+
constructor(nodeReq, method, protocol, host) {
|
|
692
831
|
this.nodeReq = nodeReq;
|
|
693
832
|
this.method = method;
|
|
694
833
|
this.protocol = protocol;
|
|
834
|
+
this.host = host;
|
|
695
835
|
}
|
|
696
836
|
/** The absolute URL, built only when something reads it - routing uses `urlParts` instead. */
|
|
697
837
|
get url() {
|
|
698
|
-
this.urlValue ??= `${this.protocol}://${this.
|
|
838
|
+
this.urlValue ??= `${this.protocol}://${this.host}${this.nodeReq.url ?? "/"}`;
|
|
699
839
|
return this.urlValue;
|
|
700
840
|
}
|
|
701
841
|
get urlParts() {
|
|
@@ -731,6 +871,18 @@ class LazyNodeRequestSource {
|
|
|
731
871
|
return this.requestValue.json();
|
|
732
872
|
return this.readNodeBody().then((buffer) => JSON.parse(buffer.toString("utf8")));
|
|
733
873
|
}
|
|
874
|
+
jsonWithByteLength() {
|
|
875
|
+
if (this.requestValue !== undefined) {
|
|
876
|
+
return this.requestValue.arrayBuffer().then((buffer) => ({
|
|
877
|
+
value: JSON.parse(Buffer.from(buffer).toString("utf8")),
|
|
878
|
+
byteLength: buffer.byteLength,
|
|
879
|
+
}));
|
|
880
|
+
}
|
|
881
|
+
return this.readNodeBody().then((buffer) => ({
|
|
882
|
+
value: JSON.parse(buffer.toString("utf8")),
|
|
883
|
+
byteLength: buffer.byteLength,
|
|
884
|
+
}));
|
|
885
|
+
}
|
|
734
886
|
get request() {
|
|
735
887
|
this.requestValue ??= new LazyWebRequest(this.method, this.url, () => this.headersValue ?? headerRecordFromNode(this.nodeReq.headers), (headers) => {
|
|
736
888
|
if (this.consumedBody !== undefined) {
|
|
@@ -809,14 +961,16 @@ class LeanNodeGetSource {
|
|
|
809
961
|
urlValue;
|
|
810
962
|
nodeReq;
|
|
811
963
|
protocol;
|
|
812
|
-
|
|
964
|
+
host;
|
|
965
|
+
constructor(nodeReq, method, protocol, host) {
|
|
813
966
|
this.nodeReq = nodeReq;
|
|
814
967
|
this.method = method;
|
|
815
968
|
this.protocol = protocol;
|
|
969
|
+
this.host = host;
|
|
816
970
|
}
|
|
817
971
|
/** The absolute URL, built only when something reads it - routing uses `urlParts` instead. */
|
|
818
972
|
get url() {
|
|
819
|
-
this.urlValue ??= `${this.protocol}://${this.
|
|
973
|
+
this.urlValue ??= `${this.protocol}://${this.host}${this.nodeReq.url ?? "/"}`;
|
|
820
974
|
return this.urlValue;
|
|
821
975
|
}
|
|
822
976
|
get urlParts() {
|
|
@@ -1065,11 +1219,15 @@ function nodeResponseBody(response) {
|
|
|
1065
1219
|
* `@types/ws` dependency here (the surface is structurally typed via {@link WsServer}/{@link WsSocket}). */
|
|
1066
1220
|
const WS_MODULE_SPECIFIER = "ws";
|
|
1067
1221
|
/** Lazily build a noServer `ws` `WebSocketServer`, or `undefined` if `ws` isn't installed. */
|
|
1068
|
-
async function loadWsServer() {
|
|
1222
|
+
async function loadWsServer(maxPayloadBytes) {
|
|
1069
1223
|
try {
|
|
1070
1224
|
const mod = (await import(__rewriteRelativeImportExtension(WS_MODULE_SPECIFIER)));
|
|
1071
1225
|
const Ctor = mod.WebSocketServer ?? mod.default?.WebSocketServer;
|
|
1072
|
-
return Ctor === undefined
|
|
1226
|
+
return Ctor === undefined
|
|
1227
|
+
? undefined
|
|
1228
|
+
: new Ctor(maxPayloadBytes === undefined
|
|
1229
|
+
? { noServer: true }
|
|
1230
|
+
: { noServer: true, maxPayload: maxPayloadBytes });
|
|
1073
1231
|
}
|
|
1074
1232
|
catch {
|
|
1075
1233
|
return undefined; // `ws` not installed - caller responds 501
|
|
@@ -1086,10 +1244,15 @@ const WS_STATUS_TEXT = {
|
|
|
1086
1244
|
};
|
|
1087
1245
|
/** Resolve a Node `upgrade` event: run the nifra upgrade guard, then either reject (write an HTTP error
|
|
1088
1246
|
* to the raw socket) or perform the `ws` upgrade and wire the socket to the handler. */
|
|
1089
|
-
async function handleUpgrade(resolveWs, getProtocol, nodeReq, socket, head, getWss) {
|
|
1247
|
+
async function handleUpgrade(resolveWs, getProtocol, hostPolicy, nodeReq, socket, head, getWss) {
|
|
1090
1248
|
let outcome;
|
|
1091
1249
|
try {
|
|
1092
|
-
|
|
1250
|
+
const host = requestHost(nodeReq, hostPolicy);
|
|
1251
|
+
if (host === undefined) {
|
|
1252
|
+
writeUpgradeRejection(socket, 400, "bad_request");
|
|
1253
|
+
return;
|
|
1254
|
+
}
|
|
1255
|
+
outcome = await resolveWs(toWebRequest(nodeReq, getProtocol(nodeReq), host));
|
|
1093
1256
|
}
|
|
1094
1257
|
catch {
|
|
1095
1258
|
writeUpgradeRejection(socket, 500, "internal_error");
|
|
@@ -1103,7 +1266,7 @@ async function handleUpgrade(resolveWs, getProtocol, nodeReq, socket, head, getW
|
|
|
1103
1266
|
await writeRejectionResponse(socket, outcome.response);
|
|
1104
1267
|
return;
|
|
1105
1268
|
}
|
|
1106
|
-
const wss = await getWss();
|
|
1269
|
+
const wss = await getWss(outcome.maxPayloadBytes);
|
|
1107
1270
|
if (wss === undefined) {
|
|
1108
1271
|
writeUpgradeRejection(socket, 501, "websocket_unavailable"); // `ws` not installed
|
|
1109
1272
|
return;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/node",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "Run a nifra app on Node's http server - a Request<->stream adapter with a graceful stop().",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
7
7
|
"typescript",
|
|
8
8
|
"nifra",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
9
|
+
"node",
|
|
10
|
+
"nodejs",
|
|
11
|
+
"http",
|
|
12
|
+
"adapter",
|
|
13
|
+
"runtime",
|
|
14
|
+
"server"
|
|
13
15
|
],
|
|
14
16
|
"type": "module",
|
|
15
17
|
"main": "./dist/index.js",
|
|
@@ -28,7 +30,7 @@
|
|
|
28
30
|
],
|
|
29
31
|
"sideEffects": false,
|
|
30
32
|
"scripts": {
|
|
31
|
-
"build": "tsc -p tsconfig.build.json && bun run ../../scripts/fix-dts.ts dist"
|
|
33
|
+
"build": "bun run ../../scripts/gen-node-outcome.ts && tsc -p tsconfig.build.json && bun run ../../scripts/fix-dts.ts dist"
|
|
32
34
|
},
|
|
33
35
|
"peerDependencies": {
|
|
34
36
|
"ws": "^8.18.0"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Generated by scripts/gen-node-outcome.ts - edit packages/core/src/server/node-outcome.ts instead.
|
|
2
|
+
// This file is type-only so @nifrajs/node stays free of a runtime @nifrajs/core dependency.
|
|
3
|
+
|
|
4
|
+
export type NodeServeOutcome =
|
|
5
|
+
| { readonly kind: "response"; readonly response: Response }
|
|
6
|
+
| {
|
|
7
|
+
readonly kind: "json"
|
|
8
|
+
readonly status: number
|
|
9
|
+
/** Header record after native hooks; repeated values are retained as arrays. */
|
|
10
|
+
readonly headers: Readonly<Record<string, string | readonly string[]>> | undefined
|
|
11
|
+
/** Queued `Set-Cookie` lines, or `undefined`; the adapter emits one header line each. */
|
|
12
|
+
readonly cookies: readonly string[] | undefined
|
|
13
|
+
/** The JSON body already stringified, or `null` for an empty (204) response. */
|
|
14
|
+
readonly body: string | null
|
|
15
|
+
}
|
|
16
|
+
| {
|
|
17
|
+
readonly kind: "body"
|
|
18
|
+
readonly status: number
|
|
19
|
+
readonly headers: Readonly<Record<string, string | readonly string[]>> | undefined
|
|
20
|
+
readonly body: string | Uint8Array
|
|
21
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { type Duplex, Readable } from "node:stream"
|
|
|
23
23
|
import { fileURLToPath } from "node:url"
|
|
24
24
|
// srvx's lazy spec-shaped Response - see nodeOutcomeToResponse for why the bridge uses it.
|
|
25
25
|
import { FastResponse } from "srvx/node"
|
|
26
|
+
import type { NodeServeOutcome } from "./generated/node-outcome.ts"
|
|
26
27
|
|
|
27
28
|
/** The runtime platform a nifra app accepts as `fetch`'s 2nd arg - here, the observed socket peer. */
|
|
28
29
|
interface NodePlatform {
|
|
@@ -38,8 +39,8 @@ export interface FetchHandler {
|
|
|
38
39
|
resolveWebSocketUpgrade?(request: Request): WsUpgradeOutcome | Promise<WsUpgradeOutcome>
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
// --- WebSocket types: structurally mirrored from @nifrajs/core
|
|
42
|
-
//
|
|
42
|
+
// --- WebSocket types: structurally mirrored from @nifrajs/core. The adapter stays dependency-free;
|
|
43
|
+
// the runtime outcome contract below is generated from core as a separate type-only artifact. ---
|
|
43
44
|
|
|
44
45
|
/** A received frame, normalized: text → `string`, binary → `Uint8Array`. */
|
|
45
46
|
type NifraWsData = string | Uint8Array
|
|
@@ -79,6 +80,7 @@ type WsUpgradeOutcome =
|
|
|
79
80
|
readonly handler: NifraWsHandler
|
|
80
81
|
readonly data: unknown
|
|
81
82
|
readonly pubsub: WsPubSub
|
|
83
|
+
readonly maxPayloadBytes?: number
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
/** Structural view of the `ws` package's `WebSocket` (no `@types/ws` dependency - see `loadWsServer`). */
|
|
@@ -107,30 +109,7 @@ export type RequestProtocolOption =
|
|
|
107
109
|
| ((request: IncomingMessage) => RequestProtocol)
|
|
108
110
|
type RequestProtocolResolver = (request: IncomingMessage) => RequestProtocol
|
|
109
111
|
|
|
110
|
-
/**
|
|
111
|
-
* The node-direct render returned by a nifra app's `resolveNode` - structurally mirrored here so this
|
|
112
|
-
* adapter stays decoupled from `@nifrajs/core` (it bridges *any* handler exposing this seam, and has no
|
|
113
|
-
* runtime dependency on nifra). A `kind: "json"` outcome is a plain-data result we serialize straight to
|
|
114
|
-
* the socket; a `kind: "body"` outcome is a marked buffered response body (notably @nifrajs/web's
|
|
115
|
-
* non-deferred SSR HTML). Both skip undici/Web body draining. Everything else carries a `Response` we
|
|
116
|
-
* write the usual Web way. Kept in lockstep with `@nifrajs/core`'s `NodeServeOutcome` by the integration
|
|
117
|
-
* test (`serve.test.ts`), which runs a real nifra app end-to-end through this path.
|
|
118
|
-
*/
|
|
119
|
-
type NodeServeOutcome =
|
|
120
|
-
| { readonly kind: "response"; readonly response: Response }
|
|
121
|
-
| {
|
|
122
|
-
readonly kind: "json"
|
|
123
|
-
readonly status: number
|
|
124
|
-
readonly headers: Readonly<Record<string, string | readonly string[]>> | undefined
|
|
125
|
-
readonly cookies: readonly string[] | undefined
|
|
126
|
-
readonly body: string | null
|
|
127
|
-
}
|
|
128
|
-
| {
|
|
129
|
-
readonly kind: "body"
|
|
130
|
-
readonly status: number
|
|
131
|
-
readonly headers: Readonly<Record<string, string | readonly string[]>> | undefined
|
|
132
|
-
readonly body: string | Uint8Array
|
|
133
|
-
}
|
|
112
|
+
/** The node-direct render contract is generated from core at build time into `./generated`. */
|
|
134
113
|
|
|
135
114
|
interface NodeRequestSource {
|
|
136
115
|
readonly method: string
|
|
@@ -142,6 +121,7 @@ interface NodeRequestSource {
|
|
|
142
121
|
readonly body: ReadableStream<Uint8Array> | null
|
|
143
122
|
arrayBuffer(): Promise<ArrayBuffer>
|
|
144
123
|
json(): Promise<unknown>
|
|
124
|
+
jsonWithByteLength?(): Promise<{ readonly value: unknown; readonly byteLength: number }>
|
|
145
125
|
readonly request: Request
|
|
146
126
|
}
|
|
147
127
|
|
|
@@ -185,6 +165,10 @@ const INTERNAL_ERROR_BODY = '{"ok":false,"error":"internal_error"}'
|
|
|
185
165
|
const EMPTY_BUFFER = Buffer.alloc(0)
|
|
186
166
|
const NODE_RESPONSE_BODY = Symbol.for("nifra.response.body")
|
|
187
167
|
const RESPONSE_RESULT = Symbol.for("nifra.response.result")
|
|
168
|
+
/** Core's proof that a header record's names are already the lowercase wire spelling - set once per
|
|
169
|
+
* request by the native response walk, which had to look at the same keys anyway. Declared by key
|
|
170
|
+
* rather than imported: the same cross-package convention as the two marks above. */
|
|
171
|
+
const LOWERCASE_HEADER_KEYS = Symbol.for("nifra.headers.lowercase")
|
|
188
172
|
|
|
189
173
|
function isBodylessStatus(status: number): boolean {
|
|
190
174
|
return status === 204 || status === 205 || status === 304
|
|
@@ -371,6 +355,14 @@ export interface ServeStaticOptions {
|
|
|
371
355
|
readonly immutable?: boolean
|
|
372
356
|
/** Extra headers merged onto every served file. */
|
|
373
357
|
readonly headers?: Readonly<Record<string, string>>
|
|
358
|
+
/**
|
|
359
|
+
* Whether a path with a dot-leading segment (`/.env`, `/.git/config`, `/.hidden/app.js`) is
|
|
360
|
+
* served. Default `"deny"`: answered `404` - the same response as a missing file, so probing
|
|
361
|
+
* can't distinguish "hidden" from "absent". Dotfiles land in build output by accident, not by
|
|
362
|
+
* design (`.env` next to the bundle, a `.git` dir in a copied tree), so serving them is opt-in.
|
|
363
|
+
* Set `"allow"` if the directory deliberately contains them (e.g. `/.well-known`).
|
|
364
|
+
*/
|
|
365
|
+
readonly dotfiles?: "deny" | "allow"
|
|
374
366
|
}
|
|
375
367
|
|
|
376
368
|
export interface ServeOptions {
|
|
@@ -384,6 +376,10 @@ export interface ServeOptions {
|
|
|
384
376
|
* `request.url` sees the public scheme. Forwarded headers are not trusted implicitly.
|
|
385
377
|
*/
|
|
386
378
|
readonly protocol?: RequestProtocolOption
|
|
379
|
+
/** Reject requests whose normalized Host authority is not in this allowlist or callback result. */
|
|
380
|
+
readonly allowedHosts?: readonly string[] | ((host: string) => boolean)
|
|
381
|
+
/** Use this validated authority when constructing Request.url, ignoring the inbound Host value. */
|
|
382
|
+
readonly canonicalHost?: string
|
|
387
383
|
/**
|
|
388
384
|
* Install SIGTERM/SIGINT handlers that call `stop()` for a graceful drain on
|
|
389
385
|
* `docker stop` / Ctrl-C. Off by default - taking over process signals is opt-in,
|
|
@@ -416,6 +412,102 @@ export interface NodeServer {
|
|
|
416
412
|
const DEFAULT_DRAIN_MS = 10_000
|
|
417
413
|
const DRAIN_POLL_MS = 10
|
|
418
414
|
|
|
415
|
+
interface HostPolicy {
|
|
416
|
+
readonly allowedHosts: ReadonlySet<string> | ((host: string) => boolean) | undefined
|
|
417
|
+
readonly canonicalHost: string | undefined
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
function normalizeHostAuthority(value: string): string | undefined {
|
|
421
|
+
if (value.length === 0 || /[\r\n\s@/?#]/.test(value)) return undefined
|
|
422
|
+
let hostname: string
|
|
423
|
+
let port: string | undefined
|
|
424
|
+
if (value.startsWith("[")) {
|
|
425
|
+
const close = value.indexOf("]")
|
|
426
|
+
if (close === -1) return undefined
|
|
427
|
+
hostname = value.slice(1, close)
|
|
428
|
+
const rest = value.slice(close + 1)
|
|
429
|
+
if (rest !== "") {
|
|
430
|
+
if (!rest.startsWith(":")) return undefined
|
|
431
|
+
port = rest.slice(1)
|
|
432
|
+
}
|
|
433
|
+
if (hostname.length === 0 || !/^[0-9a-f:.%]+$/i.test(hostname)) return undefined
|
|
434
|
+
hostname = `[${hostname.toLowerCase()}]`
|
|
435
|
+
} else {
|
|
436
|
+
const colon = value.indexOf(":")
|
|
437
|
+
if (colon === -1) {
|
|
438
|
+
hostname = value
|
|
439
|
+
} else {
|
|
440
|
+
if (value.indexOf(":", colon + 1) !== -1) return undefined
|
|
441
|
+
hostname = value.slice(0, colon)
|
|
442
|
+
port = value.slice(colon + 1)
|
|
443
|
+
}
|
|
444
|
+
if (hostname.length === 0 || !/^[a-z0-9.-]+$/i.test(hostname)) return undefined
|
|
445
|
+
hostname = hostname.toLowerCase()
|
|
446
|
+
}
|
|
447
|
+
if (port !== undefined) {
|
|
448
|
+
if (!/^\d{1,5}$/.test(port)) return undefined
|
|
449
|
+
const numericPort = Number(port)
|
|
450
|
+
if (!Number.isSafeInteger(numericPort) || numericPort > 65_535) return undefined
|
|
451
|
+
port = String(numericPort)
|
|
452
|
+
}
|
|
453
|
+
return port === undefined ? hostname : `${hostname}:${port}`
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
function hostPolicyOf(options: ServeOptions): HostPolicy {
|
|
457
|
+
let allowedHosts: HostPolicy["allowedHosts"]
|
|
458
|
+
if (options.allowedHosts !== undefined && typeof options.allowedHosts !== "function") {
|
|
459
|
+
const normalized = new Set<string>()
|
|
460
|
+
for (const host of options.allowedHosts) {
|
|
461
|
+
const parsed = normalizeHostAuthority(host)
|
|
462
|
+
if (parsed === undefined) throw new TypeError(`@nifrajs/node: invalid allowed host ${host}`)
|
|
463
|
+
normalized.add(parsed)
|
|
464
|
+
}
|
|
465
|
+
allowedHosts = normalized
|
|
466
|
+
} else {
|
|
467
|
+
allowedHosts = options.allowedHosts
|
|
468
|
+
}
|
|
469
|
+
const canonicalHost =
|
|
470
|
+
options.canonicalHost === undefined ? undefined : normalizeHostAuthority(options.canonicalHost)
|
|
471
|
+
if (options.canonicalHost !== undefined && canonicalHost === undefined) {
|
|
472
|
+
throw new TypeError(`@nifrajs/node: invalid canonical host ${options.canonicalHost}`)
|
|
473
|
+
}
|
|
474
|
+
return { allowedHosts, canonicalHost }
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// Last inbound Host and what it normalized to. Normalization is pure and the value repeats for
|
|
478
|
+
// every request of a deployment (one authority, reused across connections), so a one-entry memo
|
|
479
|
+
// turns three regex tests plus the slicing into a string compare - measured 135ns -> ~3ns per
|
|
480
|
+
// request on Node 26. A miss just runs the normalizer, so an attacker rotating the header only
|
|
481
|
+
// gives up the cache, never correctness.
|
|
482
|
+
let lastHostInput: string | undefined
|
|
483
|
+
let lastHostOutput: string | undefined
|
|
484
|
+
|
|
485
|
+
function normalizeHostCached(value: string): string | undefined {
|
|
486
|
+
if (value === lastHostInput) return lastHostOutput
|
|
487
|
+
const normalized = normalizeHostAuthority(value)
|
|
488
|
+
lastHostInput = value
|
|
489
|
+
lastHostOutput = normalized
|
|
490
|
+
return normalized
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
function requestHost(req: IncomingMessage, policy: HostPolicy): string | undefined {
|
|
494
|
+
const inbound = typeof req.headers.host === "string" ? req.headers.host : "localhost"
|
|
495
|
+
const normalized = normalizeHostCached(inbound)
|
|
496
|
+
if (normalized === undefined) return undefined
|
|
497
|
+
if (policy.allowedHosts !== undefined) {
|
|
498
|
+
try {
|
|
499
|
+
const allowed =
|
|
500
|
+
typeof policy.allowedHosts === "function"
|
|
501
|
+
? policy.allowedHosts(normalized)
|
|
502
|
+
: policy.allowedHosts.has(normalized)
|
|
503
|
+
if (!allowed) return undefined
|
|
504
|
+
} catch {
|
|
505
|
+
return undefined
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
return policy.canonicalHost ?? normalized
|
|
509
|
+
}
|
|
510
|
+
|
|
419
511
|
const STATIC_CONTENT_TYPES: Readonly<Record<string, string>> = {
|
|
420
512
|
".js": "text/javascript; charset=utf-8",
|
|
421
513
|
".mjs": "text/javascript; charset=utf-8",
|
|
@@ -445,6 +537,7 @@ interface StaticState {
|
|
|
445
537
|
readonly prefix: string // normalized: "/assets" (no trailing slash) or "/"
|
|
446
538
|
readonly immutable: boolean
|
|
447
539
|
readonly headers: Readonly<Record<string, string>> | undefined
|
|
540
|
+
readonly denyDotfiles: boolean
|
|
448
541
|
}
|
|
449
542
|
|
|
450
543
|
function staticStateOf(options: ServeStaticOptions): StaticState {
|
|
@@ -456,7 +549,13 @@ function staticStateOf(options: ServeStaticOptions): StaticState {
|
|
|
456
549
|
let to = raw.length
|
|
457
550
|
while (to > from && raw.charCodeAt(to - 1) === 47) to--
|
|
458
551
|
const prefix = raw === "/" ? "/" : `/${raw.slice(from, to)}`
|
|
459
|
-
return {
|
|
552
|
+
return {
|
|
553
|
+
root,
|
|
554
|
+
prefix,
|
|
555
|
+
immutable: options.immutable !== false,
|
|
556
|
+
headers: options.headers,
|
|
557
|
+
denyDotfiles: options.dotfiles !== "allow",
|
|
558
|
+
}
|
|
460
559
|
}
|
|
461
560
|
|
|
462
561
|
/**
|
|
@@ -485,9 +584,21 @@ function staticMatch(
|
|
|
485
584
|
// Reject traversal in the REQUEST form before it ever reaches the filesystem path join: a `..`
|
|
486
585
|
// path segment (or a backslash Windows would treat as a separator) has no legitimate use in an
|
|
487
586
|
// asset URL. Segment-precise on purpose - a filename merely CONTAINING `..` (`logo..png`) is legal.
|
|
488
|
-
|
|
587
|
+
// The same segment pass covers dotfiles: the check runs post-decode, so `%2E`-spelled dots are
|
|
588
|
+
// already plain `.` here. Denied dotfiles answer 404, not 403 - identical to a missing file, so
|
|
589
|
+
// probing can't distinguish "hidden" from "absent" (traversal keeps its 403: `..` is an attack
|
|
590
|
+
// shape, and there is nothing behind it to conceal).
|
|
591
|
+
const segments = rel.split("/")
|
|
592
|
+
if (segments.includes("..") || rel.includes("\\")) {
|
|
489
593
|
return { reject: new Response("Forbidden", { status: 403 }) }
|
|
490
594
|
}
|
|
595
|
+
if (state.denyDotfiles) {
|
|
596
|
+
for (const segment of segments) {
|
|
597
|
+
if (segment.charCodeAt(0) === 46 /* '.' */) {
|
|
598
|
+
return { reject: new Response("Not Found", { status: 404 }) }
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
491
602
|
const file = resolve(state.root, rel)
|
|
492
603
|
// Confine to the served directory - the resolved path must sit at or below root.
|
|
493
604
|
const contained = relative(state.root, file)
|
|
@@ -585,11 +696,12 @@ export function serve(app: FetchHandler, options: ServeOptions): Promise<NodeSer
|
|
|
585
696
|
let inFlight = 0
|
|
586
697
|
let closed = false
|
|
587
698
|
const protocol = protocolResolver(options.protocol)
|
|
699
|
+
const hostPolicy = hostPolicyOf(options)
|
|
588
700
|
const staticState = options.static !== undefined ? staticStateOf(options.static) : undefined
|
|
589
701
|
const server = createServer((nodeReq, nodeRes) => {
|
|
590
702
|
inFlight += 1
|
|
591
703
|
try {
|
|
592
|
-
const handled = handle(app, nodeReq, nodeRes, protocol, staticState)
|
|
704
|
+
const handled = handle(app, nodeReq, nodeRes, protocol, staticState, hostPolicy)
|
|
593
705
|
if (handled instanceof Promise) {
|
|
594
706
|
void handled.finally(() => {
|
|
595
707
|
inFlight -= 1
|
|
@@ -610,10 +722,18 @@ export function serve(app: FetchHandler, options: ServeOptions): Promise<NodeSer
|
|
|
610
722
|
if (resolveWs !== undefined) {
|
|
611
723
|
let wssPromise: Promise<WsServer | undefined> | undefined
|
|
612
724
|
server.on("upgrade", (nodeReq, socket, head) => {
|
|
613
|
-
void handleUpgrade(
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
725
|
+
void handleUpgrade(
|
|
726
|
+
resolveWs,
|
|
727
|
+
protocol,
|
|
728
|
+
hostPolicy,
|
|
729
|
+
nodeReq,
|
|
730
|
+
socket,
|
|
731
|
+
head,
|
|
732
|
+
(maxPayloadBytes) => {
|
|
733
|
+
wssPromise ??= loadWsServer(maxPayloadBytes)
|
|
734
|
+
return wssPromise
|
|
735
|
+
},
|
|
736
|
+
)
|
|
617
737
|
})
|
|
618
738
|
}
|
|
619
739
|
|
|
@@ -663,7 +783,13 @@ function handle(
|
|
|
663
783
|
nodeRes: ServerResponse,
|
|
664
784
|
getProtocol: RequestProtocolResolver,
|
|
665
785
|
staticState: StaticState | undefined,
|
|
786
|
+
hostPolicy: HostPolicy,
|
|
666
787
|
): void | Promise<void> {
|
|
788
|
+
const host = requestHost(nodeReq, hostPolicy)
|
|
789
|
+
if (host === undefined) {
|
|
790
|
+
writeBadRequest(nodeRes)
|
|
791
|
+
return
|
|
792
|
+
}
|
|
667
793
|
let protocol: RequestProtocol
|
|
668
794
|
try {
|
|
669
795
|
protocol = getProtocol(nodeReq)
|
|
@@ -709,7 +835,7 @@ function handle(
|
|
|
709
835
|
try {
|
|
710
836
|
const outcome = resolveNodeSource.call(
|
|
711
837
|
app,
|
|
712
|
-
toNodeRequestSource(nodeReq, protocol),
|
|
838
|
+
toNodeRequestSource(nodeReq, protocol, host),
|
|
713
839
|
platform,
|
|
714
840
|
NODE_OUTCOME_RUNTIME,
|
|
715
841
|
)
|
|
@@ -725,7 +851,7 @@ function handle(
|
|
|
725
851
|
}
|
|
726
852
|
}
|
|
727
853
|
|
|
728
|
-
const request = toWebRequest(nodeReq, protocol)
|
|
854
|
+
const request = toWebRequest(nodeReq, protocol, host)
|
|
729
855
|
const resolveNode = (app as Partial<NodeFastHandler>).resolveNode
|
|
730
856
|
if (typeof resolveNode === "function") {
|
|
731
857
|
try {
|
|
@@ -778,6 +904,15 @@ function writeInternalError(nodeRes: ServerResponse): void {
|
|
|
778
904
|
nodeRes.end(INTERNAL_ERROR_BODY)
|
|
779
905
|
}
|
|
780
906
|
|
|
907
|
+
function writeBadRequest(nodeRes: ServerResponse): void {
|
|
908
|
+
const body = "Bad Request"
|
|
909
|
+
nodeRes.writeHead(400, {
|
|
910
|
+
"content-type": "text/plain; charset=utf-8",
|
|
911
|
+
"content-length": String(Buffer.byteLength(body)),
|
|
912
|
+
})
|
|
913
|
+
nodeRes.end(body)
|
|
914
|
+
}
|
|
915
|
+
|
|
781
916
|
/** True when every header name in the record is already free of ASCII uppercase - the gate for
|
|
782
917
|
* skipping the per-request lowercase normalization copy in {@link writeJsonOutcome}. */
|
|
783
918
|
function allHeaderKeysLowercase(record: Readonly<Record<string, unknown>>): boolean {
|
|
@@ -802,7 +937,9 @@ function writeJsonOutcome(
|
|
|
802
937
|
): void {
|
|
803
938
|
// The outcome's record is the request's own (`c.set.headers`, already mutated by any native
|
|
804
939
|
// response hooks), and its writers - middleware twins and the framework's own additions - emit
|
|
805
|
-
// lowercase names.
|
|
940
|
+
// lowercase names. Confirmed either by core's mark (the native response walk already looked at
|
|
941
|
+
// these keys, so re-walking them here is the same pass twice) or, when the record never went
|
|
942
|
+
// through that walk, by the scan below. Either way the record is then used as-is and the additions
|
|
806
943
|
// below mutate it in place; nothing reads it after the write. Only a mixed-case key (a user's
|
|
807
944
|
// hand-set `X-Foo`) pays the normalization copy, keeping the wire byte-identical to undici's
|
|
808
945
|
// `Headers` lowercasing on every other runtime.
|
|
@@ -816,7 +953,10 @@ function writeJsonOutcome(
|
|
|
816
953
|
// this record key by key on every response (measured at over twice fastify's share of the same
|
|
817
954
|
// frame on a bare route). A literal keeps it in fast mode.
|
|
818
955
|
headers = {}
|
|
819
|
-
} else if (
|
|
956
|
+
} else if (
|
|
957
|
+
(source as Record<symbol, unknown>)[LOWERCASE_HEADER_KEYS] === true ||
|
|
958
|
+
allHeaderKeysLowercase(source)
|
|
959
|
+
) {
|
|
820
960
|
headers = source as Record<string, string | string[]>
|
|
821
961
|
} else {
|
|
822
962
|
headers = Object.create(null) as Record<string, string | string[]>
|
|
@@ -904,18 +1044,21 @@ function normalizeProtocol(value: string): RequestProtocol {
|
|
|
904
1044
|
)
|
|
905
1045
|
}
|
|
906
1046
|
|
|
907
|
-
function toWebRequest(req: IncomingMessage, protocol: RequestProtocol): Request {
|
|
908
|
-
const host = req.headers.host ?? "localhost"
|
|
1047
|
+
function toWebRequest(req: IncomingMessage, protocol: RequestProtocol, host: string): Request {
|
|
909
1048
|
const url = `${protocol}://${host}${req.url ?? "/"}`
|
|
910
1049
|
const method = req.method ?? "GET"
|
|
911
1050
|
return makeWebRequest(req, method, url, headerRecordFromNode(req.headers))
|
|
912
1051
|
}
|
|
913
1052
|
|
|
914
|
-
function toNodeRequestSource(
|
|
1053
|
+
function toNodeRequestSource(
|
|
1054
|
+
req: IncomingMessage,
|
|
1055
|
+
protocol: RequestProtocol,
|
|
1056
|
+
host: string,
|
|
1057
|
+
): NodeRequestSource {
|
|
915
1058
|
const method = req.method ?? "GET"
|
|
916
1059
|
return method === "GET" || method === "HEAD"
|
|
917
|
-
? new LeanNodeGetSource(req, method, protocol)
|
|
918
|
-
: new LazyNodeRequestSource(req, method, protocol)
|
|
1060
|
+
? new LeanNodeGetSource(req, method, protocol, host)
|
|
1061
|
+
: new LazyNodeRequestSource(req, method, protocol, host)
|
|
919
1062
|
}
|
|
920
1063
|
|
|
921
1064
|
/**
|
|
@@ -961,16 +1104,18 @@ class LazyNodeRequestSource implements NodeRequestSource {
|
|
|
961
1104
|
private urlValue: string | undefined
|
|
962
1105
|
private readonly nodeReq: IncomingMessage
|
|
963
1106
|
private readonly protocol: RequestProtocol
|
|
1107
|
+
private readonly host: string
|
|
964
1108
|
|
|
965
|
-
constructor(nodeReq: IncomingMessage, method: string, protocol: RequestProtocol) {
|
|
1109
|
+
constructor(nodeReq: IncomingMessage, method: string, protocol: RequestProtocol, host: string) {
|
|
966
1110
|
this.nodeReq = nodeReq
|
|
967
1111
|
this.method = method
|
|
968
1112
|
this.protocol = protocol
|
|
1113
|
+
this.host = host
|
|
969
1114
|
}
|
|
970
1115
|
|
|
971
1116
|
/** The absolute URL, built only when something reads it - routing uses `urlParts` instead. */
|
|
972
1117
|
get url(): string {
|
|
973
|
-
this.urlValue ??= `${this.protocol}://${this.
|
|
1118
|
+
this.urlValue ??= `${this.protocol}://${this.host}${this.nodeReq.url ?? "/"}`
|
|
974
1119
|
return this.urlValue
|
|
975
1120
|
}
|
|
976
1121
|
|
|
@@ -1014,6 +1159,19 @@ class LazyNodeRequestSource implements NodeRequestSource {
|
|
|
1014
1159
|
return this.readNodeBody().then((buffer) => JSON.parse(buffer.toString("utf8")) as unknown)
|
|
1015
1160
|
}
|
|
1016
1161
|
|
|
1162
|
+
jsonWithByteLength(): Promise<{ readonly value: unknown; readonly byteLength: number }> {
|
|
1163
|
+
if (this.requestValue !== undefined) {
|
|
1164
|
+
return this.requestValue.arrayBuffer().then((buffer) => ({
|
|
1165
|
+
value: JSON.parse(Buffer.from(buffer).toString("utf8")) as unknown,
|
|
1166
|
+
byteLength: buffer.byteLength,
|
|
1167
|
+
}))
|
|
1168
|
+
}
|
|
1169
|
+
return this.readNodeBody().then((buffer) => ({
|
|
1170
|
+
value: JSON.parse(buffer.toString("utf8")) as unknown,
|
|
1171
|
+
byteLength: buffer.byteLength,
|
|
1172
|
+
}))
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1017
1175
|
get request(): Request {
|
|
1018
1176
|
this.requestValue ??= new LazyWebRequest(
|
|
1019
1177
|
this.method,
|
|
@@ -1103,16 +1261,18 @@ class LeanNodeGetSource implements NodeRequestSource {
|
|
|
1103
1261
|
private urlValue: string | undefined
|
|
1104
1262
|
private readonly nodeReq: IncomingMessage
|
|
1105
1263
|
private readonly protocol: RequestProtocol
|
|
1264
|
+
private readonly host: string
|
|
1106
1265
|
|
|
1107
|
-
constructor(nodeReq: IncomingMessage, method: string, protocol: RequestProtocol) {
|
|
1266
|
+
constructor(nodeReq: IncomingMessage, method: string, protocol: RequestProtocol, host: string) {
|
|
1108
1267
|
this.nodeReq = nodeReq
|
|
1109
1268
|
this.method = method
|
|
1110
1269
|
this.protocol = protocol
|
|
1270
|
+
this.host = host
|
|
1111
1271
|
}
|
|
1112
1272
|
|
|
1113
1273
|
/** The absolute URL, built only when something reads it - routing uses `urlParts` instead. */
|
|
1114
1274
|
get url(): string {
|
|
1115
|
-
this.urlValue ??= `${this.protocol}://${this.
|
|
1275
|
+
this.urlValue ??= `${this.protocol}://${this.host}${this.nodeReq.url ?? "/"}`
|
|
1116
1276
|
return this.urlValue
|
|
1117
1277
|
}
|
|
1118
1278
|
|
|
@@ -1385,21 +1545,27 @@ function nodeResponseBody(response: Response): string | Uint8Array | undefined {
|
|
|
1385
1545
|
// --- WebSocket bridge: Node has no built-in WS server, so upgrades go through the OPTIONAL `ws`
|
|
1386
1546
|
// package, lazy-imported on the first upgrade (non-WS apps never load it). ---
|
|
1387
1547
|
|
|
1388
|
-
type WsServerCtor = new (options: { noServer: true }) => WsServer
|
|
1548
|
+
type WsServerCtor = new (options: { noServer: true; maxPayload?: number }) => WsServer
|
|
1389
1549
|
|
|
1390
1550
|
/** A non-literal specifier so TS treats `import(...)` as `any` - `ws` is an optional peer with no
|
|
1391
1551
|
* `@types/ws` dependency here (the surface is structurally typed via {@link WsServer}/{@link WsSocket}). */
|
|
1392
1552
|
const WS_MODULE_SPECIFIER = "ws"
|
|
1393
1553
|
|
|
1394
1554
|
/** Lazily build a noServer `ws` `WebSocketServer`, or `undefined` if `ws` isn't installed. */
|
|
1395
|
-
async function loadWsServer(): Promise<WsServer | undefined> {
|
|
1555
|
+
async function loadWsServer(maxPayloadBytes?: number): Promise<WsServer | undefined> {
|
|
1396
1556
|
try {
|
|
1397
1557
|
const mod = (await import(WS_MODULE_SPECIFIER)) as {
|
|
1398
1558
|
WebSocketServer?: WsServerCtor
|
|
1399
1559
|
default?: { WebSocketServer?: WsServerCtor }
|
|
1400
1560
|
}
|
|
1401
1561
|
const Ctor = mod.WebSocketServer ?? mod.default?.WebSocketServer
|
|
1402
|
-
return Ctor === undefined
|
|
1562
|
+
return Ctor === undefined
|
|
1563
|
+
? undefined
|
|
1564
|
+
: new Ctor(
|
|
1565
|
+
maxPayloadBytes === undefined
|
|
1566
|
+
? { noServer: true }
|
|
1567
|
+
: { noServer: true, maxPayload: maxPayloadBytes },
|
|
1568
|
+
)
|
|
1403
1569
|
} catch {
|
|
1404
1570
|
return undefined // `ws` not installed - caller responds 501
|
|
1405
1571
|
}
|
|
@@ -1420,14 +1586,20 @@ const WS_STATUS_TEXT: Readonly<Record<number, string>> = {
|
|
|
1420
1586
|
async function handleUpgrade(
|
|
1421
1587
|
resolveWs: (request: Request) => WsUpgradeOutcome | Promise<WsUpgradeOutcome>,
|
|
1422
1588
|
getProtocol: RequestProtocolResolver,
|
|
1589
|
+
hostPolicy: HostPolicy,
|
|
1423
1590
|
nodeReq: IncomingMessage,
|
|
1424
1591
|
socket: Duplex,
|
|
1425
1592
|
head: Buffer,
|
|
1426
|
-
getWss: () => Promise<WsServer | undefined>,
|
|
1593
|
+
getWss: (maxPayloadBytes?: number) => Promise<WsServer | undefined>,
|
|
1427
1594
|
): Promise<void> {
|
|
1428
1595
|
let outcome: WsUpgradeOutcome
|
|
1429
1596
|
try {
|
|
1430
|
-
|
|
1597
|
+
const host = requestHost(nodeReq, hostPolicy)
|
|
1598
|
+
if (host === undefined) {
|
|
1599
|
+
writeUpgradeRejection(socket, 400, "bad_request")
|
|
1600
|
+
return
|
|
1601
|
+
}
|
|
1602
|
+
outcome = await resolveWs(toWebRequest(nodeReq, getProtocol(nodeReq), host))
|
|
1431
1603
|
} catch {
|
|
1432
1604
|
writeUpgradeRejection(socket, 500, "internal_error")
|
|
1433
1605
|
return
|
|
@@ -1440,7 +1612,7 @@ async function handleUpgrade(
|
|
|
1440
1612
|
await writeRejectionResponse(socket, outcome.response)
|
|
1441
1613
|
return
|
|
1442
1614
|
}
|
|
1443
|
-
const wss = await getWss()
|
|
1615
|
+
const wss = await getWss(outcome.maxPayloadBytes)
|
|
1444
1616
|
if (wss === undefined) {
|
|
1445
1617
|
writeUpgradeRejection(socket, 501, "websocket_unavailable") // `ws` not installed
|
|
1446
1618
|
return
|