@nifrajs/core 5.0.0 → 5.1.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 (94) hide show
  1. package/dist/assurance.d.ts +15 -1
  2. package/dist/assurance.d.ts.map +1 -1
  3. package/dist/assurance.js +97 -71
  4. package/dist/assurance.js.map +1 -1
  5. package/dist/capabilities.d.ts +2 -0
  6. package/dist/capabilities.d.ts.map +1 -1
  7. package/dist/capabilities.js +1 -1
  8. package/dist/capabilities.js.map +1 -1
  9. package/dist/edge-kit.d.ts +1 -1
  10. package/dist/edge-kit.d.ts.map +1 -1
  11. package/dist/edge-kit.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/internal/route-compiler.d.ts +9 -0
  17. package/dist/internal/route-compiler.d.ts.map +1 -1
  18. package/dist/internal/route-compiler.js +95 -13
  19. package/dist/internal/route-compiler.js.map +1 -1
  20. package/dist/internal/same-origin.d.ts +11 -1
  21. package/dist/internal/same-origin.d.ts.map +1 -1
  22. package/dist/internal/same-origin.js +8 -0
  23. package/dist/internal/same-origin.js.map +1 -1
  24. package/dist/server/body-lane.d.ts +8 -2
  25. package/dist/server/body-lane.d.ts.map +1 -1
  26. package/dist/server/body-lane.js +27 -2
  27. package/dist/server/body-lane.js.map +1 -1
  28. package/dist/server/client-ip.js +6 -5
  29. package/dist/server/client-ip.js.map +1 -1
  30. package/dist/server/cookies.d.ts.map +1 -1
  31. package/dist/server/cookies.js +13 -1
  32. package/dist/server/cookies.js.map +1 -1
  33. package/dist/server/edge.d.ts.map +1 -1
  34. package/dist/server/edge.js +2 -1
  35. package/dist/server/edge.js.map +1 -1
  36. package/dist/server/http.d.ts.map +1 -1
  37. package/dist/server/http.js +5 -1
  38. package/dist/server/http.js.map +1 -1
  39. package/dist/server/response-contract-lane.d.ts +21 -6
  40. package/dist/server/response-contract-lane.d.ts.map +1 -1
  41. package/dist/server/response-contract-lane.js +139 -14
  42. package/dist/server/response-contract-lane.js.map +1 -1
  43. package/dist/server/server-types.d.ts +16 -5
  44. package/dist/server/server-types.d.ts.map +1 -1
  45. package/dist/server/server.d.ts +23 -1
  46. package/dist/server/server.d.ts.map +1 -1
  47. package/dist/server/server.js +37 -13
  48. package/dist/server/server.js.map +1 -1
  49. package/dist/server/websocket.d.ts +11 -0
  50. package/dist/server/websocket.d.ts.map +1 -1
  51. package/dist/server/websocket.js +26 -12
  52. package/dist/server/websocket.js.map +1 -1
  53. package/dist/server/ws-bun.d.ts +7 -1
  54. package/dist/server/ws-bun.d.ts.map +1 -1
  55. package/dist/server/ws-bun.js +42 -2
  56. package/dist/server/ws-bun.js.map +1 -1
  57. package/dist/server/ws-hook.d.ts +9 -3
  58. package/dist/server/ws-hook.d.ts.map +1 -1
  59. package/dist/server.d.ts +1 -1
  60. package/dist/server.d.ts.map +1 -1
  61. package/dist/server.js +1 -1
  62. package/dist/server.js.map +1 -1
  63. package/dist/single-copy.d.ts.map +1 -1
  64. package/dist/single-copy.js +35 -5
  65. package/dist/single-copy.js.map +1 -1
  66. package/dist/wire.d.ts +5 -0
  67. package/dist/wire.d.ts.map +1 -1
  68. package/dist/wire.js +5 -0
  69. package/dist/wire.js.map +1 -1
  70. package/dist/ws.d.ts.map +1 -1
  71. package/dist/ws.js +2 -1
  72. package/dist/ws.js.map +1 -1
  73. package/package.json +1 -1
  74. package/src/assurance.ts +120 -81
  75. package/src/capabilities.ts +3 -1
  76. package/src/edge-kit.ts +1 -1
  77. package/src/index.ts +2 -2
  78. package/src/internal/route-compiler.ts +107 -16
  79. package/src/internal/same-origin.ts +14 -1
  80. package/src/server/body-lane.ts +36 -1
  81. package/src/server/client-ip.ts +5 -5
  82. package/src/server/cookies.ts +12 -1
  83. package/src/server/edge.ts +2 -1
  84. package/src/server/http.ts +7 -1
  85. package/src/server/response-contract-lane.ts +162 -10
  86. package/src/server/server-types.ts +16 -5
  87. package/src/server/server.ts +48 -9
  88. package/src/server/websocket.ts +39 -13
  89. package/src/server/ws-bun.ts +48 -1
  90. package/src/server/ws-hook.ts +9 -2
  91. package/src/server.ts +1 -1
  92. package/src/single-copy.ts +35 -4
  93. package/src/wire.ts +14 -0
  94. package/src/ws.ts +2 -0
