@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,69 @@
|
|
|
1
|
+
import { InvalidRequestError } from "../../contract/client/invalid-request.errors.mjs";
|
|
2
|
+
import { computerFileBytes } from "../../contract/computer/files/computer-files.schema.mjs";
|
|
3
|
+
import { filePathOf } from "../../contract/file/file-path.pure.mjs";
|
|
4
|
+
import { notHeld, present, recordFor } from "./local-computer-records.layer.mjs";
|
|
5
|
+
import { Array, Effect, FileSystem, Path, Predicate, Stream, String } from "effect";
|
|
6
|
+
// src/host/computer/local-computer-files.layer.ts
|
|
7
|
+
const extraByte = 1;
|
|
8
|
+
const checkedPath = Effect.fnUntraced(function* checkedPath(disk, target, actor) {
|
|
9
|
+
const canonical = yield* (yield* FileSystem.FileSystem).realPath(target).pipe(Effect.catchReason("PlatformError", "NotFound", () => Effect.succeed(target)));
|
|
10
|
+
if (!String.startsWith(`${disk}/`)(canonical)) return yield* InvalidRequestError.make({
|
|
11
|
+
actor,
|
|
12
|
+
message: "a computer file must stay on its disk"
|
|
13
|
+
});
|
|
14
|
+
return target;
|
|
15
|
+
});
|
|
16
|
+
/** Check each existing ancestor before creating the next, so a symlink cannot make directories off the disk. */
|
|
17
|
+
const targetOf = Effect.fnUntraced(function* targetOf(place, relative, writing) {
|
|
18
|
+
const fs = yield* FileSystem.FileSystem;
|
|
19
|
+
const path = yield* Path.Path;
|
|
20
|
+
const disk = yield* fs.realPath(place.disk);
|
|
21
|
+
const segments = ["files", ...String.split(relative, "/")];
|
|
22
|
+
const initial = Effect.succeed(disk);
|
|
23
|
+
return yield* Array.reduce(segments, initial, (previous, segment, index) => Effect.gen(function* checkChild() {
|
|
24
|
+
const parent = yield* previous;
|
|
25
|
+
const target = yield* checkedPath(disk, path.join(parent, segment), place.actor);
|
|
26
|
+
if (writing && index < segments.length - extraByte) yield* fs.makeDirectory(target).pipe(Effect.catchReason("PlatformError", "AlreadyExists", () => Effect.void));
|
|
27
|
+
return target;
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
const readFile = Effect.fnUntraced(function* readFile(target, actor) {
|
|
31
|
+
const fs = yield* FileSystem.FileSystem;
|
|
32
|
+
const stat = yield* fs.stat(target);
|
|
33
|
+
if (stat.type !== "File" || stat.size > BigInt(1048576)) return yield* InvalidRequestError.make({
|
|
34
|
+
actor,
|
|
35
|
+
message: "a computer file must be a regular file of at most 1 MiB"
|
|
36
|
+
});
|
|
37
|
+
const chunks = yield* Stream.runCollect(fs.stream(target, { bytesToRead: computerFileBytes + extraByte }));
|
|
38
|
+
const content = Uint8Array.from(Array.flatMap(chunks, (chunk) => [...chunk]));
|
|
39
|
+
if (content.byteLength > 1048576) return yield* InvalidRequestError.make({
|
|
40
|
+
actor,
|
|
41
|
+
message: "a computer file holds at most 1 MiB"
|
|
42
|
+
});
|
|
43
|
+
return content;
|
|
44
|
+
});
|
|
45
|
+
const writeFile = Effect.fnUntraced(function* writeFile(target, content) {
|
|
46
|
+
const fs = yield* FileSystem.FileSystem;
|
|
47
|
+
const path = yield* Path.Path;
|
|
48
|
+
const temporary = yield* fs.makeTempFileScoped({ directory: path.dirname(target) });
|
|
49
|
+
yield* fs.writeFile(temporary, content);
|
|
50
|
+
yield* fs.rename(temporary, target);
|
|
51
|
+
return /* @__PURE__ */ new Uint8Array();
|
|
52
|
+
}, Effect.scoped);
|
|
53
|
+
const localComputerFile = Effect.fnUntraced(function* localComputerFile(place, request) {
|
|
54
|
+
const record = yield* recordFor(place);
|
|
55
|
+
yield* notHeld(record);
|
|
56
|
+
yield* present(place);
|
|
57
|
+
const relative = yield* Effect.mapError(filePathOf(request.path), (failure) => InvalidRequestError.make({
|
|
58
|
+
actor: place.actor,
|
|
59
|
+
message: failure.message
|
|
60
|
+
}));
|
|
61
|
+
if (Predicate.isTagged(request, "Write") && request.content.byteLength > 1048576) return yield* InvalidRequestError.make({
|
|
62
|
+
actor: place.actor,
|
|
63
|
+
message: "a computer file holds at most 1 MiB"
|
|
64
|
+
});
|
|
65
|
+
const target = yield* targetOf(place, relative, Predicate.isTagged(request, "Write"));
|
|
66
|
+
if (Predicate.isTagged(request, "Write")) return yield* writeFile(target, request.content);
|
|
67
|
+
return yield* readFile(target, place.actor);
|
|
68
|
+
});
|
|
69
|
+
export { localComputerFile };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComputerLogLine, ExecResult } from "../../contract/computer/computer.schema.mjs";
|
|
2
|
+
import { Effect, FileSystem, Path, Schema } from "effect";
|
|
3
|
+
/** Whose log: the actor's directory and the computer's name. A removed computer keeps its log. */
|
|
4
|
+
interface LogPlace {
|
|
5
|
+
readonly actor: string;
|
|
6
|
+
readonly name: string;
|
|
7
|
+
}
|
|
8
|
+
type Level = ComputerLogLine["level"];
|
|
9
|
+
type DiskError = Effect.Error<ReturnType<FileSystem.FileSystem["exists"]>>;
|
|
10
|
+
type Logged<Value> = Effect.Effect<Value, DiskError | Schema.SchemaError, FileSystem.FileSystem>;
|
|
11
|
+
interface LocalLog {
|
|
12
|
+
readonly note: (place: LogPlace, level: Level, message: string) => Logged<void>;
|
|
13
|
+
/** The lines after `after`, oldest first, at most `limit`. */
|
|
14
|
+
readonly page: (place: LogPlace, after: number, limit: number) => Logged<readonly ComputerLogLine[]>;
|
|
15
|
+
/** A step's key and outcome, never its output, which can carry anything the step printed. */
|
|
16
|
+
readonly step: (place: LogPlace, key: string, result: ExecResult) => Logged<void>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Each computer's log as a JSON file beside the actor's computers, in a directory no computer name can take, keeping
|
|
20
|
+
* the newest 1,000 lines as the hosted engine does. Writes to one log go one at a time.
|
|
21
|
+
*/
|
|
22
|
+
declare const localLog: (path: Path.Path) => LocalLog;
|
|
23
|
+
export { type LocalLog, type LogPlace, localLog };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ExecRan, logPageLines } from "../../contract/computer/computer.schema.mjs";
|
|
2
|
+
import { LogJson } from "./local-computer.schema.mjs";
|
|
3
|
+
import { Array, Clock, Effect, FileSystem, MutableHashMap, Option, Schema, Semaphore } from "effect";
|
|
4
|
+
// src/host/computer/local-computer-log.layer.ts
|
|
5
|
+
const firstSeq = 1;
|
|
6
|
+
const succeeded = 0;
|
|
7
|
+
const oneAtATime = 1;
|
|
8
|
+
const encodeLog = Schema.encodeEffect(LogJson);
|
|
9
|
+
const decodeLog = Schema.decodeUnknownEffect(LogJson);
|
|
10
|
+
const ran = Schema.is(ExecRan);
|
|
11
|
+
const exitLevel = (code) => {
|
|
12
|
+
if (code === succeeded) return "info";
|
|
13
|
+
return "warn";
|
|
14
|
+
};
|
|
15
|
+
const stepLine = (key, result) => {
|
|
16
|
+
if (!ran(result)) return ["error", `step ${key}: started but no outcome was recorded`];
|
|
17
|
+
return Option.match(Option.fromUndefinedOr(result.exitCode), {
|
|
18
|
+
onNone: () => ["warn", `step ${key}: ended without an exit code`],
|
|
19
|
+
onSome: (code) => [exitLevel(code), `step ${key}: exit ${String(code)}`]
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
const read = (file) => FileSystem.FileSystem.use((fs) => fs.readFileString(file).pipe(Effect.flatMap(decodeLog), Effect.catchReason("PlatformError", "NotFound", () => Effect.succeed([]))));
|
|
23
|
+
const appended = Effect.fnUntraced(function* appended(path, file, line) {
|
|
24
|
+
const fs = yield* FileSystem.FileSystem;
|
|
25
|
+
const lines = yield* read(file);
|
|
26
|
+
const seq = Option.match(Array.last(lines), {
|
|
27
|
+
onNone: () => firstSeq,
|
|
28
|
+
onSome: (last) => last.seq + firstSeq
|
|
29
|
+
});
|
|
30
|
+
const at = yield* Clock.currentTimeMillis;
|
|
31
|
+
const text = yield* encodeLog(Array.takeRight(Array.append(lines, {
|
|
32
|
+
...line,
|
|
33
|
+
at,
|
|
34
|
+
seq
|
|
35
|
+
}), logPageLines));
|
|
36
|
+
yield* fs.makeDirectory(path.dirname(file), { recursive: true });
|
|
37
|
+
yield* fs.writeFileString(file, text);
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Each computer's log as a JSON file beside the actor's computers, in a directory no computer name can take, keeping
|
|
41
|
+
* the newest 1,000 lines as the hosted engine does. Writes to one log go one at a time.
|
|
42
|
+
*/
|
|
43
|
+
const localLog = (path) => {
|
|
44
|
+
const locks = MutableHashMap.empty();
|
|
45
|
+
const fileOf = ({ actor, name }) => path.join(actor, ".logs", `${name}.json`);
|
|
46
|
+
const note = (place, level, message) => Effect.suspend(() => {
|
|
47
|
+
const file = fileOf(place);
|
|
48
|
+
const lock = Option.getOrElse(MutableHashMap.get(locks, file), () => Semaphore.makeUnsafe(oneAtATime));
|
|
49
|
+
MutableHashMap.set(locks, file, lock);
|
|
50
|
+
return lock.withPermit(appended(path, file, {
|
|
51
|
+
level,
|
|
52
|
+
message
|
|
53
|
+
}));
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
note,
|
|
57
|
+
page: (place, after, limit) => Effect.map(read(fileOf(place)), (lines) => Array.take(Array.filter(lines, (line) => line.seq > after), limit)),
|
|
58
|
+
step: (place, key, result) => {
|
|
59
|
+
const [level, message] = stepLine(key, result);
|
|
60
|
+
return note(place, level, message);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
export { localLog };
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { ComputerClientFailure } from "../../contract/computer/computer-client-failure.contract.mjs";
|
|
2
|
+
import { ComputerAddress } from "../../contract/computer/computer-client.contract.mjs";
|
|
3
|
+
import { LocalComputerRecord } from "./local-computer.schema.mjs";
|
|
4
|
+
import { Effect, FileSystem, Option, Path, Schema, Semaphore } from "effect";
|
|
5
|
+
/** What the disk answers when it fails: the file system's own error. */
|
|
6
|
+
type DiskError = Effect.Error<ReturnType<FileSystem.FileSystem["exists"]>>;
|
|
7
|
+
type Failing = ComputerClientFailure | DiskError | Schema.SchemaError;
|
|
8
|
+
type Recorded<Value> = Effect.Effect<Value, Failing, FileSystem.FileSystem>;
|
|
9
|
+
/** Where the local computers of one store live. */
|
|
10
|
+
interface Store {
|
|
11
|
+
/** One permit: a new computer is counted and made one at a time, so two at once can't pass the limit. */
|
|
12
|
+
readonly admission: Semaphore.Semaphore;
|
|
13
|
+
readonly path: Path.Path;
|
|
14
|
+
readonly root: string;
|
|
15
|
+
}
|
|
16
|
+
/** One computer's directory: its record, its disk and its steps, under its actor's directory. */
|
|
17
|
+
interface Place {
|
|
18
|
+
readonly actor: string;
|
|
19
|
+
readonly directory: string;
|
|
20
|
+
readonly disk: string;
|
|
21
|
+
readonly name: string;
|
|
22
|
+
readonly record: string;
|
|
23
|
+
readonly steps: string;
|
|
24
|
+
}
|
|
25
|
+
/** An actor key as one path segment, as the store writes it: never empty, never only dots. */
|
|
26
|
+
declare const keySegment: (key: string) => string;
|
|
27
|
+
declare const placeOf: ({ path, root }: Store) => (address: ComputerAddress, name: string) => Place;
|
|
28
|
+
declare const listed: (directory: string) => Effect.Effect<readonly string[], DiskError, FileSystem.FileSystem>;
|
|
29
|
+
declare const findRecord: (place: Place) => Effect.Effect<Option.Option<{
|
|
30
|
+
readonly createdAt: number;
|
|
31
|
+
readonly hold?: {
|
|
32
|
+
readonly from: "paused" | "running" | "stopped";
|
|
33
|
+
readonly hold: string;
|
|
34
|
+
};
|
|
35
|
+
readonly spec: {
|
|
36
|
+
readonly egress: readonly string[];
|
|
37
|
+
readonly image: string;
|
|
38
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
39
|
+
readonly secrets?: readonly {
|
|
40
|
+
readonly header: string;
|
|
41
|
+
readonly host: string;
|
|
42
|
+
readonly prefix?: string;
|
|
43
|
+
readonly secret: string;
|
|
44
|
+
}[];
|
|
45
|
+
readonly size: {
|
|
46
|
+
readonly memoryMib: number;
|
|
47
|
+
readonly vcpu: number;
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
readonly state: "paused" | "running" | "stopped";
|
|
51
|
+
}>, import("effect/PlatformError").PlatformError | Schema.SchemaError, FileSystem.FileSystem>;
|
|
52
|
+
declare const recordFor: (place: Place) => Recorded<LocalComputerRecord>;
|
|
53
|
+
/** Writes the record beside the old one and renames it over, so a crash never leaves half a record. */
|
|
54
|
+
declare const saveRecord: (place: Place, record: {
|
|
55
|
+
readonly createdAt: number;
|
|
56
|
+
readonly hold?: {
|
|
57
|
+
readonly from: "paused" | "running" | "stopped";
|
|
58
|
+
readonly hold: string;
|
|
59
|
+
};
|
|
60
|
+
readonly spec: {
|
|
61
|
+
readonly egress: readonly string[];
|
|
62
|
+
readonly image: string;
|
|
63
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
64
|
+
readonly secrets?: readonly {
|
|
65
|
+
readonly header: string;
|
|
66
|
+
readonly host: string;
|
|
67
|
+
readonly prefix?: string;
|
|
68
|
+
readonly secret: string;
|
|
69
|
+
}[];
|
|
70
|
+
readonly size: {
|
|
71
|
+
readonly memoryMib: number;
|
|
72
|
+
readonly vcpu: number;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
readonly state: "paused" | "running" | "stopped";
|
|
76
|
+
}) => Effect.Effect<{
|
|
77
|
+
readonly createdAt: number;
|
|
78
|
+
readonly hold?: {
|
|
79
|
+
readonly from: "paused" | "running" | "stopped";
|
|
80
|
+
readonly hold: string;
|
|
81
|
+
};
|
|
82
|
+
readonly spec: {
|
|
83
|
+
readonly egress: readonly string[];
|
|
84
|
+
readonly image: string;
|
|
85
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
86
|
+
readonly secrets?: readonly {
|
|
87
|
+
readonly header: string;
|
|
88
|
+
readonly host: string;
|
|
89
|
+
readonly prefix?: string;
|
|
90
|
+
readonly secret: string;
|
|
91
|
+
}[];
|
|
92
|
+
readonly size: {
|
|
93
|
+
readonly memoryMib: number;
|
|
94
|
+
readonly vcpu: number;
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
readonly state: "paused" | "running" | "stopped";
|
|
98
|
+
}, import("effect/PlatformError").PlatformError | Schema.SchemaError, FileSystem.FileSystem>;
|
|
99
|
+
declare const computerOf: (place: Place, record: {
|
|
100
|
+
readonly createdAt: number;
|
|
101
|
+
readonly hold?: {
|
|
102
|
+
readonly from: "paused" | "running" | "stopped";
|
|
103
|
+
readonly hold: string;
|
|
104
|
+
};
|
|
105
|
+
readonly spec: {
|
|
106
|
+
readonly egress: readonly string[];
|
|
107
|
+
readonly image: string;
|
|
108
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
109
|
+
readonly secrets?: readonly {
|
|
110
|
+
readonly header: string;
|
|
111
|
+
readonly host: string;
|
|
112
|
+
readonly prefix?: string;
|
|
113
|
+
readonly secret: string;
|
|
114
|
+
}[];
|
|
115
|
+
readonly size: {
|
|
116
|
+
readonly memoryMib: number;
|
|
117
|
+
readonly vcpu: number;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
readonly state: "paused" | "running" | "stopped";
|
|
121
|
+
}) => Effect.Effect<{
|
|
122
|
+
readonly egress: readonly string[];
|
|
123
|
+
readonly image: string;
|
|
124
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
125
|
+
readonly secrets?: readonly {
|
|
126
|
+
readonly header: string;
|
|
127
|
+
readonly host: string;
|
|
128
|
+
readonly prefix?: string;
|
|
129
|
+
readonly secret: string;
|
|
130
|
+
}[];
|
|
131
|
+
readonly size: {
|
|
132
|
+
readonly memoryMib: number;
|
|
133
|
+
readonly vcpu: number;
|
|
134
|
+
};
|
|
135
|
+
readonly state: "failed" | "gone" | "paused" | "running" | "starting" | "stopped";
|
|
136
|
+
}, import("effect/PlatformError").PlatformError, FileSystem.FileSystem>;
|
|
137
|
+
/** The computer's disk is there; one whose disk is gone is lost, never made again empty under its name. */
|
|
138
|
+
declare const present: (place: Place) => Recorded<void>;
|
|
139
|
+
declare const notHeld: (record: LocalComputerRecord) => Recorded<void>;
|
|
140
|
+
declare const movedTo: (place: Place, record: {
|
|
141
|
+
readonly createdAt: number;
|
|
142
|
+
readonly hold?: {
|
|
143
|
+
readonly from: "paused" | "running" | "stopped";
|
|
144
|
+
readonly hold: string;
|
|
145
|
+
};
|
|
146
|
+
readonly spec: {
|
|
147
|
+
readonly egress: readonly string[];
|
|
148
|
+
readonly image: string;
|
|
149
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
150
|
+
readonly secrets?: readonly {
|
|
151
|
+
readonly header: string;
|
|
152
|
+
readonly host: string;
|
|
153
|
+
readonly prefix?: string;
|
|
154
|
+
readonly secret: string;
|
|
155
|
+
}[];
|
|
156
|
+
readonly size: {
|
|
157
|
+
readonly memoryMib: number;
|
|
158
|
+
readonly vcpu: number;
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
readonly state: "paused" | "running" | "stopped";
|
|
162
|
+
}, state: "paused" | "running" | "stopped") => Effect.Effect<{
|
|
163
|
+
readonly createdAt: number;
|
|
164
|
+
readonly hold?: {
|
|
165
|
+
readonly from: "paused" | "running" | "stopped";
|
|
166
|
+
readonly hold: string;
|
|
167
|
+
};
|
|
168
|
+
readonly spec: {
|
|
169
|
+
readonly egress: readonly string[];
|
|
170
|
+
readonly image: string;
|
|
171
|
+
readonly name: string & import("effect/Brand").Brand<"ComputerName">;
|
|
172
|
+
readonly secrets?: readonly {
|
|
173
|
+
readonly header: string;
|
|
174
|
+
readonly host: string;
|
|
175
|
+
readonly prefix?: string;
|
|
176
|
+
readonly secret: string;
|
|
177
|
+
}[];
|
|
178
|
+
readonly size: {
|
|
179
|
+
readonly memoryMib: number;
|
|
180
|
+
readonly vcpu: number;
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
readonly state: "paused" | "running" | "stopped";
|
|
184
|
+
}, Failing, FileSystem.FileSystem>;
|
|
185
|
+
/** Makes a new computer only while the store has room, counting and making under one permit. */
|
|
186
|
+
declare const admitted: ({ computer, store }: {
|
|
187
|
+
readonly computer: string;
|
|
188
|
+
readonly store: Store;
|
|
189
|
+
}) => <Value, Services>(making: Effect.Effect<Value, Failing, Services>) => Effect.Effect<Value, Failing, Services | FileSystem.FileSystem>;
|
|
190
|
+
export { type DiskError, type Failing, type Place, type Recorded, type Store, admitted, computerOf, findRecord, keySegment, listed, movedTo, notHeld, placeOf, present, recordFor, saveRecord };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { ComputerHeldError } from "../../contract/computer/computer-held.errors.mjs";
|
|
2
|
+
import { ComputerLimitError } from "../../contract/computer/computer-limit.errors.mjs";
|
|
3
|
+
import { ComputerLostError } from "../../contract/computer/computer-lost.errors.mjs";
|
|
4
|
+
import { ComputerNotFoundError } from "../../contract/computer/computer-not-found.errors.mjs";
|
|
5
|
+
import { RecordJson } from "./local-computer.schema.mjs";
|
|
6
|
+
import { Array, Effect, FileSystem, Option, Schema, String } from "effect";
|
|
7
|
+
// src/host/computer/local-computer-records.layer.ts
|
|
8
|
+
/** The computers one store keeps at most, the hosted engine's default store ceiling, so a dev app meets it locally. */
|
|
9
|
+
const storeCeiling = 4;
|
|
10
|
+
const recordFile = "computer.json";
|
|
11
|
+
const dotsOnly = /^\.*$/u;
|
|
12
|
+
const encodeRecord = Schema.encodeEffect(RecordJson);
|
|
13
|
+
const decodeRecord = Schema.decodeUnknownEffect(RecordJson);
|
|
14
|
+
/** An actor key as one path segment, as the store writes it: never empty, never only dots. */
|
|
15
|
+
const keySegment = (key) => {
|
|
16
|
+
const encoded = encodeURIComponent(key);
|
|
17
|
+
if (String.isEmpty(encoded)) return "%";
|
|
18
|
+
if (dotsOnly.test(encoded)) return String.replaceAll(".", "%2E")(encoded);
|
|
19
|
+
return encoded;
|
|
20
|
+
};
|
|
21
|
+
const placeOf = ({ path, root }) => (address, name) => {
|
|
22
|
+
const actor = path.join(root, address.actor, keySegment(address.key));
|
|
23
|
+
const directory = path.join(actor, name);
|
|
24
|
+
return {
|
|
25
|
+
actor,
|
|
26
|
+
directory,
|
|
27
|
+
disk: path.join(directory, "disk"),
|
|
28
|
+
name,
|
|
29
|
+
record: path.join(directory, recordFile),
|
|
30
|
+
steps: path.join(directory, "steps")
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
const listed = (directory) => FileSystem.FileSystem.use((fs) => fs.readDirectory(directory).pipe(Effect.catchReason("PlatformError", "NotFound", () => Effect.succeed([]))));
|
|
34
|
+
const findRecord = Effect.fnUntraced(function* findRecord(place) {
|
|
35
|
+
const text = yield* (yield* FileSystem.FileSystem).readFileString(place.record).pipe(Effect.asSome, Effect.catchReason("PlatformError", "NotFound", () => Effect.succeedNone));
|
|
36
|
+
return yield* Option.match(text, {
|
|
37
|
+
onNone: () => Effect.succeed(Option.none()),
|
|
38
|
+
onSome: (found) => Effect.asSome(decodeRecord(found))
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
const recordFor = (place) => Effect.flatMap(findRecord(place), (found) => Effect.mapError(Effect.fromOption(found), () => ComputerNotFoundError.make({ computer: place.name })));
|
|
42
|
+
/** Writes the record beside the old one and renames it over, so a crash never leaves half a record. */
|
|
43
|
+
const saveRecord = Effect.fnUntraced(function* saveRecord(place, record) {
|
|
44
|
+
const fs = yield* FileSystem.FileSystem;
|
|
45
|
+
const staged = `${place.record}.next`;
|
|
46
|
+
const text = yield* encodeRecord(record);
|
|
47
|
+
yield* fs.writeFileString(staged, text);
|
|
48
|
+
yield* fs.rename(staged, place.record);
|
|
49
|
+
return record;
|
|
50
|
+
});
|
|
51
|
+
const stateOf = (record, present) => {
|
|
52
|
+
if (present) return record.state;
|
|
53
|
+
return "gone";
|
|
54
|
+
};
|
|
55
|
+
const computerOf = Effect.fnUntraced(function* computerOf(place, record) {
|
|
56
|
+
const found = yield* (yield* FileSystem.FileSystem).exists(place.disk);
|
|
57
|
+
return {
|
|
58
|
+
...record.spec,
|
|
59
|
+
state: stateOf(record, found)
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
/** The computer's disk is there; one whose disk is gone is lost, never made again empty under its name. */
|
|
63
|
+
const present = (place) => FileSystem.FileSystem.use((fs) => Effect.flatMap(fs.exists(place.disk), (found) => {
|
|
64
|
+
if (found) return Effect.void;
|
|
65
|
+
return Effect.fail(ComputerLostError.make({ computer: place.name }));
|
|
66
|
+
}));
|
|
67
|
+
const notHeld = (record) => Option.match(Option.fromUndefinedOr(record.hold), {
|
|
68
|
+
onNone: () => Effect.void,
|
|
69
|
+
onSome: ({ hold }) => Effect.fail(ComputerHeldError.make({
|
|
70
|
+
computer: record.spec.name,
|
|
71
|
+
hold
|
|
72
|
+
}))
|
|
73
|
+
});
|
|
74
|
+
const movedTo = Effect.fnUntraced(function* movedTo(place, record, state) {
|
|
75
|
+
yield* present(place);
|
|
76
|
+
return yield* saveRecord(place, {
|
|
77
|
+
...record,
|
|
78
|
+
state
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
/** Every computer the store keeps, of every actor. */
|
|
82
|
+
const keptIn = Effect.fnUntraced(function* keptIn({ path, root }) {
|
|
83
|
+
const fs = yield* FileSystem.FileSystem;
|
|
84
|
+
const under = (directory) => Effect.map(listed(directory), Array.map((entry) => path.join(directory, entry)));
|
|
85
|
+
const actors = yield* under(root);
|
|
86
|
+
const keys = yield* Effect.forEach(actors, under);
|
|
87
|
+
const computers = yield* Effect.forEach(Array.flatten(keys), under);
|
|
88
|
+
return yield* Effect.filter(Array.flatten(computers), (computer) => fs.exists(path.join(computer, recordFile)));
|
|
89
|
+
});
|
|
90
|
+
/** Makes a new computer only while the store has room, counting and making under one permit. */
|
|
91
|
+
const admitted = ({ computer, store }) => (making) => store.admission.withPermit(Effect.gen(function* admitComputer() {
|
|
92
|
+
if ((yield* keptIn(store)).length >= storeCeiling) return yield* ComputerLimitError.make({
|
|
93
|
+
computer,
|
|
94
|
+
limit: "store",
|
|
95
|
+
maximum: storeCeiling
|
|
96
|
+
});
|
|
97
|
+
return yield* making;
|
|
98
|
+
}));
|
|
99
|
+
export { admitted, computerOf, findRecord, keySegment, listed, movedTo, notHeld, placeOf, present, recordFor, saveRecord };
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** A local computer's power state. It has no starting phase: a new one is running once it is made. */
|
|
3
|
+
declare const LocalState: Schema.Literals<readonly ["running", "paused", "stopped"]>;
|
|
4
|
+
type LocalState = typeof LocalState.Type;
|
|
5
|
+
/**
|
|
6
|
+
* One local computer as its directory records it: the spec it keeps, where it is, and the hold a fork may keep on it.
|
|
7
|
+
*/
|
|
8
|
+
declare const LocalComputerRecord: Schema.Struct<{
|
|
9
|
+
readonly createdAt: Schema.Int;
|
|
10
|
+
readonly hold: Schema.optionalKey<Schema.Struct<{
|
|
11
|
+
readonly from: Schema.Literals<readonly ["running", "paused", "stopped"]>;
|
|
12
|
+
readonly hold: Schema.String;
|
|
13
|
+
}>>;
|
|
14
|
+
readonly spec: Schema.Struct<{
|
|
15
|
+
readonly egress: Schema.$Array<Schema.String>;
|
|
16
|
+
readonly image: Schema.String;
|
|
17
|
+
readonly name: Schema.brand<Schema.String, "ComputerName">;
|
|
18
|
+
readonly secrets: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
19
|
+
readonly header: Schema.String;
|
|
20
|
+
readonly host: Schema.String;
|
|
21
|
+
readonly prefix: Schema.optionalKey<Schema.String>;
|
|
22
|
+
readonly secret: Schema.String;
|
|
23
|
+
}>>>;
|
|
24
|
+
readonly size: Schema.Struct<{
|
|
25
|
+
readonly memoryMib: Schema.Int;
|
|
26
|
+
readonly vcpu: Schema.Int;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
readonly state: Schema.Literals<readonly ["running", "paused", "stopped"]>;
|
|
30
|
+
}>;
|
|
31
|
+
type LocalComputerRecord = typeof LocalComputerRecord.Type;
|
|
32
|
+
declare const RecordJson: Schema.fromJsonString<Schema.Struct<{
|
|
33
|
+
readonly createdAt: Schema.Int;
|
|
34
|
+
readonly hold: Schema.optionalKey<Schema.Struct<{
|
|
35
|
+
readonly from: Schema.Literals<readonly ["running", "paused", "stopped"]>;
|
|
36
|
+
readonly hold: Schema.String;
|
|
37
|
+
}>>;
|
|
38
|
+
readonly spec: Schema.Struct<{
|
|
39
|
+
readonly egress: Schema.$Array<Schema.String>;
|
|
40
|
+
readonly image: Schema.String;
|
|
41
|
+
readonly name: Schema.brand<Schema.String, "ComputerName">;
|
|
42
|
+
readonly secrets: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
43
|
+
readonly header: Schema.String;
|
|
44
|
+
readonly host: Schema.String;
|
|
45
|
+
readonly prefix: Schema.optionalKey<Schema.String>;
|
|
46
|
+
readonly secret: Schema.String;
|
|
47
|
+
}>>>;
|
|
48
|
+
readonly size: Schema.Struct<{
|
|
49
|
+
readonly memoryMib: Schema.Int;
|
|
50
|
+
readonly vcpu: Schema.Int;
|
|
51
|
+
}>;
|
|
52
|
+
}>;
|
|
53
|
+
readonly state: Schema.Literals<readonly ["running", "paused", "stopped"]>;
|
|
54
|
+
}>>;
|
|
55
|
+
declare const LogJson: Schema.fromJsonString<Schema.$Array<Schema.Struct<{
|
|
56
|
+
readonly at: Schema.Int;
|
|
57
|
+
readonly level: Schema.Literals<readonly ["info", "warn", "error"]>;
|
|
58
|
+
readonly message: Schema.String;
|
|
59
|
+
readonly seq: Schema.Int;
|
|
60
|
+
}>>>;
|
|
61
|
+
/** A step's recorded end: its exit code, or none when it was ended without one, such as at its time limit. */
|
|
62
|
+
declare const StepStatus: Schema.Struct<{
|
|
63
|
+
readonly exitCode: Schema.optionalKey<Schema.Int>;
|
|
64
|
+
}>;
|
|
65
|
+
type StepStatus = typeof StepStatus.Type;
|
|
66
|
+
declare const StatusJson: Schema.fromJsonString<Schema.Struct<{
|
|
67
|
+
readonly exitCode: Schema.optionalKey<Schema.Int>;
|
|
68
|
+
}>>;
|
|
69
|
+
export { LocalComputerRecord, LocalState, LogJson, RecordJson, StatusJson, StepStatus };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ComputerLogLine, ComputerSpec } from "../../contract/computer/computer.schema.mjs";
|
|
2
|
+
import { Schema } from "effect";
|
|
3
|
+
// src/host/computer/local-computer.schema.ts
|
|
4
|
+
/** A local computer's power state. It has no starting phase: a new one is running once it is made. */
|
|
5
|
+
const LocalState = Schema.Literals([
|
|
6
|
+
"running",
|
|
7
|
+
"paused",
|
|
8
|
+
"stopped"
|
|
9
|
+
]);
|
|
10
|
+
/** A hold records where its pause found the computer, so the hold's resume returns it there. */
|
|
11
|
+
const Hold = Schema.Struct({
|
|
12
|
+
from: LocalState,
|
|
13
|
+
hold: Schema.String
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* One local computer as its directory records it: the spec it keeps, where it is, and the hold a fork may keep on it.
|
|
17
|
+
*/
|
|
18
|
+
const LocalComputerRecord = Schema.Struct({
|
|
19
|
+
createdAt: Schema.Int,
|
|
20
|
+
hold: Schema.optionalKey(Hold),
|
|
21
|
+
spec: ComputerSpec,
|
|
22
|
+
state: LocalState
|
|
23
|
+
});
|
|
24
|
+
const RecordJson = Schema.fromJsonString(LocalComputerRecord);
|
|
25
|
+
const LogJson = Schema.fromJsonString(Schema.Array(ComputerLogLine));
|
|
26
|
+
/** A step's recorded end: its exit code, or none when it was ended without one, such as at its time limit. */
|
|
27
|
+
const StepStatus = Schema.Struct({ exitCode: Schema.optionalKey(Schema.Int) });
|
|
28
|
+
const StatusJson = Schema.fromJsonString(StepStatus);
|
|
29
|
+
export { LocalComputerRecord, LocalState, LogJson, RecordJson, StatusJson, StepStatus };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComputerLogLine, ComputerLogPage } from "../../contract/computer/computer.schema.mjs";
|
|
2
|
+
import { ComputerClientFailure } from "../../contract/computer/computer-client-failure.contract.mjs";
|
|
3
|
+
import { ComputerAddress, ComputerClient } from "../../contract/computer/computer-client.contract.mjs";
|
|
4
|
+
import { Failing } from "./local-computer-records.layer.mjs";
|
|
5
|
+
import { StepServices } from "./local-step.layer.mjs";
|
|
6
|
+
import { Context, Effect, FileSystem, Path } from "effect";
|
|
7
|
+
declare const LocalComputers_base: Context.ServiceClass<LocalComputers, "@akterjs/effect/host/computer/local-computers.adapter/LocalComputers", {
|
|
8
|
+
readonly connect: (address: ComputerAddress) => ComputerClient;
|
|
9
|
+
readonly logs: (address: ComputerAddress, computer: string, page: ComputerLogPage) => Effect.Effect<readonly ComputerLogLine[], ComputerClientFailure>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare class LocalComputers extends LocalComputers_base {
|
|
12
|
+
static readonly make: (root: string) => Effect.Effect<{
|
|
13
|
+
readonly connect: (address: ComputerAddress) => ComputerClient;
|
|
14
|
+
readonly logs: (address: ComputerAddress, computer: string, page: ComputerLogPage) => Effect.Effect<readonly ComputerLogLine[], ComputerClientFailure>;
|
|
15
|
+
}, never, StepServices>;
|
|
16
|
+
static readonly remove: (root: string, address: ComputerAddress) => Effect.Effect<void, Failing, FileSystem.FileSystem | Path.Path>;
|
|
17
|
+
}
|
|
18
|
+
export {};
|