@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,38 @@
1
+ import { Schema } from "effect";
2
+ declare const EnvironmentName: Schema.brand<Schema.String, "EnvironmentName">;
3
+ type EnvironmentName = typeof EnvironmentName.Type;
4
+ declare const SnapshotName: Schema.brand<Schema.String, "SnapshotName">;
5
+ type SnapshotName = typeof SnapshotName.Type;
6
+ declare const SnapshotId: Schema.String;
7
+ /** One local environment: a store of its own, a directory in the data directory. */
8
+ declare const LocalEnvironment: Schema.Struct<{
9
+ readonly createdAt: Schema.DateTimeUtcFromString;
10
+ readonly directory: Schema.String;
11
+ readonly name: Schema.brand<Schema.String, "EnvironmentName">;
12
+ readonly quiet: Schema.Boolean;
13
+ readonly serving: Schema.Boolean;
14
+ readonly source: Schema.optionalKey<Schema.String>;
15
+ readonly status: Schema.Literals<readonly ["Ready", "Retired"]>;
16
+ }>;
17
+ type LocalEnvironment = typeof LocalEnvironment.Type;
18
+ /** A named snapshot of one local environment: each actor's database and the environment's files. */
19
+ declare const LocalSnapshot: Schema.Struct<{
20
+ readonly createdAt: Schema.DateTimeUtcFromString;
21
+ readonly environment: Schema.brand<Schema.String, "EnvironmentName">;
22
+ readonly id: Schema.String;
23
+ readonly name: Schema.brand<Schema.String, "SnapshotName">;
24
+ readonly reason: Schema.optionalKey<Schema.String>;
25
+ readonly sizeBytes: Schema.optionalKey<Schema.Int>;
26
+ readonly status: Schema.Literals<readonly ["Pending", "Ready", "Failed", "Retired"]>;
27
+ readonly takenAt: Schema.optionalKey<Schema.DateTimeUtcFromString>;
28
+ }>;
29
+ type LocalSnapshot = typeof LocalSnapshot.Type;
30
+ declare const LocalResource: Schema.Literals<readonly ["environment", "snapshot"]>;
31
+ /** What a promote did: which environment serves now, which served before, and what that leaves behind. */
32
+ declare const Promotion: Schema.Struct<{
33
+ readonly environment: Schema.brand<Schema.String, "EnvironmentName">;
34
+ readonly notice: Schema.String;
35
+ readonly previous: Schema.optionalKey<Schema.brand<Schema.String, "EnvironmentName">>;
36
+ }>;
37
+ type Promotion = typeof Promotion.Type;
38
+ export { EnvironmentName, LocalEnvironment, LocalResource, LocalSnapshot, Promotion, SnapshotId, SnapshotName };
@@ -0,0 +1,43 @@
1
+ import { Schema } from "effect";
2
+ // src/serve/environment/local-environment.schema.ts
3
+ const isName = [Schema.isPattern(new RegExp(`^[a-z](?:-?[a-z0-9])*$`, "u")), Schema.isMaxLength(63)];
4
+ const nameRule = "1 to 63 characters: a lowercase letter, then lowercase letters, digits or single hyphens, ending in a letter or digit.";
5
+ const EnvironmentName = Schema.String.check(...isName).pipe(Schema.brand("EnvironmentName")).annotate({ description: `An environment's name, unique in its data directory. ${nameRule}` });
6
+ const SnapshotName = Schema.String.check(...isName).pipe(Schema.brand("SnapshotName")).annotate({ description: `A snapshot's name, unique among its environment's live snapshots. ${nameRule}` });
7
+ const SnapshotId = Schema.String.check(Schema.isPattern(/^snapshot-\d+$/u)).annotate({ description: "snapshot-<n>, numbered in the order snapshots were asked for; a deleted snapshot's id is never reused." });
8
+ const EnvironmentStatus = Schema.Literals(["Ready", "Retired"]).annotate({ description: "Ready: it can serve. Retired: it was deleted; its data is gone and it keeps its name." });
9
+ /** One local environment: a store of its own, a directory in the data directory. */
10
+ const LocalEnvironment = Schema.Struct({
11
+ createdAt: Schema.DateTimeUtcFromString,
12
+ directory: Schema.String.annotate({ description: "The environment's store, the folder its shards live in." }),
13
+ name: EnvironmentName,
14
+ quiet: Schema.Boolean.annotate({ description: "No timer fires, no outbox message is delivered and no job runs while it is quiet; they are held until it is promoted." }),
15
+ serving: Schema.Boolean.annotate({ description: "Whether akter dev serves it at /rpc." }),
16
+ source: Schema.optionalKey(SnapshotId.annotate({ description: "The snapshot it was branched from." })),
17
+ status: EnvironmentStatus
18
+ });
19
+ const SnapshotStatus = Schema.Literals([
20
+ "Pending",
21
+ "Ready",
22
+ "Failed",
23
+ "Retired"
24
+ ]).annotate({ description: "Pending: akter dev serving the environment takes it next. Ready: it holds the environment's data as of takenAt. Failed: reason says why. Retired: it was deleted." });
25
+ /** A named snapshot of one local environment: each actor's database and the environment's files. */
26
+ const LocalSnapshot = Schema.Struct({
27
+ createdAt: Schema.DateTimeUtcFromString,
28
+ environment: EnvironmentName,
29
+ id: SnapshotId,
30
+ name: SnapshotName,
31
+ reason: Schema.optionalKey(Schema.String),
32
+ sizeBytes: Schema.optionalKey(Schema.Int),
33
+ status: SnapshotStatus,
34
+ takenAt: Schema.optionalKey(Schema.DateTimeUtcFromString)
35
+ });
36
+ const LocalResource = Schema.Literals(["environment", "snapshot"]);
37
+ /** What a promote did: which environment serves now, which served before, and what that leaves behind. */
38
+ const Promotion = Schema.Struct({
39
+ environment: EnvironmentName,
40
+ notice: Schema.String,
41
+ previous: Schema.optionalKey(EnvironmentName)
42
+ });
43
+ export { EnvironmentName, LocalEnvironment, LocalResource, LocalSnapshot, Promotion, SnapshotId, SnapshotName };
@@ -0,0 +1,44 @@
1
+ import { Failure, Hosting, Store } from "./environment-store.sql.mjs";
2
+ import { EnvironmentName, LocalEnvironment, Promotion, SnapshotName } from "./local-environment.schema.mjs";
3
+ import { createSnapshot, deleteSnapshot, getSnapshot, listSnapshots } from "./snapshot-operations.sql.mjs";
4
+ import { Context, Effect, FileSystem, Path, Scope } from "effect";
5
+ import { SqlClient, SqlError } from "effect/sql";
6
+ interface Branching {
7
+ /** The environment the snapshot is of; the serving one when missing. */
8
+ readonly from?: EnvironmentName | undefined;
9
+ readonly name: EnvironmentName;
10
+ readonly snapshot: SnapshotName;
11
+ }
12
+ type Operation<Input, Value> = (input: Input) => Effect.Effect<Value, Failure>;
13
+ interface StoreOpening {
14
+ readonly directory: string;
15
+ readonly hosting: Hosting;
16
+ readonly open: (filename: string) => Effect.Effect<SqlClient.SqlClient, SqlError.SqlError, Scope.Scope>;
17
+ }
18
+ interface Operations {
19
+ readonly branch: Operation<Branching, LocalEnvironment>;
20
+ readonly createSnapshot: ReturnType<typeof createSnapshot>;
21
+ readonly deleteEnvironment: Operation<EnvironmentName, LocalEnvironment>;
22
+ readonly deleteSnapshot: ReturnType<typeof deleteSnapshot>;
23
+ readonly environment: Operation<EnvironmentName, LocalEnvironment>;
24
+ readonly environments: Effect.Effect<readonly LocalEnvironment[], Failure>;
25
+ readonly promote: Operation<EnvironmentName, Promotion>;
26
+ readonly snapshot: ReturnType<typeof getSnapshot>;
27
+ readonly snapshots: ReturnType<typeof listSnapshots>;
28
+ }
29
+ declare const LocalEnvironments_base: Context.ServiceClass<LocalEnvironments, "@akterjs/effect/serve/environment/local-environments.service/LocalEnvironments", Operations>;
30
+ /**
31
+ * The environments and snapshots of one data directory, named as Akter Cloud's environments and snapshots groups:
32
+ * snapshot an environment, branch a quiet environment from a snapshot, promote it to serve, and promote back.
33
+ */
34
+ export declare class LocalEnvironments extends LocalEnvironments_base {
35
+ static readonly openStore: (args_0: StoreOpening) => Effect.Effect<{
36
+ directory: string;
37
+ fileSystem: FileSystem.FileSystem;
38
+ hosting: Hosting;
39
+ path: Path.Path;
40
+ sql: SqlClient.SqlClient;
41
+ }, import("effect/PlatformError").PlatformError | SqlError.SqlError, FileSystem.FileSystem | Path.Path | Scope.Scope>;
42
+ static readonly on: (store: Store) => Operations;
43
+ }
44
+ export type { Branching };
@@ -0,0 +1,196 @@
1
+ import { environmentRow, environmentRows, environmentsFolder, insertBranch, markPromoted, prepareRecords, recordFile, retireEnvironment, servingRow, snapshotById } from "./environment-records.sql.mjs";
2
+ import { AlreadyExistsError } from "./environment-already-exists.errors.mjs";
3
+ import { InUseError } from "./environment-in-use.errors.mjs";
4
+ import { environmentOf, readyEnvironment, recordedEnvironment, stored } from "./environment-store.sql.mjs";
5
+ import { EnvironmentName } from "./local-environment.schema.mjs";
6
+ import { alreadyServing, promotionNotice } from "./promotion-notice.pure.mjs";
7
+ import { createSnapshot, deleteSnapshot, getSnapshot, listSnapshots, snapshotDirectory } from "./snapshot-operations.sql.mjs";
8
+ import { Array, Clock, Context, Effect, FileSystem, Option, Path } from "effect";
9
+ // src/serve/environment/local-environments.service.ts
10
+ const partial = ".partial";
11
+ const neverServed = 0;
12
+ const removal = {
13
+ force: true,
14
+ recursive: true
15
+ };
16
+ const describedBy = (store) => Effect.fnUntraced(function* described(row) {
17
+ const serving = yield* servingRow(store);
18
+ return environmentOf({
19
+ ...store,
20
+ serving: serving.environment
21
+ })(row);
22
+ });
23
+ const listEnvironments = (store) => stored(store)(Effect.gen(function* listingEnvironments() {
24
+ const serving = yield* servingRow(store);
25
+ const rows = yield* environmentRows(store);
26
+ return Array.map(rows, environmentOf({
27
+ ...store,
28
+ serving: serving.environment
29
+ }));
30
+ }));
31
+ const getEnvironment = (store) => (name) => stored(store)(Effect.flatMap(recordedEnvironment(store, name), describedBy(store)));
32
+ const unusedName = Effect.fnUntraced(function* unusedName(store, name) {
33
+ const taken = yield* environmentRow({
34
+ name,
35
+ sql: store.sql
36
+ });
37
+ if (Option.isSome(taken)) return yield* AlreadyExistsError.make({
38
+ key: name,
39
+ resource: "environment"
40
+ });
41
+ return name;
42
+ });
43
+ const branchSource = Effect.fnUntraced(function* branchSource(store, { from, name, snapshot }) {
44
+ yield* unusedName(store, name);
45
+ const found = yield* getSnapshot(store)({
46
+ environment: from,
47
+ name: snapshot
48
+ });
49
+ if (found.status !== "Ready") return yield* InUseError.make({
50
+ key: snapshot,
51
+ reason: "snapshotNotReady"
52
+ });
53
+ return found;
54
+ });
55
+ const copied = Effect.fnUntraced(function* copied(store, source, target) {
56
+ const staging = `${target}${partial}`;
57
+ yield* store.fileSystem.remove(staging, removal);
58
+ yield* store.fileSystem.copy(source, staging);
59
+ yield* store.fileSystem.rename(staging, target);
60
+ });
61
+ /**
62
+ * Branches a new environment from a snapshot: a copy of the snapshot's store in a directory of its own, quiet until
63
+ * it is promoted, so it serves calls but fires no timer, delivers no message and runs no job. Its copy appears by one
64
+ * rename, so nothing reads a partial branch.
65
+ */
66
+ const branch = (store) => (branching) => stored(store)(Effect.gen(function* branchingEnvironment() {
67
+ const source = yield* branchSource(store, branching);
68
+ const relative = store.path.join(environmentsFolder, branching.name);
69
+ const target = store.path.join(store.directory, relative);
70
+ yield* copied(store, snapshotDirectory(store)(source.id), target);
71
+ const now = yield* Clock.currentTimeMillis;
72
+ const recorded = {
73
+ directory: relative,
74
+ name: branching.name,
75
+ now,
76
+ source: source.id,
77
+ sql: store.sql
78
+ };
79
+ const insert = Effect.andThen(unusedName(store, branching.name), insertBranch(recorded));
80
+ yield* Effect.tapError(store.sql.withTransaction(insert), () => store.fileSystem.remove(target, removal));
81
+ return yield* getEnvironment(store)(branching.name);
82
+ }));
83
+ const originOf = Effect.fnUntraced(function* originOf(store, row) {
84
+ const source = Option.filter(Option.fromNullishOr(row.source), () => row.served === neverServed);
85
+ const found = yield* Effect.forEach(Option.toArray(source), (id) => snapshotById({
86
+ id,
87
+ sql: store.sql
88
+ }));
89
+ return Option.map(Option.flatten(Array.head(found)), (snapshot) => ({
90
+ environment: snapshot.environment,
91
+ id: snapshot.id,
92
+ name: snapshot.name,
93
+ takenAt: Option.fromNullishOr(snapshot.taken_at)
94
+ }));
95
+ });
96
+ const promotionOf = (environment, notice, previous) => Option.match(previous, {
97
+ onNone: () => ({
98
+ environment,
99
+ notice
100
+ }),
101
+ onSome: (before) => ({
102
+ environment,
103
+ notice,
104
+ previous: EnvironmentName.make(before)
105
+ })
106
+ });
107
+ const promoted = Effect.fnUntraced(function* promoted(store, name) {
108
+ const row = yield* readyEnvironment(store, name);
109
+ const serving = yield* servingRow(store);
110
+ const previous = Option.fromNullishOr(serving.previous);
111
+ if (serving.environment === row.name) return promotionOf(name, serving.notice ?? alreadyServing(name), previous);
112
+ const origin = yield* originOf(store, row);
113
+ const notice = promotionNotice({
114
+ environment: name,
115
+ origin,
116
+ previous: serving.environment
117
+ });
118
+ yield* markPromoted({
119
+ environment: name,
120
+ notice,
121
+ previous: serving.environment,
122
+ sql: store.sql
123
+ });
124
+ return promotionOf(name, notice, Option.some(serving.environment));
125
+ });
126
+ /**
127
+ * Promotes an environment: akter dev serves it in place of the one that served, which turns quiet and is kept as it
128
+ * was. Its held work runs: jobs resume from its journal and due timers fire. Promoting the environment that already
129
+ * serves changes nothing and answers what its promote answered.
130
+ */
131
+ const promote = (store) => (name) => stored(store)(Effect.gen(function* promoting() {
132
+ const promotion = yield* store.sql.withTransaction(promoted(store, name));
133
+ yield* store.hosting.apply;
134
+ return promotion;
135
+ }));
136
+ const deletable = Effect.fnUntraced(function* deletable(store, name) {
137
+ const row = yield* readyEnvironment(store, name);
138
+ const serving = yield* servingRow(store);
139
+ if (row.name === "dev") return yield* InUseError.make({
140
+ key: name,
141
+ reason: "environmentIsTheDataDirectory"
142
+ });
143
+ if (row.name === serving.environment) return yield* InUseError.make({
144
+ key: name,
145
+ reason: "environmentServing"
146
+ });
147
+ return row;
148
+ });
149
+ /** Deletes an environment that doesn't serve: its store is removed, and it is kept as Retired, holding its name. */
150
+ const deleteEnvironment = (store) => (name) => stored(store)(Effect.gen(function* deletingEnvironment() {
151
+ const retire = Effect.tap(deletable(store, name), () => retireEnvironment({
152
+ name,
153
+ sql: store.sql
154
+ }));
155
+ const row = yield* store.sql.withTransaction(retire);
156
+ yield* store.fileSystem.remove(store.path.resolve(store.directory, row.directory), removal);
157
+ return yield* getEnvironment(store)(name);
158
+ }));
159
+ /** Opens a data directory's environments on its record, `environments.db`, which it creates when missing. */
160
+ const openStore = Effect.fnUntraced(function* openStore({ directory, hosting, open }) {
161
+ const fileSystem = yield* FileSystem.FileSystem;
162
+ const path = yield* Path.Path;
163
+ yield* fileSystem.makeDirectory(directory, { recursive: true });
164
+ const sql = yield* open(path.join(directory, recordFile));
165
+ const now = yield* Clock.currentTimeMillis;
166
+ yield* prepareRecords({
167
+ now,
168
+ sql
169
+ });
170
+ return {
171
+ directory,
172
+ fileSystem,
173
+ hosting,
174
+ path,
175
+ sql
176
+ };
177
+ });
178
+ /**
179
+ * The environments and snapshots of one data directory, named as Akter Cloud's environments and snapshots groups:
180
+ * snapshot an environment, branch a quiet environment from a snapshot, promote it to serve, and promote back.
181
+ */
182
+ var LocalEnvironments = class extends Context.Service()("@akterjs/effect/serve/environment/local-environments.service/LocalEnvironments") {
183
+ static openStore = openStore;
184
+ static on = (store) => ({
185
+ branch: branch(store),
186
+ createSnapshot: createSnapshot(store),
187
+ deleteEnvironment: deleteEnvironment(store),
188
+ deleteSnapshot: deleteSnapshot(store),
189
+ environment: getEnvironment(store),
190
+ environments: listEnvironments(store),
191
+ promote: promote(store),
192
+ snapshot: getSnapshot(store),
193
+ snapshots: listSnapshots(store)
194
+ });
195
+ };
196
+ export { LocalEnvironments };
@@ -0,0 +1,22 @@
1
+ import { Option } from "effect";
2
+ /** The snapshot a branch came from, as the promote names it. */
3
+ interface Origin {
4
+ readonly environment: string;
5
+ readonly id: string;
6
+ readonly name: string;
7
+ readonly takenAt: Option.Option<number>;
8
+ }
9
+ interface Promoting {
10
+ readonly environment: string;
11
+ /** The snapshot it was branched from, when it never served before. */
12
+ readonly origin: Option.Option<Origin>;
13
+ readonly previous: string;
14
+ }
15
+ /**
16
+ * What a promote leaves behind, said by the promote itself: the writes the newly serving environment doesn't hold,
17
+ * that its held work now runs, and that the environment it replaced is kept as it was.
18
+ */
19
+ declare const promotionNotice: (promoting: Promoting) => string;
20
+ /** What a promote of the environment that already serves answers when no promote ever made it serve. */
21
+ declare const alreadyServing: (environment: string) => string;
22
+ export { type Origin, alreadyServing, promotionNotice };
@@ -0,0 +1,30 @@
1
+ import { Array, DateTime, Option } from "effect";
2
+ // src/serve/environment/promotion-notice.pure.ts
3
+ const takenWhen = (takenAt) => Option.match(takenAt, {
4
+ onNone: () => "",
5
+ onSome: (millis) => `, taken at ${DateTime.formatIso(DateTime.makeUnsafe(millis))}`
6
+ });
7
+ const fromSnapshot = ({ environment }, origin) => `It holds ${origin.environment}'s data as of snapshot ${origin.name} (${origin.id}${takenWhen(origin.takenAt)}): writes made to ${origin.environment} after that snapshot are not in ${environment}.`;
8
+ const resumed = (origin) => Option.match(origin, {
9
+ onNone: () => "Its held jobs resume from its journal, and its timers that came due fire now.",
10
+ onSome: () => "Its jobs resume from the snapshot's journal, and its timers that came due fire now."
11
+ });
12
+ /**
13
+ * What a promote leaves behind, said by the promote itself: the writes the newly serving environment doesn't hold,
14
+ * that its held work now runs, and that the environment it replaced is kept as it was.
15
+ */
16
+ const promotionNotice = (promoting) => {
17
+ const { environment, origin, previous } = promoting;
18
+ const snapshotCatch = Option.map(origin, (found) => fromSnapshot(promoting, found));
19
+ const servedCatch = Option.liftPredicate(`Writes ${previous} took while it served are not in ${environment}.`, () => Option.isNone(origin) || Option.exists(origin, (found) => found.environment !== previous));
20
+ return Array.join([
21
+ `${environment} now serves in place of ${previous}.`,
22
+ ...Option.toArray(snapshotCatch),
23
+ ...Option.toArray(servedCatch),
24
+ resumed(origin),
25
+ `${previous} is kept as it was, quiet, until you delete it or promote it again.`
26
+ ], " ");
27
+ };
28
+ /** What a promote of the environment that already serves answers when no promote ever made it serve. */
29
+ const alreadyServing = (environment) => `${environment} already serves; nothing changed.`;
30
+ export { alreadyServing, promotionNotice };
@@ -0,0 +1,32 @@
1
+ import { Failure, Store } from "./environment-store.sql.mjs";
2
+ import { EnvironmentName, LocalSnapshot, SnapshotName } from "./local-environment.schema.mjs";
3
+ import { Effect } from "effect";
4
+ interface Snapshotting {
5
+ /** The environment the snapshot is of; the serving one when missing. */
6
+ readonly environment?: EnvironmentName | undefined;
7
+ readonly name: SnapshotName;
8
+ }
9
+ type Operation<Input, Value> = (input: Input) => Effect.Effect<Value, Failure>;
10
+ /** Where a snapshot's copy is kept in the data directory, by its id. */
11
+ declare const snapshotDirectory: ({ directory, path }: Pick<Store, "directory" | "path">) => (id: string) => string;
12
+ /** The environment's live snapshots, by name. */
13
+ declare const listSnapshots: (store: Store) => ((environment?: EnvironmentName) => Effect.Effect<readonly LocalSnapshot[], Failure>);
14
+ declare const getSnapshot: (store: Store) => Operation<Snapshotting, LocalSnapshot>;
15
+ /**
16
+ * Asks for a snapshot of an environment. The engine serving it takes it, under each actor's command lock; one in this
17
+ * process takes it before this answers, and one in another process within a moment. Until then it is Pending.
18
+ */
19
+ declare const createSnapshot: (store: Store) => Operation<Snapshotting, LocalSnapshot>;
20
+ /** Retires the snapshot: it can no longer be used, its name is free again, and its copy is removed. */
21
+ declare const deleteSnapshot: (store: Store) => Operation<Snapshotting, LocalSnapshot>;
22
+ /** Cuts the environment's store into a directory and answers the bytes the copy holds. */
23
+ type Cut = (into: string) => Effect.Effect<number, {
24
+ readonly message: string;
25
+ }>;
26
+ interface Taking {
27
+ readonly cut: Cut;
28
+ readonly store: Store;
29
+ }
30
+ /** Takes every pending snapshot of the environment an engine serves, each claimed first so it is taken once. */
31
+ declare const takePending: (taking: Taking) => (environment: string) => Effect.Effect<void, Failure>;
32
+ export { type Cut, type Snapshotting, type Taking, createSnapshot, deleteSnapshot, getSnapshot, listSnapshots, snapshotDirectory, takePending };
@@ -0,0 +1,131 @@
1
+ import { claimPending, insertSnapshot, liveSnapshot, liveSnapshots, nextSnapshotId, retireSnapshot, settleSnapshot, snapshotById, snapshotsFolder } from "./environment-records.sql.mjs";
2
+ import { AlreadyExistsError } from "./environment-already-exists.errors.mjs";
3
+ import { NotFoundError } from "./environment-not-found.errors.mjs";
4
+ import { readyEnvironment, recordedEnvironment, snapshotOf, stored } from "./environment-store.sql.mjs";
5
+ import { Array, Clock, Duration, Effect, Option, Schedule } from "effect";
6
+ // src/serve/environment/snapshot-operations.sql.ts
7
+ const partial = ".partial";
8
+ const checkEvery = "200 millis";
9
+ const removal = {
10
+ force: true,
11
+ recursive: true
12
+ };
13
+ /** Where a snapshot's copy is kept in the data directory, by its id. */
14
+ const snapshotDirectory = ({ directory, path }) => (id) => path.join(directory, snapshotsFolder, id);
15
+ const liveNamed = Effect.fnUntraced(function* liveNamed(store, { environment, name }) {
16
+ const row = yield* recordedEnvironment(store, environment);
17
+ const found = yield* liveSnapshot({
18
+ environment: row.name,
19
+ name,
20
+ sql: store.sql
21
+ });
22
+ const notFound = () => NotFoundError.make({
23
+ key: name,
24
+ resource: "snapshot"
25
+ });
26
+ return yield* Effect.mapError(Effect.fromOption(found), notFound);
27
+ });
28
+ const byId = ({ sql }) => (id) => Effect.flatMap(snapshotById({
29
+ id,
30
+ sql
31
+ }), (found) => Effect.orDie(Effect.fromOption(found)));
32
+ /** The environment's live snapshots, by name. */
33
+ const listSnapshots = (store) => (environment) => stored(store)(Effect.gen(function* listingSnapshots() {
34
+ const row = yield* recordedEnvironment(store, environment);
35
+ const live = yield* liveSnapshots({
36
+ environment: row.name,
37
+ sql: store.sql
38
+ });
39
+ return Array.map(live, snapshotOf);
40
+ }));
41
+ const getSnapshot = (store) => (snapshotting) => stored(store)(Effect.map(liveNamed(store, snapshotting), snapshotOf));
42
+ const recordPending = Effect.fnUntraced(function* recordPending(store, { environment, name }) {
43
+ const row = yield* readyEnvironment(store, environment);
44
+ const taken = yield* liveSnapshot({
45
+ environment: row.name,
46
+ name,
47
+ sql: store.sql
48
+ });
49
+ if (Option.isSome(taken)) return yield* AlreadyExistsError.make({
50
+ key: name,
51
+ resource: "snapshot"
52
+ });
53
+ const id = yield* nextSnapshotId(store);
54
+ const now = yield* Clock.currentTimeMillis;
55
+ yield* insertSnapshot({
56
+ environment: row.name,
57
+ id,
58
+ name,
59
+ now,
60
+ sql: store.sql
61
+ });
62
+ return id;
63
+ });
64
+ const pending = (row) => row.status === "Pending";
65
+ const settled = (store, id) => {
66
+ const read = byId(store)(id);
67
+ const waiting = Effect.repeat(read, {
68
+ schedule: Schedule.spaced(checkEvery),
69
+ while: pending
70
+ });
71
+ if (!Duration.isGreaterThan(store.hosting.settleWithin, Duration.zero)) return read;
72
+ return Effect.andThen(Effect.timeoutOption(waiting, store.hosting.settleWithin), read);
73
+ };
74
+ /**
75
+ * Asks for a snapshot of an environment. The engine serving it takes it, under each actor's command lock; one in this
76
+ * process takes it before this answers, and one in another process within a moment. Until then it is Pending.
77
+ */
78
+ const createSnapshot = (store) => (snapshotting) => stored(store)(Effect.gen(function* creatingSnapshot() {
79
+ const id = yield* store.sql.withTransaction(recordPending(store, snapshotting));
80
+ yield* store.hosting.apply;
81
+ const row = yield* settled(store, id);
82
+ return snapshotOf(row);
83
+ }));
84
+ /** Retires the snapshot: it can no longer be used, its name is free again, and its copy is removed. */
85
+ const deleteSnapshot = (store) => (snapshotting) => stored(store)(Effect.gen(function* deletingSnapshot() {
86
+ const found = yield* liveNamed(store, snapshotting);
87
+ yield* retireSnapshot({
88
+ id: found.id,
89
+ sql: store.sql
90
+ });
91
+ yield* store.fileSystem.remove(snapshotDirectory(store)(found.id), removal);
92
+ const retired = yield* byId(store)(found.id);
93
+ return snapshotOf(retired);
94
+ }));
95
+ const failedWith = (failure) => ({
96
+ reason: Option.some(failure.message),
97
+ sizeBytes: Option.none(),
98
+ status: "Failed",
99
+ takenAt: Option.none()
100
+ });
101
+ const taken = Effect.fnUntraced(function* taken({ cut, store }, final) {
102
+ const staging = `${final}${partial}`;
103
+ yield* store.fileSystem.remove(staging, removal);
104
+ yield* store.fileSystem.makeDirectory(staging, { recursive: true });
105
+ const sizeBytes = yield* cut(staging);
106
+ yield* store.fileSystem.rename(staging, final);
107
+ const takenAt = yield* Clock.currentTimeMillis;
108
+ return {
109
+ reason: Option.none(),
110
+ sizeBytes: Option.some(sizeBytes),
111
+ status: "Ready",
112
+ takenAt: Option.some(takenAt)
113
+ };
114
+ });
115
+ const takeOne = (taking) => ({ id }) => Effect.gen(function* takingOne() {
116
+ const { fileSystem } = taking.store;
117
+ const final = snapshotDirectory(taking.store)(id);
118
+ const failed = (failure) => Effect.as(Effect.ignore(fileSystem.remove(`${final}${partial}`, removal)), failedWith(failure));
119
+ const outcome = yield* taken(taking, final).pipe(Effect.catch(failed));
120
+ if (!(yield* settleSnapshot({
121
+ ...outcome,
122
+ id,
123
+ sql: taking.store.sql
124
+ }))) yield* Effect.ignore(fileSystem.remove(final, removal));
125
+ });
126
+ /** Takes every pending snapshot of the environment an engine serves, each claimed first so it is taken once. */
127
+ const takePending = (taking) => (environment) => stored(taking.store)(Effect.flatMap(claimPending({
128
+ environment,
129
+ sql: taking.store.sql
130
+ }), (claimed) => Effect.forEach(claimed, takeOne(taking), { discard: true })));
131
+ export { createSnapshot, deleteSnapshot, getSnapshot, listSnapshots, snapshotDirectory, takePending };
@@ -0,0 +1,32 @@
1
+ import { ActorErasedError } from "../../contract/actor/actor-erased.errors.mjs";
2
+ import { ActorUnavailableError } from "../../contract/client/actor-unavailable.errors.mjs";
3
+ import { FilesUnavailableError } from "../../contract/file/files-unavailable.errors.mjs";
4
+ import "../../runtime/akter.layer.mjs";
5
+ import "../../contract/akter.service.mjs";
6
+ import { LocalBlobHome } from "../../host/file/blob-home.sql.mjs";
7
+ import { StoreUnreadableError } from "../store/store-unreadable.errors.mjs";
8
+ import "../../host/file/local-blob-home.service.mjs";
9
+ import { SqliteDriver } from "../../host/sqlite/sqlite-driver.service.mjs";
10
+ import { ActorHost } from "../engine/actor-host.service.mjs";
11
+ import { ActorLocation } from "../engine/actor-location.service.mjs";
12
+ import { Effect, FileSystem, Path } from "effect";
13
+ import { SqlError } from "effect/sql";
14
+ /** One environment's store, cut into a snapshot's directory by the engine that serves it. */
15
+ interface StoreCut {
16
+ /** Opens a database no engine writes, such as the file home's catalog, on a connection of its own. */
17
+ readonly driver: SqliteDriver["Service"];
18
+ readonly home: LocalBlobHome;
19
+ readonly host: ActorHost["Service"];
20
+ readonly into: string;
21
+ readonly location: ActorLocation["Service"];
22
+ /** The environment's store: the directory its `shards` and `files-home` are in. */
23
+ readonly store: string;
24
+ }
25
+ /**
26
+ * Cuts a served store into `into`: each actor's database is copied under that actor's command lock, consistent on
27
+ * its own, the guarantee an Archil checkpoint gives each database too. The whole cut runs under the file home's hold,
28
+ * so no file is written, claimed or collected between the first copy and the last, and every blob a copied database
29
+ * names is in the snapshot. Each actor is opened before the hold, so the hold never waits on opening one.
30
+ */
31
+ declare const cutStore: (cut: StoreCut) => Effect.Effect<number, ActorErasedError | ActorUnavailableError | FilesUnavailableError | import("effect/PlatformError").PlatformError | SqlError.SqlError | StoreUnreadableError, FileSystem.FileSystem | Path.Path>;
32
+ export { type StoreCut, cutStore };
@@ -0,0 +1,74 @@
1
+ import { Array, Effect, FileSystem, Path } from "effect";
2
+ // src/serve/environment/store-snapshot.sql.ts
3
+ const filesHome = "files-home";
4
+ const catalogFile = "catalog.sqlite";
5
+ const blobsDirectory = "blobs";
6
+ const blobName = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu;
7
+ const noBytes = 0;
8
+ /** Where an actor's database goes in the snapshot: the same path under `into` as under the store. */
9
+ const targetOf = Effect.fnUntraced(function* targetOf({ into, location, store }, address) {
10
+ const path = yield* Path.Path;
11
+ const fileSystem = yield* FileSystem.FileSystem;
12
+ const target = path.join(into, path.relative(store, location.locate(address).database));
13
+ yield* fileSystem.makeDirectory(path.dirname(target), { recursive: true });
14
+ return target;
15
+ });
16
+ const vacuumed = ({ driver, source, target }) => Effect.scoped(Effect.flatMap(driver.open(source), (sql) => Effect.asVoid(sql`VACUUM INTO ${target}`)));
17
+ /**
18
+ * Copies one actor's database under its command lock, so the copy holds every command committed before it and none
19
+ * after. An actor whose type the app no longer serves has no engine writing it, so a plain copy is consistent.
20
+ */
21
+ const copyActor = Effect.fnUntraced(function* copyActor(cut, address) {
22
+ const target = yield* targetOf(cut, address);
23
+ const locked = Effect.scoped(Effect.flatMap(cut.host.prepareFiles(address), ({ home, owner, sql }) => home.transfers.admit(owner.exclusive(sql`VACUUM INTO ${target}`))));
24
+ const source = cut.location.locate(address).database;
25
+ yield* Effect.catchTag(locked, "InvalidRequestError", () => vacuumed({
26
+ driver: cut.driver,
27
+ source,
28
+ target
29
+ }));
30
+ });
31
+ /** Copies the environment's files: every blob, and the catalog of their claims, as one consistent copy. */
32
+ const copyFiles = Effect.fnUntraced(function* copyFiles({ driver, home, into }) {
33
+ const fileSystem = yield* FileSystem.FileSystem;
34
+ const path = yield* Path.Path;
35
+ const [source, target] = [path.join(home.root, blobsDirectory), path.join(into, filesHome, blobsDirectory)];
36
+ const entries = yield* fileSystem.readDirectory(source);
37
+ const blobs = Array.filter(entries, (entry) => blobName.test(entry));
38
+ const copyBlob = (blob) => fileSystem.copyFile(path.join(source, blob), path.join(target, blob));
39
+ yield* fileSystem.makeDirectory(target, { recursive: true });
40
+ yield* Effect.forEach(blobs, copyBlob, { discard: true });
41
+ const catalog = {
42
+ source: path.join(home.root, catalogFile),
43
+ target: path.join(into, filesHome, catalogFile)
44
+ };
45
+ yield* vacuumed({
46
+ driver,
47
+ ...catalog
48
+ });
49
+ });
50
+ /** The bytes a snapshot's directory holds, which the snapshot reports as its size. */
51
+ const sizeOf = Effect.fnUntraced(function* sizeOf(directory) {
52
+ const fileSystem = yield* FileSystem.FileSystem;
53
+ const path = yield* Path.Path;
54
+ const entries = yield* fileSystem.readDirectory(directory, { recursive: true });
55
+ const stats = yield* Effect.forEach(entries, (entry) => fileSystem.stat(path.join(directory, entry)));
56
+ return Array.reduce(stats, noBytes, (total, entry) => {
57
+ if (entry.type === "File") return total + Number(entry.size);
58
+ return total;
59
+ });
60
+ });
61
+ /**
62
+ * Cuts a served store into `into`: each actor's database is copied under that actor's command lock, consistent on
63
+ * its own, the guarantee an Archil checkpoint gives each database too. The whole cut runs under the file home's hold,
64
+ * so no file is written, claimed or collected between the first copy and the last, and every blob a copied database
65
+ * names is in the snapshot. Each actor is opened before the hold, so the hold never waits on opening one.
66
+ */
67
+ const cutStore = Effect.fnUntraced(function* cutStore(cut) {
68
+ const addresses = yield* cut.location.list;
69
+ yield* Effect.forEach(addresses, (address) => Effect.ignore(cut.host.warm(address)), { discard: true });
70
+ const copies = Effect.andThen(Effect.forEach(addresses, (address) => copyActor(cut, address), { discard: true }), copyFiles(cut));
71
+ yield* cut.home.transfers.hold(copies);
72
+ return yield* sizeOf(cut.into);
73
+ });
74
+ export { cutStore };