@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,29 @@
1
+ import { StateUnreadableError } from "../../contract/state/state-unreadable.errors.mjs";
2
+ import "../../runtime/akter.layer.mjs";
3
+ import { HostedActor } from "../../contract/actor/actor.contract.mjs";
4
+ import { AppliedMigration } from "../migration/migration-plan.pure.mjs";
5
+ import { ReservedObject } from "./reserved-names.pure.mjs";
6
+ import { Effect } from "effect";
7
+ import { SqlClient, SqlError } from "effect/sql";
8
+ interface AppliedRow extends AppliedMigration {
9
+ readonly at: number;
10
+ }
11
+ interface Recording {
12
+ readonly row: AppliedRow;
13
+ readonly sql: SqlClient.SqlClient;
14
+ }
15
+ interface Upgrading {
16
+ readonly actor: HostedActor;
17
+ readonly sql: SqlClient.SqlClient;
18
+ }
19
+ type Rows<Row> = Effect.Effect<readonly Row[], SqlError.SqlError>;
20
+ type Write = Effect.Effect<void, SqlError.SqlError>;
21
+ declare const appliedMigrations: (sql: SqlClient.SqlClient) => Rows<AppliedMigration>;
22
+ declare const recordMigration: ({ row, sql }: Recording) => Write;
23
+ interface Reserving {
24
+ readonly prefixes: readonly string[];
25
+ readonly sql: SqlClient.SqlClient;
26
+ }
27
+ declare const reservedObjects: ({ prefixes, sql }: Reserving) => Rows<ReservedObject>;
28
+ declare const upgradeStoredState: (args_0: Upgrading) => Effect.Effect<void, SqlError.SqlError | StateUnreadableError, never>;
29
+ export { appliedMigrations, recordMigration, reservedObjects, upgradeStoredState };
@@ -0,0 +1,26 @@
1
+ import { Array, Effect, Option, String } from "effect";
2
+ // src/host/actor/actor-records.sql.ts
3
+ const appliedMigrations = (sql) => sql`SELECT version, hash FROM akter_migrations ORDER BY version`;
4
+ const recordMigration = ({ row, sql }) => Effect.asVoid(sql`INSERT INTO akter_migrations (version, hash, applied_at) VALUES (${row.version}, ${row.hash}, ${row.at})`);
5
+ const reservedObjects = ({ prefixes, sql }) => {
6
+ const lowered = Array.map(prefixes, String.toLowerCase);
7
+ const reserved = (name) => Array.some(lowered, (prefix) => String.startsWith(prefix)(String.toLowerCase(name)));
8
+ return Effect.map(sql`SELECT type, name, tbl_name AS owner, coalesce(sql, '') AS definition FROM sqlite_master ORDER BY type, name`, Array.filter((object) => reserved(object.name) || reserved(object.owner)));
9
+ };
10
+ const storedState = (sql) => sql`SELECT value FROM akter_state WHERE id = 1`;
11
+ const replaceState = ({ sql, value }) => Effect.asVoid(sql`UPDATE akter_state SET value = ${value} WHERE id = 1`);
12
+ const upgradeStoredState = Effect.fnUntraced(function* upgradeStoredState({ actor, sql }) {
13
+ const rows = yield* storedState(sql);
14
+ const upgraded = yield* Option.match(Array.head(rows), {
15
+ onNone: () => Effect.succeedNone,
16
+ onSome: (row) => actor.upgradeState(row.value)
17
+ });
18
+ yield* Option.match(upgraded, {
19
+ onNone: () => Effect.void,
20
+ onSome: (value) => replaceState({
21
+ sql,
22
+ value
23
+ })
24
+ });
25
+ });
26
+ export { appliedMigrations, recordMigration, reservedObjects, upgradeStoredState };
@@ -0,0 +1,10 @@
1
+ import { Schema } from "effect";
2
+ declare const ReservedNameError_base: Schema.Class<ReservedNameError, Schema.TaggedStruct<"ReservedNameError", {
3
+ readonly actor: Schema.String;
4
+ readonly table: Schema.String;
5
+ readonly version: Schema.Int;
6
+ }>, import("effect/Cause").YieldableError & {
7
+ readonly brand: unique symbol;
8
+ }>;
9
+ export declare class ReservedNameError extends ReservedNameError_base {}
10
+ export {};
@@ -0,0 +1,8 @@
1
+ import { Schema } from "effect";
2
+ // src/host/actor/reserved-name.errors.ts
3
+ var ReservedNameError = class extends Schema.TaggedError()("ReservedNameError", {
4
+ actor: Schema.String,
5
+ table: Schema.String,
6
+ version: Schema.Int
7
+ }) {};
8
+ export { ReservedNameError };
@@ -0,0 +1,15 @@
1
+ import { ReservedNameError } from "./reserved-name.errors.mjs";
2
+ import { Effect } from "effect";
3
+ interface ReservedObject {
4
+ readonly definition: string;
5
+ readonly name: string;
6
+ readonly type: string;
7
+ }
8
+ interface ReservedChange {
9
+ readonly actor: string;
10
+ readonly after: readonly ReservedObject[];
11
+ readonly before: readonly ReservedObject[];
12
+ readonly version: number;
13
+ }
14
+ declare const checkReserved: ({ actor, after, before, version }: ReservedChange) => Effect.Effect<void, ReservedNameError>;
15
+ export { type ReservedObject, checkReserved };
@@ -0,0 +1,20 @@
1
+ import { ReservedNameError } from "./reserved-name.errors.mjs";
2
+ import { Array, Effect, Option } from "effect";
3
+ // src/host/actor/reserved-names.pure.ts
4
+ const describeObject = (object) => `${object.type} ${object.name} ${object.definition}`;
5
+ const missingFrom = (objects, others) => {
6
+ const kept = Array.map(others, describeObject);
7
+ return Array.filter(objects, (object) => !Array.contains(kept, describeObject(object)));
8
+ };
9
+ const checkReserved = ({ actor, after, before, version }) => {
10
+ const changed = Array.appendAll(missingFrom(after, before), missingFrom(before, after));
11
+ return Option.match(Array.head(changed), {
12
+ onNone: () => Effect.void,
13
+ onSome: (object) => Effect.fail(ReservedNameError.make({
14
+ actor,
15
+ table: object.name,
16
+ version
17
+ }))
18
+ });
19
+ };
20
+ export { checkReserved };
@@ -0,0 +1,4 @@
1
+ import "../../contract/akter.service.mjs";
2
+ import { ActorHandlers } from "../../contract/actor/actor.contract.mjs";
3
+ declare const RoomLive: import("effect/Layer").Layer<ActorHandlers<"Room">, never, never>;
4
+ export { RoomLive };
@@ -0,0 +1,36 @@
1
+ import { FileAccessDeniedError } from "../../contract/file/access/file-access-denied.errors.mjs";
2
+ import { Akter } from "../../contract/akter.service.mjs";
3
+ import "../../contract/client/client-failure.contract.mjs";
4
+ import { NotMemberError, Room } from "../../contract/room.contract.mjs";
5
+ import { Array, Effect } from "effect";
6
+ // src/host/actor/room.actor.ts
7
+ const RoomLive = Room.toLayer({
8
+ commands: {
9
+ join: (room) => Effect.gen(function* join() {
10
+ const me = yield* Akter.principal;
11
+ yield* Room.update({ members: Array.append(room.members, me.id) });
12
+ }),
13
+ post: (room, { text }) => Effect.gen(function* post() {
14
+ const me = yield* Akter.principal;
15
+ if (!Array.contains(room.members, me.id)) return yield* NotMemberError.make({});
16
+ const id = yield* Akter.id;
17
+ const at = yield* Akter.now;
18
+ const sql = yield* Akter.sql;
19
+ yield* sql`INSERT INTO messages ${sql.insert({
20
+ at,
21
+ author: me.id,
22
+ id,
23
+ text
24
+ })}`;
25
+ return id;
26
+ })
27
+ },
28
+ files: { authorize: (room, { access, path }) => Akter.principal.pipe(Effect.filterOrFail((me) => Array.contains(room.members, me.id), () => FileAccessDeniedError.make({
29
+ access,
30
+ message: "only the room's members may use its files",
31
+ path
32
+ })), Effect.asVoid) },
33
+ migrations: { 1: (sql) => sql`CREATE TABLE messages (id TEXT PRIMARY KEY, author TEXT NOT NULL, text TEXT NOT NULL, at INTEGER NOT NULL)` },
34
+ queries: { messages: (_room, { limit }) => Effect.flatMap(Akter.sql, (sql) => sql`SELECT id, author, text, at FROM messages ORDER BY at DESC LIMIT ${limit}`) }
35
+ });
36
+ export { RoomLive };
@@ -0,0 +1,7 @@
1
+ import { Stream } from "effect";
2
+ interface Framing<Failure, Services> {
3
+ readonly size: number;
4
+ readonly source: Stream.Stream<Uint8Array, Failure, Services>;
5
+ }
6
+ declare const framesOf: <Failure, Services>({ size, source }: Framing<Failure, Services>) => Stream.Stream<Uint8Array, Failure, Services>;
7
+ export { framesOf };
@@ -0,0 +1,28 @@
1
+ import { Stream } from "effect";
2
+ // src/host/blob/blob-frames.pure.ts
3
+ const zeroBytes = 0;
4
+ const oneFrame = 1;
5
+ const pieces = function* pieces(pending, input) {
6
+ let offset = zeroBytes;
7
+ while (offset < input.byteLength) {
8
+ const length = Math.min(pending.bytes.byteLength - pending.used, input.byteLength - offset);
9
+ pending.bytes.set(input.subarray(offset, offset + length), pending.used);
10
+ pending.used += length;
11
+ offset += length;
12
+ if (pending.used === pending.bytes.byteLength) {
13
+ yield pending.bytes;
14
+ pending.bytes = new Uint8Array(pending.bytes.byteLength);
15
+ pending.used = zeroBytes;
16
+ }
17
+ }
18
+ };
19
+ const framesOf = ({ size, source }) => Stream.suspend(() => {
20
+ const pending = {
21
+ bytes: new Uint8Array(size),
22
+ used: zeroBytes
23
+ };
24
+ const complete = Stream.flatMap(source, (bytes) => Stream.fromIterable(pieces(pending, bytes), { chunkSize: oneFrame }));
25
+ const final = Stream.suspend(() => Stream.succeed(pending.bytes.subarray(zeroBytes, pending.used)));
26
+ return Stream.concat(complete, final);
27
+ });
28
+ export { framesOf };
@@ -0,0 +1,14 @@
1
+ import { Schema } from "effect";
2
+ /**
3
+ * How a grant's file key is wrapped. `v1` wraps it with the actor key itself, `v2` with a key HKDF-SHA-256 derives
4
+ * from the actor key, so the one key that encrypts the actor's pages never wraps file keys directly. New grants are v2;
5
+ * v1 grants written before stay readable.
6
+ */
7
+ declare const GrantFormat: Schema.Literals<readonly ["xchacha20-poly1305/v1", "xchacha20-poly1305/v2"]>;
8
+ type GrantFormat = typeof GrantFormat.Type;
9
+ declare const BlobGrantJson: Schema.fromJsonString<Schema.Struct<{
10
+ readonly format: Schema.Literals<readonly ["xchacha20-poly1305/v1", "xchacha20-poly1305/v2"]>;
11
+ readonly nonce: Schema.Uint8ArrayFromBase64;
12
+ readonly wrapped: Schema.Uint8ArrayFromBase64;
13
+ }>>;
14
+ export { BlobGrantJson, type GrantFormat };
@@ -0,0 +1,15 @@
1
+ import { Schema } from "effect";
2
+ // src/host/blob/blob-grant.schema.ts
3
+ /**
4
+ * How a grant's file key is wrapped. `v1` wraps it with the actor key itself, `v2` with a key HKDF-SHA-256 derives
5
+ * from the actor key, so the one key that encrypts the actor's pages never wraps file keys directly. New grants are v2;
6
+ * v1 grants written before stay readable.
7
+ */
8
+ const GrantFormat = Schema.Literals(["xchacha20-poly1305/v1", "xchacha20-poly1305/v2"]);
9
+ const BlobGrant = Schema.Struct({
10
+ format: GrantFormat,
11
+ nonce: Schema.Uint8ArrayFromBase64,
12
+ wrapped: Schema.Uint8ArrayFromBase64
13
+ });
14
+ const BlobGrantJson = Schema.fromJsonString(BlobGrant);
15
+ export { BlobGrantJson };
@@ -0,0 +1,28 @@
1
+ import { BlobKeyring } from "./blob-keyring.service.mjs";
2
+ import { Rewrapping } from "./blob-sealing.contract.mjs";
3
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
4
+ import { Context, Effect, Layer } from "effect";
5
+ import { Aead, Kdf, SecureRandom } from "effect/crypto";
6
+ interface Owner {
7
+ readonly actor: string;
8
+ readonly blob: string;
9
+ }
10
+ interface Opening extends Owner {
11
+ readonly grant: string;
12
+ }
13
+ interface FreshGrant {
14
+ readonly grant: string;
15
+ readonly key: Aead.Key;
16
+ }
17
+ interface BlobGrantsOperations {
18
+ readonly fresh: (owner: Owner) => Effect.Effect<FreshGrant, BlobTransferError>;
19
+ readonly open: (opening: Opening) => Effect.Effect<Aead.Key, BlobTransferError>;
20
+ readonly rewrap: (rewrapping: Rewrapping) => Effect.Effect<string, BlobTransferError>;
21
+ }
22
+ declare const BlobGrants_base: Context.ServiceClass<BlobGrants, "@akterjs/effect/host/blob/blob-grants.service/BlobGrants", BlobGrantsOperations> & {
23
+ readonly make: Effect.Effect<BlobGrantsOperations, never, Aead.Aead | BlobKeyring | Kdf.Kdf | SecureRandom.SecureRandom>;
24
+ };
25
+ export declare class BlobGrants extends BlobGrants_base {
26
+ static readonly layer: Layer.Layer<BlobGrants, never, BlobKeyring>;
27
+ }
28
+ export {};
@@ -0,0 +1,129 @@
1
+ import { BlobGrantJson } from "./blob-grant.schema.mjs";
2
+ import { BlobKeyring } from "./blob-keyring.service.mjs";
3
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
4
+ import { Context, Effect, Layer, Redacted, Schema } from "effect";
5
+ import { Aead, Kdf, SecureRandom } from "effect/crypto";
6
+ // src/host/blob/blob-grants.service.ts
7
+ const nonceBytes = 24;
8
+ const wrappingKeyBytes = 32;
9
+ const wiped = 0;
10
+ /** The format every grant is written in. */
11
+ const writtenFormat = "xchacha20-poly1305/v2";
12
+ /** The format whose file key is wrapped with the actor key itself, still opened for grants written before v2. */
13
+ const rawKeyFormat = "xchacha20-poly1305/v1";
14
+ /**
15
+ * HKDF's info for the wrapping key. The salt is empty: the actor key is already a uniformly random 32-byte key, so
16
+ * RFC 5869 needs no salt for extraction, and the info alone separates this use from the actor's page encryption.
17
+ */
18
+ const wrappingInfo = new globalThis.TextEncoder().encode("akter/blob-grant/v1");
19
+ const noSalt = /* @__PURE__ */ new Uint8Array();
20
+ const crypto = Layer.mergeAll(Aead.layerWebCrypto, Kdf.layerWebCrypto).pipe(Layer.provideMerge(SecureRandom.layerWebCrypto));
21
+ const refused = (blob) => BlobTransferError.make({
22
+ blob,
23
+ message: "the file grant could not be opened for this actor"
24
+ });
25
+ const bindingOf = ({ actor, blob }) => new globalThis.TextEncoder().encode(`akter/blob-grant/v1/${actor.length}:${actor}/${blob}`);
26
+ /** The bytes of the keyring's key this module owns: the keyring's own buffer if it hands it over, else a copy. */
27
+ const ownedBytes = (keyring, lent) => {
28
+ const bytes = Redacted.value(lent);
29
+ if (keyring.handsOver === true) return bytes;
30
+ return Uint8Array.from(bytes);
31
+ };
32
+ const zeroAll = (buffers) => {
33
+ for (const bytes of buffers) bytes.fill(wiped);
34
+ };
35
+ /**
36
+ * Runs `use` with the wrapping key for one use of an actor's key, and zeroes, in one `ensuring` whatever the outcome,
37
+ * every buffer of key bytes this module owns for it: the actor key's bytes and the key derived from them.
38
+ */
39
+ const withWrappingKey = (keys, { format, ...owner }, use) => Effect.flatMap(keys.keyring.keyFor(owner), (lent) => {
40
+ const secret = ownedBytes(keys.keyring, lent);
41
+ const owned = [secret];
42
+ const keyed = Effect.gen(function* wrappingKeyOf() {
43
+ if (format === rawKeyFormat) return yield* Aead.key(Aead.xchacha20Poly1305, secret);
44
+ const derived = yield* keys.kdf.derive(Kdf.hkdfSha256, secret, {
45
+ info: wrappingInfo,
46
+ length: wrappingKeyBytes,
47
+ salt: noSalt
48
+ });
49
+ owned.push(derived);
50
+ return yield* Aead.key(Aead.xchacha20Poly1305, derived);
51
+ });
52
+ return Effect.flatMap(keyed, use).pipe(Effect.ensuring(Effect.sync(() => {
53
+ zeroAll(owned);
54
+ })));
55
+ });
56
+ const wrappingWith = (keys) => Effect.fnUntraced(function* wrap({ actor, blob, key }) {
57
+ const nonce = yield* keys.random.randomBytes(nonceBytes);
58
+ const wrapped = yield* withWrappingKey(keys, {
59
+ actor,
60
+ blob,
61
+ format: writtenFormat,
62
+ intent: "create"
63
+ }, (wrappingKey) => Effect.flatMap(Aead.toBytes(key), (raw) => keys.aead.encrypt(wrappingKey, raw, {
64
+ aad: bindingOf({
65
+ actor,
66
+ blob
67
+ }),
68
+ nonce
69
+ }).pipe(Effect.ensuring(Effect.sync(() => raw.fill(wiped))))));
70
+ return yield* Schema.encodeEffect(BlobGrantJson)({
71
+ format: writtenFormat,
72
+ nonce,
73
+ wrapped
74
+ });
75
+ }, (effect, owner) => Effect.mapError(effect, () => refused(owner.blob)));
76
+ const openingWith = (keys) => Effect.fnUntraced(function* open({ actor, blob, grant }) {
77
+ const { format, nonce, wrapped } = yield* Schema.decodeEffect(BlobGrantJson)(grant);
78
+ return yield* withWrappingKey(keys, {
79
+ actor,
80
+ blob,
81
+ format,
82
+ intent: "open"
83
+ }, (wrappingKey) => Effect.flatMap(keys.aead.decrypt(wrappingKey, wrapped, {
84
+ aad: bindingOf({
85
+ actor,
86
+ blob
87
+ }),
88
+ nonce
89
+ }), (raw) => Aead.key(Aead.xchacha20Poly1305, raw).pipe(Effect.ensuring(Effect.sync(() => raw.fill(wiped))))));
90
+ }, (effect, owner) => Effect.mapError(effect, () => refused(owner.blob)));
91
+ var BlobGrants = class extends Context.Service()("@akterjs/effect/host/blob/blob-grants.service/BlobGrants", { make: Effect.gen(function* makeBlobGrants() {
92
+ const aead = yield* Aead.Aead;
93
+ const keys = {
94
+ aead,
95
+ kdf: yield* Kdf.Kdf,
96
+ keyring: yield* BlobKeyring,
97
+ random: yield* SecureRandom.SecureRandom
98
+ };
99
+ const wrap = wrappingWith(keys);
100
+ const open = openingWith(keys);
101
+ return {
102
+ fresh: Effect.fnUntraced(function* fresh(owner) {
103
+ const key = yield* Effect.mapError(aead.generateKey(Aead.xchacha20Poly1305), () => refused(owner.blob));
104
+ return {
105
+ grant: yield* wrap({
106
+ ...owner,
107
+ key
108
+ }),
109
+ key
110
+ };
111
+ }),
112
+ open,
113
+ rewrap: Effect.fnUntraced(function* rewrap({ blob, from, grant, to }) {
114
+ const key = yield* open({
115
+ actor: from,
116
+ blob,
117
+ grant
118
+ });
119
+ return yield* wrap({
120
+ actor: to,
121
+ blob,
122
+ key
123
+ });
124
+ })
125
+ };
126
+ }) }) {
127
+ static layer = Layer.effect(this, this.make).pipe(Layer.provide(crypto));
128
+ };
129
+ export { BlobGrants };
@@ -0,0 +1,18 @@
1
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
2
+ import { Context, Effect, Redacted } from "effect";
3
+ interface BlobOwnerKey {
4
+ readonly actor: string;
5
+ readonly blob: string;
6
+ readonly intent: "create" | "open";
7
+ }
8
+ declare const BlobKeyring_base: Context.ServiceClass<BlobKeyring, "@akterjs/effect/host/blob/blob-keyring.service/BlobKeyring", {
9
+ /**
10
+ * Whether every `keyFor` call returns a buffer of its own that the caller may zero once it is done. When it does,
11
+ * the grants module zeroes that buffer after each use; otherwise, as for a keyring that caches its keys, it copies
12
+ * the bytes and zeroes only its copy, so the cached key stays intact for its other users.
13
+ */
14
+ readonly handsOver?: boolean;
15
+ readonly keyFor: (owner: BlobOwnerKey) => Effect.Effect<Redacted.Redacted<Uint8Array>, BlobTransferError>;
16
+ }>;
17
+ export declare class BlobKeyring extends BlobKeyring_base {}
18
+ export type { BlobOwnerKey };
@@ -0,0 +1,4 @@
1
+ import { Context } from "effect";
2
+ // src/host/blob/blob-keyring.service.ts
3
+ var BlobKeyring = class extends Context.Service()("@akterjs/effect/host/blob/blob-keyring.service/BlobKeyring") {};
4
+ export { BlobKeyring };
@@ -0,0 +1,13 @@
1
+ import { BlobRange } from "./blob-sealing.contract.mjs";
2
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
3
+ import { Effect } from "effect";
4
+ interface Ranging {
5
+ readonly blob: string;
6
+ readonly bytes: number;
7
+ readonly range?: BlobRange;
8
+ }
9
+ declare const rangeOf: (args_0: Ranging) => Effect.Effect<{
10
+ readonly length: number;
11
+ readonly offset: number;
12
+ }, BlobTransferError, never>;
13
+ export { rangeOf };
@@ -0,0 +1,23 @@
1
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
2
+ import { Effect, Schema } from "effect";
3
+ // src/host/blob/blob-range.pure.ts
4
+ const zeroBytes = 0;
5
+ const Range = Schema.Struct({
6
+ length: Schema.Int.check(Schema.isGreaterThanOrEqualTo(zeroBytes)),
7
+ offset: Schema.Int.check(Schema.isGreaterThanOrEqualTo(zeroBytes))
8
+ });
9
+ const rangeOf = Effect.fnUntraced(function* rangeOf({ blob, bytes, range }) {
10
+ const valid = yield* Schema.decodeEffect(Range)(range ?? {
11
+ length: bytes,
12
+ offset: zeroBytes
13
+ }).pipe(Effect.mapError(() => BlobTransferError.make({
14
+ blob,
15
+ message: "the byte range must use non-negative safe integers"
16
+ })));
17
+ if (valid.length > bytes - valid.offset) return yield* BlobTransferError.make({
18
+ blob,
19
+ message: "the byte range is outside the file"
20
+ });
21
+ return valid;
22
+ });
23
+ export { rangeOf };
@@ -0,0 +1,37 @@
1
+ import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
2
+ import "../../contract/client/client-failure.contract.mjs";
3
+ import { Effect, Stream } from "effect";
4
+ interface BlobRange {
5
+ readonly length: number;
6
+ readonly offset: number;
7
+ }
8
+ interface SealedBlob {
9
+ readonly bytes: number;
10
+ readonly grant: string;
11
+ readonly sha256: string;
12
+ }
13
+ interface Sealing<Failure, Services> {
14
+ readonly actor: string;
15
+ readonly blob: string;
16
+ readonly filename: string;
17
+ readonly source: Stream.Stream<Uint8Array, Failure, Services>;
18
+ }
19
+ interface Opening {
20
+ readonly actor: string;
21
+ readonly blob: string;
22
+ readonly filename: string;
23
+ readonly grant: string;
24
+ readonly range?: BlobRange;
25
+ }
26
+ interface Rewrapping {
27
+ readonly blob: string;
28
+ readonly from: string;
29
+ readonly grant: string;
30
+ readonly to: string;
31
+ }
32
+ interface BlobSealingOperations {
33
+ readonly open: (opening: Opening) => Stream.Stream<Uint8Array, BlobTransferError>;
34
+ readonly rewrap: (rewrapping: Rewrapping) => Effect.Effect<string, BlobTransferError>;
35
+ readonly seal: <Failure, Services>(sealing: Sealing<Failure, Services>) => Effect.Effect<SealedBlob, BlobTransferError | Failure, Services>;
36
+ }
37
+ export type { BlobRange, BlobSealingOperations, Opening, Rewrapping, SealedBlob, Sealing };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import { BlobKeyring } from "./blob-keyring.service.mjs";
2
+ import { BlobHashing } from "../hash/blob-hashing.service.mjs";
3
+ import { BlobSealingOperations } from "./blob-sealing.contract.mjs";
4
+ import { Context, Effect, Layer } from "effect";
5
+ declare const BlobSealing_base: Context.ServiceClass<BlobSealing, "@akterjs/effect/host/blob/blob-sealing.service/BlobSealing", BlobSealingOperations>;
6
+ export declare class BlobSealing extends BlobSealing_base {
7
+ static readonly makePlain: Effect.Effect<BlobSealingOperations, never, BlobHashing | import("effect/FileSystem").FileSystem>;
8
+ static readonly plaintext: Layer.Layer<BlobSealing, never, BlobHashing | import("effect/FileSystem").FileSystem>;
9
+ static readonly sealed: Layer.Layer<BlobSealing, never, BlobHashing | BlobKeyring | import("effect/FileSystem").FileSystem>;
10
+ }
11
+ export {};
@@ -0,0 +1,16 @@
1
+ import { BlobGrants } from "./blob-grants.service.mjs";
2
+ import { BlobHashing } from "../hash/blob-hashing.service.mjs";
3
+ import { plainBlobSealing } from "./plain-blob-sealing.pure.mjs";
4
+ import { sealedBlobSealing } from "./sealed-blob-sealing.pure.mjs";
5
+ import { Context, Effect, Layer } from "effect";
6
+ import { Aead, SecureRandom } from "effect/crypto";
7
+ // src/host/blob/blob-sealing.service.ts
8
+ var BlobSealing = class extends Context.Service()("@akterjs/effect/host/blob/blob-sealing.service/BlobSealing") {
9
+ static makePlain = Effect.flatMap(BlobHashing, plainBlobSealing);
10
+ static plaintext = Layer.effect(this, this.makePlain);
11
+ static sealed = Layer.effect(this, Effect.flatMap(Effect.all({
12
+ grants: BlobGrants,
13
+ hashing: BlobHashing
14
+ }), sealedBlobSealing)).pipe(Layer.provide(BlobGrants.layer), Layer.provide(Aead.layerWebCrypto), Layer.provide(SecureRandom.layerWebCrypto));
15
+ };
16
+ export { BlobSealing };
@@ -0,0 +1,21 @@
1
+ import { BlobTransferError } from "../../../contract/file/blob-transfer.errors.mjs";
2
+ import { BlobTransfers } from "../reference/blob-transfer.pure.mjs";
3
+ import { Effect, Stream } from "effect";
4
+ import { SqlClient, SqlError } from "effect/sql";
5
+ /** An archived actor's database and the home its files move into. */
6
+ interface ArchivedOwner<Failure, Services> {
7
+ /** The identity this home holds the actor's files by. */
8
+ readonly actor: string;
9
+ readonly adopt: BlobTransfers["adopt"];
10
+ readonly sql: SqlClient.SqlClient;
11
+ /** The archived bytes of the file with this SHA-256, read only when the home lacks its blob. */
12
+ readonly stored: (sha256: string) => Stream.Stream<Uint8Array, Failure, Services>;
13
+ }
14
+ /**
15
+ * Takes an archived actor's files into this engine's home in place: each file it keeps is adopted under its own
16
+ * claim for `owner.actor`, then its file tables are rewritten for that identity and the grants this home answered.
17
+ * An actor that never kept a file is left as it is. Running it again after a crash adopts the same claims again and
18
+ * rewrites the same rows, so it finishes what the first run started.
19
+ */
20
+ declare const adoptArchivedFiles: <Failure, Services>(owner: ArchivedOwner<Failure, Services>) => Effect.Effect<void, Failure | BlobTransferError | SqlError.SqlError, Services>;
21
+ export { type ArchivedOwner, adoptArchivedFiles };
@@ -0,0 +1,75 @@
1
+ import { prepareReceipts } from "../reference/blob-receipts.sql.mjs";
2
+ import { Array, Effect, Option } from "effect";
3
+ // src/host/blob/export/blob-archive.sql.ts
4
+ const keptPageSize = 100;
5
+ const ownerTables = [
6
+ "akter_blob_owners",
7
+ "akter_blob_receipts",
8
+ "akter_blob_links",
9
+ "akter_blob_releases",
10
+ "akter_blob_history",
11
+ "akter_blob_ancestry"
12
+ ];
13
+ const grantTables = [
14
+ "akter_blob_links",
15
+ "akter_blob_ancestry",
16
+ "akter_blob_receipts"
17
+ ];
18
+ const recordedOwner = (sql) => Effect.map(sql`SELECT actor FROM akter_blob_owners WHERE id = 1`, (rows) => Option.map(Array.head(rows), (row) => row.actor));
19
+ /**
20
+ * A page of the files the actor keeps after the claim `after`, the same files an export snapshot holds: its linked
21
+ * files, its ancestry's, and the receipts its history keeps.
22
+ */
23
+ const keptFiles = (sql, after) => sql`SELECT blob, bytes, claim, grant, sha256 FROM (SELECT blob, bytes, claim, grant, sha256 FROM akter_blob_links UNION SELECT blob, bytes, claim, grant, sha256 FROM akter_blob_ancestry UNION SELECT blob, bytes, claim, grant, sha256 FROM akter_blob_receipts AS receipt WHERE EXISTS (SELECT 1 FROM akter_blob_history WHERE claim = receipt.claim) AND NOT EXISTS (SELECT 1 FROM akter_blob_links WHERE claim = receipt.claim)) WHERE claim > ${after} ORDER BY claim LIMIT ${keptPageSize}`;
24
+ const adoptedPage = (owner, origin, files) => Effect.forEach(files, ({ blob, bytes, claim, grant, sha256 }) => Effect.map(owner.adopt({
25
+ claim: {
26
+ actor: owner.actor,
27
+ blob,
28
+ claim
29
+ },
30
+ file: {
31
+ bytes,
32
+ grant,
33
+ sha256
34
+ },
35
+ origin,
36
+ stored: owner.stored(sha256)
37
+ }), (adopted) => ({
38
+ claim,
39
+ grant: adopted
40
+ })));
41
+ const adoptedFiles = Effect.fnUntraced(function* adoptedFiles(owner, origin) {
42
+ const adopted = [];
43
+ let after = "";
44
+ for (;;) {
45
+ const files = yield* keptFiles(owner.sql, after);
46
+ if (!Array.isReadonlyArrayNonEmpty(files)) return adopted;
47
+ adopted.push(...yield* adoptedPage(owner, origin, files));
48
+ after = Array.lastNonEmpty(files).claim;
49
+ }
50
+ });
51
+ /**
52
+ * Rewrites the file tables for the actor's new identity and grants. Uploads no command attached never left their
53
+ * engine, so their receipts go, and so do releases of claims the actor no longer keeps.
54
+ */
55
+ const rewritten = (sql, actor, adopted) => sql.withTransaction(Effect.gen(function* rewriteFiles() {
56
+ yield* sql`DELETE FROM akter_blob_receipts AS receipt WHERE NOT EXISTS (SELECT 1 FROM akter_blob_links WHERE claim = receipt.claim) AND NOT EXISTS (SELECT 1 FROM akter_blob_history WHERE claim = receipt.claim)`;
57
+ yield* sql`DELETE FROM akter_blob_releases WHERE claim NOT IN (SELECT claim FROM akter_blob_links UNION SELECT claim FROM akter_blob_ancestry UNION SELECT claim FROM akter_blob_receipts)`;
58
+ yield* sql`DELETE FROM akter_blob_export_holds`;
59
+ yield* Effect.forEach(ownerTables, (table) => sql.unsafe(`UPDATE ${table} SET actor = ?`, [actor]), { discard: true });
60
+ yield* Effect.forEach(adopted, ({ claim, grant }) => Effect.forEach(grantTables, (table) => sql.unsafe(`UPDATE ${table} SET grant = ? WHERE claim = ?`, [grant, claim]), { discard: true }), { discard: true });
61
+ }));
62
+ /**
63
+ * Takes an archived actor's files into this engine's home in place: each file it keeps is adopted under its own
64
+ * claim for `owner.actor`, then its file tables are rewritten for that identity and the grants this home answered.
65
+ * An actor that never kept a file is left as it is. Running it again after a crash adopts the same claims again and
66
+ * rewrites the same rows, so it finishes what the first run started.
67
+ */
68
+ const adoptArchivedFiles = Effect.fnUntraced(function* adoptArchivedFiles(owner) {
69
+ yield* prepareReceipts(owner.sql);
70
+ const origin = yield* recordedOwner(owner.sql);
71
+ if (Option.isNone(origin)) return yield* Effect.void;
72
+ const adopted = yield* adoptedFiles(owner, origin.value);
73
+ return yield* rewritten(owner.sql, owner.actor, adopted);
74
+ });
75
+ export { adoptArchivedFiles };