@rikalabs/akter 0.1.0-alpha.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 (603) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +8 -0
  4. package/README.md +116 -0
  5. package/dist/actor/codecs.d.ts +77 -0
  6. package/dist/actor/codecs.js +87 -0
  7. package/dist/actor/connections.d.ts +34 -0
  8. package/dist/actor/connections.js +145 -0
  9. package/dist/actor/definition.d.ts +893 -0
  10. package/dist/actor/definition.js +147 -0
  11. package/dist/actor/descriptor.d.ts +172 -0
  12. package/dist/actor/descriptor.js +367 -0
  13. package/dist/actor/handles.d.ts +77 -0
  14. package/dist/actor/handles.js +265 -0
  15. package/dist/actor/jobs.d.ts +10 -0
  16. package/dist/actor/jobs.js +137 -0
  17. package/dist/actor/layers.d.ts +41 -0
  18. package/dist/actor/layers.js +177 -0
  19. package/dist/actor/reads.d.ts +47 -0
  20. package/dist/actor/reads.js +224 -0
  21. package/dist/actor/served.d.ts +120 -0
  22. package/dist/actor/served.js +72 -0
  23. package/dist/actor/turns.d.ts +13 -0
  24. package/dist/actor/turns.js +332 -0
  25. package/dist/actor/workflows.d.ts +16 -0
  26. package/dist/actor/workflows.js +37 -0
  27. package/dist/client/calls.d.ts +47 -0
  28. package/dist/client/calls.js +425 -0
  29. package/dist/client/clock.d.ts +56 -0
  30. package/dist/client/clock.js +119 -0
  31. package/dist/client/fleet-page.d.ts +15 -0
  32. package/dist/client/fleet-page.js +13 -0
  33. package/dist/client/fleet.d.ts +29 -0
  34. package/dist/client/fleet.js +51 -0
  35. package/dist/client/index.d.ts +17 -0
  36. package/dist/client/index.js +6 -0
  37. package/dist/client/make.d.ts +157 -0
  38. package/dist/client/make.js +221 -0
  39. package/dist/client/offline/queue.d.ts +118 -0
  40. package/dist/client/offline/queue.js +292 -0
  41. package/dist/client/offline/store.d.ts +74 -0
  42. package/dist/client/offline/store.js +78 -0
  43. package/dist/client/optimistic.d.ts +57 -0
  44. package/dist/client/optimistic.js +136 -0
  45. package/dist/client/report.d.ts +2 -0
  46. package/dist/client/report.js +8 -0
  47. package/dist/client/sessions/connection.d.ts +118 -0
  48. package/dist/client/sessions/connection.js +162 -0
  49. package/dist/client/sessions/feed.d.ts +42 -0
  50. package/dist/client/sessions/feed.js +43 -0
  51. package/dist/client/sessions/sse.d.ts +47 -0
  52. package/dist/client/sessions/sse.js +112 -0
  53. package/dist/client/sessions/stream.d.ts +28 -0
  54. package/dist/client/sessions/stream.js +35 -0
  55. package/dist/client/sessions/watch.d.ts +34 -0
  56. package/dist/client/sessions/watch.js +40 -0
  57. package/dist/client/transport.d.ts +37 -0
  58. package/dist/client/transport.js +66 -0
  59. package/dist/contexts/command.d.ts +132 -0
  60. package/dist/contexts/command.js +20 -0
  61. package/dist/contexts/connection.d.ts +68 -0
  62. package/dist/contexts/connection.js +0 -0
  63. package/dist/contexts/job.d.ts +49 -0
  64. package/dist/contexts/job.js +0 -0
  65. package/dist/contexts/workflow.d.ts +147 -0
  66. package/dist/contexts/workflow.js +22 -0
  67. package/dist/errors/actor.d.ts +200 -0
  68. package/dist/errors/actor.js +271 -0
  69. package/dist/errors/content.d.ts +19 -0
  70. package/dist/errors/content.js +14 -0
  71. package/dist/errors/database.d.ts +22 -0
  72. package/dist/errors/database.js +23 -0
  73. package/dist/errors/events.d.ts +17 -0
  74. package/dist/errors/events.js +14 -0
  75. package/dist/errors/subscription.d.ts +12 -0
  76. package/dist/errors/subscription.js +8 -0
  77. package/dist/errors/workflow.d.ts +28 -0
  78. package/dist/errors/workflow.js +17 -0
  79. package/dist/handles/actors.d.ts +17 -0
  80. package/dist/handles/actors.js +7 -0
  81. package/dist/handles/content.d.ts +59 -0
  82. package/dist/handles/content.js +36 -0
  83. package/dist/handles/intents.d.ts +164 -0
  84. package/dist/handles/intents.js +214 -0
  85. package/dist/handles/run.d.ts +31 -0
  86. package/dist/handles/run.js +21 -0
  87. package/dist/handles/workflow.d.ts +27 -0
  88. package/dist/handles/workflow.js +23 -0
  89. package/dist/identity/caller.d.ts +105 -0
  90. package/dist/identity/caller.js +68 -0
  91. package/dist/identity/child.d.ts +18 -0
  92. package/dist/identity/child.js +39 -0
  93. package/dist/identity/command.d.ts +19 -0
  94. package/dist/identity/command.js +21 -0
  95. package/dist/identity/connection.d.ts +24 -0
  96. package/dist/identity/connection.js +29 -0
  97. package/dist/identity/content.d.ts +18 -0
  98. package/dist/identity/content.js +12 -0
  99. package/dist/identity/digest.d.ts +4 -0
  100. package/dist/identity/digest.js +5 -0
  101. package/dist/identity/execution.d.ts +32 -0
  102. package/dist/identity/execution.js +63 -0
  103. package/dist/identity/mint.d.ts +51 -0
  104. package/dist/identity/mint.js +76 -0
  105. package/dist/identity/version.d.ts +2 -0
  106. package/dist/identity/version.js +3 -0
  107. package/dist/index.d.ts +159 -0
  108. package/dist/index.js +97 -0
  109. package/dist/members/blob.d.ts +43 -0
  110. package/dist/members/blob.js +29 -0
  111. package/dist/members/command.d.ts +109 -0
  112. package/dist/members/command.js +61 -0
  113. package/dist/members/connection.d.ts +55 -0
  114. package/dist/members/connection.js +49 -0
  115. package/dist/members/event.d.ts +36 -0
  116. package/dist/members/event.js +24 -0
  117. package/dist/members/job.d.ts +157 -0
  118. package/dist/members/job.js +67 -0
  119. package/dist/members/payload.d.ts +93 -0
  120. package/dist/members/payload.js +145 -0
  121. package/dist/members/reducer.d.ts +64 -0
  122. package/dist/members/reducer.js +27 -0
  123. package/dist/members/stream.d.ts +36 -0
  124. package/dist/members/stream.js +14 -0
  125. package/dist/members/subscription.d.ts +182 -0
  126. package/dist/members/subscription.js +91 -0
  127. package/dist/members/workflow.d.ts +99 -0
  128. package/dist/members/workflow.js +2 -0
  129. package/dist/policies/access.d.ts +35 -0
  130. package/dist/policies/access.js +6 -0
  131. package/dist/policies/command.d.ts +127 -0
  132. package/dist/policies/command.js +45 -0
  133. package/dist/policies/job.d.ts +28 -0
  134. package/dist/policies/job.js +60 -0
  135. package/dist/policies/schedules.d.ts +33 -0
  136. package/dist/policies/schedules.js +131 -0
  137. package/dist/protocol/frames.d.ts +66 -0
  138. package/dist/protocol/frames.js +55 -0
  139. package/dist/protocol/inspection.d.ts +807 -0
  140. package/dist/protocol/inspection.js +243 -0
  141. package/dist/protocol/wire.d.ts +184 -0
  142. package/dist/protocol/wire.js +150 -0
  143. package/dist/runtime/actors.d.ts +155 -0
  144. package/dist/runtime/actors.js +4 -0
  145. package/dist/runtime/admission.d.ts +34 -0
  146. package/dist/runtime/admission.js +72 -0
  147. package/dist/runtime/adoption/backfill.d.ts +27 -0
  148. package/dist/runtime/adoption/backfill.js +144 -0
  149. package/dist/runtime/adoption/enforce.d.ts +55 -0
  150. package/dist/runtime/adoption/enforce.js +241 -0
  151. package/dist/runtime/adoption/observe.d.ts +43 -0
  152. package/dist/runtime/adoption/observe.js +139 -0
  153. package/dist/runtime/adoption/plan.d.ts +45 -0
  154. package/dist/runtime/adoption/plan.js +192 -0
  155. package/dist/runtime/adoption/startup.d.ts +32 -0
  156. package/dist/runtime/adoption/startup.js +76 -0
  157. package/dist/runtime/adoption/status.d.ts +23 -0
  158. package/dist/runtime/adoption/status.js +47 -0
  159. package/dist/runtime/adoption/target.d.ts +33 -0
  160. package/dist/runtime/adoption/target.js +49 -0
  161. package/dist/runtime/connections/holder.d.ts +221 -0
  162. package/dist/runtime/connections/holder.js +816 -0
  163. package/dist/runtime/connections/owner.d.ts +263 -0
  164. package/dist/runtime/connections/owner.js +896 -0
  165. package/dist/runtime/connections/protocol.d.ts +441 -0
  166. package/dist/runtime/connections/protocol.js +222 -0
  167. package/dist/runtime/connections/reads.d.ts +24 -0
  168. package/dist/runtime/connections/reads.js +19 -0
  169. package/dist/runtime/connections/streams.d.ts +62 -0
  170. package/dist/runtime/connections/streams.js +128 -0
  171. package/dist/runtime/connections/transport.d.ts +40 -0
  172. package/dist/runtime/connections/transport.js +68 -0
  173. package/dist/runtime/connections/watch.d.ts +52 -0
  174. package/dist/runtime/connections/watch.js +159 -0
  175. package/dist/runtime/content/grant.d.ts +34 -0
  176. package/dist/runtime/content/grant.js +58 -0
  177. package/dist/runtime/content/store.d.ts +63 -0
  178. package/dist/runtime/content/store.js +294 -0
  179. package/dist/runtime/cron/key.d.ts +2 -0
  180. package/dist/runtime/cron/key.js +2 -0
  181. package/dist/runtime/cron/schedule.d.ts +69 -0
  182. package/dist/runtime/cron/schedule.js +144 -0
  183. package/dist/runtime/database/bounded.d.ts +43 -0
  184. package/dist/runtime/database/bounded.js +108 -0
  185. package/dist/runtime/database/connection.d.ts +8 -0
  186. package/dist/runtime/database/connection.js +18 -0
  187. package/dist/runtime/database/coordination.d.ts +19 -0
  188. package/dist/runtime/database/coordination.js +72 -0
  189. package/dist/runtime/database/flock.d.ts +10 -0
  190. package/dist/runtime/database/flock.js +60 -0
  191. package/dist/runtime/database/gate.d.ts +26 -0
  192. package/dist/runtime/database/gate.js +54 -0
  193. package/dist/runtime/database/keepalive.d.ts +11 -0
  194. package/dist/runtime/database/keepalive.js +22 -0
  195. package/dist/runtime/database/migrations.d.ts +177 -0
  196. package/dist/runtime/database/migrations.js +1018 -0
  197. package/dist/runtime/database/neki/migrations.d.ts +31 -0
  198. package/dist/runtime/database/neki/migrations.js +276 -0
  199. package/dist/runtime/database/neki/session.d.ts +23 -0
  200. package/dist/runtime/database/neki/session.js +31 -0
  201. package/dist/runtime/database/pglite.d.ts +21 -0
  202. package/dist/runtime/database/pglite.js +74 -0
  203. package/dist/runtime/database/replica.d.ts +41 -0
  204. package/dist/runtime/database/replica.js +51 -0
  205. package/dist/runtime/database/shards.d.ts +21 -0
  206. package/dist/runtime/database/shards.js +37 -0
  207. package/dist/runtime/database/snapshot.d.ts +7 -0
  208. package/dist/runtime/database/snapshot.js +7 -0
  209. package/dist/runtime/database/tenancy.d.ts +69 -0
  210. package/dist/runtime/database/tenancy.js +145 -0
  211. package/dist/runtime/database/transient.d.ts +10 -0
  212. package/dist/runtime/database/transient.js +25 -0
  213. package/dist/runtime/drain.d.ts +132 -0
  214. package/dist/runtime/drain.js +109 -0
  215. package/dist/runtime/entity/mailbox.d.ts +86 -0
  216. package/dist/runtime/entity/mailbox.js +121 -0
  217. package/dist/runtime/entity/register.d.ts +424 -0
  218. package/dist/runtime/entity/register.js +669 -0
  219. package/dist/runtime/events/append.d.ts +192 -0
  220. package/dist/runtime/events/append.js +128 -0
  221. package/dist/runtime/events/cursor.d.ts +2 -0
  222. package/dist/runtime/events/cursor.js +5 -0
  223. package/dist/runtime/events/replay.d.ts +20 -0
  224. package/dist/runtime/events/replay.js +45 -0
  225. package/dist/runtime/feeds.d.ts +26 -0
  226. package/dist/runtime/feeds.js +100 -0
  227. package/dist/runtime/fleet/checks.d.ts +17 -0
  228. package/dist/runtime/fleet/checks.js +106 -0
  229. package/dist/runtime/fleet/maintainer.d.ts +38 -0
  230. package/dist/runtime/fleet/maintainer.js +383 -0
  231. package/dist/runtime/fleet/pgoutput.d.ts +41 -0
  232. package/dist/runtime/fleet/pgoutput.js +102 -0
  233. package/dist/runtime/fleet/setup.d.ts +36 -0
  234. package/dist/runtime/fleet/setup.js +58 -0
  235. package/dist/runtime/fleet/subscribe.d.ts +42 -0
  236. package/dist/runtime/fleet/subscribe.js +147 -0
  237. package/dist/runtime/index.d.ts +66 -0
  238. package/dist/runtime/index.js +37 -0
  239. package/dist/runtime/inspector/http.d.ts +19 -0
  240. package/dist/runtime/inspector/http.js +36 -0
  241. package/dist/runtime/inspector/layer.d.ts +46 -0
  242. package/dist/runtime/inspector/layer.js +180 -0
  243. package/dist/runtime/inspector/queries.d.ts +711 -0
  244. package/dist/runtime/inspector/queries.js +494 -0
  245. package/dist/runtime/jobs/attempt.d.ts +254 -0
  246. package/dist/runtime/jobs/attempt.js +413 -0
  247. package/dist/runtime/jobs/isolation.d.ts +20 -0
  248. package/dist/runtime/jobs/isolation.js +10 -0
  249. package/dist/runtime/jobs/progress.d.ts +95 -0
  250. package/dist/runtime/jobs/progress.js +144 -0
  251. package/dist/runtime/layer.d.ts +260 -0
  252. package/dist/runtime/layer.js +876 -0
  253. package/dist/runtime/members.d.ts +381 -0
  254. package/dist/runtime/members.js +8 -0
  255. package/dist/runtime/operators/audit.d.ts +64 -0
  256. package/dist/runtime/operators/audit.js +56 -0
  257. package/dist/runtime/operators/auth.d.ts +29 -0
  258. package/dist/runtime/operators/auth.js +42 -0
  259. package/dist/runtime/operators/export.d.ts +68 -0
  260. package/dist/runtime/operators/export.js +137 -0
  261. package/dist/runtime/operators/grants.d.ts +45 -0
  262. package/dist/runtime/operators/grants.js +40 -0
  263. package/dist/runtime/operators/repair.d.ts +206 -0
  264. package/dist/runtime/operators/repair.js +226 -0
  265. package/dist/runtime/operators/routes.d.ts +35 -0
  266. package/dist/runtime/operators/routes.js +190 -0
  267. package/dist/runtime/operators/seed.d.ts +123 -0
  268. package/dist/runtime/operators/seed.js +123 -0
  269. package/dist/runtime/payloads/versions.d.ts +65 -0
  270. package/dist/runtime/payloads/versions.js +240 -0
  271. package/dist/runtime/peering/authority.d.ts +42 -0
  272. package/dist/runtime/peering/authority.js +132 -0
  273. package/dist/runtime/peering/credentials.d.ts +21 -0
  274. package/dist/runtime/peering/credentials.js +13 -0
  275. package/dist/runtime/peering/transport.d.ts +51 -0
  276. package/dist/runtime/peering/transport.js +175 -0
  277. package/dist/runtime/queries.d.ts +18 -0
  278. package/dist/runtime/queries.js +169 -0
  279. package/dist/runtime/readiness.d.ts +36 -0
  280. package/dist/runtime/readiness.js +44 -0
  281. package/dist/runtime/registration.d.ts +58 -0
  282. package/dist/runtime/registration.js +186 -0
  283. package/dist/runtime/request.d.ts +158 -0
  284. package/dist/runtime/request.js +102 -0
  285. package/dist/runtime/retry.d.ts +8 -0
  286. package/dist/runtime/retry.js +11 -0
  287. package/dist/runtime/runner.d.ts +93 -0
  288. package/dist/runtime/runner.js +122 -0
  289. package/dist/runtime/storage/codec.d.ts +39 -0
  290. package/dist/runtime/storage/codec.js +41 -0
  291. package/dist/runtime/storage/generation.d.ts +69 -0
  292. package/dist/runtime/storage/generation.js +49 -0
  293. package/dist/runtime/storage/placements.d.ts +15 -0
  294. package/dist/runtime/storage/placements.js +38 -0
  295. package/dist/runtime/storage/platform.d.ts +6 -0
  296. package/dist/runtime/storage/platform.js +9 -0
  297. package/dist/runtime/storage/retention.d.ts +73 -0
  298. package/dist/runtime/storage/retention.js +158 -0
  299. package/dist/runtime/subscriptions/identity.d.ts +31 -0
  300. package/dist/runtime/subscriptions/identity.js +45 -0
  301. package/dist/runtime/subscriptions/relay.d.ts +175 -0
  302. package/dist/runtime/subscriptions/relay.js +763 -0
  303. package/dist/runtime/subscriptions/storage.d.ts +40 -0
  304. package/dist/runtime/subscriptions/storage.js +98 -0
  305. package/dist/runtime/sweeps.d.ts +39 -0
  306. package/dist/runtime/sweeps.js +54 -0
  307. package/dist/runtime/telemetry/defects.d.ts +57 -0
  308. package/dist/runtime/telemetry/defects.js +43 -0
  309. package/dist/runtime/telemetry/metrics.d.ts +52 -0
  310. package/dist/runtime/telemetry/metrics.js +138 -0
  311. package/dist/runtime/telemetry/routes.d.ts +19 -0
  312. package/dist/runtime/telemetry/routes.js +18 -0
  313. package/dist/runtime/telemetry/sampler.d.ts +26 -0
  314. package/dist/runtime/telemetry/sampler.js +101 -0
  315. package/dist/runtime/telemetry/spans.d.ts +38 -0
  316. package/dist/runtime/telemetry/spans.js +44 -0
  317. package/dist/runtime/telemetry/usage.d.ts +52 -0
  318. package/dist/runtime/telemetry/usage.js +30 -0
  319. package/dist/runtime/topology/admission.d.ts +13 -0
  320. package/dist/runtime/topology/admission.js +36 -0
  321. package/dist/runtime/topology/locks.d.ts +56 -0
  322. package/dist/runtime/topology/locks.js +81 -0
  323. package/dist/runtime/topology/messages.d.ts +15 -0
  324. package/dist/runtime/topology/messages.js +32 -0
  325. package/dist/runtime/turn/admission.d.ts +22 -0
  326. package/dist/runtime/turn/admission.js +41 -0
  327. package/dist/runtime/turn/blobs.d.ts +38 -0
  328. package/dist/runtime/turn/blobs.js +215 -0
  329. package/dist/runtime/turn/execute.d.ts +208 -0
  330. package/dist/runtime/turn/execute.js +972 -0
  331. package/dist/runtime/turn/group.d.ts +165 -0
  332. package/dist/runtime/turn/group.js +326 -0
  333. package/dist/runtime/turn/hooks.d.ts +44 -0
  334. package/dist/runtime/turn/hooks.js +28 -0
  335. package/dist/runtime/turn/outbox.d.ts +159 -0
  336. package/dist/runtime/turn/outbox.js +269 -0
  337. package/dist/runtime/turn/pipeline.d.ts +68 -0
  338. package/dist/runtime/turn/pipeline.js +83 -0
  339. package/dist/runtime/turn/receipt.d.ts +81 -0
  340. package/dist/runtime/turn/receipt.js +32 -0
  341. package/dist/runtime/turn/relay.d.ts +179 -0
  342. package/dist/runtime/turn/relay.js +685 -0
  343. package/dist/runtime/turn/rows.d.ts +43 -0
  344. package/dist/runtime/turn/rows.js +592 -0
  345. package/dist/runtime/workflows/compatibility.d.ts +125 -0
  346. package/dist/runtime/workflows/compatibility.js +285 -0
  347. package/dist/runtime/workflows/engine.d.ts +107 -0
  348. package/dist/runtime/workflows/engine.js +826 -0
  349. package/dist/runtime/workflows/manifest.d.ts +34 -0
  350. package/dist/runtime/workflows/manifest.js +39 -0
  351. package/dist/runtime/workflows/steps.d.ts +33 -0
  352. package/dist/runtime/workflows/steps.js +152 -0
  353. package/dist/serve/api.d.ts +99 -0
  354. package/dist/serve/api.js +403 -0
  355. package/dist/serve/assertion/binding.d.ts +41 -0
  356. package/dist/serve/assertion/binding.js +92 -0
  357. package/dist/serve/assertion/verify.d.ts +93 -0
  358. package/dist/serve/assertion/verify.js +189 -0
  359. package/dist/serve/auth.d.ts +200 -0
  360. package/dist/serve/auth.js +92 -0
  361. package/dist/serve/clock.d.ts +10 -0
  362. package/dist/serve/clock.js +25 -0
  363. package/dist/serve/jwt.d.ts +65 -0
  364. package/dist/serve/jwt.js +202 -0
  365. package/dist/serve/layer.d.ts +98 -0
  366. package/dist/serve/layer.js +809 -0
  367. package/dist/serve/mcp/endpoint.d.ts +39 -0
  368. package/dist/serve/mcp/endpoint.js +187 -0
  369. package/dist/serve/mcp/tools.d.ts +37 -0
  370. package/dist/serve/mcp/tools.js +125 -0
  371. package/dist/serve/origin.d.ts +6 -0
  372. package/dist/serve/origin.js +21 -0
  373. package/dist/serve/sessions/feed.d.ts +79 -0
  374. package/dist/serve/sessions/feed.js +115 -0
  375. package/dist/serve/sessions/socket.d.ts +56 -0
  376. package/dist/serve/sessions/socket.js +212 -0
  377. package/dist/serve/sessions/sse.d.ts +27 -0
  378. package/dist/serve/sessions/sse.js +26 -0
  379. package/dist/serve/sessions/stream.d.ts +9 -0
  380. package/dist/serve/sessions/stream.js +9 -0
  381. package/dist/serve/sessions/watch.d.ts +12 -0
  382. package/dist/serve/sessions/watch.js +11 -0
  383. package/dist/serve/wire.d.ts +16 -0
  384. package/dist/serve/wire.js +50 -0
  385. package/dist/state/blob.d.ts +71 -0
  386. package/dist/state/blob.js +0 -0
  387. package/dist/state/migration.d.ts +53 -0
  388. package/dist/state/migration.js +29 -0
  389. package/dist/tables/fleet.d.ts +170 -0
  390. package/dist/tables/fleet.js +214 -0
  391. package/dist/tables/owned.d.ts +250 -0
  392. package/dist/tables/owned.js +233 -0
  393. package/dist/testing/actor-test.d.ts +360 -0
  394. package/dist/testing/actor-test.js +337 -0
  395. package/dist/testing/cluster.d.ts +93 -0
  396. package/dist/testing/cluster.js +296 -0
  397. package/dist/testing/conformance/access.d.ts +5 -0
  398. package/dist/testing/conformance/access.js +531 -0
  399. package/dist/testing/conformance/admission.d.ts +11 -0
  400. package/dist/testing/conformance/admission.js +182 -0
  401. package/dist/testing/conformance/adoption.d.ts +2 -0
  402. package/dist/testing/conformance/adoption.js +1019 -0
  403. package/dist/testing/conformance/assertions.d.ts +202 -0
  404. package/dist/testing/conformance/assertions.js +849 -0
  405. package/dist/testing/conformance/batches.d.ts +41 -0
  406. package/dist/testing/conformance/batches.js +388 -0
  407. package/dist/testing/conformance/blobs.d.ts +14 -0
  408. package/dist/testing/conformance/blobs.js +405 -0
  409. package/dist/testing/conformance/capacity.d.ts +8 -0
  410. package/dist/testing/conformance/capacity.js +433 -0
  411. package/dist/testing/conformance/client.d.ts +5 -0
  412. package/dist/testing/conformance/client.js +719 -0
  413. package/dist/testing/conformance/cold-serve.d.ts +16 -0
  414. package/dist/testing/conformance/cold-serve.js +254 -0
  415. package/dist/testing/conformance/connections/actors.d.ts +1143 -0
  416. package/dist/testing/conformance/connections/actors.js +180 -0
  417. package/dist/testing/conformance/connections/harness.d.ts +1754 -0
  418. package/dist/testing/conformance/connections/harness.js +142 -0
  419. package/dist/testing/conformance/connections/holders.d.ts +4 -0
  420. package/dist/testing/conformance/connections/holders.js +165 -0
  421. package/dist/testing/conformance/connections/lifecycle.d.ts +4 -0
  422. package/dist/testing/conformance/connections/lifecycle.js +113 -0
  423. package/dist/testing/conformance/connections/limits.d.ts +4 -0
  424. package/dist/testing/conformance/connections/limits.js +127 -0
  425. package/dist/testing/conformance/connections/reauthorization.d.ts +4 -0
  426. package/dist/testing/conformance/connections/reauthorization.js +170 -0
  427. package/dist/testing/conformance/connections/resync.d.ts +4 -0
  428. package/dist/testing/conformance/connections/resync.js +360 -0
  429. package/dist/testing/conformance/connections/takeover.d.ts +4 -0
  430. package/dist/testing/conformance/connections/takeover.js +287 -0
  431. package/dist/testing/conformance/connections.d.ts +4 -0
  432. package/dist/testing/conformance/connections.js +15 -0
  433. package/dist/testing/conformance/content-blobs.d.ts +16 -0
  434. package/dist/testing/conformance/content-blobs.js +534 -0
  435. package/dist/testing/conformance/counter.d.ts +16 -0
  436. package/dist/testing/conformance/counter.js +813 -0
  437. package/dist/testing/conformance/cron.d.ts +5 -0
  438. package/dist/testing/conformance/cron.js +665 -0
  439. package/dist/testing/conformance/drain.d.ts +26 -0
  440. package/dist/testing/conformance/drain.js +540 -0
  441. package/dist/testing/conformance/effect-control.d.ts +38 -0
  442. package/dist/testing/conformance/effect-control.js +1059 -0
  443. package/dist/testing/conformance/effects.d.ts +23 -0
  444. package/dist/testing/conformance/effects.js +432 -0
  445. package/dist/testing/conformance/events.d.ts +28 -0
  446. package/dist/testing/conformance/events.js +335 -0
  447. package/dist/testing/conformance/export.d.ts +2 -0
  448. package/dist/testing/conformance/export.js +368 -0
  449. package/dist/testing/conformance/fleet.d.ts +444 -0
  450. package/dist/testing/conformance/fleet.js +1009 -0
  451. package/dist/testing/conformance/groups.d.ts +7 -0
  452. package/dist/testing/conformance/groups.js +353 -0
  453. package/dist/testing/conformance/heap.d.ts +3 -0
  454. package/dist/testing/conformance/heap.js +149 -0
  455. package/dist/testing/conformance/http.d.ts +2809 -0
  456. package/dist/testing/conformance/http.js +1234 -0
  457. package/dist/testing/conformance/inspection-views.d.ts +8 -0
  458. package/dist/testing/conformance/inspection-views.js +272 -0
  459. package/dist/testing/conformance/inspector.d.ts +7 -0
  460. package/dist/testing/conformance/inspector.js +650 -0
  461. package/dist/testing/conformance/mint.d.ts +58 -0
  462. package/dist/testing/conformance/mint.js +692 -0
  463. package/dist/testing/conformance/multi-runner.d.ts +8 -0
  464. package/dist/testing/conformance/multi-runner.js +403 -0
  465. package/dist/testing/conformance/neki/plan.d.ts +19 -0
  466. package/dist/testing/conformance/neki/plan.js +30 -0
  467. package/dist/testing/conformance/observability.d.ts +3 -0
  468. package/dist/testing/conformance/observability.js +343 -0
  469. package/dist/testing/conformance/offline.d.ts +4 -0
  470. package/dist/testing/conformance/offline.js +474 -0
  471. package/dist/testing/conformance/operator-harness.d.ts +57 -0
  472. package/dist/testing/conformance/operator-harness.js +78 -0
  473. package/dist/testing/conformance/operator.d.ts +3 -0
  474. package/dist/testing/conformance/operator.js +379 -0
  475. package/dist/testing/conformance/outbox-cross-shard.d.ts +14 -0
  476. package/dist/testing/conformance/outbox-cross-shard.js +160 -0
  477. package/dist/testing/conformance/outbox.d.ts +36 -0
  478. package/dist/testing/conformance/outbox.js +437 -0
  479. package/dist/testing/conformance/payload-migrations.d.ts +3 -0
  480. package/dist/testing/conformance/payload-migrations.js +612 -0
  481. package/dist/testing/conformance/pipeline.d.ts +3 -0
  482. package/dist/testing/conformance/pipeline.js +1040 -0
  483. package/dist/testing/conformance/placement.d.ts +22 -0
  484. package/dist/testing/conformance/placement.js +539 -0
  485. package/dist/testing/conformance/platform.d.ts +40 -0
  486. package/dist/testing/conformance/platform.js +101 -0
  487. package/dist/testing/conformance/progress.d.ts +39 -0
  488. package/dist/testing/conformance/progress.js +666 -0
  489. package/dist/testing/conformance/properties.d.ts +6 -0
  490. package/dist/testing/conformance/properties.js +295 -0
  491. package/dist/testing/conformance/protocols.d.ts +4 -0
  492. package/dist/testing/conformance/protocols.js +618 -0
  493. package/dist/testing/conformance/provider/advertise.d.ts +21 -0
  494. package/dist/testing/conformance/provider/advertise.js +44 -0
  495. package/dist/testing/conformance/read-your-writes.d.ts +20 -0
  496. package/dist/testing/conformance/read-your-writes.js +192 -0
  497. package/dist/testing/conformance/reducers.d.ts +8 -0
  498. package/dist/testing/conformance/reducers.js +258 -0
  499. package/dist/testing/conformance/relay.d.ts +42 -0
  500. package/dist/testing/conformance/relay.js +1115 -0
  501. package/dist/testing/conformance/restore.d.ts +43 -0
  502. package/dist/testing/conformance/restore.js +341 -0
  503. package/dist/testing/conformance/retention.d.ts +14 -0
  504. package/dist/testing/conformance/retention.js +463 -0
  505. package/dist/testing/conformance/rls.d.ts +24 -0
  506. package/dist/testing/conformance/rls.js +576 -0
  507. package/dist/testing/conformance/simulation.d.ts +31 -0
  508. package/dist/testing/conformance/simulation.js +167 -0
  509. package/dist/testing/conformance/single-shard.d.ts +2 -0
  510. package/dist/testing/conformance/single-shard.js +125 -0
  511. package/dist/testing/conformance/singleton.d.ts +3 -0
  512. package/dist/testing/conformance/singleton.js +293 -0
  513. package/dist/testing/conformance/statements.d.ts +60 -0
  514. package/dist/testing/conformance/statements.js +108 -0
  515. package/dist/testing/conformance/streams.d.ts +7 -0
  516. package/dist/testing/conformance/streams.js +280 -0
  517. package/dist/testing/conformance/subscriptions/access.d.ts +4 -0
  518. package/dist/testing/conformance/subscriptions/access.js +98 -0
  519. package/dist/testing/conformance/subscriptions/actors.d.ts +4910 -0
  520. package/dist/testing/conformance/subscriptions/actors.js +372 -0
  521. package/dist/testing/conformance/subscriptions/cluster.d.ts +4 -0
  522. package/dist/testing/conformance/subscriptions/cluster.js +89 -0
  523. package/dist/testing/conformance/subscriptions/delivery.d.ts +4 -0
  524. package/dist/testing/conformance/subscriptions/delivery.js +253 -0
  525. package/dist/testing/conformance/subscriptions/deploys.d.ts +4 -0
  526. package/dist/testing/conformance/subscriptions/deploys.js +162 -0
  527. package/dist/testing/conformance/subscriptions/epochs.d.ts +4 -0
  528. package/dist/testing/conformance/subscriptions/epochs.js +169 -0
  529. package/dist/testing/conformance/subscriptions/failures.d.ts +4 -0
  530. package/dist/testing/conformance/subscriptions/failures.js +108 -0
  531. package/dist/testing/conformance/subscriptions/feeds.d.ts +4 -0
  532. package/dist/testing/conformance/subscriptions/feeds.js +218 -0
  533. package/dist/testing/conformance/subscriptions/harness.d.ts +124 -0
  534. package/dist/testing/conformance/subscriptions/harness.js +143 -0
  535. package/dist/testing/conformance/subscriptions/operator.d.ts +4 -0
  536. package/dist/testing/conformance/subscriptions/operator.js +128 -0
  537. package/dist/testing/conformance/subscriptions/retention.d.ts +4 -0
  538. package/dist/testing/conformance/subscriptions/retention.js +288 -0
  539. package/dist/testing/conformance/subscriptions/routing.d.ts +4 -0
  540. package/dist/testing/conformance/subscriptions/routing.js +179 -0
  541. package/dist/testing/conformance/subscriptions.d.ts +4 -0
  542. package/dist/testing/conformance/subscriptions.js +19 -0
  543. package/dist/testing/conformance/tables.d.ts +125 -0
  544. package/dist/testing/conformance/tables.js +664 -0
  545. package/dist/testing/conformance/transports/actors.d.ts +1907 -0
  546. package/dist/testing/conformance/transports/actors.js +163 -0
  547. package/dist/testing/conformance/transports/client.d.ts +3 -0
  548. package/dist/testing/conformance/transports/client.js +237 -0
  549. package/dist/testing/conformance/transports/feeds.d.ts +3 -0
  550. package/dist/testing/conformance/transports/feeds.js +232 -0
  551. package/dist/testing/conformance/transports/harness.d.ts +93 -0
  552. package/dist/testing/conformance/transports/harness.js +84 -0
  553. package/dist/testing/conformance/transports/streams.d.ts +3 -0
  554. package/dist/testing/conformance/transports/streams.js +96 -0
  555. package/dist/testing/conformance/transports/websocket.d.ts +3 -0
  556. package/dist/testing/conformance/transports/websocket.js +384 -0
  557. package/dist/testing/conformance/transports/wire.d.ts +141 -0
  558. package/dist/testing/conformance/transports/wire.js +204 -0
  559. package/dist/testing/conformance/transports.d.ts +3 -0
  560. package/dist/testing/conformance/transports.js +11 -0
  561. package/dist/testing/conformance/watch.d.ts +59 -0
  562. package/dist/testing/conformance/watch.js +879 -0
  563. package/dist/testing/conformance/workflow-engine.d.ts +97 -0
  564. package/dist/testing/conformance/workflow-engine.js +253 -0
  565. package/dist/testing/conformance/workflow-versions.d.ts +3 -0
  566. package/dist/testing/conformance/workflow-versions.js +545 -0
  567. package/dist/testing/conformance/workflows/access.d.ts +4 -0
  568. package/dist/testing/conformance/workflows/access.js +147 -0
  569. package/dist/testing/conformance/workflows/actors.d.ts +2317 -0
  570. package/dist/testing/conformance/workflows/actors.js +305 -0
  571. package/dist/testing/conformance/workflows/basics.d.ts +4 -0
  572. package/dist/testing/conformance/workflows/basics.js +144 -0
  573. package/dist/testing/conformance/workflows/engine.d.ts +4 -0
  574. package/dist/testing/conformance/workflows/engine.js +80 -0
  575. package/dist/testing/conformance/workflows/guards.d.ts +4 -0
  576. package/dist/testing/conformance/workflows/guards.js +172 -0
  577. package/dist/testing/conformance/workflows/harness.d.ts +14 -0
  578. package/dist/testing/conformance/workflows/harness.js +44 -0
  579. package/dist/testing/conformance/workflows/recovery.d.ts +4 -0
  580. package/dist/testing/conformance/workflows/recovery.js +181 -0
  581. package/dist/testing/conformance/workflows/starts.d.ts +4 -0
  582. package/dist/testing/conformance/workflows/starts.js +57 -0
  583. package/dist/testing/conformance/workflows/suspension.d.ts +4 -0
  584. package/dist/testing/conformance/workflows/suspension.js +106 -0
  585. package/dist/testing/conformance/workflows/waits.d.ts +4 -0
  586. package/dist/testing/conformance/workflows/waits.js +284 -0
  587. package/dist/testing/conformance/workflows.d.ts +4 -0
  588. package/dist/testing/conformance/workflows.js +19 -0
  589. package/dist/testing/conformance.d.ts +330 -0
  590. package/dist/testing/conformance.js +364 -0
  591. package/dist/testing/database.d.ts +31 -0
  592. package/dist/testing/database.js +70 -0
  593. package/dist/testing/foundation.d.ts +41 -0
  594. package/dist/testing/foundation.js +517 -0
  595. package/dist/testing/index.d.ts +20 -0
  596. package/dist/testing/index.js +12 -0
  597. package/dist/testing/property.d.ts +40 -0
  598. package/dist/testing/property.js +95 -0
  599. package/dist/testing/simulate-cluster.d.ts +112 -0
  600. package/dist/testing/simulate-cluster.js +257 -0
  601. package/dist/testing/simulate.d.ts +90 -0
  602. package/dist/testing/simulate.js +127 -0
  603. package/package.json +1 -0
