@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,47 @@
1
+ import { Context, Effect } from "effect";
2
+ import { type EventEntry } from "../contexts/command.ts";
3
+ import { type EventClass } from "../members/event.ts";
4
+ import type { AnyStream } from "../members/stream.ts";
5
+ import type { InternalActors } from "../runtime/actors.ts";
6
+ import type { EventReader, RegisteredQuery, RegisteredStream } from "../runtime/members.ts";
7
+ import type { Handler, StreamHandler } from "./codecs.ts";
8
+ import type { Descriptor } from "./descriptor.ts";
9
+ /**
10
+ * `read.events` over `readEvents`: an undeclared event class or a `limit`
11
+ * outside 1..10,000 is a defect of the handler. `label` names the capability
12
+ * in that defect.
13
+ */
14
+ export declare const eventsWith: ({ descriptor, readEvents, label, }: {
15
+ readonly descriptor: Descriptor;
16
+ readonly readEvents: EventReader;
17
+ readonly label?: string;
18
+ }) => (event: EventClass, options?: {
19
+ readonly after?: string | undefined;
20
+ readonly limit?: number | undefined;
21
+ }) => Effect.Effect<EventEntry<unknown>[], import("../index.ts").RetentionGap | import("../index.ts").UnknownCursor, never>;
22
+ /**
23
+ * Registers every query's handler. A query runs with its own `InsideTurn`
24
+ * marker, so a command or query call from it is a defect instead of a write,
25
+ * and its capabilities die once it returns or from another fiber. A watched
26
+ * run records what it reads; a `watch: true` handler gets no layer services.
27
+ */
28
+ export declare const queriesOf: ({ descriptor, Read, handlers, services, actors, }: {
29
+ readonly descriptor: Descriptor;
30
+ readonly Read: Context.Key<object, object>;
31
+ readonly handlers: Readonly<Record<string, Handler>>;
32
+ readonly services: Context.Context<never>;
33
+ readonly actors: InternalActors["Service"];
34
+ }) => Effect.Effect<ReadonlyMap<string, RegisteredQuery>, never, never>;
35
+ /**
36
+ * A stream member's live feed for one subscriber. It runs on the activation
37
+ * with its own `InsideTurn` marker and `InStream`, and its capabilities die
38
+ * once the stream ends. `read.progress` reaches only jobs its member lists.
39
+ */
40
+ export declare const streamOf: ({ descriptor, Read, member, handle, services, actors, }: {
41
+ readonly descriptor: Descriptor;
42
+ readonly Read: Context.Key<object, object>;
43
+ readonly member: AnyStream;
44
+ readonly handle: StreamHandler;
45
+ readonly services: Context.Context<never>;
46
+ readonly actors: InternalActors["Service"];
47
+ }) => RegisteredStream;
@@ -0,0 +1,224 @@
1
+ import { Context, DateTime, Effect, Fiber, Schema, Stream } from "effect";
2
+ import { InsideTurn, InStream, } from "../contexts/command.js";
3
+ import { CurrentCaller, principal, Tenant } from "../identity/caller.js";
4
+ import { DEFAULT_REPLAY_LIMIT, MAX_REPLAY_LIMIT } from "../members/event.js";
5
+ import { Outcome } from "../runtime/request.js";
6
+ import { ownership } from "../tables/owned.js";
7
+ /** A committed event decoded at the class's current version, with its cursor and command. */
8
+ const entryOf = (descriptor, event, stored) => Effect.map(descriptor.eventCodecs
9
+ .get(event.identifier)
10
+ .decode(stored.value, stored.version)
11
+ .pipe(Effect.orDie), (decoded) => ({
12
+ cursor: stored.cursor,
13
+ event: decoded,
14
+ commandId: stored.commandId,
15
+ timestamp: DateTime.makeUnsafe(stored.timestampMs),
16
+ }));
17
+ /**
18
+ * `read.events` over `readEvents`: an undeclared event class or a `limit`
19
+ * outside 1..10,000 is a defect of the handler. `label` names the capability
20
+ * in that defect.
21
+ */
22
+ export const eventsWith = ({ descriptor, readEvents, label = "read.events", }) => (event, options) => Effect.gen(function* () {
23
+ if (descriptor.events.get(event.identifier) !== event)
24
+ return yield* Effect.die(new Error(`Undeclared event: ${event.identifier}`));
25
+ const limit = options?.limit ?? DEFAULT_REPLAY_LIMIT;
26
+ if (!Number.isInteger(limit) || limit < 1 || limit > MAX_REPLAY_LIMIT)
27
+ return yield* Effect.die(new Error(`${label} limit must be an integer from 1 to ${MAX_REPLAY_LIMIT}`));
28
+ return yield* Effect.forEach(yield* readEvents(event.identifier, options?.after, limit), (stored) => entryOf(descriptor, event, stored));
29
+ });
30
+ const recordingRead = (context, reads) => ({
31
+ get id() {
32
+ reads.caller = true;
33
+ return context.id;
34
+ },
35
+ get ref() {
36
+ reads.caller = true;
37
+ return context.ref;
38
+ },
39
+ get caller() {
40
+ reads.caller = true;
41
+ return context.caller;
42
+ },
43
+ get principal() {
44
+ reads.caller = true;
45
+ return context.principal;
46
+ },
47
+ get state() {
48
+ reads.state = true;
49
+ return context.state;
50
+ },
51
+ cursor: context.cursor,
52
+ events: (event, options) => {
53
+ reads.events.add(event.identifier);
54
+ return context.events(event, options);
55
+ },
56
+ rows: (table) => {
57
+ reads.tables.add(ownership(table)?.name ?? "");
58
+ return context.rows(table);
59
+ },
60
+ get group() {
61
+ reads.group = true;
62
+ return context.group;
63
+ },
64
+ blob: (declared) => {
65
+ reads.blobs.add(declared.name);
66
+ return context.blob(declared);
67
+ },
68
+ follow: context.follow,
69
+ progress: context.progress,
70
+ });
71
+ /**
72
+ * Registers every query's handler. A query runs with its own `InsideTurn`
73
+ * marker, so a command or query call from it is a defect instead of a write,
74
+ * and its capabilities die once it returns or from another fiber. A watched
75
+ * run records what it reads; a `watch: true` handler gets no layer services.
76
+ */
77
+ export const queriesOf = ({ descriptor, Read, handlers, services, actors, }) => Effect.gen(function* () {
78
+ const registered = new Map();
79
+ for (const member of descriptor.queries) {
80
+ const handle = handlers[member.tag];
81
+ if (handle === undefined)
82
+ return yield* Effect.die(new Error(`Missing query handler ${member.tag}`));
83
+ const { decodePayload, encodeSuccess, isError, encodeError } = descriptor.codecs.get(member.tag);
84
+ const watch = descriptor.watches.has(member.tag);
85
+ registered.set(member.tag, {
86
+ watch,
87
+ run: Effect.fnUntraced(function* (request, rows, cursor, readEvents, reads) {
88
+ const { state } = yield* descriptor.state.decodeStored(rows);
89
+ let open = true;
90
+ const query = Symbol();
91
+ const owner = Fiber.getCurrent();
92
+ const escaped = (capability) => Effect.gen(function* () {
93
+ if (!open || (yield* InsideTurn) !== query)
94
+ return yield* Effect.die(new Error(`${capability} capability escaped its query`));
95
+ if (Fiber.getCurrent() !== owner)
96
+ return yield* Effect.die(new Error(`${capability} capability used from a fiber other than its query's; timeout, race, and concurrent combinators run on other fibers`));
97
+ });
98
+ const access = yield* actors.tables({
99
+ ref: request.ref,
100
+ placement: descriptor.placement,
101
+ tables: descriptor.tables,
102
+ guard: escaped("Table"),
103
+ }, false);
104
+ const blob = yield* actors.blobs({
105
+ ref: request.ref,
106
+ placement: descriptor.placement,
107
+ blobs: descriptor.blobs,
108
+ guard: escaped("Blob"),
109
+ maxBytes: descriptor.policy.blobMaxBytes,
110
+ maxEntries: descriptor.policy.blobMaxEntries,
111
+ timeoutMs: descriptor.policy.executionMs,
112
+ }, false);
113
+ const context = {
114
+ id: request.ref.id,
115
+ ref: request.ref,
116
+ caller: request.caller,
117
+ principal: principal(request.caller),
118
+ state: Object.freeze(state),
119
+ cursor,
120
+ events: eventsWith({ descriptor, readEvents }),
121
+ rows: access.rows,
122
+ group: access.group,
123
+ blob: blob,
124
+ follow: () => Stream.die(new Error("read.follow is only available in stream handlers")),
125
+ progress: () => Stream.die(new Error("Progress is only available in stream handlers")),
126
+ };
127
+ return yield* Effect.gen(function* () {
128
+ const input = yield* decodePayload(request.payload).pipe(Effect.orDie);
129
+ const output = yield* handle(input.value);
130
+ const value = yield* encodeSuccess({ value: output }).pipe(Effect.orDie);
131
+ return Outcome.cases.Success.make({ value });
132
+ }).pipe(Effect.catch(Effect.fnUntraced(function* (error) {
133
+ if (!isError(error))
134
+ return yield* Effect.die(error);
135
+ const value = yield* encodeError(error).pipe(Effect.orDie);
136
+ return Outcome.cases.Failure.make({ value });
137
+ })), Effect.catchDefect((cause) => Effect.succeed(Outcome.cases.Defect.make({ cause }))), Effect.ensuring(Effect.sync(() => {
138
+ open = false;
139
+ })), Effect.provideService(Read, reads === undefined ? context : recordingRead(context, reads)), Effect.provideContext(watch ? Context.empty() : services), Effect.provideService(InsideTurn, query));
140
+ }),
141
+ });
142
+ }
143
+ return registered;
144
+ });
145
+ /**
146
+ * A stream member's live feed for one subscriber. It runs on the activation
147
+ * with its own `InsideTurn` marker and `InStream`, and its capabilities die
148
+ * once the stream ends. `read.progress` reaches only jobs its member lists.
149
+ */
150
+ export const streamOf = ({ descriptor, Read, member, handle, services, actors, }) => {
151
+ const { decodePayload, encodeSuccess, isError, encodeError } = descriptor.codecs.get(member.tag);
152
+ const progressCodecs = new Map((member.progress?.jobs ?? []).map((job) => [
153
+ job.tag,
154
+ {
155
+ job: Schema.decodeEffect(Schema.fromJsonString(Schema.toCodecJson(job))),
156
+ frame: Schema.decodeEffect(Schema.fromJsonString(Schema.toCodecJson(job.progress))),
157
+ },
158
+ ]));
159
+ return {
160
+ progress: new Set(progressCodecs.keys()),
161
+ run: (payload, input) => Stream.unwrap(Effect.gen(function* () {
162
+ const { state } = yield* descriptor.state.decodeStored(input.state);
163
+ let open = true;
164
+ const stream = Symbol();
165
+ const guard = (capability) => open
166
+ ? Effect.void
167
+ : Effect.die(new Error(`${capability} capability escaped its stream`));
168
+ const access = yield* actors.tables({
169
+ ref: input.ref,
170
+ placement: descriptor.placement,
171
+ tables: descriptor.tables,
172
+ guard: guard("Table"),
173
+ }, false);
174
+ const blob = yield* actors.blobs({
175
+ ref: input.ref,
176
+ placement: descriptor.placement,
177
+ blobs: descriptor.blobs,
178
+ guard: guard("Blob"),
179
+ maxBytes: descriptor.policy.blobMaxBytes,
180
+ maxEntries: descriptor.policy.blobMaxEntries,
181
+ timeoutMs: descriptor.policy.executionMs,
182
+ }, false);
183
+ const context = {
184
+ id: input.ref.id,
185
+ ref: input.ref,
186
+ caller: input.caller,
187
+ principal: principal(input.caller),
188
+ state: Object.freeze(state),
189
+ cursor: input.cursor,
190
+ events: eventsWith({
191
+ descriptor,
192
+ readEvents: input.events,
193
+ }),
194
+ rows: access.rows,
195
+ group: access.group,
196
+ blob: blob,
197
+ follow: ((event, options) => descriptor.events.get(event.identifier) !== event
198
+ ? Stream.die(new Error(`Undeclared event: ${event.identifier}`))
199
+ : input
200
+ .follow(event.identifier, options?.after)
201
+ .pipe(Stream.mapEffect((stored) => entryOf(descriptor, event, stored)))),
202
+ progress: ((job, options) => {
203
+ const codecs = progressCodecs.get(job.tag);
204
+ if (codecs === undefined || member.progress?.jobs.includes(job) !== true)
205
+ return Stream.die(new Error(`Stream ${member.tag} does not list progress of ${job.tag}`));
206
+ return input.progress(job.tag, options?.jobId).pipe(Stream.mapEffect((stored) => Effect.gen(function* () {
207
+ const entry = {
208
+ jobId: stored.jobId,
209
+ job: (yield* codecs.job(stored.job)),
210
+ attempt: stored.attempt,
211
+ seq: stored.seq,
212
+ frame: (yield* codecs.frame(stored.frame)),
213
+ };
214
+ return entry;
215
+ }).pipe(Effect.orDie)));
216
+ }),
217
+ };
218
+ const { value } = yield* decodePayload(payload).pipe(Effect.orDie);
219
+ return handle(value).pipe(Stream.mapEffect((output) => encodeSuccess({ value: output }).pipe(Effect.orDie)), Stream.catch((error) => isError(error)
220
+ ? Stream.fromEffect(Effect.flatMap(encodeError(error).pipe(Effect.orDie), (failure) => Effect.fail({ failure })))
221
+ : Stream.die(error)), Stream.ensuring(Effect.sync(() => (open = false))), Stream.provideService(Read, context), Stream.provideService(InStream, { stream }), Stream.provideContext(services), Stream.provideService(CurrentCaller, input.caller), Stream.provideService(Tenant, input.ref.tenant), Stream.provideService(InsideTurn, stream));
222
+ })),
223
+ };
224
+ };
@@ -0,0 +1,120 @@
1
+ import { Effect, type Result, Schema } from "effect";
2
+ import { type DeclaredError, type MemberKind, type ValueSchema } from "../members/command.ts";
3
+ import type { ProgressJob } from "../members/job.ts";
4
+ /** A public member as a served endpoint sees it: wire schemas and the runtime's payload codec. */
5
+ export interface ServedMember {
6
+ readonly kind: MemberKind;
7
+ readonly tag: string;
8
+ readonly input: ValueSchema;
9
+ readonly output: ValueSchema;
10
+ readonly errors: ReadonlyArray<DeclaredError>;
11
+ /** Decodes a JSON request body (`undefined` when empty) into the runtime payload. */
12
+ readonly payload: (body: Schema.Json | undefined) => Effect.Effect<string, Schema.SchemaError>;
13
+ /** Status per declared error, in declaration order. */
14
+ readonly failureStatus: (value: string) => Effect.Effect<number, Schema.SchemaError>;
15
+ /** A reducer's pure transition, which a client applies before its receipt arrives. */
16
+ readonly reducer: OptimisticReducer | undefined;
17
+ /** True for a query declared `watch: true`, which is also served as a watch. */
18
+ readonly watch: boolean;
19
+ }
20
+ /** An actor's decoded state. */
21
+ export type StateValue = Schema.Struct.Type<Schema.Struct.Fields>;
22
+ /** What a client needs to run a reducer on its own copy of committed state. */
23
+ export interface OptimisticReducer {
24
+ /** The actor's state schema. */
25
+ readonly state: ValueSchema & {
26
+ readonly Type: StateValue;
27
+ };
28
+ readonly reduce: (state: StateValue, input: ValueSchema["Type"]) => Result.Result<StateValue, unknown>;
29
+ /**
30
+ * True for a batched reducer, which replies nothing, so its receipt carries
31
+ * no committed state. The field keeps its served name for the client.
32
+ */
33
+ readonly commutative: boolean;
34
+ }
35
+ /** A connection member as a served WebSocket route sees it. */
36
+ export interface ServedConnection {
37
+ readonly tag: string;
38
+ readonly params: ValueSchema;
39
+ readonly server: ValueSchema;
40
+ readonly client: ValueSchema;
41
+ readonly errors: ReadonlyArray<DeclaredError>;
42
+ /** False when frames carry no cursors, so clients always resync from state. */
43
+ readonly stampCursor: boolean;
44
+ /** Decodes a `hello` frame's `params` (`undefined` when absent) into the runtime's encoding. */
45
+ readonly openParams: (json: Schema.Json | undefined) => Effect.Effect<string, Schema.SchemaError>;
46
+ /** Decodes a client member frame into the runtime's encoding. */
47
+ readonly clientFrame: (json: Schema.Json) => Effect.Effect<string, Schema.SchemaError>;
48
+ /** A runtime-encoded server frame as the JSON value a client reads. */
49
+ readonly serverFrame: (encoded: string) => Effect.Effect<Schema.Json, Schema.SchemaError>;
50
+ /** A declared `open` failure, as the runtime stores it, as the JSON a client reads. */
51
+ readonly openFailure: (encoded: string) => Effect.Effect<Schema.Json, Schema.SchemaError>;
52
+ /** The progress schema of each job whose executor progress this member receives, by tag. */
53
+ readonly progress: ReadonlyMap<string, ValueSchema>;
54
+ }
55
+ /** What `Actor.serve` and `X.client` need of one actor definition. */
56
+ export interface ServedDefinition {
57
+ /** The actor type's name, its path segment in served routes. */
58
+ readonly name: string;
59
+ /** How a client addresses instances: by id, as the singleton, or by an id it mints. */
60
+ readonly key: "keyed" | "singleton" | "minted";
61
+ /** Decodes an id path segment into the runtime's id; fails when it breaks the key schema. */
62
+ readonly decodeId: (id: string) => Effect.Effect<string, Schema.SchemaError>;
63
+ /** The path segment a client sends for a typed id. */
64
+ readonly encodeId: (id: string) => Effect.Effect<string, Schema.SchemaError>;
65
+ /** `api` members only; `internal` commands are never served. */
66
+ readonly members: ReadonlyArray<ServedMember>;
67
+ /** Connection members, served as WebSocket upgrades. */
68
+ readonly connections: ReadonlyArray<ServedConnection>;
69
+ /** Tags of the events served as SSE event feeds. */
70
+ readonly feeds: ReadonlyArray<string>;
71
+ /** Names of the declared content blobs, served for download and grants. */
72
+ readonly contents: ReadonlyArray<string>;
73
+ /** `Actor.stream` members, served over SSE; each element is one encoded `success` value. */
74
+ readonly streams: ReadonlyArray<ServedMember>;
75
+ }
76
+ /** The HTTP status a served response uses for `error`: its `httpApiStatus`, or 422. */
77
+ export declare const declaredStatus: (error: DeclaredError) => number;
78
+ /** Rejects declared errors a served response could not tell apart from a framework one. */
79
+ export declare const checkDeclaredErrors: (member: {
80
+ readonly tag: string;
81
+ readonly error: DeclaredError;
82
+ }) => void;
83
+ /** A member and the codecs `servedMember` builds its served view from. */
84
+ interface ServedMemberSource {
85
+ readonly member: {
86
+ readonly kind: MemberKind;
87
+ readonly tag: string;
88
+ readonly payload: ValueSchema;
89
+ readonly success: ValueSchema;
90
+ readonly error: DeclaredError;
91
+ readonly state?: {
92
+ readonly fields: Readonly<Record<string, ValueSchema>>;
93
+ };
94
+ /** Method syntax keeps the parameters bivariant, so every reducer's `reduce` fits. */
95
+ reduce?(state: StateValue, payload: ValueSchema["Type"]): Result.Result<StateValue, unknown>;
96
+ readonly batch?: object | undefined;
97
+ readonly watch?: boolean;
98
+ };
99
+ readonly codecs: {
100
+ readonly encodePayload: (value: {
101
+ readonly value: unknown;
102
+ }) => Effect.Effect<string, Schema.SchemaError>;
103
+ readonly decodeError: (value: string) => Effect.Effect<DeclaredError["Type"], Schema.SchemaError>;
104
+ };
105
+ }
106
+ /** A public member's served view: its wire schemas, body decoder, and failure statuses. */
107
+ export declare const servedMember: ({ member, codecs }: ServedMemberSource) => ServedMember;
108
+ /** A connection member's served view: its WebSocket frame codecs and progress schemas. */
109
+ export declare const servedConnection: (member: {
110
+ readonly tag: string;
111
+ readonly payload: ValueSchema;
112
+ readonly server: ValueSchema;
113
+ readonly client: ValueSchema;
114
+ readonly error: DeclaredError;
115
+ readonly stampCursor: boolean;
116
+ readonly progress: {
117
+ readonly jobs: ReadonlyArray<ProgressJob>;
118
+ } | undefined;
119
+ }) => ServedConnection;
120
+ export {};
@@ -0,0 +1,72 @@
1
+ import { Effect, Schema, SchemaAST } from "effect";
2
+ import { declaredErrors, } from "../members/command.js";
3
+ /** Statuses the served protocol assigns to framework outcomes; a declared failure can't claim one. */
4
+ const RESERVED_STATUSES = new Set([
5
+ 400, 401, 403, 404, 409, 410, 413, 415, 429,
6
+ ]);
7
+ /** Error tags the served protocol uses for framework outcomes; a declared error can't claim one. */
8
+ const RESERVED_TAGS = new Set(["ActorError", "Defect"]);
9
+ /** The HTTP status of a declared failure whose error sets no `httpApiStatus`. */
10
+ const DECLARED_FAILURE_STATUS = 422;
11
+ /** The HTTP status a served response uses for `error`: its `httpApiStatus`, or 422. */
12
+ export const declaredStatus = (error) => SchemaAST.resolveAt("httpApiStatus")(error.ast) ?? DECLARED_FAILURE_STATUS;
13
+ /** Rejects declared errors a served response could not tell apart from a framework one. */
14
+ export const checkDeclaredErrors = (member) => {
15
+ for (const error of declaredErrors(member.error)) {
16
+ const tag = SchemaAST.resolveIdentifier(error.ast);
17
+ if (tag !== undefined && RESERVED_TAGS.has(tag))
18
+ throw new Error(`${member.tag} declares an error tagged ${tag}, which is reserved`);
19
+ const status = declaredStatus(error);
20
+ if (!Number.isInteger(status) || status < 400 || status > 499 || RESERVED_STATUSES.has(status))
21
+ throw new Error(`${member.tag} declares httpApiStatus ${status}; use an unreserved 4xx`);
22
+ }
23
+ };
24
+ /** A public member's served view: its wire schemas, body decoder, and failure statuses. */
25
+ export const servedMember = ({ member, codecs }) => {
26
+ const decodeBody = Schema.decodeUnknownEffect(Schema.toCodecJson(member.payload));
27
+ const errors = declaredErrors(member.error);
28
+ const statuses = errors.map((error) => [Schema.is(error), declaredStatus(error)]);
29
+ return {
30
+ kind: member.kind,
31
+ tag: member.tag,
32
+ input: member.payload,
33
+ output: member.success,
34
+ errors,
35
+ payload: (body) => decodeBody(body ?? null).pipe(Effect.flatMap((value) => codecs.encodePayload({ value }))),
36
+ failureStatus: (value) => codecs
37
+ .decodeError(value)
38
+ .pipe(Effect.map((error) => statuses.find(([is]) => is(error))?.[1] ?? DECLARED_FAILURE_STATUS)),
39
+ reducer: member.kind === "reducer" && member.state !== undefined && member.reduce !== undefined
40
+ ? {
41
+ state: Schema.Struct(member.state.fields),
42
+ reduce: member.reduce.bind(member),
43
+ commutative: member.batch !== undefined,
44
+ }
45
+ : undefined,
46
+ watch: member.kind === "query" && member.watch === true,
47
+ };
48
+ };
49
+ const ValueJson = Schema.fromJsonString(Schema.Struct({ value: Schema.optionalKey(Schema.Json) }));
50
+ const decodeValueJson = Schema.decodeUnknownEffect(ValueJson);
51
+ const decodeJsonString = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Json));
52
+ /** A connection member's served view: its WebSocket frame codecs and progress schemas. */
53
+ export const servedConnection = (member) => {
54
+ const valueOf = (schema) => Schema.encodeEffect(Schema.fromJsonString(Schema.toCodecJson(Schema.Struct({ value: schema }))));
55
+ const decodeParams = Schema.decodeUnknownEffect(Schema.toCodecJson(member.payload));
56
+ const encodeParams = valueOf(member.payload);
57
+ const decodeClient = Schema.decodeUnknownEffect(Schema.toCodecJson(member.client));
58
+ const encodeClient = valueOf(member.client);
59
+ return {
60
+ tag: member.tag,
61
+ params: member.payload,
62
+ server: member.server,
63
+ client: member.client,
64
+ errors: declaredErrors(member.error),
65
+ stampCursor: member.stampCursor,
66
+ openParams: (json) => decodeParams(json ?? null).pipe(Effect.flatMap((value) => encodeParams({ value }))),
67
+ clientFrame: (json) => decodeClient(json).pipe(Effect.flatMap((value) => encodeClient({ value }))),
68
+ serverFrame: (encoded) => decodeValueJson(encoded).pipe(Effect.map(({ value }) => value ?? null)),
69
+ openFailure: decodeJsonString,
70
+ progress: new Map((member.progress?.jobs ?? []).map((job) => [job.tag, job.progress])),
71
+ };
72
+ };
@@ -0,0 +1,13 @@
1
+ import { Context, Effect } from "effect";
2
+ import type { InternalActors } from "../runtime/actors.ts";
3
+ import type { RegisteredCommand } from "../runtime/members.ts";
4
+ import type { Handler } from "./codecs.ts";
5
+ import { type Descriptor } from "./descriptor.ts";
6
+ /** Every command and reducer turn of one activation, keyed by tag. */
7
+ export declare const turnsOf: ({ descriptor, Turn, handlers, services, actors, }: {
8
+ readonly descriptor: Descriptor;
9
+ readonly Turn: Context.Key<object, object>;
10
+ readonly handlers: Readonly<Record<string, Handler>>;
11
+ readonly services: Context.Context<never>;
12
+ readonly actors: InternalActors["Service"];
13
+ }) => Effect.Effect<ReadonlyMap<string, RegisteredCommand>, never, never>;