@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,55 @@
1
+ import { KeySchema } from "../../../contract/actor/actor.contract.mjs";
2
+ import { FileClientFailure } from "../../../contract/file/file-client-failure.contract.mjs";
3
+ import { admit } from "../../../contract/caller/caller-admission.pure.mjs";
4
+ import { CurrentCaller } from "../../../contract/caller/current-caller.service.mjs";
5
+ import { FileAccessRequest } from "../../../contract/file/access/file-access.contract.mjs";
6
+ import "../../../contract/file/file-client.contract.mjs";
7
+ import { HostFailure } from "../../live/live-reads.service.mjs";
8
+ import { ActorHost } from "../../engine/actor-host.service.mjs";
9
+ import { UploadOwner } from "./upload-sessions.pure.mjs";
10
+ import { Effect, Option } from "effect";
11
+ interface FileActor {
12
+ /** Whether the actor declares file calls (`Akter.fileAccess`); the host runs the declaration as `akter.files`. */
13
+ readonly fileAccess: Option.Option<unknown>;
14
+ readonly key: KeySchema;
15
+ readonly name: string;
16
+ }
17
+ interface Keyed {
18
+ readonly key: string;
19
+ }
20
+ type Admitted = Effect.Error<ReturnType<typeof admit>>;
21
+ /** The failures a file RPC answers, which its schema carries; `served` folds the rest. */
22
+ type Served = Exclude<FileClientFailure | Admitted, {
23
+ readonly _tag: "ActorAlreadyExistsError" | "SqlError" | "UnauthenticatedError";
24
+ }>;
25
+ /**
26
+ * What a file RPC answers for a failure. A storage failure answers that the actor is unavailable, which a client
27
+ * retries; its SQL detail stays on the host.
28
+ */
29
+ declare const served: (actor: string) => (failure: FileClientFailure | HostFailure) => Served;
30
+ /** Which file call is asked for, and of what: the file's path, a listing's prefix, or empty for an upload. */
31
+ interface Asked {
32
+ readonly access: (typeof FileAccessRequest)["Type"]["access"];
33
+ readonly path: string;
34
+ }
35
+ interface Admitting extends Keyed {
36
+ readonly actor: FileActor;
37
+ readonly caller: CurrentCaller["Service"];
38
+ }
39
+ /**
40
+ * Who is calling which actor's files, without asking the actor's rule: the actor must declare files, and the key must
41
+ * decode with its key schema before any file is touched, so one actor's request can't name another's files. An upload's
42
+ * append and close use this alone: its session was authorized when it opened, and only the same caller may continue it.
43
+ */
44
+ declare const callerOf: (args_0: Admitting) => Effect.Effect<UploadOwner, Served, never>;
45
+ /**
46
+ * Admits the caller to the actor's files (`callerOf`), then runs the actor's `files.authorize` rule as the reserved
47
+ * `akter.files` query, under the verified caller: the engine admits only the kinds `Akter.fileAccess` declared, never
48
+ * the engine's own actor caller, and the rule reads the state and `Actor.principal`, never the request. The call is
49
+ * refused unless the rule succeeds.
50
+ */
51
+ declare const ownerOf: (args_0: Admitting & {
52
+ readonly asked: Asked;
53
+ readonly host: ActorHost["Service"];
54
+ }) => Effect.Effect<UploadOwner, Served, never>;
55
+ export { type Asked, type FileActor, type Keyed, type Served, callerOf, ownerOf, served };
@@ -0,0 +1,67 @@
1
+ import { clientPrincipal } from "../../../contract/caller/caller-admission.pure.mjs";
2
+ import { ActorUnavailableError } from "../../../contract/client/actor-unavailable.errors.mjs";
3
+ import { InvalidRequestError } from "../../../contract/client/invalid-request.errors.mjs";
4
+ import { fileAccessMember, fileAccessPayload, fileAccessReply } from "../../../contract/file/access/file-access.contract.mjs";
5
+ import { Effect, Match, Schema } from "effect";
6
+ // src/serve/rpc/file/file-rpc-access.pure.ts
7
+ /**
8
+ * What a file RPC answers for a failure. A storage failure answers that the actor is unavailable, which a client
9
+ * retries; its SQL detail stays on the host.
10
+ */
11
+ const served = (actor) => (failure) => Match.value(failure).pipe(Match.tag("SqlError", () => ActorUnavailableError.make({
12
+ actor,
13
+ message: "the actor's files are unavailable. Retry shortly."
14
+ })), Match.tag("UnauthenticatedError", () => ActorUnavailableError.make({
15
+ actor,
16
+ message: "the caller wasn't authenticated before its files were read"
17
+ })), Match.tag("ActorAlreadyExistsError", () => InvalidRequestError.make({
18
+ actor,
19
+ message: "a file request can't create an actor"
20
+ })), Match.orElse((other) => other));
21
+ const denied = (actor) => InvalidRequestError.make({
22
+ actor,
23
+ message: `${actor} declares no file calls. To use files, declare them with files: Akter.fileAccess({ callers: [...] }), decide each in files.authorize, and deploy again.`
24
+ });
25
+ /**
26
+ * Who is calling which actor's files, without asking the actor's rule: the actor must declare files, and the key must
27
+ * decode with its key schema before any file is touched, so one actor's request can't name another's files. An upload's
28
+ * append and close use this alone: its session was authorized when it opened, and only the same caller may continue it.
29
+ */
30
+ const callerOf = Effect.fnUntraced(function* callerOf({ actor, caller, key }) {
31
+ const principal = yield* clientPrincipal({
32
+ actor: actor.name,
33
+ caller
34
+ });
35
+ yield* Effect.mapError(Effect.fromOption(actor.fileAccess), () => denied(actor.name));
36
+ yield* Effect.mapError(Schema.decodeEffect(actor.key)(key), () => InvalidRequestError.make({
37
+ actor: actor.name,
38
+ message: "the actor key is invalid"
39
+ }));
40
+ return {
41
+ address: {
42
+ actor: actor.name,
43
+ key
44
+ },
45
+ principal
46
+ };
47
+ });
48
+ /**
49
+ * Admits the caller to the actor's files (`callerOf`), then runs the actor's `files.authorize` rule as the reserved
50
+ * `akter.files` query, under the verified caller: the engine admits only the kinds `Akter.fileAccess` declared, never
51
+ * the engine's own actor caller, and the rule reads the state and `Actor.principal`, never the request. The call is
52
+ * refused unless the rule succeeds.
53
+ */
54
+ const ownerOf = Effect.fnUntraced(function* ownerOf({ asked, host, ...admitting }) {
55
+ const owner = yield* callerOf(admitting);
56
+ const payload = yield* Effect.orDie(Schema.encodeEffect(fileAccessPayload)(asked));
57
+ const call = {
58
+ ...owner.address,
59
+ member: fileAccessMember,
60
+ payload,
61
+ principal: owner.principal
62
+ };
63
+ const reply = yield* Effect.mapError(host.query(call), served(owner.address.actor));
64
+ yield* yield* Effect.orDie(Schema.decodeEffect(fileAccessReply)(reply));
65
+ return owner;
66
+ });
67
+ export { callerOf, ownerOf, served };
@@ -0,0 +1,53 @@
1
+ import { CurrentCaller } from "../../../contract/caller/current-caller.service.mjs";
2
+ import { FilePage, FileUsagePage } from "../../../contract/file/actor-files.contract.mjs";
3
+ import "../../../contract/file/file-client.contract.mjs";
4
+ import { ActorHost } from "../../engine/actor-host.service.mjs";
5
+ import { FileActor, Keyed, Served } from "./file-rpc-access.pure.mjs";
6
+ import { UploadLimits, UploadSessions } from "./upload-sessions.pure.mjs";
7
+ import { Effect, Scope, Stream } from "effect";
8
+ interface Listed extends Keyed {
9
+ readonly cursor?: string;
10
+ readonly limit?: number;
11
+ readonly prefix?: string;
12
+ }
13
+ interface Downloaded extends Keyed {
14
+ readonly length?: number;
15
+ readonly offset?: number;
16
+ readonly path: string;
17
+ }
18
+ interface Appended extends Keyed {
19
+ readonly bytes: Uint8Array;
20
+ readonly offset: number;
21
+ readonly upload: string;
22
+ }
23
+ interface Closed extends Keyed {
24
+ readonly bytes: number;
25
+ readonly upload: string;
26
+ }
27
+ interface Serving {
28
+ readonly actor: FileActor;
29
+ readonly host: ActorHost["Service"];
30
+ readonly uploads: UploadSessions;
31
+ }
32
+ type Answer<Value> = Effect.Effect<Value, Served, CurrentCaller>;
33
+ type FileHandler = ((request: Appended) => Answer<{
34
+ readonly received: number;
35
+ }>) | ((request: Closed) => Answer<{
36
+ readonly receipt: string;
37
+ }>) | ((request: Downloaded) => Stream.Stream<Uint8Array, Served, CurrentCaller>) | ((request: Keyed) => Answer<{
38
+ readonly upload: string;
39
+ }>) | ((request: Listed) => Answer<FilePage>) | ((request: Listed) => Answer<FileUsagePage>);
40
+ type FileHandlers = Readonly<Record<string, FileHandler>>;
41
+ /**
42
+ * The `<Actor>/files/<operation>` handlers of every served actor that declares files. A download, a listing, the
43
+ * usage and an upload's open run the actor's `files.authorize` rule first (`ownerOf`), then serve the actor's files from
44
+ * this host with the same client its own code uses outside commands. Uploads are sessions of this server
45
+ * (`upload-sessions.pure.ts`), bound to the caller that opened them and held to `limits` over `defaultUploadLimits`.
46
+ */
47
+ declare const fileRpcHandlers: ({ actors, limits }: {
48
+ readonly actors: readonly FileActor[];
49
+ readonly limits?: Partial<UploadLimits>;
50
+ }) => Effect.Effect<FileHandlers, never, ActorHost | Scope.Scope>;
51
+ /** One actor's file handlers, by tag, sharing `uploads` with every other actor the host serves. */
52
+ declare const fileHandlersFor: (serving: Serving) => FileHandlers;
53
+ export { type FileHandler, type FileHandlers, type Serving as FileServing, fileHandlersFor, fileRpcHandlers };
@@ -0,0 +1,143 @@
1
+ import { CurrentCaller } from "../../../contract/caller/current-caller.service.mjs";
2
+ import { fileChunkBytes, fileTag } from "../../../contract/file/rpc/file-rpc.contract.mjs";
3
+ import { filePathOf } from "../../../contract/file/file-path.pure.mjs";
4
+ import { InvalidFileRequestError } from "../../../contract/file/invalid-file-request.errors.mjs";
5
+ import { ActorHost } from "../../engine/actor-host.service.mjs";
6
+ import { hostFileClient } from "../../../runtime/local-file-clients.layer.mjs";
7
+ import { callerOf, ownerOf, served } from "./file-rpc-access.pure.mjs";
8
+ import { uploadSessionsWith } from "./upload-sessions.pure.mjs";
9
+ import { Array, Effect, Option, Record, Stream } from "effect";
10
+ // src/serve/rpc/file/file-rpc.layer.ts
11
+ const oneChunk = 1;
12
+ /** Admits the current caller to the actor's files under the request's key, if the actor's rule allows `asked`. */
13
+ const ownerFor = ({ actor, host }, { key }, asked) => Effect.flatMap(Effect.service(CurrentCaller), (caller) => ownerOf({
14
+ actor,
15
+ asked,
16
+ caller,
17
+ host,
18
+ key
19
+ }));
20
+ /** The current caller of an open upload, which the session checks is the caller that opened it. */
21
+ const uploaderFor = ({ actor }, { key }) => Effect.flatMap(Effect.service(CurrentCaller), (caller) => callerOf({
22
+ actor,
23
+ caller,
24
+ key
25
+ }));
26
+ const reading = (path) => ({
27
+ access: "read",
28
+ path: path ?? ""
29
+ });
30
+ const writing = {
31
+ access: "write",
32
+ path: ""
33
+ };
34
+ const clientOf = (serving, request, asked) => Effect.map(ownerFor(serving, request, asked), ({ address }) => hostFileClient({
35
+ address,
36
+ host: serving.host
37
+ }));
38
+ const listingOf = ({ cursor, limit, prefix }) => ({
39
+ ...Record.getSomes({
40
+ cursor: Option.fromNullishOr(cursor),
41
+ prefix: Option.fromNullishOr(prefix)
42
+ }),
43
+ ...Record.getSomes({ limit: Option.fromNullishOr(limit) })
44
+ });
45
+ const rangeOf = ({ length, offset, path }) => {
46
+ const bounds = {
47
+ length: Option.fromNullishOr(length),
48
+ offset: Option.fromNullishOr(offset)
49
+ };
50
+ if (Option.isSome(bounds.length) !== Option.isSome(bounds.offset)) return Effect.fail(InvalidFileRequestError.make({
51
+ message: "a range needs both offset and length",
52
+ path
53
+ }));
54
+ return Effect.succeed(Option.all(bounds));
55
+ };
56
+ const slices = (bytes) => Array.makeBy(Math.max(oneChunk, Math.ceil(bytes.length / fileChunkBytes)), (index) => bytes.subarray(index * fileChunkBytes, (index + oneChunk) * fileChunkBytes));
57
+ const download = (serving) => (request) => {
58
+ const opened = Effect.gen(function* opened() {
59
+ const path = yield* filePathOf(request.path);
60
+ const client = yield* clientOf(serving, request, reading(path));
61
+ const range = yield* rangeOf(request);
62
+ return Option.match(range, {
63
+ onNone: () => client.download(path),
64
+ onSome: (requested) => client.download(path, requested)
65
+ });
66
+ });
67
+ return Stream.unwrap(opened).pipe(Stream.flatMap((chunk) => Stream.fromIterable(slices(chunk))), Stream.mapError(served(serving.actor.name)));
68
+ };
69
+ const listed = (serving) => (request) => clientOf(serving, request, reading(request.prefix)).pipe(Effect.flatMap((client) => client.list(listingOf(request))), Effect.mapError(served(serving.actor.name)));
70
+ const usage = (serving) => (request) => clientOf(serving, request, reading(request.prefix)).pipe(Effect.flatMap((client) => client.fileUsage(listingOf(request))), Effect.mapError(served(serving.actor.name)));
71
+ const opened = (serving) => (request) => Effect.flatMap(ownerFor(serving, request, writing), (owner) => {
72
+ const { actor, host, uploads: sessions } = serving;
73
+ const client = hostFileClient({
74
+ address: owner.address,
75
+ host
76
+ });
77
+ const upload = Effect.map(sessions.open(owner, client), (id) => ({ upload: id }));
78
+ return Effect.mapError(upload, served(actor.name));
79
+ });
80
+ const appended = (serving) => (request) => Effect.flatMap(uploaderFor(serving, request), (owner) => {
81
+ const { actor, uploads: sessions } = serving;
82
+ const received = Effect.map(sessions.append({
83
+ ...owner,
84
+ ...request
85
+ }), (bytes) => ({ received: bytes }));
86
+ return Effect.mapError(received, served(actor.name));
87
+ });
88
+ const closed = (serving) => (request) => Effect.flatMap(uploaderFor(serving, request), (owner) => {
89
+ const { actor, uploads: sessions } = serving;
90
+ const receipt = Effect.map(sessions.close({
91
+ ...owner,
92
+ ...request
93
+ }), (sealed) => ({ receipt: sealed }));
94
+ return Effect.mapError(receipt, served(actor.name));
95
+ });
96
+ const entriesOf = (serving) => {
97
+ const actor = serving.actor.name;
98
+ return [
99
+ [fileTag({
100
+ actor,
101
+ operation: "download"
102
+ }), download(serving)],
103
+ [fileTag({
104
+ actor,
105
+ operation: "list"
106
+ }), listed(serving)],
107
+ [fileTag({
108
+ actor,
109
+ operation: "usage"
110
+ }), usage(serving)],
111
+ [fileTag({
112
+ actor,
113
+ operation: "upload/open"
114
+ }), opened(serving)],
115
+ [fileTag({
116
+ actor,
117
+ operation: "upload/append"
118
+ }), appended(serving)],
119
+ [fileTag({
120
+ actor,
121
+ operation: "upload/close"
122
+ }), closed(serving)]
123
+ ];
124
+ };
125
+ /**
126
+ * The `<Actor>/files/<operation>` handlers of every served actor that declares files. A download, a listing, the
127
+ * usage and an upload's open run the actor's `files.authorize` rule first (`ownerOf`), then serve the actor's files from
128
+ * this host with the same client its own code uses outside commands. Uploads are sessions of this server
129
+ * (`upload-sessions.pure.ts`), bound to the caller that opened them and held to `limits` over `defaultUploadLimits`.
130
+ */
131
+ const fileRpcHandlers = ({ actors, limits = {} }) => Effect.gen(function* makeFileRpcHandlers() {
132
+ const host = yield* ActorHost;
133
+ const sessions = yield* uploadSessionsWith(limits);
134
+ const declaring = Array.filter(actors, (actor) => Option.isSome(actor.fileAccess));
135
+ return Record.fromEntries(Array.flatMap(declaring, (actor) => entriesOf({
136
+ actor,
137
+ host,
138
+ uploads: sessions
139
+ })));
140
+ });
141
+ /** One actor's file handlers, by tag, sharing `uploads` with every other actor the host serves. */
142
+ const fileHandlersFor = (serving) => Record.fromEntries(entriesOf(serving));
143
+ export { fileHandlersFor, fileRpcHandlers };
@@ -0,0 +1,45 @@
1
+ import { FileClientFailure } from "../../../contract/file/file-client-failure.contract.mjs";
2
+ import { FileAddress, FileClient } from "../../../contract/file/file-client.contract.mjs";
3
+ import { Effect, Scope } from "effect";
4
+ /** What one server's upload sessions may hold. Targets, not measured; a host passes its own to the file RPC layer. */
5
+ interface UploadLimits {
6
+ /** The largest file one upload may carry; a chunk that would pass it fails with `FileTooLargeError`. */
7
+ readonly maximumFileBytes: number;
8
+ /** Sessions open at once for one actor, by type and key. */
9
+ readonly perActor: number;
10
+ /** Sessions one caller holds open at once, across every actor. */
11
+ readonly perCaller: number;
12
+ /** Sessions open at once on the whole server. */
13
+ readonly perServer: number;
14
+ }
15
+ declare const defaultUploadLimits: UploadLimits;
16
+ interface UploadOwner {
17
+ readonly address: FileAddress;
18
+ readonly principal: string;
19
+ }
20
+ interface Appending extends UploadOwner {
21
+ readonly bytes: Uint8Array;
22
+ readonly offset: number;
23
+ readonly upload: string;
24
+ }
25
+ interface Closing extends UploadOwner {
26
+ readonly bytes: number;
27
+ readonly upload: string;
28
+ }
29
+ interface UploadSessions {
30
+ readonly append: (appending: Appending) => Effect.Effect<number, FileClientFailure>;
31
+ readonly close: (closing: Closing) => Effect.Effect<string, FileClientFailure>;
32
+ readonly open: (owner: UploadOwner, client: FileClient) => Effect.Effect<string, FileClientFailure>;
33
+ }
34
+ /**
35
+ * Upload sessions of one RPC server. Effect RPC has no client streams, so a network upload is `open`, ordered
36
+ * `append`s and `close`. Each session feeds one sealing upload through a short queue, so a fast client waits for the
37
+ * seal instead of filling memory. Appends are idempotent by offset, so a client may resend a chunk whose reply it
38
+ * lost; a gap or an oversized chunk is refused, and a chunk that would take the file past `maximumFileBytes` fails
39
+ * with `FileTooLargeError` and drops the session. A session is bound to the actor, key and caller that opened it, so
40
+ * its id needs no secrecy. The server holds at most `perServer` sessions, `perCaller` for one caller and `perActor`
41
+ * for one actor (`defaultUploadLimits` unless the host passes its own), and drops one idle for a minute with its
42
+ * partial upload, which is never attached and which the blob store collects as it does any upload no command attached.
43
+ */
44
+ declare const uploadSessionsWith: (limits?: Partial<UploadLimits>) => Effect.Effect<UploadSessions, never, Scope.Scope>;
45
+ export { type UploadLimits, type UploadOwner, type UploadSessions, defaultUploadLimits, uploadSessionsWith };
@@ -0,0 +1,187 @@
1
+ import { ActorUnavailableError } from "../../../contract/client/actor-unavailable.errors.mjs";
2
+ import { uploadChunkBytes } from "../../../contract/file/rpc/file-rpc.contract.mjs";
3
+ import { FileTooLargeError } from "../../../contract/file/rpc/file-too-large.errors.mjs";
4
+ import { InvalidFileRequestError } from "../../../contract/file/invalid-file-request.errors.mjs";
5
+ import { Array, Clock, Effect, Exit, Fiber, Latch, MutableHashMap, Option, Queue, Semaphore, Stream } from "effect";
6
+ // src/serve/rpc/file/upload-sessions.pure.ts
7
+ const defaultUploadLimits = {
8
+ maximumFileBytes: 1073741824,
9
+ perActor: 8,
10
+ perCaller: 8,
11
+ perServer: 64
12
+ };
13
+ /** How long an upload session may sit without an append or close before it is dropped with its partial upload. */
14
+ const idleMillis = 6e4;
15
+ const reapEvery = "10 seconds";
16
+ /** Chunks queued ahead of the sealing upload, so a fast client waits instead of buffering a whole file. */
17
+ const queuedChunks = 4;
18
+ const none = 0;
19
+ const one = 1;
20
+ const refused = (message) => InvalidFileRequestError.make({
21
+ message,
22
+ path: ""
23
+ });
24
+ const sameOwner = (session, owner) => session.principal === owner.principal && session.address.actor === owner.address.actor && session.address.key === owner.address.key;
25
+ const actorOf = ({ address }) => `${String(address.actor.length)}:${address.actor}${address.key}`;
26
+ const countIn = (counts, name) => Option.getOrElse(MutableHashMap.get(counts, name), () => none);
27
+ const adjust = (counts, name, by) => {
28
+ const next = countIn(counts, name) + by;
29
+ if (next === none) {
30
+ MutableHashMap.remove(counts, name);
31
+ return;
32
+ }
33
+ MutableHashMap.set(counts, name, next);
34
+ };
35
+ const busy = (owner, what) => ActorUnavailableError.make({
36
+ actor: owner.address.actor,
37
+ message: `too many uploads are open ${what}. Retry shortly.`
38
+ });
39
+ /** The refusal for a new session, if one of the limits is reached; none, after taking its slot, when all have room. */
40
+ const takeSlot = ({ limits, slots }, owner) => {
41
+ if (slots.server >= limits.perServer) return Option.some(busy(owner, "on this host"));
42
+ if (countIn(slots.byCaller, owner.principal) >= limits.perCaller) return Option.some(busy(owner, "for this caller"));
43
+ if (countIn(slots.byActor, actorOf(owner)) >= limits.perActor) return Option.some(busy(owner, "for this actor"));
44
+ slots.server += one;
45
+ adjust(slots.byCaller, owner.principal, one);
46
+ adjust(slots.byActor, actorOf(owner), one);
47
+ return Option.none();
48
+ };
49
+ const giveBack = ({ slots }, owner) => {
50
+ slots.server -= one;
51
+ adjust(slots.byCaller, owner.principal, -1);
52
+ adjust(slots.byActor, actorOf(owner), -1);
53
+ };
54
+ /** Removes the session `upload` and gives its slot back, once however many paths end it. */
55
+ const forget = (sessions, upload) => {
56
+ const found = MutableHashMap.get(sessions.held, upload);
57
+ if (Option.isSome(found)) {
58
+ MutableHashMap.remove(sessions.held, upload);
59
+ giveBack(sessions, found.value);
60
+ }
61
+ };
62
+ const drop = (sessions, [upload, session]) => Effect.andThen(Effect.sync(() => {
63
+ forget(sessions, upload);
64
+ }), Effect.andThen(Queue.shutdown(session.chunks), Fiber.interrupt(session.sealing)));
65
+ const reap = (sessions) => Effect.flatMap(Clock.currentTimeMillis, (now) => {
66
+ const idle = Array.filter([...sessions.held], ([, session]) => now - session.touched > idleMillis);
67
+ return Effect.forEach(idle, (entry) => drop(sessions, entry), { discard: true });
68
+ });
69
+ /** Finds the session `upload` and marks it used; only the actor, key and caller that opened it may use it. */
70
+ const owned = (sessions, upload, owner) => {
71
+ const found = Option.filter(MutableHashMap.get(sessions.held, upload), (session) => sameOwner(session, owner));
72
+ return Effect.mapError(Effect.fromOption(found), () => refused(`no open upload ${upload} for this caller`)).pipe(Effect.tap((session) => Effect.map(Clock.currentTimeMillis, (now) => {
73
+ session.touched = now;
74
+ })));
75
+ };
76
+ /** Fails with the sealing upload's failure, or refuses when it ended without its last chunk. */
77
+ const ended = (sealing) => Effect.flatMap(Fiber.await(sealing), (exit) => Exit.match(exit, {
78
+ onFailure: Effect.failCause,
79
+ onSuccess: () => Effect.fail(refused("the upload ended before its last chunk"))
80
+ }));
81
+ /**
82
+ * Forks the sealing upload and waits until it reads its first chunk, so an upload the host refuses, such as one past
83
+ * the actor's unattached uploads, fails the open itself. A failed or interrupted start stops the sealing upload.
84
+ */
85
+ const sealingUpload = ({ chunks, client, scope }) => Effect.uninterruptibleMask((restore) => Effect.gen(function* startSealing() {
86
+ const reading = yield* Latch.make();
87
+ const source = Stream.unwrap(Effect.as(reading.open, Stream.fromQueue(chunks)));
88
+ const sealing = yield* Effect.forkIn(client.upload(source), scope);
89
+ yield* restore(Effect.raceFirst(reading.await, ended(sealing))).pipe(Effect.onError(() => Effect.andThen(Queue.shutdown(chunks), Fiber.interrupt(sealing))));
90
+ return sealing;
91
+ }));
92
+ const started = Effect.fnUntraced(function* started(sessions, owner, client) {
93
+ const chunks = yield* Queue.bounded(queuedChunks);
94
+ const sealing = yield* sealingUpload({
95
+ chunks,
96
+ client,
97
+ scope: sessions.scope
98
+ });
99
+ const touched = yield* Clock.currentTimeMillis;
100
+ const lock = yield* Semaphore.make(one);
101
+ sessions.opened += one;
102
+ const upload = `upload-${String(sessions.opened)}`;
103
+ MutableHashMap.set(sessions.held, upload, {
104
+ ...owner,
105
+ chunks,
106
+ lock,
107
+ received: none,
108
+ sealing,
109
+ touched
110
+ });
111
+ return upload;
112
+ });
113
+ /**
114
+ * Opens a session. Its slot is taken before the first yield, so concurrent opens can't all pass the same check, and
115
+ * given back if the open fails or is interrupted; a session that opens keeps it until it closes or is dropped.
116
+ */
117
+ const open = (sessions) => (owner, client) => Effect.acquireUseRelease(Effect.suspend(() => Option.match(takeSlot(sessions, owner), {
118
+ onNone: () => Effect.void,
119
+ onSome: Effect.fail
120
+ })), () => started(sessions, owner, client), (_slot, exit) => Effect.sync(() => {
121
+ if (Exit.isFailure(exit)) giveBack(sessions, owner);
122
+ }));
123
+ const tooLarge = (session, maximumBytes) => FileTooLargeError.make({
124
+ actor: session.address.actor,
125
+ maximumBytes
126
+ });
127
+ /** Refuses a chunk that would take the file past `maximumFileBytes`, and drops its session with the partial upload. */
128
+ const withinMaximum = (sessions, session, { bytes, upload }) => {
129
+ const { maximumFileBytes } = sessions.limits;
130
+ if (session.received + bytes.length <= maximumFileBytes) return Effect.void;
131
+ return Effect.andThen(drop(sessions, [upload, session]), Effect.fail(tooLarge(session, maximumFileBytes)));
132
+ };
133
+ const appendTo = Effect.fnUntraced(function* appendTo(sessions, session, request) {
134
+ const { bytes, offset } = request;
135
+ if (offset < session.received && offset + bytes.length <= session.received) return session.received;
136
+ if (offset !== session.received) return yield* refused(`the chunk starts at byte ${String(offset)}, but the upload has ${String(session.received)}`);
137
+ yield* withinMaximum(sessions, session, request);
138
+ yield* Effect.raceFirst(Queue.offer(session.chunks, bytes), ended(session.sealing));
139
+ session.received += bytes.length;
140
+ return session.received;
141
+ });
142
+ const append = (sessions) => Effect.fnUntraced(function* appending(request) {
143
+ if (request.bytes.length > 1048576) return yield* refused(`a chunk holds at most ${String(uploadChunkBytes)} bytes`);
144
+ const session = yield* owned(sessions, request.upload, request);
145
+ return yield* session.lock.withPermit(appendTo(sessions, session, request));
146
+ });
147
+ const finish = (sessions, session, { bytes, upload }) => {
148
+ if (bytes !== session.received) return Effect.fail(refused(`the upload has ${String(session.received)} bytes, not ${String(bytes)}`));
149
+ return Effect.andThen(Queue.end(session.chunks), Effect.ensuring(Fiber.join(session.sealing), Effect.sync(() => {
150
+ forget(sessions, upload);
151
+ })));
152
+ };
153
+ const close = (sessions) => (closing) => Effect.flatMap(owned(sessions, closing.upload, closing), (session) => session.lock.withPermit(finish(sessions, session, closing)));
154
+ /**
155
+ * Upload sessions of one RPC server. Effect RPC has no client streams, so a network upload is `open`, ordered
156
+ * `append`s and `close`. Each session feeds one sealing upload through a short queue, so a fast client waits for the
157
+ * seal instead of filling memory. Appends are idempotent by offset, so a client may resend a chunk whose reply it
158
+ * lost; a gap or an oversized chunk is refused, and a chunk that would take the file past `maximumFileBytes` fails
159
+ * with `FileTooLargeError` and drops the session. A session is bound to the actor, key and caller that opened it, so
160
+ * its id needs no secrecy. The server holds at most `perServer` sessions, `perCaller` for one caller and `perActor`
161
+ * for one actor (`defaultUploadLimits` unless the host passes its own), and drops one idle for a minute with its
162
+ * partial upload, which is never attached and which the blob store collects as it does any upload no command attached.
163
+ */
164
+ const uploadSessionsWith = (limits = {}) => Effect.gen(function* makeUploadSessions() {
165
+ const sessions = {
166
+ held: MutableHashMap.empty(),
167
+ limits: {
168
+ ...defaultUploadLimits,
169
+ ...limits
170
+ },
171
+ opened: none,
172
+ scope: yield* Effect.scope,
173
+ slots: {
174
+ byActor: MutableHashMap.empty(),
175
+ byCaller: MutableHashMap.empty(),
176
+ server: none
177
+ }
178
+ };
179
+ const reaping = Effect.andThen(Effect.sleep(reapEvery), reap(sessions));
180
+ yield* Effect.forkScoped(Effect.forever(reaping));
181
+ return {
182
+ append: append(sessions),
183
+ close: close(sessions),
184
+ open: open(sessions)
185
+ };
186
+ });
187
+ export { defaultUploadLimits, uploadSessionsWith };
@@ -0,0 +1,13 @@
1
+ import { ActorClients } from "../../contract/client/actor-client.adapter.mjs";
2
+ import { ActorFileClients } from "../../contract/file/file-client.adapter.mjs";
3
+ import { ActorHost } from "../engine/actor-host.service.mjs";
4
+ import { ActorsNotHostedError } from "../engine/actors-not-hosted.errors.mjs";
5
+ import { ServedActor } from "./actor-rpc.handlers.mjs";
6
+ import "./akter-server.layer.mjs";
7
+ import { Layer } from "effect";
8
+ import { RpcClient } from "effect/rpc";
9
+ interface InProcessOptions<Actors extends readonly ServedActor[]> {
10
+ readonly actors: Actors;
11
+ }
12
+ declare const localClient: (options: InProcessOptions<readonly ServedActor[]>) => Layer.Layer<ActorClients | ActorFileClients | RpcClient.Protocol, ActorsNotHostedError, ActorHost>;
13
+ export { type InProcessOptions, localClient };
@@ -0,0 +1,34 @@
1
+ import { ActorClients } from "../../contract/client/actor-client.adapter.mjs";
2
+ import { rpcFileClients } from "../../contract/file/rpc/rpc-file-clients.layer.mjs";
3
+ import { rpcPath, rpcRoutes } from "./akter-server.layer.mjs";
4
+ import { Effect, Layer } from "effect";
5
+ import { RpcClient, RpcSerialization } from "effect/rpc";
6
+ import { SecureRandom } from "effect/crypto";
7
+ import { HttpClient, HttpClientError, HttpClientRequest, HttpClientResponse, HttpRouter } from "effect/http";
8
+ // src/serve/rpc/in-process-client.layer.ts
9
+ const inProcessOrigin = "http://127.0.0.1";
10
+ const sendTo = (handler) => HttpClient.make((request, _url, signal) => {
11
+ const failed = (cause) => new HttpClientError.HttpClientError({ reason: new HttpClientError.TransportError({
12
+ cause,
13
+ request
14
+ }) });
15
+ return HttpClientRequest.toWeb(request, { signal }).pipe(Effect.mapError(failed), Effect.flatMap((web) => Effect.tryPromise({
16
+ catch: failed,
17
+ try: () => handler(web)
18
+ })), Effect.map((response) => HttpClientResponse.fromWeb(request, response)));
19
+ });
20
+ const inProcessHttp = Effect.fnUntraced(function* inProcessHttp(actors) {
21
+ const routes = yield* rpcRoutes(actors);
22
+ const context = yield* Effect.context();
23
+ const hosted = Layer.provide(routes, Layer.succeedContext(context));
24
+ const web = yield* Effect.acquireRelease(Effect.sync(() => HttpRouter.toWebHandler(hosted, { disableLogger: true })), (built) => Effect.promise(() => built.dispose()));
25
+ return Layer.succeed(HttpClient.HttpClient)(sendTo(web.handler));
26
+ });
27
+ const localClient = (options) => {
28
+ const url = new globalThis.URL(rpcPath, inProcessOrigin).href;
29
+ const http = Layer.unwrap(inProcessHttp(options.actors));
30
+ const protocol = RpcClient.layerProtocolHttp({ url }).pipe(Layer.provide([http, RpcSerialization.layerNdjson]));
31
+ const clients = Layer.merge(ActorClients.layer.pipe(Layer.provide(SecureRandom.layerWebCrypto)), rpcFileClients);
32
+ return Layer.provideMerge(clients, protocol);
33
+ };
34
+ export { localClient };
@@ -0,0 +1,9 @@
1
+ import { Schema } from "effect";
2
+ declare const ListenerNotLoopbackError_base: Schema.Class<ListenerNotLoopbackError, Schema.TaggedStruct<"ListenerNotLoopbackError", {
3
+ readonly address: Schema.String;
4
+ readonly message: Schema.String;
5
+ }>, import("effect/Cause").YieldableError & {
6
+ readonly brand: unique symbol;
7
+ }>;
8
+ export declare class ListenerNotLoopbackError extends ListenerNotLoopbackError_base {}
9
+ export {};
@@ -0,0 +1,7 @@
1
+ import { Schema } from "effect";
2
+ // src/serve/rpc/listener-not-loopback.errors.ts
3
+ var ListenerNotLoopbackError = class extends Schema.TaggedError()("ListenerNotLoopbackError", {
4
+ address: Schema.String,
5
+ message: Schema.String
6
+ }) {};
7
+ export { ListenerNotLoopbackError };
@@ -0,0 +1,5 @@
1
+ import { Effect } from "effect";
2
+ import { HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ type Response = HttpServerResponse.HttpServerResponse;
4
+ declare const ndjsonOnly: <Failure, Services>(app: Effect.Effect<Response, Failure, Services>) => Effect.Effect<Response, Failure, Services | HttpServerRequest.HttpServerRequest>;
5
+ export { ndjsonOnly };
@@ -0,0 +1,14 @@
1
+ import { Array, Effect, Option, String } from "effect";
2
+ import { Headers, HttpServerRequest, HttpServerResponse } from "effect/http";
3
+ // src/serve/rpc/ndjson-only.pure.ts
4
+ const unsupportedMediaType = 415;
5
+ const ndjsonTypes = ["application/ndjson", "application/x-ndjson"];
6
+ const refusal = "a POST here must be application/ndjson; a browser sends any other body from another site without asking first, so it is refused";
7
+ const parameters = /;.*$/su;
8
+ const mediaType = (contentType) => String.toLowerCase(String.trim(String.replace(parameters, "")(contentType)));
9
+ const isNdjson = (request) => Option.exists(Headers.get(request.headers, "content-type"), (contentType) => Array.contains(ndjsonTypes, mediaType(contentType)));
10
+ const ndjsonOnly = (app) => HttpServerRequest.HttpServerRequest.use((request) => {
11
+ if (request.method !== "POST" || isNdjson(request)) return app;
12
+ return Effect.succeed(HttpServerResponse.text(refusal, { status: unsupportedMediaType }));
13
+ });
14
+ export { ndjsonOnly };
@@ -0,0 +1,6 @@
1
+ import { ActorHost } from "../engine/actor-host.service.mjs";
2
+ import { ActorRpcHandlers, ServedActor } from "./actor-rpc.handlers.mjs";
3
+ import { Effect, Scope } from "effect";
4
+ /** Every handler of the served actors' RPC groups: calls, reads and subscriptions, file streams and computers. */
5
+ declare const servedRpcHandlers: (actors: readonly ServedActor[]) => Effect.Effect<ActorRpcHandlers, never, ActorHost | Scope.Scope>;
6
+ export { type ServedActor, servedRpcHandlers };