@nifrajs/core 1.13.0 → 2.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 (233) hide show
  1. package/README.md +37 -1
  2. package/dist/assurance.d.ts +11 -2
  3. package/dist/assurance.d.ts.map +1 -1
  4. package/dist/assurance.js +20 -0
  5. package/dist/assurance.js.map +1 -1
  6. package/dist/capabilities.d.ts +54 -2
  7. package/dist/capabilities.d.ts.map +1 -1
  8. package/dist/capabilities.js +240 -5
  9. package/dist/capabilities.js.map +1 -1
  10. package/dist/durable-adapters.d.ts +241 -0
  11. package/dist/durable-adapters.d.ts.map +1 -0
  12. package/dist/durable-adapters.js +697 -0
  13. package/dist/durable-adapters.js.map +1 -0
  14. package/dist/durable-execution.d.ts +349 -0
  15. package/dist/durable-execution.d.ts.map +1 -0
  16. package/dist/durable-execution.js +1173 -0
  17. package/dist/durable-execution.js.map +1 -0
  18. package/dist/effect-ledger.d.ts +9 -0
  19. package/dist/effect-ledger.d.ts.map +1 -0
  20. package/dist/effect-ledger.js +8 -0
  21. package/dist/effect-ledger.js.map +1 -0
  22. package/dist/effect-lifecycle.d.ts +42 -0
  23. package/dist/effect-lifecycle.d.ts.map +1 -0
  24. package/dist/effect-lifecycle.js +66 -0
  25. package/dist/effect-lifecycle.js.map +1 -0
  26. package/dist/effect-scope.d.ts +75 -0
  27. package/dist/effect-scope.d.ts.map +1 -0
  28. package/dist/effect-scope.js +177 -0
  29. package/dist/effect-scope.js.map +1 -0
  30. package/dist/idempotency-plugin.d.ts +13 -0
  31. package/dist/idempotency-plugin.d.ts.map +1 -0
  32. package/dist/idempotency-plugin.js +16 -0
  33. package/dist/idempotency-plugin.js.map +1 -0
  34. package/dist/index.d.ts +6 -35
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +6 -31
  37. package/dist/index.js.map +1 -1
  38. package/dist/internal/capability-runtime.d.ts +62 -1
  39. package/dist/internal/capability-runtime.d.ts.map +1 -1
  40. package/dist/internal/capability-runtime.js +11 -2
  41. package/dist/internal/capability-runtime.js.map +1 -1
  42. package/dist/internal/effect-execution.d.ts +16 -0
  43. package/dist/internal/effect-execution.d.ts.map +1 -0
  44. package/dist/internal/effect-execution.js +50 -0
  45. package/dist/internal/effect-execution.js.map +1 -0
  46. package/dist/internal/safe-equal.d.ts +20 -0
  47. package/dist/internal/safe-equal.d.ts.map +1 -0
  48. package/dist/internal/safe-equal.js +31 -0
  49. package/dist/internal/safe-equal.js.map +1 -0
  50. package/dist/ledger.d.ts +14 -6
  51. package/dist/ledger.d.ts.map +1 -1
  52. package/dist/ledger.js +31 -5
  53. package/dist/ledger.js.map +1 -1
  54. package/dist/mcp.d.ts +7 -0
  55. package/dist/mcp.d.ts.map +1 -0
  56. package/dist/mcp.js +56 -0
  57. package/dist/mcp.js.map +1 -0
  58. package/dist/node-direct.d.ts +5 -0
  59. package/dist/node-direct.d.ts.map +1 -0
  60. package/dist/node-direct.js +27 -0
  61. package/dist/node-direct.js.map +1 -0
  62. package/dist/reconciliation-worker.d.ts +108 -0
  63. package/dist/reconciliation-worker.d.ts.map +1 -0
  64. package/dist/reconciliation-worker.js +239 -0
  65. package/dist/reconciliation-worker.js.map +1 -0
  66. package/dist/reflection.d.ts +5 -0
  67. package/dist/reflection.d.ts.map +1 -1
  68. package/dist/reflection.js +2 -0
  69. package/dist/reflection.js.map +1 -1
  70. package/dist/server/client-ip.d.ts +35 -0
  71. package/dist/server/client-ip.d.ts.map +1 -0
  72. package/dist/server/client-ip.js +42 -0
  73. package/dist/server/client-ip.js.map +1 -0
  74. package/dist/server/context.d.ts +47 -2
  75. package/dist/server/context.d.ts.map +1 -1
  76. package/dist/server/contract.d.ts +14 -4
  77. package/dist/server/contract.d.ts.map +1 -1
  78. package/dist/server/contract.js +8 -2
  79. package/dist/server/contract.js.map +1 -1
  80. package/dist/server/http.d.ts +14 -0
  81. package/dist/server/http.d.ts.map +1 -0
  82. package/dist/server/http.js +45 -0
  83. package/dist/server/http.js.map +1 -0
  84. package/dist/server/idempotency-lane.d.ts +45 -0
  85. package/dist/server/idempotency-lane.d.ts.map +1 -0
  86. package/dist/server/idempotency-lane.js +205 -0
  87. package/dist/server/idempotency-lane.js.map +1 -0
  88. package/dist/server/install.d.ts +21 -0
  89. package/dist/server/install.d.ts.map +1 -0
  90. package/dist/server/install.js +21 -0
  91. package/dist/server/install.js.map +1 -0
  92. package/dist/server/ledger-lane.d.ts +53 -0
  93. package/dist/server/ledger-lane.d.ts.map +1 -0
  94. package/dist/server/ledger-lane.js +82 -0
  95. package/dist/server/ledger-lane.js.map +1 -0
  96. package/dist/server/mcp-hook.d.ts +28 -0
  97. package/dist/server/mcp-hook.d.ts.map +1 -0
  98. package/dist/server/mcp-hook.js +2 -0
  99. package/dist/server/mcp-hook.js.map +1 -0
  100. package/dist/server/node-outcome-hook.d.ts +9 -0
  101. package/dist/server/node-outcome-hook.d.ts.map +1 -0
  102. package/dist/server/node-outcome-hook.js +2 -0
  103. package/dist/server/node-outcome-hook.js.map +1 -0
  104. package/dist/server/node-outcome.d.ts +37 -0
  105. package/dist/server/node-outcome.d.ts.map +1 -0
  106. package/dist/server/node-outcome.js +75 -0
  107. package/dist/server/node-outcome.js.map +1 -0
  108. package/dist/server/plugin.d.ts +78 -0
  109. package/dist/server/plugin.d.ts.map +1 -0
  110. package/dist/server/plugin.js +57 -0
  111. package/dist/server/plugin.js.map +1 -0
  112. package/dist/server/query.d.ts +18 -0
  113. package/dist/server/query.d.ts.map +1 -0
  114. package/dist/server/query.js +102 -0
  115. package/dist/server/query.js.map +1 -0
  116. package/dist/server/registry.d.ts +31 -6
  117. package/dist/server/registry.d.ts.map +1 -1
  118. package/dist/server/request-context.d.ts +51 -0
  119. package/dist/server/request-context.d.ts.map +1 -0
  120. package/dist/server/request-context.js +184 -0
  121. package/dist/server/request-context.js.map +1 -0
  122. package/dist/server/respond.d.ts +17 -0
  123. package/dist/server/respond.d.ts.map +1 -0
  124. package/dist/server/respond.js +81 -0
  125. package/dist/server/respond.js.map +1 -0
  126. package/dist/server/runtime-core.d.ts +36 -0
  127. package/dist/server/runtime-core.d.ts.map +1 -0
  128. package/dist/server/runtime-core.js +51 -0
  129. package/dist/server/runtime-core.js.map +1 -0
  130. package/dist/server/server-types.d.ts +203 -0
  131. package/dist/server/server-types.d.ts.map +1 -0
  132. package/dist/server/server-types.js +2 -0
  133. package/dist/server/server-types.js.map +1 -0
  134. package/dist/server/server.d.ts +119 -345
  135. package/dist/server/server.d.ts.map +1 -1
  136. package/dist/server/server.js +247 -833
  137. package/dist/server/server.js.map +1 -1
  138. package/dist/server/sse-hook.d.ts +10 -0
  139. package/dist/server/sse-hook.d.ts.map +1 -0
  140. package/dist/server/sse-hook.js +2 -0
  141. package/dist/server/sse-hook.js.map +1 -0
  142. package/dist/server/sse.d.ts +7 -23
  143. package/dist/server/sse.d.ts.map +1 -1
  144. package/dist/server/sse.js +18 -0
  145. package/dist/server/sse.js.map +1 -1
  146. package/dist/server/transport-lane.d.ts +28 -0
  147. package/dist/server/transport-lane.d.ts.map +1 -0
  148. package/dist/server/transport-lane.js +106 -0
  149. package/dist/server/transport-lane.js.map +1 -0
  150. package/dist/server/websocket.d.ts +23 -1
  151. package/dist/server/websocket.d.ts.map +1 -1
  152. package/dist/server/websocket.js +10 -1
  153. package/dist/server/websocket.js.map +1 -1
  154. package/dist/server/ws-hook.d.ts +8 -11
  155. package/dist/server/ws-hook.d.ts.map +1 -1
  156. package/dist/server/ws-hook.js +7 -14
  157. package/dist/server/ws-hook.js.map +1 -1
  158. package/dist/server.d.ts +21 -0
  159. package/dist/server.d.ts.map +1 -0
  160. package/dist/server.js +16 -0
  161. package/dist/server.js.map +1 -0
  162. package/dist/transport-codec-rich.d.ts +8 -0
  163. package/dist/transport-codec-rich.d.ts.map +1 -0
  164. package/dist/transport-codec-rich.js +14 -0
  165. package/dist/transport-codec-rich.js.map +1 -0
  166. package/dist/transport-codec.d.ts +31 -0
  167. package/dist/transport-codec.d.ts.map +1 -0
  168. package/dist/transport-codec.js +190 -0
  169. package/dist/transport-codec.js.map +1 -0
  170. package/dist/transport-plugin.d.ts +3 -0
  171. package/dist/transport-plugin.d.ts.map +1 -0
  172. package/dist/transport-plugin.js +3 -0
  173. package/dist/transport-plugin.js.map +1 -0
  174. package/dist/wire.d.ts +58 -0
  175. package/dist/wire.d.ts.map +1 -0
  176. package/dist/wire.js +445 -0
  177. package/dist/wire.js.map +1 -0
  178. package/dist/ws.d.ts +16 -7
  179. package/dist/ws.d.ts.map +1 -1
  180. package/dist/ws.js +25 -10
  181. package/dist/ws.js.map +1 -1
  182. package/package.json +122 -6
  183. package/src/assurance.ts +36 -1
  184. package/src/capabilities.ts +306 -5
  185. package/src/durable-adapters.ts +1039 -0
  186. package/src/durable-execution.ts +1676 -0
  187. package/src/effect-ledger.ts +9 -0
  188. package/src/effect-lifecycle.ts +120 -0
  189. package/src/effect-scope.ts +267 -0
  190. package/src/idempotency-plugin.ts +17 -0
  191. package/src/index.ts +6 -133
  192. package/src/internal/capability-runtime.ts +87 -1
  193. package/src/internal/effect-execution.ts +70 -0
  194. package/src/internal/safe-equal.ts +27 -0
  195. package/src/ledger.ts +45 -11
  196. package/src/mcp.ts +65 -0
  197. package/src/node-direct.ts +37 -0
  198. package/src/reconciliation-worker.ts +372 -0
  199. package/src/reflection.ts +7 -0
  200. package/src/server/client-ip.ts +60 -0
  201. package/src/server/context.ts +50 -2
  202. package/src/server/contract.ts +26 -7
  203. package/src/server/http.ts +58 -0
  204. package/src/server/idempotency-lane.ts +321 -0
  205. package/src/server/install.ts +28 -0
  206. package/src/server/ledger-lane.ts +125 -0
  207. package/src/server/mcp-hook.ts +41 -0
  208. package/src/server/node-outcome-hook.ts +9 -0
  209. package/src/server/node-outcome.ts +112 -0
  210. package/src/server/plugin.ts +92 -0
  211. package/src/server/query.ts +119 -0
  212. package/src/server/registry.ts +36 -6
  213. package/src/server/request-context.ts +271 -0
  214. package/src/server/respond.ts +94 -0
  215. package/src/server/runtime-core.ts +74 -0
  216. package/src/server/server-types.ts +204 -0
  217. package/src/server/server.ts +448 -1314
  218. package/src/server/sse-hook.ts +14 -0
  219. package/src/server/sse.ts +26 -0
  220. package/src/server/transport-lane.ts +141 -0
  221. package/src/server/websocket.ts +35 -1
  222. package/src/server/ws-hook.ts +8 -19
  223. package/src/server.ts +92 -0
  224. package/src/transport-codec-rich.ts +20 -0
  225. package/src/transport-codec.ts +250 -0
  226. package/src/transport-plugin.ts +2 -0
  227. package/src/wire.ts +474 -0
  228. package/src/ws.ts +33 -10
  229. package/dist/invariants.d.ts +0 -70
  230. package/dist/invariants.d.ts.map +0 -1
  231. package/dist/invariants.js +0 -487
  232. package/dist/invariants.js.map +0 -1
  233. package/src/invariants.ts +0 -604
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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
- * @nifrajs/core — Bun-native, contract-first HTTP framework.
2
+ * `@nifrajs/core` — Nifra's lean HTTP server API.
3
3
  *
