@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.
- 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,201 @@
|
|
|
1
|
+
import { ActorUnavailableError } from "../../contract/client/actor-unavailable.errors.mjs";
|
|
2
|
+
import { ActorErasedError } from "../../contract/actor/actor-erased.errors.mjs";
|
|
3
|
+
import { InvalidRequestError } from "../../contract/client/invalid-request.errors.mjs";
|
|
4
|
+
import { FilesUnavailableError } from "../../contract/file/files-unavailable.errors.mjs";
|
|
5
|
+
import { addressHolding } from "./actor-holding.pure.mjs";
|
|
6
|
+
import { Array, Deferred, Effect, Exit, Fiber, HashMap, MutableHashMap, Option, Schema, Scope, Semaphore, Stream, SynchronizedRef } from "effect";
|
|
7
|
+
// src/serve/engine/actor-residents.pure.ts
|
|
8
|
+
const blankVersion = 0;
|
|
9
|
+
const bufferedInitial = 1;
|
|
10
|
+
const onePermit = 1;
|
|
11
|
+
const queryOnly = "PRAGMA query_only = ON";
|
|
12
|
+
const fingerprint = "SELECT total_changes() AS changes, (SELECT schema_version FROM pragma_schema_version) AS tables, (SELECT user_version FROM pragma_user_version) AS stamp";
|
|
13
|
+
const unavailable = (actor) => (failure) => ActorUnavailableError.make({
|
|
14
|
+
actor,
|
|
15
|
+
message: failure.message
|
|
16
|
+
});
|
|
17
|
+
const unavailableUnlessErased = (actor) => (failure) => {
|
|
18
|
+
if (Schema.is(ActorErasedError)(failure)) return failure;
|
|
19
|
+
return unavailable(actor)(failure);
|
|
20
|
+
};
|
|
21
|
+
const residentId = ({ actor, key }) => `${actor}/${key}`;
|
|
22
|
+
/** The identity the local engine holds an actor's files by: its name's length, its name, then its key. */
|
|
23
|
+
const fileIdentity = ({ actor, key }) => `${actor.length}:${actor}${key}`;
|
|
24
|
+
const notServed = (address) => InvalidRequestError.make({
|
|
25
|
+
actor: address.actor,
|
|
26
|
+
message: `${address.actor} is not served here`
|
|
27
|
+
});
|
|
28
|
+
const arrive = (arrivals, id, opened) => Effect.suspend(() => {
|
|
29
|
+
const waiting = MutableHashMap.get(arrivals, id);
|
|
30
|
+
MutableHashMap.remove(arrivals, id);
|
|
31
|
+
return Option.match(waiting, {
|
|
32
|
+
onNone: () => Effect.void,
|
|
33
|
+
onSome: ({ resident, waiting: watches }) => Effect.andThen(Deferred.succeed(resident, opened), Effect.forEach(watches, Deferred.await, { discard: true }))
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
const residentOf = ({ arrivals, check: cacheCheck, holding, residents, scope }, open) => Effect.fnUntraced(function* resident(address) {
|
|
37
|
+
yield* cacheCheck(address);
|
|
38
|
+
const current = yield* SynchronizedRef.get(residents);
|
|
39
|
+
const cached = HashMap.get(current, residentId(address));
|
|
40
|
+
if (Option.isSome(cached)) return cached.value.value;
|
|
41
|
+
const opening = SynchronizedRef.modifyEffect(residents, (known) => Option.match(HashMap.get(known, residentId(address)), {
|
|
42
|
+
onNone: () => open(address).pipe(Effect.tap((opened) => arrive(arrivals, residentId(address), opened)), Effect.map((opened) => [opened, HashMap.set(known, residentId(address), {
|
|
43
|
+
address: {
|
|
44
|
+
actor: address.actor,
|
|
45
|
+
key: address.key
|
|
46
|
+
},
|
|
47
|
+
value: opened
|
|
48
|
+
})])),
|
|
49
|
+
onSome: (found) => Effect.succeed([found.value, known])
|
|
50
|
+
}));
|
|
51
|
+
const started = yield* Effect.forkIn(holding(address)(opening), scope);
|
|
52
|
+
return yield* Fiber.join(started);
|
|
53
|
+
});
|
|
54
|
+
const register = ({ arrivals, residents }, id) => SynchronizedRef.modifyEffect(residents, (current) => Effect.sync(() => {
|
|
55
|
+
const pending = Option.match(MutableHashMap.get(arrivals, id), {
|
|
56
|
+
onNone: () => Deferred.makeUnsafe(),
|
|
57
|
+
onSome: ({ resident: waiting }) => waiting
|
|
58
|
+
});
|
|
59
|
+
const ready = Deferred.makeUnsafe();
|
|
60
|
+
const found = Option.map(HashMap.get(current, id), (cached) => cached.value);
|
|
61
|
+
Option.match(found, {
|
|
62
|
+
onNone: () => {
|
|
63
|
+
const waiting = Option.match(MutableHashMap.get(arrivals, id), {
|
|
64
|
+
onNone: () => [],
|
|
65
|
+
onSome: (arrival) => arrival.waiting
|
|
66
|
+
});
|
|
67
|
+
MutableHashMap.set(arrivals, id, {
|
|
68
|
+
resident: pending,
|
|
69
|
+
waiting: Array.append(waiting, ready)
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
onSome: (cached) => Deferred.doneUnsafe(pending, Exit.succeed(cached))
|
|
73
|
+
});
|
|
74
|
+
return [{
|
|
75
|
+
current: found,
|
|
76
|
+
ready,
|
|
77
|
+
resident: pending
|
|
78
|
+
}, current];
|
|
79
|
+
}));
|
|
80
|
+
const release = (arrivals, id, registered) => Effect.andThen(Effect.sync(() => {
|
|
81
|
+
const found = Option.filter(MutableHashMap.get(arrivals, id), (waiting) => waiting.resident === registered.resident);
|
|
82
|
+
if (Option.isNone(found)) return;
|
|
83
|
+
const waiting = Array.filter(found.value.waiting, (ready) => ready !== registered.ready);
|
|
84
|
+
if (Array.isReadonlyArrayEmpty(waiting)) MutableHashMap.remove(arrivals, id);
|
|
85
|
+
else MutableHashMap.set(arrivals, id, {
|
|
86
|
+
resident: registered.resident,
|
|
87
|
+
waiting
|
|
88
|
+
});
|
|
89
|
+
}), Deferred.succeed(registered.ready, true)).pipe(Effect.asVoid);
|
|
90
|
+
const watchAt = (cache) => (address) => Effect.gen(function* watchArrival() {
|
|
91
|
+
const { current, ready, resident } = yield* Effect.acquireRelease(register(cache, residentId(address)), (held) => release(cache.arrivals, residentId(address), held));
|
|
92
|
+
return {
|
|
93
|
+
current: Option.isSome(current),
|
|
94
|
+
ready: Effect.asVoid(Deferred.succeed(ready, true)),
|
|
95
|
+
updates: (use) => Stream.unwrap(Effect.map(Deferred.await(resident), use))
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
const cachedResidents = ({ open, check = () => Effect.void }) => Effect.gen(function* makeCachedResidents() {
|
|
99
|
+
const residents = yield* SynchronizedRef.make(HashMap.empty());
|
|
100
|
+
const scope = yield* Effect.scope;
|
|
101
|
+
const holding = yield* addressHolding(residentId);
|
|
102
|
+
const cache = {
|
|
103
|
+
arrivals: MutableHashMap.empty(),
|
|
104
|
+
check,
|
|
105
|
+
holding,
|
|
106
|
+
residents,
|
|
107
|
+
scope
|
|
108
|
+
};
|
|
109
|
+
const borrow = residentOf(cache, open);
|
|
110
|
+
return {
|
|
111
|
+
addresses: Effect.map(SynchronizedRef.get(residents), (current) => Array.map(Array.fromIterable(HashMap.values(current)), (cached) => cached.address)),
|
|
112
|
+
borrow,
|
|
113
|
+
forget: (address) => SynchronizedRef.update(residents, (known) => HashMap.remove(known, residentId(address))),
|
|
114
|
+
holding,
|
|
115
|
+
stream: (address, use) => Stream.unwrap(Effect.map(borrow(address), use)),
|
|
116
|
+
use: (address, use) => Effect.scoped(Effect.flatMap(borrow(address), use)),
|
|
117
|
+
watch: watchAt(cache)
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
const markOf = ({ actor, reader }) => Effect.mapBoth(reader.unsafe(fingerprint), {
|
|
121
|
+
onFailure: unavailable(actor.name),
|
|
122
|
+
onSuccess: (rows) => Array.join(Array.map(rows, ({ changes, stamp, tables }) => `${changes}:${tables}:${stamp}`), ",")
|
|
123
|
+
});
|
|
124
|
+
const written = (address) => ActorUnavailableError.make({
|
|
125
|
+
actor: address.actor,
|
|
126
|
+
message: `a query wrote to ${address.actor}'s never-created template, so the template was discarded`
|
|
127
|
+
});
|
|
128
|
+
const builtWith = (templates, { build, scope }) => (address) => Option.match(MutableHashMap.get(templates, address.actor), {
|
|
129
|
+
onNone: () => Effect.gen(function* buildTemplate() {
|
|
130
|
+
const owned = yield* Scope.fork(scope);
|
|
131
|
+
const opened = yield* Effect.onError(build(address, owned), () => Scope.close(owned, Exit.void));
|
|
132
|
+
const template = {
|
|
133
|
+
mark: yield* markOf(opened),
|
|
134
|
+
opened,
|
|
135
|
+
scope: owned
|
|
136
|
+
};
|
|
137
|
+
MutableHashMap.set(templates, address.actor, template);
|
|
138
|
+
return template;
|
|
139
|
+
}),
|
|
140
|
+
onSome: Effect.succeed
|
|
141
|
+
});
|
|
142
|
+
const blankTemplates = (templating) => Effect.map(Semaphore.make(onePermit), (permit) => {
|
|
143
|
+
const templates = MutableHashMap.empty();
|
|
144
|
+
const built = builtWith(templates, templating);
|
|
145
|
+
return (address, use) => permit.withPermits(onePermit)(Effect.gen(function* guardedRead() {
|
|
146
|
+
const template = yield* built(address);
|
|
147
|
+
yield* Effect.mapError(template.opened.reader.unsafe(queryOnly), unavailable(address.actor));
|
|
148
|
+
const exit = yield* Effect.exit(use(template.opened));
|
|
149
|
+
const mark = yield* Effect.exit(markOf(template.opened));
|
|
150
|
+
if (Exit.isSuccess(mark) && mark.value === template.mark) return yield* exit;
|
|
151
|
+
MutableHashMap.remove(templates, address.actor);
|
|
152
|
+
yield* Scope.close(template.scope, Exit.void);
|
|
153
|
+
return yield* written(address);
|
|
154
|
+
}));
|
|
155
|
+
});
|
|
156
|
+
const attached = (watch, updates) => watch.updates(({ live }) => updates(live)).pipe(Stream.tap(() => watch.ready), Stream.filter((update) => update.version > blankVersion), Stream.ensuring(watch.ready));
|
|
157
|
+
const liveOf = (reads, address, { first, updates }) => Stream.unwrap(Effect.flatMap(reads.stored(address), (stored) => {
|
|
158
|
+
if (stored) return Effect.succeed(reads.stream(address, ({ live }) => updates(live)));
|
|
159
|
+
return Effect.gen(function* watchBeforeArrival() {
|
|
160
|
+
const watch = yield* reads.watch(address);
|
|
161
|
+
if (watch.current) return watch.updates(({ live }) => updates(live));
|
|
162
|
+
const blank = yield* reads.template(address, (opened) => first(reads.current(opened)));
|
|
163
|
+
return Stream.concat(Stream.succeed(blank), attached(watch, updates)).pipe(Stream.buffer({ capacity: bufferedInitial }));
|
|
164
|
+
});
|
|
165
|
+
}));
|
|
166
|
+
const liveRoutes = (reads) => ({
|
|
167
|
+
state: (address) => liveOf(reads, address, {
|
|
168
|
+
first: (blank) => blank.state,
|
|
169
|
+
updates: (live) => live.state
|
|
170
|
+
}),
|
|
171
|
+
subscribe: (call) => liveOf(reads, call, {
|
|
172
|
+
first: (blank) => blank.subscribe(call),
|
|
173
|
+
updates: (live) => live.subscribe(call)
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
const existingWith = (resident, stored) => (address) => Effect.gen(function* existing() {
|
|
177
|
+
if (!(yield* stored(address))) return Option.none();
|
|
178
|
+
return yield* Effect.asSome(resident(address));
|
|
179
|
+
});
|
|
180
|
+
const readingOf = ({ blanks, residents, stored }) => {
|
|
181
|
+
const { current, template } = blanks;
|
|
182
|
+
const borrowExisting = existingWith(residents.borrow, stored);
|
|
183
|
+
const existing = (address, use) => Effect.scoped(Effect.flatMap(borrowExisting(address), use));
|
|
184
|
+
return {
|
|
185
|
+
borrowExisting,
|
|
186
|
+
existing,
|
|
187
|
+
live: liveRoutes({
|
|
188
|
+
current,
|
|
189
|
+
stored,
|
|
190
|
+
stream: residents.stream,
|
|
191
|
+
template,
|
|
192
|
+
watch: residents.watch
|
|
193
|
+
}),
|
|
194
|
+
read: (address, use) => existing(address, Option.match({
|
|
195
|
+
onNone: () => template(address, use),
|
|
196
|
+
onSome: ({ opened }) => use(opened)
|
|
197
|
+
}))
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
const fileSessionOf = ({ fileSession }) => Effect.fromOption(Option.fromNullishOr(fileSession)).pipe(Effect.mapError(() => FilesUnavailableError.make({ message: "files aren't available on this host" })));
|
|
201
|
+
export { blankTemplates, cachedResidents, fileIdentity, fileSessionOf, notServed, readingOf, unavailable, unavailableUnlessErased };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Hash, String as String$1 } from "effect";
|
|
2
|
+
// src/serve/engine/actor-shard.pure.ts
|
|
3
|
+
const shardCount = 300;
|
|
4
|
+
const firstShard = 1;
|
|
5
|
+
const shardDigits = 3;
|
|
6
|
+
const shardOf = (id) => Math.abs(Hash.string(id) % 300) + firstShard;
|
|
7
|
+
const shardDirectory = (id) => String$1.padStart(shardDigits, "0")(String(shardOf(id)));
|
|
8
|
+
export { shardCount, shardDirectory, shardOf };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LiveUpdate } from "../../contract/client/actor-rpc.contract.mjs";
|
|
2
|
+
import { HostedError } from "../../contract/hosted/hosted-error.contract.mjs";
|
|
3
|
+
import { CallersSchemas, StateFields, StateSchema } from "../../contract/actor/actor.contract.mjs";
|
|
4
|
+
import { Option, Stream } from "effect";
|
|
5
|
+
interface StatefulActor {
|
|
6
|
+
readonly callers: CallersSchemas;
|
|
7
|
+
readonly initial: Option.Option<() => StateFields>;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly state: StateSchema;
|
|
10
|
+
}
|
|
11
|
+
interface StateWatch<Failure> {
|
|
12
|
+
readonly actor: StatefulActor;
|
|
13
|
+
readonly principal: string;
|
|
14
|
+
readonly updates: Stream.Stream<LiveUpdate<Option.Option<string>>, Failure>;
|
|
15
|
+
}
|
|
16
|
+
declare const stateUpdates: <Failure>({ actor, principal, updates }: StateWatch<Failure>) => Stream.Stream<LiveUpdate<StateFields>, Failure | HostedError>;
|
|
17
|
+
export { type StatefulActor, stateUpdates };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { admit } from "../../contract/caller/caller-admission.pure.mjs";
|
|
2
|
+
import { startingState } from "../../contract/hosted/hosted-request.pure.mjs";
|
|
3
|
+
import { Effect, Option, Stream } from "effect";
|
|
4
|
+
// src/serve/engine/actor-state.pure.ts
|
|
5
|
+
const stateMember = "state";
|
|
6
|
+
const stateUpdates = ({ actor, principal, updates }) => {
|
|
7
|
+
const admitted = admit({
|
|
8
|
+
actor: actor.name,
|
|
9
|
+
allowed: Option.none(),
|
|
10
|
+
callers: actor.callers,
|
|
11
|
+
member: stateMember,
|
|
12
|
+
principal
|
|
13
|
+
});
|
|
14
|
+
const decoded = Stream.mapEffect(updates, ({ value, version }) => Effect.map(startingState(actor, value), (state) => ({
|
|
15
|
+
value: state,
|
|
16
|
+
version
|
|
17
|
+
})));
|
|
18
|
+
return Stream.unwrap(Effect.as(admitted, decoded));
|
|
19
|
+
};
|
|
20
|
+
export { stateUpdates };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const ActorsNotHostedError_base: Schema.Class<ActorsNotHostedError, Schema.TaggedStruct<"ActorsNotHostedError", {
|
|
3
|
+
readonly actors: Schema.$Array<Schema.String>;
|
|
4
|
+
readonly message: Schema.String;
|
|
5
|
+
}>, import("effect/Cause").YieldableError & {
|
|
6
|
+
readonly brand: unique symbol;
|
|
7
|
+
}>;
|
|
8
|
+
export declare class ActorsNotHostedError extends ActorsNotHostedError_base {}
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
// src/serve/engine/actors-not-hosted.errors.ts
|
|
3
|
+
var ActorsNotHostedError = class extends Schema.TaggedError()("ActorsNotHostedError", {
|
|
4
|
+
actors: Schema.Array(Schema.String),
|
|
5
|
+
message: Schema.String
|
|
6
|
+
}) {};
|
|
7
|
+
export { ActorsNotHostedError };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { JobEngine } from "../../host/job/job-engine.adapter.mjs";
|
|
2
|
+
import { Layer } from "effect";
|
|
3
|
+
import { WorkflowEngine } from "effect/workflow";
|
|
4
|
+
type JobServices = JobEngine | WorkflowEngine.WorkflowEngine;
|
|
5
|
+
declare const withJobs: <Output, Failure, Needs>(layer: Layer.Layer<Output, Failure, Needs>) => Layer.Layer<Output | JobServices, Failure, Exclude<Needs, JobServices>>;
|
|
6
|
+
export { withJobs };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const AlreadyExistsError_base: Schema.Class<AlreadyExistsError, Schema.TaggedStruct<"AlreadyExistsError", {
|
|
3
|
+
readonly key: Schema.String;
|
|
4
|
+
readonly resource: Schema.Literals<readonly ["environment", "snapshot"]>;
|
|
5
|
+
}>, import("effect/Cause").YieldableError & {
|
|
6
|
+
readonly brand: unique symbol;
|
|
7
|
+
}>;
|
|
8
|
+
/** The name is taken: by a live snapshot of the environment, or by an environment, retired ones included. */
|
|
9
|
+
export declare class AlreadyExistsError extends AlreadyExistsError_base {}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LocalResource } from "./local-environment.schema.mjs";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
// src/serve/environment/environment-already-exists.errors.ts
|
|
4
|
+
/** The name is taken: by a live snapshot of the environment, or by an environment, retired ones included. */
|
|
5
|
+
var AlreadyExistsError = class extends Schema.TaggedError()("AlreadyExistsError", {
|
|
6
|
+
key: Schema.String,
|
|
7
|
+
resource: LocalResource
|
|
8
|
+
}) {};
|
|
9
|
+
export { AlreadyExistsError };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const InUseError_base: Schema.Class<InUseError, Schema.TaggedStruct<"InUseError", {
|
|
3
|
+
readonly key: Schema.String;
|
|
4
|
+
readonly reason: Schema.Literals<readonly ["environmentServing", "environmentRetired", "environmentIsTheDataDirectory", "snapshotNotReady"]>;
|
|
5
|
+
}>, import("effect/Cause").YieldableError & {
|
|
6
|
+
readonly brand: unique symbol;
|
|
7
|
+
}>;
|
|
8
|
+
/** Something the operation needs is in the way, as Akter Cloud's InUseError says. */
|
|
9
|
+
export declare class InUseError extends InUseError_base {}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
// src/serve/environment/environment-in-use.errors.ts
|
|
3
|
+
const InUseReason = Schema.Literals([
|
|
4
|
+
"environmentServing",
|
|
5
|
+
"environmentRetired",
|
|
6
|
+
"environmentIsTheDataDirectory",
|
|
7
|
+
"snapshotNotReady"
|
|
8
|
+
]).annotate({ description: "environmentServing: promote another environment first; environmentRetired: the environment named by key was deleted and keeps its name; environmentIsTheDataDirectory: the data directory's own environment can't be deleted, delete the directory instead; snapshotNotReady: the snapshot named by key is not Ready, so nothing can branch from it." });
|
|
9
|
+
/** Something the operation needs is in the way, as Akter Cloud's InUseError says. */
|
|
10
|
+
var InUseError = class extends Schema.TaggedError()("InUseError", {
|
|
11
|
+
key: Schema.String,
|
|
12
|
+
reason: InUseReason
|
|
13
|
+
}) {};
|
|
14
|
+
export { InUseError };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
declare const NotFoundError_base: Schema.Class<NotFoundError, Schema.TaggedStruct<"NotFoundError", {
|
|
3
|
+
readonly key: Schema.String;
|
|
4
|
+
readonly resource: Schema.Literals<readonly ["environment", "snapshot"]>;
|
|
5
|
+
}>, import("effect/Cause").YieldableError & {
|
|
6
|
+
readonly brand: unique symbol;
|
|
7
|
+
}>;
|
|
8
|
+
/** No live environment or snapshot has that name: the same error, with the same fields, Akter Cloud answers. */
|
|
9
|
+
export declare class NotFoundError extends NotFoundError_base {}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LocalResource } from "./local-environment.schema.mjs";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
// src/serve/environment/environment-not-found.errors.ts
|
|
4
|
+
/** No live environment or snapshot has that name: the same error, with the same fields, Akter Cloud answers. */
|
|
5
|
+
var NotFoundError = class extends Schema.TaggedError()("NotFoundError", {
|
|
6
|
+
key: Schema.String,
|
|
7
|
+
resource: LocalResource
|
|
8
|
+
}) {};
|
|
9
|
+
export { NotFoundError };
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Effect, Option } from "effect";
|
|
2
|
+
import { SqlClient, SqlError } from "effect/sql";
|
|
3
|
+
type Sql<Value> = Effect.Effect<Value, SqlError.SqlError>;
|
|
4
|
+
/** The environment every data directory starts with, whose store is the data directory itself. */
|
|
5
|
+
declare const firstEnvironment = "dev";
|
|
6
|
+
/** Where the first environment's store is, relative to the data directory. */
|
|
7
|
+
declare const ownDirectory = ".";
|
|
8
|
+
/** The record of a data directory's environments and snapshots, at the top of the data directory. */
|
|
9
|
+
declare const recordFile = "environments.db";
|
|
10
|
+
/** Where a data directory keeps each branch's store, as `environments/<name>`. */
|
|
11
|
+
declare const environmentsFolder = "environments";
|
|
12
|
+
/** Where a data directory keeps each snapshot's copy, as `snapshots/<id>`. */
|
|
13
|
+
declare const snapshotsFolder = "snapshots";
|
|
14
|
+
interface EnvironmentRow {
|
|
15
|
+
readonly created_at: number;
|
|
16
|
+
readonly directory: string;
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly quiet: number;
|
|
19
|
+
readonly served: number;
|
|
20
|
+
readonly source: string | null;
|
|
21
|
+
readonly status: "Ready" | "Retired";
|
|
22
|
+
}
|
|
23
|
+
interface SnapshotRow {
|
|
24
|
+
readonly created_at: number;
|
|
25
|
+
readonly environment: string;
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly name: string;
|
|
28
|
+
readonly reason: string | null;
|
|
29
|
+
readonly size_bytes: number | null;
|
|
30
|
+
readonly status: "Pending" | "Ready" | "Failed" | "Retired";
|
|
31
|
+
readonly taken_at: number | null;
|
|
32
|
+
}
|
|
33
|
+
/** Which environment serves, and the promote that made it serve, kept so a repeated promote answers the same. */
|
|
34
|
+
interface ServingRow {
|
|
35
|
+
readonly environment: string;
|
|
36
|
+
readonly notice: string | null;
|
|
37
|
+
readonly previous: string | null;
|
|
38
|
+
}
|
|
39
|
+
interface Records {
|
|
40
|
+
readonly sql: SqlClient.SqlClient;
|
|
41
|
+
}
|
|
42
|
+
interface Stamped extends Records {
|
|
43
|
+
readonly now: number;
|
|
44
|
+
}
|
|
45
|
+
interface Named extends Records {
|
|
46
|
+
readonly name: string;
|
|
47
|
+
}
|
|
48
|
+
/** Creates the record's tables, and the first environment serving, not quiet, unless they exist. */
|
|
49
|
+
declare const prepareRecords: ({ now, sql }: Stamped) => Sql<void>;
|
|
50
|
+
declare const environmentRows: ({ sql }: Records) => Sql<readonly EnvironmentRow[]>;
|
|
51
|
+
declare const environmentRow: ({ name, sql }: Named) => Sql<Option.Option<EnvironmentRow>>;
|
|
52
|
+
declare const servingRow: ({ sql }: Records) => Sql<ServingRow>;
|
|
53
|
+
interface Branching extends Named, Stamped {
|
|
54
|
+
readonly directory: string;
|
|
55
|
+
readonly source: string;
|
|
56
|
+
}
|
|
57
|
+
/** A branch starts quiet, and has never served. */
|
|
58
|
+
declare const insertBranch: ({ directory, name, now, source, sql }: Branching) => Sql<void>;
|
|
59
|
+
interface Promoting extends Records {
|
|
60
|
+
readonly environment: string;
|
|
61
|
+
readonly notice: string;
|
|
62
|
+
readonly previous: string;
|
|
63
|
+
}
|
|
64
|
+
/** The promoted environment serves and stops being quiet; the one it replaces turns quiet and keeps its data. */
|
|
65
|
+
declare const markPromoted: ({ environment, notice, previous, sql }: Promoting) => Sql<void>;
|
|
66
|
+
declare const retireEnvironment: ({ name, sql }: Named) => Sql<void>;
|
|
67
|
+
interface OfEnvironment extends Records {
|
|
68
|
+
readonly environment: string;
|
|
69
|
+
}
|
|
70
|
+
/** The environment's live snapshots, by name; a retired snapshot is no longer listed. */
|
|
71
|
+
declare const liveSnapshots: ({ environment, sql }: OfEnvironment) => Sql<readonly SnapshotRow[]>;
|
|
72
|
+
declare const liveSnapshot: ({ environment, name, sql }: OfEnvironment & Named) => Sql<Option.Option<SnapshotRow>>;
|
|
73
|
+
interface Identified extends Records {
|
|
74
|
+
readonly id: string;
|
|
75
|
+
}
|
|
76
|
+
declare const snapshotById: ({ id, sql }: Identified) => Sql<Option.Option<SnapshotRow>>;
|
|
77
|
+
/** Takes the next snapshot id, snapshot-<n>; ids only ever grow, so a deleted snapshot's id is never reused. */
|
|
78
|
+
declare const nextSnapshotId: ({ sql }: Records) => Sql<string>;
|
|
79
|
+
declare const insertSnapshot: ({ environment, id, name, now, sql }: Identified & Named & OfEnvironment & Stamped) => Sql<void>;
|
|
80
|
+
/** Claims the environment's pending snapshots that no engine claimed yet, so only one engine takes each. */
|
|
81
|
+
declare const claimPending: ({ environment, sql }: OfEnvironment) => Sql<readonly SnapshotRow[]>;
|
|
82
|
+
/** How a claimed snapshot ended: Ready with its size and time, or Failed with the reason. */
|
|
83
|
+
interface Outcome {
|
|
84
|
+
readonly reason: Option.Option<string>;
|
|
85
|
+
readonly sizeBytes: Option.Option<number>;
|
|
86
|
+
readonly status: "Ready" | "Failed";
|
|
87
|
+
readonly takenAt: Option.Option<number>;
|
|
88
|
+
}
|
|
89
|
+
/** Settles a pending snapshot; false when it was deleted meanwhile, so its taker removes what it took. */
|
|
90
|
+
declare const settleSnapshot: ({ id, reason, sizeBytes, sql, status, takenAt }: Identified & Outcome) => Sql<boolean>;
|
|
91
|
+
declare const retireSnapshot: ({ id, sql }: Identified) => Sql<void>;
|
|
92
|
+
export { type EnvironmentRow, type Outcome, type ServingRow, type SnapshotRow, claimPending, environmentRow, environmentRows, environmentsFolder, firstEnvironment, insertBranch, insertSnapshot, liveSnapshot, liveSnapshots, markPromoted, nextSnapshotId, ownDirectory, prepareRecords, recordFile, retireEnvironment, retireSnapshot, servingRow, settleSnapshot, snapshotById, snapshotsFolder };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Array, Effect, Option } from "effect";
|
|
2
|
+
// src/serve/environment/environment-records.sql.ts
|
|
3
|
+
/** The environment every data directory starts with, whose store is the data directory itself. */
|
|
4
|
+
const firstEnvironment = "dev";
|
|
5
|
+
const firstSnapshot = 0;
|
|
6
|
+
/** Where the first environment's store is, relative to the data directory. */
|
|
7
|
+
const ownDirectory = ".";
|
|
8
|
+
/** The record of a data directory's environments and snapshots, at the top of the data directory. */
|
|
9
|
+
const recordFile = "environments.db";
|
|
10
|
+
/** Where a data directory keeps each branch's store, as `environments/<name>`. */
|
|
11
|
+
const environmentsFolder = "environments";
|
|
12
|
+
/** Where a data directory keeps each snapshot's copy, as `snapshots/<id>`. */
|
|
13
|
+
const snapshotsFolder = "snapshots";
|
|
14
|
+
const tables = [
|
|
15
|
+
"CREATE TABLE IF NOT EXISTS akter_environments (name TEXT PRIMARY KEY, directory TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('Ready', 'Retired')), quiet INTEGER NOT NULL CHECK (quiet IN (0, 1)), served INTEGER NOT NULL CHECK (served IN (0, 1)), source TEXT, created_at INTEGER NOT NULL) STRICT",
|
|
16
|
+
"CREATE TABLE IF NOT EXISTS akter_snapshots (id TEXT PRIMARY KEY, name TEXT NOT NULL, environment TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('Pending', 'Ready', 'Failed', 'Retired')), claimed INTEGER NOT NULL DEFAULT 0, created_at INTEGER NOT NULL, taken_at INTEGER, size_bytes INTEGER, reason TEXT) STRICT",
|
|
17
|
+
"CREATE TABLE IF NOT EXISTS akter_serving (slot INTEGER PRIMARY KEY CHECK (slot = 1), environment TEXT NOT NULL, previous TEXT, notice TEXT) STRICT",
|
|
18
|
+
"CREATE TABLE IF NOT EXISTS akter_snapshot_sequence (slot INTEGER PRIMARY KEY CHECK (slot = 1), next INTEGER NOT NULL) STRICT"
|
|
19
|
+
];
|
|
20
|
+
/** Creates the record's tables, and the first environment serving, not quiet, unless they exist. */
|
|
21
|
+
const prepareRecords = ({ now, sql }) => sql.withTransaction(Effect.gen(function* preparingRecords() {
|
|
22
|
+
yield* Effect.forEach(tables, (statement) => sql.unsafe(statement), { discard: true });
|
|
23
|
+
yield* sql`INSERT OR IGNORE INTO akter_environments (name, directory, status, quiet, served, created_at) VALUES (${"dev"}, ${"."}, 'Ready', 0, 1, ${now})`;
|
|
24
|
+
yield* sql`INSERT OR IGNORE INTO akter_serving (slot, environment) VALUES (1, ${"dev"})`;
|
|
25
|
+
yield* sql`INSERT OR IGNORE INTO akter_snapshot_sequence (slot, next) VALUES (1, 0)`;
|
|
26
|
+
}));
|
|
27
|
+
const environmentRows = ({ sql }) => sql`SELECT name, directory, status, quiet, served, source, created_at FROM akter_environments ORDER BY name`;
|
|
28
|
+
const environmentRow = ({ name, sql }) => Effect.map(sql`SELECT name, directory, status, quiet, served, source, created_at FROM akter_environments WHERE name = ${name}`, Array.head);
|
|
29
|
+
const servingRow = ({ sql }) => Effect.flatMap(sql`SELECT environment, previous, notice FROM akter_serving`, (rows) => Effect.orDie(Effect.fromOption(Array.head(rows))));
|
|
30
|
+
/** A branch starts quiet, and has never served. */
|
|
31
|
+
const insertBranch = ({ directory, name, now, source, sql }) => Effect.asVoid(sql`INSERT INTO akter_environments (name, directory, status, quiet, served, source, created_at) VALUES (${name}, ${directory}, 'Ready', 1, 0, ${source}, ${now})`);
|
|
32
|
+
/** The promoted environment serves and stops being quiet; the one it replaces turns quiet and keeps its data. */
|
|
33
|
+
const markPromoted = ({ environment, notice, previous, sql }) => Effect.gen(function* markingPromoted() {
|
|
34
|
+
yield* sql`UPDATE akter_environments SET quiet = 1 WHERE name = ${previous}`;
|
|
35
|
+
yield* sql`UPDATE akter_environments SET quiet = 0, served = 1 WHERE name = ${environment}`;
|
|
36
|
+
yield* sql`UPDATE akter_serving SET environment = ${environment}, previous = ${previous}, notice = ${notice}`;
|
|
37
|
+
});
|
|
38
|
+
const retireEnvironment = ({ name, sql }) => Effect.asVoid(sql`UPDATE akter_environments SET status = 'Retired', quiet = 1 WHERE name = ${name}`);
|
|
39
|
+
const snapshotColumns = "id, name, environment, status, created_at, taken_at, size_bytes, reason";
|
|
40
|
+
/** The environment's live snapshots, by name; a retired snapshot is no longer listed. */
|
|
41
|
+
const liveSnapshots = ({ environment, sql }) => sql`SELECT ${sql.literal(snapshotColumns)} FROM akter_snapshots WHERE environment = ${environment} AND status != 'Retired' ORDER BY name`;
|
|
42
|
+
const liveSnapshot = ({ environment, name, sql }) => Effect.map(sql`SELECT ${sql.literal(snapshotColumns)} FROM akter_snapshots WHERE environment = ${environment} AND name = ${name} AND status != 'Retired'`, Array.head);
|
|
43
|
+
const snapshotById = ({ id, sql }) => Effect.map(sql`SELECT ${sql.literal(snapshotColumns)} FROM akter_snapshots WHERE id = ${id}`, Array.head);
|
|
44
|
+
/** Takes the next snapshot id, snapshot-<n>; ids only ever grow, so a deleted snapshot's id is never reused. */
|
|
45
|
+
const nextSnapshotId = ({ sql }) => Effect.map(sql`UPDATE akter_snapshot_sequence SET next = next + 1 RETURNING next - 1 AS taken`, (rows) => `snapshot-${Array.reduce(rows, firstSnapshot, (_last, row) => row.taken)}`);
|
|
46
|
+
const insertSnapshot = ({ environment, id, name, now, sql }) => Effect.asVoid(sql`INSERT INTO akter_snapshots (id, name, environment, status, created_at) VALUES (${id}, ${name}, ${environment}, 'Pending', ${now})`);
|
|
47
|
+
/** Claims the environment's pending snapshots that no engine claimed yet, so only one engine takes each. */
|
|
48
|
+
const claimPending = ({ environment, sql }) => sql`UPDATE akter_snapshots SET claimed = 1 WHERE environment = ${environment} AND status = 'Pending' AND claimed = 0 RETURNING ${sql.literal(snapshotColumns)}`;
|
|
49
|
+
/** Settles a pending snapshot; false when it was deleted meanwhile, so its taker removes what it took. */
|
|
50
|
+
const settleSnapshot = ({ id, reason, sizeBytes, sql, status, takenAt }) => {
|
|
51
|
+
const [taken, size, why] = [
|
|
52
|
+
Option.getOrNull(takenAt),
|
|
53
|
+
Option.getOrNull(sizeBytes),
|
|
54
|
+
Option.getOrNull(reason)
|
|
55
|
+
];
|
|
56
|
+
return Effect.map(sql`UPDATE akter_snapshots SET status = ${status}, taken_at = ${taken}, size_bytes = ${size}, reason = ${why} WHERE id = ${id} AND status = 'Pending' RETURNING id`, Array.isReadonlyArrayNonEmpty);
|
|
57
|
+
};
|
|
58
|
+
const retireSnapshot = ({ id, sql }) => Effect.asVoid(sql`UPDATE akter_snapshots SET status = 'Retired' WHERE id = ${id}`);
|
|
59
|
+
export { claimPending, environmentRow, environmentRows, environmentsFolder, firstEnvironment, insertBranch, insertSnapshot, liveSnapshot, liveSnapshots, markPromoted, nextSnapshotId, ownDirectory, prepareRecords, recordFile, retireEnvironment, retireSnapshot, servingRow, settleSnapshot, snapshotById, snapshotsFolder };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { StoreUnreadableError } from "../store/store-unreadable.errors.mjs";
|
|
2
|
+
import { EnvironmentRow, SnapshotRow } from "./environment-records.sql.mjs";
|
|
3
|
+
import { AlreadyExistsError } from "./environment-already-exists.errors.mjs";
|
|
4
|
+
import { InUseError } from "./environment-in-use.errors.mjs";
|
|
5
|
+
import { NotFoundError } from "./environment-not-found.errors.mjs";
|
|
6
|
+
import { LocalEnvironment, LocalSnapshot } from "./local-environment.schema.mjs";
|
|
7
|
+
import { Duration, Effect, FileSystem, Path } from "effect";
|
|
8
|
+
import { SqlClient, SqlError } from "effect/sql";
|
|
9
|
+
/** What applies a data directory's record: the engine serving it, or nothing when none runs in this process. */
|
|
10
|
+
interface Hosting {
|
|
11
|
+
/** Applies the record now: an engine switches to the environment that serves and takes its pending snapshots. */
|
|
12
|
+
readonly apply: Effect.Effect<void>;
|
|
13
|
+
/** How long a new snapshot is waited for while it is Pending, for an engine in another process to take it. */
|
|
14
|
+
readonly settleWithin: Duration.Duration;
|
|
15
|
+
}
|
|
16
|
+
/** A data directory's environments: its record, on `sql`, and the folders beside it. */
|
|
17
|
+
interface Store {
|
|
18
|
+
readonly directory: string;
|
|
19
|
+
readonly fileSystem: FileSystem.FileSystem;
|
|
20
|
+
readonly hosting: Hosting;
|
|
21
|
+
readonly path: Path.Path;
|
|
22
|
+
readonly sql: SqlClient.SqlClient;
|
|
23
|
+
}
|
|
24
|
+
type Storage = SqlError.SqlError | Effect.Error<ReturnType<FileSystem.FileSystem["remove"]>>;
|
|
25
|
+
/** What an operation on a data directory's environments can fail with. */
|
|
26
|
+
type Failure = AlreadyExistsError | InUseError | NotFoundError | StoreUnreadableError;
|
|
27
|
+
/** A failure to read or write the record or a folder, answered as the data directory being unreadable. */
|
|
28
|
+
declare const stored: ({ directory }: Pick<Store, "directory">) => <Value>(effect: Effect.Effect<Value, Failure | Storage>) => Effect.Effect<Value, Failure>;
|
|
29
|
+
interface Describing extends Pick<Store, "directory" | "path"> {
|
|
30
|
+
readonly serving: string;
|
|
31
|
+
}
|
|
32
|
+
declare const environmentOf: ({ directory, path, serving }: Describing) => (row: EnvironmentRow) => LocalEnvironment;
|
|
33
|
+
declare const snapshotOf: (row: SnapshotRow) => LocalSnapshot;
|
|
34
|
+
/** The named environment, or the one that serves when no name is given, as it is recorded. */
|
|
35
|
+
declare const recordedEnvironment: (store: Store, name: (string & import("effect/Brand").Brand<"EnvironmentName">) | undefined) => Effect.Effect<EnvironmentRow, NotFoundError | SqlError.SqlError, never>;
|
|
36
|
+
/** The environment, which must be Ready: a retired one keeps its name but holds nothing. */
|
|
37
|
+
declare const readyEnvironment: (store: Store, name: (string & import("effect/Brand").Brand<"EnvironmentName">) | undefined) => Effect.Effect<EnvironmentRow, InUseError | NotFoundError | SqlError.SqlError, never>;
|
|
38
|
+
export { type Failure, type Hosting, type Store, environmentOf, readyEnvironment, recordedEnvironment, snapshotOf, stored };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { StoreUnreadableError } from "../store/store-unreadable.errors.mjs";
|
|
2
|
+
import { environmentRow, servingRow } from "./environment-records.sql.mjs";
|
|
3
|
+
import { InUseError } from "./environment-in-use.errors.mjs";
|
|
4
|
+
import { NotFoundError } from "./environment-not-found.errors.mjs";
|
|
5
|
+
import { EnvironmentName, SnapshotName } from "./local-environment.schema.mjs";
|
|
6
|
+
import { DateTime, Effect, Option } from "effect";
|
|
7
|
+
// src/serve/environment/environment-store.sql.ts
|
|
8
|
+
/** A failure to read or write the record or a folder, answered as the data directory being unreadable. */
|
|
9
|
+
const stored = ({ directory }) => (effect) => {
|
|
10
|
+
const unreadable = (failure) => Effect.fail(StoreUnreadableError.make({
|
|
11
|
+
directory,
|
|
12
|
+
message: failure.message
|
|
13
|
+
}));
|
|
14
|
+
return Effect.catchTags(effect, {
|
|
15
|
+
PlatformError: unreadable,
|
|
16
|
+
SqlError: unreadable
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const quietFlag = 1;
|
|
20
|
+
const sourceOf = (row) => Option.match(Option.fromNullishOr(row.source), {
|
|
21
|
+
onNone: () => ({}),
|
|
22
|
+
onSome: (source) => ({ source })
|
|
23
|
+
});
|
|
24
|
+
const environmentOf = ({ directory, path, serving }) => (row) => ({
|
|
25
|
+
createdAt: DateTime.makeUnsafe(row.created_at),
|
|
26
|
+
directory: path.resolve(directory, row.directory),
|
|
27
|
+
name: EnvironmentName.make(row.name),
|
|
28
|
+
quiet: row.quiet === quietFlag,
|
|
29
|
+
serving: row.name === serving,
|
|
30
|
+
status: row.status,
|
|
31
|
+
...sourceOf(row)
|
|
32
|
+
});
|
|
33
|
+
const takenOf = (row) => Option.match(Option.fromNullishOr(row.taken_at), {
|
|
34
|
+
onNone: () => ({}),
|
|
35
|
+
onSome: (millis) => ({ takenAt: DateTime.makeUnsafe(millis) })
|
|
36
|
+
});
|
|
37
|
+
const sizeOf = (row) => Option.match(Option.fromNullishOr(row.size_bytes), {
|
|
38
|
+
onNone: () => ({}),
|
|
39
|
+
onSome: (sizeBytes) => ({ sizeBytes })
|
|
40
|
+
});
|
|
41
|
+
const reasonOf = (row) => Option.match(Option.fromNullishOr(row.reason), {
|
|
42
|
+
onNone: () => ({}),
|
|
43
|
+
onSome: (reason) => ({ reason })
|
|
44
|
+
});
|
|
45
|
+
const snapshotOf = (row) => ({
|
|
46
|
+
createdAt: DateTime.makeUnsafe(row.created_at),
|
|
47
|
+
environment: EnvironmentName.make(row.environment),
|
|
48
|
+
id: row.id,
|
|
49
|
+
name: SnapshotName.make(row.name),
|
|
50
|
+
status: row.status,
|
|
51
|
+
...reasonOf(row),
|
|
52
|
+
...sizeOf(row),
|
|
53
|
+
...takenOf(row)
|
|
54
|
+
});
|
|
55
|
+
/** The named environment, or the one that serves when no name is given, as it is recorded. */
|
|
56
|
+
const recordedEnvironment = Effect.fnUntraced(function* recordedEnvironment(store, name) {
|
|
57
|
+
const serving = yield* servingRow(store);
|
|
58
|
+
const wanted = name ?? serving.environment;
|
|
59
|
+
const row = yield* environmentRow({
|
|
60
|
+
name: wanted,
|
|
61
|
+
sql: store.sql
|
|
62
|
+
});
|
|
63
|
+
const notFound = () => NotFoundError.make({
|
|
64
|
+
key: wanted,
|
|
65
|
+
resource: "environment"
|
|
66
|
+
});
|
|
67
|
+
return yield* Effect.mapError(Effect.fromOption(row), notFound);
|
|
68
|
+
});
|
|
69
|
+
/** The environment, which must be Ready: a retired one keeps its name but holds nothing. */
|
|
70
|
+
const readyEnvironment = Effect.fnUntraced(function* readyEnvironment(store, name) {
|
|
71
|
+
const row = yield* recordedEnvironment(store, name);
|
|
72
|
+
if (row.status === "Retired") return yield* InUseError.make({
|
|
73
|
+
key: row.name,
|
|
74
|
+
reason: "environmentRetired"
|
|
75
|
+
});
|
|
76
|
+
return row;
|
|
77
|
+
});
|
|
78
|
+
export { environmentOf, readyEnvironment, recordedEnvironment, snapshotOf, stored };
|