@nifrajs/core 1.9.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/assurance.d.ts +18 -0
  2. package/dist/assurance.d.ts.map +1 -1
  3. package/dist/assurance.js +28 -1
  4. package/dist/assurance.js.map +1 -1
  5. package/dist/budget.d.ts +91 -0
  6. package/dist/budget.d.ts.map +1 -0
  7. package/dist/budget.js +172 -0
  8. package/dist/budget.js.map +1 -0
  9. package/dist/capabilities.d.ts +146 -0
  10. package/dist/capabilities.d.ts.map +1 -0
  11. package/dist/capabilities.js +283 -0
  12. package/dist/capabilities.js.map +1 -0
  13. package/dist/classification.d.ts +39 -0
  14. package/dist/classification.d.ts.map +1 -0
  15. package/dist/classification.js +153 -0
  16. package/dist/classification.js.map +1 -0
  17. package/dist/errors.d.ts +1 -1
  18. package/dist/errors.d.ts.map +1 -1
  19. package/dist/errors.js.map +1 -1
  20. package/dist/idempotency.d.ts +137 -0
  21. package/dist/idempotency.d.ts.map +1 -0
  22. package/dist/idempotency.js +306 -0
  23. package/dist/idempotency.js.map +1 -0
  24. package/dist/index.d.ts +8 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +8 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/internal/capability-runtime.d.ts +16 -0
  29. package/dist/internal/capability-runtime.d.ts.map +1 -0
  30. package/dist/internal/capability-runtime.js +27 -0
  31. package/dist/internal/capability-runtime.js.map +1 -0
  32. package/dist/internal/route-assurance.d.ts +1 -0
  33. package/dist/internal/route-assurance.d.ts.map +1 -1
  34. package/dist/internal/route-assurance.js +1 -0
  35. package/dist/internal/route-assurance.js.map +1 -1
  36. package/dist/invariants.d.ts +66 -0
  37. package/dist/invariants.d.ts.map +1 -0
  38. package/dist/invariants.js +483 -0
  39. package/dist/invariants.js.map +1 -0
  40. package/dist/ledger.d.ts +154 -0
  41. package/dist/ledger.d.ts.map +1 -0
  42. package/dist/ledger.js +271 -0
  43. package/dist/ledger.js.map +1 -0
  44. package/dist/manifest.d.ts +81 -0
  45. package/dist/manifest.d.ts.map +1 -0
  46. package/dist/manifest.js +394 -0
  47. package/dist/manifest.js.map +1 -0
  48. package/dist/mount.d.ts +18 -0
  49. package/dist/mount.d.ts.map +1 -0
  50. package/dist/mount.js +11 -0
  51. package/dist/mount.js.map +1 -0
  52. package/dist/reflection.d.ts +4 -0
  53. package/dist/reflection.d.ts.map +1 -1
  54. package/dist/reflection.js +9 -0
  55. package/dist/reflection.js.map +1 -1
  56. package/dist/server/context.d.ts +50 -1
  57. package/dist/server/context.d.ts.map +1 -1
  58. package/dist/server/contract.d.ts +8 -1
  59. package/dist/server/contract.d.ts.map +1 -1
  60. package/dist/server/contract.js +11 -1
  61. package/dist/server/contract.js.map +1 -1
  62. package/dist/server/server.d.ts +56 -2
  63. package/dist/server/server.d.ts.map +1 -1
  64. package/dist/server/server.js +294 -17
  65. package/dist/server/server.js.map +1 -1
  66. package/package.json +36 -4
  67. package/src/assurance.ts +48 -1
  68. package/src/budget.ts +267 -0
  69. package/src/capabilities.ts +486 -0
  70. package/src/classification.ts +189 -0
  71. package/src/errors.ts +2 -0
  72. package/src/idempotency.ts +420 -0
  73. package/src/index.ts +8 -1
  74. package/src/internal/capability-runtime.ts +49 -0
  75. package/src/internal/route-assurance.ts +1 -0
  76. package/src/invariants.ts +600 -0
  77. package/src/ledger.ts +430 -0
  78. package/src/manifest.ts +543 -0
  79. package/src/mount.ts +24 -0
  80. package/src/reflection.ts +18 -0
  81. package/src/server/context.ts +54 -1
  82. package/src/server/contract.ts +19 -2
  83. package/src/server/server.ts +463 -26
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Route effect/capability assurance. Declarations are reflected at build/CI time; runtime beacons
3
+ * are a fail-closed defence at owned effect seams. Static provenance remains the security anchor.
4
+ */
5
+ import { CAPABILITY_GUARD, validCapabilityId, } from "./internal/capability-runtime.js";
6
+ import { NIFRA_ASSURANCE_IDS } from "./internal/route-assurance.js";
7
+ import { effectLedgerOf } from "./ledger.js";
8
+ import { reflectRoutes } from "./reflection.js";
9
+ const SAFE_METHODS = new Set(["GET", "HEAD"]);
10
+ export { validCapabilityId };
11
+ function normalizedIds(values, label) {
12
+ if (!Array.isArray(values))
13
+ throw new TypeError(`${label} must be an array`);
14
+ const out = [];
15
+ const seen = new Set();
16
+ for (const value of values) {
17
+ if (typeof value !== "string" || !validCapabilityId(value)) {
18
+ throw new Error(`capability assurance: invalid ${label} id ${JSON.stringify(value)}`);
19
+ }
20
+ if (!seen.has(value)) {
21
+ seen.add(value);
22
+ out.push(value);
23
+ }
24
+ }
25
+ return Object.freeze(out);
26
+ }
27
+ function validSpecifier(value) {
28
+ return value.trim() === value && value !== "" && !hasControlCharacter(value);
29
+ }
30
+ function hasControlCharacter(value) {
31
+ for (let index = 0; index < value.length; index++) {
32
+ const code = value.charCodeAt(index);
33
+ if (code <= 31 || code === 127)
34
+ return true;
35
+ }
36
+ return false;
37
+ }
38
+ /** Validate and freeze a capability/provenance policy. */
39
+ export function defineCapabilityPolicy(policy) {
40
+ if (policy.provenance === undefined || policy.provenance === null) {
41
+ throw new Error("capability assurance: provenance policy is required");
42
+ }
43
+ const ids = new Set();
44
+ const definitions = policy.definitions.map((definition) => {
45
+ if (!validCapabilityId(definition.id)) {
46
+ throw new Error(`capability assurance: invalid capability id ${JSON.stringify(definition.id)}`);
47
+ }
48
+ if (ids.has(definition.id)) {
49
+ throw new Error(`capability assurance: duplicate capability ${JSON.stringify(definition.id)}`);
50
+ }
51
+ ids.add(definition.id);
52
+ if (definition.zone !== "domain" && definition.zone !== "operational") {
53
+ throw new Error(`capability assurance: invalid zone for ${definition.id}`);
54
+ }
55
+ if (definition.access !== "read" && definition.access !== "write") {
56
+ throw new Error(`capability assurance: invalid access for ${definition.id}`);
57
+ }
58
+ const idempotency = definition.idempotency ?? "none";
59
+ if (idempotency !== "none" && idempotency !== "request" && idempotency !== "durable") {
60
+ throw new Error(`capability assurance: invalid idempotency for ${definition.id}`);
61
+ }
62
+ if (definition.access === "read" && idempotency !== "none") {
63
+ throw new Error(`capability assurance: read capability ${definition.id} cannot require idempotency`);
64
+ }
65
+ return Object.freeze({ ...definition, idempotency });
66
+ });
67
+ const imports = policy.provenance.imports.map((rule) => {
68
+ if (!validSpecifier(rule.specifier))
69
+ throw new Error("capability assurance: invalid import specifier");
70
+ const capabilities = normalizedIds(rule.capabilities, "import capability");
71
+ for (const id of capabilities) {
72
+ if (!ids.has(id))
73
+ throw new Error(`capability assurance: import references unknown ${id}`);
74
+ }
75
+ return Object.freeze({ specifier: rule.specifier, capabilities });
76
+ });
77
+ const forbiddenImports = policy.provenance.forbiddenImports.map((rule) => {
78
+ if (!validSpecifier(rule.specifier) || rule.reason.trim() === "") {
79
+ throw new Error("capability assurance: forbidden import needs a specifier and reason");
80
+ }
81
+ return Object.freeze({ specifier: rule.specifier, reason: rule.reason.trim() });
82
+ });
83
+ const routeModules = policy.provenance.routeModules?.map((rule) => {
84
+ if (!Array.isArray(rule.modules) || rule.modules.length === 0) {
85
+ throw new Error("capability assurance: routeModules entry needs at least one module");
86
+ }
87
+ const modules = rule.modules.map((module) => {
88
+ if (!validSpecifier(module))
89
+ throw new Error("capability assurance: invalid route module");
90
+ return module.replace(/^\.\//, "");
91
+ });
92
+ return Object.freeze({
93
+ match: Object.freeze({
94
+ ...(rule.match.methods !== undefined
95
+ ? { methods: Object.freeze(rule.match.methods.map((method) => method.toUpperCase())) }
96
+ : {}),
97
+ ...(rule.match.paths !== undefined ? { paths: Object.freeze([...rule.match.paths]) } : {}),
98
+ }),
99
+ modules: Object.freeze(modules),
100
+ });
101
+ });
102
+ return Object.freeze({
103
+ definitions: Object.freeze(definitions),
104
+ provenance: Object.freeze({
105
+ imports: Object.freeze(imports),
106
+ forbiddenImports: Object.freeze(forbiddenImports),
107
+ ...(routeModules !== undefined ? { routeModules: Object.freeze(routeModules) } : {}),
108
+ }),
109
+ lockfile: policy.lockfile ?? "capabilities.lock.json",
110
+ });
111
+ }
112
+ function evidenceSourceValid(source) {
113
+ return source.length > 0 && source.length <= 256 && !hasControlCharacter(source);
114
+ }
115
+ function routeKey(method, path) {
116
+ return `${method.toUpperCase()}\n${path}`;
117
+ }
118
+ /** Compare declared route capabilities against coverage-qualified static/runtime evidence. */
119
+ export function evaluateCapabilityAssurance(source, policyInput, evidenceSet) {
120
+ const policy = defineCapabilityPolicy(policyInput);
121
+ const definitions = new Map(policy.definitions.map((definition) => [definition.id, definition]));
122
+ const evidenceByRoute = new Map(evidenceSet.routes.map((route) => [routeKey(route.method, route.path), route]));
123
+ const findings = [];
124
+ const routes = [];
125
+ for (const route of reflectRoutes(source)) {
126
+ const declared = route.capabilities ?? [];
127
+ const supplied = evidenceByRoute.get(routeKey(route.method, route.path));
128
+ const covered = supplied?.covered === true;
129
+ const evidence = [];
130
+ const evidenceIds = new Set();
131
+ for (const item of supplied?.evidence ?? []) {
132
+ if (!validCapabilityId(item.id) ||
133
+ (item.kind !== "static" && item.kind !== "runtime") ||
134
+ !evidenceSourceValid(item.source)) {
135
+ continue;
136
+ }
137
+ const key = `${item.id}\n${item.kind}\n${item.source}`;
138
+ if (evidence.some((candidate) => `${candidate.id}\n${candidate.kind}\n${candidate.source}` === key))
139
+ continue;
140
+ evidence.push(Object.freeze({ id: item.id, kind: item.kind, source: item.source }));
141
+ evidenceIds.add(item.id);
142
+ }
143
+ for (const id of declared) {
144
+ if (!definitions.has(id)) {
145
+ findings.push({
146
+ code: "unknown-capability",
147
+ method: route.method,
148
+ path: route.path,
149
+ capability: id,
150
+ message: `${route.method} ${route.path} declares unknown capability ${id}`,
151
+ });
152
+ }
153
+ }
154
+ if (!covered) {
155
+ findings.push({
156
+ code: "provenance-uncovered",
157
+ method: route.method,
158
+ path: route.path,
159
+ message: `${route.method} ${route.path} has no static provenance coverage`,
160
+ });
161
+ }
162
+ for (const id of evidenceIds) {
163
+ if (!declared.includes(id)) {
164
+ findings.push({
165
+ code: "undeclared-capability-evidence",
166
+ method: route.method,
167
+ path: route.path,
168
+ capability: id,
169
+ message: `${route.method} ${route.path} evidence exceeds its declaration: ${id}`,
170
+ });
171
+ }
172
+ }
173
+ const effective = new Set([...declared, ...evidenceIds]);
174
+ const assuranceIds = new Set((route.assurance ?? []).map((item) => item.id));
175
+ for (const id of effective) {
176
+ const definition = definitions.get(id);
177
+ if (definition === undefined)
178
+ continue;
179
+ if (SAFE_METHODS.has(route.method) &&
180
+ definition.zone === "domain" &&
181
+ definition.access === "write") {
182
+ findings.push({
183
+ code: "safe-method-domain-write",
184
+ method: route.method,
185
+ path: route.path,
186
+ capability: id,
187
+ message: `${route.method} ${route.path} cannot carry domain write capability ${id}`,
188
+ });
189
+ }
190
+ if (definition.idempotency === "request" &&
191
+ !assuranceIds.has(NIFRA_ASSURANCE_IDS.IDEMPOTENCY_KEY)) {
192
+ findings.push({
193
+ code: "missing-request-idempotency",
194
+ method: route.method,
195
+ path: route.path,
196
+ capability: id,
197
+ message: `${route.method} ${route.path} capability ${id} requires request idempotency evidence`,
198
+ });
199
+ }
200
+ if (definition.idempotency === "durable" &&
201
+ !assuranceIds.has(NIFRA_ASSURANCE_IDS.DURABLE_COMMAND)) {
202
+ findings.push({
203
+ code: "missing-durable-idempotency",
204
+ method: route.method,
205
+ path: route.path,
206
+ capability: id,
207
+ message: `${route.method} ${route.path} capability ${id} requires durable command/provider-key evidence`,
208
+ });
209
+ }
210
+ }
211
+ routes.push(Object.freeze({
212
+ method: route.method,
213
+ path: route.path,
214
+ declared: Object.freeze([...declared]),
215
+ evidence: Object.freeze(evidence),
216
+ unproven: Object.freeze(declared.filter((id) => !evidenceIds.has(id))),
217
+ covered,
218
+ ...(route.classification !== undefined ? { classification: route.classification.max } : {}),
219
+ }));
220
+ }
221
+ return Object.freeze({
222
+ ok: findings.length === 0,
223
+ routes: Object.freeze(routes),
224
+ findings: Object.freeze(findings),
225
+ });
226
+ }
227
+ function guardFor(context, capability) {
228
+ if (!validCapabilityId(capability)) {
229
+ throw new Error(`capability assurance: invalid runtime capability ${JSON.stringify(capability)}`);
230
+ }
231
+ const guard = context[CAPABILITY_GUARD];
232
+ if (guard === undefined) {
233
+ throw new Error(`capability assurance: ${capability} used on a route with no capability declaration`);
234
+ }
235
+ if (!guard.allowed.includes(capability)) {
236
+ throw new Error(`capability assurance: ${capability} is not declared for ${guard.method} ${guard.path}`);
237
+ }
238
+ return guard;
239
+ }
240
+ /**
241
+ * Runtime effect beacon for owned adapters. It fails closed when the route omitted the capability or
242
+ * when no route guard is present. Static provenance is still required: code can bypass a beacon.
243
+ * When the server enabled the effect ledger, each beacon call also appends one token-only entry.
244
+ */
245
+ export function useCapability(context, capability, options) {
246
+ const guard = guardFor(context, capability);
247
+ const ledger = effectLedgerOf(context);
248
+ // Validate/append the intent before private admission hooks debit budgets. Overflow or malformed
249
+ // evidence therefore cannot consume quota and then fail the request.
250
+ ledger?.append({ capability, ...options, phase: "intent" });
251
+ guard.onUse?.({ capability, method: guard.method, path: guard.path });
252
+ }
253
+ /** Record the terminal outcome of an already-admitted capability without debiting admission twice. */
254
+ export function recordCapabilityOutcome(context, capability, options) {
255
+ guardFor(context, capability);
256
+ const ledger = effectLedgerOf(context);
257
+ if (ledger === undefined)
258
+ return;
259
+ ledger.append({ capability, ...options });
260
+ }
261
+ /**
262
+ * Read the route's token-only declaration for admission plugins. This intentionally exposes neither
263
+ * the request nor runtime evidence; it is the stable public seam for private entitlement policy.
264
+ */
265
+ export function declaredCapabilities(context) {
266
+ const guard = context[CAPABILITY_GUARD];
267
+ return guard?.allowed ?? Object.freeze([]);
268
+ }
269
+ /** Deterministic, PII-free lockfile material. */
270
+ export function snapshotCapabilities(report) {
271
+ const routes = report.routes
272
+ .map((route) => ({
273
+ method: route.method,
274
+ path: route.path,
275
+ declared: Object.freeze([...route.declared].sort()),
276
+ evidenced: Object.freeze([...new Set(route.evidence.map((item) => item.id))].sort()),
277
+ unproven: Object.freeze([...route.unproven].sort()),
278
+ ...(route.classification !== undefined ? { classification: route.classification } : {}),
279
+ }))
280
+ .sort((a, b) => a.path.localeCompare(b.path) || a.method.localeCompare(b.method));
281
+ return Object.freeze({ nifraCapabilities: 1, routes: Object.freeze(routes) });
282
+ }
283
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Response data-classification tags. A route can declare the highest sensitivity its response body
3
+ * carries (`schema.classification`). This is a declarative, compile-time + introspection fact — never
4
+ * read on the request hot path and never enforced at runtime here. Downstream consumers use it: a
5
+ * partner-API surface refuses to expose a route whose response is `pii`/`secret`, privacy tooling
6
+ * learns which routes emit regulated data, and the capability lockfile records it so a route that
7
+ * *starts* returning PII flips the lockfile and forces a review.
8
+ */
9
+ /** Sensitivity of the data a response carries. Ordered `public` < `pii` < `secret`. */
10
+ export type DataClassification = "public" | "pii" | "secret";
11
+ /** Field paths use JSON Pointer segments; array items use a `*` segment. */
12
+ export interface ResponseClassification {
13
+ readonly fields: Readonly<Record<string, DataClassification>>;
14
+ readonly max: DataClassification;
15
+ }
16
+ declare const CLASSIFICATION: unique symbol;
17
+ export type ClassifiedSchema<S extends object> = S & {
18
+ readonly [CLASSIFICATION]: DataClassification;
19
+ };
20
+ /** Total order over classifications; higher = more sensitive. */
21
+ export declare const DATA_CLASSIFICATION_RANK: Readonly<Record<DataClassification, number>>;
22
+ /** Whether `value` is a known classification token. */
23
+ export declare function isDataClassification(value: unknown): value is DataClassification;
24
+ /** The most sensitive classification among the inputs; `"public"` when none are given. */
25
+ export declare function maxClassification(values: Iterable<DataClassification>): DataClassification;
26
+ /** True when `value` is at least as sensitive as `floor` (e.g. `classificationAtLeast(x, "pii")`). */
27
+ export declare function classificationAtLeast(value: DataClassification, floor: DataClassification): boolean;
28
+ /**
29
+ * Attach data-classification metadata without changing validation or inferred input/output types.
30
+ * For Nifra/TypeBox carriers the raw JSON Schema node is tagged too, so metadata survives composition
31
+ * through `t.object`, `t.array`, `t.optional`, and unions.
32
+ */
33
+ export declare function classified<S extends object>(schema: S, classification: DataClassification): ClassifiedSchema<S>;
34
+ /** Read field-level metadata from an introspectable response schema. Never invokes its validator. */
35
+ export declare function reflectClassification(schema: unknown): ResponseClassification | undefined;
36
+ /** Merge field metadata with an optional route-level sensitivity fallback. */
37
+ export declare function routeClassification(responseSchema: unknown, fallback: DataClassification | undefined): ResponseClassification | undefined;
38
+ export {};
39
+ //# sourceMappingURL=classification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification.d.ts","sourceRoot":"","sources":["../src/classification.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,uFAAuF;AACvF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE5D,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;IAC7D,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAA;CACjC;AAED,QAAA,MAAM,cAAc,eAA0C,CAAA;AAQ9D,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG;IACnD,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAA;CAC9C,CAAA;AAED,iEAAiE;AACjE,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAMjF,CAAA;AAID,uDAAuD;AACvD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAEhF;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAM1F;AAED,sGAAsG;AACtG,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAET;AAuBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EACzC,MAAM,EAAE,CAAC,EACT,cAAc,EAAE,kBAAkB,GACjC,gBAAgB,CAAC,CAAC,CAAC,CAerB;AAiBD,qGAAqG;AACrG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,sBAAsB,GAAG,SAAS,CA+CzF;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,OAAO,EACvB,QAAQ,EAAE,kBAAkB,GAAG,SAAS,GACvC,sBAAsB,GAAG,SAAS,CAUpC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Response data-classification tags. A route can declare the highest sensitivity its response body
3
+ * carries (`schema.classification`). This is a declarative, compile-time + introspection fact — never
4
+ * read on the request hot path and never enforced at runtime here. Downstream consumers use it: a
5
+ * partner-API surface refuses to expose a route whose response is `pii`/`secret`, privacy tooling
6
+ * learns which routes emit regulated data, and the capability lockfile records it so a route that
7
+ * *starts* returning PII flips the lockfile and forces a review.
8
+ */
9
+ const CLASSIFICATION = Symbol.for("nifra.data-classification");
10
+ const JSON_SCHEMA_CLASSIFICATION = "x-nifra-classification";
11
+ /** Total order over classifications; higher = more sensitive. */
12
+ export const DATA_CLASSIFICATION_RANK = Object.freeze({
13
+ public: 0,
14
+ pii: 1,
15
+ secret: 2,
16
+ });
17
+ const CLASSIFICATIONS = Object.keys(DATA_CLASSIFICATION_RANK);
18
+ /** Whether `value` is a known classification token. */
19
+ export function isDataClassification(value) {
20
+ return typeof value === "string" && CLASSIFICATIONS.includes(value);
21
+ }
22
+ /** The most sensitive classification among the inputs; `"public"` when none are given. */
23
+ export function maxClassification(values) {
24
+ let max = "public";
25
+ for (const value of values) {
26
+ if (DATA_CLASSIFICATION_RANK[value] > DATA_CLASSIFICATION_RANK[max])
27
+ max = value;
28
+ }
29
+ return max;
30
+ }
31
+ /** True when `value` is at least as sensitive as `floor` (e.g. `classificationAtLeast(x, "pii")`). */
32
+ export function classificationAtLeast(value, floor) {
33
+ return DATA_CLASSIFICATION_RANK[value] >= DATA_CLASSIFICATION_RANK[floor];
34
+ }
35
+ function cloneObject(value) {
36
+ return Object.create(Object.getPrototypeOf(value), Object.getOwnPropertyDescriptors(value));
37
+ }
38
+ function tagObject(value, classification) {
39
+ const clone = cloneObject(value);
40
+ Object.defineProperty(clone, CLASSIFICATION, {
41
+ configurable: false,
42
+ enumerable: true,
43
+ value: classification,
44
+ writable: false,
45
+ });
46
+ Object.defineProperty(clone, JSON_SCHEMA_CLASSIFICATION, {
47
+ configurable: true,
48
+ enumerable: true,
49
+ value: classification,
50
+ writable: true,
51
+ });
52
+ return clone;
53
+ }
54
+ /**
55
+ * Attach data-classification metadata without changing validation or inferred input/output types.
56
+ * For Nifra/TypeBox carriers the raw JSON Schema node is tagged too, so metadata survives composition
57
+ * through `t.object`, `t.array`, `t.optional`, and unions.
58
+ */
59
+ export function classified(schema, classification) {
60
+ if (!isDataClassification(classification)) {
61
+ throw new TypeError(`classification: invalid tag ${JSON.stringify(classification)}`);
62
+ }
63
+ const clone = tagObject(schema, classification);
64
+ const raw = schema.jsonSchema;
65
+ if (raw !== null && typeof raw === "object") {
66
+ Object.defineProperty(clone, "jsonSchema", {
67
+ configurable: true,
68
+ enumerable: true,
69
+ value: tagObject(raw, classification),
70
+ writable: false,
71
+ });
72
+ }
73
+ return clone;
74
+ }
75
+ const recordOf = (value) => value !== null && typeof value === "object"
76
+ ? value
77
+ : undefined;
78
+ const classificationOf = (value) => {
79
+ const record = recordOf(value);
80
+ const symbolValue = value?.[CLASSIFICATION];
81
+ if (isDataClassification(symbolValue))
82
+ return symbolValue;
83
+ const extension = record?.[JSON_SCHEMA_CLASSIFICATION];
84
+ return isDataClassification(extension) ? extension : undefined;
85
+ };
86
+ const pointerSegment = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
87
+ /** Read field-level metadata from an introspectable response schema. Never invokes its validator. */
88
+ export function reflectClassification(schema) {
89
+ const carrier = recordOf(schema);
90
+ const raw = carrier !== undefined && "jsonSchema" in carrier ? carrier.jsonSchema : schema;
91
+ const fields = {};
92
+ const seen = new Set();
93
+ const all = [];
94
+ const record = (path, value) => {
95
+ const key = path === "" ? "$" : path;
96
+ const previous = fields[key];
97
+ fields[key] = previous === undefined ? value : maxClassification([previous, value]);
98
+ all.push(value);
99
+ };
100
+ const visit = (value, path) => {
101
+ const object = recordOf(value);
102
+ if (object === undefined)
103
+ return;
104
+ if (seen.has(object))
105
+ return;
106
+ seen.add(object);
107
+ const own = classificationOf(value);
108
+ if (own !== undefined)
109
+ record(path, own);
110
+ const properties = recordOf(object.properties);
111
+ if (properties !== undefined) {
112
+ for (const [name, child] of Object.entries(properties)) {
113
+ visit(child, `${path}/${pointerSegment(name)}`);
114
+ }
115
+ }
116
+ if (object.items !== undefined)
117
+ visit(object.items, `${path}/*`);
118
+ if (Array.isArray(object.prefixItems)) {
119
+ for (const [index, child] of object.prefixItems.entries())
120
+ visit(child, `${path}/${index}`);
121
+ }
122
+ if (object.additionalProperties !== undefined && object.additionalProperties !== false) {
123
+ visit(object.additionalProperties, `${path}/*`);
124
+ }
125
+ for (const key of ["allOf", "anyOf", "oneOf"]) {
126
+ const variants = object[key];
127
+ if (Array.isArray(variants))
128
+ for (const child of variants)
129
+ visit(child, path);
130
+ }
131
+ };
132
+ visit(raw, "");
133
+ // A validation-only carrier can still carry a root tag even when it has no JSON Schema metadata.
134
+ const carrierTag = classificationOf(schema);
135
+ if (carrierTag !== undefined && all.length === 0)
136
+ record("", carrierTag);
137
+ if (all.length === 0)
138
+ return undefined;
139
+ return Object.freeze({ fields: Object.freeze(fields), max: maxClassification(all) });
140
+ }
141
+ /** Merge field metadata with an optional route-level sensitivity fallback. */
142
+ export function routeClassification(responseSchema, fallback) {
143
+ const reflected = reflectClassification(responseSchema);
144
+ if (reflected === undefined && fallback === undefined)
145
+ return undefined;
146
+ return Object.freeze({
147
+ fields: reflected?.fields ?? Object.freeze({}),
148
+ max: fallback === undefined
149
+ ? reflected.max
150
+ : maxClassification([fallback, ...(reflected === undefined ? [] : [reflected.max])]),
151
+ });
152
+ }
153
+ //# sourceMappingURL=classification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification.js","sourceRoot":"","sources":["../src/classification.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -8,7 +8,7 @@ export declare class FrameworkError extends Error {
8
8
  constructor(code: string, message: string);
9
9
  }
