@nifrajs/core 2.11.0 → 2.12.1
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/dist/assurance.d.ts +61 -3
- package/dist/assurance.d.ts.map +1 -1
- package/dist/assurance.js +152 -5
- package/dist/assurance.js.map +1 -1
- package/dist/capabilities.d.ts +9 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +5 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/diff.d.ts +2 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +3 -1
- package/dist/diff.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/evidence.d.ts +89 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +170 -0
- package/dist/evidence.js.map +1 -0
- package/dist/execution-policy.d.ts +23 -0
- package/dist/execution-policy.d.ts.map +1 -0
- package/dist/execution-policy.js +28 -0
- package/dist/execution-policy.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/internal/route-assurance.d.ts +19 -0
- package/dist/internal/route-assurance.d.ts.map +1 -1
- package/dist/internal/route-assurance.js +38 -5
- package/dist/internal/route-assurance.js.map +1 -1
- package/dist/internal/route-execution.d.ts +18 -0
- package/dist/internal/route-execution.d.ts.map +1 -1
- package/dist/internal/route-execution.js +67 -1
- package/dist/internal/route-execution.js.map +1 -1
- package/dist/manifest.d.ts +5 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +22 -4
- package/dist/manifest.js.map +1 -1
- package/dist/reflection.d.ts +5 -0
- package/dist/reflection.d.ts.map +1 -1
- package/dist/reflection.js +13 -4
- package/dist/reflection.js.map +1 -1
- package/dist/replay.d.ts +26 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +63 -0
- package/dist/replay.js.map +1 -0
- package/dist/schema/standard.d.ts +2 -0
- package/dist/schema/standard.d.ts.map +1 -1
- package/dist/schema/standard.js +13 -0
- package/dist/schema/standard.js.map +1 -1
- package/dist/server/body.d.ts +49 -6
- package/dist/server/body.d.ts.map +1 -1
- package/dist/server/body.js +226 -8
- package/dist/server/body.js.map +1 -1
- package/dist/server/context.d.ts +20 -3
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/contract.d.ts +15 -3
- package/dist/server/contract.d.ts.map +1 -1
- package/dist/server/contract.js +22 -0
- package/dist/server/contract.js.map +1 -1
- package/dist/server/cookies.d.ts +26 -5
- package/dist/server/cookies.d.ts.map +1 -1
- package/dist/server/cookies.js +76 -9
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +11 -0
- package/dist/server/edge.js.map +1 -1
- package/dist/server/header-case.d.ts +9 -0
- package/dist/server/header-case.d.ts.map +1 -0
- package/dist/server/header-case.js +54 -0
- package/dist/server/header-case.js.map +1 -0
- package/dist/server/headers.d.ts +8 -0
- package/dist/server/headers.d.ts.map +1 -0
- package/dist/server/headers.js +13 -0
- package/dist/server/headers.js.map +1 -0
- package/dist/server/node-outcome-hook.d.ts.map +1 -1
- package/dist/server/node-outcome-hook.js +7 -11
- package/dist/server/node-outcome-hook.js.map +1 -1
- package/dist/server/node-outcome.d.ts +8 -1
- package/dist/server/node-outcome.d.ts.map +1 -1
- package/dist/server/node-outcome.js +10 -3
- package/dist/server/node-outcome.js.map +1 -1
- package/dist/server/plugin.d.ts +66 -7
- package/dist/server/plugin.d.ts.map +1 -1
- package/dist/server/plugin.js +14 -10
- package/dist/server/plugin.js.map +1 -1
- package/dist/server/proto-guard.d.ts +30 -0
- package/dist/server/proto-guard.d.ts.map +1 -0
- package/dist/server/proto-guard.js +116 -0
- package/dist/server/proto-guard.js.map +1 -0
- package/dist/server/registry.d.ts +6 -2
- package/dist/server/registry.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +24 -6
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +157 -30
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/respond.d.ts +2 -2
- package/dist/server/respond.d.ts.map +1 -1
- package/dist/server/respond.js +34 -8
- package/dist/server/respond.js.map +1 -1
- package/dist/server/response-contract-lane.d.ts +1 -1
- package/dist/server/response-contract-lane.d.ts.map +1 -1
- package/dist/server/response-contract-lane.js +45 -13
- package/dist/server/response-contract-lane.js.map +1 -1
- package/dist/server/response-hooks.d.ts +10 -0
- package/dist/server/response-hooks.d.ts.map +1 -0
- package/dist/server/response-hooks.js +52 -0
- package/dist/server/response-hooks.js.map +1 -0
- package/dist/server/runtime-core.d.ts +12 -0
- package/dist/server/runtime-core.d.ts.map +1 -1
- package/dist/server/runtime-core.js +8 -0
- package/dist/server/runtime-core.js.map +1 -1
- package/dist/server/server-types.d.ts +60 -6
- package/dist/server/server-types.d.ts.map +1 -1
- package/dist/server/server.d.ts +80 -23
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +429 -213
- package/dist/server/server.js.map +1 -1
- package/dist/server/static-headers.d.ts +14 -3
- package/dist/server/static-headers.d.ts.map +1 -1
- package/dist/server/static-headers.js +28 -6
- package/dist/server/static-headers.js.map +1 -1
- package/dist/server/transport-lane.d.ts +8 -0
- package/dist/server/transport-lane.d.ts.map +1 -1
- package/dist/server/transport-lane.js +12 -8
- package/dist/server/transport-lane.js.map +1 -1
- package/dist/server/websocket.d.ts +3 -0
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +14 -0
- package/dist/server/websocket.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/tool-catalog.d.ts +21 -0
- package/dist/tool-catalog.d.ts.map +1 -0
- package/dist/tool-catalog.js +16 -0
- package/dist/tool-catalog.js.map +1 -0
- package/dist/tool-contract.d.ts +238 -0
- package/dist/tool-contract.d.ts.map +1 -0
- package/dist/tool-contract.js +569 -0
- package/dist/tool-contract.js.map +1 -0
- package/package.json +26 -1
- package/src/assurance.ts +236 -6
- package/src/capabilities.ts +14 -1
- package/src/diff.ts +5 -2
- package/src/errors.ts +1 -0
- package/src/evidence.ts +319 -0
- package/src/execution-policy.ts +57 -0
- package/src/index.ts +1 -1
- package/src/internal/route-assurance.ts +67 -4
- package/src/internal/route-execution.ts +276 -1
- package/src/manifest.ts +27 -5
- package/src/reflection.ts +24 -4
- package/src/replay.ts +96 -0
- package/src/schema/standard.ts +16 -0
- package/src/server/body.ts +275 -7
- package/src/server/context.ts +23 -3
- package/src/server/contract.ts +43 -3
- package/src/server/cookies.ts +80 -10
- package/src/server/edge.ts +10 -0
- package/src/server/header-case.ts +54 -0
- package/src/server/headers.ts +11 -0
- package/src/server/node-outcome-hook.ts +6 -11
- package/src/server/node-outcome.ts +10 -2
- package/src/server/plugin.ts +87 -8
- package/src/server/proto-guard.ts +118 -0
- package/src/server/registry.ts +6 -2
- package/src/server/request-context.ts +242 -26
- package/src/server/respond.ts +35 -4
- package/src/server/response-contract-lane.ts +6 -17
- package/src/server/response-hooks.ts +51 -0
- package/src/server/runtime-core.ts +14 -0
- package/src/server/server-types.ts +66 -6
- package/src/server/server.ts +672 -287
- package/src/server/static-headers.ts +27 -3
- package/src/server/transport-lane.ts +19 -8
- package/src/server/websocket.ts +18 -2
- package/src/server.ts +7 -0
- package/src/tool-catalog.ts +40 -0
- package/src/tool-contract.ts +896 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/server/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/server/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/server/cookies.d.ts
CHANGED
|
@@ -16,6 +16,13 @@ export interface CookieOptions {
|
|
|
16
16
|
readonly sameSite?: "strict" | "lax" | "none";
|
|
17
17
|
readonly partitioned?: boolean;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* RFC 6265bis cookie-name prefix, matched **case-insensitively** the way browsers match it -
|
|
21
|
+
* `__secure-x` triggers the same enforcement as `__Secure-x`. `undefined` for unprefixed names.
|
|
22
|
+
* Writers (set AND delete) must satisfy the prefix contract or the user agent silently discards
|
|
23
|
+
* the whole `Set-Cookie`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function cookieNamePrefix(name: string): "secure" | "host" | undefined;
|
|
19
26
|
/** Parse a request `Cookie` header into a name→value map (values URL-decoded). Unparseable pairs are
|
|
20
27
|
* skipped rather than throwing - a junk `Cookie` header shouldn't fail the request.
|
|
21
28
|
*
|
|
@@ -26,16 +33,30 @@ export declare function parseCookies(header: string | null | undefined): Record<
|
|
|
26
33
|
/**
|
|
27
34
|
* Serialize a `Set-Cookie` header value. Pure - applies **no** security defaults (the caller, e.g.
|
|
28
35
|
* `c.set.cookie`, layers `HttpOnly`/`Secure`/`SameSite` on). Throws on an invalid cookie name, a
|
|
29
|
-
* header-injecting `Path`/`Domain`, a non-integer `maxAge`,
|
|
30
|
-
*
|
|
36
|
+
* header-injecting `Path`/`Domain`, a non-integer `maxAge`, a `__Secure-`/`__Host-` name whose
|
|
37
|
+
* attributes violate its prefix contract, or an oversized result - a serialization bug should fail
|
|
38
|
+
* loudly, not silently emit a cookie the browser drops.
|
|
31
39
|
*/
|
|
32
40
|
export declare function serializeCookie(name: string, value: string, options?: CookieOptions): string;
|
|
33
|
-
/**
|
|
34
|
-
|
|
41
|
+
/**
|
|
42
|
+
* A signing secret, or a rotation list of them. With a list, **the first secret signs** and
|
|
43
|
+
* verification accepts **any** entry - so rotation is: prepend the new secret, keep the old one
|
|
44
|
+
* until every cookie signed by it has expired, then drop it. An empty list throws.
|
|
45
|
+
*/
|
|
46
|
+
export type CookieSecret = string | readonly string[];
|
|
47
|
+
/** Append an HMAC-SHA256 signature to a value → `value.signature` (base64url). For signed cookies.
|
|
48
|
+
* With a {@link CookieSecret} rotation list, signs with the first secret. */
|
|
49
|
+
export declare function signValue(value: string, secret: CookieSecret): Promise<string>;
|
|
35
50
|
/**
|
|
36
51
|
* Verify a `value.signature` produced by {@link signValue} and return the value, or `null` if the
|
|
37
52
|
* signature is missing, malformed, or doesn't match. Verification is **constant-time**
|
|
38
53
|
* (`crypto.subtle.verify`), so a wrong signature can't be discovered byte-by-byte via timing.
|
|
54
|
+
*
|
|
55
|
+
* With a {@link CookieSecret} rotation list, tries each secret in order and accepts the first
|
|
56
|
+
* match. Every listed secret must meet the 32-byte floor - a weak entry throws even when an
|
|
57
|
+
* earlier secret would have matched, so a rotation list can't quietly carry a weak key. (Which
|
|
58
|
+
* rotation generation matched is not attacker-meaningful, so the early exit between secrets leaks
|
|
59
|
+
* nothing useful; each individual comparison stays constant-time.)
|
|
39
60
|
*/
|
|
40
|
-
export declare function unsignValue(signed: string, secret:
|
|
61
|
+
export declare function unsignValue(signed: string, secret: CookieSecret): Promise<string | null>;
|
|
41
62
|
//# sourceMappingURL=cookies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC/B;
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wFAAwF;AACxF,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAC/B;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAO5E;AAuBD;;;;;4DAK4D;AAC5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA6CtF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAuDhG;AAuCD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;AASrD;6EAC6E;AAC7E,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpF;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoB9F"}
|
package/dist/server/cookies.js
CHANGED
|
@@ -9,6 +9,23 @@ import { internParseKey } from "./query.js";
|
|
|
9
9
|
// RFC 6265 cookie-name token: visible ASCII minus separators/whitespace/controls.
|
|
10
10
|
const COOKIE_NAME = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
|
|
11
11
|
const MAX_COOKIE_BYTES = 4096; // browsers cap a cookie near 4 KB - reject oversized before the wire
|
|
12
|
+
/**
|
|
13
|
+
* RFC 6265bis cookie-name prefix, matched **case-insensitively** the way browsers match it -
|
|
14
|
+
* `__secure-x` triggers the same enforcement as `__Secure-x`. `undefined` for unprefixed names.
|
|
15
|
+
* Writers (set AND delete) must satisfy the prefix contract or the user agent silently discards
|
|
16
|
+
* the whole `Set-Cookie`.
|
|
17
|
+
*/
|
|
18
|
+
export function cookieNamePrefix(name) {
|
|
19
|
+
// Both prefixes start `__`; two charCode probes keep unprefixed names (the common case) free.
|
|
20
|
+
if (name.charCodeAt(0) !== 95 /* _ */ || name.charCodeAt(1) !== 95)
|
|
21
|
+
return undefined;
|
|
22
|
+
const lowered = name.toLowerCase();
|
|
23
|
+
if (lowered.startsWith("__secure-"))
|
|
24
|
+
return "secure";
|
|
25
|
+
if (lowered.startsWith("__host-"))
|
|
26
|
+
return "host";
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
12
29
|
/** True if `v` contains a character illegal in a cookie attribute (control char or `;` separator) -
|
|
13
30
|
* the header-injection guard for dev-supplied `Path`/`Domain`. */
|
|
14
31
|
const hasIllegalChar = (v) => {
|
|
@@ -91,13 +108,31 @@ export function parseCookies(header) {
|
|
|
91
108
|
/**
|
|
92
109
|
* Serialize a `Set-Cookie` header value. Pure - applies **no** security defaults (the caller, e.g.
|
|
93
110
|
* `c.set.cookie`, layers `HttpOnly`/`Secure`/`SameSite` on). Throws on an invalid cookie name, a
|
|
94
|
-
* header-injecting `Path`/`Domain`, a non-integer `maxAge`,
|
|
95
|
-
*
|
|
111
|
+
* header-injecting `Path`/`Domain`, a non-integer `maxAge`, a `__Secure-`/`__Host-` name whose
|
|
112
|
+
* attributes violate its prefix contract, or an oversized result - a serialization bug should fail
|
|
113
|
+
* loudly, not silently emit a cookie the browser drops.
|
|
96
114
|
*/
|
|
97
115
|
export function serializeCookie(name, value, options = {}) {
|
|
98
116
|
if (!COOKIE_NAME.test(name)) {
|
|
99
117
|
throw new Error(`[nifra] invalid cookie name ${JSON.stringify(name)}: must be an RFC 6265 token`);
|
|
100
118
|
}
|
|
119
|
+
// Enforce the prefix contract: a violating cookie would be silently discarded by the user
|
|
120
|
+
// agent (or worse, only by SOME user agents, leaving the rest accepting a cookie whose prefix
|
|
121
|
+
// promises protections it doesn't have).
|
|
122
|
+
const prefix = cookieNamePrefix(name);
|
|
123
|
+
if (prefix !== undefined) {
|
|
124
|
+
if (options.secure !== true) {
|
|
125
|
+
throw new Error(`[nifra] cookie ${JSON.stringify(name)}: ${prefix === "host" ? "__Host-" : "__Secure-"} requires Secure`);
|
|
126
|
+
}
|
|
127
|
+
if (prefix === "host") {
|
|
128
|
+
if (options.domain !== undefined) {
|
|
129
|
+
throw new Error(`[nifra] cookie ${JSON.stringify(name)}: __Host- forbids Domain`);
|
|
130
|
+
}
|
|
131
|
+
if (options.path !== "/") {
|
|
132
|
+
throw new Error(`[nifra] cookie ${JSON.stringify(name)}: __Host- requires Path=/`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
101
136
|
let str = `${name}=${encodeURIComponent(value)}`;
|
|
102
137
|
if (options.maxAge !== undefined) {
|
|
103
138
|
if (!Number.isInteger(options.maxAge)) {
|
|
@@ -139,9 +174,12 @@ const importHmacKey = (secret) => {
|
|
|
139
174
|
return crypto.subtle.importKey("raw", TEXT.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign", "verify"]);
|
|
140
175
|
};
|
|
141
176
|
const toBase64Url = (buf) => {
|
|
177
|
+
// Indexed, not `for...of`: iterating a typed array runs the iterator protocol per byte, and at a
|
|
178
|
+
// 32-byte HMAC digest that is 238ns on Bun and 174ns on Node - a third of the whole encode.
|
|
142
179
|
let bin = "";
|
|
143
|
-
|
|
144
|
-
|
|
180
|
+
const bytes = new Uint8Array(buf);
|
|
181
|
+
for (let i = 0; i < bytes.length; i++)
|
|
182
|
+
bin += String.fromCharCode(bytes[i]);
|
|
145
183
|
return btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
146
184
|
};
|
|
147
185
|
// Returns `Uint8Array<ArrayBuffer>` (not the generic `Uint8Array<ArrayBufferLike>`) so it satisfies
|
|
@@ -158,9 +196,18 @@ const fromBase64Url = (s) => {
|
|
|
158
196
|
return null; // not valid base64 - treat as a bad signature
|
|
159
197
|
}
|
|
160
198
|
};
|
|
161
|
-
|
|
199
|
+
const firstSecret = (secret) => {
|
|
200
|
+
if (typeof secret === "string")
|
|
201
|
+
return secret;
|
|
202
|
+
const first = secret[0];
|
|
203
|
+
if (first === undefined)
|
|
204
|
+
throw new Error("[nifra] signed-cookie: secret list cannot be empty");
|
|
205
|
+
return first;
|
|
206
|
+
};
|
|
207
|
+
/** Append an HMAC-SHA256 signature to a value → `value.signature` (base64url). For signed cookies.
|
|
208
|
+
* With a {@link CookieSecret} rotation list, signs with the first secret. */
|
|
162
209
|
export async function signValue(value, secret) {
|
|
163
|
-
const key = await importHmacKey(secret);
|
|
210
|
+
const key = await importHmacKey(firstSecret(secret));
|
|
164
211
|
const sig = await crypto.subtle.sign("HMAC", key, TEXT.encode(value));
|
|
165
212
|
return `${value}.${toBase64Url(sig)}`;
|
|
166
213
|
}
|
|
@@ -168,6 +215,12 @@ export async function signValue(value, secret) {
|
|
|
168
215
|
* Verify a `value.signature` produced by {@link signValue} and return the value, or `null` if the
|
|
169
216
|
* signature is missing, malformed, or doesn't match. Verification is **constant-time**
|
|
170
217
|
* (`crypto.subtle.verify`), so a wrong signature can't be discovered byte-by-byte via timing.
|
|
218
|
+
*
|
|
219
|
+
* With a {@link CookieSecret} rotation list, tries each secret in order and accepts the first
|
|
220
|
+
* match. Every listed secret must meet the 32-byte floor - a weak entry throws even when an
|
|
221
|
+
* earlier secret would have matched, so a rotation list can't quietly carry a weak key. (Which
|
|
222
|
+
* rotation generation matched is not attacker-meaningful, so the early exit between secrets leaks
|
|
223
|
+
* nothing useful; each individual comparison stays constant-time.)
|
|
171
224
|
*/
|
|
172
225
|
export async function unsignValue(signed, secret) {
|
|
173
226
|
const dot = signed.lastIndexOf(".");
|
|
@@ -177,8 +230,22 @@ export async function unsignValue(signed, secret) {
|
|
|
177
230
|
const sig = fromBase64Url(signed.slice(dot + 1));
|
|
178
231
|
if (sig === null)
|
|
179
232
|
return null;
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
233
|
+
const data = TEXT.encode(value);
|
|
234
|
+
if (typeof secret === "string") {
|
|
235
|
+
// Hot path (single secret) - identical to the pre-rotation behavior, no array allocation.
|
|
236
|
+
const key = await importHmacKey(secret);
|
|
237
|
+
const ok = await crypto.subtle.verify("HMAC", key, sig, data);
|
|
238
|
+
return ok ? value : null;
|
|
239
|
+
}
|
|
240
|
+
if (secret.length === 0)
|
|
241
|
+
throw new Error("[nifra] signed-cookie: secret list cannot be empty");
|
|
242
|
+
for (const s of secret)
|
|
243
|
+
requireSecretBytes(s, "signed-cookie");
|
|
244
|
+
for (const s of secret) {
|
|
245
|
+
const key = await importHmacKey(s);
|
|
246
|
+
if (await crypto.subtle.verify("HMAC", key, sig, data))
|
|
247
|
+
return value;
|
|
248
|
+
}
|
|
249
|
+
return null;
|
|
183
250
|
}
|
|
184
251
|
//# sourceMappingURL=cookies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/server/cookies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAqB,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAEhF;6FAC6F;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C;AAED,uGAAuG;AACvG,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;6FAC6F;AAC7F,MAAM,MAAM,gBAAgB,CAAC,GAAG,GAAG,OAAO,IAAI,CAC5C,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,KACvE,YAAY,CAAC,IAAI,CAAC,CAAA;AAQvB;6EAC6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;CACjE;AAKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAG,OAAO,EAC1C,GAAG,EAAE;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACzE,uBAAuB,CAAC,CACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GACvB,YAAY,CAAC,uBAAuB,CAAC,CAAA;CACzC,EACD,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACjC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,0BAA0B,CAAA;CACxD,GACA;IACD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAChF,SAAS,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACjG,
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAqB,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAEhF;6FAC6F;AAC7F,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC3C;AAED,uGAAuG;AACvG,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,OAAO,IAAI,IAAI,CAAA;CAChB;AAED;6FAC6F;AAC7F,MAAM,MAAM,gBAAgB,CAAC,GAAG,GAAG,OAAO,IAAI,CAC5C,UAAU,EAAE,mBAAmB,EAC/B,OAAO,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAAE,KACvE,YAAY,CAAC,IAAI,CAAC,CAAA;AAQvB;6EAC6E;AAC7E,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACjC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG;QAAE,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;CACjE;AAKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAG,OAAO,EAC1C,GAAG,EAAE;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACzE,uBAAuB,CAAC,CACtB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,GACvB,YAAY,CAAC,uBAAuB,CAAC,CAAA;CACzC,EACD,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACjC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,0BAA0B,CAAA;CACxD,GACA;IACD,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAChF,SAAS,CAAC,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;CACjG,CA4DA"}
|
package/dist/server/edge.js
CHANGED
|
@@ -24,6 +24,17 @@ export function toFetchHandler(app, options) {
|
|
|
24
24
|
const resolveWs = app.resolveWebSocketUpgrade?.bind(app);
|
|
25
25
|
return {
|
|
26
26
|
fetch: (request, env, ctx) => {
|
|
27
|
+
// The platform's own HTTP parser delimited this body, so the declared Content-Length IS the
|
|
28
|
+
// transport frame rather than a caller's hint - the same guarantee Bun's native routes and
|
|
29
|
+
// `Deno.serve` carry, and the reason `serve(request, env, ctx)` is a stronger statement about
|
|
30
|
+
// provenance than a bare `app.fetch(req)` (which anyone in-process can call with a hand-built
|
|
31
|
+
// Request). The mark keeps core's JSON lane on the runtime's fused parse instead of copying
|
|
32
|
+
// the body out to recount its bytes. Written as the registered symbol, not an import of
|
|
33
|
+
// `markTrustedBodyFraming`, so this file keeps its no-runtime-edge property: a GET-only edge
|
|
34
|
+
// app must not pull `body.ts` (and `http.ts` behind it) into its bundle for one flag.
|
|
35
|
+
;
|
|
36
|
+
request[Symbol.for("nifra.body.trustedFraming")] =
|
|
37
|
+
true;
|
|
27
38
|
const platform = { env, waitUntil: (promise) => ctx.waitUntil(promise) };
|
|
28
39
|
// WebSocket broadcast on Workers: route upgrades to the hub Durable Object (it holds the
|
|
29
40
|
// connections + runs the app's pub/sub, so `app.publish` reaches every client). The hub itself
|
package/dist/server/edge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../src/server/edge.ts"],"names":[],"mappings":"AAwDA,+GAA+G;AAC/G,MAAM,eAAe,GAAG,cAAc,CAAA;AAEtC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,cAAc,CAC5B,GAMC,EACD,OAUC;IAKD,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAA;IACpC,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAA;IAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IACxD,OAAO;QACL,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3B,4FAA4F;YAC5F,2FAA2F;YAC3F,8FAA8F;YAC9F,8FAA8F;YAC9F,4FAA4F;YAC5F,wFAAwF;YACxF,6FAA6F;YAC7F,sFAAsF;YACtF,CAAC;YAAC,OAA8C,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBACvF,IAAI,CAAA;YACN,MAAM,QAAQ,GAAkB,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAA;YACvF,yFAAyF;YACzF,+FAA+F;YAC/F,6FAA6F;YAC7F,IACE,YAAY,KAAK,SAAS;gBAC1B,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW,EAC7D,CAAC;gBACD,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;gBAC5B,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC9D,CAAC;YACD,6FAA6F;YAC7F,gGAAgG;YAChG,6FAA6F;YAC7F,MAAM,IAAI,GAAI,UAAoD,CAAC,aAAa,CAAA;YAChF,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClD,MAAM,MAAM,GAAG,CAAC,OAAgC,EAA0B,EAAE;oBAC1E,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;wBAAE,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;oBAChE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;wBAAE,OAAO,OAAO,CAAC,QAAQ,CAAA;oBACtD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;oBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;oBACtB,MAAM,CAAC,MAAM,EAAE,CAAA;oBACf,0FAA0F;oBAC1F,iGAAiG;oBACjG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;wBACpD,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,OAAO,CAAC,MAAM;qBACvB,CAAC,CAAA;oBACF,4FAA4F;oBAC5F,4FAA4F;oBAC5F,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAA6B,CAAC,CAAA;gBAC3F,CAAC,CAAA;gBACD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;gBACxC,OAAO,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,CAAC;YACD,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACrC,CAAC;QACD,GAAG,CAAC,SAAS,KAAK,SAAS;YACzB,CAAC,CAAC;gBACE,SAAS,EAAE,CAAC,UAA+B,EAAE,GAAQ,EAAE,GAAqB,EAAE,EAAE,CAC9E,SAAS,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;aACjF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** True when the name contains an ASCII `A`-`Z`, i.e. is not already the wire spelling. */
|
|
2
|
+
export declare function hasUpperAscii(name: string): boolean;
|
|
3
|
+
/** True when every name in the record is already the lowercase wire spelling. */
|
|
4
|
+
export declare function headerKeysAllLowercase(record: Readonly<Record<string, unknown>>): boolean;
|
|
5
|
+
/** Record the {@link LOWERCASE_HEADER_KEYS} proof on a record the caller has just verified. */
|
|
6
|
+
export declare function markLowercaseHeaderKeys(record: Record<string, string | readonly string[]>): void;
|
|
7
|
+
/** True when this record carries the proof - never a claim the reader has to re-check. */
|
|
8
|
+
export declare function hasLowercaseHeaderKeysMark(record: Readonly<Record<string, unknown>>): boolean;
|
|
9
|
+
//# sourceMappingURL=header-case.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-case.d.ts","sourceRoot":"","sources":["../../src/server/header-case.ts"],"names":[],"mappings":"AA2BA,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMnD;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAMzF;AAED,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,GAAG,IAAI,CAEhG;AAED,0FAA0F;AAC1F,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAE7F"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The all-lowercase header-name proof: one answer, computed once per request, read by everyone who
|
|
3
|
+
* would otherwise re-derive it.
|
|
4
|
+
*
|
|
5
|
+
* "Are these header names already the lowercase wire spelling?" is asked on every Node-direct
|
|
6
|
+
* response by the implicit-Content-Type lookup in the native response walk, by the portable header
|
|
7
|
+
* view's alias index, and by the `@nifrajs/node` writer's normalization gate. Each used to answer it
|
|
8
|
+
* by walking the same keys. Instead, whichever stage has ALREADY looked at the names - the static
|
|
9
|
+
* merge, which lowercases every own key anyway, or the native walk - records the answer on the
|
|
10
|
+
* record, and the readers take it.
|
|
11
|
+
*
|
|
12
|
+
* The mark is a plain enumerable symbol assignment on purpose. `Object.keys`, `Object.entries` and
|
|
13
|
+
* `for...in` never see symbol keys, so it cannot reach the wire, while a non-enumerable
|
|
14
|
+
* `defineProperty` would demote the record to V8's dictionary mode - the exact cost the record's `{}`
|
|
15
|
+
* literal shape exists to avoid. Spread and `Object.assign` DO copy it, which is what the clone paths
|
|
16
|
+
* want: a clone of an all-lowercase record is still all-lowercase.
|
|
17
|
+
*
|
|
18
|
+
* It is only ever SET where its truth is provable, and only where every writer that can still touch
|
|
19
|
+
* the record afterwards is case-normalizing. An app registering a raw `onNodeResponse` twin - handed
|
|
20
|
+
* the record itself rather than the case-normalizing view - is left unmarked, and every reader
|
|
21
|
+
* re-derives the answer exactly as it did before the mark existed.
|
|
22
|
+
*
|
|
23
|
+
* Declared with `Symbol.for` so the `@nifrajs/node` adapter can read it by key rather than importing
|
|
24
|
+
* across the package boundary - the same cross-package convention as the body and result marks.
|
|
25
|
+
*/
|
|
26
|
+
const LOWERCASE_HEADER_KEYS = Symbol.for("nifra.headers.lowercase");
|
|
27
|
+
/** True when the name contains an ASCII `A`-`Z`, i.e. is not already the wire spelling. */
|
|
28
|
+
export function hasUpperAscii(name) {
|
|
29
|
+
for (let i = 0; i < name.length; i++) {
|
|
30
|
+
const code = name.charCodeAt(i);
|
|
31
|
+
if (code >= 65 && code <= 90)
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
/** True when every name in the record is already the lowercase wire spelling. */
|
|
37
|
+
export function headerKeysAllLowercase(record) {
|
|
38
|
+
const keys = Object.keys(record);
|
|
39
|
+
for (let i = 0; i < keys.length; i++) {
|
|
40
|
+
if (hasUpperAscii(keys[i]))
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
/** Record the {@link LOWERCASE_HEADER_KEYS} proof on a record the caller has just verified. */
|
|
46
|
+
export function markLowercaseHeaderKeys(record) {
|
|
47
|
+
;
|
|
48
|
+
record[LOWERCASE_HEADER_KEYS] = true;
|
|
49
|
+
}
|
|
50
|
+
/** True when this record carries the proof - never a claim the reader has to re-check. */
|
|
51
|
+
export function hasLowercaseHeaderKeysMark(record) {
|
|
52
|
+
return record[LOWERCASE_HEADER_KEYS] === true;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=header-case.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-case.js","sourceRoot":"","sources":["../../src/server/header-case.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;AAEnE,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;YAAE,OAAO,IAAI,CAAA;IAC3C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,MAAyC;IAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC;YAAE,OAAO,KAAK,CAAA;IACpD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,uBAAuB,CAAC,MAAkD;IACxF,CAAC;IAAC,MAAkC,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAA;AACpE,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,0BAA0B,CAAC,MAAyC;IAClF,OAAQ,MAAkC,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAA;AAC5E,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Materialize request headers for a Standard Schema boundary.
|
|
2
|
+
*
|
|
3
|
+
* HTTP field names are case-insensitive and `Headers` already combines repeated fields using the
|
|
4
|
+
* platform's defined comma-join behavior. A null-prototype record prevents a hostile field name
|
|
5
|
+
* such as `__proto__` or `constructor` from interacting with Object.prototype before validation.
|
|
6
|
+
*/
|
|
7
|
+
export declare function headerObjectOf(headers: Headers): Record<string, string>;
|
|
8
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/server/headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIvE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Materialize request headers for a Standard Schema boundary.
|
|
2
|
+
*
|
|
3
|
+
* HTTP field names are case-insensitive and `Headers` already combines repeated fields using the
|
|
4
|
+
* platform's defined comma-join behavior. A null-prototype record prevents a hostile field name
|
|
5
|
+
* such as `__proto__` or `constructor` from interacting with Object.prototype before validation.
|
|
6
|
+
*/
|
|
7
|
+
export function headerObjectOf(headers) {
|
|
8
|
+
const out = Object.create(null);
|
|
9
|
+
for (const [name, value] of headers)
|
|
10
|
+
out[name.toLowerCase()] = value;
|
|
11
|
+
return out;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/server/headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,GAAG,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA2B,CAAA;IACjF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO;QAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAA;IACpE,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-outcome-hook.d.ts","sourceRoot":"","sources":["../../src/server/node-outcome-hook.ts"],"names":[],"mappings":"AAAA,qGAAqG;AAErG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"node-outcome-hook.d.ts","sourceRoot":"","sources":["../../src/server/node-outcome-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Lazy Node-direct renderer seam. The base server retains the typed method but not its renderer. */
|
|
2
|
+
import { hasLowercaseHeaderKeysMark, hasUpperAscii } from "./header-case.js";
|
|
2
3
|
/**
|
|
3
4
|
* A {@link ResponseHeadersView} over a Node outcome's plain header record - the direct-writer
|
|
4
5
|
* counterpart of handing a Web hook the response's `Headers`. Mutations write lowercase names (the
|
|
@@ -27,6 +28,10 @@ class RecordHeadersView {
|
|
|
27
28
|
}
|
|
28
29
|
#prepare(record) {
|
|
29
30
|
this.#prepared = true;
|
|
31
|
+
// The native response walk proved this record's names before any twin ran (and every write this
|
|
32
|
+
// view makes stores the wire spelling), so the index is known-empty without touching a key.
|
|
33
|
+
if (hasLowercaseHeaderKeysMark(record))
|
|
34
|
+
return;
|
|
30
35
|
// `Object.keys`, not `for...in`: the record is a `{}`-prototype literal on the render paths, and
|
|
31
36
|
// a for-in would let an enumerable `Object.prototype` property become a header on the wire.
|
|
32
37
|
const keys = Object.keys(record);
|
|
@@ -37,25 +42,16 @@ class RecordHeadersView {
|
|
|
37
42
|
// framework, `c.set`, and middleware twins all write the wire spelling. An inline ASCII scan
|
|
38
43
|
// answers the common case without leaving the loop, and only a genuinely mixed-case key (a
|
|
39
44
|
// hand-written `X-Foo`) pays for the lowercase copy and the alias entry.
|
|
40
|
-
if (!
|
|
45
|
+
if (!hasUpperAscii(key))
|
|
41
46
|
continue;
|
|
42
47
|
if (this.#alias === undefined)
|
|
43
48
|
this.#alias = new Map();
|
|
44
49
|
this.#alias.set(key.toLowerCase(), key);
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
|
-
/** True when the name contains an ASCII `A`-`Z`, i.e. is not already the wire spelling. */
|
|
48
|
-
static #hasUpperAscii(name) {
|
|
49
|
-
for (let i = 0; i < name.length; i++) {
|
|
50
|
-
const code = name.charCodeAt(i);
|
|
51
|
-
if (code >= 65 && code <= 90)
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
52
|
/** The wire spelling of a header name, without paying `toLowerCase` when it already is one. */
|
|
57
53
|
static #lower(name) {
|
|
58
|
-
return
|
|
54
|
+
return hasUpperAscii(name) ? name.toLowerCase() : name;
|
|
59
55
|
}
|
|
60
56
|
/** The stored key for an already-lowercased name. Resolution is the prepared index ONLY - a
|
|
61
57
|
* lowercase own-property check, then the alias map - never a per-operation key scan: a rescan on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-outcome-hook.js","sourceRoot":"","sources":["../../src/server/node-outcome-hook.ts"],"names":[],"mappings":"AAAA,qGAAqG;
|
|
1
|
+
{"version":3,"file":"node-outcome-hook.js","sourceRoot":"","sources":["../../src/server/node-outcome-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,14 @@ export declare function nodeOutcomeToResponse(outcome: NodeServeOutcome): Respon
|
|
|
51
51
|
* The record handed over is always a fresh copy: the Node writers mutate the outcome's record in
|
|
52
52
|
* place (content-type, content-length, cookies), and the static record is shared by every request.
|
|
53
53
|
* Its names are already lowercase, so the writer's all-lowercase fast path still holds.
|
|
54
|
+
*
|
|
55
|
+
* `markLowercase` publishes that fast path as a proof on the record instead of leaving each reader to
|
|
56
|
+
* re-derive it. This stage can answer it for free - the static names were lowercased at registration
|
|
57
|
+
* and the merge lowercases every own name anyway - and it runs BEFORE the response hooks, so it
|
|
58
|
+
* covers the hookless lane too, which never reaches the native walk that would otherwise mark. The
|
|
59
|
+
* caller passes `false` for an app carrying a raw `onNodeResponse` twin: that twin writes the record
|
|
60
|
+
* directly, past the case-normalizing view, after this point.
|
|
54
61
|
*/
|
|
55
|
-
export declare function withStaticNodeHeaders(outcome: NodeServeOutcome, statics: StaticResponseHeaders): NodeServeOutcome;
|
|
62
|
+
export declare function withStaticNodeHeaders(outcome: NodeServeOutcome, statics: StaticResponseHeaders, markLowercase?: boolean): NodeServeOutcome;
|
|
56
63
|
export declare function nodeOutcomeFromResponse(response: Response): NodeServeOutcome;
|
|
57
64
|
//# sourceMappingURL=node-outcome.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-outcome.d.ts","sourceRoot":"","sources":["../../src/server/node-outcome.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,qBAAqB,CAAA;AAM5B;;;;;;GAMG;AACH,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;AAEL;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CA2BlF;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAmCzE;AAED
|
|
1
|
+
{"version":3,"file":"node-outcome.d.ts","sourceRoot":"","sources":["../../src/server/node-outcome.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,aAAa,EAAoB,MAAM,mBAAmB,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAEL,KAAK,qBAAqB,EAE3B,MAAM,qBAAqB,CAAA;AAM5B;;;;;;GAMG;AACH,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;AAEL;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CA2BlF;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,QAAQ,CAmCzE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,qBAAqB,EAC9B,aAAa,UAAQ,GACpB,gBAAgB,CAUlB;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,gBAAgB,CAM5E"}
|
|
@@ -100,15 +100,22 @@ export function nodeOutcomeToResponse(outcome) {
|
|
|
100
100
|
* The record handed over is always a fresh copy: the Node writers mutate the outcome's record in
|
|
101
101
|
* place (content-type, content-length, cookies), and the static record is shared by every request.
|
|
102
102
|
* Its names are already lowercase, so the writer's all-lowercase fast path still holds.
|
|
103
|
+
*
|
|
104
|
+
* `markLowercase` publishes that fast path as a proof on the record instead of leaving each reader to
|
|
105
|
+
* re-derive it. This stage can answer it for free - the static names were lowercased at registration
|
|
106
|
+
* and the merge lowercases every own name anyway - and it runs BEFORE the response hooks, so it
|
|
107
|
+
* covers the hookless lane too, which never reaches the native walk that would otherwise mark. The
|
|
108
|
+
* caller passes `false` for an app carrying a raw `onNodeResponse` twin: that twin writes the record
|
|
109
|
+
* directly, past the case-normalizing view, after this point.
|
|
103
110
|
*/
|
|
104
|
-
export function withStaticNodeHeaders(outcome, statics) {
|
|
111
|
+
export function withStaticNodeHeaders(outcome, statics, markLowercase = false) {
|
|
105
112
|
if (outcome.kind === "response") {
|
|
106
113
|
return { kind: "response", response: applyStaticResponseHeaders(outcome.response, statics) };
|
|
107
114
|
}
|
|
108
115
|
const own = outcome.headers;
|
|
109
116
|
const headers = own === undefined
|
|
110
|
-
? staticHeaderRecordCopy(statics)
|
|
111
|
-
: mergeStaticHeaderRecord(statics.record, own);
|
|
117
|
+
? staticHeaderRecordCopy(statics, markLowercase)
|
|
118
|
+
: mergeStaticHeaderRecord(statics.record, own, markLowercase);
|
|
112
119
|
return { ...outcome, headers };
|
|
113
120
|
}
|
|
114
121
|
export function nodeOutcomeFromResponse(response) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-outcome.js","sourceRoot":"","sources":["../../src/server/node-outcome.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAsB,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAExE,OAAO,EACL,uBAAuB,EAEvB,sBAAsB,GACvB,MAAM,qBAAqB,CAAA;AAE5B,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAA;AAC3D,CAAC;AA4BD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB,EAAE,GAAW;IAC9D,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;QAClC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAC/D,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;aACpE,CAAA;QACH,CAAC;QACD,OAAO,uBAAuB,CAC5B,uBAAuB,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAC7E,CAAA;IACH,CAAC;IACD,IAAI,MAAM,YAAY,QAAQ,EAAE,CAAC;QAC/B,OAAO,uBAAuB,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IACjG,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC/D,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC7F,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,IAAI;KACL,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAA;IACxD,+FAA+F;IAC/F,+FAA+F;IAC/F,yCAAyC;IACzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACtD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAe,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACtE,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;IACnE,8FAA8F;IAC9F,4FAA4F;IAC5F,uBAAuB;IACvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAiD,EAAE;QAC/E,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO;KACR,CAAC,CAAA;IACF,IAAI,IAAI,KAAK,IAAI;QAAE,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACrD,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxC,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"node-outcome.js","sourceRoot":"","sources":["../../src/server/node-outcome.ts"],"names":[],"mappings":"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"}
|