@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,136 @@
1
+ import { jobAddress } from "../../contract/job/job-id.pure.mjs";
2
+ import { readStored, storeExit, storedExit, writeStored } from "./job-journal.sql.mjs";
3
+ import { resume, trackedClock } from "./job-runs.pure.mjs";
4
+ import { Array, Clock, Deferred, Duration, Effect, Exit, FiberMap, MutableHashMap, Option } from "effect";
5
+ import { WorkflowEngine } from "effect/workflow";
6
+ // src/host/job/job-durables.sql.ts
7
+ const noWait = 0;
8
+ const located = (engine, executionId) => Option.match(jobAddress(executionId), {
9
+ onNone: () => Effect.die(`${executionId} is not an Akter job id: start jobs with Akter.start in a command`),
10
+ onSome: (address) => Effect.flatMap(Deferred.await(engine.locator), (locate) => locate(address))
11
+ });
12
+ const storeOf = ({ engine, executionId }) => Effect.suspend(() => Option.match(MutableHashMap.get(engine.executions, executionId), {
13
+ onNone: () => Effect.orDie(located(engine, executionId)),
14
+ onSome: (running) => Effect.succeed(running.store)
15
+ }));
16
+ const executionOf = (engine) => WorkflowEngine.WorkflowInstance.use((instance) => Option.match(MutableHashMap.get(engine.executions, instance.executionId), {
17
+ onNone: () => Effect.die(`job ${instance.executionId} is not running here`),
18
+ onSome: Effect.succeed
19
+ }));
20
+ const isCurrent = (executionId) => Effect.map(Effect.serviceOption(WorkflowEngine.WorkflowInstance), (current) => Option.exists(current, (instance) => instance.executionId === executionId));
21
+ const wakeDeferred = (engine, { deferredName, executionId }) => Effect.gen(function* waking() {
22
+ const wake = Effect.andThen(engine.deferreds.deferredDone(executionId, deferredName), resume({
23
+ executionId,
24
+ mode: "automatic",
25
+ runs: engine
26
+ }));
27
+ if (yield* isCurrent(executionId)) return yield* Effect.asVoid(Effect.forkIn(wake, engine.scope));
28
+ return yield* wake;
29
+ });
30
+ const completed = (engine, store, done) => store.authority(Effect.gen(function* completeWhileOwned() {
31
+ const { executionId, exit } = done;
32
+ const entry = `deferred/${done.deferredName}`;
33
+ const found = yield* readStored({
34
+ entry,
35
+ executionId,
36
+ store
37
+ });
38
+ if (Option.isNone(found)) {
39
+ yield* storeExit({
40
+ entry,
41
+ executionId,
42
+ exit,
43
+ store
44
+ });
45
+ yield* wakeDeferred(engine, done);
46
+ }
47
+ }));
48
+ /**
49
+ * A signal comes from outside the job, so it locates the actor's current session and keeps it resident until the
50
+ * result is stored, instead of trusting the store a running execution was started with, whose session can close
51
+ * between the lookup and the write. `deferredDone` has no error channel, so a signal this host can't deliver dies
52
+ * with the locator's `ActorUnavailableError`, which names the actor and what to do.
53
+ */
54
+ const doneDeferred = (engine) => (done) => {
55
+ const store = Effect.orDie(located(engine, done.executionId));
56
+ return Effect.scoped(Effect.flatMap(store, (found) => completed(engine, found, done)));
57
+ };
58
+ /** A clock fires inside its own session, which interrupts it on close, so it completes on that session's store. */
59
+ const fireClock = (engine, store, { clock, executionId }) => completed(engine, store, {
60
+ deferredName: clock.deferred.name,
61
+ executionId,
62
+ exit: Exit.void
63
+ });
64
+ const clockDue = (clocked, store) => Effect.gen(function* dueAt() {
65
+ const { clock, executionId } = clocked;
66
+ const now = yield* Clock.currentTimeMillis;
67
+ const entry = `clock/${clock.name}`;
68
+ const planned = String(now + Duration.toMillis(clock.duration));
69
+ yield* writeStored({
70
+ entry,
71
+ executionId,
72
+ store,
73
+ value: planned
74
+ });
75
+ const stored = yield* readStored({
76
+ entry,
77
+ executionId,
78
+ store
79
+ });
80
+ return {
81
+ at: Number(Option.getOrElse(stored, () => planned)),
82
+ now
83
+ };
84
+ });
85
+ const scheduleClock = (engine) => (_workflow, clocked) => Effect.gen(function* scheduling() {
86
+ const { clock, executionId } = clocked;
87
+ const store = yield* storeOf({
88
+ engine,
89
+ executionId
90
+ });
91
+ const fired = yield* readStored({
92
+ entry: `deferred/${clock.deferred.name}`,
93
+ executionId,
94
+ store
95
+ });
96
+ if (Option.isSome(fired)) return;
97
+ const { at, now } = yield* clockDue(clocked, store);
98
+ const delay = Duration.millis(Math.max(at - now, noWait));
99
+ const firing = store.authority(Effect.delay(fireClock(engine, store, clocked), delay));
100
+ const key = yield* trackedClock({
101
+ executionId,
102
+ name: clock.name,
103
+ runs: engine
104
+ });
105
+ yield* FiberMap.run(engine.clocks, key, firing, { onlyIfMissing: true });
106
+ }).pipe(Effect.scoped);
107
+ const deferredResult = (engine) => (deferred) => Effect.flatMap(executionOf(engine), (execution) => execution.store.authority(storedExit({
108
+ entry: `deferred/${deferred.name}`,
109
+ executionId: execution.executionId,
110
+ store: execution.store
111
+ })).pipe(Effect.tap((found) => Effect.sync(() => {
112
+ if (Option.isNone(found)) execution.waiting.add(deferred.name);
113
+ }))));
114
+ /**
115
+ * Wakes this store's runs that wait on a deferred a committed command has since stored a result for (`Akter.signal`
116
+ * writes it with the command), once the command commits. Only the deferreds a run found empty are checked.
117
+ */
118
+ const wakeSignalled = ({ engine, store }) => Effect.suspend(() => {
119
+ const waiting = Array.flatMap(Array.fromIterable(engine.owned.get(store) ?? []), ({ executionId, waiting: names }) => Array.map(Array.fromIterable(names), (deferredName) => ({
120
+ deferredName,
121
+ executionId
122
+ })));
123
+ return Effect.forEach(waiting, ({ deferredName, executionId }) => Effect.flatMap(readStored({
124
+ entry: `deferred/${deferredName}`,
125
+ executionId,
126
+ store
127
+ }), (found) => {
128
+ if (Option.isNone(found)) return Effect.void;
129
+ return wakeDeferred(engine, {
130
+ deferredName,
131
+ executionId,
132
+ exit: Exit.void
133
+ });
134
+ }), { discard: true });
135
+ });
136
+ export { deferredResult, doneDeferred, executionOf, scheduleClock, storeOf, wakeSignalled };
@@ -0,0 +1,33 @@
1
+ import { JobStore, Parked } from "./job-runs.pure.mjs";
2
+ import { Locate } from "./job-durables.sql.mjs";
3
+ import { Context, Effect, Layer, Option } from "effect";
4
+ import { WorkflowEngine } from "effect/workflow";
5
+ interface JobEngineService {
6
+ readonly bind: (locate: Locate) => Effect.Effect<void>;
7
+ /**
8
+ * When the oldest activity executing now in this session's jobs started; none while every job is waiting, suspended
9
+ * or between steps.
10
+ */
11
+ readonly busySince: (store: JobStore) => Effect.Effect<Option.Option<number>>;
12
+ /** Stops and forgets the jobs running on a closing session; the next session's start replays them from the journal. */
13
+ readonly detach: (store: JobStore) => Effect.Effect<void>;
14
+ readonly drain: (store: JobStore) => Effect.Effect<boolean>;
15
+ readonly engine: WorkflowEngine.WorkflowEngine["Service"];
16
+ /**
17
+ * This session's jobs with nothing to run now: those that wait on a signal or a clock, until one is stored, and those
18
+ * whose activity executes, with no waits, until it ends. The session is busy while an activity executes.
19
+ */
20
+ readonly parked: (store: JobStore) => Effect.Effect<readonly Parked[]>;
21
+ /** Jobs held in memory: those running or suspended on an open session. Finished jobs answer from the journal. */
22
+ readonly retained: Effect.Effect<number>;
23
+ readonly start: (store: JobStore) => Effect.Effect<void>;
24
+ }
25
+ declare const JobEngine_base: Context.ServiceClass<JobEngine, "@akterjs/effect/host/job/job-engine.adapter/JobEngine", JobEngineService> & {
26
+ readonly make: Effect.Effect<JobEngineService, never, import("effect/Scope").Scope>;
27
+ };
28
+ export declare class JobEngine extends JobEngine_base {
29
+ static readonly layer: Layer.Layer<JobEngine, never, never>;
30
+ static readonly layerShared: Layer.Layer<JobEngine, never, never>;
31
+ static readonly layerWorkflow: Layer.Layer<JobEngine | WorkflowEngine.WorkflowEngine, never, never>;
32
+ }
33
+ export type { JobStore, Parked };
@@ -0,0 +1,258 @@
1
+ import { completedRun, decodePayload, openJobs, storeExit, storeResult, storedExit } from "./job-journal.sql.mjs";
2
+ import { awaitRun, detachStore, lastExit, nameOf, parkedOn, resume, settled, startExecution } from "./job-runs.pure.mjs";
3
+ import { deferredResult, doneDeferred, executionOf, scheduleClock, storeOf, wakeSignalled } from "./job-durables.sql.mjs";
4
+ import { Array, Cause, Clock, Context, Deferred, Effect, Exit, Fiber, FiberMap, Layer, MutableHashMap, Option, Predicate, Ref } from "effect";
5
+ import { Workflow, WorkflowEngine } from "effect/workflow";
6
+ // src/host/job/job-engine.adapter.ts
7
+ const completed = (polling) => polling.store.authority(completedRun(polling));
8
+ const startStored = (engine, { job, store }) => Effect.suspend(() => {
9
+ const entry = MutableHashMap.get(engine.registered, job.job);
10
+ if (Option.isNone(entry)) {
11
+ MutableHashMap.set(engine.waiting, job.id, {
12
+ job,
13
+ store
14
+ });
15
+ return Effect.void;
16
+ }
17
+ const { workflow } = entry.value;
18
+ MutableHashMap.remove(engine.waiting, job.id);
19
+ return Effect.flatMap(decodePayload({
20
+ text: job.payload,
21
+ workflow
22
+ }), (payload) => startExecution({
23
+ executionId: job.id,
24
+ payload,
25
+ runs: engine,
26
+ store,
27
+ workflow
28
+ }));
29
+ });
30
+ const startOpen = (engine, store) => Effect.suspend(() => {
31
+ if (engine.detached.has(store)) return Effect.void;
32
+ return Clock.currentTimeMillis.pipe(Effect.flatMap((now) => store.withSql((sql) => store.exclusive(openJobs({
33
+ now,
34
+ sql
35
+ })))), Effect.orDie, Effect.flatMap((jobs) => Effect.forEach(Array.filter(jobs, (job) => !MutableHashMap.has(engine.executions, job.id)), (job) => startStored(engine, {
36
+ job,
37
+ store
38
+ }), { discard: true })), Effect.andThen(wakeSignalled({
39
+ engine,
40
+ store
41
+ })));
42
+ });
43
+ const register = (engine) => Effect.fnUntraced(function* registering(workflow, execute) {
44
+ const name = nameOf(workflow);
45
+ MutableHashMap.set(engine.registered, name, {
46
+ execute,
47
+ scope: yield* Effect.scope,
48
+ workflow
49
+ });
50
+ const waiting = Array.filter(Array.fromIterable(MutableHashMap.values(engine.waiting)), ({ job }) => job.job === name);
51
+ yield* Effect.forEach(waiting, (found) => startStored(engine, found), { discard: true });
52
+ });
53
+ const oneActivity = 1;
54
+ const isInterruptOnly = (result) => Predicate.isTagged(result, "Suspended") || Exit.isFailure(result.exit) && Cause.hasInterruptsOnly(result.exit.cause);
55
+ const runActivity = ({ executeEncoded }, instance) => {
56
+ const running = WorkflowEngine.WorkflowInstance.initial(instance.workflow, instance.executionId);
57
+ running.interrupted = instance.interrupted;
58
+ return executeEncoded.pipe(Workflow.intoResult, Effect.provideService(WorkflowEngine.WorkflowInstance, running));
59
+ };
60
+ const recordActivity = (activity, attempt, execution) => Effect.gen(function* recording() {
61
+ const stored = {
62
+ entry: `activity/${activity.name}/${attempt}`,
63
+ executionId: execution.executionId,
64
+ store: execution.store
65
+ };
66
+ const result = yield* runActivity(activity, execution.instance);
67
+ if (!isInterruptOnly(result) && Predicate.isTagged(result, "Complete")) yield* storeExit({
68
+ ...stored,
69
+ exit: result.exit
70
+ });
71
+ return result;
72
+ });
73
+ /** Records an activity's start on its run while it executes, so the session's `busySince` reads it. */
74
+ const inFlight = (execution) => (effect) => Effect.acquireUseRelease(Effect.tap(Clock.currentTimeMillis, (started) => Effect.sync(() => execution.activities.push(started))), () => effect, (started) => Effect.sync(() => {
75
+ execution.activities.splice(execution.activities.indexOf(started), oneActivity);
76
+ }));
77
+ /** When the oldest activity executing in the session's jobs started, if any is. */
78
+ const busySince = (engine) => (store) => Effect.sync(() => {
79
+ const runs = Array.fromIterable(engine.owned.get(store) ?? []);
80
+ return Array.reduce(Array.flatMap(runs, (run) => run.activities), Option.none(), (oldest, started) => Option.some(Option.match(oldest, {
81
+ onNone: () => started,
82
+ onSome: (at) => Math.min(at, started)
83
+ })));
84
+ });
85
+ const noWaits = [];
86
+ /**
87
+ * A run whose activity executes now has nothing to run until the activity ends, and its end continues the run in
88
+ * memory. Counting it as due would report it due now on every kick for as long as the activity runs.
89
+ */
90
+ const activityRunning = (run) => Option.liftPredicate(noWaits, () => Array.isReadonlyArrayNonEmpty(run.activities));
91
+ const parked = (engine) => (store) => Effect.sync(() => {
92
+ const runs = Array.fromIterable(engine.owned.get(store) ?? []);
93
+ return Array.getSomes(Array.map(runs, (run) => Option.map(Option.orElse(parkedOn(run), () => activityRunning(run)), (waits) => ({
94
+ id: run.executionId,
95
+ waits
96
+ }))));
97
+ });
98
+ const activityExecute = (engine) => (activity, attempt) => Effect.gen(function* executingActivity() {
99
+ const instance = yield* WorkflowEngine.WorkflowInstance;
100
+ const execution = yield* executionOf(engine);
101
+ return yield* execution.store.authority(Effect.gen(function* activityWhileOwned() {
102
+ const entry = `activity/${activity.name}/${attempt}`;
103
+ const found = yield* storedExit({
104
+ entry,
105
+ executionId: instance.executionId,
106
+ store: execution.store
107
+ });
108
+ if (Option.isSome(found)) return new Workflow.Complete({ exit: found.value });
109
+ if (execution.interrupted && !instance.interrupted) return Workflow.Suspended.make({});
110
+ return yield* recordActivity(activity, attempt, {
111
+ ...execution,
112
+ instance
113
+ }).pipe(inFlight(execution));
114
+ }));
115
+ });
116
+ /** A finished job is no longer in memory, so starting it again answers from its journaled result instead of rerunning it. */
117
+ const startUnfinished = (engine, starting) => Effect.suspend(() => {
118
+ if (MutableHashMap.has(engine.executions, starting.executionId)) return Effect.void;
119
+ return Effect.flatMap(completed(starting), Option.match({
120
+ onNone: () => starting.store.authority(startExecution({
121
+ ...starting,
122
+ runs: engine
123
+ })),
124
+ onSome: () => Effect.void
125
+ }));
126
+ });
127
+ const poll = (engine) => (workflow, executionId) => Effect.suspend(() => Option.match(Option.flatMap(MutableHashMap.get(engine.executions, executionId), lastExit), {
128
+ onNone: () => Effect.flatMap(storeOf({
129
+ engine,
130
+ executionId
131
+ }), (store) => completed({
132
+ executionId,
133
+ store,
134
+ workflow
135
+ })),
136
+ onSome: (exit) => Effect.flatMap(storeOf({
137
+ engine,
138
+ executionId
139
+ }), (store) => store.authority(Effect.asSome(exit)))
140
+ })).pipe(Effect.scoped);
141
+ function executeWith(engine, workflow, options) {
142
+ return Effect.gen(function* executing() {
143
+ const { discard, executionId, parent, payload } = options;
144
+ if (Predicate.isNotUndefined(parent)) return yield* Effect.die(`${nameOf(workflow)}: a job can't start another job; start it from a command with Akter.start`);
145
+ const store = yield* storeOf({
146
+ engine,
147
+ executionId
148
+ });
149
+ const journaled = completed({
150
+ executionId,
151
+ store,
152
+ workflow
153
+ });
154
+ yield* startUnfinished(engine, {
155
+ executionId,
156
+ payload,
157
+ store,
158
+ workflow
159
+ });
160
+ if (discard) return yield* Effect.void;
161
+ return yield* Option.match(MutableHashMap.get(engine.executions, executionId), {
162
+ onNone: () => Effect.map(journaled, Option.getOrElse(() => Workflow.Suspended.make({}))),
163
+ onSome: (found) => store.authority(awaitRun(found))
164
+ });
165
+ }).pipe(Effect.scoped);
166
+ }
167
+ const interruptRun = (engine, execution, unsafe) => {
168
+ execution.interrupted = true;
169
+ execution.interruptedUnsafe ||= unsafe;
170
+ const wake = resume({
171
+ executionId: execution.executionId,
172
+ mode: "explicit",
173
+ runs: engine
174
+ });
175
+ if (unsafe && Option.isSome(execution.fiber)) return Effect.andThen(Fiber.interrupt(execution.fiber.value), wake);
176
+ return wake;
177
+ };
178
+ const interrupt = (engine, unsafe) => (_workflow, executionId) => Effect.suspend(() => Option.match(MutableHashMap.get(engine.executions, executionId), {
179
+ onNone: () => Effect.void,
180
+ onSome: (execution) => interruptRun(engine, execution, unsafe)
181
+ }));
182
+ const awaitComplete = (engine) => (_workflow, executionId) => Effect.suspend(() => Option.match(MutableHashMap.get(engine.executions, executionId), {
183
+ onNone: () => Effect.never,
184
+ onSome: (found) => found.store.authority(Deferred.await(found.done))
185
+ }));
186
+ const drain = (engine) => (store) => Effect.gen(function* draining() {
187
+ yield* startOpen(engine, store);
188
+ const mine = Array.fromIterable(engine.owned.get(store) ?? []);
189
+ const waited = yield* Effect.forEach(mine, settled);
190
+ return Array.some(waited, Boolean);
191
+ });
192
+ const encodedOf = (engine) => ({
193
+ activityExecute: activityExecute(engine),
194
+ awaitComplete: awaitComplete(engine),
195
+ deferredDone: doneDeferred(engine),
196
+ deferredResult: deferredResult(engine),
197
+ execute: (workflow, options) => executeWith(engine, workflow, options),
198
+ interrupt: interrupt(engine, false),
199
+ interruptUnsafe: interrupt(engine, true),
200
+ poll: poll(engine),
201
+ register: register(engine),
202
+ resume: (_workflow, executionId) => resume({
203
+ executionId,
204
+ mode: "explicit",
205
+ runs: engine
206
+ }),
207
+ scheduleClock: scheduleClock(engine)
208
+ });
209
+ const rebinding = Effect.fnUntraced(function* rebinding(locator) {
210
+ const latest = yield* Ref.make(() => Effect.die("no host has bound a job locator"));
211
+ const current = (address) => Effect.flatMap(Ref.get(latest), (locate) => locate(address));
212
+ return (locate) => Effect.andThen(Ref.set(latest, locate), Effect.asVoid(Deferred.succeed(locator, current)));
213
+ });
214
+ const makeEngine = Effect.gen(function* makeEngine() {
215
+ const engine = {
216
+ clocks: yield* FiberMap.make(),
217
+ deferreds: WorkflowEngine.makeDeferredState(),
218
+ detached: /* @__PURE__ */ new WeakSet(),
219
+ executions: MutableHashMap.empty(),
220
+ locator: yield* Deferred.make(),
221
+ owned: /* @__PURE__ */ new Map(),
222
+ record: ({ executionId, store, workflow }, exit) => store.authority(storeResult({
223
+ executionId,
224
+ exit,
225
+ store,
226
+ workflow
227
+ })),
228
+ registered: MutableHashMap.empty(),
229
+ scope: yield* Effect.scope,
230
+ waiting: MutableHashMap.empty(),
231
+ workflowEngine: yield* Deferred.make()
232
+ };
233
+ const workflowEngine = WorkflowEngine.makeUnsafe(encodedOf(engine));
234
+ const bind = yield* rebinding(engine.locator);
235
+ yield* Deferred.succeed(engine.workflowEngine, workflowEngine);
236
+ return {
237
+ bind,
238
+ busySince: busySince(engine),
239
+ detach: (store) => detachStore({
240
+ runs: engine,
241
+ store
242
+ }),
243
+ drain: drain(engine),
244
+ engine: workflowEngine,
245
+ parked: parked(engine),
246
+ retained: Effect.sync(() => MutableHashMap.size(engine.executions)),
247
+ start: (store) => startOpen(engine, store)
248
+ };
249
+ });
250
+ var JobEngine = class JobEngine extends Context.Service()("@akterjs/effect/host/job/job-engine.adapter/JobEngine", { make: makeEngine }) {
251
+ static layer = Layer.effect(this, this.make);
252
+ static layerShared = Layer.effect(this, Effect.flatMap(Effect.serviceOption(this), Option.match({
253
+ onNone: () => this.make,
254
+ onSome: Effect.succeed
255
+ })));
256
+ static layerWorkflow = Layer.effect(WorkflowEngine.WorkflowEngine, JobEngine.use((jobs) => Effect.succeed(jobs.engine))).pipe(Layer.provideMerge(JobEngine.layer));
257
+ };
258
+ export { JobEngine };
@@ -0,0 +1,85 @@
1
+ import { StartedJob } from "../../contract/job/started-job.schema.mjs";
2
+ import { JobSignal } from "../../contract/job/job-signal.schema.mjs";
3
+ import { JobStore, Payload, RunResult } from "./job-runs.pure.mjs";
4
+ import { Effect, Exit, Option } from "effect";
5
+ import { Workflow } from "effect/workflow";
6
+ import { SqlClient, SqlError } from "effect/sql";
7
+ type JournalStore = Pick<JobStore, "exclusive" | "finish" | "withSql">;
8
+ interface EntryAddress {
9
+ readonly entry: string;
10
+ readonly executionId: string;
11
+ readonly sql: SqlClient.SqlClient;
12
+ }
13
+ interface EntryWrite extends EntryAddress {
14
+ readonly value: string;
15
+ }
16
+ interface JobsWrite {
17
+ readonly jobs: readonly StartedJob[];
18
+ readonly sql: SqlClient.SqlClient;
19
+ }
20
+ interface SignalsWrite {
21
+ /** Absent from the outcome of an app built before Akter.signal, which signals nothing. */
22
+ readonly signals: readonly JobSignal[] | undefined;
23
+ readonly sql: SqlClient.SqlClient;
24
+ }
25
+ interface StoredEntry {
26
+ readonly entry: string;
27
+ readonly executionId: string;
28
+ readonly store: JournalStore;
29
+ }
30
+ interface WritingEntry extends StoredEntry {
31
+ readonly value: string;
32
+ }
33
+ interface StoringEntry extends StoredEntry {
34
+ readonly exit: AnyExit;
35
+ }
36
+ interface StoredResult {
37
+ readonly executionId: string;
38
+ readonly store: JournalStore;
39
+ readonly workflow: Workflow.Any;
40
+ }
41
+ interface StoringResult extends StoredResult {
42
+ readonly exit: AnyExit;
43
+ }
44
+ interface StoredPayload {
45
+ readonly text: string;
46
+ readonly workflow: Workflow.Any;
47
+ }
48
+ type Sql<Value> = Effect.Effect<Value, SqlError.SqlError>;
49
+ type AnyExit = Exit.Exit<unknown, unknown>;
50
+ declare const saveJobs: ({ jobs, sql }: JobsWrite) => Sql<void>;
51
+ /**
52
+ * Stores each signal as its job's deferred result, in the command's transaction, only while the job is open and the
53
+ * deferred has none yet. A signal for a job that finished, never started or already has that result does nothing.
54
+ */
55
+ declare const saveSignals: ({ signals, sql }: SignalsWrite) => Sql<void>;
56
+ /**
57
+ * Its result check ignores an 'open' entry an older engine left behind when it saved the result. A job whose result
58
+ * spent a round of retries waits for its next round (its 'undelivered' entry's `next`), so it isn't run before then.
59
+ */
60
+ declare const openJobs: ({ now, sql }: {
61
+ readonly now: number;
62
+ readonly sql: SqlClient.SqlClient;
63
+ }) => Sql<readonly StartedJob[]>;
64
+ /** Creates the open-jobs index once, marking the jobs a journal from before it still has open. */
65
+ declare const prepareOpenJobs: (sql: SqlClient.SqlClient) => Sql<void>;
66
+ declare const readEntry: ({ entry, executionId, sql }: EntryAddress) => Sql<Option.Option<string>>;
67
+ declare const decodePayload: ({ text, workflow }: StoredPayload) => Effect.Effect<Payload>;
68
+ declare const readStored: ({ entry, executionId, store }: StoredEntry) => Effect.Effect<Option.Option<string>>;
69
+ declare const writeStored: ({ store, ...written }: WritingEntry) => Effect.Effect<void>;
70
+ declare const storedExit: (stored: StoredEntry) => Effect.Effect<Option.Option<AnyExit>>;
71
+ declare const storeExit: ({ exit, ...stored }: StoringEntry) => Effect.Effect<void>;
72
+ declare const storeResult: ({ executionId, exit, store, workflow }: StoringResult) => Effect.Effect<void>;
73
+ declare const saveResult: ({ executionId, sql, value }: Omit<EntryWrite, "entry">) => Sql<void>;
74
+ /**
75
+ * While a job's result can't be stored, its journal says so in an 'undelivered' entry (`undelivered-result.pure.ts`).
76
+ * The inspector shows it with the job's other entries, and saving the result removes it.
77
+ */
78
+ declare const markUndelivered: ({ executionId, sql, value }: Omit<EntryWrite, "entry">) => Sql<void>;
79
+ declare const completedRun: (stored: StoredResult) => Effect.Effect<Option.Option<RunResult>>;
80
+ /**
81
+ * Closes every job still open in a copied database, such as a fork's (ADR 0017): each gets an interrupted result, so
82
+ * the copy never runs work it inherited. Its parent keeps running its own.
83
+ */
84
+ declare const cancelOpenJobs: (sql: SqlClient.SqlClient) => Sql<void>;
85
+ export { type AnyExit, type StoredEntry, cancelOpenJobs, completedRun, decodePayload, markUndelivered, openJobs, prepareOpenJobs, readEntry, readStored, saveJobs, saveResult, saveSignals, storeExit, storeResult, storedExit, writeStored };
@@ -0,0 +1,109 @@
1
+ import { JobCodecsOf } from "../../contract/command/command.contract.mjs";
2
+ import { StoredExit } from "../../contract/job/job-signal.schema.mjs";
3
+ import { nameOf } from "./job-runs.pure.mjs";
4
+ import { Array, Context, Effect, Exit, Option, Predicate, Schema } from "effect";
5
+ import { Workflow } from "effect/workflow";
6
+ // src/host/job/job-journal.sql.ts
7
+ const insertEntry = ({ entry, executionId, sql, value }) => Effect.asVoid(sql`INSERT INTO akter_workflow (execution_id, entry, value) VALUES (${executionId}, ${entry}, ${value}) ON CONFLICT (execution_id, entry) DO NOTHING`);
8
+ /**
9
+ * A job's 'open' entry lives from the command that starts it to the transaction that saves its result. The partial
10
+ * index holds only those entries, so finding the open jobs costs the jobs still open, not every job the actor ran.
11
+ */
12
+ const openIndex = "akter_workflow_open";
13
+ const saveJobs = ({ jobs, sql }) => Effect.forEach(jobs, ({ id, job, payload }) => Effect.all([
14
+ insertEntry({
15
+ entry: "job",
16
+ executionId: id,
17
+ sql,
18
+ value: job
19
+ }),
20
+ insertEntry({
21
+ entry: "payload",
22
+ executionId: id,
23
+ sql,
24
+ value: payload
25
+ }),
26
+ insertEntry({
27
+ entry: "open",
28
+ executionId: id,
29
+ sql,
30
+ value: ""
31
+ })
32
+ ], { discard: true }), { discard: true });
33
+ /**
34
+ * Stores each signal as its job's deferred result, in the command's transaction, only while the job is open and the
35
+ * deferred has none yet. A signal for a job that finished, never started or already has that result does nothing.
36
+ */
37
+ const saveSignals = ({ signals, sql }) => Effect.forEach(signals ?? [], ({ deferred, exit, id }) => sql`INSERT INTO akter_workflow (execution_id, entry, value) SELECT ${id}, ${`deferred/${deferred}`}, ${exit} WHERE EXISTS (SELECT 1 FROM akter_workflow WHERE execution_id = ${id} AND entry = 'open') AND NOT EXISTS (SELECT 1 FROM akter_workflow WHERE execution_id = ${id} AND entry = 'result') ON CONFLICT (execution_id, entry) DO NOTHING`, { discard: true });
38
+ /**
39
+ * Its result check ignores an 'open' entry an older engine left behind when it saved the result. A job whose result
40
+ * spent a round of retries waits for its next round (its 'undelivered' entry's `next`), so it isn't run before then.
41
+ */
42
+ const openJobs = ({ now, sql }) => sql`SELECT open.execution_id AS id, started.value AS job, payload.value AS payload FROM akter_workflow open INDEXED BY akter_workflow_open JOIN akter_workflow started ON started.execution_id = open.execution_id AND started.entry = 'job' JOIN akter_workflow payload ON payload.execution_id = open.execution_id AND payload.entry = 'payload' WHERE open.entry = 'open' AND NOT EXISTS (SELECT 1 FROM akter_workflow result WHERE result.execution_id = open.execution_id AND result.entry = 'result') AND NOT EXISTS (SELECT 1 FROM akter_workflow stalled WHERE stalled.execution_id = open.execution_id AND stalled.entry = 'undelivered' AND json_extract(stalled.value, '$.next') > ${now}) ORDER BY started.rowid`;
43
+ const hasOpenIndex = (sql) => Effect.map(sql`SELECT 1 FROM sqlite_master WHERE type = 'index' AND name = ${openIndex}`, Array.isReadonlyArrayNonEmpty);
44
+ const indexOpenJobs = (sql) => sql.withTransaction(Effect.andThen(sql`CREATE INDEX akter_workflow_open ON akter_workflow (execution_id) WHERE entry = 'open'`, sql`INSERT OR IGNORE INTO akter_workflow (execution_id, entry, value) SELECT started.execution_id, 'open', '' FROM akter_workflow started WHERE started.entry = 'job' AND NOT EXISTS (SELECT 1 FROM akter_workflow result WHERE result.execution_id = started.execution_id AND result.entry = 'result')`));
45
+ /** Creates the open-jobs index once, marking the jobs a journal from before it still has open. */
46
+ const prepareOpenJobs = (sql) => Effect.flatMap(hasOpenIndex(sql), (indexed) => {
47
+ if (indexed) return Effect.void;
48
+ return indexOpenJobs(sql);
49
+ });
50
+ const readEntry = ({ entry, executionId, sql }) => Effect.map(sql`SELECT value FROM akter_workflow WHERE execution_id = ${executionId} AND entry = ${entry}`, (rows) => Option.map(Array.head(rows), (row) => row.value));
51
+ const encodedExit = StoredExit;
52
+ const codecsOf = (workflow) => Option.match(Context.get(workflow.annotations, JobCodecsOf), {
53
+ onNone: () => Effect.die(`${nameOf(workflow)} is not an Akter job: declare it in Akter.make's jobs`),
54
+ onSome: Effect.succeed
55
+ });
56
+ const decodePayload = ({ text, workflow }) => Effect.flatMap(codecsOf(workflow), (codecs) => codecs.decodePayload(text).pipe(Effect.filterOrFail(Predicate.isObject, () => `${nameOf(workflow)} has a payload that is not a struct`), Effect.orDie));
57
+ const readStored = ({ entry, executionId, store }) => Effect.orDie(store.withSql((sql) => store.exclusive(readEntry({
58
+ entry,
59
+ executionId,
60
+ sql
61
+ }))));
62
+ const writeStored = ({ store, ...written }) => Effect.orDie(store.withSql((sql) => store.exclusive(insertEntry({
63
+ ...written,
64
+ sql
65
+ }))));
66
+ const decodedWith = (decode) => (found) => Option.map(found, decode).pipe(Effect.transposeOption, Effect.orDie);
67
+ const storedExit = (stored) => Effect.flatMap(readStored(stored), decodedWith(Schema.decodeEffect(encodedExit)));
68
+ const storeExit = ({ exit, ...stored }) => Schema.encodeEffect(encodedExit)(exit).pipe(Effect.orDie, Effect.flatMap((value) => writeStored({
69
+ ...stored,
70
+ value
71
+ })));
72
+ const storeResult = ({ executionId, exit, store, workflow }) => Effect.gen(function* storingResult() {
73
+ const codecs = yield* codecsOf(workflow);
74
+ const result = yield* Effect.orDie(codecs.encodeResult(exit));
75
+ yield* store.finish({
76
+ executionId,
77
+ job: nameOf(workflow),
78
+ result
79
+ });
80
+ });
81
+ const saveResult = ({ executionId, sql, value }) => Effect.andThen(insertEntry({
82
+ entry: "result",
83
+ executionId,
84
+ sql,
85
+ value
86
+ }), sql`DELETE FROM akter_workflow WHERE execution_id = ${executionId} AND entry IN ('open', 'undelivered')`);
87
+ /**
88
+ * While a job's result can't be stored, its journal says so in an 'undelivered' entry (`undelivered-result.pure.ts`).
89
+ * The inspector shows it with the job's other entries, and saving the result removes it.
90
+ */
91
+ const markUndelivered = ({ executionId, sql, value }) => Effect.asVoid(sql`INSERT INTO akter_workflow (execution_id, entry, value) VALUES (${executionId}, 'undelivered', ${value}) ON CONFLICT (execution_id, entry) DO UPDATE SET value = excluded.value`);
92
+ const storedResult = (stored) => Effect.gen(function* readingResult() {
93
+ const codecs = yield* codecsOf(stored.workflow);
94
+ const found = yield* readStored({
95
+ ...stored,
96
+ entry: "result"
97
+ });
98
+ return yield* decodedWith(codecs.decodeResult)(found);
99
+ });
100
+ const completedRun = (stored) => Effect.map(storedResult(stored), Option.map((exit) => new Workflow.Complete({ exit })));
101
+ /**
102
+ * Closes every job still open in a copied database, such as a fork's (ADR 0017): each gets an interrupted result, so
103
+ * the copy never runs work it inherited. Its parent keeps running its own.
104
+ */
105
+ const cancelOpenJobs = (sql) => Effect.gen(function* cancelInheritedJobs() {
106
+ yield* sql`INSERT INTO akter_workflow (execution_id, entry, value) SELECT execution_id, 'result', ${yield* Effect.orDie(Schema.encodeEffect(encodedExit)(Exit.interrupt()))} FROM akter_workflow WHERE entry = 'open' ON CONFLICT (execution_id, entry) DO NOTHING`;
107
+ yield* sql`DELETE FROM akter_workflow WHERE entry = 'open'`;
108
+ });
109
+ export { cancelOpenJobs, completedRun, decodePayload, markUndelivered, openJobs, prepareOpenJobs, readEntry, readStored, saveJobs, saveResult, saveSignals, storeExit, storeResult, storedExit, writeStored };
@@ -0,0 +1,37 @@
1
+ import { CommandRunner } from "../command/command-runner.service.mjs";
2
+ import { Finishing, Guard, Stalling, Unstored } from "./undelivered-result.pure.mjs";
3
+ import { Context, Effect, Layer } from "effect";
4
+ import { SqlError } from "effect/sql";
5
+ declare const JobResults_base: Context.ServiceClass<JobResults, "@akterjs/effect/host/job/job-results.service/JobResults", {
6
+ /**
7
+ * Stores the result and runs its command in one transaction. Past the storage ceiling a result command that grows
8
+ * the database is refused, and the result rolls back with it, so a retry delivers it once the store has room.
9
+ */
10
+ readonly deliver: (finishing: Finishing) => Effect.Effect<void, Unstored>;
11
+ /**
12
+ * Delivers with retries: a failed attempt waits out a capped backoff, and the job's journal shows it as
13
+ * undelivered. After the last retry the job stays open and is due again later, on a longer capped backoff.
14
+ */
15
+ readonly settle: (finishing: Finishing, guard: Guard) => Effect.Effect<void>;
16
+ /** Records a run that ended before its result was stored as a spent round, so the job is due at its next. */
17
+ readonly stall: (stalled: Stalling, guard: Guard) => Effect.Effect<void, SqlError.SqlError>;
18
+ }> & {
19
+ readonly make: Effect.Effect<{
20
+ /**
21
+ * Stores the result and runs its command in one transaction. Past the storage ceiling a result command that grows
22
+ * the database is refused, and the result rolls back with it, so a retry delivers it once the store has room.
23
+ */
24
+ readonly deliver: (finishing: Finishing) => Effect.Effect<void, Unstored>;
25
+ /**
26
+ * Delivers with retries: a failed attempt waits out a capped backoff, and the job's journal shows it as
27
+ * undelivered. After the last retry the job stays open and is due again later, on a longer capped backoff.
28
+ */
29
+ readonly settle: (finishing: Finishing, guard: Guard) => Effect.Effect<void>;
30
+ /** Records a run that ended before its result was stored as a spent round, so the job is due at its next. */
31
+ readonly stall: (stalled: Stalling, guard: Guard) => Effect.Effect<void, SqlError.SqlError>;
32
+ }, never, CommandRunner>;
33
+ };
34
+ export declare class JobResults extends JobResults_base {
35
+ static readonly layer: Layer.Layer<JobResults, never, never>;
36
+ }
37
+ export {};