@nwire/forge 0.9.2 → 0.10.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 (291) hide show
  1. package/README.md +133 -155
  2. package/dist/foundation.d.ts +0 -13
  3. package/dist/foundation.js +2 -13
  4. package/dist/framework-events.d.ts +51 -54
  5. package/dist/framework-events.js +18 -65
  6. package/dist/{cli-runner.d.ts → helpers/cli-runner.d.ts} +2 -3
  7. package/dist/{cli-runner.js → helpers/cli-runner.js} +11 -27
  8. package/dist/{public-marker.d.ts → helpers/public-marker.d.ts} +0 -1
  9. package/dist/{public-marker.js → helpers/public-marker.js} +0 -1
  10. package/dist/{response.d.ts → helpers/response.d.ts} +0 -1
  11. package/dist/{response.js → helpers/response.js} +0 -1
  12. package/dist/helpers/retry-helpers.d.ts +22 -0
  13. package/dist/helpers/retry-helpers.js +43 -0
  14. package/dist/{validate.d.ts → helpers/validate.d.ts} +0 -1
  15. package/dist/{validate.js → helpers/validate.js} +0 -1
  16. package/dist/index.d.ts +42 -48
  17. package/dist/index.js +47 -55
  18. package/dist/{event-message.d.ts → messages/event-message.d.ts} +0 -1
  19. package/dist/{event-message.js → messages/event-message.js} +0 -1
  20. package/dist/{dev-logger.d.ts → observability/dev-logger.d.ts} +2 -2
  21. package/dist/{dev-logger.js → observability/dev-logger.js} +0 -30
  22. package/dist/{define-action.d.ts → primitives/define-action.d.ts} +0 -1
  23. package/dist/{define-action.js → primitives/define-action.js} +0 -1
  24. package/dist/{define-actor.d.ts → primitives/define-actor.d.ts} +0 -1
  25. package/dist/{define-actor.js → primitives/define-actor.js} +0 -1
  26. package/dist/{define-cron.d.ts → primitives/define-cron.d.ts} +0 -1
  27. package/dist/{define-cron.js → primitives/define-cron.js} +0 -1
  28. package/dist/{define-error.d.ts → primitives/define-error.d.ts} +0 -1
  29. package/dist/{define-error.js → primitives/define-error.js} +0 -1
  30. package/dist/{define-external-call.d.ts → primitives/define-external-call.d.ts} +0 -1
  31. package/dist/{define-external-call.js → primitives/define-external-call.js} +0 -1
  32. package/dist/{define-handler.d.ts → primitives/define-handler.d.ts} +29 -2
  33. package/dist/{define-handler.js → primitives/define-handler.js} +13 -2
  34. package/dist/{define-inbound-webhook.d.ts → primitives/define-inbound-webhook.d.ts} +1 -2
  35. package/dist/{define-inbound-webhook.js → primitives/define-inbound-webhook.js} +1 -2
  36. package/dist/{define-inbox.d.ts → primitives/define-inbox.d.ts} +0 -1
  37. package/dist/{define-inbox.js → primitives/define-inbox.js} +0 -1
  38. package/dist/{define-outbox.d.ts → primitives/define-outbox.d.ts} +0 -1
  39. package/dist/{define-outbox.js → primitives/define-outbox.js} +0 -1
  40. package/dist/{define-projection.d.ts → primitives/define-projection.d.ts} +0 -1
  41. package/dist/{define-projection.js → primitives/define-projection.js} +0 -1
  42. package/dist/{define-query.d.ts → primitives/define-query.d.ts} +1 -2
  43. package/dist/{define-query.js → primitives/define-query.js} +1 -2
  44. package/dist/{define-schema.d.ts → primitives/define-schema.d.ts} +1 -2
  45. package/dist/{define-schema.js → primitives/define-schema.js} +1 -2
  46. package/dist/{define-upcaster.d.ts → primitives/define-upcaster.d.ts} +0 -1
  47. package/dist/{define-upcaster.js → primitives/define-upcaster.js} +0 -1
  48. package/dist/{define-workflow.d.ts → primitives/define-workflow.d.ts} +2 -3
  49. package/dist/{define-workflow.js → primitives/define-workflow.js} +2 -3
  50. package/dist/runtime/create-forge-app.d.ts +64 -0
  51. package/dist/runtime/create-forge-app.js +78 -0
  52. package/dist/runtime/forge-dispatcher.d.ts +148 -0
  53. package/dist/{runtime.js → runtime/forge-dispatcher.js} +242 -571
  54. package/dist/runtime/forge-plugin.d.ts +59 -0
  55. package/dist/runtime/forge-plugin.js +121 -0
  56. package/dist/runtime/forge-types.d.ts +204 -0
  57. package/dist/runtime/forge-types.js +5 -0
  58. package/dist/{actor-store.d.ts → stores/actor-store.d.ts} +1 -2
  59. package/dist/{actor-store.js → stores/actor-store.js} +0 -1
  60. package/dist/{idempotency-store.d.ts → stores/idempotency-store.d.ts} +0 -1
  61. package/dist/{idempotency-store.js → stores/idempotency-store.js} +0 -1
  62. package/dist/{projection-store.d.ts → stores/projection-store.d.ts} +0 -1
  63. package/dist/{projection-store.js → stores/projection-store.js} +0 -1
  64. package/dist/{workflow-timer-store.d.ts → stores/workflow-timer-store.d.ts} +0 -1
  65. package/dist/{workflow-timer-store.js → stores/workflow-timer-store.js} +0 -1
  66. package/package.json +11 -11
  67. package/dist/__tests__/action-hooks.test.d.ts +0 -8
  68. package/dist/__tests__/action-hooks.test.d.ts.map +0 -1
  69. package/dist/__tests__/action-hooks.test.js +0 -95
  70. package/dist/__tests__/action-hooks.test.js.map +0 -1
  71. package/dist/__tests__/actor-methods.test.d.ts +0 -9
  72. package/dist/__tests__/actor-methods.test.d.ts.map +0 -1
  73. package/dist/__tests__/actor-methods.test.js +0 -210
  74. package/dist/__tests__/actor-methods.test.js.map +0 -1
  75. package/dist/__tests__/actor-schema-bound.test.d.ts +0 -6
  76. package/dist/__tests__/actor-schema-bound.test.d.ts.map +0 -1
  77. package/dist/__tests__/actor-schema-bound.test.js +0 -112
  78. package/dist/__tests__/actor-schema-bound.test.js.map +0 -1
  79. package/dist/__tests__/actor-workflow-hooks.test.d.ts +0 -8
  80. package/dist/__tests__/actor-workflow-hooks.test.d.ts.map +0 -1
  81. package/dist/__tests__/actor-workflow-hooks.test.js +0 -106
  82. package/dist/__tests__/actor-workflow-hooks.test.js.map +0 -1
  83. package/dist/__tests__/app-capabilities.test.d.ts +0 -19
  84. package/dist/__tests__/app-capabilities.test.d.ts.map +0 -1
  85. package/dist/__tests__/app-capabilities.test.js +0 -57
  86. package/dist/__tests__/app-capabilities.test.js.map +0 -1
  87. package/dist/__tests__/cli-runner.test.d.ts +0 -6
  88. package/dist/__tests__/cli-runner.test.d.ts.map +0 -1
  89. package/dist/__tests__/cli-runner.test.js +0 -158
  90. package/dist/__tests__/cli-runner.test.js.map +0 -1
  91. package/dist/__tests__/create-app.test.d.ts +0 -18
  92. package/dist/__tests__/create-app.test.d.ts.map +0 -1
  93. package/dist/__tests__/create-app.test.js +0 -189
  94. package/dist/__tests__/create-app.test.js.map +0 -1
  95. package/dist/__tests__/cross-service-bus.test.d.ts +0 -8
  96. package/dist/__tests__/cross-service-bus.test.d.ts.map +0 -1
  97. package/dist/__tests__/cross-service-bus.test.js +0 -139
  98. package/dist/__tests__/cross-service-bus.test.js.map +0 -1
  99. package/dist/__tests__/define-schema.test.d.ts +0 -5
  100. package/dist/__tests__/define-schema.test.d.ts.map +0 -1
  101. package/dist/__tests__/define-schema.test.js +0 -83
  102. package/dist/__tests__/define-schema.test.js.map +0 -1
  103. package/dist/__tests__/dev-logger.test.d.ts +0 -9
  104. package/dist/__tests__/dev-logger.test.d.ts.map +0 -1
  105. package/dist/__tests__/dev-logger.test.js +0 -126
  106. package/dist/__tests__/dev-logger.test.js.map +0 -1
  107. package/dist/__tests__/external-call.test.d.ts +0 -14
  108. package/dist/__tests__/external-call.test.d.ts.map +0 -1
  109. package/dist/__tests__/external-call.test.js +0 -99
  110. package/dist/__tests__/external-call.test.js.map +0 -1
  111. package/dist/__tests__/framework-events.test.d.ts +0 -13
  112. package/dist/__tests__/framework-events.test.d.ts.map +0 -1
  113. package/dist/__tests__/framework-events.test.js +0 -204
  114. package/dist/__tests__/framework-events.test.js.map +0 -1
  115. package/dist/__tests__/inline-handler.test.d.ts +0 -8
  116. package/dist/__tests__/inline-handler.test.d.ts.map +0 -1
  117. package/dist/__tests__/inline-handler.test.js +0 -101
  118. package/dist/__tests__/inline-handler.test.js.map +0 -1
  119. package/dist/__tests__/lifecycle-logging.test.d.ts +0 -12
  120. package/dist/__tests__/lifecycle-logging.test.d.ts.map +0 -1
  121. package/dist/__tests__/lifecycle-logging.test.js +0 -114
  122. package/dist/__tests__/lifecycle-logging.test.js.map +0 -1
  123. package/dist/__tests__/middleware.test.d.ts +0 -7
  124. package/dist/__tests__/middleware.test.d.ts.map +0 -1
  125. package/dist/__tests__/middleware.test.js +0 -109
  126. package/dist/__tests__/middleware.test.js.map +0 -1
  127. package/dist/__tests__/module-needs.test.d.ts +0 -10
  128. package/dist/__tests__/module-needs.test.d.ts.map +0 -1
  129. package/dist/__tests__/module-needs.test.js +0 -77
  130. package/dist/__tests__/module-needs.test.js.map +0 -1
  131. package/dist/__tests__/module-topo-sort.test.d.ts +0 -15
  132. package/dist/__tests__/module-topo-sort.test.d.ts.map +0 -1
  133. package/dist/__tests__/module-topo-sort.test.js +0 -105
  134. package/dist/__tests__/module-topo-sort.test.js.map +0 -1
  135. package/dist/__tests__/multi-tenancy.test.d.ts +0 -10
  136. package/dist/__tests__/multi-tenancy.test.d.ts.map +0 -1
  137. package/dist/__tests__/multi-tenancy.test.js +0 -122
  138. package/dist/__tests__/multi-tenancy.test.js.map +0 -1
  139. package/dist/__tests__/needs-topology.test.d.ts +0 -11
  140. package/dist/__tests__/needs-topology.test.d.ts.map +0 -1
  141. package/dist/__tests__/needs-topology.test.js +0 -82
  142. package/dist/__tests__/needs-topology.test.js.map +0 -1
  143. package/dist/__tests__/plugin-app-narrow.test.d.ts +0 -12
  144. package/dist/__tests__/plugin-app-narrow.test.d.ts.map +0 -1
  145. package/dist/__tests__/plugin-app-narrow.test.js +0 -77
  146. package/dist/__tests__/plugin-app-narrow.test.js.map +0 -1
  147. package/dist/__tests__/plugin-closure.test.d.ts +0 -15
  148. package/dist/__tests__/plugin-closure.test.d.ts.map +0 -1
  149. package/dist/__tests__/plugin-closure.test.js +0 -140
  150. package/dist/__tests__/plugin-closure.test.js.map +0 -1
  151. package/dist/__tests__/plugin-stress.test.d.ts +0 -21
  152. package/dist/__tests__/plugin-stress.test.d.ts.map +0 -1
  153. package/dist/__tests__/plugin-stress.test.js +0 -203
  154. package/dist/__tests__/plugin-stress.test.js.map +0 -1
  155. package/dist/__tests__/plugin.test.d.ts +0 -10
  156. package/dist/__tests__/plugin.test.d.ts.map +0 -1
  157. package/dist/__tests__/plugin.test.js +0 -225
  158. package/dist/__tests__/plugin.test.js.map +0 -1
  159. package/dist/__tests__/primitives.test.d.ts +0 -9
  160. package/dist/__tests__/primitives.test.d.ts.map +0 -1
  161. package/dist/__tests__/primitives.test.js +0 -434
  162. package/dist/__tests__/primitives.test.js.map +0 -1
  163. package/dist/__tests__/production-readiness.test.d.ts +0 -22
  164. package/dist/__tests__/production-readiness.test.d.ts.map +0 -1
  165. package/dist/__tests__/production-readiness.test.js +0 -196
  166. package/dist/__tests__/production-readiness.test.js.map +0 -1
  167. package/dist/__tests__/provider.test.d.ts +0 -6
  168. package/dist/__tests__/provider.test.d.ts.map +0 -1
  169. package/dist/__tests__/provider.test.js +0 -122
  170. package/dist/__tests__/provider.test.js.map +0 -1
  171. package/dist/__tests__/public-marker.test.d.ts +0 -7
  172. package/dist/__tests__/public-marker.test.d.ts.map +0 -1
  173. package/dist/__tests__/public-marker.test.js +0 -58
  174. package/dist/__tests__/public-marker.test.js.map +0 -1
  175. package/dist/__tests__/retry-dlq.test.d.ts +0 -6
  176. package/dist/__tests__/retry-dlq.test.d.ts.map +0 -1
  177. package/dist/__tests__/retry-dlq.test.js +0 -68
  178. package/dist/__tests__/retry-dlq.test.js.map +0 -1
  179. package/dist/__tests__/validate.test.d.ts +0 -5
  180. package/dist/__tests__/validate.test.d.ts.map +0 -1
  181. package/dist/__tests__/validate.test.js +0 -53
  182. package/dist/__tests__/validate.test.js.map +0 -1
  183. package/dist/__tests__/workflow-saga.test.d.ts +0 -7
  184. package/dist/__tests__/workflow-saga.test.d.ts.map +0 -1
  185. package/dist/__tests__/workflow-saga.test.js +0 -265
  186. package/dist/__tests__/workflow-saga.test.js.map +0 -1
  187. package/dist/actor-store.d.ts.map +0 -1
  188. package/dist/actor-store.js.map +0 -1
  189. package/dist/cli-runner.d.ts.map +0 -1
  190. package/dist/cli-runner.js.map +0 -1
  191. package/dist/create-app.d.ts +0 -146
  192. package/dist/create-app.d.ts.map +0 -1
  193. package/dist/create-app.js +0 -703
  194. package/dist/create-app.js.map +0 -1
  195. package/dist/define-action.d.ts.map +0 -1
  196. package/dist/define-action.js.map +0 -1
  197. package/dist/define-actor.d.ts.map +0 -1
  198. package/dist/define-actor.js.map +0 -1
  199. package/dist/define-app.d.ts +0 -104
  200. package/dist/define-app.d.ts.map +0 -1
  201. package/dist/define-app.js +0 -49
  202. package/dist/define-app.js.map +0 -1
  203. package/dist/define-cron.d.ts.map +0 -1
  204. package/dist/define-cron.js.map +0 -1
  205. package/dist/define-error.d.ts.map +0 -1
  206. package/dist/define-error.js.map +0 -1
  207. package/dist/define-external-call.d.ts.map +0 -1
  208. package/dist/define-external-call.js.map +0 -1
  209. package/dist/define-handler.d.ts.map +0 -1
  210. package/dist/define-handler.js.map +0 -1
  211. package/dist/define-inbound-webhook.d.ts.map +0 -1
  212. package/dist/define-inbound-webhook.js.map +0 -1
  213. package/dist/define-inbox.d.ts.map +0 -1
  214. package/dist/define-inbox.js.map +0 -1
  215. package/dist/define-initializer.d.ts +0 -54
  216. package/dist/define-initializer.d.ts.map +0 -1
  217. package/dist/define-initializer.js +0 -38
  218. package/dist/define-initializer.js.map +0 -1
  219. package/dist/define-middleware.d.ts +0 -8
  220. package/dist/define-middleware.d.ts.map +0 -1
  221. package/dist/define-middleware.js +0 -8
  222. package/dist/define-middleware.js.map +0 -1
  223. package/dist/define-model.d.ts +0 -10
  224. package/dist/define-model.d.ts.map +0 -1
  225. package/dist/define-model.js +0 -13
  226. package/dist/define-model.js.map +0 -1
  227. package/dist/define-module.d.ts +0 -160
  228. package/dist/define-module.d.ts.map +0 -1
  229. package/dist/define-module.js +0 -63
  230. package/dist/define-module.js.map +0 -1
  231. package/dist/define-outbox.d.ts.map +0 -1
  232. package/dist/define-outbox.js.map +0 -1
  233. package/dist/define-plugin.d.ts +0 -195
  234. package/dist/define-plugin.d.ts.map +0 -1
  235. package/dist/define-plugin.js +0 -220
  236. package/dist/define-plugin.js.map +0 -1
  237. package/dist/define-projection.d.ts.map +0 -1
  238. package/dist/define-projection.js.map +0 -1
  239. package/dist/define-provider.d.ts +0 -49
  240. package/dist/define-provider.d.ts.map +0 -1
  241. package/dist/define-provider.js +0 -45
  242. package/dist/define-provider.js.map +0 -1
  243. package/dist/define-query.d.ts.map +0 -1
  244. package/dist/define-query.js.map +0 -1
  245. package/dist/define-resolver.d.ts +0 -111
  246. package/dist/define-resolver.d.ts.map +0 -1
  247. package/dist/define-resolver.js +0 -146
  248. package/dist/define-resolver.js.map +0 -1
  249. package/dist/define-schema.d.ts.map +0 -1
  250. package/dist/define-schema.js.map +0 -1
  251. package/dist/define-upcaster.d.ts.map +0 -1
  252. package/dist/define-upcaster.js.map +0 -1
  253. package/dist/define-workflow.d.ts.map +0 -1
  254. package/dist/define-workflow.js.map +0 -1
  255. package/dist/dev-logger.d.ts.map +0 -1
  256. package/dist/dev-logger.js.map +0 -1
  257. package/dist/event-message.d.ts.map +0 -1
  258. package/dist/event-message.js.map +0 -1
  259. package/dist/foundation.d.ts.map +0 -1
  260. package/dist/foundation.js.map +0 -1
  261. package/dist/framework-event-bus.d.ts +0 -13
  262. package/dist/framework-event-bus.d.ts.map +0 -1
  263. package/dist/framework-event-bus.js +0 -13
  264. package/dist/framework-event-bus.js.map +0 -1
  265. package/dist/framework-events.d.ts.map +0 -1
  266. package/dist/framework-events.js.map +0 -1
  267. package/dist/idempotency-store.d.ts.map +0 -1
  268. package/dist/idempotency-store.js.map +0 -1
  269. package/dist/index.d.ts.map +0 -1
  270. package/dist/index.js.map +0 -1
  271. package/dist/module-surface.d.ts +0 -47
  272. package/dist/module-surface.d.ts.map +0 -1
  273. package/dist/module-surface.js +0 -65
  274. package/dist/module-surface.js.map +0 -1
  275. package/dist/projection-store.d.ts.map +0 -1
  276. package/dist/projection-store.js.map +0 -1
  277. package/dist/public-marker.d.ts.map +0 -1
  278. package/dist/public-marker.js.map +0 -1
  279. package/dist/response.d.ts.map +0 -1
  280. package/dist/response.js.map +0 -1
  281. package/dist/runtime.d.ts +0 -621
  282. package/dist/runtime.d.ts.map +0 -1
  283. package/dist/runtime.js.map +0 -1
  284. package/dist/validate.d.ts.map +0 -1
  285. package/dist/validate.js.map +0 -1
  286. package/dist/when.d.ts +0 -101
  287. package/dist/when.d.ts.map +0 -1
  288. package/dist/when.js +0 -57
  289. package/dist/when.js.map +0 -1
  290. package/dist/workflow-timer-store.d.ts.map +0 -1
  291. package/dist/workflow-timer-store.js.map +0 -1