package/dist/wire.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
package/dist/ws.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAEL,eAAe,EAEf,aAAa,EACb,8BAA8B,EAC/B,MAAM,uBAAuB,CAAA;AAkB9B;;;GAGG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAM1C;AAED,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,8BAA8B,EAAE,CAAA"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EAEL,eAAe,EAEf,aAAa,EAEb,8BAA8B,EAC/B,MAAM,uBAAuB,CAAA;AAmB9B;;;GAGG;AACH,wBAAgB,SAAS,IAAI,cAAc,CAM1C;AAED,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,8BAA8B,EAAE,CAAA"}
package/dist/ws.js CHANGED
@@ -17,7 +17,7 @@
17
17
  * `attachWebSocket` / `TopicRegistry` from here too.
18
18
  */
19
19
  import { INSTALL_WS } from "./server/install.js";
20
- import { acceptedHandshake, attachWebSocket, handshakeUpgradeStep, TopicRegistry, wrapWebSocketMessageValidation, } from "./server/websocket.js";
20
+ import { acceptedHandshake, attachWebSocket, handshakeUpgradeStep, TopicRegistry, webSocketSender, wrapWebSocketMessageValidation, } from "./server/websocket.js";
21
21
  import { createBunWsHandlers } from "./server/ws-bun.js";