@@ -0,0 +1,24 @@
1
+ import { Schema } from "effect";
2
+ import { declareChain } from "./payload.js";
3
+ /**
4
+ * `EventMember.make` is `Actor.event`: declares a durable event class. Its schema identifier is
5
+ * fixed to the tag, so a stored event names its class. `migrations` upcasts
6
+ * events stored at older versions when they are read; stored events are never
7
+ * rewritten. An invalid migration chain throws when the class is built. The
8
+ * value is itself the class: `Posted.make(...)`, `new Posted(...)`, and
9
+ * `instanceof` all work.
10
+ *
11
+ * @example
12
+ * const Posted = Actor.event("Posted", { text: Schema.String })
13
+ */
14
+ const make = (tag, fields, options) => {
15
+ const declared = Schema.TaggedClass()(tag, fields);
16
+ declareChain({ schema: declared, label: `Event ${tag}`, fields: fields, options });
17
+ return declared;
18
+ };
19
+ /** `Actor.event`; see `make`. */
20
+ export const EventMember = { make };
21
+ /** Entries one `read.events` call returns when the reader names no `limit`. */
22
+ export const DEFAULT_REPLAY_LIMIT = 1_000;
23
+ /** The largest page a reader may ask for; it bounds rows per page, not their bytes. */
24
+ export const MAX_REPLAY_LIMIT = 10_000;
@@ -0,0 +1,157 @@
1
+ import { type Duration, Schema } from "effect";
2
+ import type { AnyCommand, PayloadFields, ValueSchema } from "./command.ts";
3
+ import { type PayloadMigrations } from "./payload.ts";
4
+ /**
5
+ * An `Actor.job` value: a schema-backed class of requests for external I/O
6
+ * that a turn stages with `turn.enqueue` and an executor runs after commit.
7
+ * Its instances are the job's payload; `success` types the executor's return
8
+ * value and `progress` its transient frames.
9
+ */
10
+ export type JobClass<Tag extends string, Fields extends PayloadFields, Success extends ValueSchema, Progress extends ValueSchema | undefined = undefined> = Schema.Class<Schema.TaggedStruct<Tag, Fields>["Type"], Schema.TaggedStruct<Tag, Fields>, {}> & {
11
+ readonly tag: Tag;
12
+ readonly success: Success;
13
+ readonly progress: Progress;
14
+ };
15
+ /** Any job, as a `jobs` binding names it. */
16
+ export type AnyJob = ValueSchema & {
17
+ readonly tag: string;
18
+ readonly success: ValueSchema;
19
+ readonly progress: ValueSchema | undefined;
20
+ readonly Type: {
21
+ readonly _tag: string;
22
+ };
23
+ };
24
+ /** A job that declares a `progress` schema. */
25
+ export type ProgressJob = AnyJob & {
26
+ readonly progress: ValueSchema;
27
+ };
28
+ /** The frame type an executor of `J` reports with `X.Executor.progress`. */
29
+ export type ProgressOf<J extends ProgressJob> = J["progress"]["Type"];
30
+ /**
31
+ * `JobMember.make` is `Actor.job`: declares a job class. `payload` holds its record fields;
32
+ * `success` is the schema of the executor's return value and defaults to
33
+ * `Schema.Void`. `progress`, when declared, is the schema of the transient
34
+ * frames its executor may report before the result commits; they are never
35
+ * state. `migrations` upcasts payloads stored at older versions before each
36
+ * attempt and before a dead letter's route; `writeVersion` is as for events.
37
+ * The value is itself the class: `Charge.make(...)`, `new Charge(...)`, and
38
+ * `instanceof` all work, and one job may be bound by several actors.
39
+ *
40
+ * @example
41
+ * const Charge = Actor.job("Charge", {
42
+ * payload: { amount: Schema.Int },
43
+ * success: Schema.Struct({ providerId: Schema.String }),
44
+ * })
45
+ */
46
+ declare const make: <const Tag extends string, const Fields extends PayloadFields = {}, Success extends ValueSchema = Schema.Void, Progress extends ValueSchema | undefined = undefined>(tag: Tag, options?: {
47
+ readonly payload?: Fields;
48
+ readonly success?: Success;
49
+ readonly progress?: Progress;
50
+ readonly migrations?: PayloadMigrations;
51
+ readonly writeVersion?: number;
52
+ }) => JobClass<Tag, Fields, Success, Progress>;
53
+ /** `Actor.job`; see `make`. */
54
+ export declare const JobMember: {
55
+ make: typeof make;
56
+ };
57
+ /**
58
+ * The payload of an `onDeadLetter` command. `ambiguous` is true when the last
59
+ * attempt ended without a known outcome (a crash, timeout, interruption, or
60
+ * defect), so the provider may still have applied it.
61
+ */
62
+ export declare const DeadLetter: <J extends AnyJob>(job: J) => Schema.Struct<{
63
+ readonly jobId: Schema.String;
64
+ readonly job: J;
65
+ readonly attempts: Schema.Int;
66
+ readonly cause: Schema.String;
67
+ readonly ambiguous: Schema.Boolean;
68
+ }>;
69
+ /** The decoded payload of an `onDeadLetter` command for job `J`. */
70
+ export type DeadLetter<J extends AnyJob> = ReturnType<typeof DeadLetter<J>>["Type"];
71
+ /**
72
+ * The payload of an `onCancelled` command: what is known of a cancelled job.
73
+ * `Succeeded` carries the provider's result; `Failed` is reported only when no
74
+ * attempt can have applied the call; every other case is `Unknown`, with
75
+ * `ambiguous` true, because the provider may have acted.
76
+ */
77
+ export declare const Cancelled: <J extends AnyJob>(job: J) => Schema.Struct<{
78
+ readonly jobId: Schema.String;
79
+ readonly job: J;
80
+ readonly attempts: Schema.Int;
81
+ readonly outcome: Schema.TaggedUnion<{
82
+ readonly Failed: Schema.TaggedStruct<"Failed", {
83
+ readonly cause: Schema.String;
84
+ }>;
85
+ readonly Succeeded: Schema.TaggedStruct<"Succeeded", {
86
+ readonly value: ValueSchema;
87
+ }>;
88
+ readonly Unknown: Schema.TaggedStruct<"Unknown", {
89
+ readonly cause: Schema.String;
90
+ }>;
91
+ }>;
92
+ readonly ambiguous: Schema.Boolean;
93
+ }>;
94
+ /** The decoded payload of an `onCancelled` command for job `J`. */
95
+ export type Cancelled<J extends AnyJob> = ReturnType<typeof Cancelled<J>>["Type"];
96
+ /** A cancelled job's outcome before its route decodes `value`. */
97
+ export declare const CancelledOutcome: Schema.TaggedUnion<{
98
+ readonly Failed: Schema.TaggedStruct<"Failed", {
99
+ readonly cause: Schema.String;
100
+ }>;
101
+ readonly Succeeded: Schema.TaggedStruct<"Succeeded", {
102
+ readonly value: Schema.Unknown;
103
+ }>;
104
+ readonly Unknown: Schema.TaggedStruct<"Unknown", {
105
+ readonly cause: Schema.String;
106
+ }>;
107
+ }>;
108
+ /** Commands whose payload accepts `T`. */
109
+ type Accepting<Command extends AnyCommand, T> = Command extends AnyCommand ? [T] extends [Command["payload"]["Type"]] ? Command : never : never;
110
+ /**
111
+ * One actor's binding of a job: the job it enqueues and how this actor runs
112
+ * and routes it. Routes name commands of this actor whose payload accepts the
113
+ * executor's return value, the job's dead letter, or its cancellation; two
114
+ * actors may bind one job with different routes and limits.
115
+ */
116
+ export interface JobBinding<J extends AnyJob, Command extends AnyCommand> {
117
+ readonly job: J;
118
+ /** Bounds one executor attempt, measured on the runner. Default 30 seconds. */
119
+ readonly timeout?: Duration.Input;
120
+ /**
121
+ * The least time between two progress frames one attempt sends; frames
122
+ * reported sooner replace the one waiting. Default 250 milliseconds, from
123
+ * 50 milliseconds to 1 minute.
124
+ */
125
+ readonly progressEvery?: Duration.Input;
126
+ /**
127
+ * Retries after the first failed attempt (default 3), and the wait after
128
+ * failed attempt `n`: `min(base × 2^(n − 1), max)`. Default base 1 second,
129
+ * max 256 seconds. Retries are persisted, not process-local sleeps.
130
+ */
131
+ readonly retry?: {
132
+ readonly times: number;
133
+ readonly backoff?: {
134
+ readonly base: Duration.Input;
135
+ readonly max: Duration.Input;
136
+ };
137
+ };
138
+ /** Receives the executor's return value, with the job id as its command id. */
139
+ readonly onSuccess?: Accepting<Command, J["success"]["Type"]>;
140
+ /** Receives `Actor.DeadLetter(J)` once when retries are exhausted. */
141
+ readonly onDeadLetter?: Accepting<Command, DeadLetter<J>>;
142
+ /**
143
+ * Receives `Actor.Cancelled(J)` once for a job cancelled after an attempt
144
+ * started, with the job id as its command id.
145
+ */
146
+ readonly onCancelled?: Accepting<Command, Cancelled<J>>;
147
+ /**
148
+ * Attempts of this job running at once for one actor, across every
149
+ * runner: an integer from 1 to 64. Unlimited when omitted.
150
+ */
151
+ readonly concurrency?: {
152
+ readonly perActor: number;
153
+ };
154
+ }
155
+ /** Any job binding, whatever its job and routes. */
156
+ export type AnyJobBinding = JobBinding<AnyJob, AnyCommand>;
157
+ export {};
@@ -0,0 +1,67 @@
1
+ import { Schema } from "effect";
2
+ import { declareChain } from "./payload.js";
3
+ /**
4
+ * `JobMember.make` is `Actor.job`: declares a job class. `payload` holds its record fields;
5
+ * `success` is the schema of the executor's return value and defaults to
6
+ * `Schema.Void`. `progress`, when declared, is the schema of the transient
7
+ * frames its executor may report before the result commits; they are never
8
+ * state. `migrations` upcasts payloads stored at older versions before each
9
+ * attempt and before a dead letter's route; `writeVersion` is as for events.
10
+ * The value is itself the class: `Charge.make(...)`, `new Charge(...)`, and
11
+ * `instanceof` all work, and one job may be bound by several actors.
12
+ *
13
+ * @example
14
+ * const Charge = Actor.job("Charge", {
15
+ * payload: { amount: Schema.Int },
16
+ * success: Schema.Struct({ providerId: Schema.String }),
17
+ * })
18
+ */
19
+ const make = (tag, options) => {
20
+ if (tag.length === 0)
21
+ throw new Error("Actor.job needs a non-empty tag");
22
+ const fields = options?.payload ?? {};
23
+ const declared = Schema.TaggedClass()(tag, fields);
24
+ declareChain({ schema: declared, label: `Job ${tag}`, fields, options });
25
+ return Object.assign(declared, {
26
+ tag,
27
+ success: (options?.success ?? Schema.Void),
28
+ progress: options?.progress,
29
+ });
30
+ };
31
+ /** `Actor.job`; see `make`. */
32
+ export const JobMember = { make };
33
+ /**
34
+ * The payload of an `onDeadLetter` command. `ambiguous` is true when the last
35
+ * attempt ended without a known outcome (a crash, timeout, interruption, or
36
+ * defect), so the provider may still have applied it.
37
+ */
38
+ export const DeadLetter = (job) => Schema.Struct({
39
+ jobId: Schema.String,
40
+ job,
41
+ attempts: Schema.Int,
42
+ cause: Schema.String,
43
+ ambiguous: Schema.Boolean,
44
+ });
45
+ /**
46
+ * The payload of an `onCancelled` command: what is known of a cancelled job.
47
+ * `Succeeded` carries the provider's result; `Failed` is reported only when no
48
+ * attempt can have applied the call; every other case is `Unknown`, with
49
+ * `ambiguous` true, because the provider may have acted.
50
+ */
51
+ export const Cancelled = (job) => Schema.Struct({
52
+ jobId: Schema.String,
53
+ job,
54
+ attempts: Schema.Int,
55
+ outcome: Schema.TaggedUnion({
56
+ Succeeded: { value: job.success },
57
+ Failed: { cause: Schema.String },
58
+ Unknown: { cause: Schema.String },
59
+ }),
60
+ ambiguous: Schema.Boolean,
61
+ });
62
+ /** A cancelled job's outcome before its route decodes `value`. */
63
+ export const CancelledOutcome = Schema.TaggedUnion({
64
+ Succeeded: { value: Schema.Unknown },
65
+ Failed: { cause: Schema.String },
66
+ Unknown: { cause: Schema.String },
67
+ });
@@ -0,0 +1,93 @@
1
+ import { Effect, Schema } from "effect";
2
+ import type { StateMigration } from "../state/migration.ts";
3
+ import type { ValueSchema } from "./command.ts";
4
+ type Fields = Readonly<Record<string, ValueSchema>>;
5
+ /**
6
+ * An event's or effect's migration chain: every step since version 0, or,
7
+ * once no stored value needs the first `from` versions, the steps after them.
8
+ * Declaring the dropped count keeps every later version number unchanged.
9
+ */
10
+ export type PayloadMigrations = ReadonlyArray<StateMigration> | {
11
+ readonly from: number;
12
+ readonly steps: ReadonlyArray<StateMigration>;
13
+ };
14
+ /** Migration options shared by `Actor.event` and `Actor.job`. */
15
+ export interface PayloadOptions {
16
+ readonly migrations?: PayloadMigrations;
17
+ /**
18
+ * The version new values are written at. During a rolling deploy that adds
19
+ * a step, runners that don't know the step yet must still read every new
20
+ * value, so the first release writes the previous version and needs that
21
+ * step's `downcast`. Defaults to the chain's current version.
22
+ */
23
+ readonly writeVersion?: number;
24
+ }
25
+ /** A validated chain: stored versions `first..current` decode, and new values are written at `writeVersion`. */
26
+ interface PayloadChain {
27
+ readonly first: number;
28
+ readonly current: number;
29
+ readonly writeVersion: number;
30
+ /** Step `i` upcasts version `first + i` to `first + i + 1`. */
31
+ readonly steps: ReadonlyArray<StateMigration>;
32
+ }
33
+ declare const PayloadError_base: Schema.Class<PayloadError, Schema.TaggedStruct<"PayloadError", {
34
+ readonly message: Schema.String;
35
+ }>, import("effect/Cause").YieldableError>;
36
+ /** A stored value its chain cannot read; every read treats it as a defect, never a skip. */
37
+ declare class PayloadError extends PayloadError_base {
38
+ }
39
+ /** Records a class's chain when the class is built; an invalid chain throws there. */
40
+ export declare const declareChain: (declared: {
41
+ readonly schema: Schema.Top;
42
+ readonly label: string;
43
+ readonly fields: Fields;
44
+ readonly options: PayloadOptions | undefined;
45
+ }) => void;
46
+ /**
47
+ * The chain of an event or job class. Lookup follows the prototype chain, so
48
+ * a subclass of an `Actor.event` or `Actor.job` value shares its chain; a class
49
+ * declared without one reads and writes version 0.
50
+ */
51
+ export declare const payloadChain: (schema: Schema.Top) => PayloadChain;
52
+ /**
53
+ * Encodes and decodes one tagged class's stored values, which carry the tag
54
+ * in `_tag` and their version beside them. Values at the current version take
55
+ * the class's own codec; older ones pass through each later step first, and
56
+ * new ones are downcast through each step above `writeVersion`. A stored
57
+ * value is its class's JSON object: the tag and the fields of its version.
58
+ */
59
+ export declare const payloadCodec: <S extends ValueSchema & {
60
+ readonly Type: {
61
+ readonly _tag: string;
62
+ };
63
+ }>({ schema, tag, }: {
64
+ readonly schema: S;
65
+ readonly tag: string;
66
+ }) => {
67
+ chain: PayloadChain;
68
+ /** Encodes a value at the chain's write version. */
69
+ encode: (value: S["Type"]) => Effect.Effect<{
70
+ value: string;
71
+ version: number;
72
+ }, Schema.SchemaError, never>;
73
+ /** Decodes a stored value written at `version` into the current class. */
74
+ decode: (text: string, version: number) => Effect.Effect<S["Type"], PayloadError, S["DecodingServices"]>;
75
+ /** A stored value as the current version encodes it; unchanged when it is already current. */
76
+ upcast: (text: string, version: number) => Effect.Effect<string, PayloadError, S["DecodingServices"] | S["EncodingServices"]>;
77
+ };
78
+ /** One event or job class an actor type reads or writes, as the startup check sees it. */
79
+ export interface PayloadDeclaration {
80
+ readonly actorType: string;
81
+ readonly kind: "event" | "job";
82
+ readonly tag: string;
83
+ readonly chain: PayloadChain;
84
+ /** Whether this layer writes new values of the class, so it records and heartbeats its write version. */
85
+ readonly writes: boolean;
86
+ }
87
+ /** What `durable payloads check` and `clear` need of an actor definition. */
88
+ export interface DefinitionPayloads {
89
+ readonly declarations: ReadonlyArray<PayloadDeclaration>;
90
+ readonly keepEventsMs: number;
91
+ readonly commandTimeoutMs: number;
92
+ }
93
+ export {};
@@ -0,0 +1,145 @@
1
+ import { Effect, Schema } from "effect";
2
+ /** A stored value its chain cannot read; every read treats it as a defect, never a skip. */
3
+ class PayloadError extends Schema.TaggedError()("PayloadError", {
4
+ message: Schema.String,
5
+ }) {
6
+ }
7
+ const sameFields = (left, right) => {
8
+ const keys = Object.keys(left);
9
+ return (keys.length === Object.keys(right).length &&
10
+ keys.every((key) => Object.hasOwn(right, key) && left[key] === right[key]));
11
+ };
12
+ const isVersion = (value) => Number.isSafeInteger(value) && value >= 0;
13
+ /**
14
+ * Validates a chain against the declared fields, as the state chain is: each
15
+ * `to` has the next `from`'s fields and the last `to` has the declared ones.
16
+ * Fields compare key by key, so a step may restate them in a new object.
17
+ */
18
+ const chainOf = (label, fields, options) => {
19
+ const declared = options?.migrations ?? [];
20
+ const { from: first, steps } = Array.isArray(declared)
21
+ ? { from: 0, steps: declared }
22
+ : declared;
23
+ if (!isVersion(first))
24
+ throw new Error(`${label} migrations.from must be a non-negative integer`);
25
+ for (let index = 1; index < steps.length; index++)
26
+ if (!sameFields(steps[index - 1].to, steps[index].from))
27
+ throw new Error(`${label} migration ${index} must start from the previous migration's result`);
28
+ if (steps.length > 0 && !sameFields(steps.at(-1).to, fields))
29
+ throw new Error(`${label}'s last migration must produce its declared fields`);
30
+ for (const step of steps)
31
+ if ("_tag" in step.from || "_tag" in step.to)
32
+ throw new Error(`${label} migrations must not name _tag; the tag never changes`);
33
+ const current = first + steps.length;
34
+ const writeVersion = options?.writeVersion ?? current;
35
+ if (!isVersion(writeVersion) || writeVersion < first || writeVersion > current)
36
+ throw new Error(`${label} writeVersion must be a version from ${first} to ${current}`);
37
+ for (let version = writeVersion; version < current; version++)
38
+ if (steps[version - first].downcast === undefined)
39
+ throw new Error(`${label} writes version ${writeVersion}, so migration ${version - first} needs a downcast`);
40
+ return { first, current, writeVersion, steps };
41
+ };
42
+ const chains = new WeakMap();
43
+ const NO_CHAIN = { first: 0, current: 0, writeVersion: 0, steps: [] };
44
+ /** Records a class's chain when the class is built; an invalid chain throws there. */
45
+ export const declareChain = (declared) => {
46
+ chains.set(declared.schema, chainOf(declared.label, declared.fields, declared.options));
47
+ };
48
+ /**
49
+ * The chain of an event or job class. Lookup follows the prototype chain, so
50
+ * a subclass of an `Actor.event` or `Actor.job` value shares its chain; a class
51
+ * declared without one reads and writes version 0.
52
+ */
53
+ export const payloadChain = (schema) => {
54
+ for (let current = schema; current !== null;) {
55
+ const chain = chains.get(current);
56
+ if (chain !== undefined)
57
+ return chain;
58
+ current = Object.getPrototypeOf(current);
59
+ }
60
+ return NO_CHAIN;
61
+ };
62
+ /**
63
+ * Encodes and decodes one tagged class's stored values, which carry the tag
64
+ * in `_tag` and their version beside them. Values at the current version take
65
+ * the class's own codec; older ones pass through each later step first, and
66
+ * new ones are downcast through each step above `writeVersion`. A stored
67
+ * value is its class's JSON object: the tag and the fields of its version.
68
+ */
69
+ export const payloadCodec = ({ schema, tag, }) => {
70
+ const chain = payloadChain(schema);
71
+ const json = Schema.toCodecJson(schema);
72
+ const codec = Schema.fromJsonString(json);
73
+ const encodeCurrent = Schema.encodeEffect(codec);
74
+ const decodeCurrent = Schema.decodeEffect(codec);
75
+ const encodeCurrentJson = Schema.encodeEffect(json);
76
+ const decodeCurrentJson = Schema.decodeUnknownEffect(json);
77
+ const Stored = Schema.StructWithRest(Schema.Struct({ _tag: Schema.Literal(tag) }), [
78
+ Schema.Record(Schema.String, Schema.Json),
79
+ ]);
80
+ const decodeStored = Schema.decodeUnknownEffect(Stored);
81
+ const decodeStoredText = Schema.decodeEffect(Schema.fromJsonString(Stored));
82
+ const encodeStoredText = Schema.encodeEffect(Schema.fromJsonString(Stored));
83
+ const steps = chain.steps.map((step) => {
84
+ const from = Schema.toCodecJson(Schema.Struct(step.from));
85
+ const to = Schema.toCodecJson(Schema.Struct(step.to));
86
+ return {
87
+ step,
88
+ decodeFrom: Schema.decodeUnknownEffect(from),
89
+ encodeFrom: Schema.encodeUnknownEffect(from),
90
+ decodeTo: Schema.decodeUnknownEffect(to),
91
+ encodeTo: Schema.encodeUnknownEffect(to),
92
+ };
93
+ });
94
+ const failure = (version, message) => PayloadError.make({
95
+ message: `Stored ${tag} at payload version ${version} does not decode: ${message}`,
96
+ });
97
+ const fieldsOf = ({ _tag, ...fields }) => fields;
98
+ const upcastStored = (text, version) => Effect.gen(function* () {
99
+ if (version > chain.current)
100
+ return yield* PayloadError.make({
101
+ message: `Stored ${tag} has payload version ${version}, newer than this code's chain (${chain.current}); roll forward`,
102
+ });
103
+ if (version < chain.first)
104
+ return yield* PayloadError.make({
105
+ message: `Stored ${tag} has payload version ${version}, older than this code's chain (${chain.first})`,
106
+ });
107
+ let value = fieldsOf(yield* decodeStoredText(text).pipe(Effect.mapError((error) => failure(version, error.message))));
108
+ for (const { step, decodeFrom, encodeTo } of steps.slice(version - chain.first)) {
109
+ const previous = yield* decodeFrom(value).pipe(Effect.mapError((error) => failure(version, error.message)));
110
+ const next = yield* Effect.try({
111
+ try: () => step.upcast(previous),
112
+ catch: (cause) => failure(version, String(cause)),
113
+ });
114
+ value = yield* encodeTo(next).pipe(Effect.mapError((error) => failure(version, error.message)));
115
+ }
116
+ return yield* decodeCurrentJson({ ...value, _tag: tag }).pipe(Effect.mapError((error) => failure(version, error.message)));
117
+ });
118
+ const downcast = (value) => Effect.gen(function* () {
119
+ let encoded = fieldsOf(yield* decodeStored(yield* encodeCurrentJson(value)));
120
+ for (let version = chain.current; version > chain.writeVersion; version--) {
121
+ const { step, decodeTo, encodeFrom } = steps[version - 1 - chain.first];
122
+ const next = yield* decodeTo(encoded);
123
+ encoded = yield* encodeFrom(step.downcast(next));
124
+ }
125
+ return {
126
+ value: yield* encodeStoredText(yield* decodeStored({ ...encoded, _tag: tag })),
127
+ version: chain.writeVersion,
128
+ };
129
+ });
130
+ return {
131
+ chain,
132
+ /** Encodes a value at the chain's write version. */
133
+ encode: (value) => chain.writeVersion === chain.current
134
+ ? encodeCurrent(value).pipe(Effect.map((text) => ({ value: text, version: chain.current })))
135
+ : downcast(value),
136
+ /** Decodes a stored value written at `version` into the current class. */
137
+ decode: (text, version) => version === chain.current
138
+ ? decodeCurrent(text).pipe(Effect.mapError((error) => failure(version, error.message)))
139
+ : upcastStored(text, version),
140
+ /** A stored value as the current version encodes it; unchanged when it is already current. */
141
+ upcast: (text, version) => version === chain.current
142
+ ? Effect.succeed(text)
143
+ : upcastStored(text, version).pipe(Effect.flatMap((decoded) => encodeCurrent(decoded).pipe(Effect.mapError((error) => failure(version, error.message))))),
144
+ };
145
+ };
@@ -0,0 +1,64 @@
1
+ import { Schema, type Result } from "effect";
2
+ import type { ActorState } from "../state/migration.ts";
3
+ import { type DeclaredError, type Member, type PayloadOf, type PayloadOption, type ValueSchema } from "./command.ts";
4
+ type Fields = Readonly<Record<string, ValueSchema>>;
5
+ type StateOf<F extends Fields> = Schema.Struct<F>["Type"];
6
+ /**
7
+ * Ordered batching: `combine(first, second)` is one payload whose single
8
+ * reduction equals reducing `first` and then `second`, which lets the server
9
+ * fold consecutive queued calls, in their order, into one turn. It needs that
10
+ * fold equivalence only; it is not commutativity or a merge of concurrent
11
+ * replicas. Declared as a method so its parameters stay bivariant and any
12
+ * reducer fits `AnyReducer`.
13
+ */
14
+ export interface Batch<Payload> {
15
+ combine(first: Payload, second: Payload): Payload;
16
+ }
17
+ /**
18
+ * A pure state transition declared in the contract. The server runs it as an
19
+ * ordinary fenced, receipted turn with no handler; a batched reducer replies
20
+ * `void` and declares no error, so combined turns stay equivalent to
21
+ * sequential ones and each call keeps its own receipt.
22
+ */
23
+ export interface Reducer<Tag extends string, F extends Fields, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError> extends Member<"reducer", Tag, Payload, Success, Error> {
24
+ readonly state: ActorState<F>;
25
+ /** Declared as a method so its parameters stay bivariant and any reducer fits `AnyReducer`. */
26
+ reduce(state: StateOf<F>, payload: Payload["Type"]): Result.Result<StateOf<F>, Error["Type"]>;
27
+ readonly batch: Batch<Payload["Type"]> | undefined;
28
+ }
29
+ /** Any reducer, whatever its schemas. */
30
+ export type AnyReducer = Reducer<string, Fields, ValueSchema, ValueSchema, DeclaredError>;
31
+ /**
32
+ * The overloads of `Actor.reducer`. A batched reducer replies `void` and
33
+ * cannot fail; any other replies the committed state. Declaring `error` on a
34
+ * batched reducer throws.
35
+ *
36
+ * @example
37
+ * const Add = Actor.reducer("Add", {
38
+ * state: Counter,
39
+ * payload: { by: Schema.Int },
40
+ * reduce: (state, { by }) => Result.succeed({ count: state.count + by }),
41
+ * batch: { combine: (first, second) => ({ by: first.by + second.by }) },
42
+ * })
43
+ */
44
+ export interface MakeReducer {
45
+ <const Tag extends string, const F extends Fields, const P extends PayloadOption = Schema.Void>(tag: Tag, options: {
46
+ readonly state: ActorState<F>;
47
+ readonly payload?: P;
48
+ readonly error?: Schema.Never;
49
+ readonly reduce: (state: StateOf<F>, payload: PayloadOf<P>["Type"]) => Result.Result<StateOf<F>, never>;
50
+ readonly batch: Batch<PayloadOf<P>["Type"]>;
51
+ }): Reducer<Tag, F, PayloadOf<P>, Schema.Void, Schema.Never>;
52
+ <const Tag extends string, const F extends Fields, const P extends PayloadOption = Schema.Void, Error extends DeclaredError = Schema.Never>(tag: Tag, options: {
53
+ readonly state: ActorState<F>;
54
+ readonly payload?: P;
55
+ readonly error?: Error;
56
+ readonly reduce: (state: StateOf<F>, payload: PayloadOf<P>["Type"]) => Result.Result<StateOf<F>, Error["Type"]>;
57
+ readonly batch?: undefined;
58
+ }): Reducer<Tag, F, PayloadOf<P>, Schema.Struct<F>, Error>;
59
+ }
60
+ /** `Reducer.make` is `Actor.reducer`; see `MakeReducer` for its two forms. */
61
+ export declare const Reducer: {
62
+ make: MakeReducer;
63
+ };
64
+ export {};
@@ -0,0 +1,27 @@
1
+ import { Schema } from "effect";
2
+ import { member, } from "./command.js";
3
+ const reducer = (tag, options) => {
4
+ const { state, reduce, batch } = options;
5
+ if (batch === undefined)
6
+ return {
7
+ ...member("reducer")(tag, {
8
+ payload: options.payload,
9
+ success: Schema.Struct(state.fields),
10
+ error: options.error,
11
+ }),
12
+ state,
13
+ reduce,
14
+ batch,
15
+ };
16
+ if (options.error !== undefined && options.error !== Schema.Never)
17
+ throw new Error(`Batched reducer ${tag} cannot declare an error`);
18
+ return {
19
+ ...member("reducer")(tag, { payload: options.payload }),
20
+ state,
21
+ reduce,
22
+ batch,
23
+ };
24
+ };
25
+ const make = reducer;
26
+ /** `Reducer.make` is `Actor.reducer`; see `MakeReducer` for its two forms. */
27
+ export const Reducer = { make };
@@ -0,0 +1,36 @@
1
+ import type { Schema } from "effect";
2
+ import { type DeclaredError, type Member, type PayloadOf, type PayloadOption, type ValueSchema } from "./command.ts";
3
+ import type { ProgressJob } from "./job.ts";
4
+ /**
5
+ * A live, read-only feed that runs on the actor's activation for one
6
+ * subscriber. `payload` is the subscription's input and `success` the schema
7
+ * of each element; nothing it emits is stored.
8
+ */
9
+ export interface Stream<Tag extends string, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError> extends Member<"stream", Tag, Payload, Success, Error> {
10
+ /** Jobs whose executor progress its handler may read with `read.progress`. */
11
+ readonly progress: {
12
+ readonly jobs: ReadonlyArray<ProgressJob>;
13
+ } | undefined;
14
+ }
15
+ /** Any stream member, whatever its schemas. */
16
+ export type AnyStream = Stream<string, ValueSchema, ValueSchema, DeclaredError>;
17
+ declare const make: <const Tag extends string, Success extends ValueSchema, const P extends PayloadOption = Schema.Void, Error extends DeclaredError = Schema.Never>(tag: Tag, options: {
18
+ readonly success: Success;
19
+ readonly payload?: P;
20
+ readonly error?: Error;
21
+ readonly progress?: {
22
+ readonly jobs: ReadonlyArray<ProgressJob>;
23
+ };
24
+ }) => Stream<Tag, PayloadOf<P>, Success, Error>;
25
+ /**
26
+ * `StreamMember.make` is `Actor.stream`: declares a live, read-only feed by
27
+ * tag. `success` types each element; `payload` defaults to `Schema.Void`, and
28
+ * `progress.jobs` lists the jobs whose executor progress the handler may follow.
29
+ *
30
+ * @example
31
+ * const Ticks = Actor.stream("Ticks", { success: Schema.Int })
32
+ */
33
+ export declare const StreamMember: {
34
+ make: typeof make;
35
+ };
36
+ export {};
@@ -0,0 +1,14 @@
1
+ import { member, } from "./command.js";
2
+ const make = (tag, options) => ({
3
+ ...member("stream")(tag, options),
4
+ progress: options.progress,
5
+ });
6
+ /**
7
+ * `StreamMember.make` is `Actor.stream`: declares a live, read-only feed by
8
+ * tag. `success` types each element; `payload` defaults to `Schema.Void`, and
9
+ * `progress.jobs` lists the jobs whose executor progress the handler may follow.
10
+ *
11
+ * @example
12
+ * const Ticks = Actor.stream("Ticks", { success: Schema.Int })
13
+ */
14
+ export const StreamMember = { make };