@@ -1,434 +0,0 @@
1
- /**
2
- * Forge contract tests — verify the public surface and the runtime end-to-end.
3
- *
4
- * Each test exercises one design rule. If a test fails, it likely means a
5
- * design rule changed and either the docs or the runtime need to be brought
6
- * back in sync.
7
- */
8
- import { describe, it, expect, beforeEach } from "vitest";
9
- import { z } from "zod";
10
- import { defineEvent } from "@nwire/messages";
11
- import * as forge from "../foundation.js";
12
- const { defineAction, defineActor, defineHandler, eventFactory, defineWorkflow, Runtime, parseDelay, InMemoryActorStore, } = forge;
13
- const SubmitInput = z.object({
14
- submissionId: z.string(),
15
- studentId: z.string(),
16
- answer: z.string(),
17
- });
18
- const FlagInput = z.object({
19
- submissionId: z.string(),
20
- confidence: z.number(),
21
- });
22
- const SubmissionSchema = z.object({
23
- submissionId: z.string(),
24
- studentId: z.string(),
25
- answer: z.string(),
26
- confidence: z.number().optional(),
27
- verdict: z.enum(["correct", "incorrect", "partial"]).optional(),
28
- gradedAt: z.string().optional(),
29
- });
30
- const submitAnswer = defineAction({
31
- name: "submissions.submit-answer",
32
- schema: SubmitInput,
33
- description: "Avi submits his answer to an exercise.",
34
- });
35
- const flagForReview = defineAction({
36
- name: "submissions.flag-for-review",
37
- schema: FlagInput,
38
- });
39
- const sendReviewReminder = defineAction({
40
- name: "submissions.send-review-reminder",
41
- schema: z.object({ submissionId: z.string() }),
42
- });
43
- const AnswerSubmittedEventDef = defineEvent({
44
- name: "submissions.answer-submitted",
45
- schema: z.object({
46
- submissionId: z.string(),
47
- studentId: z.string(),
48
- answer: z.string(),
49
- submittedAt: z.string().datetime(),
50
- }),
51
- });
52
- const AnswerSubmitted = eventFactory(AnswerSubmittedEventDef);
53
- const AnswerFlaggedEventDef = defineEvent({
54
- name: "submissions.answer-flagged",
55
- schema: z.object({
56
- submissionId: z.string(),
57
- studentId: z.string(),
58
- confidence: z.number(),
59
- flaggedAt: z.string().datetime(),
60
- }),
61
- });
62
- const AnswerFlagged = eventFactory(AnswerFlaggedEventDef);
63
- const AnswerGradedEventDef = defineEvent({
64
- name: "submissions.answer-graded",
65
- schema: z.object({
66
- submissionId: z.string(),
67
- verdict: z.enum(["correct", "incorrect", "partial"]),
68
- confidence: z.number(),
69
- gradedAt: z.string().datetime(),
70
- }),
71
- });
72
- const AnswerGraded = eventFactory(AnswerGradedEventDef);
73
- describe("eventFactory", () => {
74
- it("produces an EventMessage with validated payload", () => {
75
- const msg = AnswerSubmitted({
76
- submissionId: "sub-1",
77
- studentId: "avi",
78
- answer: "ה",
79
- submittedAt: "2026-05-10T10:00:00Z",
80
- });
81
- expect(msg.eventName).toBe("submissions.answer-submitted");
82
- expect(msg.payload.submissionId).toBe("sub-1");
83
- });
84
- it("throws on invalid payload (parse, not safeParse)", () => {
85
- expect(() => AnswerSubmitted({
86
- submissionId: "sub-1",
87
- studentId: "avi",
88
- answer: "ה",
89
- submittedAt: "not-a-date",
90
- })).toThrow();
91
- });
92
- it("exposes definition + name for introspection", () => {
93
- expect(AnswerSubmitted.name).toBe("submissions.answer-submitted");
94
- expect(AnswerSubmitted.definition).toBe(AnswerSubmittedEventDef);
95
- });
96
- });
97
- describe("defineActor (validation at definition time)", () => {
98
- it("rejects an actor whose initial state is not declared", () => {
99
- expect(() => defineActor("bogus", {
100
- schema: z.object({}),
101
- key: "id",
102
- initial: "never-declared",
103
- states: { other: {} },
104
- })).toThrow(/initial state/);
105
- });
106
- it("rejects a final state that also declares event reactions", () => {
107
- expect(() => defineActor("bogus", {
108
- schema: z.object({}),
109
- key: "id",
110
- initial: "a",
111
- states: {
112
- a: {},
113
- b: {
114
- final: true,
115
- on: { something: { target: "a" } },
116
- },
117
- },
118
- })).toThrow(/final state/);
119
- });
120
- it("builds an event index for O(1) dispatch", () => {
121
- const Submission = defineActor("submission", {
122
- schema: SubmissionSchema,
123
- key: "submissionId",
124
- initial: "submitted",
125
- states: {
126
- submitted: {
127
- on: {
128
- [AnswerFlagged.name]: {
129
- target: "under-review",
130
- assign: (_, e) => ({ confidence: e.confidence }),
131
- },
132
- },
133
- },
134
- "under-review": {},
135
- graded: { final: true },
136
- },
137
- });
138
- expect(Submission.eventIndex.has(AnswerFlagged.name)).toBe(true);
139
- expect(Submission.eventIndex.get(AnswerFlagged.name)?.[0]?.state).toBe("submitted");
140
- });
141
- });
142
- describe("Runtime end-to-end (handler returns events → actor reacts)", () => {
143
- let runtime;
144
- let store;
145
- beforeEach(() => {
146
- store = new InMemoryActorStore();
147
- runtime = new Runtime({ actorStore: store });
148
- });
149
- it("dispatches an action, runs the handler, applies returned event to actor", async () => {
150
- const Submission = defineActor("submission", {
151
- schema: SubmissionSchema,
152
- key: "submissionId",
153
- initial: "submitted",
154
- states: {
155
- submitted: {
156
- on: {
157
- [AnswerSubmitted.name]: {
158
- assign: (_, event) => {
159
- const e = event;
160
- return {
161
- submissionId: e.submissionId,
162
- studentId: e.studentId,
163
- answer: e.answer,
164
- };
165
- },
166
- },
167
- [AnswerFlagged.name]: {
168
- target: "under-review",
169
- assign: (_, event) => ({
170
- confidence: event.confidence,
171
- }),
172
- },
173
- },
174
- },
175
- "under-review": {
176
- after: {
177
- "3d": sendReviewReminder.name,
178
- },
179
- },
180
- graded: { final: true },
181
- },
182
- });
183
- const handler = defineHandler(submitAnswer, async (input) => {
184
- return AnswerSubmitted({
185
- submissionId: input.submissionId,
186
- studentId: input.studentId,
187
- answer: input.answer,
188
- submittedAt: "2026-05-10T10:00:00Z",
189
- });
190
- });
191
- runtime.registerActor(Submission);
192
- runtime.registerHandler(handler);
193
- await runtime.dispatch(submitAnswer, {
194
- submissionId: "sub-1",
195
- studentId: "avi",
196
- answer: "ה",
197
- });
198
- const stored = await store.load("submission", "sub-1");
199
- expect(stored).not.toBeNull();
200
- expect(stored?.state).toBe("submitted");
201
- expect((stored?.data).studentId).toBe("avi");
202
- });
203
- it("transitions state via target + schedules `after` timers on entry", async () => {
204
- const Submission = defineActor("submission", {
205
- schema: SubmissionSchema,
206
- key: "submissionId",
207
- initial: "submitted",
208
- states: {
209
- submitted: {
210
- on: {
211
- [AnswerSubmitted.name]: {
212
- assign: (_, event) => {
213
- const e = event;
214
- return { submissionId: e.submissionId, studentId: e.studentId, answer: e.answer };
215
- },
216
- },
217
- [AnswerFlagged.name]: {
218
- target: "under-review",
219
- assign: (_, event) => ({
220
- confidence: event.confidence,
221
- }),
222
- },
223
- },
224
- },
225
- "under-review": {
226
- after: { "3d": sendReviewReminder.name },
227
- },
228
- graded: { final: true },
229
- },
230
- });
231
- runtime.registerActor(Submission);
232
- runtime.registerHandler(defineHandler(submitAnswer, async (input) => AnswerSubmitted({
233
- submissionId: input.submissionId,
234
- studentId: input.studentId,
235
- answer: input.answer,
236
- submittedAt: "2026-05-10T10:00:00Z",
237
- })));
238
- runtime.registerHandler(defineHandler(flagForReview, async (input) => AnswerFlagged({
239
- submissionId: input.submissionId,
240
- studentId: "avi",
241
- confidence: input.confidence,
242
- flaggedAt: "2026-05-10T10:01:00Z",
243
- })));
244
- await runtime.dispatch(submitAnswer, {
245
- submissionId: "sub-1",
246
- studentId: "avi",
247
- answer: "ה",
248
- });
249
- await runtime.dispatch(flagForReview, {
250
- submissionId: "sub-1",
251
- confidence: 0.4,
252
- });
253
- const stored = await store.load("submission", "sub-1");
254
- expect(stored?.state).toBe("under-review");
255
- expect((stored?.data).confidence).toBe(0.4);
256
- expect(stored?.activeTimers["3d"]).toBeDefined();
257
- expect(stored?.activeTimers["3d"]?.action).toBe(sendReviewReminder.name);
258
- });
259
- it("cancels old timers on state exit (timers belong to the state, not the actor)", async () => {
260
- const Submission = defineActor("submission", {
261
- schema: SubmissionSchema,
262
- key: "submissionId",
263
- initial: "submitted",
264
- states: {
265
- submitted: {
266
- on: {
267
- [AnswerSubmitted.name]: {
268
- assign: (_, event) => {
269
- const e = event;
270
- return { submissionId: e.submissionId, studentId: e.studentId, answer: e.answer };
271
- },
272
- },
273
- [AnswerFlagged.name]: {
274
- target: "under-review",
275
- assign: (_, event) => ({
276
- confidence: event.confidence,
277
- }),
278
- },
279
- },
280
- },
281
- "under-review": {
282
- after: { "3d": sendReviewReminder.name },
283
- on: {
284
- [AnswerGraded.name]: {
285
- target: "graded",
286
- assign: (_, event) => {
287
- const e = event;
288
- return {
289
- verdict: e.verdict,
290
- gradedAt: e.gradedAt,
291
- };
292
- },
293
- },
294
- },
295
- },
296
- graded: { final: true },
297
- },
298
- });
299
- runtime.registerActor(Submission);
300
- runtime.registerHandler(defineHandler(submitAnswer, async (input) => AnswerSubmitted({
301
- submissionId: input.submissionId,
302
- studentId: input.studentId,
303
- answer: input.answer,
304
- submittedAt: "2026-05-10T10:00:00Z",
305
- })));
306
- runtime.registerHandler(defineHandler(flagForReview, async (input) => AnswerFlagged({
307
- submissionId: input.submissionId,
308
- studentId: "avi",
309
- confidence: input.confidence,
310
- flaggedAt: "2026-05-10T10:01:00Z",
311
- })));
312
- const gradeAction = defineAction({
313
- name: "submissions.grade",
314
- schema: z.object({ submissionId: z.string() }),
315
- });
316
- runtime.registerHandler(defineHandler(gradeAction, async (input) => AnswerGraded({
317
- submissionId: input.submissionId,
318
- verdict: "correct",
319
- confidence: 0.95,
320
- gradedAt: "2026-05-10T11:00:00Z",
321
- })));
322
- await runtime.dispatch(submitAnswer, {
323
- submissionId: "sub-1",
324
- studentId: "avi",
325
- answer: "ה",
326
- });
327
- await runtime.dispatch(flagForReview, { submissionId: "sub-1", confidence: 0.4 });
328
- await runtime.dispatch(gradeAction, { submissionId: "sub-1" });
329
- const stored = await store.load("submission", "sub-1");
330
- expect(stored?.state).toBe("graded");
331
- expect(Object.keys(stored?.activeTimers ?? {})).toHaveLength(0);
332
- });
333
- it("routes workflow `on()` subscriptions to anyone's events (cross-cutting)", async () => {
334
- const seen = [];
335
- const Submission = defineActor("submission", {
336
- schema: SubmissionSchema,
337
- key: "submissionId",
338
- initial: "submitted",
339
- states: {
340
- submitted: {
341
- on: {
342
- [AnswerSubmitted.name]: {
343
- assign: (_, event) => {
344
- const e = event;
345
- return { submissionId: e.submissionId, studentId: e.studentId, answer: e.answer };
346
- },
347
- },
348
- },
349
- },
350
- graded: { final: true },
351
- },
352
- });
353
- runtime.registerActor(Submission);
354
- runtime.registerHandler(defineHandler(submitAnswer, async (input) => AnswerSubmitted({
355
- submissionId: input.submissionId,
356
- studentId: input.studentId,
357
- answer: input.answer,
358
- submittedAt: "2026-05-10T10:00:00Z",
359
- })));
360
- const workflow = defineWorkflow("submissions.observe-submitted", ({ on }) => {
361
- on(AnswerSubmittedEventDef, (event) => {
362
- seen.push(event.submissionId);
363
- });
364
- });
365
- runtime.registerWorkflow(workflow);
366
- await runtime.dispatch(submitAnswer, {
367
- submissionId: "sub-1",
368
- studentId: "avi",
369
- answer: "ה",
370
- });
371
- expect(seen).toEqual(["sub-1"]);
372
- });
373
- it("skips actors whose current state has no reaction to the event (silent)", async () => {
374
- const Submission = defineActor("submission", {
375
- schema: SubmissionSchema,
376
- key: "submissionId",
377
- initial: "submitted",
378
- states: {
379
- submitted: {
380
- on: {
381
- [AnswerSubmitted.name]: {
382
- assign: (_, event) => {
383
- const e = event;
384
- return { submissionId: e.submissionId, studentId: e.studentId, answer: e.answer };
385
- },
386
- },
387
- },
388
- },
389
- graded: { final: true },
390
- },
391
- });
392
- runtime.registerActor(Submission);
393
- runtime.registerHandler(defineHandler(submitAnswer, async (input) => AnswerSubmitted({
394
- submissionId: input.submissionId,
395
- studentId: input.studentId,
396
- answer: input.answer,
397
- submittedAt: "2026-05-10T10:00:00Z",
398
- })));
399
- // Dispatch flag-for-review while submission is in 'submitted'; current
400
- // state has no reaction to AnswerFlagged → silently skipped, actor
401
- // state unchanged.
402
- runtime.registerHandler(defineHandler(flagForReview, async (input) => AnswerFlagged({
403
- submissionId: input.submissionId,
404
- studentId: "avi",
405
- confidence: input.confidence,
406
- flaggedAt: "2026-05-10T10:01:00Z",
407
- })));
408
- await runtime.dispatch(submitAnswer, {
409
- submissionId: "sub-1",
410
- studentId: "avi",
411
- answer: "ה",
412
- });
413
- const before = await store.load("submission", "sub-1");
414
- await runtime.dispatch(flagForReview, { submissionId: "sub-1", confidence: 0.4 });
415
- const after = await store.load("submission", "sub-1");
416
- expect(after?.state).toBe(before?.state);
417
- });
418
- });
419
- describe("parseDelay", () => {
420
- it("parses suffixed durations", () => {
421
- expect(parseDelay("500ms")).toBe(500);
422
- expect(parseDelay("90s")).toBe(90_000);
423
- expect(parseDelay("5m")).toBe(300_000);
424
- expect(parseDelay("4h")).toBe(14_400_000);
425
- expect(parseDelay("3d")).toBe(259_200_000);
426
- });
427
- it("treats unit-less numbers as milliseconds", () => {
428
- expect(parseDelay("1500")).toBe(1500);
429
- });
430
- it("throws on garbage", () => {
431
- expect(() => parseDelay("not-a-duration")).toThrow();
432
- });
433
- });
434
- //# sourceMappingURL=primitives.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"primitives.test.js","sourceRoot":"","sources":["../../src/__tests__/primitives.test.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Production-readiness audit — L4 forge runtime properties teams must
3
- * trust before adopting workflows + projections in prod.
4
- *
5
- * Each test pins a real-world invariant:
6
- *
7
- * 1. Workflow correlation respects envelope.tenant (no cross-tenant
8
- * saga bleed).
9
- * 2. Plugin shutdown error isolation — one bad plugin's shutdown error
10
- * doesn't prevent other plugins from cleaning up.
11
- * 3. Projection state is deterministic — replaying the same event log
12
- * against a fresh projection store rebuilds an identical view.
13
- * 4. Cascade integrity — when a workflow handler dispatches another
14
- * action, downstream events emit exactly once (not duplicated by
15
- * the parent dispatch's event-publish loop).
16
- *
17
- * Actor restart durability is verified at the store layer (see
18
- * `nwire-store-mongo`, `nwire-store-file`); a round-trip integration
19
- * test belongs there, not in this file.
20
- */
21
- export {};
22
- //# sourceMappingURL=production-readiness.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"production-readiness.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/production-readiness.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}