@akterjs/effect 0.0.0-stage → 0.1.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 (798) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +43 -2
  3. package/dist/contract/actor/actor-already-exists.errors.d.mts +8 -0
  4. package/dist/contract/actor/actor-already-exists.errors.mjs +4 -0
  5. package/dist/contract/actor/actor-definition.pure.d.mts +21 -0
  6. package/dist/contract/actor/actor-definition.pure.mjs +106 -0
  7. package/dist/contract/actor/actor-erased.errors.d.mts +8 -0
  8. package/dist/contract/actor/actor-erased.errors.mjs +4 -0
  9. package/dist/contract/actor/actor-names.pure.d.mts +11 -0
  10. package/dist/contract/actor/actor-names.pure.mjs +51 -0
  11. package/dist/contract/actor/actor-not-created.errors.d.mts +8 -0
  12. package/dist/contract/actor/actor-not-created.errors.mjs +4 -0
  13. package/dist/contract/actor/actor-not-registered.errors.d.mts +8 -0
  14. package/dist/contract/actor/actor-not-registered.errors.mjs +4 -0
  15. package/dist/contract/actor/actor-registry.service.d.mts +16 -0
  16. package/dist/contract/actor/actor-registry.service.mjs +21 -0
  17. package/dist/contract/actor/actor.contract.d.mts +238 -0
  18. package/dist/contract/actor/actor.contract.mjs +1 -0
  19. package/dist/contract/actor/host-interface.pure.d.mts +23 -0
  20. package/dist/contract/actor/host-interface.pure.mjs +39 -0
  21. package/dist/contract/actor/reserved-member.errors.d.mts +9 -0
  22. package/dist/contract/actor/reserved-member.errors.mjs +7 -0
  23. package/dist/contract/akter.service.d.mts +75 -0
  24. package/dist/contract/akter.service.mjs +134 -0
  25. package/dist/contract/caller/authentication.api.d.mts +6 -0
  26. package/dist/contract/caller/authentication.api.mjs +5 -0
  27. package/dist/contract/caller/caller-admission.pure.d.mts +27 -0
  28. package/dist/contract/caller/caller-admission.pure.mjs +59 -0
  29. package/dist/contract/caller/caller-not-allowed.errors.d.mts +16 -0
  30. package/dist/contract/caller/caller-not-allowed.errors.mjs +18 -0
  31. package/dist/contract/caller/caller.schema.d.mts +7 -0
  32. package/dist/contract/caller/caller.schema.mjs +8 -0
  33. package/dist/contract/caller/current-caller.service.d.mts +7 -0
  34. package/dist/contract/caller/current-caller.service.mjs +4 -0
  35. package/dist/contract/caller/principal.schema.d.mts +13 -0
  36. package/dist/contract/caller/principal.schema.mjs +10 -0
  37. package/dist/contract/caller/unauthenticated.errors.d.mts +8 -0
  38. package/dist/contract/caller/unauthenticated.errors.mjs +4 -0
  39. package/dist/contract/client/actor-client.adapter.d.mts +42 -0
  40. package/dist/contract/client/actor-client.adapter.mjs +90 -0
  41. package/dist/contract/client/actor-client.contract.d.mts +30 -0
  42. package/dist/contract/client/actor-client.contract.mjs +1 -0
  43. package/dist/contract/client/actor-rpc.contract.d.mts +33 -0
  44. package/dist/contract/client/actor-rpc.contract.mjs +16 -0
  45. package/dist/contract/client/actor-unavailable.errors.d.mts +9 -0
  46. package/dist/contract/client/actor-unavailable.errors.mjs +7 -0
  47. package/dist/contract/client/client-failure.contract.d.mts +28 -0
  48. package/dist/contract/client/client-failure.contract.mjs +28 -0
  49. package/dist/contract/client/invalid-request.errors.d.mts +9 -0
  50. package/dist/contract/client/invalid-request.errors.mjs +7 -0
  51. package/dist/contract/client/storage-limit.errors.d.mts +16 -0
  52. package/dist/contract/client/storage-limit.errors.mjs +14 -0
  53. package/dist/contract/command/command-id-expired.errors.d.mts +11 -0
  54. package/dist/contract/command/command-id-expired.errors.mjs +9 -0
  55. package/dist/contract/command/command-id.schema.d.mts +3 -0
  56. package/dist/contract/command/command-id.schema.mjs +4 -0
  57. package/dist/contract/command/command.contract.d.mts +117 -0
  58. package/dist/contract/command/command.contract.mjs +111 -0
  59. package/dist/contract/command/outbox-id.pure.d.mts +9 -0
  60. package/dist/contract/command/outbox-id.pure.mjs +14 -0
  61. package/dist/contract/command/outbox.schema.d.mts +9 -0
  62. package/dist/contract/command/outbox.schema.mjs +10 -0
  63. package/dist/contract/command/timer.schema.d.mts +20 -0
  64. package/dist/contract/command/timer.schema.mjs +14 -0
  65. package/dist/contract/computer/checkpoint-expired.errors.d.mts +12 -0
  66. package/dist/contract/computer/checkpoint-expired.errors.mjs +8 -0
  67. package/dist/contract/computer/computer-client-failure.contract.d.mts +16 -0
  68. package/dist/contract/computer/computer-client-failure.contract.mjs +1 -0
  69. package/dist/contract/computer/computer-client.adapter.d.mts +21 -0
  70. package/dist/contract/computer/computer-client.adapter.mjs +70 -0
  71. package/dist/contract/computer/computer-client.contract.d.mts +56 -0
  72. package/dist/contract/computer/computer-client.contract.mjs +1 -0
  73. package/dist/contract/computer/computer-held.errors.d.mts +13 -0
  74. package/dist/contract/computer/computer-held.errors.mjs +11 -0
  75. package/dist/contract/computer/computer-limit.errors.d.mts +15 -0
  76. package/dist/contract/computer/computer-limit.errors.mjs +13 -0
  77. package/dist/contract/computer/computer-lost.errors.d.mts +12 -0
  78. package/dist/contract/computer/computer-lost.errors.mjs +8 -0
  79. package/dist/contract/computer/computer-not-found.errors.d.mts +9 -0
  80. package/dist/contract/computer/computer-not-found.errors.mjs +5 -0
  81. package/dist/contract/computer/computer.schema.d.mts +122 -0
  82. package/dist/contract/computer/computer.schema.mjs +117 -0
  83. package/dist/contract/computer/computers-unavailable.errors.d.mts +9 -0
  84. package/dist/contract/computer/computers-unavailable.errors.mjs +5 -0
  85. package/dist/contract/computer/files/computer-files.schema.d.mts +28 -0
  86. package/dist/contract/computer/files/computer-files.schema.mjs +24 -0
  87. package/dist/contract/computer/rpc/computer-rpc.contract.d.mts +108 -0
  88. package/dist/contract/computer/rpc/computer-rpc.contract.mjs +117 -0
  89. package/dist/contract/computer/step/computer-step.contract.d.mts +21 -0
  90. package/dist/contract/computer/step/computer-step.contract.mjs +89 -0
  91. package/dist/contract/computer/step/computer-step.schema.d.mts +69 -0
  92. package/dist/contract/computer/step/computer-step.schema.mjs +71 -0
  93. package/dist/contract/computer/step/step-failure.schema.d.mts +13 -0
  94. package/dist/contract/computer/step/step-failure.schema.mjs +24 -0
  95. package/dist/contract/computer/step/step-not-found.errors.d.mts +9 -0
  96. package/dist/contract/computer/step/step-not-found.errors.mjs +5 -0
  97. package/dist/contract/description/published-contract.pure.d.mts +51 -0
  98. package/dist/contract/description/published-contract.pure.mjs +75 -0
  99. package/dist/contract/file/access/file-access-denied.errors.d.mts +11 -0
  100. package/dist/contract/file/access/file-access-denied.errors.mjs +9 -0
  101. package/dist/contract/file/access/file-access.contract.d.mts +35 -0
  102. package/dist/contract/file/access/file-access.contract.mjs +32 -0
  103. package/dist/contract/file/actor-files.contract.d.mts +50 -0
  104. package/dist/contract/file/actor-files.contract.mjs +1 -0
  105. package/dist/contract/file/blob-transfer.errors.d.mts +9 -0
  106. package/dist/contract/file/blob-transfer.errors.mjs +7 -0
  107. package/dist/contract/file/file-client-failure.contract.d.mts +24 -0
  108. package/dist/contract/file/file-client-failure.contract.mjs +1 -0
  109. package/dist/contract/file/file-client.adapter.d.mts +17 -0
  110. package/dist/contract/file/file-client.adapter.mjs +21 -0
  111. package/dist/contract/file/file-client.contract.d.mts +14 -0
  112. package/dist/contract/file/file-client.contract.mjs +1 -0
  113. package/dist/contract/file/file-listing.pure.d.mts +6 -0
  114. package/dist/contract/file/file-listing.pure.mjs +18 -0
  115. package/dist/contract/file/file-not-found.errors.d.mts +8 -0
  116. package/dist/contract/file/file-not-found.errors.mjs +4 -0
  117. package/dist/contract/file/file-path.pure.d.mts +4 -0
  118. package/dist/contract/file/file-path.pure.mjs +38 -0
  119. package/dist/contract/file/files-unavailable.errors.d.mts +8 -0
  120. package/dist/contract/file/files-unavailable.errors.mjs +4 -0
  121. package/dist/contract/file/invalid-file-request.errors.d.mts +9 -0
  122. package/dist/contract/file/invalid-file-request.errors.mjs +7 -0
  123. package/dist/contract/file/rpc/file-rpc.contract.d.mts +88 -0
  124. package/dist/contract/file/rpc/file-rpc.contract.mjs +117 -0
  125. package/dist/contract/file/rpc/file-too-large.errors.d.mts +13 -0
  126. package/dist/contract/file/rpc/file-too-large.errors.mjs +11 -0
  127. package/dist/contract/file/rpc/rpc-file-clients.layer.d.mts +10 -0
  128. package/dist/contract/file/rpc/rpc-file-clients.layer.mjs +95 -0
  129. package/dist/contract/fork/fork-rpc.contract.d.mts +40 -0
  130. package/dist/contract/fork/fork-rpc.contract.mjs +26 -0
  131. package/dist/contract/history/actor-journal.service.d.mts +58 -0
  132. package/dist/contract/history/actor-journal.service.mjs +67 -0
  133. package/dist/contract/history/history-entry.pure.d.mts +79 -0
  134. package/dist/contract/history/history-entry.pure.mjs +95 -0
  135. package/dist/contract/hosted/handler-failed.errors.d.mts +16 -0
  136. package/dist/contract/hosted/handler-failed.errors.mjs +14 -0
  137. package/dist/contract/hosted/handler-failure.pure.d.mts +21 -0
  138. package/dist/contract/hosted/handler-failure.pure.mjs +86 -0
  139. package/dist/contract/hosted/hosted-actor.service.d.mts +23 -0
  140. package/dist/contract/hosted/hosted-actor.service.mjs +64 -0
  141. package/dist/contract/hosted/hosted-command.service.d.mts +20 -0
  142. package/dist/contract/hosted/hosted-command.service.mjs +88 -0
  143. package/dist/contract/hosted/hosted-create.service.d.mts +17 -0
  144. package/dist/contract/hosted/hosted-create.service.mjs +67 -0
  145. package/dist/contract/hosted/hosted-error.contract.d.mts +11 -0
  146. package/dist/contract/hosted/hosted-error.contract.mjs +1 -0
  147. package/dist/contract/hosted/hosted-failure.schema.d.mts +18 -0
  148. package/dist/contract/hosted/hosted-failure.schema.mjs +31 -0
  149. package/dist/contract/hosted/hosted-outcome.contract.d.mts +18 -0
  150. package/dist/contract/hosted/hosted-outcome.contract.mjs +1 -0
  151. package/dist/contract/hosted/hosted-query.service.d.mts +16 -0
  152. package/dist/contract/hosted/hosted-query.service.mjs +42 -0
  153. package/dist/contract/hosted/hosted-request.pure.d.mts +61 -0
  154. package/dist/contract/hosted/hosted-request.pure.mjs +91 -0
  155. package/dist/contract/job/job-id.pure.d.mts +11 -0
  156. package/dist/contract/job/job-id.pure.mjs +20 -0
  157. package/dist/contract/job/job-patches.contract.d.mts +32 -0
  158. package/dist/contract/job/job-patches.contract.mjs +45 -0
  159. package/dist/contract/job/job-signal.schema.d.mts +13 -0
  160. package/dist/contract/job/job-signal.schema.mjs +16 -0
  161. package/dist/contract/job/reserved-payload-field.errors.d.mts +10 -0
  162. package/dist/contract/job/reserved-payload-field.errors.mjs +8 -0
  163. package/dist/contract/job/started-job.schema.d.mts +7 -0
  164. package/dist/contract/job/started-job.schema.mjs +8 -0
  165. package/dist/contract/json-codec.pure.d.mts +7 -0
  166. package/dist/contract/json-codec.pure.mjs +14 -0
  167. package/dist/contract/room.contract.d.mts +75 -0
  168. package/dist/contract/room.contract.mjs +36 -0
  169. package/dist/contract/secret/actor-secrets.adapter.d.mts +33 -0
  170. package/dist/contract/secret/actor-secrets.adapter.mjs +38 -0
  171. package/dist/contract/secret/invalid-secret-name.errors.d.mts +10 -0
  172. package/dist/contract/secret/invalid-secret-name.errors.mjs +8 -0
  173. package/dist/contract/secret/secret-unavailable.errors.d.mts +11 -0
  174. package/dist/contract/secret/secret-unavailable.errors.mjs +10 -0
  175. package/dist/contract/secret/secret.schema.d.mts +25 -0
  176. package/dist/contract/secret/secret.schema.mjs +34 -0
  177. package/dist/contract/spend/billing-unavailable.errors.d.mts +12 -0
  178. package/dist/contract/spend/billing-unavailable.errors.mjs +8 -0
  179. package/dist/contract/spend/spend-cap-reached.errors.d.mts +17 -0
  180. package/dist/contract/spend/spend-cap-reached.errors.mjs +15 -0
  181. package/dist/contract/state/actor-state.pure.d.mts +38 -0
  182. package/dist/contract/state/actor-state.pure.mjs +153 -0
  183. package/dist/contract/state/actor-state.service.d.mts +45 -0
  184. package/dist/contract/state/actor-state.service.mjs +18 -0
  185. package/dist/contract/state/state-migration.pure.d.mts +11 -0
  186. package/dist/contract/state/state-migration.pure.mjs +23 -0
  187. package/dist/contract/state/state-read.pure.d.mts +12 -0
  188. package/dist/contract/state/state-read.pure.mjs +22 -0
  189. package/dist/contract/state/state-unreadable.errors.d.mts +9 -0
  190. package/dist/contract/state/state-unreadable.errors.mjs +7 -0
  191. package/dist/host/actor/actor-database.service.d.mts +46 -0
  192. package/dist/host/actor/actor-database.service.mjs +112 -0
  193. package/dist/host/actor/actor-exclusive.pure.d.mts +7 -0
  194. package/dist/host/actor/actor-exclusive.pure.mjs +16 -0
  195. package/dist/host/actor/actor-records.sql.d.mts +29 -0
  196. package/dist/host/actor/actor-records.sql.mjs +26 -0
  197. package/dist/host/actor/reserved-name.errors.d.mts +10 -0
  198. package/dist/host/actor/reserved-name.errors.mjs +8 -0
  199. package/dist/host/actor/reserved-names.pure.d.mts +15 -0
  200. package/dist/host/actor/reserved-names.pure.mjs +20 -0
  201. package/dist/host/actor/room.actor.d.mts +4 -0
  202. package/dist/host/actor/room.actor.mjs +36 -0
  203. package/dist/host/blob/blob-frames.pure.d.mts +7 -0
  204. package/dist/host/blob/blob-frames.pure.mjs +28 -0
  205. package/dist/host/blob/blob-grant.schema.d.mts +14 -0
  206. package/dist/host/blob/blob-grant.schema.mjs +15 -0
  207. package/dist/host/blob/blob-grants.service.d.mts +28 -0
  208. package/dist/host/blob/blob-grants.service.mjs +129 -0
  209. package/dist/host/blob/blob-keyring.service.d.mts +18 -0
  210. package/dist/host/blob/blob-keyring.service.mjs +4 -0
  211. package/dist/host/blob/blob-range.pure.d.mts +13 -0
  212. package/dist/host/blob/blob-range.pure.mjs +23 -0
  213. package/dist/host/blob/blob-sealing.contract.d.mts +37 -0
  214. package/dist/host/blob/blob-sealing.contract.mjs +1 -0
  215. package/dist/host/blob/blob-sealing.service.d.mts +11 -0
  216. package/dist/host/blob/blob-sealing.service.mjs +16 -0
  217. package/dist/host/blob/export/blob-archive.sql.d.mts +21 -0
  218. package/dist/host/blob/export/blob-archive.sql.mjs +75 -0
  219. package/dist/host/blob/export/blob-export-holds.sql.d.mts +49 -0
  220. package/dist/host/blob/export/blob-export-holds.sql.mjs +25 -0
  221. package/dist/host/blob/plain-blob-sealing.pure.d.mts +5 -0
  222. package/dist/host/blob/plain-blob-sealing.pure.mjs +55 -0
  223. package/dist/host/blob/reference/blob-catalog.sql.d.mts +40 -0
  224. package/dist/host/blob/reference/blob-catalog.sql.mjs +145 -0
  225. package/dist/host/blob/reference/blob-coordinator.pure.d.mts +10 -0
  226. package/dist/host/blob/reference/blob-coordinator.pure.mjs +153 -0
  227. package/dist/host/blob/reference/blob-file-page.sql.d.mts +13 -0
  228. package/dist/host/blob/reference/blob-file-page.sql.mjs +21 -0
  229. package/dist/host/blob/reference/blob-forks.sql.d.mts +21 -0
  230. package/dist/host/blob/reference/blob-forks.sql.mjs +40 -0
  231. package/dist/host/blob/reference/blob-lineage.sql.d.mts +14 -0
  232. package/dist/host/blob/reference/blob-lineage.sql.mjs +24 -0
  233. package/dist/host/blob/reference/blob-reads.pure.d.mts +15 -0
  234. package/dist/host/blob/reference/blob-reads.pure.mjs +97 -0
  235. package/dist/host/blob/reference/blob-receipts.sql.d.mts +71 -0
  236. package/dist/host/blob/reference/blob-receipts.sql.mjs +176 -0
  237. package/dist/host/blob/reference/blob-transfer-adopt.pure.d.mts +21 -0
  238. package/dist/host/blob/reference/blob-transfer-adopt.pure.mjs +68 -0
  239. package/dist/host/blob/reference/blob-transfer-fork.pure.d.mts +15 -0
  240. package/dist/host/blob/reference/blob-transfer-fork.pure.mjs +125 -0
  241. package/dist/host/blob/reference/blob-transfer-upkeep.pure.d.mts +18 -0
  242. package/dist/host/blob/reference/blob-transfer-upkeep.pure.mjs +54 -0
  243. package/dist/host/blob/reference/blob-transfer.pure.d.mts +85 -0
  244. package/dist/host/blob/reference/blob-transfer.pure.mjs +1 -0
  245. package/dist/host/blob/sealed-blob-sealing.pure.d.mts +10 -0
  246. package/dist/host/blob/sealed-blob-sealing.pure.mjs +130 -0
  247. package/dist/host/blob/stream/blob-directory.pure.d.mts +18 -0
  248. package/dist/host/blob/stream/blob-directory.pure.mjs +84 -0
  249. package/dist/host/blob/stream/blob-length.pure.d.mts +9 -0
  250. package/dist/host/blob/stream/blob-length.pure.mjs +19 -0
  251. package/dist/host/blob/stream/blob-writing.pure.d.mts +8 -0
  252. package/dist/host/blob/stream/blob-writing.pure.mjs +15 -0
  253. package/dist/host/command/batch/command-batch.sql.d.mts +61 -0
  254. package/dist/host/command/batch/command-batch.sql.mjs +100 -0
  255. package/dist/host/command/command-context.adapter.d.mts +47 -0
  256. package/dist/host/command/command-context.adapter.mjs +90 -0
  257. package/dist/host/command/command-id-age.pure.d.mts +13 -0
  258. package/dist/host/command/command-id-age.pure.mjs +31 -0
  259. package/dist/host/command/command-id-reuse.pure.d.mts +28 -0
  260. package/dist/host/command/command-id-reuse.pure.mjs +38 -0
  261. package/dist/host/command/command-id-reused.errors.d.mts +13 -0
  262. package/dist/host/command/command-id-reused.errors.mjs +11 -0
  263. package/dist/host/command/command-journal.sql.d.mts +84 -0
  264. package/dist/host/command/command-journal.sql.mjs +74 -0
  265. package/dist/host/command/command-rejected.errors.d.mts +8 -0
  266. package/dist/host/command/command-rejected.errors.mjs +4 -0
  267. package/dist/host/command/command-replay.service.d.mts +62 -0
  268. package/dist/host/command/command-replay.service.mjs +140 -0
  269. package/dist/host/command/command-reply.pure.d.mts +8 -0
  270. package/dist/host/command/command-reply.pure.mjs +12 -0
  271. package/dist/host/command/command-runner.service.d.mts +68 -0
  272. package/dist/host/command/command-runner.service.mjs +215 -0
  273. package/dist/host/command/files/command-file-inputs.sql.d.mts +51 -0
  274. package/dist/host/command/files/command-file-inputs.sql.mjs +59 -0
  275. package/dist/host/command/history-pruned.errors.d.mts +10 -0
  276. package/dist/host/command/history-pruned.errors.mjs +8 -0
  277. package/dist/host/command/replay/replay-cursor-stalled.errors.d.mts +9 -0
  278. package/dist/host/command/replay/replay-cursor-stalled.errors.mjs +7 -0
  279. package/dist/host/command/replay/replay-cursor.pure.d.mts +7 -0
  280. package/dist/host/command/replay/replay-cursor.pure.mjs +12 -0
  281. package/dist/host/computer/computer-steps.sql.d.mts +14 -0
  282. package/dist/host/computer/computer-steps.sql.mjs +76 -0
  283. package/dist/host/computer/job-computers.service.d.mts +20 -0
  284. package/dist/host/computer/job-computers.service.mjs +59 -0
  285. package/dist/host/computer/local-computer-files.layer.d.mts +11 -0
  286. package/dist/host/computer/local-computer-files.layer.mjs +69 -0
  287. package/dist/host/computer/local-computer-log.layer.d.mts +23 -0
  288. package/dist/host/computer/local-computer-log.layer.mjs +64 -0
  289. package/dist/host/computer/local-computer-records.layer.d.mts +190 -0
  290. package/dist/host/computer/local-computer-records.layer.mjs +99 -0
  291. package/dist/host/computer/local-computer.schema.d.mts +69 -0
  292. package/dist/host/computer/local-computer.schema.mjs +29 -0
  293. package/dist/host/computer/local-computers.adapter.d.mts +18 -0
  294. package/dist/host/computer/local-computers.adapter.mjs +248 -0
  295. package/dist/host/computer/local-step.layer.d.mts +30 -0
  296. package/dist/host/computer/local-step.layer.mjs +119 -0
  297. package/dist/host/file/actor-file-storage.sql.d.mts +15 -0
  298. package/dist/host/file/actor-file-storage.sql.mjs +82 -0
  299. package/dist/host/file/actor-files.sql.d.mts +9 -0
  300. package/dist/host/file/actor-files.sql.mjs +3 -0
  301. package/dist/host/file/blob-home-lock.pure.d.mts +8 -0
  302. package/dist/host/file/blob-home-lock.pure.mjs +10 -0
  303. package/dist/host/file/blob-home.sql.d.mts +19 -0
  304. package/dist/host/file/blob-home.sql.mjs +30 -0
  305. package/dist/host/file/local-blob-home.service.d.mts +16 -0
  306. package/dist/host/file/local-blob-home.service.mjs +43 -0
  307. package/dist/host/file/local-blob-owner.sql.d.mts +30 -0
  308. package/dist/host/file/local-blob-owner.sql.mjs +68 -0
  309. package/dist/host/file/local-file-upkeep.pure.d.mts +12 -0
  310. package/dist/host/file/local-file-upkeep.pure.mjs +41 -0
  311. package/dist/host/file/replay-file-storage.sql.d.mts +7 -0
  312. package/dist/host/file/replay-file-storage.sql.mjs +26 -0
  313. package/dist/host/fork/actor-fork.sql.d.mts +52 -0
  314. package/dist/host/fork/actor-fork.sql.mjs +42 -0
  315. package/dist/host/fork/fork-computers.adapter.d.mts +43 -0
  316. package/dist/host/fork/fork-computers.adapter.mjs +193 -0
  317. package/dist/host/hash/blob-hashing.service.d.mts +10 -0
  318. package/dist/host/hash/blob-hashing.service.mjs +4 -0
  319. package/dist/host/job/job-durables.sql.d.mts +44 -0
  320. package/dist/host/job/job-durables.sql.mjs +136 -0
  321. package/dist/host/job/job-engine.adapter.d.mts +33 -0
  322. package/dist/host/job/job-engine.adapter.mjs +258 -0
  323. package/dist/host/job/job-journal.sql.d.mts +85 -0
  324. package/dist/host/job/job-journal.sql.mjs +109 -0
  325. package/dist/host/job/job-results.service.d.mts +37 -0
  326. package/dist/host/job/job-results.service.mjs +63 -0
  327. package/dist/host/job/job-runs.pure.d.mts +103 -0
  328. package/dist/host/job/job-runs.pure.mjs +193 -0
  329. package/dist/host/job/undelivered-result.pure.d.mts +49 -0
  330. package/dist/host/job/undelivered-result.pure.mjs +147 -0
  331. package/dist/host/layout/actor-layout.sql.d.mts +8 -0
  332. package/dist/host/layout/actor-layout.sql.mjs +33 -0
  333. package/dist/host/layout/layout-version.errors.d.mts +10 -0
  334. package/dist/host/layout/layout-version.errors.mjs +8 -0
  335. package/dist/host/layout/layout-version.pure.d.mts +10 -0
  336. package/dist/host/layout/layout-version.pure.mjs +14 -0
  337. package/dist/host/migration/actor-migrations.service.d.mts +46 -0
  338. package/dist/host/migration/actor-migrations.service.mjs +143 -0
  339. package/dist/host/migration/migration-edited.errors.d.mts +9 -0
  340. package/dist/host/migration/migration-edited.errors.mjs +7 -0
  341. package/dist/host/migration/migration-failed.errors.d.mts +12 -0
  342. package/dist/host/migration/migration-failed.errors.mjs +10 -0
  343. package/dist/host/migration/migration-failure.pure.d.mts +9 -0
  344. package/dist/host/migration/migration-failure.pure.mjs +19 -0
  345. package/dist/host/migration/migration-hasher.adapter.d.mts +15 -0
  346. package/dist/host/migration/migration-hasher.adapter.mjs +40 -0
  347. package/dist/host/migration/migration-missing.errors.d.mts +9 -0
  348. package/dist/host/migration/migration-missing.errors.mjs +7 -0
  349. package/dist/host/migration/migration-plan.pure.d.mts +20 -0
  350. package/dist/host/migration/migration-plan.pure.mjs +32 -0
  351. package/dist/host/outbox/actor-outbox.sql.d.mts +33 -0
  352. package/dist/host/outbox/actor-outbox.sql.mjs +28 -0
  353. package/dist/host/outbox/outbox-acknowledgements.sql.d.mts +12 -0
  354. package/dist/host/outbox/outbox-acknowledgements.sql.mjs +47 -0
  355. package/dist/host/outbox/outbox-runner.service.d.mts +37 -0
  356. package/dist/host/outbox/outbox-runner.service.mjs +155 -0
  357. package/dist/host/query/query-policy.pure.d.mts +15 -0
  358. package/dist/host/query/query-policy.pure.mjs +12 -0
  359. package/dist/host/query/query-runner.service.d.mts +42 -0
  360. package/dist/host/query/query-runner.service.mjs +72 -0
  361. package/dist/host/sqlite/actor-connections.pure.d.mts +26 -0
  362. package/dist/host/sqlite/actor-connections.pure.mjs +4 -0
  363. package/dist/host/sqlite/sqlite-connection.adapter.d.mts +22 -0
  364. package/dist/host/sqlite/sqlite-connection.adapter.mjs +151 -0
  365. package/dist/host/sqlite/sqlite-driver.service.d.mts +33 -0
  366. package/dist/host/sqlite/sqlite-driver.service.mjs +88 -0
  367. package/dist/host/sqlite/sqlite-parameters.pure.d.mts +5 -0
  368. package/dist/host/sqlite/sqlite-parameters.pure.mjs +21 -0
  369. package/dist/host/sqlite/sqlite-reason.pure.d.mts +8 -0
  370. package/dist/host/sqlite/sqlite-reason.pure.mjs +13 -0
  371. package/dist/host/timer/actor-timers.sql.d.mts +32 -0
  372. package/dist/host/timer/actor-timers.sql.mjs +8 -0
  373. package/dist/host/timer/timer-runner.service.d.mts +26 -0
  374. package/dist/host/timer/timer-runner.service.mjs +68 -0
  375. package/dist/host/upkeep/actor-due.sql.d.mts +26 -0
  376. package/dist/host/upkeep/actor-due.sql.mjs +43 -0
  377. package/dist/host/upkeep/actor-upkeep.service.d.mts +55 -0
  378. package/dist/host/upkeep/actor-upkeep.service.mjs +218 -0
  379. package/dist/host/upkeep/execution-authority.pure.d.mts +19 -0
  380. package/dist/host/upkeep/execution-authority.pure.mjs +10 -0
  381. package/dist/runtime/akter-local.layer.d.mts +28 -0
  382. package/dist/runtime/akter-local.layer.mjs +24 -0
  383. package/dist/runtime/akter.layer.d.mts +91 -0
  384. package/dist/runtime/akter.layer.mjs +99 -0
  385. package/dist/runtime/blob-hashing.layer.d.mts +4 -0
  386. package/dist/runtime/blob-hashing.layer.mjs +15 -0
  387. package/dist/runtime/hosted-environment.layer.d.mts +34 -0
  388. package/dist/runtime/hosted-environment.layer.mjs +40 -0
  389. package/dist/runtime/http-server.layer.d.mts +9 -0
  390. package/dist/runtime/http-server.layer.mjs +15 -0
  391. package/dist/runtime/local-actor-engine.layer.d.mts +10 -0
  392. package/dist/runtime/local-actor-engine.layer.mjs +14 -0
  393. package/dist/runtime/local-engine.layer.d.mts +15 -0
  394. package/dist/runtime/local-engine.layer.mjs +14 -0
  395. package/dist/runtime/local-environments.layer.d.mts +24 -0
  396. package/dist/runtime/local-environments.layer.mjs +159 -0
  397. package/dist/runtime/local-file-clients.layer.d.mts +13 -0
  398. package/dist/runtime/local-file-clients.layer.mjs +78 -0
  399. package/dist/runtime/local-job-runtime.layer.d.mts +19 -0
  400. package/dist/runtime/local-job-runtime.layer.mjs +21 -0
  401. package/dist/serve/archive/archived-actors.layer.d.mts +17 -0
  402. package/dist/serve/archive/archived-actors.layer.mjs +84 -0
  403. package/dist/serve/archive/archived-store.layer.d.mts +12 -0
  404. package/dist/serve/archive/archived-store.layer.mjs +40 -0
  405. package/dist/serve/engine/actor-engine.layer.d.mts +8 -0
  406. package/dist/serve/engine/actor-engine.layer.mjs +30 -0
  407. package/dist/serve/engine/actor-fork.service.d.mts +63 -0
  408. package/dist/serve/engine/actor-fork.service.mjs +277 -0
  409. package/dist/serve/engine/actor-holding.pure.d.mts +7 -0
  410. package/dist/serve/engine/actor-holding.pure.mjs +9 -0
  411. package/dist/serve/engine/actor-host.service.d.mts +66 -0
  412. package/dist/serve/engine/actor-host.service.mjs +209 -0
  413. package/dist/serve/engine/actor-location.service.d.mts +38 -0
  414. package/dist/serve/engine/actor-location.service.mjs +109 -0
  415. package/dist/serve/engine/actor-residents.pure.d.mts +92 -0
  416. package/dist/serve/engine/actor-residents.pure.mjs +201 -0
  417. package/dist/serve/engine/actor-shard.pure.d.mts +4 -0
  418. package/dist/serve/engine/actor-shard.pure.mjs +8 -0
  419. package/dist/serve/engine/actor-state.pure.d.mts +17 -0
  420. package/dist/serve/engine/actor-state.pure.mjs +20 -0
  421. package/dist/serve/engine/actors-not-hosted.errors.d.mts +9 -0
  422. package/dist/serve/engine/actors-not-hosted.errors.mjs +7 -0
  423. package/dist/serve/engine/job-runtime.layer.d.mts +6 -0
  424. package/dist/serve/engine/job-runtime.layer.mjs +5 -0
  425. package/dist/serve/environment/environment-already-exists.errors.d.mts +10 -0
  426. package/dist/serve/environment/environment-already-exists.errors.mjs +9 -0
  427. package/dist/serve/environment/environment-in-use.errors.d.mts +10 -0
  428. package/dist/serve/environment/environment-in-use.errors.mjs +14 -0
  429. package/dist/serve/environment/environment-not-found.errors.d.mts +10 -0
  430. package/dist/serve/environment/environment-not-found.errors.mjs +9 -0
  431. package/dist/serve/environment/environment-records.sql.d.mts +92 -0
  432. package/dist/serve/environment/environment-records.sql.mjs +59 -0
  433. package/dist/serve/environment/environment-store.sql.d.mts +38 -0
  434. package/dist/serve/environment/environment-store.sql.mjs +78 -0
  435. package/dist/serve/environment/local-environment.schema.d.mts +38 -0
  436. package/dist/serve/environment/local-environment.schema.mjs +43 -0
  437. package/dist/serve/environment/local-environments.service.d.mts +44 -0
  438. package/dist/serve/environment/local-environments.service.mjs +196 -0
  439. package/dist/serve/environment/promotion-notice.pure.d.mts +22 -0
  440. package/dist/serve/environment/promotion-notice.pure.mjs +30 -0
  441. package/dist/serve/environment/snapshot-operations.sql.d.mts +32 -0
  442. package/dist/serve/environment/snapshot-operations.sql.mjs +131 -0
  443. package/dist/serve/environment/store-snapshot.sql.d.mts +32 -0
  444. package/dist/serve/environment/store-snapshot.sql.mjs +74 -0
  445. package/dist/serve/erasure/local-actor-erasure.service.d.mts +26 -0
  446. package/dist/serve/erasure/local-actor-erasure.service.mjs +102 -0
  447. package/dist/serve/history/actor-host-runners.service.d.mts +23 -0
  448. package/dist/serve/history/actor-host-runners.service.mjs +35 -0
  449. package/dist/serve/hosted/hosted-app-build.errors.d.mts +13 -0
  450. package/dist/serve/hosted/hosted-app-build.errors.mjs +9 -0
  451. package/dist/serve/hosted/hosted-app-checks.layer.d.mts +15 -0
  452. package/dist/serve/hosted/hosted-app-checks.layer.mjs +32 -0
  453. package/dist/serve/hosted/hosted-file-forward.layer.d.mts +22 -0
  454. package/dist/serve/hosted/hosted-file-forward.layer.mjs +42 -0
  455. package/dist/serve/hosted/hosted-file-rpcs.layer.d.mts +25 -0
  456. package/dist/serve/hosted/hosted-file-rpcs.layer.mjs +82 -0
  457. package/dist/serve/hosted/hosted-file-server.layer.d.mts +18 -0
  458. package/dist/serve/hosted/hosted-file-server.layer.mjs +33 -0
  459. package/dist/serve/hosted/hosted-files.layer.d.mts +32 -0
  460. package/dist/serve/hosted/hosted-files.layer.mjs +55 -0
  461. package/dist/serve/hosted/hosted-runtime.layer.d.mts +42 -0
  462. package/dist/serve/hosted/hosted-runtime.layer.mjs +48 -0
  463. package/dist/serve/hosted/hosted-runtime.service.d.mts +77 -0
  464. package/dist/serve/hosted/hosted-runtime.service.mjs +74 -0
  465. package/dist/serve/hosted/hosted-secrets.layer.d.mts +10 -0
  466. package/dist/serve/hosted/hosted-secrets.layer.mjs +28 -0
  467. package/dist/serve/http/loopback-host.pure.d.mts +11 -0
  468. package/dist/serve/http/loopback-host.pure.mjs +29 -0
  469. package/dist/serve/inspect/actor-inspection.schema.d.mts +119 -0
  470. package/dist/serve/inspect/actor-inspection.schema.mjs +75 -0
  471. package/dist/serve/inspect/actor-inspection.sql.d.mts +12 -0
  472. package/dist/serve/inspect/actor-inspection.sql.mjs +43 -0
  473. package/dist/serve/inspect/inspect.service.d.mts +24 -0
  474. package/dist/serve/inspect/inspect.service.mjs +92 -0
  475. package/dist/serve/inspect/inspector-page.pure.d.mts +2 -0
  476. package/dist/serve/inspect/inspector-page.pure.mjs +155 -0
  477. package/dist/serve/inspect/inspector-wal.pure.d.mts +3 -0
  478. package/dist/serve/inspect/inspector-wal.pure.mjs +19 -0
  479. package/dist/serve/inspect/inspector.handlers.d.mts +5 -0
  480. package/dist/serve/inspect/inspector.handlers.mjs +50 -0
  481. package/dist/serve/inspect/inspector.layer.d.mts +9 -0
  482. package/dist/serve/inspect/inspector.layer.mjs +14 -0
  483. package/dist/serve/live/live-reads.service.d.mts +44 -0
  484. package/dist/serve/live/live-reads.service.mjs +152 -0
  485. package/dist/serve/live/live-tables.sql.d.mts +35 -0
  486. package/dist/serve/live/live-tables.sql.mjs +66 -0
  487. package/dist/serve/live/state-reads.pure.d.mts +11 -0
  488. package/dist/serve/live/state-reads.pure.mjs +7 -0
  489. package/dist/serve/rpc/actor-rpc.handlers.d.mts +24 -0
  490. package/dist/serve/rpc/actor-rpc.handlers.mjs +142 -0
  491. package/dist/serve/rpc/akter-server.layer.d.mts +18 -0
  492. package/dist/serve/rpc/akter-server.layer.mjs +61 -0
  493. package/dist/serve/rpc/computer/computer-copy.layer.d.mts +22 -0
  494. package/dist/serve/rpc/computer/computer-copy.layer.mjs +70 -0
  495. package/dist/serve/rpc/computer/computer-rpc-access.pure.d.mts +29 -0
  496. package/dist/serve/rpc/computer/computer-rpc-access.pure.mjs +46 -0
  497. package/dist/serve/rpc/computer/computer-rpc.layer.d.mts +39 -0
  498. package/dist/serve/rpc/computer/computer-rpc.layer.mjs +84 -0
  499. package/dist/serve/rpc/computer/step-rpc.handlers.d.mts +23 -0
  500. package/dist/serve/rpc/computer/step-rpc.handlers.mjs +43 -0
  501. package/dist/serve/rpc/development-authentication.handlers.d.mts +7 -0
  502. package/dist/serve/rpc/development-authentication.handlers.mjs +19 -0
  503. package/dist/serve/rpc/development-guard.pure.d.mts +10 -0
  504. package/dist/serve/rpc/development-guard.pure.mjs +16 -0
  505. package/dist/serve/rpc/file/file-rpc-access.pure.d.mts +55 -0
  506. package/dist/serve/rpc/file/file-rpc-access.pure.mjs +67 -0
  507. package/dist/serve/rpc/file/file-rpc.layer.d.mts +53 -0
  508. package/dist/serve/rpc/file/file-rpc.layer.mjs +143 -0
  509. package/dist/serve/rpc/file/upload-sessions.pure.d.mts +45 -0
  510. package/dist/serve/rpc/file/upload-sessions.pure.mjs +187 -0
  511. package/dist/serve/rpc/in-process-client.layer.d.mts +13 -0
  512. package/dist/serve/rpc/in-process-client.layer.mjs +34 -0
  513. package/dist/serve/rpc/listener-not-loopback.errors.d.mts +9 -0
  514. package/dist/serve/rpc/listener-not-loopback.errors.mjs +7 -0
  515. package/dist/serve/rpc/ndjson-only.pure.d.mts +5 -0
  516. package/dist/serve/rpc/ndjson-only.pure.mjs +14 -0
  517. package/dist/serve/rpc/served-rpc.layer.d.mts +6 -0
  518. package/dist/serve/rpc/served-rpc.layer.mjs +19 -0
  519. package/dist/serve/store/actor-not-migrated.errors.d.mts +10 -0
  520. package/dist/serve/store/actor-not-migrated.errors.mjs +8 -0
  521. package/dist/serve/store/store-migrations.layer.d.mts +5 -0
  522. package/dist/serve/store/store-migrations.layer.mjs +18 -0
  523. package/dist/serve/store/store-migrations.service.d.mts +26 -0
  524. package/dist/serve/store/store-migrations.service.mjs +47 -0
  525. package/dist/serve/store/store-unreadable.errors.d.mts +9 -0
  526. package/dist/serve/store/store-unreadable.errors.mjs +7 -0
  527. package/dist/serve/verify/verify.layer.d.mts +16 -0
  528. package/dist/serve/verify/verify.layer.mjs +36 -0
  529. package/dist/testing/story-driver.service.d.mts +29 -0
  530. package/dist/testing/story-driver.service.mjs +126 -0
  531. package/dist/testing/story.layer.d.mts +21 -0
  532. package/dist/testing/story.layer.mjs +42 -0
  533. package/package.json +106 -3
  534. package/src/contract/actor/actor-already-exists.errors.ts +8 -0
  535. package/src/contract/actor/actor-definition.pure.ts +157 -0
  536. package/src/contract/actor/actor-erased.errors.ts +8 -0
  537. package/src/contract/actor/actor-names.pure.ts +64 -0
  538. package/src/contract/actor/actor-not-created.errors.ts +8 -0
  539. package/src/contract/actor/actor-not-registered.errors.ts +8 -0
  540. package/src/contract/actor/actor-registry.service.ts +35 -0
  541. package/src/contract/actor/actor.contract.ts +409 -0
  542. package/src/contract/actor/host-interface.pure.ts +60 -0
  543. package/src/contract/actor/reserved-member.errors.ts +9 -0
  544. package/src/contract/akter.service.ts +233 -0
  545. package/src/contract/caller/authentication.api.ts +9 -0
  546. package/src/contract/caller/caller-admission.pure.ts +90 -0
  547. package/src/contract/caller/caller-not-allowed.errors.ts +26 -0
  548. package/src/contract/caller/caller.schema.ts +7 -0
  549. package/src/contract/caller/current-caller.service.ts +7 -0
  550. package/src/contract/caller/principal.schema.ts +13 -0
  551. package/src/contract/caller/unauthenticated.errors.ts +8 -0
  552. package/src/contract/client/actor-client.adapter.ts +217 -0
  553. package/src/contract/client/actor-client.contract.ts +53 -0
  554. package/src/contract/client/actor-rpc.contract.ts +91 -0
  555. package/src/contract/client/actor-unavailable.errors.ts +9 -0
  556. package/src/contract/client/client-failure.contract.ts +53 -0
  557. package/src/contract/client/invalid-request.errors.ts +9 -0
  558. package/src/contract/client/storage-limit.errors.ts +16 -0
  559. package/src/contract/command/command-id-expired.errors.ts +11 -0
  560. package/src/contract/command/command-id.schema.ts +5 -0
  561. package/src/contract/command/command.contract.ts +334 -0
  562. package/src/contract/command/outbox-id.pure.ts +25 -0
  563. package/src/contract/command/outbox.schema.ts +11 -0
  564. package/src/contract/command/timer.schema.ts +21 -0
  565. package/src/contract/computer/checkpoint-expired.errors.ts +12 -0
  566. package/src/contract/computer/computer-client-failure.contract.ts +27 -0
  567. package/src/contract/computer/computer-client.adapter.ts +110 -0
  568. package/src/contract/computer/computer-client.contract.ts +75 -0
  569. package/src/contract/computer/computer-held.errors.ts +10 -0
  570. package/src/contract/computer/computer-limit.errors.ts +11 -0
  571. package/src/contract/computer/computer-lost.errors.ts +10 -0
  572. package/src/contract/computer/computer-not-found.errors.ts +9 -0
  573. package/src/contract/computer/computer.schema.ts +159 -0
  574. package/src/contract/computer/computers-unavailable.errors.ts +9 -0
  575. package/src/contract/computer/files/computer-files.schema.ts +31 -0
  576. package/src/contract/computer/rpc/computer-rpc.contract.ts +140 -0
  577. package/src/contract/computer/step/computer-step.contract.ts +126 -0
  578. package/src/contract/computer/step/computer-step.schema.ts +80 -0
  579. package/src/contract/computer/step/step-failure.schema.ts +26 -0
  580. package/src/contract/computer/step/step-not-found.errors.ts +7 -0
  581. package/src/contract/description/published-contract.pure.ts +187 -0
  582. package/src/contract/file/access/file-access-denied.errors.ts +11 -0
  583. package/src/contract/file/access/file-access.contract.ts +56 -0
  584. package/src/contract/file/actor-files.contract.ts +78 -0
  585. package/src/contract/file/blob-transfer.errors.ts +6 -0
  586. package/src/contract/file/file-client-failure.contract.ts +43 -0
  587. package/src/contract/file/file-client.adapter.ts +45 -0
  588. package/src/contract/file/file-client.contract.ts +24 -0
  589. package/src/contract/file/file-listing.pure.ts +30 -0
  590. package/src/contract/file/file-not-found.errors.ts +6 -0
  591. package/src/contract/file/file-path.pure.ts +37 -0
  592. package/src/contract/file/files-unavailable.errors.ts +8 -0
  593. package/src/contract/file/invalid-file-request.errors.ts +9 -0
  594. package/src/contract/file/rpc/file-rpc.contract.ts +148 -0
  595. package/src/contract/file/rpc/file-too-large.errors.ts +10 -0
  596. package/src/contract/file/rpc/rpc-file-clients.layer.ts +184 -0
  597. package/src/contract/fork/fork-rpc.contract.ts +44 -0
  598. package/src/contract/history/actor-journal.service.ts +195 -0
  599. package/src/contract/history/history-entry.pure.ts +282 -0
  600. package/src/contract/hosted/handler-failed.errors.ts +16 -0
  601. package/src/contract/hosted/handler-failure.pure.ts +161 -0
  602. package/src/contract/hosted/hosted-actor.service.ts +97 -0
  603. package/src/contract/hosted/hosted-command.service.ts +114 -0
  604. package/src/contract/hosted/hosted-create.service.ts +95 -0
  605. package/src/contract/hosted/hosted-error.contract.ts +22 -0
  606. package/src/contract/hosted/hosted-failure.schema.ts +32 -0
  607. package/src/contract/hosted/hosted-outcome.contract.ts +21 -0
  608. package/src/contract/hosted/hosted-query.service.ts +50 -0
  609. package/src/contract/hosted/hosted-request.pure.ts +185 -0
  610. package/src/contract/job/job-id.pure.ts +37 -0
  611. package/src/contract/job/job-patches.contract.ts +86 -0
  612. package/src/contract/job/job-signal.schema.ts +23 -0
  613. package/src/contract/job/reserved-payload-field.errors.ts +10 -0
  614. package/src/contract/job/started-job.schema.ts +9 -0
  615. package/src/contract/json-codec.pure.ts +27 -0
  616. package/src/contract/room.contract.ts +31 -0
  617. package/src/contract/secret/actor-secrets.adapter.ts +87 -0
  618. package/src/contract/secret/invalid-secret-name.errors.ts +10 -0
  619. package/src/contract/secret/secret-unavailable.errors.ts +13 -0
  620. package/src/contract/secret/secret.schema.ts +43 -0
  621. package/src/contract/spend/billing-unavailable.errors.ts +12 -0
  622. package/src/contract/spend/spend-cap-reached.errors.ts +17 -0
  623. package/src/contract/state/actor-state.pure.ts +192 -0
  624. package/src/contract/state/actor-state.service.ts +69 -0
  625. package/src/contract/state/state-migration.pure.ts +57 -0
  626. package/src/contract/state/state-read.pure.ts +40 -0
  627. package/src/contract/state/state-unreadable.errors.ts +9 -0
  628. package/src/host/actor/actor-database.service.ts +145 -0
  629. package/src/host/actor/actor-exclusive.pure.ts +32 -0
  630. package/src/host/actor/actor-records.sql.ts +78 -0
  631. package/src/host/actor/reserved-name.errors.ts +10 -0
  632. package/src/host/actor/reserved-names.pure.ts +40 -0
  633. package/src/host/actor/room.actor.ts +57 -0
  634. package/src/host/blob/blob-frames.pure.ts +52 -0
  635. package/src/host/blob/blob-grant.schema.ts +22 -0
  636. package/src/host/blob/blob-grants.service.ts +197 -0
  637. package/src/host/blob/blob-keyring.service.ts +25 -0
  638. package/src/host/blob/blob-range.pure.ts +33 -0
  639. package/src/host/blob/blob-sealing.contract.ts +46 -0
  640. package/src/host/blob/blob-sealing.service.ts +25 -0
  641. package/src/host/blob/export/blob-archive.sql.ts +153 -0
  642. package/src/host/blob/export/blob-export-holds.sql.ts +91 -0
  643. package/src/host/blob/plain-blob-sealing.pure.ts +70 -0
  644. package/src/host/blob/reference/blob-catalog.sql.ts +339 -0
  645. package/src/host/blob/reference/blob-coordinator.pure.ts +217 -0
  646. package/src/host/blob/reference/blob-file-page.sql.ts +48 -0
  647. package/src/host/blob/reference/blob-forks.sql.ts +125 -0
  648. package/src/host/blob/reference/blob-lineage.sql.ts +63 -0
  649. package/src/host/blob/reference/blob-reads.pure.ts +172 -0
  650. package/src/host/blob/reference/blob-receipts.sql.ts +375 -0
  651. package/src/host/blob/reference/blob-transfer-adopt.pure.ts +127 -0
  652. package/src/host/blob/reference/blob-transfer-fork.pure.ts +174 -0
  653. package/src/host/blob/reference/blob-transfer-upkeep.pure.ts +132 -0
  654. package/src/host/blob/reference/blob-transfer.pure.ts +127 -0
  655. package/src/host/blob/sealed-blob-sealing.pure.ts +163 -0
  656. package/src/host/blob/stream/blob-directory.pure.ts +177 -0
  657. package/src/host/blob/stream/blob-length.pure.ts +40 -0
  658. package/src/host/blob/stream/blob-writing.pure.ts +49 -0
  659. package/src/host/command/batch/command-batch.sql.ts +207 -0
  660. package/src/host/command/command-context.adapter.ts +134 -0
  661. package/src/host/command/command-id-age.pure.ts +54 -0
  662. package/src/host/command/command-id-reuse.pure.ts +90 -0
  663. package/src/host/command/command-id-reused.errors.ts +13 -0
  664. package/src/host/command/command-journal.sql.ts +232 -0
  665. package/src/host/command/command-rejected.errors.ts +8 -0
  666. package/src/host/command/command-replay.service.ts +223 -0
  667. package/src/host/command/command-reply.pure.ts +21 -0
  668. package/src/host/command/command-runner.service.ts +320 -0
  669. package/src/host/command/files/command-file-inputs.sql.ts +114 -0
  670. package/src/host/command/history-pruned.errors.ts +10 -0
  671. package/src/host/command/replay/replay-cursor-stalled.errors.ts +9 -0
  672. package/src/host/command/replay/replay-cursor.pure.ts +19 -0
  673. package/src/host/computer/computer-steps.sql.ts +120 -0
  674. package/src/host/computer/job-computers.service.ts +84 -0
  675. package/src/host/computer/local-computer-files.layer.ts +103 -0
  676. package/src/host/computer/local-computer-log.layer.ts +115 -0
  677. package/src/host/computer/local-computer-records.layer.ts +205 -0
  678. package/src/host/computer/local-computer.schema.ts +36 -0
  679. package/src/host/computer/local-computers.adapter.ts +379 -0
  680. package/src/host/computer/local-step.layer.ts +174 -0
  681. package/src/host/file/actor-file-storage.sql.ts +79 -0
  682. package/src/host/file/actor-files.sql.ts +15 -0
  683. package/src/host/file/blob-home-lock.pure.ts +23 -0
  684. package/src/host/file/blob-home.sql.ts +55 -0
  685. package/src/host/file/local-blob-home.service.ts +71 -0
  686. package/src/host/file/local-blob-owner.sql.ts +89 -0
  687. package/src/host/file/local-file-upkeep.pure.ts +77 -0
  688. package/src/host/file/replay-file-storage.sql.ts +43 -0
  689. package/src/host/fork/actor-fork.sql.ts +110 -0
  690. package/src/host/fork/fork-computers.adapter.ts +366 -0
  691. package/src/host/hash/blob-hashing.service.ts +14 -0
  692. package/src/host/job/job-durables.sql.ts +214 -0
  693. package/src/host/job/job-engine.adapter.ts +420 -0
  694. package/src/host/job/job-journal.sql.ts +257 -0
  695. package/src/host/job/job-results.service.ts +111 -0
  696. package/src/host/job/job-runs.pure.ts +445 -0
  697. package/src/host/job/undelivered-result.pure.ts +265 -0
  698. package/src/host/layout/actor-layout.sql.ts +45 -0
  699. package/src/host/layout/layout-version.errors.ts +10 -0
  700. package/src/host/layout/layout-version.pure.ts +22 -0
  701. package/src/host/migration/actor-migrations.service.ts +159 -0
  702. package/src/host/migration/migration-edited.errors.ts +9 -0
  703. package/src/host/migration/migration-failed.errors.ts +12 -0
  704. package/src/host/migration/migration-failure.pure.ts +28 -0
  705. package/src/host/migration/migration-hasher.adapter.ts +70 -0
  706. package/src/host/migration/migration-missing.errors.ts +9 -0
  707. package/src/host/migration/migration-plan.pure.ts +66 -0
  708. package/src/host/outbox/actor-outbox.sql.ts +98 -0
  709. package/src/host/outbox/outbox-acknowledgements.sql.ts +93 -0
  710. package/src/host/outbox/outbox-runner.service.ts +253 -0
  711. package/src/host/query/query-policy.pure.ts +31 -0
  712. package/src/host/query/query-runner.service.ts +132 -0
  713. package/src/host/sqlite/actor-connections.pure.ts +44 -0
  714. package/src/host/sqlite/sqlite-connection.adapter.ts +260 -0
  715. package/src/host/sqlite/sqlite-driver.service.ts +151 -0
  716. package/src/host/sqlite/sqlite-parameters.pure.ts +28 -0
  717. package/src/host/sqlite/sqlite-reason.pure.ts +19 -0
  718. package/src/host/timer/actor-timers.sql.ts +67 -0
  719. package/src/host/timer/timer-runner.service.ts +117 -0
  720. package/src/host/upkeep/actor-due.sql.ts +71 -0
  721. package/src/host/upkeep/actor-upkeep.service.ts +404 -0
  722. package/src/host/upkeep/execution-authority.pure.ts +37 -0
  723. package/src/runtime/akter-local.layer.ts +49 -0
  724. package/src/runtime/akter.layer.ts +208 -0
  725. package/src/runtime/blob-hashing.layer.ts +21 -0
  726. package/src/runtime/hosted-environment.layer.ts +85 -0
  727. package/src/runtime/http-server.layer.ts +29 -0
  728. package/src/runtime/local-actor-engine.layer.ts +33 -0
  729. package/src/runtime/local-engine.layer.ts +37 -0
  730. package/src/runtime/local-environments.layer.ts +214 -0
  731. package/src/runtime/local-file-clients.layer.ts +112 -0
  732. package/src/runtime/local-job-runtime.layer.ts +38 -0
  733. package/src/serve/archive/archived-actors.layer.ts +97 -0
  734. package/src/serve/archive/archived-store.layer.ts +46 -0
  735. package/src/serve/engine/actor-engine.layer.ts +46 -0
  736. package/src/serve/engine/actor-fork.service.ts +403 -0
  737. package/src/serve/engine/actor-holding.pure.ts +28 -0
  738. package/src/serve/engine/actor-host.service.ts +454 -0
  739. package/src/serve/engine/actor-location.service.ts +219 -0
  740. package/src/serve/engine/actor-residents.pure.ts +500 -0
  741. package/src/serve/engine/actor-shard.pure.ts +13 -0
  742. package/src/serve/engine/actor-state.pure.ts +45 -0
  743. package/src/serve/engine/actors-not-hosted.errors.ts +9 -0
  744. package/src/serve/engine/job-runtime.layer.ts +13 -0
  745. package/src/serve/environment/environment-already-exists.errors.ts +9 -0
  746. package/src/serve/environment/environment-in-use.errors.ts +17 -0
  747. package/src/serve/environment/environment-not-found.errors.ts +9 -0
  748. package/src/serve/environment/environment-records.sql.ts +208 -0
  749. package/src/serve/environment/environment-store.sql.ts +116 -0
  750. package/src/serve/environment/local-environment.schema.ts +79 -0
  751. package/src/serve/environment/local-environments.service.ts +268 -0
  752. package/src/serve/environment/promotion-notice.pure.ts +63 -0
  753. package/src/serve/environment/snapshot-operations.sql.ts +210 -0
  754. package/src/serve/environment/store-snapshot.sql.ts +128 -0
  755. package/src/serve/erasure/local-actor-erasure.service.ts +170 -0
  756. package/src/serve/history/actor-host-runners.service.ts +85 -0
  757. package/src/serve/hosted/hosted-app-build.errors.ts +11 -0
  758. package/src/serve/hosted/hosted-app-checks.layer.ts +74 -0
  759. package/src/serve/hosted/hosted-file-forward.layer.ts +63 -0
  760. package/src/serve/hosted/hosted-file-rpcs.layer.ts +149 -0
  761. package/src/serve/hosted/hosted-file-server.layer.ts +75 -0
  762. package/src/serve/hosted/hosted-files.layer.ts +76 -0
  763. package/src/serve/hosted/hosted-runtime.layer.ts +145 -0
  764. package/src/serve/hosted/hosted-runtime.service.ts +128 -0
  765. package/src/serve/hosted/hosted-secrets.layer.ts +38 -0
  766. package/src/serve/http/loopback-host.pure.ts +67 -0
  767. package/src/serve/inspect/actor-inspection.schema.ts +94 -0
  768. package/src/serve/inspect/actor-inspection.sql.ts +112 -0
  769. package/src/serve/inspect/inspect.service.ts +173 -0
  770. package/src/serve/inspect/inspector-page.pure.ts +159 -0
  771. package/src/serve/inspect/inspector-wal.pure.ts +40 -0
  772. package/src/serve/inspect/inspector.handlers.ts +103 -0
  773. package/src/serve/inspect/inspector.layer.ts +26 -0
  774. package/src/serve/live/live-reads.service.ts +285 -0
  775. package/src/serve/live/live-tables.sql.ts +148 -0
  776. package/src/serve/live/state-reads.pure.ts +22 -0
  777. package/src/serve/rpc/actor-rpc.handlers.ts +242 -0
  778. package/src/serve/rpc/akter-server.layer.ts +119 -0
  779. package/src/serve/rpc/computer/computer-copy.layer.ts +95 -0
  780. package/src/serve/rpc/computer/computer-rpc-access.pure.ts +75 -0
  781. package/src/serve/rpc/computer/computer-rpc.layer.ts +143 -0
  782. package/src/serve/rpc/computer/step-rpc.handlers.ts +84 -0
  783. package/src/serve/rpc/development-authentication.handlers.ts +28 -0
  784. package/src/serve/rpc/development-guard.pure.ts +39 -0
  785. package/src/serve/rpc/file/file-rpc-access.pure.ts +119 -0
  786. package/src/serve/rpc/file/file-rpc.layer.ts +209 -0
  787. package/src/serve/rpc/file/upload-sessions.pure.ts +363 -0
  788. package/src/serve/rpc/in-process-client.layer.ts +62 -0
  789. package/src/serve/rpc/listener-not-loopback.errors.ts +9 -0
  790. package/src/serve/rpc/ndjson-only.pure.ts +33 -0
  791. package/src/serve/rpc/served-rpc.layer.ts +34 -0
  792. package/src/serve/store/actor-not-migrated.errors.ts +10 -0
  793. package/src/serve/store/store-migrations.layer.ts +35 -0
  794. package/src/serve/store/store-migrations.service.ts +76 -0
  795. package/src/serve/store/store-unreadable.errors.ts +9 -0
  796. package/src/serve/verify/verify.layer.ts +77 -0
  797. package/src/testing/story-driver.service.ts +266 -0
  798. package/src/testing/story.layer.ts +99 -0