4
- * The router is the perf-critical heart; the server and inline API are built on
5
- * the unified route descriptor.
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, so the literal can't go stale
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 = "1.13.0";
15
- export * from "./assurance.js";
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.1.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;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAiB,CAAA;AAIxC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA6B,MAAM,aAAa,CAAA;AACzF,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,cAAc,EAAsB,MAAM,qBAAqB,CAAA;AACxE,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,OAAO,EAAe,MAAM,EAAoB,MAAM,oBAAoB,CAAA;AAUnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAGL,MAAM,EAIN,OAAO,GACR,MAAM,UAAU,CAAA;AASjB,OAAO,EAGL,cAAc,EAEd,SAAS,GAKV,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAEL,YAAY,EACZ,eAAe,EACf,SAAS,EACT,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,oBAAoB,EACpB,UAAU,EAIV,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAKL,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAiBlB,MAAM,EAEN,MAAM,EAEN,cAAc,GACf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAKL,GAAG,EAEH,cAAc,GACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAGL,aAAa,GAId,MAAM,qBAAqB,CAAA;AAS5B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
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"}
@@ -1,3 +1,5 @@
1
+ import type { EffectLifecycleObserver } from "../effect-lifecycle.js";
2
+ import type { EffectCost } from "../ledger.js";
1
3
  export declare const CAPABILITY_GUARD: unique symbol;
