@nifrajs/core 3.3.0 → 4.0.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 +26 -0
- package/dist/assurance.d.ts +7 -0
- package/dist/assurance.d.ts.map +1 -1
- package/dist/assurance.js +39 -3
- package/dist/assurance.js.map +1 -1
- package/dist/capabilities.d.ts +20 -2
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +47 -15
- package/dist/capabilities.js.map +1 -1
- package/dist/diff.d.ts +6 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +36 -2
- package/dist/diff.js.map +1 -1
- package/dist/durable-adapters.d.ts.map +1 -1
- package/dist/durable-adapters.js +16 -3
- package/dist/durable-adapters.js.map +1 -1
- package/dist/durable-effect.d.ts.map +1 -1
- package/dist/durable-effect.js +6 -3
- package/dist/durable-effect.js.map +1 -1
- package/dist/edge-kit.d.ts +2 -0
- package/dist/edge-kit.d.ts.map +1 -1
- package/dist/edge-kit.js +2 -0
- package/dist/edge-kit.js.map +1 -1
- package/dist/effect-lifecycle.d.ts.map +1 -1
- package/dist/effect-lifecycle.js +2 -1
- package/dist/effect-lifecycle.js.map +1 -1
- package/dist/effect-scope.d.ts.map +1 -1
- package/dist/effect-scope.js +1 -1
- package/dist/effect-scope.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 +36 -1
- package/dist/evidence.d.ts.map +1 -1
- package/dist/evidence.js +219 -13
- package/dist/evidence.js.map +1 -1
- package/dist/idempotency.d.ts +31 -0
- package/dist/idempotency.d.ts.map +1 -1
- package/dist/idempotency.js +48 -9
- package/dist/idempotency.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/code-unit-order.d.ts +7 -0
- package/dist/internal/code-unit-order.d.ts.map +1 -0
- package/dist/internal/code-unit-order.js +9 -0
- package/dist/internal/code-unit-order.js.map +1 -0
- package/dist/internal/durable-saga-protocol.d.ts.map +1 -1
- package/dist/internal/durable-saga-protocol.js +2 -0
- package/dist/internal/durable-saga-protocol.js.map +1 -1
- package/dist/internal/route-catalog.d.ts +6 -6
- package/dist/internal/route-catalog.d.ts.map +1 -1
- package/dist/internal/route-catalog.js +20 -18
- package/dist/internal/route-catalog.js.map +1 -1
- package/dist/internal/route-compiler.d.ts +7 -6
- package/dist/internal/route-compiler.d.ts.map +1 -1
- package/dist/internal/route-compiler.js +36 -4
- package/dist/internal/route-compiler.js.map +1 -1
- package/dist/internal/route-execution.d.ts +7 -3
- package/dist/internal/route-execution.d.ts.map +1 -1
- package/dist/internal/route-execution.js.map +1 -1
- package/dist/internal/route-lanes.d.ts +1 -0
- package/dist/internal/route-lanes.d.ts.map +1 -1
- package/dist/internal/route-lanes.js +34 -29
- package/dist/internal/route-lanes.js.map +1 -1
- package/dist/internal/route-program.d.ts +8 -2
- package/dist/internal/route-program.d.ts.map +1 -1
- package/dist/internal/route-program.js +222 -20
- package/dist/internal/route-program.js.map +1 -1
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +8 -5
- package/dist/ledger.js.map +1 -1
- package/dist/manifest.d.ts +1 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +52 -46
- package/dist/manifest.js.map +1 -1
- package/dist/mount.d.ts +36 -0
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +32 -0
- package/dist/mount.js.map +1 -1
- package/dist/reflection.d.ts +26 -0
- package/dist/reflection.d.ts.map +1 -1
- package/dist/reflection.js +65 -1
- package/dist/reflection.js.map +1 -1
- package/dist/response-observer.d.ts +1 -1
- package/dist/response-observer.d.ts.map +1 -1
- package/dist/response-observer.js.map +1 -1
- package/dist/router/overlap.d.ts +23 -0
- package/dist/router/overlap.d.ts.map +1 -0
- package/dist/router/overlap.js +224 -0
- package/dist/router/overlap.js.map +1 -0
- package/dist/router/pattern.d.ts +117 -2
- package/dist/router/pattern.d.ts.map +1 -1
- package/dist/router/pattern.js +283 -23
- package/dist/router/pattern.js.map +1 -1
- package/dist/router/router.d.ts +18 -4
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +51 -44
- package/dist/router/router.js.map +1 -1
- package/dist/server/auth.d.ts +53 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +9 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/bare-error-lane.d.ts +12 -7
- package/dist/server/bare-error-lane.d.ts.map +1 -1
- package/dist/server/bare-error-lane.js +13 -11
- package/dist/server/bare-error-lane.js.map +1 -1
- package/dist/server/body-lane.d.ts +20 -2
- package/dist/server/body-lane.d.ts.map +1 -1
- package/dist/server/body-lane.js +26 -7
- package/dist/server/body-lane.js.map +1 -1
- package/dist/server/body-parser.d.ts +68 -0
- package/dist/server/body-parser.d.ts.map +1 -0
- package/dist/server/body-parser.js +172 -0
- package/dist/server/body-parser.js.map +1 -0
- package/dist/server/body.d.ts.map +1 -1
- package/dist/server/body.js +62 -7
- package/dist/server/body.js.map +1 -1
- package/dist/server/client-ip.d.ts +8 -0
- package/dist/server/client-ip.d.ts.map +1 -1
- package/dist/server/client-ip.js +8 -0
- package/dist/server/client-ip.js.map +1 -1
- package/dist/server/context.d.ts +71 -6
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/contract.d.ts +15 -5
- package/dist/server/contract.d.ts.map +1 -1
- package/dist/server/contract.js +25 -4
- package/dist/server/contract.js.map +1 -1
- package/dist/server/cookies.d.ts +4 -1
- package/dist/server/cookies.d.ts.map +1 -1
- package/dist/server/cookies.js +40 -2
- package/dist/server/cookies.js.map +1 -1
- package/dist/server/core-copies.d.ts +2 -0
- package/dist/server/core-copies.d.ts.map +1 -0
- package/dist/server/core-copies.js +20 -0
- package/dist/server/core-copies.js.map +1 -0
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +2 -0
- package/dist/server/edge.js.map +1 -1
- package/dist/server/http.d.ts +11 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +36 -0
- package/dist/server/http.js.map +1 -1
- package/dist/server/idempotency-lane.d.ts +6 -0
- package/dist/server/idempotency-lane.d.ts.map +1 -1
- package/dist/server/idempotency-lane.js +130 -73
- package/dist/server/idempotency-lane.js.map +1 -1
- package/dist/server/install.d.ts +4 -0
- package/dist/server/install.d.ts.map +1 -1
- package/dist/server/install.js +4 -0
- package/dist/server/install.js.map +1 -1
- package/dist/server/methods.d.ts +45 -0
- package/dist/server/methods.d.ts.map +1 -0
- package/dist/server/methods.js +37 -0
- package/dist/server/methods.js.map +1 -0
- package/dist/server/multipart.d.ts +63 -0
- package/dist/server/multipart.d.ts.map +1 -0
- package/dist/server/multipart.js +374 -0
- package/dist/server/multipart.js.map +1 -0
- package/dist/server/node-outcome-hook.d.ts +20 -0
- package/dist/server/node-outcome-hook.d.ts.map +1 -1
- package/dist/server/node-outcome-hook.js +15 -6
- package/dist/server/node-outcome-hook.js.map +1 -1
- package/dist/server/not-found-answer.d.ts +40 -0
- package/dist/server/not-found-answer.d.ts.map +1 -0
- package/dist/server/not-found-answer.js +56 -0
- package/dist/server/not-found-answer.js.map +1 -0
- package/dist/server/not-found.d.ts +23 -0
- package/dist/server/not-found.d.ts.map +1 -0
- package/dist/server/not-found.js +81 -0
- package/dist/server/not-found.js.map +1 -0
- package/dist/server/plugin.d.ts +26 -1
- package/dist/server/plugin.d.ts.map +1 -1
- package/dist/server/plugin.js.map +1 -1
- package/dist/server/proto-guard.d.ts +18 -5
- package/dist/server/proto-guard.d.ts.map +1 -1
- package/dist/server/proto-guard.js +114 -9
- package/dist/server/proto-guard.js.map +1 -1
- package/dist/server/query.d.ts +7 -0
- package/dist/server/query.d.ts.map +1 -1
- package/dist/server/query.js +47 -0
- package/dist/server/query.js.map +1 -1
- package/dist/server/registry.d.ts +13 -2
- package/dist/server/registry.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +11 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +33 -19
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/request-lineage.d.ts +8 -0
- package/dist/server/request-lineage.d.ts.map +1 -0
- package/dist/server/request-lineage.js +14 -0
- package/dist/server/request-lineage.js.map +1 -0
- package/dist/server/request-target.d.ts +31 -0
- package/dist/server/request-target.d.ts.map +1 -0
- package/dist/server/request-target.js +44 -0
- package/dist/server/request-target.js.map +1 -0
- package/dist/server/respond.d.ts +1 -1
- package/dist/server/respond.d.ts.map +1 -1
- package/dist/server/respond.js +16 -4
- package/dist/server/respond.js.map +1 -1
- package/dist/server/response-contract-lane.d.ts +19 -1
- package/dist/server/response-contract-lane.d.ts.map +1 -1
- package/dist/server/response-contract-lane.js +59 -14
- package/dist/server/response-contract-lane.js.map +1 -1
- package/dist/server/response-observer-runtime.d.ts +9 -5
- package/dist/server/response-observer-runtime.d.ts.map +1 -1
- package/dist/server/response-observer-runtime.js +10 -6
- package/dist/server/response-observer-runtime.js.map +1 -1
- package/dist/server/runtime-core.d.ts +2 -0
- package/dist/server/runtime-core.d.ts.map +1 -1
- package/dist/server/runtime-core.js.map +1 -1
- package/dist/server/server-types.d.ts +55 -3
- package/dist/server/server-types.d.ts.map +1 -1
- package/dist/server/server.d.ts +194 -19
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +1342 -274
- package/dist/server/server.js.map +1 -1
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +10 -7
- package/dist/server/sse.js.map +1 -1
- package/dist/server/static-headers.d.ts +3 -0
- package/dist/server/static-headers.d.ts.map +1 -1
- package/dist/server/static-headers.js +19 -1
- 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 +9 -8
- package/dist/server/transport-lane.js.map +1 -1
- package/dist/server/validation.d.ts.map +1 -1
- package/dist/server/validation.js +5 -1
- package/dist/server/validation.js.map +1 -1
- package/dist/server/websocket.d.ts +10 -3
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js +7 -4
- package/dist/server/websocket.js.map +1 -1
- package/dist/server/ws-bun.d.ts +2 -0
- package/dist/server/ws-bun.d.ts.map +1 -1
- package/dist/server/ws-bun.js +6 -3
- package/dist/server/ws-bun.js.map +1 -1
- package/dist/server/ws-hook.d.ts +2 -1
- package/dist/server/ws-hook.d.ts.map +1 -1
- package/dist/server.d.ts +8 -5
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/dist/single-copy-register.js +5 -0
- package/dist/single-copy-register.js.map +1 -1
- package/dist/single-copy.d.ts +46 -3
- package/dist/single-copy.d.ts.map +1 -1
- package/dist/single-copy.js +125 -12
- package/dist/single-copy.js.map +1 -1
- package/dist/tool-contract.d.ts +23 -0
- package/dist/tool-contract.d.ts.map +1 -1
- package/dist/tool-contract.js +37 -3
- package/dist/tool-contract.js.map +1 -1
- package/dist/transport-codec.d.ts.map +1 -1
- package/dist/transport-codec.js +2 -1
- package/dist/transport-codec.js.map +1 -1
- package/package.json +27 -2
- package/src/assurance.ts +52 -2
- package/src/capabilities.ts +81 -22
- package/src/diff.ts +54 -7
- package/src/durable-adapters.ts +20 -3
- package/src/durable-effect.ts +10 -3
- package/src/edge-kit.ts +7 -0
- package/src/effect-lifecycle.ts +5 -1
- package/src/effect-scope.ts +2 -1
- package/src/errors.ts +3 -0
- package/src/evidence.ts +302 -12
- package/src/idempotency.ts +80 -9
- package/src/index.ts +41 -3
- package/src/internal/code-unit-order.ts +8 -0
- package/src/internal/durable-saga-protocol.ts +2 -0
- package/src/internal/route-catalog.ts +19 -18
- package/src/internal/route-compiler.ts +62 -13
- package/src/internal/route-execution.ts +13 -3
- package/src/internal/route-lanes.ts +37 -28
- package/src/internal/route-program.ts +434 -20
- package/src/ledger.ts +11 -5
- package/src/manifest.ts +52 -46
- package/src/mount.ts +62 -0
- package/src/reflection.ts +84 -1
- package/src/response-observer.ts +1 -0
- package/src/router/overlap.ts +258 -0
- package/src/router/pattern.ts +349 -25
- package/src/router/router.ts +76 -51
- package/src/server/auth.ts +75 -0
- package/src/server/bare-error-lane.ts +12 -11
- package/src/server/body-lane.ts +46 -6
- package/src/server/body-parser.ts +241 -0
- package/src/server/body.ts +82 -9
- package/src/server/client-ip.ts +9 -0
- package/src/server/context.ts +219 -12
- package/src/server/contract.ts +54 -9
- package/src/server/cookies.ts +34 -2
- package/src/server/core-copies.ts +21 -0
- package/src/server/edge.ts +2 -0
- package/src/server/http.ts +34 -0
- package/src/server/idempotency-lane.ts +147 -72
- package/src/server/install.ts +6 -0
- package/src/server/methods.ts +143 -0
- package/src/server/multipart.ts +424 -0
- package/src/server/node-outcome-hook.ts +40 -7
- package/src/server/not-found-answer.ts +109 -0
- package/src/server/not-found.ts +121 -0
- package/src/server/plugin.ts +45 -1
- package/src/server/proto-guard.ts +128 -9
- package/src/server/query.ts +49 -0
- package/src/server/registry.ts +17 -2
- package/src/server/request-context.ts +44 -16
- package/src/server/request-lineage.ts +15 -0
- package/src/server/request-target.ts +46 -0
- package/src/server/respond.ts +14 -3
- package/src/server/response-contract-lane.ts +97 -16
- package/src/server/response-observer-runtime.ts +37 -8
- package/src/server/runtime-core.ts +2 -0
- package/src/server/server-types.ts +61 -2
- package/src/server/server.ts +1798 -355
- package/src/server/sse.ts +10 -8
- package/src/server/static-headers.ts +22 -1
- package/src/server/transport-lane.ts +17 -9
- package/src/server/validation.ts +7 -1
- package/src/server/websocket.ts +23 -9
- package/src/server/ws-bun.ts +8 -3
- package/src/server/ws-hook.ts +2 -1
- package/src/server.ts +39 -2
- package/src/single-copy-register.ts +5 -0
- package/src/single-copy.ts +160 -12
- package/src/tool-contract.ts +66 -3
- package/src/transport-codec.ts +2 -1
|
@@ -53,6 +53,11 @@ import type { IdentityPlugin } from "./plugin.js";
|
|
|
53
53
|
* app's bundle entirely rather than shipping a disabled branch to everyone.
|
|
54
54
|
*/
|
|
55
55
|
export type ResponseContractMode = "warn" | "enforce";
|
|
56
|
+
/** Success and status-specific error schemas captured by one route at registration time. */
|
|
57
|
+
export interface ResponseContractDefinition {
|
|
58
|
+
readonly response?: StandardSchemaV1;
|
|
59
|
+
readonly errors?: Readonly<Record<number, StandardSchemaV1>>;
|
|
60
|
+
}
|
|
56
61
|
/** The outcome of checking one handler result against its declared response schema. */
|
|
57
62
|
export type ResponseContractOutcome =
|
|
58
63
|
/** Nothing to report. `value` is what should be serialized (the original result, or the cleaned one). */
|
|
@@ -78,13 +83,26 @@ export type ResponseContractOutcome =
|
|
|
78
83
|
* microtask per response for a check that had no work to do.
|
|
79
84
|
*/
|
|
80
85
|
export declare function checkResponseContract(schema: StandardSchemaV1, result: unknown, mode: "warn" | "enforce"): ResponseContractOutcome | Promise<ResponseContractOutcome>;
|
|
86
|
+
/**
|
|
87
|
+
* Check a route's success or status-specific error payload. Plain `status()` results retain their
|
|
88
|
+
* status while enforcement replaces only the body with the validator's output. A `c.json(...)`
|
|
89
|
+
* reply is held to the contract through the value it was built from (`jsonReply`). Any other raw
|
|
90
|
+
* `Response` remains an explicit transport escape hatch because inspecting it would consume
|
|
91
|
+
* streams or alter redirects; assurance/static checks must govern that path separately.
|
|
92
|
+
*/
|
|
93
|
+
export declare function checkRouteResponseContract(definition: ResponseContractDefinition, result: unknown, mode: "warn" | "enforce", jsonReply?: {
|
|
94
|
+
readonly body: unknown;
|
|
95
|
+
}): ResponseContractOutcome | Promise<ResponseContractOutcome>;
|
|
81
96
|
/**
|
|
82
97
|
* What the server holds when the plugin is installed. The kernel calls `check` through this object and
|
|
83
98
|
* never imports the implementation, so an app that does not install the plugin does not carry it.
|
|
84
99
|
*/
|
|
85
100
|
export interface ResponseContractRuntime {
|
|
86
101
|
readonly mode: ResponseContractMode;
|
|
87
|
-
check(
|
|
102
|
+
check(definition: ResponseContractDefinition, result: unknown, context?: {
|
|
103
|
+
readonly jsonReply?: Response | undefined;
|
|
104
|
+
readonly jsonBody?: unknown;
|
|
105
|
+
}): ResponseContractOutcome | Promise<ResponseContractOutcome>;
|
|
88
106
|
}
|
|
89
107
|
/**
|
|
90
108
|
* Hold every route's declared `response` schema to what the handler actually returned.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-contract-lane.d.ts","sourceRoot":"","sources":["../../src/server/response-contract-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAAA;AAErD,uFAAuF;AACvF,MAAM,MAAM,uBAAuB;AACjC,yGAAyG;AACvG;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AAClD,gGAAgG;GAC9F;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAC9E,kGAAkG;GAChG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAW5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"response-contract-lane.d.ts","sourceRoot":"","sources":["../../src/server/response-contract-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAAA;AAErD,4FAA4F;AAC5F,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;CAC7D;AAED,uFAAuF;AACvF,MAAM,MAAM,uBAAuB;AACjC,yGAAyG;AACvG;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AAClD,gGAAgG;GAC9F;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAC9E,kGAAkG;GAChG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAW5D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAE5D;AAiBD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,0BAA0B,EACtC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,SAAS,CAAC,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACrC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA6B5D;AA2CD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;IACnC,KAAK,CACH,UAAU,EAAE,0BAA0B,EACtC,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GACnF,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;CAC9D;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,oBAA6B,GAAG,cAAc,CAkBpF"}
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
*/
|
|
44
44
|
import { formatStandardIssues, } from "../schema/standard.js";
|
|
45
45
|
import { INSTALL_RESPONSE_CONTRACT } from "./install.js";
|
|
46
|
-
import { isResponseResult } from "./runtime-core.js";
|
|
46
|
+
import { isResponseResult, status } from "./runtime-core.js";
|
|
47
47
|
const isPlainObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
48
48
|
/** Top-level keys present in the handler's result but absent from the validated value. */
|
|
49
49
|
function droppedKeys(result, value) {
|
|
@@ -58,34 +58,77 @@ function droppedKeys(result, value) {
|
|
|
58
58
|
* microtask per response for a check that had no work to do.
|
|
59
59
|
*/
|
|
60
60
|
export function checkResponseContract(schema, result, mode) {
|
|
61
|
+
return checkRouteResponseContract({ response: schema }, result, mode);
|
|
62
|
+
}
|
|
63
|
+
/** The schema a reply with this status is held to: `response` for 2xx, else `errors[status]`. */
|
|
64
|
+
const schemaFor = (definition, code) => code >= 200 && code < 300 ? definition.response : definition.errors?.[code];
|
|
65
|
+
/** A `c.json(...)` reply rebuilt around its validated value, keeping its status and headers. */
|
|
66
|
+
function reserialize(reply, value) {
|
|
67
|
+
const headers = new Headers(reply.headers);
|
|
68
|
+
headers.delete("content-length");
|
|
69
|
+
return new Response(JSON.stringify(value), {
|
|
70
|
+
status: reply.status,
|
|
71
|
+
statusText: reply.statusText,
|
|
72
|
+
headers,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check a route's success or status-specific error payload. Plain `status()` results retain their
|
|
77
|
+
* status while enforcement replaces only the body with the validator's output. A `c.json(...)`
|
|
78
|
+
* reply is held to the contract through the value it was built from (`jsonReply`). Any other raw
|
|
79
|
+
* `Response` remains an explicit transport escape hatch because inspecting it would consume
|
|
80
|
+
* streams or alter redirects; assurance/static checks must govern that path separately.
|
|
81
|
+
*/
|
|
82
|
+
export function checkRouteResponseContract(definition, result, mode, jsonReply) {
|
|
83
|
+
const plain = isResponseResult(result) ? result.plain : undefined;
|
|
84
|
+
if (plain !== undefined) {
|
|
85
|
+
const schema = schemaFor(definition, plain.status);
|
|
86
|
+
if (schema === undefined)
|
|
87
|
+
return { kind: "ok", value: result };
|
|
88
|
+
return validateContract(schema, plain.body, result, mode, (value) => status(plain.status, value, plain.headers === undefined ? undefined : { headers: plain.headers }));
|
|
89
|
+
}
|
|
90
|
+
if (jsonReply !== undefined && result instanceof Response) {
|
|
91
|
+
const schema = schemaFor(definition, result.status);
|
|
92
|
+
if (schema === undefined)
|
|
93
|
+
return { kind: "ok", value: result };
|
|
94
|
+
return validateContract(schema, jsonReply.body, result, mode, (value) => reserialize(result, value));
|
|
95
|
+
}
|
|
61
96
|
// A handler may return a raw Response as deliberate control flow (a redirect, a stream). There is no
|
|
62
97
|
// JSON payload to hold to the contract, and re-serializing one would corrupt it. A `status(...)` is
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
if (result instanceof Response || result === undefined
|
|
98
|
+
// intentionally handled above because its plain body and status remain available without consuming
|
|
99
|
+
// a stream. An absent body has nothing to validate.
|
|
100
|
+
if (result instanceof Response || result === undefined)
|
|
66
101
|
return { kind: "ok", value: result };
|
|
67
|
-
const
|
|
102
|
+
const schema = definition.response;
|
|
103
|
+
if (schema === undefined)
|
|
104
|
+
return { kind: "ok", value: result };
|
|
105
|
+
return validateContract(schema, result, result, mode, (value) => value);
|
|
106
|
+
}
|
|
107
|
+
/** Validate `payload`; `served` is what goes out unchanged when nothing is enforced - the whole
|
|
108
|
+
* `status(...)` result or reply, never just its body. */
|
|
109
|
+
function validateContract(schema, payload, served, mode, replace) {
|
|
110
|
+
const settled = schema["~standard"].validate(payload);
|
|
68
111
|
return settled instanceof Promise
|
|
69
|
-
? settled.then((r) => interpret(r,
|
|
70
|
-
: interpret(settled,
|
|
112
|
+
? settled.then((r) => interpret(r, payload, served, mode, replace))
|
|
113
|
+
: interpret(settled, payload, served, mode, replace);
|
|
71
114
|
}
|
|
72
|
-
function interpret(settled,
|
|
115
|
+
function interpret(settled, payload, served, mode, replace) {
|
|
73
116
|
if (settled.issues !== undefined) {
|
|
74
117
|
const message = `response does not satisfy its declared contract: ${formatStandardIssues(settled.issues)}`;
|
|
75
118
|
// `warn` never changes what is served - it reports and gets out of the way, so switching it on can
|
|
76
119
|
// never be the thing that broke production.
|
|
77
120
|
return mode === "warn"
|
|
78
|
-
? { kind: "warn", value:
|
|
121
|
+
? { kind: "warn", value: served, message }
|
|
79
122
|
: { kind: "violation", message };
|
|
80
123
|
}
|
|
81
|
-
const dropped = droppedKeys(
|
|
124
|
+
const dropped = droppedKeys(payload, settled.value);
|
|
82
125
|
if (mode === "enforce")
|
|
83
|
-
return { kind: "ok", value: settled.value };
|
|
126
|
+
return { kind: "ok", value: replace(settled.value) };
|
|
84
127
|
return dropped.length === 0
|
|
85
|
-
? { kind: "ok", value:
|
|
128
|
+
? { kind: "ok", value: served }
|
|
86
129
|
: {
|
|
87
130
|
kind: "warn",
|
|
88
|
-
value:
|
|
131
|
+
value: served,
|
|
89
132
|
message: `response carries fields its contract does not declare: ${dropped.join(", ")}. They are being sent; \`responseContract: "enforce"\` would strip them.`,
|
|
90
133
|
};
|
|
91
134
|
}
|
|
@@ -107,7 +150,9 @@ function interpret(settled, result, mode) {
|
|
|
107
150
|
export function responseContract(mode = "warn") {
|
|
108
151
|
const runtime = {
|
|
109
152
|
mode,
|
|
110
|
-
check: (
|
|
153
|
+
check: (definition, result, context) => checkRouteResponseContract(definition, result, mode, result instanceof Response && result === context?.jsonReply
|
|
154
|
+
? { body: context.jsonBody }
|
|
155
|
+
: undefined),
|
|
111
156
|
};
|
|
112
157
|
const apply = (app) => {
|
|
113
158
|
;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-contract-lane.js","sourceRoot":"","sources":["../../src/server/response-contract-lane.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,EACL,oBAAoB,GAGrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"response-contract-lane.js","sourceRoot":"","sources":["../../src/server/response-contract-lane.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import type { NodeResponseHook, ResponseBodyHook, ResponseHeadersHook } from "./node-outcome-hook.js";
|
|
1
|
+
import type { NodeResponseBodyHook, NodeResponseHook, ResponseBodyHook, ResponseHeadersHook } from "./node-outcome-hook.js";
|
|
2
2
|
type MaybePromise<T> = T | Promise<T>;
|
|
3
3
|
type WebResponseHook = (response: Response, req: Request) => MaybePromise<Response>;
|
|
4
|
-
export type { ResponseBodyHook, ResponseHeadersHook } from "./node-outcome-hook.js";
|
|
4
|
+
export type { NodeResponseBodyHook, ResponseBodyHook, ResponseHeadersHook, } from "./node-outcome-hook.js";
|
|
5
5
|
export interface ResponseObserverHost {
|
|
6
6
|
assertConfigurable(operation: string): void;
|
|
7
|
-
addResponseHook(web: WebResponseHook, node: NodeResponseHook | undefined): void;
|
|
7
|
+
addResponseHook(web: WebResponseHook, node: NodeResponseHook | undefined, headerOnly?: boolean): void;
|
|
8
8
|
enableResponseBodyTagging(): object;
|
|
9
9
|
responseBodyOwners(): ReadonlySet<object>;
|
|
10
10
|
}
|
|
11
11
|
export interface ResponseObserverMethods {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Register a portable header hook. `node` is an optional equivalent for the Node-direct record;
|
|
14
|
+
* it must preserve the portable hook's observable header semantics.
|
|
15
|
+
*/
|
|
16
|
+
onResponseHeaders(fn: ResponseHeadersHook, node?: NodeResponseHook): this;
|
|
17
|
+
onResponseBody(fn: ResponseBodyHook, node?: NodeResponseBodyHook): this;
|
|
14
18
|
onResponseRaw(fn: (response: Response, req: Request) => MaybePromise<Response>): this;
|
|
15
19
|
}
|
|
16
20
|
export interface ResponseObserverRuntime {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-observer-runtime.d.ts","sourceRoot":"","sources":["../../src/server/response-observer-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAA;AAK/B,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACrC,KAAK,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAA;AAEnF,YAAY,
|
|
1
|
+
{"version":3,"file":"response-observer-runtime.d.ts","sourceRoot":"","sources":["../../src/server/response-observer-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAA;AAK/B,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AACrC,KAAK,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAA;AAEnF,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAE/B,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,eAAe,CACb,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAClC,UAAU,CAAC,EAAE,OAAO,GACnB,IAAI,CAAA;IACP,yBAAyB,IAAI,MAAM,CAAA;IACnC,kBAAkB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACzE,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACvE,aAAa,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,KAAK,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;CACtF;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,uBAAuB,CAAA;CAC7D;AAgDD,wBAAgB,6BAA6B,IAAI,uBAAuB,CAuEvE"}
|
|
@@ -48,16 +48,16 @@ export function createResponseObserverRuntime() {
|
|
|
48
48
|
return {
|
|
49
49
|
install(host) {
|
|
50
50
|
return {
|
|
51
|
-
onResponseHeaders(fn) {
|
|
51
|
+
onResponseHeaders(fn, node) {
|
|
52
52
|
host.assertConfigurable("onResponseHeaders()");
|
|
53
53
|
host.addResponseHook((response, req) => {
|
|
54
54
|
const view = webHeadersView(response, req);
|
|
55
55
|
const out = fn(view.headers, view.request, response.status);
|
|
56
56
|
return out instanceof Promise ? out.then(() => view.response) : view.response;
|
|
57
|
-
}, (response, req) => fn(recordHeadersView(response), req, response.status));
|
|
57
|
+
}, node ?? ((response, req) => fn(recordHeadersView(response), req, response.status)), true);
|
|
58
58
|
return this;
|
|
59
59
|
},
|
|
60
|
-
onResponseBody(fn) {
|
|
60
|
+
onResponseBody(fn, node) {
|
|
61
61
|
host.assertConfigurable("onResponseBody()");
|
|
62
62
|
host.enableResponseBodyTagging();
|
|
63
63
|
host.addResponseHook((response, req) => {
|
|
@@ -72,12 +72,16 @@ export function createResponseObserverRuntime() {
|
|
|
72
72
|
}, (response, req) => {
|
|
73
73
|
if (response.body === null)
|
|
74
74
|
return undefined;
|
|
75
|
-
|
|
75
|
+
// An author-supplied twin sees the same bytes and returns through the same
|
|
76
|
+
// replacement channel; only the header-view allocation is skipped.
|
|
77
|
+
const out = node === undefined
|
|
78
|
+
? fn(response.body, recordHeadersView(response), req, response.status)
|
|
79
|
+
: node(response.body, response, req, response.status);
|
|
76
80
|
if (out instanceof Promise)
|
|
77
81
|
return out.then((replaced) => applyBodyReplacement(response, replaced));
|
|
78
82
|
applyBodyReplacement(response, out);
|
|
79
83
|
return undefined;
|
|
80
|
-
});
|
|
84
|
+
}, false);
|
|
81
85
|
return this;
|
|
82
86
|
},
|
|
83
87
|
onResponseRaw(fn) {
|
|
@@ -85,7 +89,7 @@ export function createResponseObserverRuntime() {
|
|
|
85
89
|
host.enableResponseBodyTagging();
|
|
86
90
|
host.addResponseHook((response, req) => taggedResponseBody(response, host.responseBodyOwners()) === undefined
|
|
87
91
|
? fn(response, req)
|
|
88
|
-
: response, () => undefined);
|
|
92
|
+
: response, () => undefined, false);
|
|
89
93
|
return this;
|
|
90
94
|
},
|
|
91
95
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-observer-runtime.js","sourceRoot":"","sources":["../../src/server/response-observer-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"response-observer-runtime.js","sourceRoot":"","sources":["../../src/server/response-observer-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,8 @@ export declare const PRE_DECODED_BODY: unique symbol;
|
|
|
22
22
|
/** The stash shape under {@link PRE_DECODED_BODY}. */
|
|
23
23
|
export interface PreDecodedBody {
|
|
24
24
|
readonly value: unknown;
|
|
25
|
+
/** The encoded size, so the route's own body limit still applies to a body decoded before routing. */
|
|
26
|
+
readonly byteLength: number;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* A response described as plain data - the status, any headers of its own, and a body still in value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-core.d.ts","sourceRoot":"","sources":["../../src/server/runtime-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAExD,qFAAqF;AACrF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE9C,eAAO,MAAM,eAAe,eAAqD,CAAA;AACjF,eAAO,MAAM,WAAW,eAA8B,CAAA;AACtD,eAAO,MAAM,cAAc,eAAiC,CAAA;AAE5D;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,eAAkC,CAAA;AAE/D,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-core.d.ts","sourceRoot":"","sources":["../../src/server/runtime-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-core.js","sourceRoot":"","sources":["../../src/server/runtime-core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,4BAA4B,EAAsB,MAAM,cAAc,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAM7D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAA;AACjF,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAE5D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime-core.js","sourceRoot":"","sources":["../../src/server/runtime-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { CapabilityUseEvent } from "../internal/capability-runtime.js";
|
|
7
7
|
import type { AssuranceEvidence } from "../internal/route-assurance.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { RouteMethod } from "../router/router.js";
|
|
9
9
|
import type { ClientIpTrust } from "./client-ip.js";
|
|
10
10
|
import type { Context, Platform, RouteSchema } from "./context.js";
|
|
11
11
|
import type { Logger } from "./logger.js";
|
|
12
|
-
import type { NodeRequestHook, NodeResponseHook, ResponseBodyHook, ResponseHeadersHook } from "./node-outcome-hook.js";
|
|
12
|
+
import type { NodeRequestHook, NodeResponseBodyHook, NodeResponseHook, ResponseBodyHook, ResponseHeadersHook } from "./node-outcome-hook.js";
|
|
13
13
|
import type { MaybePromise, OnRequestResult } from "./server.js";
|
|
14
|
+
import type { WebSocketUpgradeOutcome } from "./websocket.js";
|
|
14
15
|
/**
|
|
15
16
|
* The outcome of a capacity-admission decision. `admitted` requests carry a `release` the server calls
|
|
16
17
|
* exactly once when the response is finalized; a shed request carries a ready `429` Response.
|
|
@@ -81,6 +82,8 @@ export interface ServerOptions {
|
|
|
81
82
|
readonly wsMaxPayloadBytes?: number;
|
|
82
83
|
/** Per-request timeout (ms): a slower request gets a 503 and `ctx.signal` aborts. 0 disables (default). */
|
|
83
84
|
readonly requestTimeoutMs?: number;
|
|
85
|
+
/** WebSocket upgrade admission/guard timeout (ms). Default 10_000; set to 0 only for a deliberate unbounded guard. */
|
|
86
|
+
readonly wsUpgradeTimeoutMs?: number;
|
|
84
87
|
/**
|
|
85
88
|
* How to derive `c.clientIp` behind a reverse proxy or CDN. Omit (default) to trust only the raw
|
|
86
89
|
* socket peer and never believe a forwarded header. Set `{ trustedHops: n }` when the app sits
|
|
@@ -158,10 +161,41 @@ export interface ServerOptions {
|
|
|
158
161
|
}
|
|
159
162
|
/** A fetch-compatible handler used by {@link Server.mountFetch}. */
|
|
160
163
|
export type FetchHandler<Env = unknown> = (request: Request, platform?: Platform<Env>) => MaybePromise<Response>;
|
|
164
|
+
/** A fetch app that may also participate in adapter-owned WebSocket upgrades when mounted. */
|
|
165
|
+
export interface MountableApp<Env = unknown> {
|
|
166
|
+
readonly fetch: FetchHandler<Env>;
|
|
167
|
+
readonly resolveWebSocketUpgrade?: (request: Request, platform?: Platform<Env>) => MaybePromise<WebSocketUpgradeOutcome>;
|
|
168
|
+
}
|
|
169
|
+
/** Options for a first-class composed mount. */
|
|
170
|
+
export interface MountOptions<Env = unknown> {
|
|
171
|
+
/** Absolute pathname prefix, optionally ending in `/*`. */
|
|
172
|
+
readonly path: string;
|
|
173
|
+
/** The child app. Its HTTP fetch and optional WebSocket resolver share the mount. */
|
|
174
|
+
readonly app: MountableApp<Env>;
|
|
175
|
+
/** Rewrite the child request to remove `path` before dispatch. Default: false. */
|
|
176
|
+
readonly stripPrefix?: boolean;
|
|
177
|
+
/** Higher values run first; ties use the most specific path, then declaration order. */
|
|
178
|
+
readonly priority?: number;
|
|
179
|
+
/** For safe replayable methods only, try the next matching mount when this one returns 404. */
|
|
180
|
+
readonly fallbackOn?: 404;
|
|
181
|
+
/**
|
|
182
|
+
* Why this child is not analyzed, for a handler whose effects nifra cannot follow (a closure from
|
|
183
|
+
* another package). Capability assurance lists a mount with a reason as a known gap; a mount
|
|
184
|
+
* without one fails it, since its routes are invisible. A nifra `server()` belongs in `merge()`,
|
|
185
|
+
* where its routes are analyzed.
|
|
186
|
+
*/
|
|
187
|
+
readonly opaque?: string;
|
|
188
|
+
}
|
|
161
189
|
/** Options for a legacy fetch-handler mount. */
|
|
162
190
|
export interface MountFetchOptions {
|
|
163
191
|
/** Remove the mount prefix before invoking the legacy handler. Default: false. */
|
|
164
192
|
readonly stripPrefix?: boolean;
|
|
193
|
+
/** Higher values run first; ties use the most specific path, then declaration order. */
|
|
194
|
+
readonly priority?: number;
|
|
195
|
+
/** For safe replayable methods only, try the next matching legacy mount when it returns 404. */
|
|
196
|
+
readonly fallbackOn?: 404;
|
|
197
|
+
/** Why this handler is not analyzed - see {@link MountOptions.opaque}. */
|
|
198
|
+
readonly opaque?: string;
|
|
165
199
|
}
|
|
166
200
|
/** A callback awaited after the Bun server has drained and stopped. */
|
|
167
201
|
export type StopHook = () => MaybePromise<void>;
|
|
@@ -188,9 +222,11 @@ export interface ToolAnnotations {
|
|
|
188
222
|
* (e.g. `toOpenAPI`) enumerate routes after registration.
|
|
189
223
|
*/
|
|
190
224
|
export interface RouteDescriptor {
|
|
191
|
-
readonly method:
|
|
225
|
+
readonly method: RouteMethod;
|
|
192
226
|
readonly path: string;
|
|
193
227
|
readonly schema: RouteSchema | undefined;
|
|
228
|
+
/** Runtime response-contract mode captured when this route was registered. */
|
|
229
|
+
readonly responseContract?: "warn" | "enforce";
|
|
194
230
|
/** Effective enforcement evidence, populated only during reflection/introspection. */
|
|
195
231
|
readonly assurance?: readonly AssuranceEvidence[];
|
|
196
232
|
/** Normalized declared effect tokens, populated only when the route declares any. */
|
|
@@ -235,6 +271,18 @@ export interface McpPromptDescriptor {
|
|
|
235
271
|
readonly arguments?: readonly PromptArgument[];
|
|
236
272
|
readonly handler: (args: Record<string, string>) => MaybePromise<readonly PromptMessage[]>;
|
|
237
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* TLS for `listen()`: serve HTTPS from Bun itself, with no proxy in front. `cert` and `key` are PEM,
|
|
276
|
+
* as text or as the file's bytes (`readFileSync("cert.pem")`); `passphrase` unlocks an encrypted key.
|
|
277
|
+
*/
|
|
278
|
+
export interface ListenTlsOptions {
|
|
279
|
+
/** The certificate chain, PEM. */
|
|
280
|
+
readonly cert: string | Uint8Array;
|
|
281
|
+
/** The private key, PEM. */
|
|
282
|
+
readonly key: string | Uint8Array;
|
|
283
|
+
/** The passphrase of an encrypted `key`. */
|
|
284
|
+
readonly passphrase?: string;
|
|
285
|
+
}
|
|
238
286
|
/**
|
|
239
287
|
* The handle `listen()` returns - the slice of Bun's server nifra holds and exposes.
|
|
240
288
|
* Declared explicitly (rather than `ReturnType<typeof Bun.serve>`) so the public type
|
|
@@ -289,6 +337,8 @@ export interface Middleware {
|
|
|
289
337
|
* an optional `onNodeResponse` twin only when the hook must see a real `Response`.
|
|
290
338
|
*/
|
|
291
339
|
readonly onResponseHeaders?: ResponseHeadersHook;
|
|
340
|
+
/** Allocation-light Node-direct twin for a portable header-only hook; keep its wire semantics identical. */
|
|
341
|
+
readonly onNodeResponseHeaders?: NodeResponseHook;
|
|
292
342
|
/**
|
|
293
343
|
* PORTABLE post-serialization body hook - the payload tier. Receives the final
|
|
294
344
|
* framework-serialized bytes (already resident on every runtime; no stream is drained) plus the
|
|
@@ -296,6 +346,8 @@ export interface Middleware {
|
|
|
296
346
|
* (proxies, SSE, streamed SSR) are skipped by contract - transforming those needs `onResponse`.
|
|
297
347
|
*/
|
|
298
348
|
readonly onResponseBody?: ResponseBodyHook;
|
|
349
|
+
/** Allocation-light Node-direct twin for a portable body hook; keep its wire semantics identical. */
|
|
350
|
+
readonly onNodeResponseBody?: NodeResponseBodyHook;
|
|
299
351
|
/**
|
|
300
352
|
* Response transform for untagged/raw responses (streams, proxied fetches, and framework errors).
|
|
301
353
|
* Framework-serialized payloads use `onResponseBody` and remain on the Node direct lane.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-types.d.ts","sourceRoot":"","sources":["../../src/server/server-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"server-types.d.ts","sourceRoot":"","sources":["../../src/server/server-types.ts"],"names":[],"mappings":"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"}
|