@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,364 @@
1
+ import { Effect, Layer, Logger, ManagedRuntime, Option } from "effect";
2
+ import { constVoid } from "effect/Function";
3
+ import { Statement } from "effect/sql";
4
+ import { User } from "../index.js";
5
+ import { principal } from "../identity/caller.js";
6
+ import { ContentHooks, TurnHooks, } from "../runtime/turn/hooks.js";
7
+ import { NekiTurnSessions } from "../runtime/database/neki/session.js";
8
+ import { ActorTest } from "./actor-test.js";
9
+ import { accessConformance, accessSuite } from "./conformance/access.js";
10
+ import { admissionConformance, admissionSuite } from "./conformance/admission.js";
11
+ import { adoptionConformance } from "./conformance/adoption.js";
12
+ import { assertionsConformance, assertionsSuite, edgeConformance, } from "./conformance/assertions.js";
13
+ import { batchesConformance, batchesSuite } from "./conformance/batches.js";
14
+ import { blobsConformance, blobsSuite } from "./conformance/blobs.js";
15
+ import { capacityConformance } from "./conformance/capacity.js";
16
+ import { clientConformance, clientSuite } from "./conformance/client.js";
17
+ import { coldServeConformance, coldServeEdgeConformance, coldServeSuite, } from "./conformance/cold-serve.js";
18
+ import { connectionsConformance } from "./conformance/connections.js";
19
+ import { connectionsSuite } from "./conformance/connections/actors.js";
20
+ import { contentConformance, contentSuite } from "./conformance/content-blobs.js";
21
+ import { counterConformance, counterSuite } from "./conformance/counter.js";
22
+ import { cronClusterConformance, cronConformance } from "./conformance/cron.js";
23
+ import { drainConformance, drainSuite } from "./conformance/drain.js";
24
+ import { effectControlClusterConformance, effectControlConformance, effectControlSuite, } from "./conformance/effect-control.js";
25
+ import { effectsConformance, effectsSuite } from "./conformance/effects.js";
26
+ import { eventsConformance, eventsSuite } from "./conformance/events.js";
27
+ import { exportConformance } from "./conformance/export.js";
28
+ import { fleetConformance, fleetSuite } from "./conformance/fleet.js";
29
+ import { heapConformance } from "./conformance/heap.js";
30
+ import { httpConformance, httpSuite } from "./conformance/http.js";
31
+ import { inspectionViewsConformance, inspectionViewsSuite } from "./conformance/inspection-views.js";
32
+ import { inspectorConformance, inspectorSuite } from "./conformance/inspector.js";
33
+ import { mintConformance, mintSuite } from "./conformance/mint.js";
34
+ import { multiRunnerConformance } from "./conformance/multi-runner.js";
35
+ import { observabilityConformance } from "./conformance/observability.js";
36
+ import { offlineConformance, offlineSuite } from "./conformance/offline.js";
37
+ import { operatorConformance } from "./conformance/operator.js";
38
+ import { crossShardOutboxConformance, crossShardSuite } from "./conformance/outbox-cross-shard.js";
39
+ import { outboxConformance, outboxSuite } from "./conformance/outbox.js";
40
+ import { payloadMigrationsConformance } from "./conformance/payload-migrations.js";
41
+ import { pipelineConformance } from "./conformance/pipeline.js";
42
+ import { groupsConformance } from "./conformance/groups.js";
43
+ import { placementConformance, placementSuite } from "./conformance/placement.js";
44
+ import { progressConformance, progressDeliveryConformance, progressSuite, } from "./conformance/progress.js";
45
+ import { propertiesConformance, propertiesSuite } from "./conformance/properties.js";
46
+ import { protocolsConformance, protocolsSuite } from "./conformance/protocols.js";
47
+ import { readYourWritesConformance, readYourWritesSuite } from "./conformance/read-your-writes.js";
48
+ import { reducerConformance, reducerSuite } from "./conformance/reducers.js";
49
+ import { relayClusterConformance, relayConformance, relaySuite } from "./conformance/relay.js";
50
+ import { restoreConformance, restoreSuite } from "./conformance/restore.js";
51
+ import { retentionConformance, retentionSuite } from "./conformance/retention.js";
52
+ import { rlsConformance } from "./conformance/rls.js";
53
+ import { simulationConformance } from "./conformance/simulation.js";
54
+ import { singleShardConformance } from "./conformance/single-shard.js";
55
+ import { singletonConformance } from "./conformance/singleton.js";
56
+ import { streamsConformance, streamsSuite } from "./conformance/streams.js";
57
+ import { subscriptionsConformance } from "./conformance/subscriptions.js";
58
+ import { subscriptionsSuite } from "./conformance/subscriptions/actors.js";
59
+ import { subscriptionsClusterConformance } from "./conformance/subscriptions/cluster.js";
60
+ import { subscriptionsRetentionConformance } from "./conformance/subscriptions/retention.js";
61
+ import { tablesConformance, tablesSuite } from "./conformance/tables.js";
62
+ import { transportsConformance } from "./conformance/transports.js";
63
+ import { transportsSuite } from "./conformance/transports/actors.js";
64
+ import { watchConformance, watchSuite } from "./conformance/watch.js";
65
+ import { workflowVersionsConformance } from "./conformance/workflow-versions.js";
66
+ import { workflowsConformance } from "./conformance/workflows.js";
67
+ import { workflowsSuite } from "./conformance/workflows/actors.js";
68
+ import { foundationConformance, foundationSuite } from "./foundation.js";
69
+ const group = (suite, cases, requires) => ({
70
+ suite,
71
+ cases: requires === undefined ? cases : cases.map((each) => ({ ...each, ...requires })),
72
+ });
73
+ /** Every case of the group opens a fresh database or a snapshot. */
74
+ const freshDatabases = { requiresFreshDatabase: true };
75
+ /** Cases whose own actors, if any, they build into their own runtimes or clusters. */
76
+ const standalone = {};
77
+ /**
78
+ * Every suite in the registry. The single-shard case checks the routing of
79
+ * every statement the framework issues, so it needs every feature's actors
80
+ * registered, as a deployment of all of them would.
81
+ */
82
+ const everySuite = {
83
+ get uses() {
84
+ return [...new Set(allGroups.map((group) => conformanceGroups[group].suite))].filter((suite) => suite !== everySuite);
85
+ },
86
+ };
87
+ /**
88
+ * Every conformance case, grouped by the file that owns it, with the suite
89
+ * that owns its actors. `describeConformance` runs a subset through `groups`,
90
+ * so a group can run in its own Vitest file and worker; `conformance` is
91
+ * their union and the order within a group is kept.
92
+ */
93
+ export const conformanceGroups = {
94
+ foundation: group(foundationSuite, foundationConformance),
95
+ access: group(accessSuite, accessConformance, freshDatabases),
96
+ admission: group(admissionSuite, admissionConformance),
97
+ http: group(httpSuite, httpConformance),
98
+ protocols: group(protocolsSuite, protocolsConformance),
99
+ assertions: group(assertionsSuite, assertionsConformance),
100
+ edge: group(assertionsSuite, edgeConformance),
101
+ coldServeEdge: group(coldServeSuite, coldServeEdgeConformance),
102
+ client: group(clientSuite, clientConformance),
103
+ offline: group(offlineSuite, offlineConformance),
104
+ capacity: group(standalone, capacityConformance, freshDatabases),
105
+ heap: group(standalone, heapConformance, freshDatabases),
106
+ events: group(eventsSuite, eventsConformance),
107
+ reducer: group(reducerSuite, reducerConformance),
108
+ outbox: group(outboxSuite, outboxConformance),
109
+ tables: group(tablesSuite, tablesConformance),
110
+ effects: group(effectsSuite, effectsConformance),
111
+ progress: group(progressSuite, progressConformance),
112
+ multiRunner: group(standalone, multiRunnerConformance, freshDatabases),
113
+ simulation: group(standalone, simulationConformance, freshDatabases),
114
+ drain: group(drainSuite, drainConformance),
115
+ pipeline: group(standalone, pipelineConformance, freshDatabases),
116
+ batches: group(batchesSuite, batchesConformance),
117
+ groups: group(standalone, groupsConformance, freshDatabases),
118
+ relay: group(relaySuite, relayConformance),
119
+ relayCluster: group(relaySuite, relayClusterConformance, freshDatabases),
120
+ effectControl: group(effectControlSuite, effectControlConformance),
121
+ effectControlCluster: group(effectControlSuite, effectControlClusterConformance),
122
+ singleton: group(standalone, singletonConformance, freshDatabases),
123
+ cron: group(standalone, cronConformance, freshDatabases),
124
+ cronCluster: group(standalone, cronClusterConformance, freshDatabases),
125
+ blobs: group(blobsSuite, blobsConformance),
126
+ inspectionViews: group(inspectionViewsSuite, inspectionViewsConformance),
127
+ inspector: group(inspectorSuite, inspectorConformance),
128
+ rls: group(standalone, rlsConformance, freshDatabases),
129
+ retention: group(retentionSuite, retentionConformance),
130
+ restore: group(restoreSuite, restoreConformance, freshDatabases),
131
+ workflows: group(workflowsSuite, workflowsConformance),
132
+ connections: group(connectionsSuite, connectionsConformance),
133
+ streams: group(streamsSuite, streamsConformance),
134
+ progressDelivery: group(progressSuite, progressDeliveryConformance),
135
+ transports: group(transportsSuite, transportsConformance),
136
+ workflowVersions: group(standalone, workflowVersionsConformance, freshDatabases),
137
+ payloadMigrations: group(standalone, payloadMigrationsConformance, freshDatabases),
138
+ subscriptions: group(subscriptionsSuite, subscriptionsConformance),
139
+ subscriptionsRetention: group(subscriptionsSuite, subscriptionsRetentionConformance),
140
+ subscriptionsCluster: group(subscriptionsSuite, subscriptionsClusterConformance, freshDatabases),
141
+ content: group(contentSuite, contentConformance),
142
+ counter: group(counterSuite, counterConformance),
143
+ properties: group(propertiesSuite, propertiesConformance),
144
+ mint: group(mintSuite, mintConformance),
145
+ readYourWrites: group(readYourWritesSuite, readYourWritesConformance),
146
+ observability: group(standalone, observabilityConformance, freshDatabases),
147
+ operator: group(standalone, operatorConformance, freshDatabases),
148
+ export: group(standalone, exportConformance, freshDatabases),
149
+ coldServe: group(coldServeSuite, coldServeConformance),
150
+ placement: group(placementSuite, placementConformance),
151
+ watch: group(watchSuite, watchConformance),
152
+ adoption: group(standalone, adoptionConformance),
153
+ singleShard: group(everySuite, singleShardConformance),
154
+ crossShardOutbox: group(crossShardSuite, crossShardOutboxConformance),
155
+ fleet: group(fleetSuite, fleetConformance),
156
+ };
157
+ const allGroups = Object.keys(conformanceGroups);
158
+ /**
159
+ * The shared durable-turn conformance cases. Cases flagged
160
+ * `requiresIndependentConnections` need real Postgres: a second database
161
+ * connection to read committed state while a turn holds its transaction open
162
+ * or to take a competing row lock, or a database outside the JavaScript heap
163
+ * they measure. They never run on single-connection backends such as PGlite.
164
+ */
165
+ export const conformance = allGroups.flatMap((name) => conformanceGroups[name].cases);
166
+ /** The capabilities `conformanceCase` requires, in a fixed order. */
167
+ export const requirementsOf = (conformanceCase) => [
168
+ ...(conformanceCase.requiresIndependentConnections === true
169
+ ? ["independentConnections"]
170
+ : []),
171
+ ...(conformanceCase.requiresReplica === true ? ["replica"] : []),
172
+ ...(conformanceCase.requiresEdge === true ? ["edge"] : []),
173
+ ...(conformanceCase.requiresNeki === true ? ["neki"] : []),
174
+ ...(conformanceCase.requiresLogicalDecoding === true ? ["logicalDecoding"] : []),
175
+ ...(conformanceCase.requiresFreshDatabase === true ? ["freshDatabase"] : []),
176
+ ];
177
+ /** The capabilities `backend` provides. */
178
+ export const capabilitiesOf = (backend) => new Set([
179
+ ...(backend.independentConnections ? ["independentConnections"] : []),
180
+ ...(backend.hasReplica === true ? ["replica"] : []),
181
+ ...(backend.edge === undefined ? [] : ["edge"]),
182
+ ...(backend.neki === true ? ["neki"] : []),
183
+ ...(backend.logicalDecoding === true ? ["logicalDecoding"] : []),
184
+ ...(backend.freshDatabases ? ["freshDatabase"] : []),
185
+ ]);
186
+ /** `suites` and every suite they use, each once, dependencies first. */
187
+ const withDependencies = (suites) => {
188
+ const ordered = [];
189
+ const visit = (suite) => {
190
+ if (ordered.includes(suite))
191
+ return;
192
+ for (const used of suite.uses ?? [])
193
+ visit(used);
194
+ ordered.push(suite);
195
+ };
196
+ for (const suite of suites)
197
+ visit(suite);
198
+ return ordered;
199
+ };
200
+ /**
201
+ * Registers the named groups' cases, or every group's, against `backend`.
202
+ * Only the selected groups' suites, and the suites they use, build their
203
+ * actors and fixtures. The same case names run on every backend; a case
204
+ * whose requirements the backend lacks is reported through `registrar.skip`.
205
+ *
206
+ * Each case runs under the registrar's abort signal: a timed-out or
207
+ * cancelled case is interrupted, its finalizers run, and the next case waits
208
+ * for them, then restarts a runtime the case left stopped and starts with
209
+ * open test authorization.
210
+ */
211
+ export const describeConformance = (options) => registerConformance({
212
+ ...options,
213
+ selected: (options.groups ?? allGroups).map((group) => conformanceGroups[group]),
214
+ });
215
+ /** How long the next case waits for an interrupted case's finalizers before it starts anyway. */
216
+ const SETTLE_TIMEOUT = "20 seconds";
217
+ /** Registers `selected` groups; `describeConformance` passes registry groups, tests pass their own. */
218
+ export const registerConformance = (options) => {
219
+ const { name, backend, registrar, selected } = options;
220
+ const suites = withDependencies(selected.map(({ suite }) => suite));
221
+ const fixtures = new Map(suites.map((suite) => [suite, suite.fixture?.()]));
222
+ const fixtureOf = (suite) => {
223
+ if (!fixtures.has(suite))
224
+ throw new Error("A conformance case read the fixture of a suite its own suite does not use");
225
+ return fixtures.get(suite);
226
+ };
227
+ const access = { allowed: true, denied: new Set(), revoked: new Set() };
228
+ const turnHooks = suites.flatMap((suite) => suite.turn?.(fixtureOf(suite)) ?? []);
229
+ const contentHooks = suites.flatMap((suite) => suite.content?.(fixtureOf(suite)) ?? []);
230
+ const loggers = suites.flatMap((suite) => suite.logger?.(fixtureOf(suite)) ?? []);
231
+ let live = Layer.empty;
232
+ for (const suite of suites)
233
+ if (suite.layer !== undefined)
234
+ live = Layer.merge(live, suite.layer(fixtureOf(suite)));
235
+ const capabilities = capabilitiesOf(backend);
236
+ let store;
237
+ let current;
238
+ const opened = () => {
239
+ if (store === undefined)
240
+ throw new Error("Conformance environment is not open");
241
+ return store;
242
+ };
243
+ const environment = {
244
+ run: (effect) => {
245
+ if (current === undefined)
246
+ return Promise.reject(new Error("Conformance environment is stopped"));
247
+ return current.runPromise(Effect.scoped(effect));
248
+ },
249
+ build: (overrides) => ManagedRuntime.make(live.pipe(Layer.provideMerge(ActorTest.layer({
250
+ database: overrides?.database ?? opened().database,
251
+ maxConnections: 6,
252
+ admission: overrides?.admission,
253
+ replica: overrides?.replica,
254
+ as: User.make({ subject: "alice" }),
255
+ authorize: (request) => Effect.sync(() => access.allowed &&
256
+ !access.denied.has(request.command) &&
257
+ Option.match(principal(request.caller), {
258
+ onNone: () => true,
259
+ onSome: ({ subject }) => !access.revoked.has(subject),
260
+ })),
261
+ retryWindowMs: overrides?.retryWindowMs ?? 60_000,
262
+ content: overrides?.content,
263
+ }).pipe(Layer.provide(Layer.mergeAll(Layer.succeed(TurnHooks, {
264
+ at: (point, request) => Effect.forEach(turnHooks, (hook) => hook(point, request), { discard: true }),
265
+ }), Layer.succeed(ContentHooks, {
266
+ at: (point) => Effect.forEach(contentHooks, (hook) => hook(point), { discard: true }),
267
+ }), Layer.succeed(NekiTurnSessions, backend.neki === true), overrides?.observe === undefined
268
+ ? Layer.empty
269
+ : Layer.succeed(Statement.CurrentTransformer, (statement) => Effect.sync(() => {
270
+ overrides.observe(statement);
271
+ return statement;
272
+ })))))), Layer.provideMerge(backend.services), Layer.provide(Logger.layer(loggers, { mergeWithExisting: true })), Layer.orDie)),
273
+ stop: Effect.suspend(() => {
274
+ const previous = current;
275
+ current = undefined;
276
+ return previous === undefined ? Effect.void : Effect.promise(() => previous.dispose());
277
+ }),
278
+ restart: Effect.suspend(() => Effect.andThen(environment.stop, () => Effect.promise(() => {
279
+ current = environment.build();
280
+ return current.runPromise(Effect.void);
281
+ }))),
282
+ freshDatabase: Effect.suspend(() => opened().freshDatabase),
283
+ snapshot: Effect.suspend(() => {
284
+ if (current !== undefined)
285
+ return Effect.die(new Error("A snapshot needs the conformance runtime stopped"));
286
+ return opened().copy(opened().database);
287
+ }),
288
+ get connect() {
289
+ return store?.connect;
290
+ },
291
+ get replica() {
292
+ return store?.replica;
293
+ },
294
+ httpServer: backend.httpServer,
295
+ get edge() {
296
+ return backend.edge;
297
+ },
298
+ };
299
+ /** The environment one case sees: its runs end with its signal, and only a declared case opens databases. */
300
+ const environmentFor = (conformanceCase, signal) => {
301
+ const undeclared = Effect.die(new Error(`Conformance case "${conformanceCase.name}" opens a fresh database or snapshot without declaring requiresFreshDatabase`));
302
+ return {
303
+ run: (effect) => {
304
+ if (current === undefined)
305
+ return Promise.reject(new Error("Conformance environment is stopped"));
306
+ return current.runPromise(Effect.scoped(effect), { signal });
307
+ },
308
+ build: environment.build,
309
+ stop: environment.stop,
310
+ restart: environment.restart,
311
+ freshDatabase: conformanceCase.requiresFreshDatabase === true ? environment.freshDatabase : undeclared,
312
+ snapshot: conformanceCase.requiresFreshDatabase === true ? environment.snapshot : undeclared,
313
+ get connect() {
314
+ return environment.connect;
315
+ },
316
+ get replica() {
317
+ return environment.replica;
318
+ },
319
+ httpServer: environment.httpServer,
320
+ get edge() {
321
+ return environment.edge;
322
+ },
323
+ };
324
+ };
325
+ let previousCase = Promise.resolve();
326
+ registrar.describe(name, () => {
327
+ registrar.beforeAll(() => Effect.runPromise(Effect.gen(function* () {
328
+ store = yield* Effect.promise(() => backend.open());
329
+ yield* environment.restart;
330
+ })), 30_000);
331
+ registrar.afterAll(() => previousCase.then(constVoid, constVoid).then(() => Effect.runPromise(Effect.gen(function* () {
332
+ yield* environment.stop;
333
+ if (store !== undefined)
334
+ yield* store.close;
335
+ store = undefined;
336
+ }))));
337
+ for (const { suite, cases } of selected)
338
+ for (const conformanceCase of cases) {
339
+ if (requirementsOf(conformanceCase).some((required) => !capabilities.has(required))) {
340
+ registrar.skip(conformanceCase.name);
341
+ continue;
342
+ }
343
+ registrar.it(conformanceCase.name, ({ signal }) => {
344
+ const settled = Effect.runPromise(Effect.promise(() => previousCase.then(constVoid, constVoid)).pipe(Effect.timeoutOption(SETTLE_TIMEOUT)));
345
+ const running = settled
346
+ .then(() => {
347
+ access.allowed = true;
348
+ access.denied.clear();
349
+ access.revoked.clear();
350
+ return Effect.runPromise(Effect.suspend(() => (current === undefined ? environment.restart : Effect.void)));
351
+ })
352
+ .then(() => conformanceCase.run({
353
+ expect: registrar.expect,
354
+ environment: environmentFor(conformanceCase, signal),
355
+ fixture: fixtureOf(suite),
356
+ access,
357
+ fixtureOf,
358
+ }));
359
+ previousCase = running;
360
+ return running;
361
+ }, conformanceCase.timeoutMs);
362
+ }
363
+ });
364
+ };
@@ -0,0 +1,31 @@
1
+ import { Config, Crypto, Effect, Redacted, type Scope } from "effect";
2
+ /**
3
+ * A name for a test database that carries its creation time, so a later run
4
+ * on a shared server can tell a leftover from a live run's database.
5
+ */
6
+ export declare const databaseName: (crypto: Crypto.Crypto, prefix: "actors" | "actors_template" | "disposable" | "isolated" | "restored") => Effect.Effect<string, never, never>;
7
+ /**
8
+ * Creates a database on the Postgres server `url` names for the current
9
+ * scope and drops it, ending its sessions, when the scope closes. With
10
+ * `template` the database is a copy of that one. Postgres refuses to copy a
11
+ * database while a session is open on it, and a closed pool's server
12
+ * sessions outlive it briefly, so a copy retries.
13
+ */
14
+ export declare const disposableDatabase: (options: {
15
+ readonly url: Redacted.Redacted<string>;
16
+ readonly prefix?: "actors" | "actors_template" | "isolated" | "restored" | "disposable";
17
+ readonly template?: string | undefined;
18
+ }) => Effect.Effect<Redacted.Redacted<string>, never, Crypto.Crypto | Scope.Scope>;
19
+ /**
20
+ * Drops the test databases an earlier run left behind on the server `url`
21
+ * names: a run that was killed, or whose teardown timed out, never dropped
22
+ * its own.
23
+ */
24
+ export declare const sweepStaleDatabases: (url: Redacted.Redacted<string>) => Effect.Effect<void, never, never>;
25
+ /**
26
+ * The database a test that runs on both backends uses: `undefined`, a fresh
27
+ * in-memory PGlite for each `ActorTest.layer` build, when `TEST_BACKEND` is
28
+ * `pglite`, and otherwise a disposable database on the server
29
+ * `TEST_DATABASE_URL` names, dropped when the scope closes.
30
+ */
31
+ export declare const testDatabase: Effect.Effect<Redacted.Redacted<string> | undefined, Config.ConfigError, Scope.Scope | Crypto.Crypto>;
@@ -0,0 +1,70 @@
1
+ import { PgClient } from "@effect/sql-pg";
2
+ import { Clock, Config, Context, Crypto, Effect, Layer, Redacted, Schedule, } from "effect";
3
+ import { SqlClient } from "effect/sql";
4
+ /** A test database older than this belongs to no live run: runs are cut off well before it. */
5
+ const STALE_AFTER_MS = 60 * 60 * 1000;
6
+ /** Test database names: a prefix, the creation time, and a random suffix. */
7
+ const NAMED = /^(?:actors|actors_template|isolated|restored|disposable)_(\d{13})_[0-9a-f]{32}$/;
8
+ /**
9
+ * A name for a test database that carries its creation time, so a later run
10
+ * on a shared server can tell a leftover from a live run's database.
11
+ */
12
+ export const databaseName = Effect.fnUntraced(function* (crypto, prefix) {
13
+ const uuid = (yield* crypto.randomUUIDv4.pipe(Effect.orDie)).replaceAll("-", "");
14
+ return `${prefix}_${yield* Clock.currentTimeMillis}_${uuid}`;
15
+ });
16
+ /**
17
+ * Runs `use` on an administrative connection to the server `url` names that
18
+ * lives only as long as `use`. A connection held across a caller's scope
19
+ * would belong to the fiber that opened it, and a finalizer running after
20
+ * that fiber ended would find it interrupted.
21
+ */
22
+ const withAdmin = (url, use) => Effect.scoped(Layer.build(PgClient.layer({ url, maxConnections: 1 })).pipe(Effect.map((context) => Context.get(context, SqlClient.SqlClient)), Effect.flatMap(use))).pipe(Effect.orDie);
23
+ /** `url` with its database replaced by `name`. */
24
+ const onDatabase = (url, name) => {
25
+ const database = new URL(Redacted.value(url));
26
+ database.pathname = `/${name}`;
27
+ return Redacted.make(database.href);
28
+ };
29
+ /**
30
+ * Creates a database on the Postgres server `url` names for the current
31
+ * scope and drops it, ending its sessions, when the scope closes. With
32
+ * `template` the database is a copy of that one. Postgres refuses to copy a
33
+ * database while a session is open on it, and a closed pool's server
34
+ * sessions outlive it briefly, so a copy retries.
35
+ */
36
+ export const disposableDatabase = Effect.fnUntraced(function* (options) {
37
+ const name = yield* databaseName(yield* Crypto.Crypto, options.prefix ?? "disposable");
38
+ yield* Effect.acquireRelease(options.template === undefined
39
+ ? withAdmin(options.url, (admin) => admin.unsafe(`CREATE DATABASE "${name}"`))
40
+ : withAdmin(options.url, (admin) => admin
41
+ .unsafe(`CREATE DATABASE "${name}" TEMPLATE "${options.template}"`)
42
+ .pipe(Effect.retry({ times: 100, schedule: Schedule.spaced("50 millis") }))), () => withAdmin(options.url, (admin) => admin.unsafe(`DROP DATABASE IF EXISTS "${name}" WITH (FORCE)`)));
43
+ return onDatabase(options.url, name);
44
+ });
45
+ /**
46
+ * Drops the test databases an earlier run left behind on the server `url`
47
+ * names: a run that was killed, or whose teardown timed out, never dropped
48
+ * its own.
49
+ */
50
+ export const sweepStaleDatabases = (url) => withAdmin(url, (admin) => Effect.gen(function* () {
51
+ const now = yield* Clock.currentTimeMillis;
52
+ const rows = yield* admin `SELECT datname FROM pg_database`;
53
+ yield* Effect.forEach(rows
54
+ .map(({ datname }) => datname)
55
+ .filter((name) => {
56
+ const created = NAMED.exec(name)?.[1];
57
+ return created !== undefined && now - Number(created) > STALE_AFTER_MS;
58
+ }), (name) => admin.unsafe(`DROP DATABASE IF EXISTS "${name}" WITH (FORCE)`), { concurrency: "unbounded", discard: true });
59
+ }));
60
+ /**
61
+ * The database a test that runs on both backends uses: `undefined`, a fresh
62
+ * in-memory PGlite for each `ActorTest.layer` build, when `TEST_BACKEND` is
63
+ * `pglite`, and otherwise a disposable database on the server
64
+ * `TEST_DATABASE_URL` names, dropped when the scope closes.
65
+ */
66
+ export const testDatabase = Effect.gen(function* () {
67
+ if ((yield* Config.Literals(["pglite", "postgres"], "TEST_BACKEND")) === "pglite")
68
+ return undefined;
69
+ return yield* disposableDatabase({ url: yield* Config.Redacted("TEST_DATABASE_URL") });
70
+ });
@@ -0,0 +1,41 @@
1
+ import { Effect, Layer, Logger } from "effect";
2
+ import type { ConformanceCase } from "./conformance.ts";
3
+ import type { ConformanceSuite } from "./conformance.ts";
4
+ export interface RecordedDefect {
5
+ readonly actor: string;
6
+ readonly id: string;
7
+ readonly command: string;
8
+ readonly cause: string;
9
+ }
10
+ /** The annotations of a `Delivery timed out` warning. */
11
+ export interface RecordedTimeout {
12
+ readonly actor: unknown;
13
+ readonly id: unknown;
14
+ readonly commandId: unknown;
15
+ readonly activation: unknown;
16
+ readonly turnSessions: unknown;
17
+ readonly restarting: unknown;
18
+ }
19
+ export interface FoundationFixture {
20
+ creates: number;
21
+ privateRuns: number;
22
+ slowIds: Array<string>;
23
+ slowFirst: Effect.Effect<void>;
24
+ deliveryRuns: number;
25
+ deliveryHold: Effect.Effect<void>;
26
+ defects: Array<RecordedDefect>;
27
+ /** Each `Delivery timed out` warning the runtime logged. */
28
+ timeouts: Array<RecordedTimeout>;
29
+ }
30
+ export declare const foundationFixture: () => FoundationFixture;
31
+ /**
32
+ * Captures the runtime's deterministic-defect log records, which replace the
33
+ * removed defect hook, and the diagnostics of each delivery that timed out.
34
+ */
35
+ export declare const defectRecorder: (fixture: FoundationFixture) => Logger.Logger<unknown, void>;
36
+ /** Handlers for the foundation actors; `fixture` supplies the observable state cases assert on. */
37
+ export declare const foundationLayer: (fixture: FoundationFixture) => Layer.Layer<never, never, import("./index.ts").InternalActors>;
38
+ /** Identity, admission, receipts, state migration, and blob cases every backend must pass. A receipt retry may wait for PGlite's busy connection, so its delivery deadline covers that wait as well as the RPC reply. */
39
+ export declare const foundationConformance: ReadonlyArray<ConformanceCase<FoundationFixture>>;
40
+ /** Foundation actors; its logger records deterministic defects and delivery timeouts for the cases to read. */
41
+ export declare const foundationSuite: ConformanceSuite<FoundationFixture>;