@akterjs/effect 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +43 -2
- package/dist/contract/actor/actor-already-exists.errors.d.mts +8 -0
- package/dist/contract/actor/actor-already-exists.errors.mjs +4 -0
- package/dist/contract/actor/actor-definition.pure.d.mts +21 -0
- package/dist/contract/actor/actor-definition.pure.mjs +106 -0
- package/dist/contract/actor/actor-erased.errors.d.mts +8 -0
- package/dist/contract/actor/actor-erased.errors.mjs +4 -0
- package/dist/contract/actor/actor-names.pure.d.mts +11 -0
- package/dist/contract/actor/actor-names.pure.mjs +51 -0
- package/dist/contract/actor/actor-not-created.errors.d.mts +8 -0
- package/dist/contract/actor/actor-not-created.errors.mjs +4 -0
- package/dist/contract/actor/actor-not-registered.errors.d.mts +8 -0
- package/dist/contract/actor/actor-not-registered.errors.mjs +4 -0
- package/dist/contract/actor/actor-registry.service.d.mts +16 -0
- package/dist/contract/actor/actor-registry.service.mjs +21 -0
- package/dist/contract/actor/actor.contract.d.mts +238 -0
- package/dist/contract/actor/actor.contract.mjs +1 -0
- package/dist/contract/actor/host-interface.pure.d.mts +23 -0
- package/dist/contract/actor/host-interface.pure.mjs +39 -0
- package/dist/contract/actor/reserved-member.errors.d.mts +9 -0
- package/dist/contract/actor/reserved-member.errors.mjs +7 -0
- package/dist/contract/akter.service.d.mts +75 -0
- package/dist/contract/akter.service.mjs +134 -0
- package/dist/contract/caller/authentication.api.d.mts +6 -0
- package/dist/contract/caller/authentication.api.mjs +5 -0
- package/dist/contract/caller/caller-admission.pure.d.mts +27 -0
- package/dist/contract/caller/caller-admission.pure.mjs +59 -0
- package/dist/contract/caller/caller-not-allowed.errors.d.mts +16 -0
- package/dist/contract/caller/caller-not-allowed.errors.mjs +18 -0
- package/dist/contract/caller/caller.schema.d.mts +7 -0
- package/dist/contract/caller/caller.schema.mjs +8 -0
- package/dist/contract/caller/current-caller.service.d.mts +7 -0
- package/dist/contract/caller/current-caller.service.mjs +4 -0
- package/dist/contract/caller/principal.schema.d.mts +13 -0
- package/dist/contract/caller/principal.schema.mjs +10 -0
- package/dist/contract/caller/unauthenticated.errors.d.mts +8 -0
- package/dist/contract/caller/unauthenticated.errors.mjs +4 -0
- package/dist/contract/client/actor-client.adapter.d.mts +42 -0
- package/dist/contract/client/actor-client.adapter.mjs +90 -0
- package/dist/contract/client/actor-client.contract.d.mts +30 -0
- package/dist/contract/client/actor-client.contract.mjs +1 -0
- package/dist/contract/client/actor-rpc.contract.d.mts +33 -0
- package/dist/contract/client/actor-rpc.contract.mjs +16 -0
- package/dist/contract/client/actor-unavailable.errors.d.mts +9 -0
- package/dist/contract/client/actor-unavailable.errors.mjs +7 -0
- package/dist/contract/client/client-failure.contract.d.mts +28 -0
- package/dist/contract/client/client-failure.contract.mjs +28 -0
- package/dist/contract/client/invalid-request.errors.d.mts +9 -0
- package/dist/contract/client/invalid-request.errors.mjs +7 -0
- package/dist/contract/client/storage-limit.errors.d.mts +16 -0
- package/dist/contract/client/storage-limit.errors.mjs +14 -0
- package/dist/contract/command/command-id-expired.errors.d.mts +11 -0
- package/dist/contract/command/command-id-expired.errors.mjs +9 -0
- package/dist/contract/command/command-id.schema.d.mts +3 -0
- package/dist/contract/command/command-id.schema.mjs +4 -0
- package/dist/contract/command/command.contract.d.mts +117 -0
- package/dist/contract/command/command.contract.mjs +111 -0
- package/dist/contract/command/outbox-id.pure.d.mts +9 -0
- package/dist/contract/command/outbox-id.pure.mjs +14 -0
- package/dist/contract/command/outbox.schema.d.mts +9 -0
- package/dist/contract/command/outbox.schema.mjs +10 -0
- package/dist/contract/command/timer.schema.d.mts +20 -0
- package/dist/contract/command/timer.schema.mjs +14 -0
- package/dist/contract/computer/checkpoint-expired.errors.d.mts +12 -0
- package/dist/contract/computer/checkpoint-expired.errors.mjs +8 -0
- package/dist/contract/computer/computer-client-failure.contract.d.mts +16 -0
- package/dist/contract/computer/computer-client-failure.contract.mjs +1 -0
- package/dist/contract/computer/computer-client.adapter.d.mts +21 -0
- package/dist/contract/computer/computer-client.adapter.mjs +70 -0
- package/dist/contract/computer/computer-client.contract.d.mts +56 -0
- package/dist/contract/computer/computer-client.contract.mjs +1 -0
- package/dist/contract/computer/computer-held.errors.d.mts +13 -0
- package/dist/contract/computer/computer-held.errors.mjs +11 -0
- package/dist/contract/computer/computer-limit.errors.d.mts +15 -0
- package/dist/contract/computer/computer-limit.errors.mjs +13 -0
- package/dist/contract/computer/computer-lost.errors.d.mts +12 -0
- package/dist/contract/computer/computer-lost.errors.mjs +8 -0
- package/dist/contract/computer/computer-not-found.errors.d.mts +9 -0
- package/dist/contract/computer/computer-not-found.errors.mjs +5 -0
- package/dist/contract/computer/computer.schema.d.mts +122 -0
- package/dist/contract/computer/computer.schema.mjs +117 -0
- package/dist/contract/computer/computers-unavailable.errors.d.mts +9 -0
- package/dist/contract/computer/computers-unavailable.errors.mjs +5 -0
- package/dist/contract/computer/files/computer-files.schema.d.mts +28 -0
- package/dist/contract/computer/files/computer-files.schema.mjs +24 -0
- package/dist/contract/computer/rpc/computer-rpc.contract.d.mts +108 -0
- package/dist/contract/computer/rpc/computer-rpc.contract.mjs +117 -0
- package/dist/contract/computer/step/computer-step.contract.d.mts +21 -0
- package/dist/contract/computer/step/computer-step.contract.mjs +89 -0
- package/dist/contract/computer/step/computer-step.schema.d.mts +69 -0
- package/dist/contract/computer/step/computer-step.schema.mjs +71 -0
- package/dist/contract/computer/step/step-failure.schema.d.mts +13 -0
- package/dist/contract/computer/step/step-failure.schema.mjs +24 -0
- package/dist/contract/computer/step/step-not-found.errors.d.mts +9 -0
- package/dist/contract/computer/step/step-not-found.errors.mjs +5 -0
- package/dist/contract/description/published-contract.pure.d.mts +51 -0
- package/dist/contract/description/published-contract.pure.mjs +75 -0
- package/dist/contract/file/access/file-access-denied.errors.d.mts +11 -0
- package/dist/contract/file/access/file-access-denied.errors.mjs +9 -0
- package/dist/contract/file/access/file-access.contract.d.mts +35 -0
- package/dist/contract/file/access/file-access.contract.mjs +32 -0
- package/dist/contract/file/actor-files.contract.d.mts +50 -0
- package/dist/contract/file/actor-files.contract.mjs +1 -0
- package/dist/contract/file/blob-transfer.errors.d.mts +9 -0
- package/dist/contract/file/blob-transfer.errors.mjs +7 -0
- package/dist/contract/file/file-client-failure.contract.d.mts +24 -0
- package/dist/contract/file/file-client-failure.contract.mjs +1 -0
- package/dist/contract/file/file-client.adapter.d.mts +17 -0
- package/dist/contract/file/file-client.adapter.mjs +21 -0
- package/dist/contract/file/file-client.contract.d.mts +14 -0
- package/dist/contract/file/file-client.contract.mjs +1 -0
- package/dist/contract/file/file-listing.pure.d.mts +6 -0
- package/dist/contract/file/file-listing.pure.mjs +18 -0
- package/dist/contract/file/file-not-found.errors.d.mts +8 -0
- package/dist/contract/file/file-not-found.errors.mjs +4 -0
- package/dist/contract/file/file-path.pure.d.mts +4 -0
- package/dist/contract/file/file-path.pure.mjs +38 -0
- package/dist/contract/file/files-unavailable.errors.d.mts +8 -0
- package/dist/contract/file/files-unavailable.errors.mjs +4 -0
- package/dist/contract/file/invalid-file-request.errors.d.mts +9 -0
- package/dist/contract/file/invalid-file-request.errors.mjs +7 -0
- package/dist/contract/file/rpc/file-rpc.contract.d.mts +88 -0
- package/dist/contract/file/rpc/file-rpc.contract.mjs +117 -0
- package/dist/contract/file/rpc/file-too-large.errors.d.mts +13 -0
- package/dist/contract/file/rpc/file-too-large.errors.mjs +11 -0
- package/dist/contract/file/rpc/rpc-file-clients.layer.d.mts +10 -0
- package/dist/contract/file/rpc/rpc-file-clients.layer.mjs +95 -0
- package/dist/contract/fork/fork-rpc.contract.d.mts +40 -0
- package/dist/contract/fork/fork-rpc.contract.mjs +26 -0
- package/dist/contract/history/actor-journal.service.d.mts +58 -0
- package/dist/contract/history/actor-journal.service.mjs +67 -0
- package/dist/contract/history/history-entry.pure.d.mts +79 -0
- package/dist/contract/history/history-entry.pure.mjs +95 -0
- package/dist/contract/hosted/handler-failed.errors.d.mts +16 -0
- package/dist/contract/hosted/handler-failed.errors.mjs +14 -0
- package/dist/contract/hosted/handler-failure.pure.d.mts +21 -0
- package/dist/contract/hosted/handler-failure.pure.mjs +86 -0
- package/dist/contract/hosted/hosted-actor.service.d.mts +23 -0
- package/dist/contract/hosted/hosted-actor.service.mjs +64 -0
- package/dist/contract/hosted/hosted-command.service.d.mts +20 -0
- package/dist/contract/hosted/hosted-command.service.mjs +88 -0
- package/dist/contract/hosted/hosted-create.service.d.mts +17 -0
- package/dist/contract/hosted/hosted-create.service.mjs +67 -0
- package/dist/contract/hosted/hosted-error.contract.d.mts +11 -0
- package/dist/contract/hosted/hosted-error.contract.mjs +1 -0
- package/dist/contract/hosted/hosted-failure.schema.d.mts +18 -0
- package/dist/contract/hosted/hosted-failure.schema.mjs +31 -0
- package/dist/contract/hosted/hosted-outcome.contract.d.mts +18 -0
- package/dist/contract/hosted/hosted-outcome.contract.mjs +1 -0
- package/dist/contract/hosted/hosted-query.service.d.mts +16 -0
- package/dist/contract/hosted/hosted-query.service.mjs +42 -0
- package/dist/contract/hosted/hosted-request.pure.d.mts +61 -0
- package/dist/contract/hosted/hosted-request.pure.mjs +91 -0
- package/dist/contract/job/job-id.pure.d.mts +11 -0
- package/dist/contract/job/job-id.pure.mjs +20 -0
- package/dist/contract/job/job-patches.contract.d.mts +32 -0
- package/dist/contract/job/job-patches.contract.mjs +45 -0
- package/dist/contract/job/job-signal.schema.d.mts +13 -0
- package/dist/contract/job/job-signal.schema.mjs +16 -0
- package/dist/contract/job/reserved-payload-field.errors.d.mts +10 -0
- package/dist/contract/job/reserved-payload-field.errors.mjs +8 -0
- package/dist/contract/job/started-job.schema.d.mts +7 -0
- package/dist/contract/job/started-job.schema.mjs +8 -0
- package/dist/contract/json-codec.pure.d.mts +7 -0
- package/dist/contract/json-codec.pure.mjs +14 -0
- package/dist/contract/room.contract.d.mts +75 -0
- package/dist/contract/room.contract.mjs +36 -0
- package/dist/contract/secret/actor-secrets.adapter.d.mts +33 -0
- package/dist/contract/secret/actor-secrets.adapter.mjs +38 -0
- package/dist/contract/secret/invalid-secret-name.errors.d.mts +10 -0
- package/dist/contract/secret/invalid-secret-name.errors.mjs +8 -0
- package/dist/contract/secret/secret-unavailable.errors.d.mts +11 -0
- package/dist/contract/secret/secret-unavailable.errors.mjs +10 -0
- package/dist/contract/secret/secret.schema.d.mts +25 -0
- package/dist/contract/secret/secret.schema.mjs +34 -0
- package/dist/contract/spend/billing-unavailable.errors.d.mts +12 -0
- package/dist/contract/spend/billing-unavailable.errors.mjs +8 -0
- package/dist/contract/spend/spend-cap-reached.errors.d.mts +17 -0
- package/dist/contract/spend/spend-cap-reached.errors.mjs +15 -0
- package/dist/contract/state/actor-state.pure.d.mts +38 -0
- package/dist/contract/state/actor-state.pure.mjs +153 -0
- package/dist/contract/state/actor-state.service.d.mts +45 -0
- package/dist/contract/state/actor-state.service.mjs +18 -0
- package/dist/contract/state/state-migration.pure.d.mts +11 -0
- package/dist/contract/state/state-migration.pure.mjs +23 -0
- package/dist/contract/state/state-read.pure.d.mts +12 -0
- package/dist/contract/state/state-read.pure.mjs +22 -0
- package/dist/contract/state/state-unreadable.errors.d.mts +9 -0
- package/dist/contract/state/state-unreadable.errors.mjs +7 -0
- package/dist/host/actor/actor-database.service.d.mts +46 -0
- package/dist/host/actor/actor-database.service.mjs +112 -0
- package/dist/host/actor/actor-exclusive.pure.d.mts +7 -0
- package/dist/host/actor/actor-exclusive.pure.mjs +16 -0
- package/dist/host/actor/actor-records.sql.d.mts +29 -0
- package/dist/host/actor/actor-records.sql.mjs +26 -0
- package/dist/host/actor/reserved-name.errors.d.mts +10 -0
- package/dist/host/actor/reserved-name.errors.mjs +8 -0
- package/dist/host/actor/reserved-names.pure.d.mts +15 -0
- package/dist/host/actor/reserved-names.pure.mjs +20 -0
- package/dist/host/actor/room.actor.d.mts +4 -0
- package/dist/host/actor/room.actor.mjs +36 -0
- package/dist/host/blob/blob-frames.pure.d.mts +7 -0
- package/dist/host/blob/blob-frames.pure.mjs +28 -0
- package/dist/host/blob/blob-grant.schema.d.mts +14 -0
- package/dist/host/blob/blob-grant.schema.mjs +15 -0
- package/dist/host/blob/blob-grants.service.d.mts +28 -0
- package/dist/host/blob/blob-grants.service.mjs +129 -0
- package/dist/host/blob/blob-keyring.service.d.mts +18 -0
- package/dist/host/blob/blob-keyring.service.mjs +4 -0
- package/dist/host/blob/blob-range.pure.d.mts +13 -0
- package/dist/host/blob/blob-range.pure.mjs +23 -0
- package/dist/host/blob/blob-sealing.contract.d.mts +37 -0
- package/dist/host/blob/blob-sealing.contract.mjs +1 -0
- package/dist/host/blob/blob-sealing.service.d.mts +11 -0
- package/dist/host/blob/blob-sealing.service.mjs +16 -0
- package/dist/host/blob/export/blob-archive.sql.d.mts +21 -0
- package/dist/host/blob/export/blob-archive.sql.mjs +75 -0
- package/dist/host/blob/export/blob-export-holds.sql.d.mts +49 -0
- package/dist/host/blob/export/blob-export-holds.sql.mjs +25 -0
- package/dist/host/blob/plain-blob-sealing.pure.d.mts +5 -0
- package/dist/host/blob/plain-blob-sealing.pure.mjs +55 -0
- package/dist/host/blob/reference/blob-catalog.sql.d.mts +40 -0
- package/dist/host/blob/reference/blob-catalog.sql.mjs +145 -0
- package/dist/host/blob/reference/blob-coordinator.pure.d.mts +10 -0
- package/dist/host/blob/reference/blob-coordinator.pure.mjs +153 -0
- package/dist/host/blob/reference/blob-file-page.sql.d.mts +13 -0
- package/dist/host/blob/reference/blob-file-page.sql.mjs +21 -0
- package/dist/host/blob/reference/blob-forks.sql.d.mts +21 -0
- package/dist/host/blob/reference/blob-forks.sql.mjs +40 -0
- package/dist/host/blob/reference/blob-lineage.sql.d.mts +14 -0
- package/dist/host/blob/reference/blob-lineage.sql.mjs +24 -0
- package/dist/host/blob/reference/blob-reads.pure.d.mts +15 -0
- package/dist/host/blob/reference/blob-reads.pure.mjs +97 -0
- package/dist/host/blob/reference/blob-receipts.sql.d.mts +71 -0
- package/dist/host/blob/reference/blob-receipts.sql.mjs +176 -0
- package/dist/host/blob/reference/blob-transfer-adopt.pure.d.mts +21 -0
- package/dist/host/blob/reference/blob-transfer-adopt.pure.mjs +68 -0
- package/dist/host/blob/reference/blob-transfer-fork.pure.d.mts +15 -0
- package/dist/host/blob/reference/blob-transfer-fork.pure.mjs +125 -0
- package/dist/host/blob/reference/blob-transfer-upkeep.pure.d.mts +18 -0
- package/dist/host/blob/reference/blob-transfer-upkeep.pure.mjs +54 -0
- package/dist/host/blob/reference/blob-transfer.pure.d.mts +85 -0
- package/dist/host/blob/reference/blob-transfer.pure.mjs +1 -0
- package/dist/host/blob/sealed-blob-sealing.pure.d.mts +10 -0
- package/dist/host/blob/sealed-blob-sealing.pure.mjs +130 -0
- package/dist/host/blob/stream/blob-directory.pure.d.mts +18 -0
- package/dist/host/blob/stream/blob-directory.pure.mjs +84 -0
- package/dist/host/blob/stream/blob-length.pure.d.mts +9 -0
- package/dist/host/blob/stream/blob-length.pure.mjs +19 -0
- package/dist/host/blob/stream/blob-writing.pure.d.mts +8 -0
- package/dist/host/blob/stream/blob-writing.pure.mjs +15 -0
- package/dist/host/command/batch/command-batch.sql.d.mts +61 -0
- package/dist/host/command/batch/command-batch.sql.mjs +100 -0
- package/dist/host/command/command-context.adapter.d.mts +47 -0
- package/dist/host/command/command-context.adapter.mjs +90 -0
- package/dist/host/command/command-id-age.pure.d.mts +13 -0
- package/dist/host/command/command-id-age.pure.mjs +31 -0
- package/dist/host/command/command-id-reuse.pure.d.mts +28 -0
- package/dist/host/command/command-id-reuse.pure.mjs +38 -0
- package/dist/host/command/command-id-reused.errors.d.mts +13 -0
- package/dist/host/command/command-id-reused.errors.mjs +11 -0
- package/dist/host/command/command-journal.sql.d.mts +84 -0
- package/dist/host/command/command-journal.sql.mjs +74 -0
- package/dist/host/command/command-rejected.errors.d.mts +8 -0
- package/dist/host/command/command-rejected.errors.mjs +4 -0
- package/dist/host/command/command-replay.service.d.mts +62 -0
- package/dist/host/command/command-replay.service.mjs +140 -0
- package/dist/host/command/command-reply.pure.d.mts +8 -0
- package/dist/host/command/command-reply.pure.mjs +12 -0
- package/dist/host/command/command-runner.service.d.mts +68 -0
- package/dist/host/command/command-runner.service.mjs +215 -0
- package/dist/host/command/files/command-file-inputs.sql.d.mts +51 -0
- package/dist/host/command/files/command-file-inputs.sql.mjs +59 -0
- package/dist/host/command/history-pruned.errors.d.mts +10 -0
- package/dist/host/command/history-pruned.errors.mjs +8 -0
- package/dist/host/command/replay/replay-cursor-stalled.errors.d.mts +9 -0
- package/dist/host/command/replay/replay-cursor-stalled.errors.mjs +7 -0
- package/dist/host/command/replay/replay-cursor.pure.d.mts +7 -0
- package/dist/host/command/replay/replay-cursor.pure.mjs +12 -0
- package/dist/host/computer/computer-steps.sql.d.mts +14 -0
- package/dist/host/computer/computer-steps.sql.mjs +76 -0
- package/dist/host/computer/job-computers.service.d.mts +20 -0
- package/dist/host/computer/job-computers.service.mjs +59 -0
- package/dist/host/computer/local-computer-files.layer.d.mts +11 -0
- package/dist/host/computer/local-computer-files.layer.mjs +69 -0
- package/dist/host/computer/local-computer-log.layer.d.mts +23 -0
- package/dist/host/computer/local-computer-log.layer.mjs +64 -0
- package/dist/host/computer/local-computer-records.layer.d.mts +190 -0
- package/dist/host/computer/local-computer-records.layer.mjs +99 -0
- package/dist/host/computer/local-computer.schema.d.mts +69 -0
- package/dist/host/computer/local-computer.schema.mjs +29 -0
- package/dist/host/computer/local-computers.adapter.d.mts +18 -0
- package/dist/host/computer/local-computers.adapter.mjs +248 -0
- package/dist/host/computer/local-step.layer.d.mts +30 -0
- package/dist/host/computer/local-step.layer.mjs +119 -0
- package/dist/host/file/actor-file-storage.sql.d.mts +15 -0
- package/dist/host/file/actor-file-storage.sql.mjs +82 -0
- package/dist/host/file/actor-files.sql.d.mts +9 -0
- package/dist/host/file/actor-files.sql.mjs +3 -0
- package/dist/host/file/blob-home-lock.pure.d.mts +8 -0
- package/dist/host/file/blob-home-lock.pure.mjs +10 -0
- package/dist/host/file/blob-home.sql.d.mts +19 -0
- package/dist/host/file/blob-home.sql.mjs +30 -0
- package/dist/host/file/local-blob-home.service.d.mts +16 -0
- package/dist/host/file/local-blob-home.service.mjs +43 -0
- package/dist/host/file/local-blob-owner.sql.d.mts +30 -0
- package/dist/host/file/local-blob-owner.sql.mjs +68 -0
- package/dist/host/file/local-file-upkeep.pure.d.mts +12 -0
- package/dist/host/file/local-file-upkeep.pure.mjs +41 -0
- package/dist/host/file/replay-file-storage.sql.d.mts +7 -0
- package/dist/host/file/replay-file-storage.sql.mjs +26 -0
- package/dist/host/fork/actor-fork.sql.d.mts +52 -0
- package/dist/host/fork/actor-fork.sql.mjs +42 -0
- package/dist/host/fork/fork-computers.adapter.d.mts +43 -0
- package/dist/host/fork/fork-computers.adapter.mjs +193 -0
- package/dist/host/hash/blob-hashing.service.d.mts +10 -0
- package/dist/host/hash/blob-hashing.service.mjs +4 -0
- package/dist/host/job/job-durables.sql.d.mts +44 -0
- package/dist/host/job/job-durables.sql.mjs +136 -0
- package/dist/host/job/job-engine.adapter.d.mts +33 -0
- package/dist/host/job/job-engine.adapter.mjs +258 -0
- package/dist/host/job/job-journal.sql.d.mts +85 -0
- package/dist/host/job/job-journal.sql.mjs +109 -0
- package/dist/host/job/job-results.service.d.mts +37 -0
- package/dist/host/job/job-results.service.mjs +63 -0
- package/dist/host/job/job-runs.pure.d.mts +103 -0
- package/dist/host/job/job-runs.pure.mjs +193 -0
- package/dist/host/job/undelivered-result.pure.d.mts +49 -0
- package/dist/host/job/undelivered-result.pure.mjs +147 -0
- package/dist/host/layout/actor-layout.sql.d.mts +8 -0
- package/dist/host/layout/actor-layout.sql.mjs +33 -0
- package/dist/host/layout/layout-version.errors.d.mts +10 -0
- package/dist/host/layout/layout-version.errors.mjs +8 -0
- package/dist/host/layout/layout-version.pure.d.mts +10 -0
- package/dist/host/layout/layout-version.pure.mjs +14 -0
- package/dist/host/migration/actor-migrations.service.d.mts +46 -0
- package/dist/host/migration/actor-migrations.service.mjs +143 -0
- package/dist/host/migration/migration-edited.errors.d.mts +9 -0
- package/dist/host/migration/migration-edited.errors.mjs +7 -0
- package/dist/host/migration/migration-failed.errors.d.mts +12 -0
- package/dist/host/migration/migration-failed.errors.mjs +10 -0
- package/dist/host/migration/migration-failure.pure.d.mts +9 -0
- package/dist/host/migration/migration-failure.pure.mjs +19 -0
- package/dist/host/migration/migration-hasher.adapter.d.mts +15 -0
- package/dist/host/migration/migration-hasher.adapter.mjs +40 -0
- package/dist/host/migration/migration-missing.errors.d.mts +9 -0
- package/dist/host/migration/migration-missing.errors.mjs +7 -0
- package/dist/host/migration/migration-plan.pure.d.mts +20 -0
- package/dist/host/migration/migration-plan.pure.mjs +32 -0
- package/dist/host/outbox/actor-outbox.sql.d.mts +33 -0
- package/dist/host/outbox/actor-outbox.sql.mjs +28 -0
- package/dist/host/outbox/outbox-acknowledgements.sql.d.mts +12 -0
- package/dist/host/outbox/outbox-acknowledgements.sql.mjs +47 -0
- package/dist/host/outbox/outbox-runner.service.d.mts +37 -0
- package/dist/host/outbox/outbox-runner.service.mjs +155 -0
- package/dist/host/query/query-policy.pure.d.mts +15 -0
- package/dist/host/query/query-policy.pure.mjs +12 -0
- package/dist/host/query/query-runner.service.d.mts +42 -0
- package/dist/host/query/query-runner.service.mjs +72 -0
- package/dist/host/sqlite/actor-connections.pure.d.mts +26 -0
- package/dist/host/sqlite/actor-connections.pure.mjs +4 -0
- package/dist/host/sqlite/sqlite-connection.adapter.d.mts +22 -0
- package/dist/host/sqlite/sqlite-connection.adapter.mjs +151 -0
- package/dist/host/sqlite/sqlite-driver.service.d.mts +33 -0
- package/dist/host/sqlite/sqlite-driver.service.mjs +88 -0
- package/dist/host/sqlite/sqlite-parameters.pure.d.mts +5 -0
- package/dist/host/sqlite/sqlite-parameters.pure.mjs +21 -0
- package/dist/host/sqlite/sqlite-reason.pure.d.mts +8 -0
- package/dist/host/sqlite/sqlite-reason.pure.mjs +13 -0
- package/dist/host/timer/actor-timers.sql.d.mts +32 -0
- package/dist/host/timer/actor-timers.sql.mjs +8 -0
- package/dist/host/timer/timer-runner.service.d.mts +26 -0
- package/dist/host/timer/timer-runner.service.mjs +68 -0
- package/dist/host/upkeep/actor-due.sql.d.mts +26 -0
- package/dist/host/upkeep/actor-due.sql.mjs +43 -0
- package/dist/host/upkeep/actor-upkeep.service.d.mts +55 -0
- package/dist/host/upkeep/actor-upkeep.service.mjs +218 -0
- package/dist/host/upkeep/execution-authority.pure.d.mts +19 -0
- package/dist/host/upkeep/execution-authority.pure.mjs +10 -0
- package/dist/runtime/akter-local.layer.d.mts +28 -0
- package/dist/runtime/akter-local.layer.mjs +24 -0
- package/dist/runtime/akter.layer.d.mts +91 -0
- package/dist/runtime/akter.layer.mjs +99 -0
- package/dist/runtime/blob-hashing.layer.d.mts +4 -0
- package/dist/runtime/blob-hashing.layer.mjs +15 -0
- package/dist/runtime/hosted-environment.layer.d.mts +34 -0
- package/dist/runtime/hosted-environment.layer.mjs +40 -0
- package/dist/runtime/http-server.layer.d.mts +9 -0
- package/dist/runtime/http-server.layer.mjs +15 -0
- package/dist/runtime/local-actor-engine.layer.d.mts +10 -0
- package/dist/runtime/local-actor-engine.layer.mjs +14 -0
- package/dist/runtime/local-engine.layer.d.mts +15 -0
- package/dist/runtime/local-engine.layer.mjs +14 -0
- package/dist/runtime/local-environments.layer.d.mts +24 -0
- package/dist/runtime/local-environments.layer.mjs +159 -0
- package/dist/runtime/local-file-clients.layer.d.mts +13 -0
- package/dist/runtime/local-file-clients.layer.mjs +78 -0
- package/dist/runtime/local-job-runtime.layer.d.mts +19 -0
- package/dist/runtime/local-job-runtime.layer.mjs +21 -0
- package/dist/serve/archive/archived-actors.layer.d.mts +17 -0
- package/dist/serve/archive/archived-actors.layer.mjs +84 -0
- package/dist/serve/archive/archived-store.layer.d.mts +12 -0
- package/dist/serve/archive/archived-store.layer.mjs +40 -0
- package/dist/serve/engine/actor-engine.layer.d.mts +8 -0
- package/dist/serve/engine/actor-engine.layer.mjs +30 -0
- package/dist/serve/engine/actor-fork.service.d.mts +63 -0
- package/dist/serve/engine/actor-fork.service.mjs +277 -0
- package/dist/serve/engine/actor-holding.pure.d.mts +7 -0
- package/dist/serve/engine/actor-holding.pure.mjs +9 -0
- package/dist/serve/engine/actor-host.service.d.mts +66 -0
- package/dist/serve/engine/actor-host.service.mjs +209 -0
- package/dist/serve/engine/actor-location.service.d.mts +38 -0
- package/dist/serve/engine/actor-location.service.mjs +109 -0
- package/dist/serve/engine/actor-residents.pure.d.mts +92 -0
- package/dist/serve/engine/actor-residents.pure.mjs +201 -0
- package/dist/serve/engine/actor-shard.pure.d.mts +4 -0
- package/dist/serve/engine/actor-shard.pure.mjs +8 -0
- package/dist/serve/engine/actor-state.pure.d.mts +17 -0
- package/dist/serve/engine/actor-state.pure.mjs +20 -0
- package/dist/serve/engine/actors-not-hosted.errors.d.mts +9 -0
- package/dist/serve/engine/actors-not-hosted.errors.mjs +7 -0
- package/dist/serve/engine/job-runtime.layer.d.mts +6 -0
- package/dist/serve/engine/job-runtime.layer.mjs +5 -0
- package/dist/serve/environment/environment-already-exists.errors.d.mts +10 -0
- package/dist/serve/environment/environment-already-exists.errors.mjs +9 -0
- package/dist/serve/environment/environment-in-use.errors.d.mts +10 -0
- package/dist/serve/environment/environment-in-use.errors.mjs +14 -0
- package/dist/serve/environment/environment-not-found.errors.d.mts +10 -0
- package/dist/serve/environment/environment-not-found.errors.mjs +9 -0
- package/dist/serve/environment/environment-records.sql.d.mts +92 -0
- package/dist/serve/environment/environment-records.sql.mjs +59 -0
- package/dist/serve/environment/environment-store.sql.d.mts +38 -0
- package/dist/serve/environment/environment-store.sql.mjs +78 -0
- package/dist/serve/environment/local-environment.schema.d.mts +38 -0
- package/dist/serve/environment/local-environment.schema.mjs +43 -0
- package/dist/serve/environment/local-environments.service.d.mts +44 -0
- package/dist/serve/environment/local-environments.service.mjs +196 -0
- package/dist/serve/environment/promotion-notice.pure.d.mts +22 -0
- package/dist/serve/environment/promotion-notice.pure.mjs +30 -0
- package/dist/serve/environment/snapshot-operations.sql.d.mts +32 -0
- package/dist/serve/environment/snapshot-operations.sql.mjs +131 -0
- package/dist/serve/environment/store-snapshot.sql.d.mts +32 -0
- package/dist/serve/environment/store-snapshot.sql.mjs +74 -0
- package/dist/serve/erasure/local-actor-erasure.service.d.mts +26 -0
- package/dist/serve/erasure/local-actor-erasure.service.mjs +102 -0
- package/dist/serve/history/actor-host-runners.service.d.mts +23 -0
- package/dist/serve/history/actor-host-runners.service.mjs +35 -0
- package/dist/serve/hosted/hosted-app-build.errors.d.mts +13 -0
- package/dist/serve/hosted/hosted-app-build.errors.mjs +9 -0
- package/dist/serve/hosted/hosted-app-checks.layer.d.mts +15 -0
- package/dist/serve/hosted/hosted-app-checks.layer.mjs +32 -0
- package/dist/serve/hosted/hosted-file-forward.layer.d.mts +22 -0
- package/dist/serve/hosted/hosted-file-forward.layer.mjs +42 -0
- package/dist/serve/hosted/hosted-file-rpcs.layer.d.mts +25 -0
- package/dist/serve/hosted/hosted-file-rpcs.layer.mjs +82 -0
- package/dist/serve/hosted/hosted-file-server.layer.d.mts +18 -0
- package/dist/serve/hosted/hosted-file-server.layer.mjs +33 -0
- package/dist/serve/hosted/hosted-files.layer.d.mts +32 -0
- package/dist/serve/hosted/hosted-files.layer.mjs +55 -0
- package/dist/serve/hosted/hosted-runtime.layer.d.mts +42 -0
- package/dist/serve/hosted/hosted-runtime.layer.mjs +48 -0
- package/dist/serve/hosted/hosted-runtime.service.d.mts +77 -0
- package/dist/serve/hosted/hosted-runtime.service.mjs +74 -0
- package/dist/serve/hosted/hosted-secrets.layer.d.mts +10 -0
- package/dist/serve/hosted/hosted-secrets.layer.mjs +28 -0
- package/dist/serve/http/loopback-host.pure.d.mts +11 -0
- package/dist/serve/http/loopback-host.pure.mjs +29 -0
- package/dist/serve/inspect/actor-inspection.schema.d.mts +119 -0
- package/dist/serve/inspect/actor-inspection.schema.mjs +75 -0
- package/dist/serve/inspect/actor-inspection.sql.d.mts +12 -0
- package/dist/serve/inspect/actor-inspection.sql.mjs +43 -0
- package/dist/serve/inspect/inspect.service.d.mts +24 -0
- package/dist/serve/inspect/inspect.service.mjs +92 -0
- package/dist/serve/inspect/inspector-page.pure.d.mts +2 -0
- package/dist/serve/inspect/inspector-page.pure.mjs +155 -0
- package/dist/serve/inspect/inspector-wal.pure.d.mts +3 -0
- package/dist/serve/inspect/inspector-wal.pure.mjs +19 -0
- package/dist/serve/inspect/inspector.handlers.d.mts +5 -0
- package/dist/serve/inspect/inspector.handlers.mjs +50 -0
- package/dist/serve/inspect/inspector.layer.d.mts +9 -0
- package/dist/serve/inspect/inspector.layer.mjs +14 -0
- package/dist/serve/live/live-reads.service.d.mts +44 -0
- package/dist/serve/live/live-reads.service.mjs +152 -0
- package/dist/serve/live/live-tables.sql.d.mts +35 -0
- package/dist/serve/live/live-tables.sql.mjs +66 -0
- package/dist/serve/live/state-reads.pure.d.mts +11 -0
- package/dist/serve/live/state-reads.pure.mjs +7 -0
- package/dist/serve/rpc/actor-rpc.handlers.d.mts +24 -0
- package/dist/serve/rpc/actor-rpc.handlers.mjs +142 -0
- package/dist/serve/rpc/akter-server.layer.d.mts +18 -0
- package/dist/serve/rpc/akter-server.layer.mjs +61 -0
- package/dist/serve/rpc/computer/computer-copy.layer.d.mts +22 -0
- package/dist/serve/rpc/computer/computer-copy.layer.mjs +70 -0
- package/dist/serve/rpc/computer/computer-rpc-access.pure.d.mts +29 -0
- package/dist/serve/rpc/computer/computer-rpc-access.pure.mjs +46 -0
- package/dist/serve/rpc/computer/computer-rpc.layer.d.mts +39 -0
- package/dist/serve/rpc/computer/computer-rpc.layer.mjs +84 -0
- package/dist/serve/rpc/computer/step-rpc.handlers.d.mts +23 -0
- package/dist/serve/rpc/computer/step-rpc.handlers.mjs +43 -0
- package/dist/serve/rpc/development-authentication.handlers.d.mts +7 -0
- package/dist/serve/rpc/development-authentication.handlers.mjs +19 -0
- package/dist/serve/rpc/development-guard.pure.d.mts +10 -0
- package/dist/serve/rpc/development-guard.pure.mjs +16 -0
- package/dist/serve/rpc/file/file-rpc-access.pure.d.mts +55 -0
- package/dist/serve/rpc/file/file-rpc-access.pure.mjs +67 -0
- package/dist/serve/rpc/file/file-rpc.layer.d.mts +53 -0
- package/dist/serve/rpc/file/file-rpc.layer.mjs +143 -0
- package/dist/serve/rpc/file/upload-sessions.pure.d.mts +45 -0
- package/dist/serve/rpc/file/upload-sessions.pure.mjs +187 -0
- package/dist/serve/rpc/in-process-client.layer.d.mts +13 -0
- package/dist/serve/rpc/in-process-client.layer.mjs +34 -0
- package/dist/serve/rpc/listener-not-loopback.errors.d.mts +9 -0
- package/dist/serve/rpc/listener-not-loopback.errors.mjs +7 -0
- package/dist/serve/rpc/ndjson-only.pure.d.mts +5 -0
- package/dist/serve/rpc/ndjson-only.pure.mjs +14 -0
- package/dist/serve/rpc/served-rpc.layer.d.mts +6 -0
- package/dist/serve/rpc/served-rpc.layer.mjs +19 -0
- package/dist/serve/store/actor-not-migrated.errors.d.mts +10 -0
- package/dist/serve/store/actor-not-migrated.errors.mjs +8 -0
- package/dist/serve/store/store-migrations.layer.d.mts +5 -0
- package/dist/serve/store/store-migrations.layer.mjs +18 -0
- package/dist/serve/store/store-migrations.service.d.mts +26 -0
- package/dist/serve/store/store-migrations.service.mjs +47 -0
- package/dist/serve/store/store-unreadable.errors.d.mts +9 -0
- package/dist/serve/store/store-unreadable.errors.mjs +7 -0
- package/dist/serve/verify/verify.layer.d.mts +16 -0
- package/dist/serve/verify/verify.layer.mjs +36 -0
- package/dist/testing/story-driver.service.d.mts +29 -0
- package/dist/testing/story-driver.service.mjs +126 -0
- package/dist/testing/story.layer.d.mts +21 -0
- package/dist/testing/story.layer.mjs +42 -0
- package/package.json +106 -3
- package/src/contract/actor/actor-already-exists.errors.ts +8 -0
- package/src/contract/actor/actor-definition.pure.ts +157 -0
- package/src/contract/actor/actor-erased.errors.ts +8 -0
- package/src/contract/actor/actor-names.pure.ts +64 -0
- package/src/contract/actor/actor-not-created.errors.ts +8 -0
- package/src/contract/actor/actor-not-registered.errors.ts +8 -0
- package/src/contract/actor/actor-registry.service.ts +35 -0
- package/src/contract/actor/actor.contract.ts +409 -0
- package/src/contract/actor/host-interface.pure.ts +60 -0
- package/src/contract/actor/reserved-member.errors.ts +9 -0
- package/src/contract/akter.service.ts +233 -0
- package/src/contract/caller/authentication.api.ts +9 -0
- package/src/contract/caller/caller-admission.pure.ts +90 -0
- package/src/contract/caller/caller-not-allowed.errors.ts +26 -0
- package/src/contract/caller/caller.schema.ts +7 -0
- package/src/contract/caller/current-caller.service.ts +7 -0
- package/src/contract/caller/principal.schema.ts +13 -0
- package/src/contract/caller/unauthenticated.errors.ts +8 -0
- package/src/contract/client/actor-client.adapter.ts +217 -0
- package/src/contract/client/actor-client.contract.ts +53 -0
- package/src/contract/client/actor-rpc.contract.ts +91 -0
- package/src/contract/client/actor-unavailable.errors.ts +9 -0
- package/src/contract/client/client-failure.contract.ts +53 -0
- package/src/contract/client/invalid-request.errors.ts +9 -0
- package/src/contract/client/storage-limit.errors.ts +16 -0
- package/src/contract/command/command-id-expired.errors.ts +11 -0
- package/src/contract/command/command-id.schema.ts +5 -0
- package/src/contract/command/command.contract.ts +334 -0
- package/src/contract/command/outbox-id.pure.ts +25 -0
- package/src/contract/command/outbox.schema.ts +11 -0
- package/src/contract/command/timer.schema.ts +21 -0
- package/src/contract/computer/checkpoint-expired.errors.ts +12 -0
- package/src/contract/computer/computer-client-failure.contract.ts +27 -0
- package/src/contract/computer/computer-client.adapter.ts +110 -0
- package/src/contract/computer/computer-client.contract.ts +75 -0
- package/src/contract/computer/computer-held.errors.ts +10 -0
- package/src/contract/computer/computer-limit.errors.ts +11 -0
- package/src/contract/computer/computer-lost.errors.ts +10 -0
- package/src/contract/computer/computer-not-found.errors.ts +9 -0
- package/src/contract/computer/computer.schema.ts +159 -0
- package/src/contract/computer/computers-unavailable.errors.ts +9 -0
- package/src/contract/computer/files/computer-files.schema.ts +31 -0
- package/src/contract/computer/rpc/computer-rpc.contract.ts +140 -0
- package/src/contract/computer/step/computer-step.contract.ts +126 -0
- package/src/contract/computer/step/computer-step.schema.ts +80 -0
- package/src/contract/computer/step/step-failure.schema.ts +26 -0
- package/src/contract/computer/step/step-not-found.errors.ts +7 -0
- package/src/contract/description/published-contract.pure.ts +187 -0
- package/src/contract/file/access/file-access-denied.errors.ts +11 -0
- package/src/contract/file/access/file-access.contract.ts +56 -0
- package/src/contract/file/actor-files.contract.ts +78 -0
- package/src/contract/file/blob-transfer.errors.ts +6 -0
- package/src/contract/file/file-client-failure.contract.ts +43 -0
- package/src/contract/file/file-client.adapter.ts +45 -0
- package/src/contract/file/file-client.contract.ts +24 -0
- package/src/contract/file/file-listing.pure.ts +30 -0
- package/src/contract/file/file-not-found.errors.ts +6 -0
- package/src/contract/file/file-path.pure.ts +37 -0
- package/src/contract/file/files-unavailable.errors.ts +8 -0
- package/src/contract/file/invalid-file-request.errors.ts +9 -0
- package/src/contract/file/rpc/file-rpc.contract.ts +148 -0
- package/src/contract/file/rpc/file-too-large.errors.ts +10 -0
- package/src/contract/file/rpc/rpc-file-clients.layer.ts +184 -0
- package/src/contract/fork/fork-rpc.contract.ts +44 -0
- package/src/contract/history/actor-journal.service.ts +195 -0
- package/src/contract/history/history-entry.pure.ts +282 -0
- package/src/contract/hosted/handler-failed.errors.ts +16 -0
- package/src/contract/hosted/handler-failure.pure.ts +161 -0
- package/src/contract/hosted/hosted-actor.service.ts +97 -0
- package/src/contract/hosted/hosted-command.service.ts +114 -0
- package/src/contract/hosted/hosted-create.service.ts +95 -0
- package/src/contract/hosted/hosted-error.contract.ts +22 -0
- package/src/contract/hosted/hosted-failure.schema.ts +32 -0
- package/src/contract/hosted/hosted-outcome.contract.ts +21 -0
- package/src/contract/hosted/hosted-query.service.ts +50 -0
- package/src/contract/hosted/hosted-request.pure.ts +185 -0
- package/src/contract/job/job-id.pure.ts +37 -0
- package/src/contract/job/job-patches.contract.ts +86 -0
- package/src/contract/job/job-signal.schema.ts +23 -0
- package/src/contract/job/reserved-payload-field.errors.ts +10 -0
- package/src/contract/job/started-job.schema.ts +9 -0
- package/src/contract/json-codec.pure.ts +27 -0
- package/src/contract/room.contract.ts +31 -0
- package/src/contract/secret/actor-secrets.adapter.ts +87 -0
- package/src/contract/secret/invalid-secret-name.errors.ts +10 -0
- package/src/contract/secret/secret-unavailable.errors.ts +13 -0
- package/src/contract/secret/secret.schema.ts +43 -0
- package/src/contract/spend/billing-unavailable.errors.ts +12 -0
- package/src/contract/spend/spend-cap-reached.errors.ts +17 -0
- package/src/contract/state/actor-state.pure.ts +192 -0
- package/src/contract/state/actor-state.service.ts +69 -0
- package/src/contract/state/state-migration.pure.ts +57 -0
- package/src/contract/state/state-read.pure.ts +40 -0
- package/src/contract/state/state-unreadable.errors.ts +9 -0
- package/src/host/actor/actor-database.service.ts +145 -0
- package/src/host/actor/actor-exclusive.pure.ts +32 -0
- package/src/host/actor/actor-records.sql.ts +78 -0
- package/src/host/actor/reserved-name.errors.ts +10 -0
- package/src/host/actor/reserved-names.pure.ts +40 -0
- package/src/host/actor/room.actor.ts +57 -0
- package/src/host/blob/blob-frames.pure.ts +52 -0
- package/src/host/blob/blob-grant.schema.ts +22 -0
- package/src/host/blob/blob-grants.service.ts +197 -0
- package/src/host/blob/blob-keyring.service.ts +25 -0
- package/src/host/blob/blob-range.pure.ts +33 -0
- package/src/host/blob/blob-sealing.contract.ts +46 -0
- package/src/host/blob/blob-sealing.service.ts +25 -0
- package/src/host/blob/export/blob-archive.sql.ts +153 -0
- package/src/host/blob/export/blob-export-holds.sql.ts +91 -0
- package/src/host/blob/plain-blob-sealing.pure.ts +70 -0
- package/src/host/blob/reference/blob-catalog.sql.ts +339 -0
- package/src/host/blob/reference/blob-coordinator.pure.ts +217 -0
- package/src/host/blob/reference/blob-file-page.sql.ts +48 -0
- package/src/host/blob/reference/blob-forks.sql.ts +125 -0
- package/src/host/blob/reference/blob-lineage.sql.ts +63 -0
- package/src/host/blob/reference/blob-reads.pure.ts +172 -0
- package/src/host/blob/reference/blob-receipts.sql.ts +375 -0
- package/src/host/blob/reference/blob-transfer-adopt.pure.ts +127 -0
- package/src/host/blob/reference/blob-transfer-fork.pure.ts +174 -0
- package/src/host/blob/reference/blob-transfer-upkeep.pure.ts +132 -0
- package/src/host/blob/reference/blob-transfer.pure.ts +127 -0
- package/src/host/blob/sealed-blob-sealing.pure.ts +163 -0
- package/src/host/blob/stream/blob-directory.pure.ts +177 -0
- package/src/host/blob/stream/blob-length.pure.ts +40 -0
- package/src/host/blob/stream/blob-writing.pure.ts +49 -0
- package/src/host/command/batch/command-batch.sql.ts +207 -0
- package/src/host/command/command-context.adapter.ts +134 -0
- package/src/host/command/command-id-age.pure.ts +54 -0
- package/src/host/command/command-id-reuse.pure.ts +90 -0
- package/src/host/command/command-id-reused.errors.ts +13 -0
- package/src/host/command/command-journal.sql.ts +232 -0
- package/src/host/command/command-rejected.errors.ts +8 -0
- package/src/host/command/command-replay.service.ts +223 -0
- package/src/host/command/command-reply.pure.ts +21 -0
- package/src/host/command/command-runner.service.ts +320 -0
- package/src/host/command/files/command-file-inputs.sql.ts +114 -0
- package/src/host/command/history-pruned.errors.ts +10 -0
- package/src/host/command/replay/replay-cursor-stalled.errors.ts +9 -0
- package/src/host/command/replay/replay-cursor.pure.ts +19 -0
- package/src/host/computer/computer-steps.sql.ts +120 -0
- package/src/host/computer/job-computers.service.ts +84 -0
- package/src/host/computer/local-computer-files.layer.ts +103 -0
- package/src/host/computer/local-computer-log.layer.ts +115 -0
- package/src/host/computer/local-computer-records.layer.ts +205 -0
- package/src/host/computer/local-computer.schema.ts +36 -0
- package/src/host/computer/local-computers.adapter.ts +379 -0
- package/src/host/computer/local-step.layer.ts +174 -0
- package/src/host/file/actor-file-storage.sql.ts +79 -0
- package/src/host/file/actor-files.sql.ts +15 -0
- package/src/host/file/blob-home-lock.pure.ts +23 -0
- package/src/host/file/blob-home.sql.ts +55 -0
- package/src/host/file/local-blob-home.service.ts +71 -0
- package/src/host/file/local-blob-owner.sql.ts +89 -0
- package/src/host/file/local-file-upkeep.pure.ts +77 -0
- package/src/host/file/replay-file-storage.sql.ts +43 -0
- package/src/host/fork/actor-fork.sql.ts +110 -0
- package/src/host/fork/fork-computers.adapter.ts +366 -0
- package/src/host/hash/blob-hashing.service.ts +14 -0
- package/src/host/job/job-durables.sql.ts +214 -0
- package/src/host/job/job-engine.adapter.ts +420 -0
- package/src/host/job/job-journal.sql.ts +257 -0
- package/src/host/job/job-results.service.ts +111 -0
- package/src/host/job/job-runs.pure.ts +445 -0
- package/src/host/job/undelivered-result.pure.ts +265 -0
- package/src/host/layout/actor-layout.sql.ts +45 -0
- package/src/host/layout/layout-version.errors.ts +10 -0
- package/src/host/layout/layout-version.pure.ts +22 -0
- package/src/host/migration/actor-migrations.service.ts +159 -0
- package/src/host/migration/migration-edited.errors.ts +9 -0
- package/src/host/migration/migration-failed.errors.ts +12 -0
- package/src/host/migration/migration-failure.pure.ts +28 -0
- package/src/host/migration/migration-hasher.adapter.ts +70 -0
- package/src/host/migration/migration-missing.errors.ts +9 -0
- package/src/host/migration/migration-plan.pure.ts +66 -0
- package/src/host/outbox/actor-outbox.sql.ts +98 -0
- package/src/host/outbox/outbox-acknowledgements.sql.ts +93 -0
- package/src/host/outbox/outbox-runner.service.ts +253 -0
- package/src/host/query/query-policy.pure.ts +31 -0
- package/src/host/query/query-runner.service.ts +132 -0
- package/src/host/sqlite/actor-connections.pure.ts +44 -0
- package/src/host/sqlite/sqlite-connection.adapter.ts +260 -0
- package/src/host/sqlite/sqlite-driver.service.ts +151 -0
- package/src/host/sqlite/sqlite-parameters.pure.ts +28 -0
- package/src/host/sqlite/sqlite-reason.pure.ts +19 -0
- package/src/host/timer/actor-timers.sql.ts +67 -0
- package/src/host/timer/timer-runner.service.ts +117 -0
- package/src/host/upkeep/actor-due.sql.ts +71 -0
- package/src/host/upkeep/actor-upkeep.service.ts +404 -0
- package/src/host/upkeep/execution-authority.pure.ts +37 -0
- package/src/runtime/akter-local.layer.ts +49 -0
- package/src/runtime/akter.layer.ts +208 -0
- package/src/runtime/blob-hashing.layer.ts +21 -0
- package/src/runtime/hosted-environment.layer.ts +85 -0
- package/src/runtime/http-server.layer.ts +29 -0
- package/src/runtime/local-actor-engine.layer.ts +33 -0
- package/src/runtime/local-engine.layer.ts +37 -0
- package/src/runtime/local-environments.layer.ts +214 -0
- package/src/runtime/local-file-clients.layer.ts +112 -0
- package/src/runtime/local-job-runtime.layer.ts +38 -0
- package/src/serve/archive/archived-actors.layer.ts +97 -0
- package/src/serve/archive/archived-store.layer.ts +46 -0
- package/src/serve/engine/actor-engine.layer.ts +46 -0
- package/src/serve/engine/actor-fork.service.ts +403 -0
- package/src/serve/engine/actor-holding.pure.ts +28 -0
- package/src/serve/engine/actor-host.service.ts +454 -0
- package/src/serve/engine/actor-location.service.ts +219 -0
- package/src/serve/engine/actor-residents.pure.ts +500 -0
- package/src/serve/engine/actor-shard.pure.ts +13 -0
- package/src/serve/engine/actor-state.pure.ts +45 -0
- package/src/serve/engine/actors-not-hosted.errors.ts +9 -0
- package/src/serve/engine/job-runtime.layer.ts +13 -0
- package/src/serve/environment/environment-already-exists.errors.ts +9 -0
- package/src/serve/environment/environment-in-use.errors.ts +17 -0
- package/src/serve/environment/environment-not-found.errors.ts +9 -0
- package/src/serve/environment/environment-records.sql.ts +208 -0
- package/src/serve/environment/environment-store.sql.ts +116 -0
- package/src/serve/environment/local-environment.schema.ts +79 -0
- package/src/serve/environment/local-environments.service.ts +268 -0
- package/src/serve/environment/promotion-notice.pure.ts +63 -0
- package/src/serve/environment/snapshot-operations.sql.ts +210 -0
- package/src/serve/environment/store-snapshot.sql.ts +128 -0
- package/src/serve/erasure/local-actor-erasure.service.ts +170 -0
- package/src/serve/history/actor-host-runners.service.ts +85 -0
- package/src/serve/hosted/hosted-app-build.errors.ts +11 -0
- package/src/serve/hosted/hosted-app-checks.layer.ts +74 -0
- package/src/serve/hosted/hosted-file-forward.layer.ts +63 -0
- package/src/serve/hosted/hosted-file-rpcs.layer.ts +149 -0
- package/src/serve/hosted/hosted-file-server.layer.ts +75 -0
- package/src/serve/hosted/hosted-files.layer.ts +76 -0
- package/src/serve/hosted/hosted-runtime.layer.ts +145 -0
- package/src/serve/hosted/hosted-runtime.service.ts +128 -0
- package/src/serve/hosted/hosted-secrets.layer.ts +38 -0
- package/src/serve/http/loopback-host.pure.ts +67 -0
- package/src/serve/inspect/actor-inspection.schema.ts +94 -0
- package/src/serve/inspect/actor-inspection.sql.ts +112 -0
- package/src/serve/inspect/inspect.service.ts +173 -0
- package/src/serve/inspect/inspector-page.pure.ts +159 -0
- package/src/serve/inspect/inspector-wal.pure.ts +40 -0
- package/src/serve/inspect/inspector.handlers.ts +103 -0
- package/src/serve/inspect/inspector.layer.ts +26 -0
- package/src/serve/live/live-reads.service.ts +285 -0
- package/src/serve/live/live-tables.sql.ts +148 -0
- package/src/serve/live/state-reads.pure.ts +22 -0
- package/src/serve/rpc/actor-rpc.handlers.ts +242 -0
- package/src/serve/rpc/akter-server.layer.ts +119 -0
- package/src/serve/rpc/computer/computer-copy.layer.ts +95 -0
- package/src/serve/rpc/computer/computer-rpc-access.pure.ts +75 -0
- package/src/serve/rpc/computer/computer-rpc.layer.ts +143 -0
- package/src/serve/rpc/computer/step-rpc.handlers.ts +84 -0
- package/src/serve/rpc/development-authentication.handlers.ts +28 -0
- package/src/serve/rpc/development-guard.pure.ts +39 -0
- package/src/serve/rpc/file/file-rpc-access.pure.ts +119 -0
- package/src/serve/rpc/file/file-rpc.layer.ts +209 -0
- package/src/serve/rpc/file/upload-sessions.pure.ts +363 -0
- package/src/serve/rpc/in-process-client.layer.ts +62 -0
- package/src/serve/rpc/listener-not-loopback.errors.ts +9 -0
- package/src/serve/rpc/ndjson-only.pure.ts +33 -0
- package/src/serve/rpc/served-rpc.layer.ts +34 -0
- package/src/serve/store/actor-not-migrated.errors.ts +10 -0
- package/src/serve/store/store-migrations.layer.ts +35 -0
- package/src/serve/store/store-migrations.service.ts +76 -0
- package/src/serve/store/store-unreadable.errors.ts +9 -0
- package/src/serve/verify/verify.layer.ts +77 -0
- package/src/testing/story-driver.service.ts +266 -0
- package/src/testing/story.layer.ts +99 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import "../../runtime/akter.layer.mjs";
|
|
2
|
+
import { ActorUnavailableError } from "../../contract/client/actor-unavailable.errors.mjs";
|
|
3
|
+
import { ActorErasedError } from "../../contract/actor/actor-erased.errors.mjs";
|
|
4
|
+
import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
|
|
5
|
+
import { ActorDatabase } from "../../host/actor/actor-database.service.mjs";
|
|
6
|
+
import { ActorAddress, ActorLocation } from "../engine/actor-location.service.mjs";
|
|
7
|
+
import { OpenFailure } from "../engine/actor-residents.pure.mjs";
|
|
8
|
+
import { Context, Effect, FileSystem, Path, Scope, Semaphore } from "effect";
|
|
9
|
+
interface Resident {
|
|
10
|
+
readonly forking: Semaphore.Semaphore;
|
|
11
|
+
readonly exclusive: <Value, Failure>(effect: Effect.Effect<Value, Failure>) => Effect.Effect<Value, Failure>;
|
|
12
|
+
}
|
|
13
|
+
declare const LocalActorErasure_base: Context.ServiceClass<LocalActorErasure, "@akterjs/effect/serve/erasure/local-actor-erasure.service/LocalActorErasure", {
|
|
14
|
+
check: (address: ActorAddress) => Effect.Effect<void, OpenFailure>;
|
|
15
|
+
erase: (address: ActorAddress) => Effect.Effect<void, OpenFailure>;
|
|
16
|
+
open: <Value extends Resident>(address: ActorAddress, build: (scope: Scope.Closeable) => Effect.Effect<Value, OpenFailure>) => Effect.Effect<Value, OpenFailure>;
|
|
17
|
+
}>;
|
|
18
|
+
export declare class LocalActorErasure extends LocalActorErasure_base {
|
|
19
|
+
static readonly make: Effect.Effect<{
|
|
20
|
+
check: (address: ActorAddress) => Effect.Effect<void, OpenFailure>;
|
|
21
|
+
erase: (address: ActorAddress) => Effect.Effect<void, OpenFailure>;
|
|
22
|
+
open: <Value extends Resident>(address: ActorAddress, build: (scope: Scope.Closeable) => Effect.Effect<Value, OpenFailure>) => Effect.Effect<Value, OpenFailure>;
|
|
23
|
+
}, never, ActorDatabase | ActorLocation | ActorRegistry | FileSystem.FileSystem | Path.Path | Scope.Scope>;
|
|
24
|
+
static readonly check: (address: ActorAddress) => Effect.Effect<void, ActorErasedError | ActorUnavailableError, ActorLocation | FileSystem.FileSystem>;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ActorErasedError } from "../../contract/actor/actor-erased.errors.mjs";
|
|
2
|
+
import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
|
|
3
|
+
import { ActorDatabase } from "../../host/actor/actor-database.service.mjs";
|
|
4
|
+
import { LocalComputers } from "../../host/computer/local-computers.adapter.mjs";
|
|
5
|
+
import { ActorLocation } from "../engine/actor-location.service.mjs";
|
|
6
|
+
import { fileIdentity, notServed, unavailable } from "../engine/actor-residents.pure.mjs";
|
|
7
|
+
import { Context, Effect, Exit, FileSystem, MutableHashMap, MutableHashSet, Option, Predicate, Scope, Semaphore } from "effect";
|
|
8
|
+
// src/serve/erasure/local-actor-erasure.service.ts
|
|
9
|
+
const oneErasureAtATime = 1;
|
|
10
|
+
/** The marker is also the durable cleanup intent. It survives deleting the database and reserves the erased key. */
|
|
11
|
+
const notErased = Effect.fnUntraced(function* notErased(address) {
|
|
12
|
+
const location = yield* ActorLocation;
|
|
13
|
+
const fs = yield* FileSystem.FileSystem;
|
|
14
|
+
if (yield* Effect.mapError(fs.exists(`${location.locate(address).database}.erased`), unavailable(address.actor))) return yield* ActorErasedError.make({ actor: address.actor });
|
|
15
|
+
return yield* Effect.void;
|
|
16
|
+
});
|
|
17
|
+
const marker = ({ erased, fs, location }, address) => {
|
|
18
|
+
const id = ActorLocation.named(address);
|
|
19
|
+
return Effect.mapError(fs.writeFileString(`${location.locate(address).database}.erased`, "erased\n"), unavailable(address.actor)).pipe(Effect.tap(() => Effect.sync(() => MutableHashSet.add(erased, id))));
|
|
20
|
+
};
|
|
21
|
+
const openErasable = (erasing, address, build) => Effect.gen(function* openActor() {
|
|
22
|
+
yield* erasing.registry.lookup(address.actor).pipe(Effect.mapError(() => notServed(address)));
|
|
23
|
+
yield* Effect.provide(notErased(address), erasing.services);
|
|
24
|
+
const scope = yield* Scope.fork(erasing.parent);
|
|
25
|
+
const resident = yield* Effect.onError(build(scope), () => Scope.close(scope, Exit.void));
|
|
26
|
+
const marked = resident.exclusive(marker(erasing, address));
|
|
27
|
+
MutableHashMap.set(erasing.residents, ActorLocation.named(address), {
|
|
28
|
+
close: Scope.close(scope, Exit.void),
|
|
29
|
+
mark: resident.forking.withPermits(oneErasureAtATime)(marked)
|
|
30
|
+
});
|
|
31
|
+
return resident;
|
|
32
|
+
});
|
|
33
|
+
const releaseFiles = Effect.fnUntraced(function* releaseFiles({ databases, fs, location }, address, actor) {
|
|
34
|
+
const { database } = location.locate(address);
|
|
35
|
+
if (yield* fs.exists(database)) {
|
|
36
|
+
const opened = yield* databases.open({
|
|
37
|
+
actor,
|
|
38
|
+
filename: database,
|
|
39
|
+
identity: fileIdentity(address)
|
|
40
|
+
});
|
|
41
|
+
const session = Option.fromNullishOr(opened.fileSession);
|
|
42
|
+
yield* Effect.forEach(Option.toArray(session), ({ home, owner }) => home.transfers.erase(owner));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const eraseLocal = Effect.fnUntraced(function* eraseLocal(erasing, address) {
|
|
46
|
+
const actor = yield* erasing.registry.lookup(address.actor).pipe(Effect.mapError(() => notServed(address)));
|
|
47
|
+
const { fs, location, residents, services } = erasing;
|
|
48
|
+
const files = location.locate(address);
|
|
49
|
+
const known = MutableHashMap.get(residents, ActorLocation.named(address));
|
|
50
|
+
yield* fs.makeDirectory(files.directory, { recursive: true });
|
|
51
|
+
yield* Option.match(known, {
|
|
52
|
+
onNone: () => marker(erasing, address),
|
|
53
|
+
onSome: ({ mark }) => mark
|
|
54
|
+
});
|
|
55
|
+
yield* Effect.forEach(Option.toArray(known), ({ close }) => close);
|
|
56
|
+
yield* Effect.provide(LocalComputers.remove(location.computers, address), services);
|
|
57
|
+
yield* Effect.scoped(releaseFiles(erasing, address, actor));
|
|
58
|
+
yield* Effect.forEach([
|
|
59
|
+
"",
|
|
60
|
+
"-wal",
|
|
61
|
+
"-shm"
|
|
62
|
+
], (suffix) => fs.remove(`${files.database}${suffix}`, { force: true }));
|
|
63
|
+
});
|
|
64
|
+
/** Local, in-process erasure only: no app RPC or Cloud approval boundary is added or bypassed. */
|
|
65
|
+
const localActorErasure = Effect.gen(function* localActorErasure() {
|
|
66
|
+
const store = yield* Effect.all({
|
|
67
|
+
databases: ActorDatabase,
|
|
68
|
+
fs: FileSystem.FileSystem,
|
|
69
|
+
location: ActorLocation,
|
|
70
|
+
parent: Effect.scope,
|
|
71
|
+
registry: ActorRegistry
|
|
72
|
+
});
|
|
73
|
+
const services = yield* Effect.context();
|
|
74
|
+
const residents = MutableHashMap.empty();
|
|
75
|
+
const serial = yield* Semaphore.make(oneErasureAtATime);
|
|
76
|
+
const erased = MutableHashSet.empty();
|
|
77
|
+
const erasing = {
|
|
78
|
+
...store,
|
|
79
|
+
erased,
|
|
80
|
+
residents,
|
|
81
|
+
services
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
check: (address) => Effect.suspend(() => {
|
|
85
|
+
if (MutableHashSet.has(erased, ActorLocation.named(address))) return ActorErasedError.make({ actor: address.actor });
|
|
86
|
+
return Effect.void;
|
|
87
|
+
}),
|
|
88
|
+
erase: (address) => {
|
|
89
|
+
const cleanup = eraseLocal(erasing, address).pipe(Effect.mapError((failure) => {
|
|
90
|
+
if (Predicate.isTagged(failure, "InvalidRequestError") || Predicate.isTagged(failure, "ActorErasedError")) return failure;
|
|
91
|
+
return unavailable(address.actor)(failure);
|
|
92
|
+
}), Effect.tap(() => Effect.sync(() => MutableHashMap.remove(residents, ActorLocation.named(address)))));
|
|
93
|
+
return serial.withPermits(oneErasureAtATime)(cleanup);
|
|
94
|
+
},
|
|
95
|
+
open: (address, build) => openErasable(erasing, address, build)
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
var LocalActorErasure = class extends Context.Service()("@akterjs/effect/serve/erasure/local-actor-erasure.service/LocalActorErasure") {
|
|
99
|
+
static make = localActorErasure;
|
|
100
|
+
static check = notErased;
|
|
101
|
+
};
|
|
102
|
+
export { LocalActorErasure };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { FileUsagePage } from "../../contract/file/actor-files.contract.mjs";
|
|
2
|
+
import { CommandRunner } from "../../host/command/command-runner.service.mjs";
|
|
3
|
+
import { QueryRunner } from "../../host/query/query-runner.service.mjs";
|
|
4
|
+
import { OpenedActor } from "../../host/actor/actor-database.service.mjs";
|
|
5
|
+
import { Residents } from "../engine/actor-residents.pure.mjs";
|
|
6
|
+
import { Context, Duration, Effect, Scope } from "effect";
|
|
7
|
+
interface Prunable {
|
|
8
|
+
readonly opened: OpenedActor;
|
|
9
|
+
readonly exclusive: <Value, Failure>(effect: Effect.Effect<Value, Failure>) => Effect.Effect<Value, Failure>;
|
|
10
|
+
}
|
|
11
|
+
interface Runners {
|
|
12
|
+
readonly queries: QueryRunner["Service"];
|
|
13
|
+
readonly runner: CommandRunner["Service"];
|
|
14
|
+
readonly prune: (resident: Prunable) => Effect.Effect<void>;
|
|
15
|
+
readonly keep: (residents: Residents<Prunable>) => Effect.Effect<void, never, Scope.Scope>;
|
|
16
|
+
}
|
|
17
|
+
declare const ActorHostRunners_base: Context.ServiceClass<ActorHostRunners, "@akterjs/effect/serve/history/actor-host-runners.service/ActorHostRunners", Runners>;
|
|
18
|
+
export declare class ActorHostRunners extends ActorHostRunners_base {
|
|
19
|
+
static readonly make: Effect.Effect<Runners, never, CommandRunner | QueryRunner>;
|
|
20
|
+
static readonly historyRetention: Context.Reference<Duration.Duration>;
|
|
21
|
+
static readonly queries: import("effect/Layer").Layer<QueryRunner, never, never>;
|
|
22
|
+
}
|
|
23
|
+
export type { CommandRunner, FileUsagePage as FileUsage, Runners };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { CommandRunner } from "../../host/command/command-runner.service.mjs";
|
|
2
|
+
import { QueryRunner } from "../../host/query/query-runner.service.mjs";
|
|
3
|
+
import { Clock, Context, Duration, Effect, Schedule } from "effect";
|
|
4
|
+
// src/serve/history/actor-host-runners.service.ts
|
|
5
|
+
/** Prunes on open and hourly, through the same resident serializer as commands. */
|
|
6
|
+
const actorHostRunners = Effect.gen(function* actorHostRunners() {
|
|
7
|
+
const runner = yield* CommandRunner;
|
|
8
|
+
const queries = yield* QueryRunner;
|
|
9
|
+
const retention = yield* CommandRunner.historyRetention;
|
|
10
|
+
const prune = ({ exclusive, opened }) => {
|
|
11
|
+
if (!Duration.isFinite(retention)) return Effect.void;
|
|
12
|
+
return exclusive(Effect.flatMap(Clock.currentTimeMillis, (now) => runner.prune({
|
|
13
|
+
before: now - Duration.toMillis(retention),
|
|
14
|
+
opened
|
|
15
|
+
})).pipe(Effect.catchTag("SqlError", (failure) => Effect.logWarning(`could not prune the history of ${opened.actor.name}: ${failure.message}`))));
|
|
16
|
+
};
|
|
17
|
+
const keep = ({ addresses, use }) => {
|
|
18
|
+
if (!Duration.isFinite(retention)) return Effect.void;
|
|
19
|
+
const pass = Effect.flatMap(addresses, (current) => Effect.forEach(current, (address) => use(address, prune).pipe(Effect.catchTag("ActorErasedError", () => Effect.void), Effect.orDie), { discard: true }));
|
|
20
|
+
const repeated = Effect.repeat(pass, Schedule.spaced("1 hour"));
|
|
21
|
+
return Effect.asVoid(Effect.forkScoped(repeated));
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
keep,
|
|
25
|
+
prune,
|
|
26
|
+
queries,
|
|
27
|
+
runner
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
var ActorHostRunners = class extends Context.Service()("@akterjs/effect/serve/history/actor-host-runners.service/ActorHostRunners") {
|
|
31
|
+
static make = actorHostRunners;
|
|
32
|
+
static historyRetention = CommandRunner.historyRetention;
|
|
33
|
+
static queries = QueryRunner.layer;
|
|
34
|
+
};
|
|
35
|
+
export { ActorHostRunners };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const HostedAppBuildError_base: Schema.Class<HostedAppBuildError, Schema.TaggedStruct<"HostedAppBuildError", {
|
|
3
|
+
readonly reason: Schema.String;
|
|
4
|
+
}>, import("effect/Cause").YieldableError & {
|
|
5
|
+
readonly brand: unique symbol;
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* A host refuses to load an app's bundle because the akter it was built with is one the host doesn't serve: a job
|
|
9
|
+
* from before jobs carried their codecs, or an actor whose host interface version is outside the host's window. The
|
|
10
|
+
* reason names what to do, which is always to deploy the app again with a current akter.
|
|
11
|
+
*/
|
|
12
|
+
export declare class HostedAppBuildError extends HostedAppBuildError_base {}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
// src/serve/hosted/hosted-app-build.errors.ts
|
|
3
|
+
/**
|
|
4
|
+
* A host refuses to load an app's bundle because the akter it was built with is one the host doesn't serve: a job
|
|
5
|
+
* from before jobs carried their codecs, or an actor whose host interface version is outside the host's window. The
|
|
6
|
+
* reason names what to do, which is always to deploy the app again with a current akter.
|
|
7
|
+
*/
|
|
8
|
+
var HostedAppBuildError = class extends Schema.TaggedError()("HostedAppBuildError", { reason: Schema.String }) {};
|
|
9
|
+
export { HostedAppBuildError };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
|
|
2
|
+
import { HostedAppBuildError } from "./hosted-app-build.errors.mjs";
|
|
3
|
+
import { Layer } from "effect";
|
|
4
|
+
import { WorkflowEngine } from "effect/workflow";
|
|
5
|
+
/** Why a host refuses to load an app's bundle: it was built with an akter this host doesn't serve. */
|
|
6
|
+
type RefusedBuild = HostedAppBuildError;
|
|
7
|
+
/** The workflow engine a bundle registers its jobs with. It refuses a job built before jobs carried their codecs. */
|
|
8
|
+
declare const bundleWorkflows: Layer.Layer<WorkflowEngine.WorkflowEngine, never, WorkflowEngine.WorkflowEngine>;
|
|
9
|
+
/**
|
|
10
|
+
* The registry a bundle registers its actors in. It refuses an actor built with a host interface version outside the
|
|
11
|
+
* window this host reads, so a build it can't serve fails to load, typed, instead of failing each call.
|
|
12
|
+
*/
|
|
13
|
+
declare const servedRegistry: Layer.Layer<ActorRegistry, never, ActorRegistry>;
|
|
14
|
+
declare const isRefusedBuild: <I>(input: I) => input is I & HostedAppBuildError;
|
|
15
|
+
export { type RefusedBuild, bundleWorkflows, isRefusedBuild, servedRegistry };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
|
|
2
|
+
import { hostInterfaceOf, servesHostInterface } from "../../contract/actor/host-interface.pure.mjs";
|
|
3
|
+
import { JobCodecsOf } from "../../contract/command/command.contract.mjs";
|
|
4
|
+
import { HostedAppBuildError } from "./hosted-app-build.errors.mjs";
|
|
5
|
+
import { Context, Effect, Layer, Option, Schema } from "effect";
|
|
6
|
+
import { WorkflowEngine } from "effect/workflow";
|
|
7
|
+
// src/serve/hosted/hosted-app-checks.layer.ts
|
|
8
|
+
/** The refusal of an actor built with a host interface version outside this host's window. */
|
|
9
|
+
const outsideWindow = (actor, built) => HostedAppBuildError.make({ reason: `${actor} was built with akter host interface ${String(built)}, and this host serves ${String(0)} to ${String(1)}: deploy the app again with a current akter` });
|
|
10
|
+
/** The workflow engine a bundle registers its jobs with. It refuses a job built before jobs carried their codecs. */
|
|
11
|
+
const bundleWorkflows = Layer.effect(WorkflowEngine.WorkflowEngine, WorkflowEngine.WorkflowEngine.use((engine) => Effect.succeed(WorkflowEngine.WorkflowEngine.of({
|
|
12
|
+
...engine,
|
|
13
|
+
register: (workflow, execute) => {
|
|
14
|
+
const codecs = Context.get(workflow.annotations, JobCodecsOf);
|
|
15
|
+
if (Option.isNone(codecs)) return Effect.die(HostedAppBuildError.make({ reason: "the app was built with an older SDK; rebuild the app" }));
|
|
16
|
+
return engine.register(workflow, execute);
|
|
17
|
+
}
|
|
18
|
+
}))));
|
|
19
|
+
/**
|
|
20
|
+
* The registry a bundle registers its actors in. It refuses an actor built with a host interface version outside the
|
|
21
|
+
* window this host reads, so a build it can't serve fails to load, typed, instead of failing each call.
|
|
22
|
+
*/
|
|
23
|
+
const servedRegistry = Layer.effect(ActorRegistry, ActorRegistry.use((registry) => Effect.succeed(ActorRegistry.of({
|
|
24
|
+
...registry,
|
|
25
|
+
register: (actor) => {
|
|
26
|
+
const built = hostInterfaceOf(actor);
|
|
27
|
+
if (!servesHostInterface(built)) return Effect.die(outsideWindow(actor.name, built));
|
|
28
|
+
return registry.register(actor);
|
|
29
|
+
}
|
|
30
|
+
}))));
|
|
31
|
+
const isRefusedBuild = Schema.is(HostedAppBuildError);
|
|
32
|
+
export { bundleWorkflows, isRefusedBuild, servedRegistry };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Authentication } from "../../contract/caller/authentication.api.mjs";
|
|
2
|
+
import { Caller } from "../../contract/caller/caller.schema.mjs";
|
|
3
|
+
import { Effect, Layer } from "effect";
|
|
4
|
+
import { HttpServerRequest } from "effect/http";
|
|
5
|
+
/**
|
|
6
|
+
* One file RPC a gateway forwarded: the verified caller and the client's RPC request, unchanged. Its `id` is the
|
|
7
|
+
* client's own, a number or a string, and every frame of the answer carries it back as given, because the client
|
|
8
|
+
* matches frames to its request by that exact value.
|
|
9
|
+
*/
|
|
10
|
+
interface FileForward {
|
|
11
|
+
readonly caller: Caller;
|
|
12
|
+
readonly request: {
|
|
13
|
+
readonly id: number | string;
|
|
14
|
+
readonly payload: unknown;
|
|
15
|
+
readonly tag: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** The caller the host verified, which `forwardedRequest` puts in a header only the in-memory file server reads. */
|
|
19
|
+
declare const ForwardedAuthentication: Layer.Layer<Authentication, never, never>;
|
|
20
|
+
/** The forward as the one-request NDJSON body an Effect RPC HTTP server reads, carrying the verified caller. */
|
|
21
|
+
declare const forwardedRequest: (forward: FileForward) => Effect.Effect<HttpServerRequest.HttpServerRequest>;
|
|
22
|
+
export { type FileForward, ForwardedAuthentication, forwardedRequest };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Authentication } from "../../contract/caller/authentication.api.mjs";
|
|
2
|
+
import { Caller } from "../../contract/caller/caller.schema.mjs";
|
|
3
|
+
import { CurrentCaller } from "../../contract/caller/current-caller.service.mjs";
|
|
4
|
+
import { UnauthenticatedError } from "../../contract/caller/unauthenticated.errors.mjs";
|
|
5
|
+
import { Effect, Layer, Schema } from "effect";
|
|
6
|
+
import { Headers, HttpServerRequest } from "effect/http";
|
|
7
|
+
// src/serve/hosted/hosted-file-forward.layer.ts
|
|
8
|
+
const callerHeader = "akter-forwarded-caller";
|
|
9
|
+
const CallerJson = Schema.fromJsonString(Schema.toCodecJson(Caller));
|
|
10
|
+
const RequestMessage = Schema.TaggedStruct("Request", {
|
|
11
|
+
headers: Schema.Array(Schema.Tuple([Schema.String, Schema.String])),
|
|
12
|
+
id: Schema.Union([Schema.String, Schema.Finite]),
|
|
13
|
+
payload: Schema.Unknown,
|
|
14
|
+
tag: Schema.String
|
|
15
|
+
});
|
|
16
|
+
const RequestLine = Schema.fromJsonString(RequestMessage);
|
|
17
|
+
const unverified = UnauthenticatedError.make({ message: "the forwarded file request carried no verified caller" });
|
|
18
|
+
const callerOf = (headers) => {
|
|
19
|
+
const header = Effect.fromOption(Headers.get(headers, callerHeader));
|
|
20
|
+
return Effect.mapError(Effect.flatMap(header, Schema.decodeEffect(CallerJson)), () => unverified);
|
|
21
|
+
};
|
|
22
|
+
/** The caller the host verified, which `forwardedRequest` puts in a header only the in-memory file server reads. */
|
|
23
|
+
const ForwardedAuthentication = Layer.succeed(Authentication)((effect, { headers }) => Effect.flatMap(callerOf(headers), (caller) => Effect.provideService(effect, CurrentCaller, caller)));
|
|
24
|
+
/** The forward as the one-request NDJSON body an Effect RPC HTTP server reads, carrying the verified caller. */
|
|
25
|
+
const forwardedRequest = (forward) => Effect.gen(function* encodeForward() {
|
|
26
|
+
const message = RequestMessage.make({
|
|
27
|
+
...forward.request,
|
|
28
|
+
headers: []
|
|
29
|
+
});
|
|
30
|
+
const line = yield* Schema.encodeEffect(RequestLine)(message);
|
|
31
|
+
const caller = yield* Schema.encodeEffect(CallerJson)(forward.caller);
|
|
32
|
+
const request = new globalThis.Request("http://akter.internal/rpc", {
|
|
33
|
+
body: `${line}\n`,
|
|
34
|
+
headers: {
|
|
35
|
+
[callerHeader]: caller,
|
|
36
|
+
"content-type": "application/ndjson"
|
|
37
|
+
},
|
|
38
|
+
method: "POST"
|
|
39
|
+
});
|
|
40
|
+
return HttpServerRequest.fromWeb(request);
|
|
41
|
+
}).pipe(Effect.orDie);
|
|
42
|
+
export { ForwardedAuthentication, forwardedRequest };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { InvalidRequestError } from "../../contract/client/invalid-request.errors.mjs";
|
|
2
|
+
import { ActorHost } from "../engine/actor-host.service.mjs";
|
|
3
|
+
import { UploadLimits } from "../rpc/file/upload-sessions.pure.mjs";
|
|
4
|
+
import { FileForward } from "./hosted-file-forward.layer.mjs";
|
|
5
|
+
import { HostedRuntime } from "./hosted-runtime.service.mjs";
|
|
6
|
+
import { Context, Effect, Scope } from "effect";
|
|
7
|
+
import { HttpServerResponse } from "effect/http";
|
|
8
|
+
type Answer = (forward: FileForward) => Effect.Effect<HttpServerResponse.HttpServerResponse, InvalidRequestError, Scope.Scope>;
|
|
9
|
+
/**
|
|
10
|
+
* Whether forwarded `<Actor>/computer/steps` and `step` read the actor's durable steps. Off by default, so a host
|
|
11
|
+
* answers them `ComputersUnavailableError` until the engine hosting it turns them on.
|
|
12
|
+
*/
|
|
13
|
+
declare const ServeDurableSteps: Context.Reference<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Serves forwarded `<Actor>/files/<operation>` and `<Actor>/computer/<operation>` RPCs: one in-memory Effect RPC
|
|
16
|
+
* server per actor, started on first use, answering each request with the NDJSON frames a gateway relays to the client
|
|
17
|
+
* unchanged (chunks as they are produced, then one `Exit`). Upload sessions are shared by every actor the host serves,
|
|
18
|
+
* so build this once per host. Computers are reached through the `ActorComputerClients` in context when it is built;
|
|
19
|
+
* without one they answer `ComputersUnavailableError`. The forward's caller must already be verified by the host.
|
|
20
|
+
* Uploads are held to `limits` over `defaultUploadLimits`, so a host sets its own largest file and session caps.
|
|
21
|
+
*/
|
|
22
|
+
declare const hostedFileRpcsWith: (limits?: Partial<UploadLimits>) => Effect.Effect<Answer, never, ActorHost | HostedRuntime | Scope.Scope>;
|
|
23
|
+
/** `hostedFileRpcsWith` at `defaultUploadLimits`. */
|
|
24
|
+
declare const hostedFileRpcs: Effect.Effect<Answer, never, ActorHost | HostedRuntime | Scope.Scope>;
|
|
25
|
+
export { type FileForward, ServeDurableSteps, hostedFileRpcs, hostedFileRpcsWith };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Principal } from "../../contract/caller/principal.schema.mjs";
|
|
2
|
+
import { InvalidRequestError } from "../../contract/client/invalid-request.errors.mjs";
|
|
3
|
+
import { ActorComputerClients } from "../../contract/computer/computer-client.adapter.mjs";
|
|
4
|
+
import { ActorHost } from "../engine/actor-host.service.mjs";
|
|
5
|
+
import { uploadSessionsWith } from "../rpc/file/upload-sessions.pure.mjs";
|
|
6
|
+
import { forwardedRequest } from "./hosted-file-forward.layer.mjs";
|
|
7
|
+
import { fileServerOf } from "./hosted-file-server.layer.mjs";
|
|
8
|
+
import { HostedRuntime } from "./hosted-runtime.service.mjs";
|
|
9
|
+
import { Array, Context, Effect, Option, Record, Schema, Scope, String, SynchronizedRef } from "effect";
|
|
10
|
+
import { HttpServerRequest } from "effect/http";
|
|
11
|
+
// src/serve/hosted/hosted-file-rpcs.layer.ts
|
|
12
|
+
/**
|
|
13
|
+
* Whether forwarded `<Actor>/computer/steps` and `step` read the actor's durable steps. Off by default, so a host
|
|
14
|
+
* answers them `ComputersUnavailableError` until the engine hosting it turns them on.
|
|
15
|
+
*/
|
|
16
|
+
const ServeDurableSteps = Context.Reference("@akterjs/effect/serve/hosted/hosted-file-rpcs.layer/ServeDurableSteps", { defaultValue: () => false });
|
|
17
|
+
/** The groups this server answers: `<Actor>/files/<operation>` and `<Actor>/computer/<operation>`. */
|
|
18
|
+
const groupSegments = ["/files/", "/computer/"];
|
|
19
|
+
const noActor = 0;
|
|
20
|
+
const notForwarded = (tag) => InvalidRequestError.make({
|
|
21
|
+
actor: tag,
|
|
22
|
+
message: `${tag} isn't a file or computer request`
|
|
23
|
+
});
|
|
24
|
+
const actorOfTag = (tag) => {
|
|
25
|
+
const found = Array.findFirst(groupSegments, (segment) => Option.isSome(String.indexOf(segment)(tag)));
|
|
26
|
+
const at = Option.flatMap(found, (segment) => String.indexOf(segment)(tag));
|
|
27
|
+
const named = Option.filter(at, (index) => index !== noActor);
|
|
28
|
+
return Effect.mapBoth(Effect.fromOption(named), {
|
|
29
|
+
onFailure: () => notForwarded(tag),
|
|
30
|
+
onSuccess: (index) => String.slice(noActor, index)(tag)
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
const startServer = ({ computers, host, runtime, scope, steps, uploads }, actor) => Effect.gen(function* declaredServer() {
|
|
34
|
+
const { callers, fileAccess = Option.none(), key } = (yield* Effect.mapError(runtime.declare(actor), () => InvalidRequestError.make({
|
|
35
|
+
actor,
|
|
36
|
+
message: `${actor} isn't an actor of this app`
|
|
37
|
+
}))).actor;
|
|
38
|
+
const fileActor = {
|
|
39
|
+
callers: Record.map(callers, () => Principal),
|
|
40
|
+
fileAccess,
|
|
41
|
+
key: Schema.toEncoded(key),
|
|
42
|
+
name: actor
|
|
43
|
+
};
|
|
44
|
+
return yield* Effect.provideService(fileServerOf({
|
|
45
|
+
actor: fileActor,
|
|
46
|
+
computers,
|
|
47
|
+
host,
|
|
48
|
+
steps: Option.liftPredicate(host, () => steps),
|
|
49
|
+
uploads
|
|
50
|
+
}), Scope.Scope, scope);
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Serves forwarded `<Actor>/files/<operation>` and `<Actor>/computer/<operation>` RPCs: one in-memory Effect RPC
|
|
54
|
+
* server per actor, started on first use, answering each request with the NDJSON frames a gateway relays to the client
|
|
55
|
+
* unchanged (chunks as they are produced, then one `Exit`). Upload sessions are shared by every actor the host serves,
|
|
56
|
+
* so build this once per host. Computers are reached through the `ActorComputerClients` in context when it is built;
|
|
57
|
+
* without one they answer `ComputersUnavailableError`. The forward's caller must already be verified by the host.
|
|
58
|
+
* Uploads are held to `limits` over `defaultUploadLimits`, so a host sets its own largest file and session caps.
|
|
59
|
+
*/
|
|
60
|
+
const hostedFileRpcsWith = (limits = {}) => Effect.gen(function* makeHostedFileRpcs() {
|
|
61
|
+
const started = {
|
|
62
|
+
computers: yield* Effect.serviceOption(ActorComputerClients),
|
|
63
|
+
host: yield* ActorHost,
|
|
64
|
+
runtime: yield* HostedRuntime,
|
|
65
|
+
scope: yield* Effect.scope,
|
|
66
|
+
steps: yield* ServeDurableSteps,
|
|
67
|
+
uploads: yield* uploadSessionsWith(limits)
|
|
68
|
+
};
|
|
69
|
+
const servers = yield* SynchronizedRef.make(/* @__PURE__ */ new Map());
|
|
70
|
+
const serverFor = (actor) => SynchronizedRef.modifyEffect(servers, (known) => Option.match(Option.fromNullishOr(known.get(actor)), {
|
|
71
|
+
onNone: () => Effect.map(startServer(started, actor), (server) => [server, new Map([...known, [actor, server]])]),
|
|
72
|
+
onSome: (server) => Effect.succeed([server, known])
|
|
73
|
+
}));
|
|
74
|
+
return (forward) => Effect.gen(function* answer() {
|
|
75
|
+
const server = yield* Effect.flatMap(actorOfTag(forward.request.tag), serverFor);
|
|
76
|
+
const request = yield* forwardedRequest(forward);
|
|
77
|
+
return yield* Effect.provideService(server, HttpServerRequest.HttpServerRequest, request);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
/** `hostedFileRpcsWith` at `defaultUploadLimits`. */
|
|
81
|
+
const hostedFileRpcs = hostedFileRpcsWith();
|
|
82
|
+
export { ServeDurableSteps, hostedFileRpcs, hostedFileRpcsWith };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { computerHandlersFor } from "../rpc/computer/computer-rpc.layer.mjs";
|
|
2
|
+
import { FileServing as Serving } from "../rpc/file/file-rpc.layer.mjs";
|
|
3
|
+
import { Effect, Scope } from "effect";
|
|
4
|
+
import { HttpServerRequest, HttpServerResponse } from "effect/http";
|
|
5
|
+
/** One actor's file RPC server: answers the request in context with its NDJSON frames. */
|
|
6
|
+
type FileServer = Effect.Effect<HttpServerResponse.HttpServerResponse, never, HttpServerRequest.HttpServerRequest | Scope.Scope>;
|
|
7
|
+
/**
|
|
8
|
+
* Serves one actor's `<Actor>/files/<operation>` and `<Actor>/computer/<operation>` RPCs with the same Effect RPC
|
|
9
|
+
* server and NDJSON framing `akter dev` serves them with, behind the forwarded caller. The server lives as long as
|
|
10
|
+
* `Scope`.
|
|
11
|
+
*/
|
|
12
|
+
type ComputerServing = Parameters<typeof computerHandlersFor>[number];
|
|
13
|
+
declare const fileServerOf: (serving: Serving & {
|
|
14
|
+
readonly actor: ComputerServing["actor"];
|
|
15
|
+
readonly computers: ComputerServing["clients"];
|
|
16
|
+
readonly steps: ComputerServing["steps"];
|
|
17
|
+
}) => Effect.Effect<FileServer, never, Scope.Scope>;
|
|
18
|
+
export { type FileServer, fileServerOf };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Authentication } from "../../contract/caller/authentication.api.mjs";
|
|
2
|
+
import { computerRpcsOf } from "../../contract/computer/rpc/computer-rpc.contract.mjs";
|
|
3
|
+
import { fileRpcsOf } from "../../contract/file/rpc/file-rpc.contract.mjs";
|
|
4
|
+
import { computerHandlersFor } from "../rpc/computer/computer-rpc.layer.mjs";
|
|
5
|
+
import { fileHandlersFor } from "../rpc/file/file-rpc.layer.mjs";
|
|
6
|
+
import { ForwardedAuthentication } from "./hosted-file-forward.layer.mjs";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
import { RpcGroup, RpcSerialization, RpcServer } from "effect/rpc";
|
|
9
|
+
// src/serve/hosted/hosted-file-server.layer.ts
|
|
10
|
+
const groupOf = (actor) => RpcGroup.make(...fileRpcsOf(actor), ...computerRpcsOf(actor)).middleware(Authentication);
|
|
11
|
+
function asGroupHandlers(handlers) {
|
|
12
|
+
return handlers;
|
|
13
|
+
}
|
|
14
|
+
const fileServerOf = (serving) => {
|
|
15
|
+
const group = groupOf(serving.actor.name);
|
|
16
|
+
const computers = computerHandlersFor({
|
|
17
|
+
actor: serving.actor,
|
|
18
|
+
clients: serving.computers,
|
|
19
|
+
host: serving.host,
|
|
20
|
+
steps: serving.steps
|
|
21
|
+
});
|
|
22
|
+
const served = asGroupHandlers({
|
|
23
|
+
...fileHandlersFor(serving),
|
|
24
|
+
...computers
|
|
25
|
+
});
|
|
26
|
+
const handlers = group.toLayer(Effect.succeed(served));
|
|
27
|
+
return RpcServer.toHttpEffect(group).pipe(Effect.provide([
|
|
28
|
+
handlers,
|
|
29
|
+
ForwardedAuthentication,
|
|
30
|
+
RpcSerialization.layerNdjson
|
|
31
|
+
]));
|
|
32
|
+
};
|
|
33
|
+
export { fileServerOf };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { OpenedActor } from "../../host/actor/actor-database.service.mjs";
|
|
2
|
+
import { BlobSealing } from "../../host/blob/blob-sealing.service.mjs";
|
|
3
|
+
import { BlobOwner, TransferEffect } from "../../host/blob/reference/blob-transfer.pure.mjs";
|
|
4
|
+
import { LocalBlobHome, blobHomeOn } from "../../host/file/blob-home.sql.mjs";
|
|
5
|
+
import { Effect, FileSystem, Path, Scope } from "effect";
|
|
6
|
+
import { SqlClient } from "effect/sql";
|
|
7
|
+
interface HostedFileHomeOpening {
|
|
8
|
+
readonly catalog: SqlClient.SqlClient;
|
|
9
|
+
readonly root: string;
|
|
10
|
+
}
|
|
11
|
+
interface HostedActorFilesOpening {
|
|
12
|
+
readonly exclusive: BlobOwner["exclusive"];
|
|
13
|
+
readonly home: LocalBlobHome;
|
|
14
|
+
readonly identity: string;
|
|
15
|
+
readonly opened: OpenedActor;
|
|
16
|
+
readonly snapshot: BlobOwner["snapshot"];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A file home for a host that keeps its own SQLite connections, such as one per Cloud shard: blobs are written under
|
|
20
|
+
* `root` (created if missing), sealed by the provided `BlobSealing`, and their catalog (claims and reference counts) lives on `catalog`,
|
|
21
|
+
* which only this home writes. Blobs adopted from another home are checked with akter's own SHA-256, so the host
|
|
22
|
+
* provides no hashing. Its transfers close with the scope.
|
|
23
|
+
*/
|
|
24
|
+
declare const hostedFileHome: ({ catalog, root }: HostedFileHomeOpening) => TransferEffect<LocalBlobHome, BlobSealing | FileSystem.FileSystem | Path.Path | Effect.Services<ReturnType<typeof blobHomeOn>>>;
|
|
25
|
+
/**
|
|
26
|
+
* Gives an opened actor its files on `home`. `identity` names the actor to the sealing keyring and the catalog, and
|
|
27
|
+
* every read and write of the actor's own file tables goes through `exclusive`, the host's serializer for the actor's
|
|
28
|
+
* connection, so it never interleaves with a command batch. It recovers unfinished transfers, settles references and
|
|
29
|
+
* keeps them settled until the scope closes. Commands of the returned actor reach the files through `Akter.files`.
|
|
30
|
+
*/
|
|
31
|
+
declare const hostedActorFiles: ({ exclusive, home, identity, opened, snapshot }: HostedActorFilesOpening) => TransferEffect<OpenedActor, Scope.Scope>;
|
|
32
|
+
export { type HostedActorFilesOpening, type HostedFileHomeOpening, hostedActorFiles, hostedFileHome };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BlobSealing } from "../../host/blob/blob-sealing.service.mjs";
|
|
2
|
+
import { actorFileStorage } from "../../host/file/actor-file-storage.sql.mjs";
|
|
3
|
+
import { blobHomeOn, canonicalHome } from "../../host/file/blob-home.sql.mjs";
|
|
4
|
+
import { actorFilesOn, blobOwnerOn } from "../../host/file/local-blob-owner.sql.mjs";
|
|
5
|
+
import { BlobHashing } from "../../host/hash/blob-hashing.service.mjs";
|
|
6
|
+
import { blobHashing } from "../../runtime/blob-hashing.layer.mjs";
|
|
7
|
+
import { Context, Effect, Layer } from "effect";
|
|
8
|
+
// src/serve/hosted/hosted-files.layer.ts
|
|
9
|
+
/**
|
|
10
|
+
* A file home for a host that keeps its own SQLite connections, such as one per Cloud shard: blobs are written under
|
|
11
|
+
* `root` (created if missing), sealed by the provided `BlobSealing`, and their catalog (claims and reference counts) lives on `catalog`,
|
|
12
|
+
* which only this home writes. Blobs adopted from another home are checked with akter's own SHA-256, so the host
|
|
13
|
+
* provides no hashing. Its transfers close with the scope.
|
|
14
|
+
*/
|
|
15
|
+
const hostedFileHome = ({ catalog, root }) => Effect.gen(function* openHostedFileHome() {
|
|
16
|
+
const sealing = yield* BlobSealing;
|
|
17
|
+
const hashed = yield* Layer.build(blobHashing);
|
|
18
|
+
const hashing = Context.get(hashed, BlobHashing);
|
|
19
|
+
const canonical = yield* canonicalHome(root);
|
|
20
|
+
return yield* blobHomeOn({
|
|
21
|
+
catalog,
|
|
22
|
+
hashing,
|
|
23
|
+
root: canonical,
|
|
24
|
+
sealing
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Gives an opened actor its files on `home`. `identity` names the actor to the sealing keyring and the catalog, and
|
|
29
|
+
* every read and write of the actor's own file tables goes through `exclusive`, the host's serializer for the actor's
|
|
30
|
+
* connection, so it never interleaves with a command batch. It recovers unfinished transfers, settles references and
|
|
31
|
+
* keeps them settled until the scope closes. Commands of the returned actor reach the files through `Akter.files`.
|
|
32
|
+
*/
|
|
33
|
+
const hostedActorFiles = ({ exclusive, home, identity, opened, snapshot }) => Effect.gen(function* openHostedActorFiles() {
|
|
34
|
+
const owner = yield* blobOwnerOn({
|
|
35
|
+
actor: identity,
|
|
36
|
+
exclusive,
|
|
37
|
+
snapshot,
|
|
38
|
+
sql: opened.sql
|
|
39
|
+
});
|
|
40
|
+
const fileSession = yield* actorFilesOn({
|
|
41
|
+
home,
|
|
42
|
+
owner,
|
|
43
|
+
sql: opened.sql
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
...opened,
|
|
47
|
+
fileSession,
|
|
48
|
+
files: (sql) => actorFileStorage({
|
|
49
|
+
actor: identity,
|
|
50
|
+
open: home.transfers.open,
|
|
51
|
+
sql
|
|
52
|
+
})
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
export { hostedActorFiles, hostedFileHome };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ActorRegistry } from "../../contract/actor/actor-registry.service.mjs";
|
|
2
|
+
import { DeclaredActor, HostedKept, HostedOpening, HostedRuntime, HostedUpkeep } from "./hosted-runtime.service.mjs";
|
|
3
|
+
import { RefusedBuild } from "./hosted-app-checks.layer.mjs";
|
|
4
|
+
import { ActorSecrets, SecretRequest } from "../../contract/secret/actor-secrets.adapter.mjs";
|
|
5
|
+
import { ExecutionAuthority, ExecutionGuard } from "../../host/upkeep/execution-authority.pure.mjs";
|
|
6
|
+
import { engineOwnedRefusal } from "../../contract/hosted/handler-failure.pure.mjs";
|
|
7
|
+
import { HandlerSql, QueryReadOnly, engineOwned } from "../../host/query/query-policy.pure.mjs";
|
|
8
|
+
import { CommandBatch, CommandBatchScope as Batch, commandBatch, dropCommand, keepCommand } from "../../host/command/batch/command-batch.sql.mjs";
|
|
9
|
+
import { ActorConnectionOpener, ActorConnections, ActorDatabaseTarget, SqliteHandle, SqliteRow, SqliteStatement, SqliteValue } from "../../host/sqlite/actor-connections.pure.mjs";
|
|
10
|
+
import { HostedAppBuildError } from "./hosted-app-build.errors.mjs";
|
|
11
|
+
import { bundleHostInterface, hostInterface, hostInterfaceLine, hostInterfaceOf, oldestHostInterface, servesHostInterface } from "../../contract/actor/host-interface.pure.mjs";
|
|
12
|
+
import { JobComputers } from "../../host/computer/job-computers.service.mjs";
|
|
13
|
+
import { LocalBlobHome } from "../../host/file/blob-home.sql.mjs";
|
|
14
|
+
import { HostedActorFilesOpening, HostedFileHomeOpening, hostedActorFiles, hostedFileHome } from "./hosted-files.layer.mjs";
|
|
15
|
+
import { ServeDurableSteps, hostedFileRpcs, hostedFileRpcsWith } from "./hosted-file-rpcs.layer.mjs";
|
|
16
|
+
import { UploadLimits, defaultUploadLimits } from "../rpc/file/upload-sessions.pure.mjs";
|
|
17
|
+
import "../../host/file/local-blob-home.service.mjs";
|
|
18
|
+
import { JobStore } from "../../host/job/job-runs.pure.mjs";
|
|
19
|
+
import { LocalActorFiles } from "../../host/file/local-blob-owner.sql.mjs";
|
|
20
|
+
import { ExportHold, ExportedFile, HeldBlob, HeldLookup, HeldPage, heldExportFile, heldExportFiles, holdExportFiles } from "../../host/blob/export/blob-export-holds.sql.mjs";
|
|
21
|
+
import { ArchivedActors } from "../archive/archived-actors.layer.mjs";
|
|
22
|
+
import { ArchivedStore } from "../archive/archived-store.layer.mjs";
|
|
23
|
+
import { BlobKeyring } from "../../host/blob/blob-keyring.service.mjs";
|
|
24
|
+
import { BlobSealing } from "../../host/blob/blob-sealing.service.mjs";
|
|
25
|
+
import { BlobTransferError } from "../../contract/file/blob-transfer.errors.mjs";
|
|
26
|
+
import { blobHashing } from "../../runtime/blob-hashing.layer.mjs";
|
|
27
|
+
import { BlobHashing } from "../../host/hash/blob-hashing.service.mjs";
|
|
28
|
+
import { CommittedCommand, HostFailure, LiveActor } from "../live/live-reads.service.mjs";
|
|
29
|
+
import { LiveUpdate } from "../../contract/client/actor-rpc.contract.mjs";
|
|
30
|
+
import { QueryRequest } from "../../host/query/query-runner.service.mjs";
|
|
31
|
+
import { OpenedActor } from "../../host/actor/actor-database.service.mjs";
|
|
32
|
+
import { CommandRequest, CreationRequest } from "../../host/command/command-runner.service.mjs";
|
|
33
|
+
import { JournalWindow } from "../../contract/history/actor-journal.service.mjs";
|
|
34
|
+
import { FileForward } from "./hosted-file-forward.layer.mjs";
|
|
35
|
+
import "../../host/job/job-engine.adapter.mjs";
|
|
36
|
+
import { Delivery, DeliveryBatch } from "../../host/outbox/outbox-runner.service.mjs";
|
|
37
|
+
import { JobAddress } from "../../contract/job/job-id.pure.mjs";
|
|
38
|
+
import { Layer } from "effect";
|
|
39
|
+
import { WorkflowEngine } from "effect/workflow";
|
|
40
|
+
declare const hostedRuntime: Layer.Layer<HostedRuntime | WorkflowEngine.WorkflowEngine>;
|
|
41
|
+
declare const hostedApp: <Output, Failure>(app: Layer.Layer<Output, Failure, ActorRegistry | WorkflowEngine.WorkflowEngine>) => Layer.Layer<HostedRuntime | WorkflowEngine.WorkflowEngine, Failure | RefusedBuild>;
|
|
42
|
+
export { type ActorConnectionOpener, ActorConnections, type ActorDatabaseTarget, ActorSecrets, ArchivedActors, ArchivedStore, BlobHashing, BlobKeyring, BlobSealing, BlobTransferError, CommandBatch, type Batch as CommandBatchScope, type CommandRequest, type CommittedCommand, type CreationRequest, type DeclaredActor, type Delivery, type DeliveryBatch, ExecutionAuthority, type ExecutionGuard, type ExportHold, type ExportedFile, type FileForward, HandlerSql, type HeldBlob, type HeldLookup, type HeldPage, type HostFailure, type HostedActorFilesOpening, HostedAppBuildError, type LocalBlobHome as HostedFileHome, type HostedFileHomeOpening, type LocalActorFiles as HostedFileSession, type HostedKept, type HostedOpening, HostedRuntime, type HostedUpkeep, type JobAddress, JobComputers, type JobStore, type JournalWindow, type LiveActor, type LiveUpdate, type OpenedActor, QueryReadOnly, type QueryRequest, type SecretRequest, ServeDurableSteps, type SqliteHandle, type SqliteRow, type SqliteStatement, type SqliteValue, type UploadLimits, blobHashing, bundleHostInterface, commandBatch, defaultUploadLimits, dropCommand, engineOwned, engineOwnedRefusal, heldExportFile, heldExportFiles, holdExportFiles, hostInterface, hostInterfaceLine, hostInterfaceOf, hostedActorFiles, hostedApp, hostedFileHome, hostedFileRpcs, hostedFileRpcsWith, hostedRuntime, keepCommand, oldestHostInterface, servesHostInterface };
|