@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,186 @@
1
+ import { Context, Crypto, Effect } from "effect";
2
+ import { Sharding } from "effect/cluster";
3
+ import { SqlClient, SqlError } from "effect/sql";
4
+ import { isContent } from "../members/blob.js";
5
+ import { retryPoolRefusal } from "./database/bounded.js";
6
+ import { registerActor } from "./entity/register.js";
7
+ import { findPayloadProblems, formatPayloadProblem, recordPayloadVersions, } from "./payloads/versions.js";
8
+ import { checkPlacement } from "./storage/placements.js";
9
+ import { DefectLog } from "./telemetry/defects.js";
10
+ import { FrameworkClock } from "./turn/admission.js";
11
+ import { OutboxRuntime, textArray } from "./turn/outbox.js";
12
+ import { checkTables } from "./turn/rows.js";
13
+ import { acceptWorkflows, formatIncompatibility } from "./workflows/compatibility.js";
14
+ import { RECOVERY_MS } from "./workflows/engine.js";
15
+ /** How long registering a source waits for the subscriber types routing from it to register. */
16
+ const ROUTED_SUBSCRIBER_WAIT_MS = 5000;
17
+ /**
18
+ * Registers actor, query, and job layers with the runtime. Each
19
+ * registration is refused unless its placement, tables, content, workflows,
20
+ * payload versions, and routed subscriptions agree with the database and the
21
+ * runtime's configuration; an accepted one is recorded for the relay, the
22
+ * connection holder, and the sweeps, and forgotten when its layer's scope
23
+ * closes.
24
+ */
25
+ export const actorRegistration = ({ registrations, queryRegistrations, jobRegistrations, residency, diagnostics, owners, heldTypes, heldType, sweepsWorkflows, checked, services, frameworkClock, content, retryWindowMs, tableRole, adoptionRole, enforcedTypes, writerDeclarations, refreshPayloadWriters, subscriptions, transport, authorize, gate, writable, defectLog, outbox, }) => {
26
+ /** Concurrent layers can exceed checkout capacity; only a refused checkout is safe to retry here. */
27
+ const startupSql = (effect) => retryPoolRefusal(effect).pipe(Effect.orDie);
28
+ /**
29
+ * Refuses a layer that can't read every payload version the database
30
+ * may hold, as a placement or workflow mismatch is refused. `writes`
31
+ * names the actor type whose turns the layer runs, for the removed-class check.
32
+ */
33
+ const checkPayloadVersions = Effect.fnUntraced(function* (name, declarations, writes) {
34
+ const problems = yield* findPayloadProblems(declarations, writes === undefined ? [] : [writes]).pipe(Effect.provideContext(services), startupSql);
35
+ if (problems.length > 0)
36
+ return yield* Effect.die(new Error([
37
+ `Actor ${name} cannot read every stored payload version; deploy refused`,
38
+ ...problems.map(formatPayloadProblem),
39
+ ].join("\n")));
40
+ });
41
+ const recordRouted = Effect.fnUntraced(function* (registration) {
42
+ const sql = yield* SqlClient.SqlClient;
43
+ const routed = registration.subscriptions.filter((declared) => declared.routed !== undefined);
44
+ for (const declared of routed)
45
+ yield* sql `INSERT INTO actor_routed_subscriptions (source_type, subscriber_type, subscription)
46
+ VALUES (${declared.sourceType}, ${registration.name}, ${declared.tag})
47
+ ON CONFLICT DO NOTHING`;
48
+ yield* sql `DELETE FROM actor_routed_subscriptions
49
+ WHERE subscriber_type = ${registration.name}
50
+ AND NOT (source_type, subscription) IN (
51
+ SELECT * FROM unnest(${textArray({ sql, values: routed.map((declared) => declared.sourceType) })},
52
+ ${textArray({ sql, values: routed.map((declared) => declared.tag) })}))`;
53
+ });
54
+ /**
55
+ * A publishing turn creates a routed subscription's source-side rows
56
+ * only from the routed declarations its runner registers, so a runner
57
+ * that serves a source without a subscriber type routing from it would
58
+ * lose those events silently. Registering the source fails instead.
59
+ * Layers of one runtime register concurrently, so the subscriber gets
60
+ * a short window to register first.
61
+ */
62
+ const requireRoutedSubscribers = Effect.fnUntraced(function* (sourceType) {
63
+ const sql = yield* SqlClient.SqlClient;
64
+ const missing = Effect.map(sql `
65
+ SELECT subscriber_type, subscription FROM actor_routed_subscriptions
66
+ WHERE source_type = ${sourceType}`, (rows) => rows.filter((row) => row.subscriber_type !== sourceType && !registrations.has(row.subscriber_type)));
67
+ for (let waited = 0; waited < ROUTED_SUBSCRIBER_WAIT_MS; waited += 100) {
68
+ if ((yield* missing).length === 0)
69
+ return;
70
+ yield* Effect.sleep("100 millis");
71
+ }
72
+ const unregistered = yield* missing;
73
+ if (unregistered.length > 0)
74
+ return yield* Effect.die(new Error(`Actor ${sourceType} is registered without the subscriber types that route from it (${unregistered
75
+ .map((row) => `${row.subscriber_type}.${row.subscription}`)
76
+ .join(", ")}); register their layers on every runner that serves ${sourceType}`));
77
+ });
78
+ const declaresContent = (registration) => registration.blobs.some(isContent);
79
+ const requireContent = (name) => content === undefined
80
+ ? Effect.die(new Error(`Actor ${name} declares content; give the runtime content.keys`))
81
+ : Effect.void;
82
+ const recordContentTurn = Effect.fnUntraced(function* (registration) {
83
+ const sql = yield* SqlClient.SqlClient;
84
+ yield* sql `INSERT INTO actor_content_types (actor_type, turn_ms)
85
+ VALUES (${registration.name}, ${registration.policy.executionMs})
86
+ ON CONFLICT (actor_type) DO UPDATE
87
+ SET turn_ms = greatest(actor_content_types.turn_ms, EXCLUDED.turn_ms)`;
88
+ });
89
+ return {
90
+ register: Effect.fnUntraced(function* (registration) {
91
+ if (registrations.has(registration.name))
92
+ return yield* Effect.die(new Error(`Duplicate actor: ${registration.name}`));
93
+ yield* checkPlacement(registration).pipe(Effect.provideContext(services), startupSql);
94
+ if (declaresContent(registration)) {
95
+ yield* requireContent(registration.name);
96
+ yield* recordContentTurn(registration).pipe(Effect.provideContext(services), startupSql);
97
+ }
98
+ const enforces = yield* checkTables(registration.name, registration.tables, tableRole, {
99
+ role: adoptionRole,
100
+ writes: true,
101
+ }).pipe(Effect.provideContext(services), startupSql);
102
+ if (enforces)
103
+ enforcedTypes.add(registration.name);
104
+ for (const table of registration.tables)
105
+ checked.add(table);
106
+ if (registration.workflows.size > 0 && registration.policy.keepWorkflowsMs < retryWindowMs)
107
+ return yield* Effect.die(new Error(`Actor ${registration.name} keepWorkflows is shorter than the retry window`));
108
+ if (registration.workflows.size > 0 &&
109
+ retryWindowMs - registration.policy.deliveryMs <= RECOVERY_MS)
110
+ yield* Effect.logWarning(`Actor ${registration.name}: the retry window minus deliveryTimeout is at most the ${RECOVERY_MS / 1000}-second workflow recovery interval, so an activity whose runner dies fails with ActivityOutcomeUnknown instead of rerunning its actor calls`);
111
+ const { incompatibilities, retained } = yield* acceptWorkflows({
112
+ name: registration.name,
113
+ workflows: Array.from(registration.workflows.values(), ({ member }) => member),
114
+ }).pipe(Effect.provideContext(services), startupSql);
115
+ if (incompatibilities.length > 0)
116
+ return yield* Effect.die(new Error([
117
+ `Actor ${registration.name} workflows are incompatible with open executions; deploy refused`,
118
+ ...incompatibilities.map(formatIncompatibility),
119
+ ].join("\n")));
120
+ yield* checkPayloadVersions(registration.name, registration.payloads, {
121
+ actorType: registration.name,
122
+ events: registration.payloads
123
+ .filter((declared) => declared.writes && declared.kind === "event")
124
+ .map((declared) => declared.tag),
125
+ });
126
+ yield* recordPayloadVersions(registration.payloads).pipe(Effect.provideContext(services), Effect.provideService(FrameworkClock, frameworkClock), startupSql);
127
+ for (const declared of registration.payloads)
128
+ if (declared.writes)
129
+ writerDeclarations.push(declared);
130
+ yield* refreshPayloadWriters.pipe(startupSql);
131
+ yield* recordRouted(registration).pipe(Effect.provideContext(services), startupSql);
132
+ yield* requireRoutedSubscribers(registration.name).pipe(Effect.provideContext(services), startupSql);
133
+ for (const declared of registration.subscriptions)
134
+ if (declared.routed === undefined)
135
+ yield* subscriptions
136
+ .widen(registration.name, declared)
137
+ .pipe(Effect.provideContext(services), startupSql);
138
+ registrations.set(registration.name, registration);
139
+ if (registration.connections.size > 0 ||
140
+ registration.feeds.size > 0 ||
141
+ registration.watches.size > 0)
142
+ heldTypes.set(registration.name, heldType(registration));
143
+ if (retained)
144
+ sweepsWorkflows.add(registration.name);
145
+ yield* Effect.addFinalizer(() => Effect.sync(() => {
146
+ registrations.delete(registration.name);
147
+ residency.delete(registration.name);
148
+ diagnostics.delete(registration.name);
149
+ owners.delete(registration.name);
150
+ heldTypes.delete(registration.name);
151
+ sweepsWorkflows.delete(registration.name);
152
+ }));
153
+ const { isResident, owner, diagnose, restarting } = yield* registerActor(registration, transport, authorize, gate, writable).pipe(Effect.provideService(DefectLog, defectLog), Effect.provideContext(services), Effect.provideService(OutboxRuntime, outbox));
154
+ residency.set(registration.name, isResident);
155
+ diagnostics.set(registration.name, { diagnose, restarting });
156
+ owners.set(registration.name, owner);
157
+ }),
158
+ registerQueries: Effect.fnUntraced(function* (registration) {
159
+ if (queryRegistrations.has(registration.name))
160
+ return yield* Effect.die(new Error(`Duplicate query layer: ${registration.name}`));
161
+ yield* checkPlacement(registration).pipe(Effect.provideContext(services), startupSql);
162
+ if (declaresContent(registration))
163
+ yield* requireContent(registration.name);
164
+ yield* checkTables(registration.name, registration.tables, tableRole, {
165
+ role: adoptionRole,
166
+ writes: false,
167
+ }).pipe(Effect.provideContext(services), startupSql);
168
+ for (const table of registration.tables)
169
+ checked.add(table);
170
+ yield* checkPayloadVersions(registration.name, registration.payloads);
171
+ queryRegistrations.set(registration.name, registration);
172
+ yield* Effect.addFinalizer(() => Effect.sync(() => {
173
+ queryRegistrations.delete(registration.name);
174
+ }));
175
+ }),
176
+ registerJobs: Effect.fnUntraced(function* (registration) {
177
+ if (jobRegistrations.has(registration.name))
178
+ return yield* Effect.die(new Error(`Duplicate job layer: ${registration.name}`));
179
+ yield* checkPayloadVersions(registration.name, registration.payloads);
180
+ jobRegistrations.set(registration.name, registration);
181
+ yield* Effect.addFinalizer(() => Effect.sync(() => {
182
+ jobRegistrations.delete(registration.name);
183
+ }));
184
+ }),
185
+ };
186
+ };
@@ -0,0 +1,158 @@
1
+ import { Schema } from "effect";
2
+ import { ActorError } from "../errors/actor.ts";
3
+ /**
4
+ * How a command or query ended, with its value or declared failure still
5
+ * JSON-encoded. A defect carries only its cause and is never a declared error.
6
+ */
7
+ export declare const Outcome: Schema.TaggedUnion<{
8
+ readonly Acknowledged: Schema.TaggedStruct<"Acknowledged", {
9
+ readonly reason: Schema.Literals<readonly ["AlreadyApplied", "Stale", "Unsubscribed", "NotCreated"]>;
10
+ }>;
11
+ readonly Defect: Schema.TaggedStruct<"Defect", {
12
+ readonly cause: Schema.Defect;
13
+ }>;
14
+ readonly Failure: Schema.TaggedStruct<"Failure", {
15
+ readonly value: Schema.String;
16
+ }>;
17
+ readonly Success: Schema.TaggedStruct<"Success", {
18
+ readonly value: Schema.String;
19
+ }>;
20
+ }>;
21
+ /** How a command or query ended: an encoded success or declared failure, or a defect. */
22
+ export type Outcome = typeof Outcome.Type;
23
+ /**
24
+ * A command's outcome, with the commit version its caller's later queries
25
+ * wait for once the turn committed or replayed a receipt, and the database
26
+ * clock read on the turn's session after its transaction ended, which an
27
+ * external caller's expiry recheck uses before the reply. A defect carries
28
+ * neither.
29
+ */
30
+ export declare const Executed: Schema.Struct<{
31
+ readonly outcome: Schema.TaggedUnion<{
32
+ readonly Acknowledged: Schema.TaggedStruct<"Acknowledged", {
33
+ readonly reason: Schema.Literals<readonly ["AlreadyApplied", "Stale", "Unsubscribed", "NotCreated"]>;
34
+ }>;
35
+ readonly Defect: Schema.TaggedStruct<"Defect", {
36
+ readonly cause: Schema.Defect;
37
+ }>;
38
+ readonly Failure: Schema.TaggedStruct<"Failure", {
39
+ readonly value: Schema.String;
40
+ }>;
41
+ readonly Success: Schema.TaggedStruct<"Success", {
42
+ readonly value: Schema.String;
43
+ }>;
44
+ }>;
45
+ readonly version: Schema.optionalKey<Schema.String>;
46
+ readonly endedAtMs: Schema.optionalKey<Schema.Finite>;
47
+ readonly replayed: Schema.optionalKey<Schema.Boolean>;
48
+ }>;
49
+ /** A command's outcome and the commit version its caller's later queries wait for. */
50
+ export type Executed = typeof Executed.Type;
51
+ declare const DeliveryFailed_base: Schema.Class<DeliveryFailed, Schema.TaggedStruct<"DeliveryFailed", {
52
+ readonly error: typeof ActorError;
53
+ readonly admitted: Schema.Boolean;
54
+ }>, import("effect/Cause").YieldableError>;
55
+ /** An owner's retryable delivery failure, with whether fenced admission validated the id. */
56
+ export declare class DeliveryFailed extends DeliveryFailed_base {
57
+ }
58
+ /**
59
+ * What a subscription delivery carries beside its command id: the source-side
60
+ * row it came from, the subscription's epoch, and the source position it
61
+ * applies. Only the relay sets it; the subscriber's cursor row is checked and
62
+ * advanced against it in the delivery's own turn.
63
+ */
64
+ export declare const SubscriptionEnvelope: Schema.Struct<{
65
+ readonly subscription: Schema.NonEmptyString;
66
+ readonly sourceType: Schema.NonEmptyString;
67
+ readonly sourceId: Schema.NonEmptyString;
68
+ readonly epoch: Schema.String;
69
+ readonly kind: Schema.Literals<readonly ["event", "gap", "rejected"]>;
70
+ /** An event's cursor, a gap's `resumeAfter`, or a rejected subscription's cursor. */
71
+ readonly position: Schema.String;
72
+ }>;
73
+ /** The relay's metadata for one subscription delivery. */
74
+ export type SubscriptionEnvelope = typeof SubscriptionEnvelope.Type;
75
+ /**
76
+ * One command or query addressed to an actor, with its encoded payload.
77
+ * `commandId` is the operation's identity: a retry with the same id replays
78
+ * the receipt instead of running again.
79
+ */
80
+ export declare const Request: Schema.Struct<{
81
+ readonly ref: Schema.Struct<{
82
+ readonly tenant: Schema.NonEmptyString;
83
+ readonly actor: Schema.NonEmptyString;
84
+ readonly id: Schema.NonEmptyString;
85
+ }>;
86
+ readonly caller: Schema.toTaggedUnion<"_tag", readonly [Schema.TaggedStruct<"User", {
87
+ readonly subject: Schema.NonEmptyString;
88
+ }>, Schema.TaggedStruct<"Anonymous", {}>, Schema.TaggedStruct<"System", {
89
+ readonly source: Schema.Literals<readonly ["process", "actor", "timer", "cron", "workflow", "job", "subscription"]>;
90
+ readonly ref: Schema.optional<Schema.Struct<{
91
+ readonly tenant: Schema.NonEmptyString;
92
+ readonly actor: Schema.NonEmptyString;
93
+ readonly id: Schema.NonEmptyString;
94
+ }>>;
95
+ readonly onBehalfOf: Schema.optional<Schema.Struct<{
96
+ readonly subject: Schema.NonEmptyString;
97
+ }>>;
98
+ readonly mint: Schema.optional<Schema.Struct<{
99
+ readonly commandId: Schema.String;
100
+ readonly ordinal: Schema.Int;
101
+ }>>;
102
+ }>]>;
103
+ readonly command: Schema.NonEmptyString;
104
+ readonly commandId: Schema.String;
105
+ readonly payload: Schema.String;
106
+ /**
107
+ * Set only by the runtime on external admission. On its first delivery such
108
+ * a turn checks the id against its fenced read's database clock before it
109
+ * releases a receipt or runs the handler. Any turn of it rejects an expired
110
+ * id that has no receipt once retention may have pruned one, so pruning a
111
+ * receipt while its retry waits for the turn cannot run the command again.
112
+ */
113
+ readonly external: Schema.optionalKey<Schema.Boolean>;
114
+ /** Runtime-only framework-clock offset carried across a test/runner hop. */
115
+ readonly clockOffset: Schema.optionalKey<Schema.Finite>;
116
+ /**
117
+ * Set by the runtime only once an owner reported that an earlier attempt
118
+ * passed fenced admission. That attempt was admitted within the id's
119
+ * window, so expiry alone does not reject it before receipt resolution or
120
+ * the retention safety check. Invalid and future identities still fail.
121
+ */
122
+ readonly redelivered: Schema.optionalKey<Schema.Boolean>;
123
+ /**
124
+ * The sender of the committed outbox row the relay claimed. The rest of
125
+ * that row's delivery is this request's target, caller, command id,
126
+ * command, and payload. Only the relay supplies this provenance, and
127
+ * external admission rejects it rather than trusting a presented proof.
128
+ */
129
+ readonly intent: Schema.optionalKey<Schema.Struct<{
130
+ readonly tenant: Schema.NonEmptyString;
131
+ readonly actor: Schema.NonEmptyString;
132
+ readonly id: Schema.NonEmptyString;
133
+ }>>;
134
+ readonly delivery: Schema.optionalKey<Schema.Struct<{
135
+ readonly subscription: Schema.NonEmptyString;
136
+ readonly sourceType: Schema.NonEmptyString;
137
+ readonly sourceId: Schema.NonEmptyString;
138
+ readonly epoch: Schema.String;
139
+ readonly kind: Schema.Literals<readonly ["event", "gap", "rejected"]>;
140
+ /** An event's cursor, a gap's `resumeAfter`, or a rejected subscription's cursor. */
141
+ readonly position: Schema.String;
142
+ }>>;
143
+ /**
144
+ * When the admitting runner sent the command to its owner, by that
145
+ * runner's clock; the owner reports the wait as mailbox age. Not part of
146
+ * the command's identity.
147
+ */
148
+ readonly queuedAtMs: Schema.optionalKey<Schema.Finite>;
149
+ /**
150
+ * Names one read attempt for the host's usage accounting; a watch reuses it
151
+ * for every rerun. A host that supplies it must have bound it to an
152
+ * authenticated assertion. Not part of the request's identity.
153
+ */
154
+ readonly usageToken: Schema.optionalKey<Schema.NonEmptyString>;
155
+ }>;
156
+ /** One command or query addressed to an actor. */
157
+ export type Request = typeof Request.Type;
158
+ export {};
@@ -0,0 +1,102 @@
1
+ import { Schema } from "effect";
2
+ import { ActorRef, Caller } from "../identity/caller.js";
3
+ import { ActorError } from "../errors/actor.js";
4
+ /**
5
+ * How a command or query ended, with its value or declared failure still
6
+ * JSON-encoded. A defect carries only its cause and is never a declared error.
7
+ */
8
+ export const Outcome = Schema.TaggedUnion({
9
+ Success: { value: Schema.String },
10
+ Failure: { value: Schema.String },
11
+ Defect: { cause: Schema.Defect() },
12
+ /**
13
+ * A subscription delivery the subscriber settled without running its
14
+ * handler; only the relay sees it, and it commits no receipt.
15
+ */
16
+ Acknowledged: {
17
+ reason: Schema.Literals(["AlreadyApplied", "Stale", "Unsubscribed", "NotCreated"]),
18
+ },
19
+ });
20
+ /**
21
+ * A command's outcome, with the commit version its caller's later queries
22
+ * wait for once the turn committed or replayed a receipt, and the database
23
+ * clock read on the turn's session after its transaction ended, which an
24
+ * external caller's expiry recheck uses before the reply. A defect carries
25
+ * neither.
26
+ */
27
+ export const Executed = Schema.Struct({
28
+ outcome: Outcome,
29
+ version: Schema.optionalKey(Schema.String),
30
+ endedAtMs: Schema.optionalKey(Schema.Finite),
31
+ replayed: Schema.optionalKey(Schema.Boolean),
32
+ });
33
+ /** An owner's retryable delivery failure, with whether fenced admission validated the id. */
34
+ export class DeliveryFailed extends Schema.TaggedError()("DeliveryFailed", {
35
+ error: ActorError,
36
+ admitted: Schema.Boolean,
37
+ }) {
38
+ }
39
+ /**
40
+ * What a subscription delivery carries beside its command id: the source-side
41
+ * row it came from, the subscription's epoch, and the source position it
42
+ * applies. Only the relay sets it; the subscriber's cursor row is checked and
43
+ * advanced against it in the delivery's own turn.
44
+ */
45
+ export const SubscriptionEnvelope = Schema.Struct({
46
+ subscription: Schema.NonEmptyString,
47
+ sourceType: Schema.NonEmptyString,
48
+ sourceId: Schema.NonEmptyString,
49
+ epoch: Schema.String,
50
+ kind: Schema.Literals(["event", "gap", "rejected"]),
51
+ /** An event's cursor, a gap's `resumeAfter`, or a rejected subscription's cursor. */
52
+ position: Schema.String,
53
+ });
54
+ /**
55
+ * One command or query addressed to an actor, with its encoded payload.
56
+ * `commandId` is the operation's identity: a retry with the same id replays
57
+ * the receipt instead of running again.
58
+ */
59
+ export const Request = Schema.Struct({
60
+ ref: ActorRef,
61
+ caller: Caller,
62
+ command: Schema.NonEmptyString,
63
+ commandId: Schema.String,
64
+ payload: Schema.String,
65
+ /**
66
+ * Set only by the runtime on external admission. On its first delivery such
67
+ * a turn checks the id against its fenced read's database clock before it
68
+ * releases a receipt or runs the handler. Any turn of it rejects an expired
69
+ * id that has no receipt once retention may have pruned one, so pruning a
70
+ * receipt while its retry waits for the turn cannot run the command again.
71
+ */
72
+ external: Schema.optionalKey(Schema.Boolean),
73
+ /** Runtime-only framework-clock offset carried across a test/runner hop. */
74
+ clockOffset: Schema.optionalKey(Schema.Finite),
75
+ /**
76
+ * Set by the runtime only once an owner reported that an earlier attempt
77
+ * passed fenced admission. That attempt was admitted within the id's
78
+ * window, so expiry alone does not reject it before receipt resolution or
79
+ * the retention safety check. Invalid and future identities still fail.
80
+ */
81
+ redelivered: Schema.optionalKey(Schema.Boolean),
82
+ /**
83
+ * The sender of the committed outbox row the relay claimed. The rest of
84
+ * that row's delivery is this request's target, caller, command id,
85
+ * command, and payload. Only the relay supplies this provenance, and
86
+ * external admission rejects it rather than trusting a presented proof.
87
+ */
88
+ intent: Schema.optionalKey(ActorRef),
89
+ delivery: Schema.optionalKey(SubscriptionEnvelope),
90
+ /**
91
+ * When the admitting runner sent the command to its owner, by that
92
+ * runner's clock; the owner reports the wait as mailbox age. Not part of
93
+ * the command's identity.
94
+ */
95
+ queuedAtMs: Schema.optionalKey(Schema.Finite),
96
+ /**
97
+ * Names one read attempt for the host's usage accounting; a watch reuses it
98
+ * for every rerun. A host that supplies it must have bound it to an
99
+ * authenticated assertion. Not part of the request's identity.
100
+ */
101
+ usageToken: Schema.optionalKey(Schema.NonEmptyString),
102
+ });
@@ -0,0 +1,8 @@
1
+ import { Duration } from "effect";
2
+ import type { ActorError } from "../errors/actor.ts";
3
+ /**
4
+ * The wait before retry `attempt` (0 for the first) of a delivery that failed
5
+ * with the given error: its own `retryAfter`, doubling on each attempt, capped at the
6
+ * greater of 500 ms and that first wait.
7
+ */
8
+ export declare const retryDelay: (attempt: number) => (error: ActorError) => Duration.Duration;
@@ -0,0 +1,11 @@
1
+ import { Duration, Option } from "effect";
2
+ const CAP_MS = 500;
3
+ /**
4
+ * The wait before retry `attempt` (0 for the first) of a delivery that failed
5
+ * with the given error: its own `retryAfter`, doubling on each attempt, capped at the
6
+ * greater of 500 ms and that first wait.
7
+ */
8
+ export const retryDelay = (attempt) => (error) => {
9
+ const first = Option.getOrElse(error.retryAfter, () => 10);
10
+ return Duration.millis(Math.min(first * 2 ** attempt, Math.max(first, CAP_MS)));
11
+ };
@@ -0,0 +1,93 @@
1
+ import { Context, Duration, Effect, Layer } from "effect";
2
+ import { MessageStorage, RunnerHealth, Runners, RunnerStorage, Sharding, ShardingConfig } from "effect/cluster";
3
+ import { RpcSerialization } from "effect/rpc";
4
+ import { SocketServer } from "effect/socket";
5
+ import { SqlClient } from "effect/sql";
6
+ import { identity } from "./peering/credentials.ts";
7
+ import { mtls } from "./peering/transport.ts";
8
+ import { MailboxRefusals } from "./topology/admission.ts";
9
+ /**
10
+ * Whether a command to an entity on this runner is encoded and decoded the
11
+ * way a remote delivery is. Off by default: a local hop hands the owner the
12
+ * request the runtime built and validated, and only a remote hop needs the
13
+ * bytes. Test runtimes turn it on so every delivery still checks the request
14
+ * schema.
15
+ */
16
+ export declare const LocalRequestSerialization: Context.Reference<boolean>;
17
+ declare const RunnerWiring_base: Context.ServiceClass<RunnerWiring, "@rikalabs/akter/runtime/runner/RunnerWiring", {
18
+ readonly config: Partial<ShardingConfig.ShardingConfig["Service"]>;
19
+ readonly sharding: Layer.Layer<Sharding.Sharding, never, ShardingConfig.ShardingConfig | MessageStorage.MessageStorage | RunnerStorage.RunnerStorage | RunnerHealth.RunnerHealth | MailboxRefusals>;
20
+ readonly storage: (storage: RunnerStorage.RunnerStorage["Service"]) => RunnerStorage.RunnerStorage["Service"];
21
+ readonly production?: boolean;
22
+ }>;
23
+ /** Package-internal wiring shared by production runners and fault-injecting test runners. */
24
+ export declare class RunnerWiring extends RunnerWiring_base {
25
+ }
26
+ declare const RunnerReadiness_base: Context.ServiceClass<RunnerReadiness, "@rikalabs/akter/runtime/runner/RunnerReadiness", {
27
+ readonly acquired: (sharding: Pick<Sharding.Sharding["Service"], "hasShardId">) => Effect.Effect<boolean>;
28
+ }>;
29
+ /** The public runner's readiness checks acquired shards, not just a reachable database. */
30
+ export declare class RunnerReadiness extends RunnerReadiness_base {
31
+ }
32
+ /** Builds assignment expectations independently of the runner's local acquisition state. */
33
+ export declare const acquiredShards: Effect.Effect<{
34
+ readonly acquired: (sharding: Pick<Sharding.Sharding["Service"], "hasShardId">) => Effect.Effect<boolean>;
35
+ }, never, RunnerStorage.RunnerStorage | ShardingConfig.ShardingConfig>;
36
+ /** Production TCP runner configuration. All runners use the same shard count and lock expiration. */
37
+ export interface SocketRunnerOptions<E> {
38
+ /** A unique, stable address reachable directly by every other runner; never a load-balancer address. */
39
+ readonly address: {
40
+ readonly host: string;
41
+ readonly port: number;
42
+ };
43
+ /** Bind address, defaulting to the advertised address. Use a private interface or an isolated network. */
44
+ readonly listenAddress?: {
45
+ readonly host: string;
46
+ readonly port: number;
47
+ };
48
+ /**
49
+ * Runner-to-runner TCP. `Runner.mtls` authenticates and encrypts it; the
50
+ * platform's plaintext layers, such as BunClusterSocket's layerSocketServer
51
+ * and layerClientProtocol, are for an isolated private network only.
52
+ */
53
+ readonly transport: Layer.Layer<SocketServer.SocketServer | Runners.RpcClientProtocol, E, ShardingConfig.ShardingConfig | RpcSerialization.RpcSerialization>;
54
+ /** Default 256; changing this requires stopping every runner. */
55
+ readonly shardsPerGroup?: number;
56
+ /** Default 35 seconds; finite and at least 3 seconds. Not an end-to-end recovery deadline. */
57
+ readonly shardLockExpiration?: Duration.Input;
58
+ /** Default 10 seconds, capped by Cluster at a third of the expiration. */
59
+ readonly shardLockRefreshInterval?: Duration.Input;
60
+ /** Default 1 second. */
61
+ readonly refreshAssignmentsInterval?: Duration.Input;
62
+ /** Default 15 seconds, bounding activation shutdown during a shard handoff. */
63
+ readonly entityTerminationTimeout?: Duration.Input;
64
+ }
65
+ /**
66
+ * Joins separate processes over TCP sockets. Provide this layer to
67
+ * `Actors.layer`; the framework keeps direct commands, SQL ownership, receipts,
68
+ * and outbox recovery, rather than enabling Cluster's persisted message store.
69
+ * A peer can deliver any runner message, so use `Runner.mtls` as the
70
+ * transport unless the network is isolated to this deployment's runners. The
71
+ * transport's own services stay in the runtime, so readiness sees whether a
72
+ * mutual TLS transport can still peer.
73
+ */
74
+ export declare const socket: <E>(options: SocketRunnerOptions<E>) => Layer.Layer<RunnerWiring, never, never>;
75
+ /**
76
+ * Runner-to-runner transport and ownership configuration, provided to
77
+ * `Actors.layer`: `socket` wires a runner, `mtls` is its authenticated
78
+ * transport, and `identity` is the URI subject alternative name a
79
+ * deployment's runner certificates carry.
80
+ */
81
+ export declare const Runner: {
82
+ socket: typeof socket;
83
+ mtls: typeof mtls;
84
+ identity: typeof identity;
85
+ };
86
+ /** Refuses a routing layout mismatch before any runner registers or takes shards. */
87
+ export declare const checkRunnerConfiguration: (wiring: {
88
+ readonly config: Partial<ShardingConfig.ShardingConfig["Service"]>;
89
+ readonly sharding: Layer.Layer<Sharding.Sharding, never, ShardingConfig.ShardingConfig | MessageStorage.MessageStorage | RunnerStorage.RunnerStorage | RunnerHealth.RunnerHealth | MailboxRefusals>;
90
+ readonly storage: (storage: RunnerStorage.RunnerStorage["Service"]) => RunnerStorage.RunnerStorage["Service"];
91
+ readonly production?: boolean;
92
+ } | undefined) => Effect.Effect<undefined, import("effect/sql/SqlError").SqlError, SqlClient.SqlClient>;
93
+ export {};