@nifrajs/core 1.13.0 → 2.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 +10 -1
- package/dist/assurance.d.ts +11 -2
- package/dist/assurance.d.ts.map +1 -1
- package/dist/assurance.js +20 -0
- package/dist/assurance.js.map +1 -1
- package/dist/effect-ledger.d.ts +9 -0
- package/dist/effect-ledger.d.ts.map +1 -0
- package/dist/effect-ledger.js +8 -0
- package/dist/effect-ledger.js.map +1 -0
- package/dist/idempotency-plugin.d.ts +8 -0
- package/dist/idempotency-plugin.d.ts.map +1 -0
- package/dist/idempotency-plugin.js +8 -0
- package/dist/idempotency-plugin.js.map +1 -0
- package/dist/index.d.ts +6 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -31
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +7 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +56 -0
- package/dist/mcp.js.map +1 -0
- package/dist/node-direct.d.ts +5 -0
- package/dist/node-direct.d.ts.map +1 -0
- package/dist/node-direct.js +27 -0
- package/dist/node-direct.js.map +1 -0
- package/dist/reflection.d.ts +5 -0
- package/dist/reflection.d.ts.map +1 -1
- package/dist/reflection.js +2 -0
- package/dist/reflection.js.map +1 -1
- package/dist/server/client-ip.d.ts +35 -0
- package/dist/server/client-ip.d.ts.map +1 -0
- package/dist/server/client-ip.js +42 -0
- package/dist/server/client-ip.js.map +1 -0
- package/dist/server/context.d.ts +47 -2
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/contract.d.ts +14 -4
- package/dist/server/contract.d.ts.map +1 -1
- package/dist/server/contract.js +8 -2
- package/dist/server/contract.js.map +1 -1
- package/dist/server/http.d.ts +14 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +45 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/idempotency-lane.d.ts +44 -0
- package/dist/server/idempotency-lane.d.ts.map +1 -0
- package/dist/server/idempotency-lane.js +181 -0
- package/dist/server/idempotency-lane.js.map +1 -0
- package/dist/server/install.d.ts +21 -0
- package/dist/server/install.d.ts.map +1 -0
- package/dist/server/install.js +21 -0
- package/dist/server/install.js.map +1 -0
- package/dist/server/ledger-lane.d.ts +53 -0
- package/dist/server/ledger-lane.d.ts.map +1 -0
- package/dist/server/ledger-lane.js +82 -0
- package/dist/server/ledger-lane.js.map +1 -0
- package/dist/server/mcp-hook.d.ts +28 -0
- package/dist/server/mcp-hook.d.ts.map +1 -0
- package/dist/server/mcp-hook.js +2 -0
- package/dist/server/mcp-hook.js.map +1 -0
- package/dist/server/node-outcome-hook.d.ts +9 -0
- package/dist/server/node-outcome-hook.d.ts.map +1 -0
- package/dist/server/node-outcome-hook.js +2 -0
- package/dist/server/node-outcome-hook.js.map +1 -0
- package/dist/server/node-outcome.d.ts +37 -0
- package/dist/server/node-outcome.d.ts.map +1 -0
- package/dist/server/node-outcome.js +75 -0
- package/dist/server/node-outcome.js.map +1 -0
- package/dist/server/plugin.d.ts +78 -0
- package/dist/server/plugin.d.ts.map +1 -0
- package/dist/server/plugin.js +57 -0
- package/dist/server/plugin.js.map +1 -0
- package/dist/server/query.d.ts +18 -0
- package/dist/server/query.d.ts.map +1 -0
- package/dist/server/query.js +102 -0
- package/dist/server/query.js.map +1 -0
- package/dist/server/registry.d.ts +31 -6
- package/dist/server/registry.d.ts.map +1 -1
- package/dist/server/request-context.d.ts +51 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +184 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/respond.d.ts +17 -0
- package/dist/server/respond.d.ts.map +1 -0
- package/dist/server/respond.js +81 -0
- package/dist/server/respond.js.map +1 -0
- package/dist/server/runtime-core.d.ts +36 -0
- package/dist/server/runtime-core.d.ts.map +1 -0
- package/dist/server/runtime-core.js +51 -0
- package/dist/server/runtime-core.js.map +1 -0
- package/dist/server/server-types.d.ts +203 -0
- package/dist/server/server-types.d.ts.map +1 -0
- package/dist/server/server-types.js +2 -0
- package/dist/server/server-types.js.map +1 -0
- package/dist/server/server.d.ts +107 -345
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +214 -831
- package/dist/server/server.js.map +1 -1
- package/dist/server/sse-hook.d.ts +10 -0
- package/dist/server/sse-hook.d.ts.map +1 -0
- package/dist/server/sse-hook.js +2 -0
- package/dist/server/sse-hook.js.map +1 -0
- package/dist/server/sse.d.ts +7 -23
- package/dist/server/sse.d.ts.map +1 -1
- package/dist/server/sse.js +18 -0
- package/dist/server/sse.js.map +1 -1
- package/dist/server/websocket.d.ts +17 -1
- package/dist/server/websocket.d.ts.map +1 -1
- package/dist/server/websocket.js.map +1 -1
- package/dist/server/ws-hook.d.ts +8 -11
- package/dist/server/ws-hook.d.ts.map +1 -1
- package/dist/server/ws-hook.js +7 -14
- package/dist/server/ws-hook.js.map +1 -1
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -0
- package/dist/ws.d.ts +16 -7
- package/dist/ws.d.ts.map +1 -1
- package/dist/ws.js +25 -10
- package/dist/ws.js.map +1 -1
- package/package.json +77 -6
- package/src/assurance.ts +36 -1
- package/src/effect-ledger.ts +9 -0
- package/src/idempotency-plugin.ts +7 -0
- package/src/index.ts +6 -133
- package/src/mcp.ts +65 -0
- package/src/node-direct.ts +37 -0
- package/src/reflection.ts +7 -0
- package/src/server/client-ip.ts +60 -0
- package/src/server/context.ts +50 -2
- package/src/server/contract.ts +26 -7
- package/src/server/http.ts +58 -0
- package/src/server/idempotency-lane.ts +287 -0
- package/src/server/install.ts +28 -0
- package/src/server/ledger-lane.ts +125 -0
- package/src/server/mcp-hook.ts +41 -0
- package/src/server/node-outcome-hook.ts +9 -0
- package/src/server/node-outcome.ts +112 -0
- package/src/server/plugin.ts +92 -0
- package/src/server/query.ts +119 -0
- package/src/server/registry.ts +36 -6
- package/src/server/request-context.ts +271 -0
- package/src/server/respond.ts +93 -0
- package/src/server/runtime-core.ts +74 -0
- package/src/server/server-types.ts +204 -0
- package/src/server/server.ts +402 -1314
- package/src/server/sse-hook.ts +14 -0
- package/src/server/sse.ts +26 -0
- package/src/server/websocket.ts +20 -0
- package/src/server/ws-hook.ts +8 -19
- package/src/server.ts +92 -0
- package/src/ws.ts +33 -10
- package/dist/invariants.d.ts +0 -70
- package/dist/invariants.d.ts.map +0 -1
- package/dist/invariants.js +0 -487
- package/dist/invariants.js.map +0 -1
- package/src/invariants.ts +0 -604
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ bun add @nifrajs/core
|
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
```ts
|
|
12
|
-
import { server } from "@nifrajs/core"
|
|
12
|
+
import { server } from "@nifrajs/core/server"
|
|
13
13
|
|
|
14
14
|
const app = server()
|
|
15
15
|
.get("/users/:id", (c) => ({ id: c.params.id }))
|
|
@@ -19,6 +19,15 @@ const app = server()
|
|
|
19
19
|
export type App = typeof app // hand this to @nifrajs/client for end-to-end types
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
`@nifrajs/core` and `@nifrajs/core/server` expose the same lean common runtime. Optional systems are
|
|
23
|
+
available only from their explicit subpaths, so an ordinary HTTP server never evaluates them:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
import { defineContract, implement } from "@nifrajs/core/contract"
|
|
27
|
+
import { startCausality } from "@nifrajs/core/causality"
|
|
28
|
+
import { defineAssurancePolicy } from "@nifrajs/core/assurance"
|
|
29
|
+
```
|
|
30
|
+
|
|
22
31
|
- **Inline or contract-first.** Write routes inline (types inferred from the
|
|
23
32
|
builder), or `defineContract(...)` + `implement(...)` for a decoupled, versionable
|
|
24
33
|
surface — handlers lift over unchanged.
|
package/dist/assurance.d.ts
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
import { type CapabilityAssuranceReport, type CapabilityPolicy } from "./capabilities.js";
|
|
6
6
|
import type { AssuranceDeclaration, AssuranceEvidence, AssuranceScope } from "./internal/route-assurance.js";
|
|
7
7
|
import { withRouteAssurance } from "./internal/route-assurance.js";
|
|
8
|
-
import type { InvariantExecutor } from "./invariants.js";
|
|
9
8
|
import type { NifraManifestSigner } from "./manifest.js";
|
|
10
9
|
import { type ReflectedRoute } from "./reflection.js";
|
|
11
10
|
import type { Method } from "./router/router.js";
|
|
12
11
|
export type { AssuranceDeclaration, AssuranceEvidence, AssuranceScope };
|
|
13
12
|
export { withRouteAssurance };
|
|
13
|
+
/** Isolated request executor used by adversarial contract verification. */
|
|
14
|
+
export type InvariantExecutor = (request: Request) => Response | Promise<Response>;
|
|
14
15
|
/** Canonical evidence ids emitted by Nifra's official middleware modules. */
|
|
15
16
|
export declare const NIFRA_ASSURANCE: Readonly<{
|
|
16
17
|
readonly AUTHENTICATED: "nifra.authenticated";
|
|
@@ -46,8 +47,16 @@ export interface AssurancePolicy {
|
|
|
46
47
|
readonly unmatched?: "error" | "ignore";
|
|
47
48
|
/** Default false: reject an empty reflected source so a wrong import cannot pass CI silently. */
|
|
48
49
|
readonly allowEmpty?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Default false. When true, a route matched by a **pure-classification** rule (no `require`, no `forbid`)
|
|
52
|
+
* that carries NO enforcement evidence is reported (`classified-no-evidence`). This surfaces the gap the
|
|
53
|
+
* feedback flagged: a classification-only policy silently degrades "proof" to a "label". Opt-in, because
|
|
54
|
+
* a genuinely public route legitimately carries no evidence; enable it once your guards emit evidence
|
|
55
|
+
* (inline `schema.assurance` or a `withRouteAssurance` middleware) to keep classification honest.
|
|
56
|
+
*/
|
|
57
|
+
readonly flagClassifiedWithoutEvidence?: boolean;
|
|
49
58
|
}
|
|
50
|
-
export type AssuranceFindingCode = "no-routes" | "unclassified-route" | "missing-evidence" | "forbidden-evidence";
|
|
59
|
+
export type AssuranceFindingCode = "no-routes" | "unclassified-route" | "missing-evidence" | "forbidden-evidence" | "classified-no-evidence";
|
|
51
60
|
export interface AssuranceFinding {
|
|
52
61
|
readonly code: AssuranceFindingCode;
|
|
53
62
|
readonly method: string;
|
package/dist/assurance.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assurance.d.ts","sourceRoot":"","sources":["../src/assurance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACf,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAKL,kBAAkB,EACnB,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"assurance.d.ts","sourceRoot":"","sources":["../src/assurance.ts"],"names":[],"mappings":"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"}
|
package/dist/assurance.js
CHANGED
|
@@ -33,6 +33,10 @@ export function defineAssurancePolicy(policy) {
|
|
|
33
33
|
if (policy.allowEmpty !== undefined && typeof policy.allowEmpty !== "boolean") {
|
|
34
34
|
throw new Error(`route assurance: allowEmpty must be boolean`);
|
|
35
35
|
}
|
|
36
|
+
if (policy.flagClassifiedWithoutEvidence !== undefined &&
|
|
37
|
+
typeof policy.flagClassifiedWithoutEvidence !== "boolean") {
|
|
38
|
+
throw new Error(`route assurance: flagClassifiedWithoutEvidence must be boolean`);
|
|
39
|
+
}
|
|
36
40
|
const names = new Set();
|
|
37
41
|
const rules = policy.rules.map((rule) => {
|
|
38
42
|
if (typeof rule.name !== "string" || !nonEmpty(rule.name)) {
|
|
@@ -76,6 +80,7 @@ export function defineAssurancePolicy(policy) {
|
|
|
76
80
|
rules: Object.freeze(rules),
|
|
77
81
|
unmatched: policy.unmatched ?? "error",
|
|
78
82
|
allowEmpty: policy.allowEmpty ?? false,
|
|
83
|
+
flagClassifiedWithoutEvidence: policy.flagClassifiedWithoutEvidence ?? false,
|
|
79
84
|
});
|
|
80
85
|
}
|
|
81
86
|
/** Identity helper for a `nifra.assurance.ts` default export. */
|
|
@@ -171,6 +176,21 @@ export function evaluateRouteAssurance(source, policyInput) {
|
|
|
171
176
|
message: `${route.method} ${route.path} (${rule.name}) carries forbidden ${id}`,
|
|
172
177
|
});
|
|
173
178
|
}
|
|
179
|
+
// Opt-in visibility: a pure-classification rule (no require + no forbid) matching a route with zero
|
|
180
|
+
// evidence is a "label without proof". Surface it so the gap isn't silently green. A rule that expects
|
|
181
|
+
// or forbids evidence already speaks for itself via the loops above, so it's excluded here.
|
|
182
|
+
if (policy.flagClassifiedWithoutEvidence === true &&
|
|
183
|
+
evidence.length === 0 &&
|
|
184
|
+
(rule.require ?? []).length === 0 &&
|
|
185
|
+
(rule.forbid ?? []).length === 0) {
|
|
186
|
+
findings.push({
|
|
187
|
+
code: "classified-no-evidence",
|
|
188
|
+
method: route.method,
|
|
189
|
+
path: route.path,
|
|
190
|
+
rule: rule.name,
|
|
191
|
+
message: `${route.method} ${route.path} (${rule.name}) is classified but carries no enforcement evidence`,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
174
194
|
routes.push({
|
|
175
195
|
method: route.method,
|
|
176
196
|
path: route.path,
|
package/dist/assurance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assurance.js","sourceRoot":"","sources":["../src/assurance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAM1B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"assurance.js","sourceRoot":"","sources":["../src/assurance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAM1B,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAuB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpE,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAK7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAA;AAwFlD,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;AAEhE,SAAS,oBAAoB,CAC3B,MAAqC,EACrC,KAAa;IAEb,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACf,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,IACE,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,MAAM,CAAC,SAAS,KAAK,OAAO;QAC5B,MAAM,CAAC,SAAS,KAAK,QAAQ,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAChG,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;IACD,IACE,MAAM,CAAC,6BAA6B,KAAK,SAAS;QAClD,OAAO,MAAM,CAAC,6BAA6B,KAAK,SAAS,EACzD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAiB,EAAE;QACrD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QAC7B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iCAAiC,CAC/E,CAAA;QACH,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;QACzE,KAAK,MAAM,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACvF,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,SAAS,CAAC,IAAI,CAAC,CAAA;YACf,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAC/D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,8BAA8B,OAAO,EAAE,CACrF,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;gBACnB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvE,CAAC;YACF,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,OAAO;QACtC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,KAAK;QACtC,6BAA6B,EAAE,MAAM,CAAC,6BAA6B,IAAI,KAAK;KAC7E,CAAC,CAAA;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1F,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;QACxF,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE,YAAY,EAAE,sBAAsB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;YAC/D,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS;YAC/B,CAAC,CAAC;gBACE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;oBACtB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7E,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpF,CAAC;aACH;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS;YACjC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE;YACzE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAA;AACJ,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,wBAAwB,CACtC,KAAuD,EACvD,QAAgC;IAEhC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;IAC1C,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAgB,CAAC;QAAE,OAAO,KAAK,CAAA;IACpF,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,KAAK,CAAA;IACd,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC7E,OAAO,IAAI,CAAA;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,sBAAsB,CACpC,MAAe,EACf,WAA4B;IAE5B,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAuB,EAAE,CAAA;IACvC,MAAM,MAAM,GAAmB,EAAE,CAAA;IACjC,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAEvC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACzD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,oFAAoF;SAC9F,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAA;QACtC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,oBAAoB;oBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,yCAAyC;iBAChF,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;YAC7F,SAAQ;QACV,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACzE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACzE,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,gBAAgB,EAAE,EAAE;aACzE,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,uBAAuB,EAAE,EAAE;aAChF,CAAC,CAAA;QACJ,CAAC;QACD,oGAAoG;QACpG,uGAAuG;QACvG,4FAA4F;QAC5F,IACE,MAAM,CAAC,6BAA6B,KAAK,IAAI;YAC7C,QAAQ,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;YACjC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAChC,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,wBAAwB;gBAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,qDAAqD;aAC1G,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ;YACR,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;SACpC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;KAClC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in server integration for the per-request effect ledger.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from `@nifrajs/core/server` so a bare HTTP app does not evaluate or bundle ledger
|
|
5
|
+
* machinery. Import ledger primitives from `@nifrajs/core/ledger`.
|
|
6
|
+
*/
|
|
7
|
+
export type { EffectLedgerOptions } from "./ledger.js";
|
|
8
|
+
export { effectLedger } from "./server/ledger-lane.js";
|
|
9
|
+
//# sourceMappingURL=effect-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-ledger.d.ts","sourceRoot":"","sources":["../src/effect-ledger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in server integration for the per-request effect ledger.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from `@nifrajs/core/server` so a bare HTTP app does not evaluate or bundle ledger
|
|
5
|
+
* machinery. Import ledger primitives from `@nifrajs/core/ledger`.
|
|
6
|
+
*/
|
|
7
|
+
export { effectLedger } from "./server/ledger-lane.js";
|
|
8
|
+
//# sourceMappingURL=effect-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-ledger.js","sourceRoot":"","sources":["../src/effect-ledger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in server integration for request idempotency.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from `@nifrajs/core/server` so a bare HTTP app does not evaluate or bundle the
|
|
5
|
+
* dedupe lane. Import primitives and stores from `@nifrajs/core/idempotency`.
|
|
6
|
+
*/
|
|
7
|
+
export { type IdempotencyPluginOptions, idempotency } from "./server/idempotency-lane.js";
|
|
8
|
+
//# sourceMappingURL=idempotency-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency-plugin.d.ts","sourceRoot":"","sources":["../src/idempotency-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,wBAAwB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opt-in server integration for request idempotency.
|
|
3
|
+
*
|
|
4
|
+
* Kept separate from `@nifrajs/core/server` so a bare HTTP app does not evaluate or bundle the
|
|
5
|
+
* dedupe lane. Import primitives and stores from `@nifrajs/core/idempotency`.
|
|
6
|
+
*/
|
|
7
|
+
export { idempotency } from "./server/idempotency-lane.js";
|
|
8
|
+
//# sourceMappingURL=idempotency-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency-plugin.js","sourceRoot":"","sources":["../src/idempotency-plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAiC,WAAW,EAAE,MAAM,8BAA8B,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,44 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `@nifrajs/core` — Nifra's lean HTTP server API.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* the
|
|
4
|
+
* Nifra 2.0 keeps the package root intentionally lean. Optional systems live at documented
|
|
5
|
+
* subpaths so importing the root cannot activate unrelated runtimes.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
8
|
* Current package version. A hardcoded literal on purpose — core runs on the edge (no fs), so it can't
|
|
9
9
|
* read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
|
|
10
|
-
* `check:publish` asserts it equals `@nifrajs/core`'s package version
|
|
11
|
-
* (it shipped at "0.0.0" through 1.0.0 before those guards existed). Kept narrow (`as const`) so
|
|
12
|
-
* consumers can pin it at the type level — see `test/version.test-d.ts`.
|
|
10
|
+
* `check:publish` asserts it equals `@nifrajs/core`'s package version.
|
|
13
11
|
*/
|
|
14
|
-
export declare const VERSION: "
|
|
12
|
+
export declare const VERSION: "2.0.0";
|
|
15
13
|
export type Version = typeof VERSION;
|
|
16
|
-
export * from "./
|
|
17
|
-
export * from "./capabilities.js";
|
|
18
|
-
export * from "./causality.js";
|
|
19
|
-
export * from "./classification.js";
|
|
20
|
-
export * from "./diff.js";
|
|
21
|
-
export { FrameworkError, RouteConfigError, type RouteConfigErrorCode } from "./errors.js";
|
|
22
|
-
export * from "./idempotency.js";
|
|
23
|
-
export { FRAMEWORK_NAME, type FrameworkName } from "./internal/brand.js";
|
|
24
|
-
export * from "./invariants.js";
|
|
25
|
-
export * from "./ledger.js";
|
|
26
|
-
export * from "./manifest.js";
|
|
27
|
-
export * from "./mount.js";
|
|
28
|
-
export * from "./reflection.js";
|
|
29
|
-
export * from "./router/pattern.js";
|
|
30
|
-
export { METHODS, type Method, Router, type RouterMatch } from "./router/router.js";
|
|
31
|
-
export type { InferInput, InferOutput, StandardIssue, StandardResult, StandardSchemaV1, StandardTypes, ValidationOutcome, } from "./schema/standard.js";
|
|
32
|
-
export { validateStandard } from "./schema/standard.js";
|
|
33
|
-
export { type RobotsOptions, type RobotsRule, robots, type SitemapChangeFreq, type SitemapEntry, type SitemapOptions, sitemap, } from "./seo.js";
|
|
34
|
-
export type { Context, Params, Platform, Prettify, ResponseControls, RouteSchema, } from "./server/context.js";
|
|
35
|
-
export { type ContextForOp, type ContractShape, defineContract, type HandlersFor, implement, type OperationDef, type RegistryFor, type RegistryFromImpl, type ResponseDef, } from "./server/contract.js";
|
|
36
|
-
export { type CookieOptions, parseCookies, serializeCookie, signValue, unsignValue, } from "./server/cookies.js";
|
|
37
|
-
export { commonSecretPatterns, jsonLogger, type LogFields, type Logger, type RedactOptions, redactLogFields, silentLogger, } from "./server/logger.js";
|
|
38
|
-
export type { Registry, RouteInfo } from "./server/registry.js";
|
|
39
|
-
export { type AdmissionController, type AdmissionDecision, type AnyServer, type DurableObjectNamespaceLike, defineIdentityPlugin, definePlugin, defineRouterPlugin, type ExecutionContext, type Handler, type IdentityPlugin, type McpPromptDescriptor, type McpResourceDescriptor, type Middleware, type NifraPlugin, type NodeServeOutcome, type OnRequestResult, type PromptArgument, type PromptMessage, type ResponseFinalization, type RouteDescriptor, type RunningServer, type ScheduledController, type ScheduledHandler, Server, type ServerOptions, server, type ToolAnnotations, toFetchHandler, } from "./server/server.js";
|
|
40
|
-
export { type SSEContext, type SSEInit, type SSEMessage, type SSEStream, sse, type TypedSSEStream, typedSSEStream, } from "./server/sse.js";
|
|
41
|
-
export { type SignatureEncoding, type VerifyWebhookOptions, verifyWebhook, type WebhookFailureReason, type WebhookProvider, type WebhookResult, } from "./server/webhook.js";
|
|
42
|
-
export type { NifraWebSocket, StandardWebSocket, WebSocketContext, WebSocketData, WebSocketHandler, WebSocketUpgradeOutcome, } from "./server/websocket.js";
|
|
43
|
-
export { attachWebSocket, TopicRegistry } from "./server/websocket.js";
|
|
14
|
+
export * from "./server.js";
|
|
44
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAG,OAAgB,CAAA;AAEvC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAA;AAEpC,cAAc,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,39 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* `@nifrajs/core` — Nifra's lean HTTP server API.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* the
|
|
4
|
+
* Nifra 2.0 keeps the package root intentionally lean. Optional systems live at documented
|
|
5
|
+
* subpaths so importing the root cannot activate unrelated runtimes.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
8
|
* Current package version. A hardcoded literal on purpose — core runs on the edge (no fs), so it can't
|
|
9
9
|
* read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
|
|
10
|
-
* `check:publish` asserts it equals `@nifrajs/core`'s package version
|
|
11
|
-
* (it shipped at "0.0.0" through 1.0.0 before those guards existed). Kept narrow (`as const`) so
|
|
12
|
-
* consumers can pin it at the type level — see `test/version.test-d.ts`.
|
|
10
|
+
* `check:publish` asserts it equals `@nifrajs/core`'s package version.
|
|
13
11
|
*/
|
|
14
|
-
export const VERSION = "
|
|
15
|
-
export * from "./
|
|
16
|
-
export * from "./capabilities.js";
|
|
17
|
-
export * from "./causality.js";
|
|
18
|
-
export * from "./classification.js";
|
|
19
|
-
export * from "./diff.js";
|
|
20
|
-
export { FrameworkError, RouteConfigError } from "./errors.js";
|
|
21
|
-
export * from "./idempotency.js";
|
|
22
|
-
export { FRAMEWORK_NAME } from "./internal/brand.js";
|
|
23
|
-
export * from "./invariants.js";
|
|
24
|
-
export * from "./ledger.js";
|
|
25
|
-
export * from "./manifest.js";
|
|
26
|
-
export * from "./mount.js";
|
|
27
|
-
export * from "./reflection.js";
|
|
28
|
-
export * from "./router/pattern.js";
|
|
29
|
-
export { METHODS, Router } from "./router/router.js";
|
|
30
|
-
export { validateStandard } from "./schema/standard.js";
|
|
31
|
-
export { robots, sitemap, } from "./seo.js";
|
|
32
|
-
export { defineContract, implement, } from "./server/contract.js";
|
|
33
|
-
export { parseCookies, serializeCookie, signValue, unsignValue, } from "./server/cookies.js";
|
|
34
|
-
export { commonSecretPatterns, jsonLogger, redactLogFields, silentLogger, } from "./server/logger.js";
|
|
35
|
-
export { defineIdentityPlugin, definePlugin, defineRouterPlugin, Server, server, toFetchHandler, } from "./server/server.js";
|
|
36
|
-
export { sse, typedSSEStream, } from "./server/sse.js";
|
|
37
|
-
export { verifyWebhook, } from "./server/webhook.js";
|
|
38
|
-
export { attachWebSocket, TopicRegistry } from "./server/websocket.js";
|
|
12
|
+
export const VERSION = "2.0.0";
|
|
13
|
+
export * from "./server.js";
|
|
39
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAgB,CAAA;AAIvC,cAAc,aAAa,CAAA"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { IdentityPlugin } from "./server/plugin.js";
|
|
2
|
+
/**
|
|
3
|
+
* Enable MCP declarations on a server: `.use(mcp())` turns on `.tool()`, `.resource()`, and
|
|
4
|
+
* `.prompt()`. Applying it twice is a no-op (named plugin dedupe).
|
|
5
|
+
*/
|
|
6
|
+
export declare function mcp(): IdentityPlugin;
|
|
7
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AA4CxD;;;GAGG;AACH,wBAAgB,GAAG,IAAI,cAAc,CAMpC"}
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The opt-in MCP runtime plugin.
|
|
3
|
+
*
|
|
4
|
+
* `.use(mcp())` enables `.tool()`, `.resource()`, and `.prompt()`. Without it those methods throw at
|
|
5
|
+
* registration (fail-closed), so an ordinary HTTP app never evaluates or bundles the MCP wiring. This
|
|
6
|
+
* is the same install seam as `.use(idempotency())` / `.use(effectLedger())` - one consistent `.use()`
|
|
7
|
+
* opt-in, not a side-effect import.
|
|
8
|
+
*/
|
|
9
|
+
import { INSTALL_MCP } from "./server/install.js";
|
|
10
|
+
const MCP_RUNTIME = {
|
|
11
|
+
tool(name, config, handler) {
|
|
12
|
+
const path = `/_nifra/tool/${name}`;
|
|
13
|
+
return {
|
|
14
|
+
path,
|
|
15
|
+
schema: config.output !== undefined
|
|
16
|
+
? { body: config.input, response: config.output }
|
|
17
|
+
: { body: config.input },
|
|
18
|
+
run: (context) => handler(context.body, context),
|
|
19
|
+
descriptor: {
|
|
20
|
+
name,
|
|
21
|
+
description: config.description,
|
|
22
|
+
...(config.annotations !== undefined ? { annotations: config.annotations } : {}),
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
resource(uri, config, read) {
|
|
27
|
+
return {
|
|
28
|
+
uri,
|
|
29
|
+
name: config.name,
|
|
30
|
+
...(config.description !== undefined ? { description: config.description } : {}),
|
|
31
|
+
...(config.mimeType !== undefined ? { mimeType: config.mimeType } : {}),
|
|
32
|
+
read,
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
prompt(name, config, handler) {
|
|
36
|
+
return {
|
|
37
|
+
name,
|
|
38
|
+
description: config.description,
|
|
39
|
+
...(config.arguments !== undefined ? { arguments: config.arguments } : {}),
|
|
40
|
+
handler,
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Enable MCP declarations on a server: `.use(mcp())` turns on `.tool()`, `.resource()`, and
|
|
46
|
+
* `.prompt()`. Applying it twice is a no-op (named plugin dedupe).
|
|
47
|
+
*/
|
|
48
|
+
export function mcp() {
|
|
49
|
+
const apply = (app) => {
|
|
50
|
+
;
|
|
51
|
+
app[INSTALL_MCP](MCP_RUNTIME);
|
|
52
|
+
return app;
|
|
53
|
+
};
|
|
54
|
+
return Object.assign(apply, { pluginName: "nifra:mcp" });
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,MAAM,WAAW,GAAe;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO;QACxB,MAAM,IAAI,GAAG,gBAAgB,IAAI,EAAE,CAAA;QACnC,OAAO;YACL,IAAI;YACJ,MAAM,EACJ,MAAM,CAAC,MAAM,KAAK,SAAS;gBACzB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;gBACjD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;YAC5B,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YAChD,UAAU,EAAE;gBACV,IAAI;gBACJ,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjF;SACF,CAAA;IACH,CAAC;IACD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI;QACxB,OAAO;YACL,GAAG;YACH,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,IAAI;SACL,CAAA;IACH,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO;QAC1B,OAAO;YACL,IAAI;YACJ,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO;SACR,CAAA;IACH,CAAC;CACF,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,GAAG;IACjB,MAAM,KAAK,GAAG,CAAsB,GAAM,EAAK,EAAE;QAC/C,CAAC;QAAC,GAAiC,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAA;QAC7D,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAmB,CAAA;AAC5E,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IdentityPlugin } from "./server/plugin.js";
|
|
2
|
+
/** Enable `app.resolveNode()` for direct callers. Applying it twice is a no-op (named plugin dedupe). */
|
|
3
|
+
export declare function nodeDirect(): IdentityPlugin;
|
|
4
|
+
export type { NodeServeOutcome } from "./server/node-outcome.js";
|
|
5
|
+
//# sourceMappingURL=node-direct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-direct.d.ts","sourceRoot":"","sources":["../src/node-direct.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAiBxD,yGAAyG;AACzG,wBAAgB,UAAU,IAAI,cAAc,CAM3C;AAED,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The opt-in Node-direct renderer plugin.
|
|
3
|
+
*
|
|
4
|
+
* `.use(nodeDirect())` enables `app.resolveNode()` for callers that invoke it themselves. Normal
|
|
5
|
+
* `@nifrajs/node` serving supplies the renderer directly, so it never needs this; only direct
|
|
6
|
+
* `resolveNode()` callers do. Same `.use()` install seam as `mcp()` / `idempotency()`.
|
|
7
|
+
*/
|
|
8
|
+
import { INSTALL_NODE_DIRECT } from "./server/install.js";
|
|
9
|
+
import { nodeOutcomeFromResponse, toNodeOutcome } from "./server/node-outcome.js";
|
|
10
|
+
const NODE_OUTCOME_RUNTIME = {
|
|
11
|
+
toOutcome: toNodeOutcome,
|
|
12
|
+
fromResponse: nodeOutcomeFromResponse,
|
|
13
|
+
timeout: () => ({
|
|
14
|
+
kind: "response",
|
|
15
|
+
response: Response.json({ ok: false, error: "request_timeout" }, { status: 503 }),
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
/** Enable `app.resolveNode()` for direct callers. Applying it twice is a no-op (named plugin dedupe). */
|
|
19
|
+
export function nodeDirect() {
|
|
20
|
+
const apply = (app) => {
|
|
21
|
+
;
|
|
22
|
+
app[INSTALL_NODE_DIRECT](NODE_OUTCOME_RUNTIME);
|
|
23
|
+
return app;
|
|
24
|
+
};
|
|
25
|
+
return Object.assign(apply, { pluginName: "nifra:node-direct" });
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=node-direct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-direct.js","sourceRoot":"","sources":["../src/node-direct.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAKjF,MAAM,oBAAoB,GAAuB;IAC/C,SAAS,EAAE,aAAa;IACxB,YAAY,EAAE,uBAAuB;IACrC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACd,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;KAClF,CAAC;CACH,CAAA;AAOD,yGAAyG;AACzG,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,CAAsB,GAAM,EAAK,EAAE;QAC/C,CAAC;QAAC,GAAwC,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,CAAA;QACrF,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,CAAmB,CAAA;AACpF,CAAC"}
|
package/dist/reflection.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export interface SchemaReflection {
|
|
|
30
30
|
export interface ReflectedRouteSchema {
|
|
31
31
|
readonly body?: SchemaReflection;
|
|
32
32
|
readonly query?: SchemaReflection;
|
|
33
|
+
/** Path-params schema — constraints (uuid format, integer min/max) declared via `params: t.object(…)`. */
|
|
34
|
+
readonly params?: SchemaReflection;
|
|
33
35
|
readonly response?: SchemaReflection;
|
|
34
36
|
readonly errors?: Readonly<Record<string, SchemaReflection>>;
|
|
35
37
|
/** The SSE event-payload schema of a typed streaming route (`app.sse()`). */
|
|
@@ -41,6 +43,9 @@ export interface ReflectedRoute {
|
|
|
41
43
|
readonly schema?: ReflectedRouteSchema;
|
|
42
44
|
readonly assurance?: readonly AssuranceEvidence[];
|
|
43
45
|
readonly capabilities?: readonly string[];
|
|
46
|
+
/** Set when the route is a declared dynamic route family (a runtime-resolved template like
|
|
47
|
+
* `/api/:slug/:resource`) - so the assurance gate treats it as one classified family, not a single route. */
|
|
48
|
+
readonly family?: boolean;
|
|
44
49
|
/** Field-level response classification plus the highest sensitivity present. */
|
|
45
50
|
readonly classification?: ResponseClassification;
|
|
46
51
|
readonly tool?: {
|
package/dist/reflection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,sBAAsB,EAE5B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,KAAK,iBAAiB,EAAiB,MAAM,+BAA+B,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEpE,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAC/C,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;IAC3C,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,CAAA;CAC7D;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC5D,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,gFAAgF;IAChF,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAA;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;KACvC,CAAA;CACF;AAyED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAI9D;
|
|
1
|
+
{"version":3,"file":"reflection.d.ts","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,sBAAsB,EAE5B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,KAAK,iBAAiB,EAAiB,MAAM,+BAA+B,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEzD,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAEpE,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAC/C,0FAA0F;IAC1F,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;IAC3C,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,GAAG,SAAS,CAAA;CAC7D;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAA;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACjC,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC5D,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACjD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC;iHAC6G;IAC7G,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,gFAAgF;IAChF,QAAQ,CAAC,cAAc,CAAC,EAAE,sBAAsB,CAAA;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;KACvC,CAAA;CACF;AAyED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAI9D;AAsDD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,cAAc,EAAE,CA2BxE"}
|
package/dist/reflection.js
CHANGED
|
@@ -116,6 +116,7 @@ const reflectedRouteSchema = (value) => {
|
|
|
116
116
|
return {
|
|
117
117
|
...(schema.body !== undefined ? { body: reflectSchema(schema.body) } : {}),
|
|
118
118
|
...(schema.query !== undefined ? { query: reflectSchema(schema.query) } : {}),
|
|
119
|
+
...(schema.params !== undefined ? { params: reflectSchema(schema.params) } : {}),
|
|
119
120
|
...(schema.response !== undefined ? { response: reflectSchema(schema.response) } : {}),
|
|
120
121
|
...(Object.keys(reflectedErrors).length > 0 ? { errors: reflectedErrors } : {}),
|
|
121
122
|
...(schema.sse !== undefined ? { sse: reflectSchema(schema.sse) } : {}),
|
|
@@ -165,6 +166,7 @@ export function reflectRoutes(source) {
|
|
|
165
166
|
...(schema !== undefined ? { schema } : {}),
|
|
166
167
|
...(assurance !== undefined ? { assurance } : {}),
|
|
167
168
|
...(capabilities.length > 0 ? { capabilities } : {}),
|
|
169
|
+
...(route.family === true ? { family: true } : {}),
|
|
168
170
|
...(classification !== undefined ? { classification } : {}),
|
|
169
171
|
...(tool !== undefined ? { tool } : {}),
|
|
170
172
|
});
|
package/dist/reflection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflection.js","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,oBAAoB,EAEpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,EAA0B,aAAa,EAAE,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"reflection.js","sourceRoot":"","sources":["../src/reflection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deriving the caller's IP (`c.clientIp`), correctly and vendor-neutrally.
|
|
3
|
+
*
|
|
4
|
+
* The default is the raw socket peer the serving adapter observed - the only value that cannot be
|
|
5
|
+
* forged by a client, since the client never controls who the TCP connection comes from. Behind a
|
|
6
|
+
* reverse proxy or CDN the socket peer is the proxy, not the caller, so a `Forwarded`/`X-Forwarded-For`
|
|
7
|
+
* value must be consulted - but ONLY as far as you actually trust the hops in front of you, because a
|
|
8
|
+
* directly-reachable app lets any client forge those headers. The trust is therefore an explicit,
|
|
9
|
+
* opt-in declaration; with none set, `c.clientIp` is the socket peer and no header is ever believed.
|
|
10
|
+
*
|
|
11
|
+
* No vendor names live here: a Cloudflare/Fastly/nginx deployment declares its own header or hop count.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* How much of the forwarding chain to trust when deriving `c.clientIp`. Omit for the safe default
|
|
15
|
+
* (socket peer only, no header believed).
|
|
16
|
+
*
|
|
17
|
+
* - `{ trustedHops: n }` - trust `n` reverse-proxy hops in front of the app. The caller is taken from
|
|
18
|
+
* `X-Forwarded-For` counted from the right past the `n` trusted hops (the socket peer is hop 0). Use
|
|
19
|
+
* this when the app sits behind `n` proxies **you operate**. Fewer entries than trusted hops means
|
|
20
|
+
* the header is too short to trust, so `c.clientIp` is `undefined` (fail closed).
|
|
21
|
+
* - `{ header: name }` - trust a single named header's first value (e.g. a CDN that overwrites it at
|
|
22
|
+
* the edge). Only declare this when the app is reachable **exclusively** through that edge; a
|
|
23
|
+
* directly-reachable app lets any client forge the header.
|
|
24
|
+
*/
|
|
25
|
+
export type ClientIpTrust = {
|
|
26
|
+
readonly trustedHops: number;
|
|
27
|
+
} | {
|
|
28
|
+
readonly header: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the caller IP from the raw socket `peer` (adapter-observed), the request's forwarding
|
|
32
|
+
* headers, and the app's `trust` declaration. Pure and synchronous.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveClientIp(peer: string | undefined, req: Request, trust: ClientIpTrust | undefined): string | undefined;
|
|
35
|
+
//# sourceMappingURL=client-ip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-ip.d.ts","sourceRoot":"","sources":["../../src/server/client-ip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAS1F;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,aAAa,GAAG,SAAS,GAC/B,MAAM,GAAG,SAAS,CAiBpB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deriving the caller's IP (`c.clientIp`), correctly and vendor-neutrally.
|
|
3
|
+
*
|
|
4
|
+
* The default is the raw socket peer the serving adapter observed - the only value that cannot be
|
|
5
|
+
* forged by a client, since the client never controls who the TCP connection comes from. Behind a
|
|
6
|
+
* reverse proxy or CDN the socket peer is the proxy, not the caller, so a `Forwarded`/`X-Forwarded-For`
|
|
7
|
+
* value must be consulted - but ONLY as far as you actually trust the hops in front of you, because a
|
|
8
|
+
* directly-reachable app lets any client forge those headers. The trust is therefore an explicit,
|
|
9
|
+
* opt-in declaration; with none set, `c.clientIp` is the socket peer and no header is ever believed.
|
|
10
|
+
*
|
|
11
|
+
* No vendor names live here: a Cloudflare/Fastly/nginx deployment declares its own header or hop count.
|
|
12
|
+
*/
|
|
13
|
+
function firstHeaderValue(req, header) {
|
|
14
|
+
const raw = req.headers.get(header);
|
|
15
|
+
if (raw === null)
|
|
16
|
+
return undefined;
|
|
17
|
+
const first = raw.split(",", 1)[0]?.trim();
|
|
18
|
+
return first === undefined || first === "" ? undefined : first;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the caller IP from the raw socket `peer` (adapter-observed), the request's forwarding
|
|
22
|
+
* headers, and the app's `trust` declaration. Pure and synchronous.
|
|
23
|
+
*/
|
|
24
|
+
export function resolveClientIp(peer, req, trust) {
|
|
25
|
+
if (trust === undefined)
|
|
26
|
+
return peer;
|
|
27
|
+
if ("header" in trust)
|
|
28
|
+
return firstHeaderValue(req, trust.header);
|
|
29
|
+
// trustedHops: walk `X-Forwarded-For` (client-most first) plus the socket peer as the closest hop.
|
|
30
|
+
const xff = req.headers.get("x-forwarded-for");
|
|
31
|
+
const forwarded = xff === null
|
|
32
|
+
? []
|
|
33
|
+
: xff
|
|
34
|
+
.split(",")
|
|
35
|
+
.map((entry) => entry.trim())
|
|
36
|
+
.filter((entry) => entry !== "");
|
|
37
|
+
const chain = peer !== undefined ? [...forwarded, peer] : forwarded;
|
|
38
|
+
// The caller sits just left of the `trustedHops` trusted proxies at the tail of the chain.
|
|
39
|
+
const index = chain.length - 1 - trust.trustedHops;
|
|
40
|
+
return index >= 0 ? chain[index] : undefined;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=client-ip.js.map
|