@@ -0,0 +1,63 @@
1
+ import { Caller, actorKind } from "../../contract/caller/caller.schema.mjs";
2
+ import { jsonCodec } from "../../contract/json-codec.pure.mjs";
3
+ import { CommandRunner } from "../command/command-runner.service.mjs";
4
+ import { resultCommandId } from "../command/command-id-reuse.pure.mjs";
5
+ import { markUndelivered, readEntry, saveResult } from "./job-journal.sql.mjs";
6
+ import { settling, stalling } from "./undelivered-result.pure.mjs";
7
+ import { Context, Effect, Layer, Option, Schema, String, identity } from "effect";
8
+ import { SqlError } from "effect/sql";
9
+ // src/host/job/job-results.service.ts
10
+ /** A result command's journaled exit, when its handler failed or died. */
11
+ const failedExit = Schema.decodeUnknownOption(Schema.fromJsonString(Schema.TaggedStruct("Failure", { cause: Schema.Unknown })));
12
+ /** The job's result is kept and the job closes, but a failed handler's state change is lost, so say why. */
13
+ const handlerFailed = (delivering) => (failed) => Effect.forEach(Option.toArray(failed), (cause) => Effect.annotateLogs(Effect.logError("a job's result handler failed, so its state change was not applied", cause), { ...delivering }), { discard: true });
14
+ const delivering = (runner) => Effect.fn("JobResults.deliver")(function* deliver({ executionId, job, key, measured = identity, opened, result }) {
15
+ const actor = opened.actor.name;
16
+ const prefix = `${actor}/`;
17
+ if (!String.startsWith(prefix)(job)) return yield* Effect.die(`${job} is not a job of ${actor}`);
18
+ const principal = yield* Effect.orDie(Schema.encodeEffect(jsonCodec(Caller))({
19
+ kind: actorKind,
20
+ principal: {
21
+ actor,
22
+ id: `${actor}/${key}`,
23
+ key
24
+ }
25
+ }));
26
+ const command = runner.result({
27
+ opened,
28
+ request: {
29
+ commandId: resultCommandId(executionId),
30
+ job: String.slice(prefix.length)(job),
31
+ key,
32
+ payload: result,
33
+ principal
34
+ }
35
+ }).pipe(Effect.map((reply) => failedExit(reply).pipe(Option.map(({ cause }) => cause))), Effect.catchIf((failure) => !SqlError.isSqlError(failure), (failure) => Effect.succeedSome(failure)), Effect.flatMap(handlerFailed({
36
+ actor,
37
+ executionId,
38
+ job,
39
+ key
40
+ })));
41
+ return yield* opened.sql.withTransaction(Effect.andThen(saveResult({
42
+ executionId,
43
+ sql: opened.sql,
44
+ value: result
45
+ }), measured(command)));
46
+ });
47
+ var JobResults = class extends Context.Service()("@akterjs/effect/host/job/job-results.service/JobResults", { make: Effect.gen(function* makeJobResults() {
48
+ const runner = yield* CommandRunner;
49
+ const deliver = delivering(runner);
50
+ const delivery = {
51
+ deliver,
52
+ mark: markUndelivered,
53
+ read: readEntry
54
+ };
55
+ return {
56
+ deliver,
57
+ settle: settling(delivery),
58
+ stall: stalling(delivery)
59
+ };
60
+ }) }) {
61
+ static layer = Layer.effect(this, this.make).pipe(Layer.provide(CommandRunner.layer));
62
+ };
63
+ export { JobResults };
@@ -0,0 +1,103 @@
1
+ import { ExecutionGuard } from "../upkeep/execution-authority.pure.mjs";
2
+ import { Cause, Deferred, Effect, Exit, Fiber, FiberMap, MutableHashMap, Option, Scope } from "effect";
3
+ import { Workflow, WorkflowEngine } from "effect/workflow";
4
+ import { SqlClient } from "effect/sql";
5
+ type Execute = Parameters<WorkflowEngine.Encoded["register"]> extends readonly [Workflow.Any, infer Run] ? Run : never;
6
+ type Payload = Parameters<Execute> extends readonly [infer Input, string] ? Input : never;
7
+ type WakeMode = "explicit" | "automatic";
8
+ type RunResult = Workflow.Result<unknown, unknown>;
9
+ type RunExit = Exit.Exit<RunResult>;
10
+ type Instance = WorkflowEngine.WorkflowInstance["Service"];
11
+ interface FinishedJob {
12
+ readonly executionId: string;
13
+ readonly job: string;
14
+ readonly result: string;
15
+ }
16
+ /** A job's run that ended with no result stored while its store was still attached, and why. */
17
+ interface StalledJob {
18
+ readonly cause: Cause.Cause<unknown>;
19
+ readonly executionId: string;
20
+ readonly job: string;
21
+ }
22
+ interface JobStore {
23
+ readonly id: string;
24
+ readonly authority: ExecutionGuard;
25
+ readonly exclusive: <Success, Failure, Needs>(effect: Effect.Effect<Success, Failure, Needs>) => Effect.Effect<Success, Failure, Needs>;
26
+ readonly finish: (finished: FinishedJob) => Effect.Effect<void>;
27
+ /** Records a stalled run and schedules its next round; the engine has already forgotten the run. */
28
+ readonly stalled: (stalled: StalledJob) => Effect.Effect<void>;
29
+ readonly withSql: <Success, Failure, Needs>(use: (sql: SqlClient.SqlClient) => Effect.Effect<Success, Failure, Needs>) => Effect.Effect<Success, Failure, Needs>;
30
+ }
31
+ /** A job whose run is suspended now, and the journal entries it waits on (`deferred/<name>`). */
32
+ interface Parked {
33
+ readonly id: string;
34
+ readonly waits: readonly string[];
35
+ }
36
+ interface Registered {
37
+ readonly execute: Execute;
38
+ readonly scope: Scope.Scope;
39
+ readonly workflow: Workflow.Any;
40
+ }
41
+ interface Execution {
42
+ /** When each activity of this run executing now started: while any is, its actor shouldn't close. */
43
+ readonly activities: number[];
44
+ readonly clocks: Set<string>;
45
+ readonly done: Deferred.Deferred<void>;
46
+ readonly executionId: string;
47
+ fiber: Option.Option<Fiber.Fiber<RunResult>>;
48
+ instance: Instance;
49
+ interrupted: boolean;
50
+ interruptedUnsafe: boolean;
51
+ readonly payload: Payload;
52
+ rerun: Option.Option<WakeMode>;
53
+ readonly scope: Scope.Closeable;
54
+ readonly store: JobStore;
55
+ /** Deferreds the current run read and found no result for, so a signal stored later has to wake it. */
56
+ readonly waiting: Set<string>;
57
+ readonly workflow: Workflow.Any;
58
+ }
59
+ interface Runs {
60
+ readonly clocks: FiberMap.FiberMap<string>;
61
+ readonly deferreds: WorkflowEngine.DeferredState;
62
+ readonly detached: WeakSet<JobStore>;
63
+ readonly executions: MutableHashMap.MutableHashMap<string, Execution>;
64
+ readonly owned: Map<JobStore, Set<Execution>>;
65
+ readonly record: (execution: Execution, exit: Exit.Exit<unknown, unknown>) => Effect.Effect<void>;
66
+ readonly registered: MutableHashMap.MutableHashMap<string, Registered>;
67
+ readonly scope: Scope.Scope;
68
+ readonly workflowEngine: Deferred.Deferred<WorkflowEngine.WorkflowEngine["Service"]>;
69
+ }
70
+ interface Waking {
71
+ readonly executionId: string;
72
+ readonly mode: WakeMode;
73
+ readonly runs: Runs;
74
+ }
75
+ interface Starting {
76
+ readonly executionId: string;
77
+ readonly payload: Payload;
78
+ readonly runs: Runs;
79
+ readonly store: JobStore;
80
+ readonly workflow: Workflow.Any;
81
+ }
82
+ declare const nameOf: ({ _tag: name }: Workflow.Any) => string;
83
+ declare const lastExit: (execution: Execution) => Option.Option<RunExit>;
84
+ declare const resume: (waking: Waking) => Effect.Effect<void>;
85
+ declare const startExecution: ({ executionId, payload, runs, store, workflow }: Starting) => Effect.Effect<void>;
86
+ declare const detachStore: ({ runs, store }: {
87
+ readonly runs: Runs;
88
+ readonly store: JobStore;
89
+ }) => Effect.Effect<void>;
90
+ interface Clocking {
91
+ readonly executionId: string;
92
+ readonly name: string;
93
+ readonly runs: Runs;
94
+ }
95
+ declare const trackedClock: ({ executionId, name, runs }: Clocking) => Effect.Effect<string>;
96
+ /**
97
+ * The journal entries a run waits on, when it is suspended now with no rerun asked for: a signal or a clock wakes it,
98
+ * so nothing is due for it until one of those entries is stored.
99
+ */
100
+ declare const parkedOn: (execution: Execution) => Option.Option<Parked["waits"]>;
101
+ declare const awaitRun: (execution: Execution) => Effect.Effect<RunResult>;
102
+ declare const settled: (execution: Execution) => Effect.Effect<boolean>;
103
+ export { type Execute, type Execution, type FinishedJob, type JobStore, type Parked, type Payload, type Registered, type RunResult, type Runs, type StalledJob, type WakeMode, awaitRun, detachStore, lastExit, nameOf, parkedOn, resume, settled, startExecution, trackedClock };
@@ -0,0 +1,193 @@
1
+ import { Array, Cause, Context, Deferred, Effect, Exit, Fiber, FiberMap, MutableHashMap, Option, Predicate, Scope } from "effect";
2
+ import { Workflow, WorkflowEngine } from "effect/workflow";
3
+ // src/host/job/job-runs.pure.ts
4
+ const noneLeft = 0;
5
+ const nameOf = ({ _tag: name }) => name;
6
+ const isSuspended = (result) => Predicate.isTagged(result, "Suspended");
7
+ const isUnwakeable = (result, mode) => Predicate.isTagged(result, "Complete") || mode === "automatic" && result.failed === true;
8
+ const resultOf = (exit) => Exit.getSuccess(exit);
9
+ const lastExit = (execution) => Option.flatMap(execution.fiber, (fiber) => Option.fromNullishOr(fiber.pollUnsafe()));
10
+ const runningFiber = (execution) => Option.filter(execution.fiber, (fiber) => Predicate.isUndefined(fiber.pollUnsafe()));
11
+ const suspendsOnFailure = (instance, exit) => Context.get(instance.workflow.annotations, Workflow.SuspendOnFailure) && Exit.isFailure(exit);
12
+ const interruptsRun = (execution, instance, exit) => execution.interrupted && (execution.interruptedUnsafe || instance.suspended || instance.abandoned || suspendsOnFailure(instance, exit));
13
+ const interruptOnExit = (execution, instance) => (exit) => {
14
+ if (!interruptsRun(execution, instance, exit)) return Effect.void;
15
+ instance.interrupted = true;
16
+ instance.suspended = false;
17
+ return Effect.withFiber((fiber) => Effect.interruptible(Fiber.interrupt(fiber)));
18
+ };
19
+ const recordResult = ({ execution, runs }) => (result) => {
20
+ if (Predicate.isTagged(result, "Suspended")) return Effect.void;
21
+ return runs.record(execution, result.exit);
22
+ };
23
+ const track = (runs, execution) => {
24
+ const mine = runs.owned.get(execution.store) ?? /* @__PURE__ */ new Set();
25
+ mine.add(execution);
26
+ runs.owned.set(execution.store, mine);
27
+ MutableHashMap.set(runs.executions, execution.executionId, execution);
28
+ };
29
+ const forget = ({ execution, runs }) => {
30
+ const mine = runs.owned.get(execution.store);
31
+ mine?.delete(execution);
32
+ if (mine?.size === noneLeft) runs.owned.delete(execution.store);
33
+ if (Option.contains(MutableHashMap.get(runs.executions, execution.executionId), execution)) MutableHashMap.remove(runs.executions, execution.executionId);
34
+ };
35
+ /**
36
+ * A run that died with no result while its store is still attached, such as a defect recording its result, is
37
+ * stalled: the engine forgets it so it can start again, and the store records it and schedules its next round. A job's
38
+ * own defects never get here; they come back to the actor as its failed result.
39
+ */
40
+ const stalledRun = ({ execution, runs }, exit) => Effect.suspend(() => {
41
+ if (Exit.isSuccess(exit) || Cause.hasInterruptsOnly(exit.cause) || runs.detached.has(execution.store)) return Effect.void;
42
+ forget({
43
+ execution,
44
+ runs
45
+ });
46
+ return execution.store.stalled({
47
+ cause: exit.cause,
48
+ executionId: execution.executionId,
49
+ job: nameOf(execution.workflow)
50
+ });
51
+ });
52
+ const finished = ({ execution, runs }) => (exit) => {
53
+ const result = resultOf(exit);
54
+ if (Option.exists(result, isSuspended)) return Effect.void;
55
+ const closed = Scope.close(execution.scope, Exit.void);
56
+ if (Option.exists(result, (found) => Predicate.isTagged(found, "Complete"))) {
57
+ const done = Effect.andThen(closed, Deferred.done(execution.done, Exit.void));
58
+ return Effect.andThen(done, Effect.sync(() => {
59
+ forget({
60
+ execution,
61
+ runs
62
+ });
63
+ }));
64
+ }
65
+ return Effect.andThen(closed, stalledRun({
66
+ execution,
67
+ runs
68
+ }, exit));
69
+ };
70
+ const runOf = (running, { execute }, instance) => {
71
+ const { execution, runs } = running;
72
+ return execute(execution.payload, execution.executionId).pipe(execution.store.authority, Effect.onExit(interruptOnExit(execution, instance)), Workflow.intoResult, Effect.provideServiceEffect(WorkflowEngine.WorkflowEngine, Deferred.await(runs.workflowEngine)), (effect) => runs.deferreds.trackRun(instance, effect), Effect.tap(recordResult(running)), Effect.onExit(finished(running)));
73
+ };
74
+ const launch = (running, entry) => {
75
+ const { execution } = running;
76
+ const scope = Scope.forkUnsafe(execution.scope);
77
+ const instance = WorkflowEngine.WorkflowInstance.initial(execution.workflow, execution.executionId, { scope });
78
+ execution.instance = instance;
79
+ execution.waiting.clear();
80
+ return Effect.map(Effect.forkIn(runOf(running, entry, instance), entry.scope), (fiber) => {
81
+ execution.fiber = Option.some(fiber);
82
+ });
83
+ };
84
+ const startRun = (running) => running.execution.store.authority(Effect.suspend(() => Option.match(MutableHashMap.get(running.runs.registered, nameOf(running.execution.workflow)), {
85
+ onNone: () => Effect.void,
86
+ onSome: (entry) => launch(running, entry)
87
+ })));
88
+ const wakeIdle = (running, mode) => {
89
+ const done = Option.flatMap(lastExit(running.execution), resultOf);
90
+ if (Option.exists(done, (result) => isUnwakeable(result, mode))) return Effect.void;
91
+ return startRun(running);
92
+ };
93
+ const requestRerun = (execution, mode) => {
94
+ const requested = execution.rerun;
95
+ if (!Option.contains(requested, "explicit")) execution.rerun = Option.some(mode);
96
+ return Option.isNone(requested);
97
+ };
98
+ const takeRerun = (execution) => {
99
+ const mode = Option.getOrElse(execution.rerun, () => "automatic");
100
+ execution.rerun = Option.none();
101
+ return mode;
102
+ };
103
+ const resume = (waking) => Effect.suspend(() => Option.match(MutableHashMap.get(waking.runs.executions, waking.executionId), {
104
+ onNone: () => Effect.void,
105
+ onSome: (execution) => execution.store.authority(Option.match(runningFiber(execution), {
106
+ onNone: () => wakeIdle({
107
+ execution,
108
+ runs: waking.runs
109
+ }, waking.mode),
110
+ onSome: (fiber) => {
111
+ if (!requestRerun(execution, waking.mode)) return Effect.void;
112
+ const again = Effect.suspend(() => resume({
113
+ ...waking,
114
+ mode: takeRerun(execution)
115
+ }));
116
+ const rerun = Effect.andThen(Fiber.await(fiber), again);
117
+ return Effect.asVoid(Effect.forkIn(rerun, waking.runs.scope));
118
+ }
119
+ }))
120
+ }));
121
+ const startExecution = ({ executionId, payload, runs, store, workflow }) => Effect.suspend(() => {
122
+ if (runs.detached.has(store) || MutableHashMap.has(runs.executions, executionId)) return Effect.void;
123
+ const execution = {
124
+ activities: [],
125
+ clocks: /* @__PURE__ */ new Set(),
126
+ done: Deferred.makeUnsafe(),
127
+ executionId,
128
+ fiber: Option.none(),
129
+ instance: WorkflowEngine.WorkflowInstance.initial(workflow, executionId),
130
+ interrupted: false,
131
+ interruptedUnsafe: false,
132
+ payload,
133
+ rerun: Option.none(),
134
+ scope: Scope.makeUnsafe(),
135
+ store,
136
+ waiting: /* @__PURE__ */ new Set(),
137
+ workflow
138
+ };
139
+ track(runs, execution);
140
+ return resume({
141
+ executionId,
142
+ mode: "explicit",
143
+ runs
144
+ });
145
+ });
146
+ const detachRun = ({ execution, runs }) => Effect.gen(function* detachingRun() {
147
+ forget({
148
+ execution,
149
+ runs
150
+ });
151
+ yield* Option.match(execution.fiber, {
152
+ onNone: () => Effect.void,
153
+ onSome: Fiber.interrupt
154
+ });
155
+ yield* Effect.forEach(execution.clocks, (clock) => FiberMap.remove(runs.clocks, clock), { discard: true });
156
+ yield* Scope.close(execution.scope, Exit.void);
157
+ });
158
+ const detachStore = ({ runs, store }) => Effect.suspend(() => {
159
+ runs.detached.add(store);
160
+ const mine = Array.fromIterable(runs.owned.get(store) ?? []);
161
+ return Effect.forEach(mine, (execution) => detachRun({
162
+ execution,
163
+ runs
164
+ }), { discard: true });
165
+ });
166
+ const trackedClock = ({ executionId, name, runs }) => Effect.sync(() => {
167
+ const key = `${executionId}/${name}`;
168
+ Option.map(MutableHashMap.get(runs.executions, executionId), (execution) => execution.clocks.add(key));
169
+ return key;
170
+ });
171
+ /**
172
+ * The journal entries a run waits on, when it is suspended now with no rerun asked for: a signal or a clock wakes it,
173
+ * so nothing is due for it until one of those entries is stored.
174
+ */
175
+ const parkedOn = (execution) => lastExit(execution).pipe(Option.flatMap(resultOf), Option.filter((result) => isSuspended(result) && Option.isNone(execution.rerun)), Option.map(() => Array.map(Array.fromIterable(execution.waiting), (name) => `deferred/${name}`)));
176
+ const awaitRun = (execution) => Effect.gen(function* awaiting() {
177
+ const { fiber, instance } = execution;
178
+ if (Option.isNone(fiber)) return yield* Effect.die(`job ${execution.executionId} has no handler registered yet`);
179
+ const exit = yield* Fiber.await(fiber.value);
180
+ if (Exit.isFailure(exit) && Cause.hasInterruptsOnly(exit.cause) && instance.suspended) return Workflow.Suspended.make({});
181
+ return yield* exit;
182
+ });
183
+ const settled = (execution) => Effect.suspend(() => {
184
+ const busy = Option.filter(execution.fiber, () => Option.isNone(lastExit(execution)) || Option.isSome(execution.rerun));
185
+ return Option.match(busy, {
186
+ onNone: () => Effect.succeed(false),
187
+ onSome: (fiber) => {
188
+ const again = Effect.andThen(Effect.yieldNow, settled(execution));
189
+ return Effect.as(Effect.andThen(Fiber.await(fiber), again), true);
190
+ }
191
+ });
192
+ });
193
+ export { awaitRun, detachStore, lastExit, nameOf, parkedOn, resume, settled, startExecution, trackedClock };
@@ -0,0 +1,49 @@
1
+ import { StorageLimitError } from "../../contract/client/storage-limit.errors.mjs";
2
+ import { OpenedActor } from "../actor/actor-database.service.mjs";
3
+ import { CeilingGuard } from "../upkeep/execution-authority.pure.mjs";
4
+ import { FinishedJob, StalledJob } from "./job-runs.pure.mjs";
5
+ import { Effect, Option } from "effect";
6
+ import { SqlClient, SqlError } from "effect/sql";
7
+ interface Finishing extends FinishedJob {
8
+ readonly key: string;
9
+ /**
10
+ * Runs the result's command against the store's storage ceiling, or undefined where there is none. Required, so a
11
+ * caller can't drop the store's ceiling by leaving it out.
12
+ */
13
+ readonly measured: CeilingGuard | undefined;
14
+ readonly opened: OpenedActor;
15
+ }
16
+ /** Why storing a result failed: its SQL, or the storage ceiling refusing a result command that grew the database. */
17
+ type Unstored = SqlError.SqlError | StorageLimitError;
18
+ interface Stalling extends StalledJob {
19
+ readonly key: string;
20
+ readonly opened: OpenedActor;
21
+ }
22
+ /** Runs one delivery attempt under the actor's execution authority and its exclusive lock. */
23
+ type Guard = <Success, Failure>(effect: Effect.Effect<Success, Failure>) => Effect.Effect<Success, Failure>;
24
+ interface Entry {
25
+ readonly executionId: string;
26
+ readonly sql: SqlClient.SqlClient;
27
+ }
28
+ /** The delivery and the two journal statements it needs, from the job's SQL. */
29
+ interface Delivery {
30
+ readonly deliver: (finishing: Finishing) => Effect.Effect<void, Unstored>;
31
+ readonly mark: (entry: Entry & {
32
+ readonly value: string;
33
+ }) => Effect.Effect<void, SqlError.SqlError>;
34
+ readonly read: (entry: Entry & {
35
+ readonly entry: string;
36
+ }) => Effect.Effect<Option.Option<string>, SqlError.SqlError>;
37
+ }
38
+ /**
39
+ * Delivers with a round of retries. A spent round returns, so the job's run ends and the engine forgets it; the
40
+ * journal keeps it open with its next round's due time.
41
+ */
42
+ declare const settling: (delivery: Delivery) => ((finishing: Finishing, guard: Guard) => Effect.Effect<void>);
43
+ /**
44
+ * A run that ended before its result was stored (a batch that failed under it, or a result it couldn't record) spends
45
+ * a round the same way: one more attempt, and the job is due again at its next round. The log carries the cause, so
46
+ * a bug shows as well as a full disk.
47
+ */
48
+ declare const stalling: (delivery: Delivery) => (stalled: Stalling, guard: Guard) => Effect.Effect<void, SqlError.SqlError>;
49
+ export { type Finishing, type Guard, type Stalling, type Unstored, settling, stalling };
@@ -0,0 +1,147 @@
1
+ import { StorageLimitError } from "../../contract/client/storage-limit.errors.mjs";
2
+ import { Cause, Clock, Duration, Effect, Option, Ref, Schedule, Schema } from "effect";
3
+ // src/host/job/undelivered-result.pure.ts
4
+ /**
5
+ * The visible state of a result the upkeep could not store yet (the job journal's 'undelivered' entry): the attempts
6
+ * so far, the last error and when it failed. `retrying` is true while the upkeep retries it now; once a round of
7
+ * retries is spent it is false, `rounds` counts the spent rounds and `next`, present only then, is when the next round
8
+ * starts.
9
+ */
10
+ const Undelivered = Schema.fromJsonString(Schema.Struct({
11
+ at: Schema.Int,
12
+ attempts: Schema.Int,
13
+ error: Schema.String,
14
+ next: Schema.optionalKey(Schema.Int),
15
+ retrying: Schema.Boolean,
16
+ rounds: Schema.Int
17
+ }));
18
+ /** One round: from 100 ms, doubling, capped at 30 seconds, for 10 retries (about 80 seconds in all). */
19
+ const backoff = Schedule.min([Schedule.exponential("100 millis"), Schedule.spaced("30 seconds")]);
20
+ const retryLimit = 10;
21
+ /** Between rounds: 5 minutes after the first, doubling, capped at an hour. Rounds never stop. */
22
+ const firstRoundGap = Duration.toMillis("5 minutes");
23
+ const longestRoundGap = Duration.toMillis("1 hour");
24
+ const doubling = 2;
25
+ const oneMore = 1;
26
+ const noMore = 0;
27
+ const fresh = {
28
+ attempts: 0,
29
+ rounds: 0
30
+ };
31
+ const roundGap = (rounds) => Math.min(firstRoundGap * doubling ** (rounds - oneMore), longestRoundGap);
32
+ /** The attempts and rounds an earlier run of this job already spent, read once, at its first failure. */
33
+ const progressOf = ({ delivering, delivery, guard, progress, sql }) => Effect.flatMap(Ref.get(progress), Option.match({
34
+ onNone: () => guard(delivery.read({
35
+ entry: "undelivered",
36
+ executionId: delivering.executionId,
37
+ sql
38
+ })).pipe(Effect.flatMap(Option.match({
39
+ onNone: () => Effect.succeed(fresh),
40
+ onSome: (text) => Schema.decodeEffect(Undelivered)(text)
41
+ })), Effect.map(({ attempts, rounds }) => ({
42
+ attempts,
43
+ rounds
44
+ })), Effect.orElseSucceed(() => fresh), Effect.tap((found) => Ref.set(progress, Option.some(found)))),
45
+ onSome: Effect.succeed
46
+ }));
47
+ const unstoredText = (failure) => {
48
+ if (Schema.is(StorageLimitError)(failure)) return `the store's ${String(failure.dataBytes)} bytes reached its storage ceiling of ${String(failure.ceilingBytes)}`;
49
+ return failure.message;
50
+ };
51
+ const written = (tracking, entry) => Effect.flatMap(Effect.orDie(Schema.encodeEffect(Undelivered)(entry)), (value) => tracking.guard(tracking.delivery.mark({
52
+ executionId: tracking.delivering.executionId,
53
+ sql: tracking.sql,
54
+ value
55
+ })));
56
+ /** Each failed attempt is logged and written to the job's journal, best effort: the journal may be what fails. */
57
+ const failedAttempt = (tracking) => (failure) => Effect.gen(function* failed() {
58
+ const before = yield* progressOf(tracking);
59
+ const attempts = before.attempts + oneMore;
60
+ const at = yield* Clock.currentTimeMillis;
61
+ yield* Ref.set(tracking.progress, Option.some({
62
+ ...before,
63
+ attempts
64
+ }));
65
+ yield* Effect.annotateLogs(Effect.logWarning("a job's result could not be stored and will be retried", failure), {
66
+ ...tracking.delivering,
67
+ attempts
68
+ });
69
+ yield* Effect.ignore(written(tracking, {
70
+ at,
71
+ attempts,
72
+ error: unstoredText(failure),
73
+ retrying: true,
74
+ rounds: before.rounds
75
+ }));
76
+ });
77
+ /**
78
+ * A spent round leaves the job open and due again at `next`, so the upkeep wakes the actor then, with nobody calling
79
+ * it. Operators see it as an error log and the `JobResults.gaveUp` span. If even this can't be written, it fails.
80
+ */
81
+ const spentRound = (tracking, spent) => Effect.gen(function* givingUp() {
82
+ const before = yield* progressOf(tracking);
83
+ const attempts = before.attempts + spent.more;
84
+ const rounds = before.rounds + oneMore;
85
+ const at = yield* Clock.currentTimeMillis;
86
+ const next = at + roundGap(rounds);
87
+ yield* written(tracking, {
88
+ at,
89
+ attempts,
90
+ error: spent.error,
91
+ next,
92
+ retrying: false,
93
+ rounds
94
+ });
95
+ yield* Effect.annotateLogs(Effect.logError(spent.message, spent.logged), {
96
+ ...tracking.delivering,
97
+ attempts,
98
+ next,
99
+ rounds
100
+ });
101
+ }).pipe(Effect.withSpan("JobResults.gaveUp", { attributes: { ...tracking.delivering } }));
102
+ const gaveUp = (tracking) => (failure) => spentRound(tracking, {
103
+ error: unstoredText(failure),
104
+ logged: failure,
105
+ message: "a job's result could not be stored after its retries, so the job stays open and is retried later",
106
+ more: noMore
107
+ });
108
+ /** A defect while delivering never retries and never dies silently: it goes to the log with the job and the actor. */
109
+ const undeliverable = (delivering) => (cause) => {
110
+ if (Cause.hasInterruptsOnly(cause)) return Effect.void;
111
+ return Effect.annotateLogs(Effect.logError("a job's result could not be delivered, so the job stays open", cause), { ...delivering });
112
+ };
113
+ const tracked = (finishing, delivery, guard) => Effect.map(Ref.make(Option.none()), (progress) => ({
114
+ delivering: {
115
+ actor: finishing.opened.actor.name,
116
+ executionId: finishing.executionId,
117
+ job: finishing.job,
118
+ key: finishing.key
119
+ },
120
+ delivery,
121
+ guard,
122
+ progress,
123
+ sql: finishing.opened.sql
124
+ }));
125
+ /**
126
+ * Delivers with a round of retries. A spent round returns, so the job's run ends and the engine forgets it; the
127
+ * journal keeps it open with its next round's due time.
128
+ */
129
+ const settling = (delivery) => (finishing, guard) => Effect.gen(function* settle() {
130
+ const tracking = yield* tracked(finishing, delivery, guard);
131
+ yield* guard(delivery.deliver(finishing)).pipe(Effect.tapError(failedAttempt(tracking)), Effect.retry({
132
+ schedule: backoff,
133
+ times: retryLimit
134
+ }), Effect.catch(gaveUp(tracking)), Effect.tapCause(undeliverable(tracking.delivering)), Effect.orDie);
135
+ });
136
+ /**
137
+ * A run that ended before its result was stored (a batch that failed under it, or a result it couldn't record) spends
138
+ * a round the same way: one more attempt, and the job is due again at its next round. The log carries the cause, so
139
+ * a bug shows as well as a full disk.
140
+ */
141
+ const stalling = (delivery) => (stalled, guard) => Effect.flatMap(tracked(stalled, delivery, guard), (tracking) => spentRound(tracking, {
142
+ error: Cause.pretty(stalled.cause),
143
+ logged: stalled.cause,
144
+ message: "a job's run ended before its result was stored, so the job stays open and is retried later",
145
+ more: oneMore
146
+ }));
147
+ export { settling, stalling };
@@ -0,0 +1,8 @@
1
+ import { Effect, Option } from "effect";
2
+ import { SqlClient, SqlError } from "effect/sql";
3
+ type Sql<Value> = Effect.Effect<Value, SqlError.SqlError>;
4
+ declare const createLayout: (sql: SqlClient.SqlClient) => Sql<void>;
5
+ /** Adds to a store made by an earlier engine at this layout version what this engine's layout has since gained. */
6
+ declare const upgradeLayout: (sql: SqlClient.SqlClient) => Sql<void>;
7
+ declare const storedLayoutVersion: (sql: SqlClient.SqlClient) => Sql<Option.Option<number>>;
8
+ export { createLayout, storedLayoutVersion, upgradeLayout };
@@ -0,0 +1,33 @@
1
+ import "./layout-version.pure.mjs";
2
+ import { prepareReceipts } from "../blob/reference/blob-receipts.sql.mjs";
3
+ import { prepareOpenJobs } from "../job/job-journal.sql.mjs";
4
+ import { Array, Effect, Option } from "effect";
5
+ // src/host/layout/actor-layout.sql.ts
6
+ const layoutTables = [
7
+ "CREATE TABLE akter_meta (key TEXT PRIMARY KEY, value ANY NOT NULL) STRICT",
8
+ "CREATE TABLE akter_migrations (version INTEGER PRIMARY KEY, hash TEXT NOT NULL, applied_at INTEGER NOT NULL) STRICT",
9
+ "CREATE TABLE akter_state (id INTEGER PRIMARY KEY CHECK (id = 1), value TEXT NOT NULL) STRICT",
10
+ "CREATE TABLE akter_commands (seq INTEGER PRIMARY KEY, command_id TEXT NOT NULL UNIQUE, command TEXT NOT NULL, payload TEXT NOT NULL, principal TEXT NOT NULL, exit TEXT NOT NULL, ids TEXT NOT NULL, times TEXT NOT NULL, files TEXT NOT NULL DEFAULT '[]', at INTEGER NOT NULL) STRICT",
11
+ "CREATE TABLE akter_timers (id TEXT PRIMARY KEY, due_at INTEGER NOT NULL, command TEXT NOT NULL, payload TEXT NOT NULL, principal TEXT NOT NULL) STRICT",
12
+ "CREATE INDEX akter_timers_due ON akter_timers (due_at)",
13
+ "CREATE TABLE akter_outbox (seq INTEGER PRIMARY KEY AUTOINCREMENT, command_id TEXT NOT NULL UNIQUE, actor TEXT NOT NULL, key TEXT NOT NULL, member TEXT NOT NULL, payload TEXT NOT NULL) STRICT",
14
+ "CREATE TABLE akter_failed_deliveries (command_id TEXT PRIMARY KEY, actor TEXT NOT NULL, key TEXT NOT NULL, member TEXT NOT NULL, error TEXT NOT NULL, at INTEGER NOT NULL) STRICT",
15
+ "CREATE TABLE akter_workflow (execution_id TEXT NOT NULL, entry TEXT NOT NULL, value TEXT NOT NULL, PRIMARY KEY (execution_id, entry)) STRICT"
16
+ ];
17
+ const createLayout = (sql) => Effect.gen(function* creatingLayout() {
18
+ yield* Effect.forEach(layoutTables, (statement) => sql.unsafe(statement), { discard: true });
19
+ yield* prepareReceipts(sql);
20
+ yield* prepareOpenJobs(sql);
21
+ yield* sql`INSERT INTO akter_meta (key, value) VALUES ('layout', ${3})`;
22
+ });
23
+ /** Adds to a store made by an earlier engine at this layout version what this engine's layout has since gained. */
24
+ const upgradeLayout = (sql) => prepareOpenJobs(sql);
25
+ const recordedVersion = (sql) => Effect.map(sql`SELECT value FROM akter_meta WHERE key = 'layout'`, (rows) => Option.match(Array.head(rows), {
26
+ onNone: () => 0,
27
+ onSome: (row) => row.value
28
+ }));
29
+ const storedLayoutVersion = (sql) => Effect.flatMap(sql`SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'akter_meta'`, (tables) => Array.match(tables, {
30
+ onEmpty: () => Effect.succeedNone,
31
+ onNonEmpty: () => Effect.asSome(recordedVersion(sql))
32
+ }));
33
+ export { createLayout, storedLayoutVersion, upgradeLayout };
@@ -0,0 +1,10 @@
1
+ import { Schema } from "effect";
2
+ declare const LayoutVersionError_base: Schema.Class<LayoutVersionError, Schema.TaggedStruct<"LayoutVersionError", {
3
+ readonly actor: Schema.String;
4
+ readonly found: Schema.Int;
5
+ readonly supported: Schema.Int;
6
+ }>, import("effect/Cause").YieldableError & {
7
+ readonly brand: unique symbol;
8
+ }>;
9
+ export declare class LayoutVersionError extends LayoutVersionError_base {}
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import { Schema } from "effect";
2
+ // src/host/layout/layout-version.errors.ts
3
+ var LayoutVersionError = class extends Schema.TaggedError()("LayoutVersionError", {
4
+ actor: Schema.String,
5
+ found: Schema.Int,
6
+ supported: Schema.Int
7
+ }) {};
8
+ export { LayoutVersionError };
@@ -0,0 +1,10 @@
1
+ import { LayoutVersionError } from "./layout-version.errors.mjs";
2
+ import { Effect } from "effect";
3
+ interface FoundLayout {
4
+ readonly actor: string;
5
+ readonly found: number;
6
+ }
7
+ declare const layoutVersion = 3;
8
+ declare const missingLayout = 0;
9
+ declare const checkLayoutVersion: ({ actor, found }: FoundLayout) => Effect.Effect<void, LayoutVersionError>;
10
+ export { checkLayoutVersion, layoutVersion, missingLayout };
@@ -0,0 +1,14 @@
1
+ import { LayoutVersionError } from "./layout-version.errors.mjs";
2
+ import { Effect } from "effect";
3
+ // src/host/layout/layout-version.pure.ts
4
+ const layoutVersion = 3;
5
+ const missingLayout = 0;
6
+ const checkLayoutVersion = ({ actor, found }) => {
7
+ if (found === 3) return Effect.void;
8
+ return Effect.fail(LayoutVersionError.make({
9
+ actor,
10
+ found,
11
+ supported: 3
12
+ }));
13
+ };
14
+ export { checkLayoutVersion, layoutVersion, missingLayout };