2
4
  export declare function validCapabilityId(value: string): boolean;
3
5
  export interface CapabilityUseEvent {
@@ -5,12 +7,71 @@ export interface CapabilityUseEvent {
5
7
  readonly method: string;
6
8
  readonly path: string;
7
9
  }
10
+ /** Token-only metadata supplied to an asynchronous capability admission interceptor. */
11
+ export interface CapabilityInterceptorEvent extends CapabilityUseEvent {
12
+ readonly effectId: string;
13
+ readonly signal: AbortSignal;
14
+ readonly target?: string;
15
+ readonly cost?: EffectCost;
16
+ readonly digest?: string;
17
+ }
18
+ /** Server-owned identity binding for durable admission. Values are opaque tokens, never payloads. */
19
+ export interface CapabilityExecutionIdentity {
20
+ readonly tenantId: string;
21
+ readonly principalId: string;
22
+ }
23
+ export interface CapabilityApprovalInput extends CapabilityExecutionIdentity {
24
+ /** Signed token returned by the approval coordinator after the first suspended attempt. */
25
+ readonly resumeToken?: string;
26
+ }
27
+ export interface CapabilityApprovalGate {
28
+ authorize(input: {
29
+ readonly effectId: string;
30
+ readonly capability: string;
31
+ readonly target?: string;
32
+ readonly digest?: string;
33
+ readonly identity: CapabilityExecutionIdentity;
34
+ readonly resumeToken?: string;
35
+ readonly signal: AbortSignal;
36
+ }): void | PromiseLike<void>;
37
+ }
38
+ /** Durable, token-only journal seam. Implementations must fail closed on transition failure. */
39
+ export interface CapabilityExecutionJournal {
40
+ intent(input: {
41
+ readonly effectId: string;
42
+ readonly capability: string;
43
+ readonly target?: string;
44
+ readonly digest?: string;
45
+ readonly identity?: CapabilityExecutionIdentity;
46
+ }): void | PromiseLike<void>;
47
+ executing(effectId: string): void | PromiseLike<void>;
48
+ committed(effectId: string): void | PromiseLike<void>;
49
+ failed(effectId: string, input: {
50
+ readonly began: boolean;
51
+ readonly errorCode: string;
52
+ }): void | PromiseLike<void>;
53
+ }
54
+ /** Continue to the next admission policy. The owned effect runs only after the full chain admits. */
55
+ export type CapabilityInterceptorNext = () => Promise<void>;
56
+ export type CapabilityInterceptor = (event: CapabilityInterceptorEvent, next: CapabilityInterceptorNext) => void | PromiseLike<void>;
57
+ export interface AroundCapabilityOptions {
58
+ /** Maximum admission time in milliseconds. Default 30_000. */
59
+ readonly timeoutMs?: number;
60
+ }
61
+ export interface RegisteredCapabilityInterceptor {
62
+ readonly interceptor: CapabilityInterceptor;
63
+ readonly timeoutMs: number;
64
+ }
65
+ export declare const DEFAULT_CAPABILITY_INTERCEPTOR_TIMEOUT_MS = 30000;
8
66
  export interface CapabilityGuard {
9
67
  readonly allowed: readonly string[];
10
68
  readonly method: string;
11
69
  readonly path: string;
12
70
  readonly onUse?: (event: CapabilityUseEvent) => void;
71
+ readonly trackEffect?: (context: object, committed: boolean) => void;
72
+ readonly interceptors: readonly RegisteredCapabilityInterceptor[];
73
+ readonly observers: readonly EffectLifecycleObserver[];
13
74
  }
14
75
  export declare function normalizeRouteCapabilities(values: readonly string[] | undefined): readonly string[];
15
- export declare function createCapabilityGuard(allowed: readonly string[], method: string, path: string, onUse: ((event: CapabilityUseEvent) => void) | undefined): CapabilityGuard;
76
+ export declare function createCapabilityGuard(allowed: readonly string[], method: string, path: string, onUse: ((event: CapabilityUseEvent) => void) | undefined, trackEffect: ((context: object, committed: boolean) => void) | undefined, interceptors: readonly RegisteredCapabilityInterceptor[], observers: readonly EffectLifecycleObserver[]): CapabilityGuard;
16
77
  //# sourceMappingURL=capability-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capability-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/capability-runtime.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,eAAmC,CAAA;AAGhE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAA;CACrD;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACpC,SAAS,MAAM,EAAE,CAiBnB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC,GAAG,SAAS,GACvD,eAAe,CAEjB"}
1
+ {"version":3,"file":"capability-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/capability-runtime.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ const CAPABILITY_ID = /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/;
3
3
  export function validCapabilityId(value) {
4
4
  return CAPABILITY_ID.test(value);
5
5
  }
6
+ export const DEFAULT_CAPABILITY_INTERCEPTOR_TIMEOUT_MS = 30_000;
6
7
  export function normalizeRouteCapabilities(values) {
7
8
  if (values === undefined)
8
9
  return Object.freeze([]);
@@ -21,7 +22,15 @@ export function normalizeRouteCapabilities(values) {
21
22
  }
22
23
  return Object.freeze(out);
23
24
  }
24
- export function createCapabilityGuard(allowed, method, path, onUse) {
25
- return Object.freeze({ allowed, method, path, ...(onUse !== undefined ? { onUse } : {}) });
25
+ export function createCapabilityGuard(allowed, method, path, onUse, trackEffect, interceptors, observers) {
26
+ return Object.freeze({
27
+ allowed,
28
+ method,
29
+ path,
30
+ ...(onUse !== undefined ? { onUse } : {}),
31
+ ...(trackEffect !== undefined ? { trackEffect } : {}),
32
+ interceptors,
33
+ observers,
34
+ });
26
35
  }
27
36
  //# sourceMappingURL=capability-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"capability-runtime.js","sourceRoot":"","sources":["../../src/internal/capability-runtime.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAChE,MAAM,aAAa,GAAG,oCAAoC,CAAA;AAE1D,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAClC,CAAC;AAeD,MAAM,UAAU,0BAA0B,CACxC,MAAqC;IAErC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAA;IACtF,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,oCAAoC,CACvG,CAAA;QACH,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,MAAM,UAAU,qBAAqB,CACnC,OAA0B,EAC1B,MAAc,EACd,IAAY,EACZ,KAAwD;IAExD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;AAC5F,CAAC"}
1
+ {"version":3,"file":"capability-runtime.js","sourceRoot":"","sources":["../../src/internal/capability-runtime.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAChE,MAAM,aAAa,GAAG,oCAAoC,CAAA;AAE1D,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAClC,CAAC;AA2ED,MAAM,CAAC,MAAM,yCAAyC,GAAG,MAAM,CAAA;AAY/D,MAAM,UAAU,0BAA0B,CACxC,MAAqC;IAErC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAA;IACtF,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CACb,6CAA6C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,oCAAoC,CACvG,CAAA;QACH,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,MAAM,UAAU,qBAAqB,CACnC,OAA0B,EAC1B,MAAc,EACd,IAAY,EACZ,KAAwD,EACxD,WAAwE,EACxE,YAAwD,EACxD,SAA6C;IAE7C,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO;QACP,MAAM;QACN,IAAI;QACJ,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,YAAY;QACZ,SAAS;KACV,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Request-local owned-effect scope used by idempotency and every capability boundary. */
2
+ import { type EffectEvidenceScope, type EffectScopeEvidence } from "../effect-scope.js";
3
+ export type RequestEffectEvidence = EffectScopeEvidence;
4
+ export declare function beginRequestEffectTracking(request: Request): EffectEvidenceScope;
5
+ export declare function requestEffectScope(request: Request): EffectEvidenceScope | undefined;
6
+ export declare function requestEffectEvidence(request: Request): RequestEffectEvidence;
7
+ export declare function effectScopeForContext(context: object): EffectEvidenceScope | undefined;
8
+ export declare function markEffect(context: object, committed: boolean): void;
9
+ /** A legacy beacon cannot prove what happens after the call, so it is immediately ambiguous. */
10
+ export declare function markBeaconEffectBegan(context: object): void;
11
+ export declare function markEffectExecuting(context: object): void;
12
+ export declare function markEffectCommitted(context: object): void;
13
+ export declare function markEffectAmbiguous(context: object): void;
14
+ export declare function markRequestSafeToRetry(context: object): void;
15
+ export declare function requestIsSafeToRetry(request: Request): boolean;
16
+ //# sourceMappingURL=effect-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-execution.d.ts","sourceRoot":"","sources":["../../src/internal/effect-execution.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAA;AAE3B,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAA;AAIvD,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAIhF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAEpF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,qBAAqB,CAK7E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAGtF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAIpE;AAED,gGAAgG;AAChG,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ5D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,50 @@
1
+ /** Request-local owned-effect scope used by idempotency and every capability boundary. */
2
+ import { createEffectEvidenceScope, } from "../effect-scope.js";
3
+ const scopeByRequest = new WeakMap();
4
+ export function beginRequestEffectTracking(request) {
5
+ const scope = createEffectEvidenceScope();
6
+ scopeByRequest.set(request, scope);
7
+ return scope;
8
+ }
9
+ export function requestEffectScope(request) {
10
+ return scopeByRequest.get(request);
11
+ }
12
+ export function requestEffectEvidence(request) {
13
+ return (scopeByRequest.get(request)?.evidence() ??
14
+ Object.freeze({ began: false, committed: false, ambiguous: false }));
15
+ }
16
+ export function effectScopeForContext(context) {
17
+ const request = context.req;
18
+ return request instanceof Request ? scopeByRequest.get(request) : undefined;
19
+ }
20
+ export function markEffect(context, committed) {
21
+ const scope = effectScopeForContext(context);
22
+ if (committed)
23
+ scope?.markCommitted();
24
+ else
25
+ scope?.markBegan();
26
+ }
27
+ /** A legacy beacon cannot prove what happens after the call, so it is immediately ambiguous. */
28
+ export function markBeaconEffectBegan(context) {
29
+ effectScopeForContext(context)?.markBegan();
30
+ }
31
+ export function markEffectExecuting(context) {
32
+ effectScopeForContext(context)?.markBegan();
33
+ }
34
+ export function markEffectCommitted(context) {
35
+ effectScopeForContext(context)?.markCommitted();
36
+ }
37
+ export function markEffectAmbiguous(context) {
38
+ effectScopeForContext(context)?.markAmbiguous();
39
+ }
40
+ export function markRequestSafeToRetry(context) {
41
+ const scope = effectScopeForContext(context);
42
+ if (scope === undefined) {
43
+ throw new Error("markIdempotencySafeToRetry() requires an active route with idempotency enabled");
44
+ }
45
+ scope.markSafeToRetry();
46
+ }
47
+ export function requestIsSafeToRetry(request) {
48
+ return scopeByRequest.get(request)?.safeToRetry() ?? false;
49
+ }
50
+ //# sourceMappingURL=effect-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-execution.js","sourceRoot":"","sources":["../../src/internal/effect-execution.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAE1F,OAAO,EACL,yBAAyB,GAG1B,MAAM,oBAAoB,CAAA;AAI3B,MAAM,cAAc,GAAG,IAAI,OAAO,EAAgC,CAAA;AAElE,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,KAAK,GAAG,yBAAyB,EAAE,CAAA;IACzC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAClC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,CACL,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE;QACvC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CACpE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,OAAO,GAAI,OAAsC,CAAC,GAAG,CAAA;IAC3D,OAAO,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,SAAkB;IAC5D,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,SAAS;QAAE,KAAK,EAAE,aAAa,EAAE,CAAA;;QAChC,KAAK,EAAE,SAAS,EAAE,CAAA;AACzB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,qBAAqB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,qBAAqB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,qBAAqB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,qBAAqB,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAA;IACH,CAAC;IACD,KAAK,CAAC,eAAe,EAAE,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,KAAK,CAAA;AAC5D,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Constant-time string comparison for credential-shaped values - lease tokens, token hashes, and
3
+ * binding digests.
4
+ *
5
+ * `a !== b` returns as soon as it finds a differing character, so how long it takes reveals how much
6
+ * of a guess was correct. That is only exploitable when an attacker can submit guesses and measure,
7
+ * which is not the case on every path here - but these values are credentials, the comparison is on
8
+ * the verification path, and doing it correctly costs nothing. Doing it inconsistently is what makes
9
+ * the one place that matters easy to miss.
10
+ *
11
+ * Length is compared first, so a length difference is still observable. Every value compared through
12
+ * this helper is fixed-width by construction (a UUID, a SHA-256 hex/base64url digest), so length
13
+ * carries no secret. Content comparison always visits every character.
14
+ *
15
+ * Synchronous on purpose: the callers are store transitions and lease checks that are themselves
16
+ * synchronous. A hash-then-compare variant (which would also hide length) is available as
17
+ * `timingSafeEqualString` in `@nifrajs/middleware`, but it is async and would force those paths async.
18
+ */
19
+ export declare function safeEqual(a: string | undefined, b: string | undefined): boolean;
20
+ //# sourceMappingURL=safe-equal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-equal.d.ts","sourceRoot":"","sources":["../../src/internal/safe-equal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAQ/E"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Constant-time string comparison for credential-shaped values - lease tokens, token hashes, and
3
+ * binding digests.
4
+ *
5
+ * `a !== b` returns as soon as it finds a differing character, so how long it takes reveals how much
6
+ * of a guess was correct. That is only exploitable when an attacker can submit guesses and measure,
7
+ * which is not the case on every path here - but these values are credentials, the comparison is on
8
+ * the verification path, and doing it correctly costs nothing. Doing it inconsistently is what makes
9
+ * the one place that matters easy to miss.
10
+ *
11
+ * Length is compared first, so a length difference is still observable. Every value compared through
12
+ * this helper is fixed-width by construction (a UUID, a SHA-256 hex/base64url digest), so length
13
+ * carries no secret. Content comparison always visits every character.
14
+ *
15
+ * Synchronous on purpose: the callers are store transitions and lease checks that are themselves
16
+ * synchronous. A hash-then-compare variant (which would also hide length) is available as
17
+ * `timingSafeEqualString` in `@nifrajs/middleware`, but it is async and would force those paths async.
18
+ */
19
+ export function safeEqual(a, b) {
20
+ // Accepts `undefined` so optional binding fields keep their exact `!==` semantics at call sites:
21
+ // absent equals absent, and absent never equals present. Neither branch is secret-bearing.
22
+ if (a === undefined || b === undefined)
23
+ return a === b;
24
+ if (a.length !== b.length)
25
+ return false;
26
+ let diff = 0;
27
+ for (let i = 0; i < a.length; i++)
28
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
29
+ return diff === 0;
30
+ }
31
+ //# sourceMappingURL=safe-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-equal.js","sourceRoot":"","sources":["../../src/internal/safe-equal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,SAAS,CAAC,CAAqB,EAAE,CAAqB;IACpE,iGAAiG;IACjG,2FAA2F;IAC3F,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IACtD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC5E,OAAO,IAAI,KAAK,CAAC,CAAA;AACnB,CAAC"}
package/dist/ledger.d.ts CHANGED
@@ -20,18 +20,23 @@ export type EffectPhase = "intent" | "committed" | "failed" | "compensated";
20
20
  * resource* an effect consumed; mapping counters to money/pricing is deliberately out of scope here.
21
21
  */
22
22
  export type EffectCost = Readonly<Record<string, number>>;
23
- /** Caller-supplied fields for one entry. Everything else (`seq`, `at`) is assigned by the ledger. */
24
- export interface EffectEntryInput {
25
- /** Capability token (`db.write`, `payments.charge`). Must be a valid capability id. */
26
- readonly capability: string;
27
- /** Default `"intent"`. Record `committed`/`failed`/`compensated` only after the outcome is known. */
28
- readonly phase?: EffectPhase;
23
+ /** Token-only caller metadata shared by an effect intent and outcome. */
24
+ export interface EffectMetadata {
29
25
  /** Adapter/resource token (`repo:orders`, `provider:payments`). A token — never a value or a row. */
30
26
  readonly target?: string;
31
27
  /** Dimensionless counters; see {@link EffectCost}. At most {@link MAX_COST_AXES} axes. */
32
28
  readonly cost?: EffectCost;
33
29
  /** Optional keyed-HMAC digest of the effect payload (see {@link computeEffectDigest}); hex, 64 chars. */
34
30
  readonly digest?: string;
31
+ }
32
+ /** Caller-supplied fields for one entry. Everything else (`seq`, `at`) is assigned by the ledger. */
33
+ export interface EffectEntryInput extends EffectMetadata {
34
+ /** Opaque execution correlation token shared by one intent and its terminal outcome. */
35
+ readonly effectId?: string;
36
+ /** Capability token (`db.write`, `payments.charge`). Must be a valid capability id. */
37
+ readonly capability: string;
38
+ /** Default `"intent"`. Record `committed`/`failed`/`compensated` only after the outcome is known. */
39
+ readonly phase?: EffectPhase;
35
40
  /** Outcome error as a bounded token code — never a message, never a stack. */
36
41
  readonly error?: {
37
42
  readonly code: string;
@@ -43,6 +48,7 @@ export interface EffectEntry {
43
48
  readonly seq: number;
44
49
  /** Milliseconds from the ledger's (injectable) clock at append time. */
45
50
  readonly at: number;
51
+ readonly effectId?: string;
46
52
  readonly capability: string;
47
53
  readonly phase: EffectPhase;
48
54
  readonly target?: string;
@@ -114,6 +120,8 @@ export interface CreateRequestLedgerOptions {
114
120
  export declare const DEFAULT_MAX_ENTRIES = 1000;
115
121
  /** Most cost axes one entry may carry. */
116
122
  export declare const MAX_COST_AXES = 8;
123
+ /** Validate, copy, and freeze token-only effect metadata before it reaches a ledger or policy hook. */
124
+ export declare function normalizeEffectMetadata(input: EffectMetadata): EffectMetadata;
117
125
  /** Create a bounded per-request ledger. The server wires one per capability-declaring route. */
118
126
  export declare function createRequestLedger(options: CreateRequestLedgerOptions): RequestLedger;
119
127
  export interface MemoryLedgerSinkOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
package/dist/ledger.js CHANGED
@@ -49,9 +49,12 @@ function printableToken(value, maxLength) {
49
49
  return true;
50
50
  }
51
51
  function validateCost(cost) {
52
+ if (Object(cost) !== cost || Array.isArray(cost)) {
53
+ throw new TypeError("effect ledger: invalid cost");
54
+ }
52
55
  const keys = Object.keys(cost);
53
56
  if (keys.length > MAX_COST_AXES) {
54
- throw new TypeError(`effect ledger: cost carries more than ${MAX_COST_AXES} axes`);
57
+ throw new TypeError(`effect ledger: more than ${MAX_COST_AXES} cost axes`);
55
58
  }
56
59
  for (const key of keys) {
57
60
  if (!validCapabilityId(key)) {
@@ -59,11 +62,28 @@ function validateCost(cost) {
59
62
  }
60
63
  const value = cost[key];
61
64
  if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
62
- throw new TypeError(`effect ledger: cost axis ${key} must be a finite non-negative number`);
65
+ throw new TypeError(`effect ledger: invalid cost axis ${key}`);
63
66
  }
64
67
  }
65
68
  return Object.freeze({ ...cost });
66
69
  }
70
+ /** Validate, copy, and freeze token-only effect metadata before it reaches a ledger or policy hook. */
71
+ export function normalizeEffectMetadata(input) {
72
+ if (typeof input !== "object" || input === null || Array.isArray(input)) {
73
+ throw new TypeError("effect ledger: effect metadata must be an object");
74
+ }
75
+ if (input.target !== undefined && !printableToken(input.target, TARGET_MAX_LENGTH)) {
76
+ throw new TypeError("effect ledger: invalid target");
77
+ }
78
+ if (input.digest !== undefined && !DIGEST_HEX.test(input.digest)) {
79
+ throw new TypeError("effect ledger: invalid digest");
80
+ }
81
+ return Object.freeze({
82
+ ...(input.target !== undefined ? { target: input.target } : {}),
83
+ ...(input.cost !== undefined ? { cost: validateCost(input.cost) } : {}),
84
+ ...(input.digest !== undefined ? { digest: input.digest } : {}),
85
+ });
86
+ }
67
87
  const defaultClock = () => performance.now();
68
88
  class BoundedRequestLedger {
69
89
  items = [];
@@ -113,11 +133,14 @@ class BoundedRequestLedger {
113
133
  if (!EFFECT_PHASES.has(phase)) {
114
134
  throw new TypeError(`effect ledger: invalid phase ${JSON.stringify(phase)}`);
115
135
  }
136
+ if (input.effectId !== undefined && !printableToken(input.effectId, 64)) {
137
+ throw new TypeError("effect ledger: invalid effectId");
138
+ }
116
139
  if (input.target !== undefined && !printableToken(input.target, TARGET_MAX_LENGTH)) {
117
- throw new TypeError("effect ledger: target must be a bounded printable token");
140
+ throw new TypeError("effect ledger: invalid target");
118
141
  }
119
142
  if (input.digest !== undefined && !DIGEST_HEX.test(input.digest)) {
120
- throw new TypeError("effect ledger: digest must be 64 lowercase hex characters");
143
+ throw new TypeError("effect ledger: invalid digest");
121
144
  }
122
145
  if (input.error !== undefined && !ERROR_CODE.test(input.error.code)) {
123
146
  throw new TypeError("effect ledger: error code must be a bounded lowercase token");
@@ -130,6 +153,7 @@ class BoundedRequestLedger {
130
153
  const entry = Object.freeze({
131
154
  seq: this.items.length,
132
155
  at,
156
+ ...(input.effectId !== undefined ? { effectId: input.effectId } : {}),
133
157
  capability: input.capability,
134
158
  phase,
135
159
  ...(input.target !== undefined ? { target: input.target } : {}),
@@ -183,7 +207,9 @@ function canonicalEntry(entry) {
183
207
  .sort()
184
208
  .map((key) => `${JSON.stringify(key)}:${JSON.stringify(entry.cost[key])}`)
185
209
  .join(",")}}`;
186
- return (`{"seq":${entry.seq},"at":${JSON.stringify(entry.at)},"capability":${JSON.stringify(entry.capability)},"phase":${JSON.stringify(entry.phase)}` +
210
+ return (`{"seq":${entry.seq},"at":${JSON.stringify(entry.at)}` +
211
+ `${entry.effectId !== undefined ? `,"effectId":${JSON.stringify(entry.effectId)}` : ""}` +
212
+ `,"capability":${JSON.stringify(entry.capability)},"phase":${JSON.stringify(entry.phase)}` +
187
213
  `${entry.target !== undefined ? `,"target":${JSON.stringify(entry.target)}` : ""}` +
188
214
  cost +
189
215
  `${entry.digest !== undefined ? `,"digest":${JSON.stringify(entry.digest)}` : ""}` +
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
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
@@ -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"}