@akterjs/effect 0.0.0-stage → 0.1.1

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,13 @@
1
+ import { Option, Schema } from "effect";
2
+ // src/host/sqlite/sqlite-reason.pure.ts
3
+ const NativeSqliteError = Schema.Struct({
4
+ errcode: Schema.Int,
5
+ message: Schema.String
6
+ });
7
+ const decodeNative = Schema.decodeUnknownOption(NativeSqliteError);
8
+ const sqliteReason = (cause) => Option.map(decodeNative(cause), ({ errcode, message }) => ({
9
+ code: errcode,
10
+ message
11
+ }));
12
+ const reasonText = ({ code, message }) => `${message} (SQLite error ${code})`;
13
+ export { reasonText, sqliteReason };
@@ -0,0 +1,32 @@
1
+ import { TimerChanges, TimerId } from "../../contract/command/timer.schema.mjs";
2
+ import { Effect, Option } from "effect";
3
+ import { SqlClient, SqlError } from "effect/sql";
4
+ interface TimerWrite {
5
+ readonly at: number;
6
+ readonly principal: string;
7
+ readonly sql: SqlClient.SqlClient;
8
+ readonly timers: TimerChanges;
9
+ }
10
+ interface TimerLookup {
11
+ readonly id: TimerId;
12
+ readonly sql: SqlClient.SqlClient;
13
+ }
14
+ interface DueLookup {
15
+ readonly now: number;
16
+ readonly sql: SqlClient.SqlClient;
17
+ }
18
+ interface ClaimedTimer {
19
+ readonly command: string;
20
+ readonly payload: string;
21
+ readonly principal: string;
22
+ }
23
+ type Sql<Value> = Effect.Effect<Value, SqlError.SqlError>;
24
+ declare const saveTimers: ({ at, principal, sql, timers }: TimerWrite) => Sql<void>;
25
+ declare const dueTimers: ({ now, sql }: DueLookup) => Sql<readonly TimerId[]>;
26
+ declare const claimTimer: ({ id, sql }: TimerLookup) => Sql<Option.Option<ClaimedTimer>>;
27
+ interface Deferral extends TimerLookup {
28
+ readonly at: number;
29
+ }
30
+ declare const deferTimer: ({ at, id, sql }: Deferral) => Sql<void>;
31
+ declare const earliestDue: (sql: SqlClient.SqlClient) => Sql<Option.Option<number>>;
32
+ export { claimTimer, deferTimer, dueTimers, earliestDue, saveTimers };
@@ -0,0 +1,8 @@
1
+ import { Array, Duration, Effect, Option } from "effect";
2
+ // src/host/timer/actor-timers.sql.ts
3
+ const saveTimers = ({ at, principal, sql, timers }) => Effect.andThen(Effect.forEach(timers.cancelled, (id) => sql`DELETE FROM akter_timers WHERE id = ${id}`, { discard: true }), Effect.forEach(timers.scheduled, (timer) => sql`INSERT INTO akter_timers (id, due_at, command, payload, principal) VALUES (${timer.id}, ${at + Duration.toMillis(timer.after)}, ${timer.command}, ${timer.payload}, ${principal})`, { discard: true }));
4
+ const dueTimers = ({ now, sql }) => Effect.map(sql`SELECT id FROM akter_timers WHERE due_at <= ${now} ORDER BY due_at, id`, Array.map((row) => row.id));
5
+ const claimTimer = ({ id, sql }) => Effect.map(sql`DELETE FROM akter_timers WHERE id = ${id} RETURNING command, payload, principal`, Array.head);
6
+ const deferTimer = ({ at, id, sql }) => Effect.asVoid(sql`UPDATE akter_timers SET due_at = ${at} WHERE id = ${id}`);
7
+ const earliestDue = (sql) => Effect.map(sql`SELECT due_at AS due FROM akter_timers ORDER BY due_at LIMIT 1`, (rows) => Option.map(Array.head(rows), (row) => row.due));
8
+ export { claimTimer, deferTimer, dueTimers, earliestDue, saveTimers };
@@ -0,0 +1,26 @@
1
+ import { TimerId } from "../../contract/command/timer.schema.mjs";
2
+ import { OpenedActor } from "../actor/actor-database.service.mjs";
3
+ import { CommandRunner } from "../command/command-runner.service.mjs";
4
+ import { CeilingGuard } from "../upkeep/execution-authority.pure.mjs";
5
+ import { Context, Duration, Effect, Layer, Option } from "effect";
6
+ import { SqlError } from "effect/sql";
7
+ interface Firing {
8
+ readonly key: string;
9
+ /** Runs each timer's command against the store's storage ceiling, when it has one. */
10
+ readonly measured?: CeilingGuard;
11
+ readonly opened: OpenedActor;
12
+ }
13
+ declare const TimerRunner_base: Context.ServiceClass<TimerRunner, "@akterjs/effect/host/timer/timer-runner.service/TimerRunner", {
14
+ readonly fireDue: (firing: Firing) => Effect.Effect<readonly TimerId[], SqlError.SqlError>;
15
+ readonly nextDue: (opened: OpenedActor) => Effect.Effect<Option.Option<number>, SqlError.SqlError>;
16
+ }> & {
17
+ readonly make: Effect.Effect<{
18
+ readonly fireDue: (firing: Firing) => Effect.Effect<readonly TimerId[], SqlError.SqlError>;
19
+ readonly nextDue: (opened: OpenedActor) => Effect.Effect<Option.Option<number>, SqlError.SqlError>;
20
+ }, never, CommandRunner>;
21
+ };
22
+ export declare class TimerRunner extends TimerRunner_base {
23
+ static readonly layer: Layer.Layer<TimerRunner, never, never>;
24
+ static readonly refusedRetry: Context.Reference<Duration.Duration>;
25
+ }
26
+ export {};
@@ -0,0 +1,68 @@
1
+ import { claimTimer, deferTimer, dueTimers, earliestDue } from "./actor-timers.sql.mjs";
2
+ import { CommandRunner } from "../command/command-runner.service.mjs";
3
+ import { timerCommandId } from "../command/command-id-reuse.pure.mjs";
4
+ import { Array, Clock, Context, Duration, Effect, Layer, Option, identity } from "effect";
5
+ import { SqlError } from "effect/sql";
6
+ // src/host/timer/timer-runner.service.ts
7
+ const refusedRetrySeconds = 30;
8
+ /**
9
+ * How long a timer whose command the storage ceiling refused waits to fire again. A refusal lasts at least until the
10
+ * store's size is read again, so retrying sooner would mostly be refused again.
11
+ */
12
+ const RefusedTimerRetry = Context.Reference("@akterjs/effect/host/timer/timer-runner.service/RefusedTimerRetry", { defaultValue: () => Duration.seconds(refusedRetrySeconds) });
13
+ const refusedTimer = ({ id, opened, retry }) => (refused) => Effect.gen(function* deferRefused() {
14
+ const now = yield* Clock.currentTimeMillis;
15
+ yield* deferTimer({
16
+ at: now + Duration.toMillis(retry),
17
+ id,
18
+ sql: opened.sql
19
+ });
20
+ yield* Effect.logWarning(`timer ${id} would grow its store past its storage ceiling and fires again later`, refused);
21
+ return Option.none();
22
+ });
23
+ var TimerRunner = class extends Context.Service()("@akterjs/effect/host/timer/timer-runner.service/TimerRunner", { make: Effect.gen(function* makeTimerRunner() {
24
+ const runner = yield* CommandRunner;
25
+ const retry = yield* RefusedTimerRetry;
26
+ const fireOne = ({ id, key, measured = identity, opened }) => opened.sql.withTransaction(Effect.gen(function* claimAndRun() {
27
+ const claimed = yield* claimTimer({
28
+ id,
29
+ sql: opened.sql
30
+ });
31
+ if (Option.isNone(claimed)) return Option.none();
32
+ yield* measured(runner.runOwn({
33
+ opened,
34
+ request: {
35
+ ...claimed.value,
36
+ commandId: timerCommandId(id),
37
+ key,
38
+ member: claimed.value.command
39
+ }
40
+ }).pipe(Effect.catchIf((failure) => !SqlError.isSqlError(failure), (failure) => Effect.logWarning(`timer ${id} ended with a failure the journal does not keep`, failure))));
41
+ return Option.some(id);
42
+ })).pipe(Effect.catchTag("StorageLimitError", refusedTimer({
43
+ id,
44
+ opened,
45
+ retry
46
+ })));
47
+ return {
48
+ fireDue: Effect.fn("TimerRunner.fireDue")(function* fireDue(firing) {
49
+ const now = yield* Clock.currentTimeMillis;
50
+ const due = yield* dueTimers({
51
+ now,
52
+ sql: firing.opened.sql
53
+ });
54
+ const fired = yield* Effect.forEach(due, (id) => fireOne({
55
+ ...firing,
56
+ id
57
+ }));
58
+ return Array.getSomes(fired);
59
+ }),
60
+ nextDue: Effect.fn("TimerRunner.nextDue")(function* nextDue(opened) {
61
+ return yield* earliestDue(opened.sql);
62
+ })
63
+ };
64
+ }) }) {
65
+ static layer = Layer.effect(this, this.make).pipe(Layer.provide(CommandRunner.layer));
66
+ static refusedRetry = RefusedTimerRetry;
67
+ };
68
+ export { TimerRunner };
@@ -0,0 +1,26 @@
1
+ import { Parked } from "../job/job-runs.pure.mjs";
2
+ import "../job/job-engine.adapter.mjs";
3
+ import { Effect, Option } from "effect";
4
+ import { SqlClient, SqlError } from "effect/sql";
5
+ /** When an actor next has work: its soonest timer (or a job result's next round of retries), and whether a message waits for delivery and a job to run. */
6
+ interface DueWork {
7
+ readonly jobs: boolean;
8
+ readonly messages: boolean;
9
+ readonly timer: Option.Option<number>;
10
+ }
11
+ /**
12
+ * One statement for what the upkeep reads after each commit, instead of one each for the soonest timer, the outbox
13
+ * and the open jobs: each is a message to the native worker on Akter Cloud. An open job is counted as `openJobs`
14
+ * counts it, so an 'open' entry an older engine left behind beside its result doesn't count. A job whose result spent
15
+ * a round of retries doesn't count either: its next round's time counts as a timer instead, so the actor goes idle
16
+ * until then and the upkeep, or Akter Cloud's shard, wakes it for that round.
17
+ *
18
+ * A job `parked` on a signal or a clock doesn't count until one of the entries it waits on is stored: a signal comes
19
+ * with a command, which opens the actor, and a clock's time (its `clock/<name>` entry, until its
20
+ * `deferred/DurableClock/<name>` result) counts as a timer, so the actor can go idle while its jobs wait.
21
+ */
22
+ declare const dueWork: ({ parked, sql }: {
23
+ readonly parked: readonly Parked[];
24
+ readonly sql: SqlClient.SqlClient;
25
+ }) => Effect.Effect<DueWork, SqlError.SqlError>;
26
+ export { type DueWork, dueWork };
@@ -0,0 +1,43 @@
1
+ import { Array, Effect, Option, Schema } from "effect";
2
+ // src/host/upkeep/actor-due.sql.ts
3
+ const none = 0;
4
+ const Ids = Schema.fromJsonString(Schema.Array(Schema.String));
5
+ const Waits = Schema.fromJsonString(Schema.Array(Schema.Struct({
6
+ entry: Schema.String,
7
+ id: Schema.String
8
+ })));
9
+ const dueRows = (sql, { parked, waits }) => sql`SELECT (SELECT min(due) FROM (SELECT (SELECT due_at FROM akter_timers ORDER BY due_at LIMIT 1) AS due UNION ALL SELECT min(json_extract(stalled.value, '$.next')) FROM akter_workflow open INDEXED BY akter_workflow_open JOIN akter_workflow stalled ON stalled.execution_id = open.execution_id AND stalled.entry = 'undelivered' WHERE open.entry = 'open' AND json_extract(stalled.value, '$.retrying') = 0 UNION ALL SELECT min(CAST(clock.value AS INTEGER)) FROM akter_workflow open INDEXED BY akter_workflow_open JOIN akter_workflow clock ON clock.execution_id = open.execution_id AND clock.entry > 'clock/' AND clock.entry < 'clock0' 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 fired WHERE fired.execution_id = open.execution_id AND fired.entry = 'deferred/DurableClock/' || substr(clock.entry, 7)))) AS timer, EXISTS (SELECT 1 FROM akter_outbox) AS messages, EXISTS (SELECT 1 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, '$.retrying') = 0) AND (open.execution_id NOT IN (SELECT value FROM json_each(${parked})) OR EXISTS (SELECT 1 FROM json_each(${waits}) wait JOIN akter_workflow stored ON stored.execution_id = open.execution_id AND stored.entry = json_extract(wait.value, '$.entry') WHERE json_extract(wait.value, '$.id') = open.execution_id))) AS jobs`;
10
+ /** The parked jobs' ids and the entries they wait on, as the JSON lists the statement reads with `json_each`. */
11
+ const listsOf = (parked) => {
12
+ const ids = Array.map(parked, (job) => job.id);
13
+ const waits = Array.flatMap(parked, ({ id, waits: entries }) => Array.map(entries, (entry) => ({
14
+ entry,
15
+ id
16
+ })));
17
+ return Effect.orDie(Effect.all({
18
+ parked: Schema.encodeEffect(Ids)(ids),
19
+ waits: Schema.encodeEffect(Waits)(waits)
20
+ }));
21
+ };
22
+ /**
23
+ * One statement for what the upkeep reads after each commit, instead of one each for the soonest timer, the outbox
24
+ * and the open jobs: each is a message to the native worker on Akter Cloud. An open job is counted as `openJobs`
25
+ * counts it, so an 'open' entry an older engine left behind beside its result doesn't count. A job whose result spent
26
+ * a round of retries doesn't count either: its next round's time counts as a timer instead, so the actor goes idle
27
+ * until then and the upkeep, or Akter Cloud's shard, wakes it for that round.
28
+ *
29
+ * A job `parked` on a signal or a clock doesn't count until one of the entries it waits on is stored: a signal comes
30
+ * with a command, which opens the actor, and a clock's time (its `clock/<name>` entry, until its
31
+ * `deferred/DurableClock/<name>` result) counts as a timer, so the actor can go idle while its jobs wait.
32
+ */
33
+ const dueWork = ({ parked, sql }) => Effect.gen(function* readDue() {
34
+ const lists = yield* listsOf(parked);
35
+ const rows = yield* dueRows(sql, lists);
36
+ const row = Array.head(rows);
37
+ return {
38
+ jobs: Option.exists(row, (found) => found.jobs !== none),
39
+ messages: Option.exists(row, (found) => found.messages !== none),
40
+ timer: Option.flatMap(row, (found) => Option.fromNullOr(found.timer))
41
+ };
42
+ });
43
+ export { dueWork };
@@ -0,0 +1,55 @@
1
+ import { OpenedActor } from "../actor/actor-database.service.mjs";
2
+ import { JobStore } from "../job/job-runs.pure.mjs";
3
+ import { Delivery, DeliveryBatch, OutboxRunner } from "../outbox/outbox-runner.service.mjs";
4
+ import { TimerRunner } from "../timer/timer-runner.service.mjs";
5
+ import { JobEngine } from "../job/job-engine.adapter.mjs";
6
+ import { JobResults } from "../job/job-results.service.mjs";
7
+ import { CeilingGuard } from "./execution-authority.pure.mjs";
8
+ import { Context, Duration, Effect, Layer, Option, Scope } from "effect";
9
+ import { SqlError } from "effect/sql";
10
+ interface Upkeep<Failure> {
11
+ readonly exclusive: <Success, Error, Needs>(effect: Effect.Effect<Success, Error, Needs>) => Effect.Effect<Success, Error, Needs>;
12
+ readonly key: string;
13
+ readonly lock: <Success, Error, Needs>(effect: Effect.Effect<Success, Error, Needs>) => Effect.Effect<Success, Error, Needs>;
14
+ /** Runs app code that upkeep starts against the store's storage ceiling, when it has one. */
15
+ readonly measured?: CeilingGuard;
16
+ readonly opened: OpenedActor;
17
+ readonly read: Upkeep<Failure>["exclusive"];
18
+ readonly send: DeliveryBatch<Failure>;
19
+ }
20
+ interface Kept<Failure> {
21
+ /**
22
+ * When the oldest job activity executing now in this session started, if one is. A host keeps such an actor open:
23
+ * closing it would interrupt the activity, which then runs again on the next session.
24
+ */
25
+ readonly busySince: Effect.Effect<Option.Option<number>>;
26
+ readonly committed: Effect.Effect<void>;
27
+ readonly drain: Effect.Effect<boolean, Failure | SqlError.SqlError>;
28
+ readonly jobs: JobStore;
29
+ readonly kick: Effect.Effect<void>;
30
+ /**
31
+ * When the actor next has work: now while a message waits or a job has something to run, else its soonest timer,
32
+ * clock wait or job result round. A job parked on a signal or a clock leaves it idle, so a host may close it.
33
+ */
34
+ readonly nextDue: Effect.Effect<Option.Option<number>, SqlError.SqlError>;
35
+ }
36
+ type Start = <Failure>(upkeep: Upkeep<Failure>) => Effect.Effect<Kept<Failure>, never, Scope.Scope>;
37
+ declare const ActorUpkeep_base: Context.ServiceClass<ActorUpkeep, "@akterjs/effect/host/upkeep/actor-upkeep.service/ActorUpkeep", {
38
+ readonly keep: <Success, Failure>(effect: Effect.Effect<Success, Failure>, what: string) => Effect.Effect<void>;
39
+ readonly locateJobs: JobEngine["Service"]["bind"];
40
+ readonly retainedJobs: JobEngine["Service"]["retained"];
41
+ readonly start: Start;
42
+ }> & {
43
+ readonly make: Effect.Effect<{
44
+ readonly keep: <Success, Failure>(effect: Effect.Effect<Success, Failure>, what: string) => Effect.Effect<void>;
45
+ readonly locateJobs: JobEngine["Service"]["bind"];
46
+ readonly retainedJobs: JobEngine["Service"]["retained"];
47
+ readonly start: Start;
48
+ }, never, JobEngine | JobResults | OutboxRunner | TimerRunner>;
49
+ };
50
+ export declare class ActorUpkeep extends ActorUpkeep_base {
51
+ static readonly refusedTimerRetry: Context.Reference<Duration.Duration>;
52
+ static readonly sequentialDeliveries: <Failure, Needs>(send: (delivery: Delivery) => Effect.Effect<unknown, Failure, Needs>) => ((deliveries: readonly Delivery[]) => Effect.Effect<readonly import("effect/Result").Result<void, Failure>[], never, Needs>);
53
+ static readonly layer: Layer.Layer<ActorUpkeep, never, never>;
54
+ }
55
+ export type { Kept, Upkeep };
@@ -0,0 +1,218 @@
1
+ import { pendingThrough } from "../outbox/actor-outbox.sql.mjs";
2
+ import { OutboxRunner } from "../outbox/outbox-runner.service.mjs";
3
+ import { TimerRunner } from "../timer/timer-runner.service.mjs";
4
+ import { JobEngine } from "../job/job-engine.adapter.mjs";
5
+ import { JobResults } from "../job/job-results.service.mjs";
6
+ import { dueWork } from "./actor-due.sql.mjs";
7
+ import { ExecutionAuthority, UpkeepGate } from "./execution-authority.pure.mjs";
8
+ import { Array, Clock, Context, Deferred, Duration, Effect, Latch, Layer, Option, Queue, Ref, Schedule, Semaphore } from "effect";
9
+ // src/host/upkeep/actor-upkeep.service.ts
10
+ const pendingSignal = 1;
11
+ const oneDelivery = 1;
12
+ const noWait = 0;
13
+ const backoff = Schedule.min([Schedule.exponential("100 millis"), Schedule.spaced("30 seconds")]);
14
+ const retryLimit = 10;
15
+ const retried = (effect, what) => effect.pipe(Effect.tapError((failure) => Effect.logWarning(`${what} failed and will be retried`, failure)), Effect.retry({
16
+ schedule: backoff,
17
+ times: retryLimit
18
+ }), Effect.matchEffect({
19
+ onFailure: (failure) => Effect.logError(`${what} failed ${retryLimit} retries and waits for the next command or restart`, failure),
20
+ onSuccess: () => Effect.void
21
+ }));
22
+ const delivering = (outbox, { key, opened }, { deliveries, delivering: lock, gate }) => {
23
+ const deliverAll = retried(lock.withPermits(oneDelivery)(outbox.deliver).pipe(Effect.tap((delivered) => {
24
+ if (Array.isReadonlyArrayNonEmpty(delivered)) return Queue.offer(deliveries, true);
25
+ return Effect.void;
26
+ })), `${opened.actor.name}/${key} delivery`);
27
+ const held = Effect.andThen(gate.await, deliverAll);
28
+ return Effect.forever(Effect.andThen(Queue.take(deliveries), held));
29
+ };
30
+ const firing = ({ timers }, upkeep, signals) => {
31
+ const { exclusive, key, opened } = upkeep;
32
+ const untilDue = (due) => Effect.flatMap(Clock.currentTimeMillis, (now) => {
33
+ const sleep = Effect.sleep(Duration.millis(Math.max(due - now, noWait)));
34
+ return Effect.raceFirst(sleep, Queue.take(signals.wakes));
35
+ });
36
+ const fireWhenDue = Effect.gen(function* fireWhenDue() {
37
+ const next = yield* Ref.get(signals.soonest);
38
+ yield* Option.match(next, {
39
+ onNone: () => Queue.take(signals.wakes),
40
+ onSome: untilDue
41
+ });
42
+ const [now, current] = yield* Effect.all([Clock.currentTimeMillis, Ref.get(signals.soonest)]);
43
+ if (!Option.exists(current, (due) => due <= now)) return;
44
+ yield* signals.gate.await;
45
+ yield* exclusive(timers.fireDue(upkeep));
46
+ yield* Queue.offer(signals.deliveries, true);
47
+ yield* Queue.offer(signals.starts, true);
48
+ yield* Effect.flatMap(timers.nextDue(opened), (due) => Ref.set(signals.soonest, due));
49
+ });
50
+ return Effect.forever(retried(fireWhenDue, `${opened.actor.name}/${key} timers`));
51
+ };
52
+ /** If a stalled run can't even be recorded, it is retried from memory after the first round's gap. */
53
+ const unrecordedRetry = "5 minutes";
54
+ const jobStore = ({ results }, { exclusive, key, lock, measured, opened }, { authority, kick, scope }) => {
55
+ const guard = (effect) => authority(exclusive(effect));
56
+ const later = Effect.andThen(Effect.sleep(unrecordedRetry), kick);
57
+ const unrecorded = (cause) => Effect.andThen(Effect.logError("a stalled job could not be recorded, so it is retried from memory", cause), Effect.forkIn(later, scope));
58
+ return {
59
+ authority,
60
+ exclusive: (effect) => authority(lock(effect)),
61
+ finish: (finished) => Effect.andThen(results.settle({
62
+ ...finished,
63
+ key,
64
+ measured,
65
+ opened
66
+ }, guard), kick),
67
+ id: opened.filename,
68
+ stalled: (stalled) => Effect.matchCauseEffect(results.stall({
69
+ ...stalled,
70
+ key,
71
+ opened
72
+ }, guard), {
73
+ onFailure: unrecorded,
74
+ onSuccess: () => kick
75
+ }),
76
+ withSql: (use) => use(opened.sql)
77
+ };
78
+ };
79
+ const starting = ({ jobs }, store, { gate, starts }) => {
80
+ const held = Effect.andThen(gate.await, jobs.start(store));
81
+ return Effect.forever(Effect.andThen(Queue.take(starts), held));
82
+ };
83
+ const drainOnce = ({ jobs, timers }, upkeep, { gate, lock, outbox, store }) => Effect.gen(function* drainPass() {
84
+ if (!Latch.isOpen(gate)) return false;
85
+ const fired = yield* upkeep.exclusive(timers.fireDue(upkeep));
86
+ const ran = yield* jobs.drain(store);
87
+ const delivered = yield* lock.withPermits(oneDelivery)(Effect.tap(outbox.deliver, () => outbox.flush));
88
+ return ran || fired.length + delivered.length > noWait;
89
+ });
90
+ const offered = (signals) => Effect.forEach(signals, (signal) => Queue.offer(signal, true), { discard: true });
91
+ /** Reads what is due, counting the session's parked jobs as waiting (`dueWork`). */
92
+ const dueOf = (opened, parked) => Effect.flatMap(parked, (jobs) => dueWork({
93
+ parked: jobs,
94
+ sql: opened.sql
95
+ }));
96
+ /**
97
+ * After a write, reads what is due in one statement: the timer loop gets the soonest timer, so it reads none itself on
98
+ * a wake, and the job runner wakes only while a job has something to run. Delivery always wakes; it reads nothing
99
+ * unless a message was committed past what it delivered. If the read fails, the timer loop is told a timer may be due
100
+ * now, so it fires and reads the next one with its own retries.
101
+ */
102
+ const kicked = (due, signals) => Effect.matchEffect(due, {
103
+ onFailure: () => Effect.andThen(Effect.flatMap(Clock.currentTimeMillis, (now) => Ref.set(signals.soonest, Option.some(now))), offered([
104
+ signals.deliveries,
105
+ signals.starts,
106
+ signals.wakes
107
+ ])),
108
+ onSuccess: ({ jobs, timer }) => Effect.andThen(Ref.set(signals.soonest, timer), offered([
109
+ signals.deliveries,
110
+ signals.wakes,
111
+ ...Array.filter([signals.starts], () => jobs)
112
+ ]))
113
+ });
114
+ const dueSoonest = Effect.fnUntraced(function* nextDue(due) {
115
+ const now = yield* Clock.currentTimeMillis;
116
+ const { jobs, messages, timer } = yield* due;
117
+ if (!jobs && !messages) return timer;
118
+ return Option.some(Math.min(now, Option.getOrElse(timer, () => now)));
119
+ });
120
+ const committedOutbox = Effect.fnUntraced(function* committedOutbox({ outbox }, upkeep, signals) {
121
+ const initial = yield* Effect.orDie(upkeep.exclusive(pendingThrough(upkeep.opened.sql)));
122
+ const through = yield* Ref.make(initial);
123
+ const session = yield* outbox.open({
124
+ ...upkeep,
125
+ committed: Ref.get(through)
126
+ });
127
+ return {
128
+ committed: Effect.orDie(Effect.flatMap(pendingThrough(upkeep.opened.sql), (seq) => Ref.set(through, seq))).pipe(Effect.andThen(Queue.offer(signals.deliveries, true)), Effect.asVoid),
129
+ session
130
+ };
131
+ });
132
+ const attachedJobs = (runners, upkeep, guards) => Effect.tap(Effect.map(Effect.scope, (scope) => jobStore(runners, upkeep, {
133
+ ...guards,
134
+ scope
135
+ })), (jobs) => Effect.addFinalizer(() => runners.jobs.detach(jobs)));
136
+ /**
137
+ * The session's job store and its kick: the kick reads the store's parked jobs with what is due, and the store kicks
138
+ * after each result it stores, so the kick waits for the store it reads.
139
+ */
140
+ const kickedJobs = Effect.fnUntraced(function* kickedJobs(runners, upkeep, { authority, signals }) {
141
+ const store = yield* Deferred.make();
142
+ const due = dueOf(upkeep.opened, Effect.flatMap(Deferred.await(store), runners.jobs.parked));
143
+ const kick = kicked(due, signals);
144
+ const jobs = yield* attachedJobs(runners, upkeep, {
145
+ authority,
146
+ kick
147
+ });
148
+ yield* Deferred.succeed(store, jobs);
149
+ return {
150
+ due,
151
+ jobs,
152
+ kick
153
+ };
154
+ });
155
+ const startWith = (runners) => Effect.fnUntraced(function* start(upkeep) {
156
+ const authority = yield* ExecutionAuthority;
157
+ const bound = {
158
+ ...upkeep,
159
+ send: (deliveries) => authority(upkeep.send(deliveries))
160
+ };
161
+ const signals = {
162
+ deliveries: yield* Queue.sliding(pendingSignal),
163
+ delivering: yield* Semaphore.make(oneDelivery),
164
+ gate: yield* UpkeepGate,
165
+ soonest: yield* Ref.make(Option.none()),
166
+ starts: yield* Queue.sliding(pendingSignal),
167
+ wakes: yield* Queue.sliding(pendingSignal)
168
+ };
169
+ const { due, jobs, kick } = yield* kickedJobs(runners, bound, {
170
+ authority,
171
+ signals
172
+ });
173
+ const outbox = yield* committedOutbox(runners, bound, signals);
174
+ const work = [
175
+ authority(delivering(outbox.session, bound, signals)),
176
+ authority(firing(runners, bound, signals)),
177
+ authority(starting(runners, jobs, signals))
178
+ ];
179
+ yield* Effect.forEach(work, (effect) => Effect.forkScoped(effect), { discard: true });
180
+ yield* kick;
181
+ return {
182
+ busySince: runners.jobs.busySince(jobs),
183
+ committed: authority(outbox.committed),
184
+ drain: authority(drainOnce(runners, bound, {
185
+ gate: signals.gate,
186
+ lock: signals.delivering,
187
+ outbox: outbox.session,
188
+ store: jobs
189
+ })),
190
+ jobs,
191
+ kick: authority(kick),
192
+ nextDue: dueSoonest(due)
193
+ };
194
+ });
195
+ var ActorUpkeep = class extends Context.Service()("@akterjs/effect/host/upkeep/actor-upkeep.service/ActorUpkeep", { make: Effect.gen(function* makeActorUpkeep() {
196
+ const runners = {
197
+ jobs: yield* JobEngine,
198
+ outbox: yield* OutboxRunner,
199
+ results: yield* JobResults,
200
+ timers: yield* TimerRunner
201
+ };
202
+ return {
203
+ keep: retried,
204
+ locateJobs: runners.jobs.bind,
205
+ retainedJobs: runners.jobs.retained,
206
+ start: startWith(runners)
207
+ };
208
+ }) }) {
209
+ static refusedTimerRetry = TimerRunner.refusedRetry;
210
+ static sequentialDeliveries = OutboxRunner.sequentialDeliveries;
211
+ static layer = Layer.effect(this, this.make).pipe(Layer.provide([
212
+ JobEngine.layerShared,
213
+ JobResults.layer,
214
+ OutboxRunner.layer,
215
+ TimerRunner.layer
216
+ ]));
217
+ };
218
+ export { ActorUpkeep };
@@ -0,0 +1,19 @@
1
+ import { StorageLimitError } from "../../contract/client/storage-limit.errors.mjs";
2
+ import { Context, Effect, Latch } from "effect";
3
+ import { SqlError } from "effect/sql";
4
+ type ExecutionGuard = <Value, Failure, Needs>(effect: Effect.Effect<Value, Failure, Needs>) => Effect.Effect<Value, Failure, Needs>;
5
+ /**
6
+ * Runs one write of app code that upkeep starts, such as a timer's command, against the store's storage ceiling: past
7
+ * it the write stays only if the actor's database didn't grow, and one that grew is rolled back and refused with the
8
+ * ceiling's StorageLimitError. Measuring is SQL of its own, which can fail. Akter Cloud supplies it; the local engine
9
+ * has no ceiling.
10
+ */
11
+ type CeilingGuard = <Value, Failure, Needs>(effect: Effect.Effect<Value, Failure, Needs>) => Effect.Effect<Value, Failure | SqlError.SqlError | StorageLimitError, Needs>;
12
+ declare const ExecutionAuthority: Context.Reference<ExecutionGuard>;
13
+ /**
14
+ * Whether an actor's upkeep may act: fire its due timers, deliver its outbox and run its jobs. A quiet environment,
15
+ * such as a branch that was not promoted yet, closes it. Its work is held, not dropped: it waits at the gate and runs
16
+ * once the gate opens. Open by default, so an engine that never closes it acts as before.
17
+ */
18
+ declare const UpkeepGate: Context.Reference<Latch.Latch>;
19
+ export { type CeilingGuard, ExecutionAuthority, type ExecutionGuard, UpkeepGate };
@@ -0,0 +1,10 @@
1
+ import { Context, Latch, identity } from "effect";
2
+ // src/host/upkeep/execution-authority.pure.ts
3
+ const ExecutionAuthority = Context.Reference("@akterjs/effect/host/upkeep/execution-authority.pure/ExecutionAuthority", { defaultValue: () => identity });
4
+ /**
5
+ * Whether an actor's upkeep may act: fire its due timers, deliver its outbox and run its jobs. A quiet environment,
6
+ * such as a branch that was not promoted yet, closes it. Its work is held, not dropped: it waits at the gate and runs
7
+ * once the gate opens. Open by default, so an engine that never closes it acts as before.
8
+ */
9
+ const UpkeepGate = Context.Reference("@akterjs/effect/host/upkeep/execution-authority.pure/UpkeepGate", { defaultValue: () => Latch.makeUnsafe(true) });
10
+ export { ExecutionAuthority, UpkeepGate };
@@ -0,0 +1,28 @@
1
+ import { localEngine } from "./local-engine.layer.mjs";
2
+ import { offlineEnvironments } from "./local-environments.layer.mjs";
3
+ import { LocalMigration, StoreMigration } from "../serve/store/store-migrations.service.mjs";
4
+ import { jobs } from "./local-job-runtime.layer.mjs";
5
+ import { localClient } from "../serve/rpc/in-process-client.layer.mjs";
6
+ import { Duration, Layer } from "effect";
7
+ import { WorkflowEngine } from "effect/workflow";
8
+ interface LocalServing {
9
+ /** The data directory, `.akter` for `akter dev`. */
10
+ readonly directory: string;
11
+ /**
12
+ * Serve this environment of the data directory, such as a branch to call before promoting it, instead of the one
13
+ * promoted to serve. It stays quiet until it is promoted.
14
+ */
15
+ readonly environment?: string | undefined;
16
+ }
17
+ type LocalServices = Layer.Success<ReturnType<typeof localEngine>> | WorkflowEngine.WorkflowEngine;
18
+ /**
19
+ * The local engine on a data directory. It serves the directory's serving environment, the directory itself until a
20
+ * branch is promoted, and switches when a promote makes another serve; `LocalEnvironments` snapshots, branches and
21
+ * promotes them.
22
+ */
23
+ declare const local: (target: string | LocalServing) => Layer.Layer<LocalServices>;
24
+ /** A data directory's environments and snapshots without an engine, as the CLI reads and changes them. */
25
+ declare const environments: (directory: string) => Layer.Layer<Layer.Success<ReturnType<typeof offlineEnvironments>>>;
26
+ declare const historyRetention: (retention: Duration.Input) => Layer.Layer<never>;
27
+ declare const migrate: (migration: LocalMigration) => StoreMigration;
28
+ export { environments, historyRetention, jobs, local, localClient, migrate };
@@ -0,0 +1,24 @@
1
+ import { localEngine } from "./local-engine.layer.mjs";
2
+ import { ActorHost } from "../serve/engine/actor-host.service.mjs";
3
+ import { offlineEnvironments } from "./local-environments.layer.mjs";
4
+ import { withJobs } from "../serve/engine/job-runtime.layer.mjs";
5
+ import { migrateStore } from "../serve/store/store-migrations.layer.mjs";
6
+ import { jobs } from "./local-job-runtime.layer.mjs";
7
+ import { localClient } from "../serve/rpc/in-process-client.layer.mjs";
8
+ import { Duration, Layer, Predicate, Stream } from "effect";
9
+ import { layer } from "@effect/platform-node/NodeServices";
10
+ // src/runtime/akter-local.layer.ts
11
+ /**
12
+ * The local engine on a data directory. It serves the directory's serving environment, the directory itself until a
13
+ * branch is promoted, and switches when a promote makes another serve; `LocalEnvironments` snapshots, branches and
14
+ * promotes them.
15
+ */
16
+ const local = (target) => {
17
+ if (Predicate.isString(target)) return local({ directory: target });
18
+ return localEngine(target).pipe(withJobs, Layer.provide(layer));
19
+ };
20
+ /** A data directory's environments and snapshots without an engine, as the CLI reads and changes them. */
21
+ const environments = (directory) => offlineEnvironments(directory).pipe(Layer.provide(layer));
22
+ const historyRetention = (retention) => Layer.succeed(ActorHost.historyRetention, Duration.fromInputUnsafe(retention));
23
+ const migrate = (migration) => Stream.provide(migrateStore(migration), layer);
24
+ export { environments, historyRetention, jobs, local, localClient, migrate };