10
10
  /** Stable codes for boot-time (L2) route configuration failures. */
11
- export type RouteConfigErrorCode = "DUPLICATE_ROUTE" | "DUPLICATE_PARAM" | "PARAM_NAME_CONFLICT" | "INVALID_PATH" | "INVALID_PARAM_NAME" | "WILDCARD_NOT_LAST" | "INVALID_METHOD";
11
+ export type RouteConfigErrorCode = "DUPLICATE_ROUTE" | "DUPLICATE_PARAM" | "PARAM_NAME_CONFLICT" | "INVALID_PATH" | "INVALID_PARAM_NAME" | "WILDCARD_NOT_LAST" | "INVALID_METHOD" | "INVALID_ASSURANCE" | "INVALID_IDEMPOTENCY";
12
12
  /**
13
13
  * Thrown at route registration when a route is misconfigured. This is the
14
14
  * boot-time rejection layer: loud and early,
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,oEAAoE;AACpE,MAAM,MAAM,oBAAoB,GAC5B,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,CAAA;AAEpB;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAElD,SAAiB,IAAI,EAAE,oBAAoB,CAAA;gBAE/B,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM;CAIxD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBAET,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,oEAAoE;AACpE,MAAM,MAAM,oBAAoB,GAC5B,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,gBAAgB,GAChB,mBAAmB,GACnB,qBAAqB,CAAA;AAEzB;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAElD,SAAiB,IAAI,EAAE,oBAAoB,CAAA;gBAE/B,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM;CAIxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAQ;IAErB,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAYD;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAIlD,YAAY,IAA0B,EAAE,OAAe;QACrD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAQ;IAErB,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAcD;;;;GAIG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAIlD,YAAY,IAA0B,EAAE,OAAe;QACrD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF"}