22
22
  const WS_RUNTIME = {
23
23
  wrapHandler: wrapWebSocketMessageValidation,
@@ -26,6 +26,7 @@ const WS_RUNTIME = {
26
26
  createTopics: () => new TopicRegistry(),
27
27
  bunHandlers: createBunWsHandlers,
28
28
  attach: attachWebSocket,
29
+ sender: webSocketSender,
29
30
  };
30
31
  /**
31
32
  * Enable WebSocket routes on a server: `.use(websocket())` turns on `app.ws()`. Applying it twice is
package/dist/ws.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,8BAA8B,GAC/B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGxD,MAAM,UAAU,GAAc;IAC5B,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE,oBAAoB;IACjC,QAAQ,EAAE,iBAAiB;IAC3B,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;IACvC,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE,eAAe;CACxB,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,CAAsB,GAAM,EAAK,EAAE;QAC/C,CAAC;QAAC,GAAgC,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAA;QAC1D,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAmB,CAAA;AAClF,CAAC;AAUD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,8BAA8B,EAAE,CAAA"}
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAGhD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,8BAA8B,GAC/B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGxD,MAAM,UAAU,GAAc;IAC5B,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE,oBAAoB;IACjC,QAAQ,EAAE,iBAAiB;IAC3B,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE;IACvC,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,eAAe;CACxB,CAAA;AAOD;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,KAAK,GAAG,CAAsB,GAAM,EAAK,EAAE;QAC/C,CAAC;QAAC,GAAgC,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAA;QAC1D,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAmB,CAAA;AAClF,CAAC;AAUD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,8BAA8B,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/core",
3
- "version": "5.0.0",
3
+ "version": "5.1.0",
4
4
  "description": "Bun-native, contract-first HTTP framework - the router, server, and route descriptor.",
5
5
  "keywords": [
6
6
  "bun",
package/src/assurance.ts CHANGED
@@ -227,6 +227,12 @@ export interface AssuranceRouteSelector {
227
227
  * already carries `schema.body`, so this reads what the route declared, not where it lives.
228
228
  */
229
229
  readonly hasBody?: boolean
230
+ /**
231
+ * Match routes by whether they declare a success `response` schema - the routes a response contract
232
+ * can hold to anything. Pair it with `require: ["nifra.response-contract"]` to say "every route
233
+ * that declares a response enforces it" without listing the routes that declare none.
234
+ */
235
+ readonly hasResponse?: boolean
230
236
  /**
231
237
  * Match routes by their effective transport body policy. `"unlimited"` is the explicit
232
238
  * streaming/upload exemption; `"bounded"` is any finite cap (an explicit number or the inherited
@@ -259,7 +265,9 @@ const usesClassSelector = (selector: AssuranceRouteSelector): boolean =>
259
265
 
260
266
  /** The rules whose selector needs capability definitions to mean anything. */
261
267
  function rulesNeedingDefinitions(policy: AssurancePolicy): readonly string[] {
262
- return policy.rules.filter((rule) => usesClassSelector(rule.match)).map((rule) => rule.name)
268
+ return [...policy.rules, ...(policy.baseline ?? [])]
269
+ .filter((rule) => usesClassSelector(rule.match))
270
+ .map((rule) => rule.name)
263
271
  }
264
272
 
265
273
  function definitionMap(
@@ -294,6 +302,13 @@ export interface AssuranceRule {
294
302
  export interface AssurancePolicy {
295
303
  /** First matching rule owns a route. Put exceptions before broad defaults. */
296
304
  readonly rules: readonly AssuranceRule[]
305
+ /**
306
+ * Rules checked on EVERY route they match, in addition to the first-match rule that owns it - for a
307
+ * requirement that holds across classes ("every route declaring a response enforces it"), which
308
+ * first-match-wins would otherwise make you repeat in each rule. A baseline rule does not classify a
309
+ * route: one no `rules` entry matches is still unclassified. Names share one namespace with `rules`.
310
+ */
311
+ readonly baseline?: readonly AssuranceRule[]
297
312
  /** Default `error`: an unclassified route fails closed. */
298
313
  readonly unmatched?: "error" | "ignore"
299
314
  /** Default false: reject an empty reflected source so a wrong import cannot pass CI silently. */
@@ -438,8 +453,11 @@ export function defineAssurancePolicy(policy: AssurancePolicy): AssurancePolicy
438
453
  ) {
439
454
  throw new Error(`route assurance: flagClassifiedWithoutEvidence must be boolean`)
440
455
  }
456
+ if (policy.baseline !== undefined && !Array.isArray(policy.baseline)) {
457
+ throw new Error("route assurance: baseline must be an array of rules")
458
+ }
441
459
  const names = new Set<string>()
442
- const rules = policy.rules.map((rule): AssuranceRule => {
460
+ const normalize = (rule: AssuranceRule): AssuranceRule => {
443
461
  if (typeof rule.name !== "string" || !nonEmpty(rule.name)) {
444
462
  throw new Error("route assurance: rule name must be non-empty")
445
463
  }
@@ -461,6 +479,7 @@ export function defineAssurancePolicy(policy: AssurancePolicy): AssurancePolicy
461
479
  ...CLASS_SELECTOR_KEYS,
462
480
  "classificationAtLeast",
463
481
  "hasBody",
482
+ "hasResponse",
464
483
  "bodyLimit",
465
484
  ].includes(key),
466
485
  )
@@ -476,10 +495,12 @@ export function defineAssurancePolicy(policy: AssurancePolicy): AssurancePolicy
476
495
  `route assurance: rule ${JSON.stringify(name)} tools selector must be boolean`,
477
496
  )
478
497
  }
479
- if (rule.match.hasBody !== undefined && typeof rule.match.hasBody !== "boolean") {
480
- throw new Error(
481
- `route assurance: rule ${JSON.stringify(name)} hasBody selector must be boolean`,
482
- )
498
+ for (const key of ["hasBody", "hasResponse"] as const) {
499
+ if (rule.match[key] !== undefined && typeof rule.match[key] !== "boolean") {
500
+ throw new Error(
501
+ `route assurance: rule ${JSON.stringify(name)} ${key} selector must be boolean`,
502
+ )
503
+ }
483
504
  }
484
505
  if (
485
506
  rule.match.bodyLimit !== undefined &&
@@ -584,6 +605,7 @@ export function defineAssurancePolicy(policy: AssurancePolicy): AssurancePolicy
584
605
  match.classificationAtLeast = rule.match.classificationAtLeast
585
606
  }
586
607
  if (rule.match.hasBody !== undefined) match.hasBody = rule.match.hasBody
608
+ if (rule.match.hasResponse !== undefined) match.hasResponse = rule.match.hasResponse
587
609
  if (rule.match.bodyLimit !== undefined) match.bodyLimit = rule.match.bodyLimit
588
610
  return Object.freeze({
589
611
  name,
@@ -595,9 +617,12 @@ export function defineAssurancePolicy(policy: AssurancePolicy): AssurancePolicy
595
617
  : {}),
596
618
  ...(rule.requireCsrfWithAuthenticated === true ? { requireCsrfWithAuthenticated: true } : {}),
597
619
  })
598
- })
620
+ }
621
+ const rules = policy.rules.map(normalize)
622
+ const baseline = (policy.baseline ?? []).map(normalize)
599
623
  return Object.freeze({
600
624
  rules: Object.freeze(rules),
625
+ ...(baseline.length > 0 ? { baseline: Object.freeze(baseline) } : {}),
601
626
  unmatched: policy.unmatched ?? "error",
602
627
  allowEmpty: policy.allowEmpty ?? false,
603
628
  flagClassifiedWithoutEvidence: policy.flagClassifiedWithoutEvidence ?? false,
@@ -732,7 +757,7 @@ export function defineAssuranceConfig(config: AssuranceConfig): AssuranceConfig
732
757
  // that passes capability assurance, so the rule would match nothing.
733
758
  if (capabilities !== undefined) {
734
759
  const defined = new Set(capabilities.definitions.map((definition) => definition.id))
735
- for (const rule of policy.rules) {
760
+ for (const rule of [...policy.rules, ...(policy.baseline ?? [])]) {
736
761
  const undefinedToken = rule.match.capabilities?.find((token) => !defined.has(token))
737
762
  if (undefinedToken !== undefined) {
738
763
  throw new Error(
@@ -804,13 +829,15 @@ export function matchesAssuranceSelector(
804
829
  definitions?: ReadonlyMap<string, CapabilityDefinition>,
805
830
  ): boolean {
806
831
  const { methods, paths, tools, capabilities, access, zone, classificationAtLeast } = selector
807
- const { exceptMethods, hasBody, bodyLimit } = selector
832
+ const { exceptMethods, hasBody, hasResponse, bodyLimit } = selector
808
833
  if (methods !== undefined && !methods.includes(route.method as Method | "WS")) return false
809
834
  if (exceptMethods?.some((method) => method === route.method) === true) return false
810
835
  if (paths !== undefined && !paths.some((pattern) => routeGlob(pattern).test(route.path)))
811
836
  return false
812
837
  if (tools !== undefined && (route.tool !== undefined) !== tools) return false
813
838
  if (hasBody !== undefined && (route.schema?.body !== undefined) !== hasBody) return false
839
+ if (hasResponse !== undefined && (route.schema?.response !== undefined) !== hasResponse)
840
+ return false
814
841
  if (bodyLimit !== undefined && effectiveBodyLimit(route.schema) !== bodyLimit) return false
815
842
  if (
816
843
  classificationAtLeast !== undefined &&
@@ -836,7 +863,61 @@ export function matchesAssuranceSelector(
836
863
  return true
837
864
  }
838
865
 
839
- /** Evaluate reflected route evidence against the first matching policy rule. */
866
+ /** One rule's missing and forbidden evidence on one route, each also reported as a finding. */
867
+ function checkAssuranceRule(
868
+ rule: AssuranceRule,
869
+ route: Pick<ReflectedRoute, "method" | "path">,
870
+ evidence: readonly AssuranceEvidence[],
871
+ evidenceIds: ReadonlySet<string>,
872
+ findings: AssuranceFinding[],
873
+ ): { readonly missing: readonly string[]; readonly forbidden: readonly string[] } {
874
+ const requiredProvenance = rule.requireProvenance ?? "any"
875
+ const missing = (rule.require ?? []).filter((id) => {
876
+ if (!evidenceIds.has(id)) return true
877
+ if (requiredProvenance === "any") return false
878
+ return !evidence.some(
879
+ (item) => item.id === id && evidenceProvenance(item) === requiredProvenance,
880
+ )
881
+ })
882
+ const forbidden = (rule.forbid ?? []).filter((id) => evidenceIds.has(id))
883
+ if (
884
+ rule.requireCsrfWithAuthenticated === true &&
885
+ evidenceIds.has(NIFRA_ASSURANCE_IDS.AUTHENTICATED) &&
886
+ !evidence.some(
887
+ (item) => item.id === NIFRA_ASSURANCE_IDS.CSRF && evidenceProvenance(item) === "runtime",
888
+ ) &&
889
+ !missing.includes(NIFRA_ASSURANCE_IDS.CSRF)
890
+ ) {
891
+ missing.push(NIFRA_ASSURANCE_IDS.CSRF)
892
+ }
893
+ for (const id of missing) {
894
+ findings.push({
895
+ code: "missing-evidence",
896
+ method: route.method,
897
+ path: route.path,
898
+ rule: rule.name,
899
+ evidence: id,
900
+ message:
901
+ requiredProvenance === "any"
902
+ ? `${route.method} ${route.path} (${rule.name}) is missing ${id}`
903
+ : `${route.method} ${route.path} (${rule.name}) is missing ${requiredProvenance} evidence for ${id}`,
904
+ })
905
+ }
906
+ for (const id of forbidden) {
907
+ findings.push({
908
+ code: "forbidden-evidence",
909
+ method: route.method,
910
+ path: route.path,
911
+ rule: rule.name,
912
+ evidence: id,
913
+ message: `${route.method} ${route.path} (${rule.name}) carries forbidden ${id}`,
914
+ })
915
+ }
916
+ return { missing, forbidden }
917
+ }
918
+
919
+ /** Evaluate reflected route evidence against the first matching policy rule, plus every matching
920
+ * baseline rule. */
840
921
  export function evaluateRouteAssurance(
841
922
  source: unknown,
842
923
  policyInput: AssurancePolicy,
@@ -875,6 +956,13 @@ export function evaluateRouteAssurance(
875
956
  )
876
957
  const evidence = route.assurance ?? []
877
958
  const evidenceIds = new Set(evidence.map((item) => item.id))
959
+ const missing: string[] = []
960
+ const forbidden: string[] = []
961
+ const hold = (candidate: AssuranceRule): void => {
962
+ const outcome = checkAssuranceRule(candidate, route, evidence, evidenceIds, findings)
963
+ for (const id of outcome.missing) if (!missing.includes(id)) missing.push(id)
964
+ for (const id of outcome.forbidden) if (!forbidden.includes(id)) forbidden.push(id)
965
+ }
878
966
  if (rule === undefined) {
879
967
  if (policy.unmatched !== "ignore") {
880
968
  findings.push({
@@ -884,82 +972,33 @@ export function evaluateRouteAssurance(
884
972
  message: `${route.method} ${route.path} is not classified by an assurance rule`,
885
973
  })
886
974
  }
887
- routes.push({
888
- method: route.method,
889
- path: route.path,
890
- evidence,
891
- missing: [],
892
- forbidden: [],
893
- ...(route.schema?.response !== undefined || route.schema?.errors !== undefined
894
- ? { responseContract: route.responseContract ?? "unchecked" }
895
- : {}),
896
- })
897
- continue
898
- }
899
-
900
- const requiredProvenance = rule.requireProvenance ?? "any"
901
- let missing = (rule.require ?? []).filter((id) => {
902
- if (!evidenceIds.has(id)) return true
903
- if (requiredProvenance === "any") return false
904
- return !evidence.some(
905
- (item) => item.id === id && evidenceProvenance(item) === requiredProvenance,
906
- )
907
- })
908
- const forbidden = (rule.forbid ?? []).filter((id) => evidenceIds.has(id))
909
- if (
910
- rule.requireCsrfWithAuthenticated === true &&
911
- evidenceIds.has(NIFRA_ASSURANCE_IDS.AUTHENTICATED) &&
912
- !evidence.some(
913
- (item) => item.id === NIFRA_ASSURANCE_IDS.CSRF && evidenceProvenance(item) === "runtime",
914
- )
915
- ) {
916
- const id = NIFRA_ASSURANCE_IDS.CSRF
917
- if (!missing.includes(id)) missing = [...missing, id]
918
- }
919
- for (const id of missing) {
920
- findings.push({
921
- code: "missing-evidence",
922
- method: route.method,
923
- path: route.path,
924
- rule: rule.name,
925
- evidence: id,
926
- message:
927
- requiredProvenance === "any"
928
- ? `${route.method} ${route.path} (${rule.name}) is missing ${id}`
929
- : `${route.method} ${route.path} (${rule.name}) is missing ${requiredProvenance} evidence for ${id}`,
930
- })
931
- }
932
- for (const id of forbidden) {
933
- findings.push({
934
- code: "forbidden-evidence",
935
- method: route.method,
936
- path: route.path,
937
- rule: rule.name,
938
- evidence: id,
939
- message: `${route.method} ${route.path} (${rule.name}) carries forbidden ${id}`,
940
- })
975
+ } else {
976
+ hold(rule)
977
+ // Opt-in visibility: a pure-classification rule (no require + no forbid) matching a route with
978
+ // zero evidence is a "label without proof". Surface it so the gap isn't silently green. A rule
979
+ // that expects or forbids evidence already speaks for itself, so it's excluded here.
980
+ if (
981
+ policy.flagClassifiedWithoutEvidence === true &&
982
+ evidence.length === 0 &&
983
+ (rule.require ?? []).length === 0 &&
984
+ (rule.forbid ?? []).length === 0
985
+ ) {
986
+ findings.push({
987
+ code: "classified-no-evidence",
988
+ method: route.method,
989
+ path: route.path,
990
+ rule: rule.name,
991
+ message: `${route.method} ${route.path} (${rule.name}) is classified but carries no enforcement evidence`,
992
+ })
993
+ }
941
994
  }
942
- // Opt-in visibility: a pure-classification rule (no require + no forbid) matching a route with zero
943
- // evidence is a "label without proof". Surface it so the gap isn't silently green. A rule that expects
944
- // or forbids evidence already speaks for itself via the loops above, so it's excluded here.
945
- if (
946
- policy.flagClassifiedWithoutEvidence === true &&
947
- evidence.length === 0 &&
948
- (rule.require ?? []).length === 0 &&
949
- (rule.forbid ?? []).length === 0
950
- ) {
951
- findings.push({
952
- code: "classified-no-evidence",
953
- method: route.method,
954
- path: route.path,
955
- rule: rule.name,
956
- message: `${route.method} ${route.path} (${rule.name}) is classified but carries no enforcement evidence`,
957
- })
995
+ for (const candidate of policy.baseline ?? []) {
996
+ if (matchesAssuranceSelector(route, candidate.match, definitions)) hold(candidate)
958
997
  }
959
998
  routes.push({
960
999
  method: route.method,
961
1000
  path: route.path,
962
- rule: rule.name,
1001
+ ...(rule === undefined ? {} : { rule: rule.name }),
963
1002
  evidence,
964
1003
  missing: Object.freeze(missing),
965
1004
  forbidden: Object.freeze(forbidden),
@@ -154,6 +154,8 @@ export interface RouteCapabilityEvidence {
154
154
  /** True only when the route's reachable module graph was actually scanned. */
155
155
  readonly covered: boolean
156
156
  readonly evidence: readonly CapabilityEvidence[]
157
+ /** The probable cause of an uncovered route, when the collector can tell. */
158
+ readonly uncoveredReason?: string
157
159
  }
158
160
 
159
161
  export interface CapabilityEvidenceSet {
@@ -416,7 +418,7 @@ export function evaluateCapabilityAssurance(
416
418
  code: "provenance-uncovered",
417
419
  method: route.method,
418
420
  path: route.path,
419
- message: `${route.method} ${route.path} has no static provenance coverage`,
421
+ message: `${route.method} ${route.path} has no static provenance coverage${supplied?.uncoveredReason === undefined ? "" : ` - ${supplied.uncoveredReason}`}`,
420
422
  })
421
423
  }
422
424
  // A safe-method route that REACHES a domain write without declaring it used to draw two findings
package/src/edge-kit.ts CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  export { type ErrorLogDetail, emitRequestErrorLog } from "./server/bare-error-lane.ts"
24
24
  export { capBodyBytes } from "./server/body.ts"
25
- export { readBodyFramed } from "./server/body-lane.ts"
25
+ export { type FormOrigins, readBodyFramed } from "./server/body-lane.ts"
26
26
  export { plainError } from "./server/http.ts"
27
27
  export {
28
28
  answerNotFound,
package/src/index.ts CHANGED
@@ -16,13 +16,13 @@
16
16
  * read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
17
17
  * `check:publish` asserts it equals `@nifrajs/core`'s package version.
18
18
  */
19
- export const VERSION = "5.0.0" as const
19
+ export const VERSION = "5.1.0" as const
20
20
 
21
21
  export type Version = typeof VERSION
22
22
 
23
23
  export { FrameworkError, RouteConfigError, type RouteConfigErrorCode } from "./errors.ts"
24
24
  export { FRAMEWORK_NAME, type FrameworkName } from "./internal/brand.ts"
25
- export { isSameOriginRequest } from "./internal/same-origin.ts"
25
+ export { isSameOriginForm, isSameOriginRequest } from "./internal/same-origin.ts"
26
26
  export {
27
27
  ROUTE_PATTERN_OVERLAP_MAX_STATES,
28
28
  RoutePatternOverlapLimitError,
@@ -35,6 +35,7 @@ import {
35
35
  NIFRA_ASSURANCE_IDS,
36
36
  validEvidenceId,
37
37
  } from "./route-assurance.ts"
38
+ import type { CatalogRoute } from "./route-catalog.ts"
38
39
  import type {
39
40
  RawAfterHandle,
40
41
  RawAround,
@@ -43,7 +44,9 @@ import type {
43
44
  RawDerive,
44
45
  RawErrorHandler,
45
46
  } from "./route-execution.ts"
47
+ import { compileRouteExecutionPlan } from "./route-execution.ts"
46
48
  import { type RouteLaneSelection, selectRouteLanes } from "./route-lanes.ts"
49
+ import { compileRouteProgram } from "./route-program.ts"
47
50
 
48
51
  export interface RouteCompilerContext {
49
52
  readonly maxBodyBytes: number
@@ -83,6 +86,108 @@ export interface CompiledRouteOptions {
83
86
  readonly authenticated: boolean
84
87
  }
85
88
 
89
+ const RESPONSE_CONTRACT_EVIDENCE: AssuranceDeclaration = Object.freeze({
90
+ id: NIFRA_ASSURANCE_IDS.RESPONSE_CONTRACT,
91
+ source: "response-contract",
92
+ scope: "plugin",
93
+ })
94
+
95
+ function responseDefinitionOf(
96
+ schema: RouteSchema | undefined,
97
+ ): ResponseContractDefinition | undefined {
98
+ return schema?.response !== undefined || schema?.errors !== undefined
99
+ ? {
100
+ ...(schema.response === undefined ? {} : { response: schema.response }),
101
+ ...(schema.errors === undefined ? {} : { errors: schema.errors }),
102
+ }
103
+ : undefined
104
+ }
105
+
106
+ /**
107
+ * Recompile a route another server compiled, under the response contract and effect ledger the
108
+ * adopting server installed and the route's own server did not. Both only add a check or a record,
109
+ * so a merged route can never serve more than it did standalone - and without this, the same
110
+ * `.use()` covered a `group()` route but not a `merge()`d one. A route that already resolved its
111
+ * own contract or ledger keeps it.
112
+ */
113
+ export function adoptRouteRuntimes(
114
+ route: CatalogRoute,
115
+ responseContractRuntime: ResponseContractRuntime | undefined,
116
+ effectLedgerRuntime: EffectLedgerRuntime | undefined,
117
+ ): CatalogRoute {
118
+ const { entry, descriptor } = route
119
+ const definition =
120
+ entry.responseContract === undefined && responseContractRuntime !== undefined
121
+ ? responseDefinitionOf(entry.schema)
122
+ : undefined
123
+ const ledgered =
124
+ entry.ledgered ??
125
+ effectLedgerRuntime?.resolve(descriptor.capabilities ?? [], route.method, route.path)
126
+ if (definition === undefined && ledgered === entry.ledgered) return route
127
+ const responseContract =
128
+ definition === undefined || responseContractRuntime === undefined
129
+ ? entry.responseContract
130
+ : { runtime: responseContractRuntime, definition }
131
+ // Either runtime rules out every fused lane, so the route needs only the generic plan here - and
132
+ // nothing the source server's validation-error default decided about fusion can matter any more.
133
+ const lanes = selectRouteLanes({
134
+ schema: entry.schema,
135
+ hasAuth: entry.authStages.length > 0,
136
+ hasIdempotency: entry.idempotent !== undefined,
137
+ hasLedger: ledgered !== undefined,
138
+ hasResponseContract: responseContract !== undefined,
139
+ hasDecorations: entry.hasDecorations,
140
+ derives: entry.derives.length,
141
+ beforeHandle: entry.beforeHandle.length,
142
+ afterHandle: entry.afterHandle.length,
143
+ onError: entry.onError.length,
144
+ around: entry.around.length,
145
+ defaultOnValidationError: false,
146
+ })
147
+ const program = compileRouteProgram({
148
+ schema: entry.schema,
149
+ handler: entry.handler,
150
+ derives: entry.derives,
151
+ authStages: entry.authStages,
152
+ beforeHandle: entry.beforeHandle,
153
+ afterHandle: entry.afterHandle,
154
+ onError: entry.onError,
155
+ decorations: entry.decorations,
156
+ hasDecorations: entry.hasDecorations,
157
+ bodySchema: entry.schema?.body,
158
+ bodyLimit: entry.bodyLimit,
159
+ responseContract,
160
+ })
161
+ const execution = compileRouteExecutionPlan({
162
+ lane: lanes.lane,
163
+ contextless: false,
164
+ hasAround: entry.around.length > 0,
165
+ hasLedger: ledgered !== undefined,
166
+ fusedWeb: undefined,
167
+ fusedBody: undefined,
168
+ fusedLane: undefined,
169
+ })
170
+ const enforced = definition !== undefined && responseContractRuntime?.mode === "enforce"
171
+ return {
172
+ ...route,
173
+ entry: {
174
+ ...entry,
175
+ ledgered,
176
+ responseContract,
177
+ lifecycleHookLane: undefined,
178
+ execution,
179
+ program,
180
+ },
181
+ descriptor:
182
+ definition === undefined || responseContractRuntime === undefined
183
+ ? descriptor
184
+ : { ...descriptor, responseContract: responseContractRuntime.mode },
185
+ assurance: enforced
186
+ ? Object.freeze([...route.assurance, RESPONSE_CONTRACT_EVIDENCE])
187
+ : route.assurance,
188
+ }
189
+ }
190
+
86
191
  /** Resolve all registration-time policy and lane facts for one route. */
87
192
  export function compileRouteOptions(
88
193
  context: RouteCompilerContext,
@@ -181,13 +286,7 @@ export function compileRouteOptions(
181
286
  context.maxBodyBytes,
182
287
  )
183
288
  const ledgered = context.effectLedgerRuntime?.resolve(capabilities, method, path)
184
- const responseDefinition =
185
- schema?.response !== undefined || schema?.errors !== undefined
186
- ? {
187
- ...(schema.response === undefined ? {} : { response: schema.response }),
188
- ...(schema.errors === undefined ? {} : { errors: schema.errors }),
189
- }
190
- : undefined
289
+ const responseDefinition = responseDefinitionOf(schema)
191
290
  const contracted =
192
291
  context.responseContractRuntime !== undefined && responseDefinition !== undefined
193
292
  ? { runtime: context.responseContractRuntime, definition: responseDefinition }
@@ -208,15 +307,7 @@ export function compileRouteOptions(
208
307
  })
209
308
 
210
309
  const routeAssurance: AssuranceDeclaration[] = [...context.activeAssurance, ...handlerAssurance]
211
- if (contracted?.runtime.mode === "enforce") {
212
- routeAssurance.push(
213
- Object.freeze({
214
- id: NIFRA_ASSURANCE_IDS.RESPONSE_CONTRACT,
215
- source: "response-contract",
216
- scope: "plugin",
217
- }),
218
- )
219
- }
310
+ if (contracted?.runtime.mode === "enforce") routeAssurance.push(RESPONSE_CONTRACT_EVIDENCE)
220
311
  for (const id of schema?.assurance ?? []) {
221
312
  if (!validEvidenceId(id)) {
222
313
  throw new Error(
@@ -26,7 +26,7 @@
26
26
  *
27
27
  * An unparseable Origin is not same-origin.
28
28
  */
29
- export function isSameOriginRequest(origin: string, request: Request): boolean {
29
+ export function isSameOriginRequest(origin: string, request: { readonly url: string }): boolean {
30
30
  try {
31
31
  const from = new URL(origin)
32
32
  const own = new URL(request.url)
@@ -41,3 +41,16 @@ export function isSameOriginRequest(origin: string, request: Request): boolean {
41
41
  return false
42
42
  }
43
43
  }
44
+
45
+ /**
46
+ * {@link isSameOriginRequest} for a browser form submission. Under `Referrer-Policy: no-referrer` a
47
+ * browser sends a same-origin form POST with `Origin: null`; that one passes on its
48
+ * `Sec-Fetch-Site: same-origin`, a header page script cannot set.
49
+ */
50
+ export function isSameOriginForm(
51
+ origin: string,
52
+ secFetchSite: string | null,
53
+ request: { readonly url: string },
54
+ ): boolean {
55
+ return origin === "null" ? secFetchSite === "same-origin" : isSameOriginRequest(origin, request)
56
+ }