@rikalabs/akter 0.1.0-alpha.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/CHANGELOG.md +15 -0
- package/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +116 -0
- package/dist/actor/codecs.d.ts +77 -0
- package/dist/actor/codecs.js +87 -0
- package/dist/actor/connections.d.ts +34 -0
- package/dist/actor/connections.js +145 -0
- package/dist/actor/definition.d.ts +893 -0
- package/dist/actor/definition.js +147 -0
- package/dist/actor/descriptor.d.ts +172 -0
- package/dist/actor/descriptor.js +367 -0
- package/dist/actor/handles.d.ts +77 -0
- package/dist/actor/handles.js +265 -0
- package/dist/actor/jobs.d.ts +10 -0
- package/dist/actor/jobs.js +137 -0
- package/dist/actor/layers.d.ts +41 -0
- package/dist/actor/layers.js +177 -0
- package/dist/actor/reads.d.ts +47 -0
- package/dist/actor/reads.js +224 -0
- package/dist/actor/served.d.ts +120 -0
- package/dist/actor/served.js +72 -0
- package/dist/actor/turns.d.ts +13 -0
- package/dist/actor/turns.js +332 -0
- package/dist/actor/workflows.d.ts +16 -0
- package/dist/actor/workflows.js +37 -0
- package/dist/client/calls.d.ts +47 -0
- package/dist/client/calls.js +425 -0
- package/dist/client/clock.d.ts +56 -0
- package/dist/client/clock.js +119 -0
- package/dist/client/fleet-page.d.ts +15 -0
- package/dist/client/fleet-page.js +13 -0
- package/dist/client/fleet.d.ts +29 -0
- package/dist/client/fleet.js +51 -0
- package/dist/client/index.d.ts +17 -0
- package/dist/client/index.js +6 -0
- package/dist/client/make.d.ts +157 -0
- package/dist/client/make.js +221 -0
- package/dist/client/offline/queue.d.ts +118 -0
- package/dist/client/offline/queue.js +292 -0
- package/dist/client/offline/store.d.ts +74 -0
- package/dist/client/offline/store.js +78 -0
- package/dist/client/optimistic.d.ts +57 -0
- package/dist/client/optimistic.js +136 -0
- package/dist/client/report.d.ts +2 -0
- package/dist/client/report.js +8 -0
- package/dist/client/sessions/connection.d.ts +118 -0
- package/dist/client/sessions/connection.js +162 -0
- package/dist/client/sessions/feed.d.ts +42 -0
- package/dist/client/sessions/feed.js +43 -0
- package/dist/client/sessions/sse.d.ts +47 -0
- package/dist/client/sessions/sse.js +112 -0
- package/dist/client/sessions/stream.d.ts +28 -0
- package/dist/client/sessions/stream.js +35 -0
- package/dist/client/sessions/watch.d.ts +34 -0
- package/dist/client/sessions/watch.js +40 -0
- package/dist/client/transport.d.ts +37 -0
- package/dist/client/transport.js +66 -0
- package/dist/contexts/command.d.ts +132 -0
- package/dist/contexts/command.js +20 -0
- package/dist/contexts/connection.d.ts +68 -0
- package/dist/contexts/connection.js +0 -0
- package/dist/contexts/job.d.ts +49 -0
- package/dist/contexts/job.js +0 -0
- package/dist/contexts/workflow.d.ts +147 -0
- package/dist/contexts/workflow.js +22 -0
- package/dist/errors/actor.d.ts +200 -0
- package/dist/errors/actor.js +271 -0
- package/dist/errors/content.d.ts +19 -0
- package/dist/errors/content.js +14 -0
- package/dist/errors/database.d.ts +22 -0
- package/dist/errors/database.js +23 -0
- package/dist/errors/events.d.ts +17 -0
- package/dist/errors/events.js +14 -0
- package/dist/errors/subscription.d.ts +12 -0
- package/dist/errors/subscription.js +8 -0
- package/dist/errors/workflow.d.ts +28 -0
- package/dist/errors/workflow.js +17 -0
- package/dist/handles/actors.d.ts +17 -0
- package/dist/handles/actors.js +7 -0
- package/dist/handles/content.d.ts +59 -0
- package/dist/handles/content.js +36 -0
- package/dist/handles/intents.d.ts +164 -0
- package/dist/handles/intents.js +214 -0
- package/dist/handles/run.d.ts +31 -0
- package/dist/handles/run.js +21 -0
- package/dist/handles/workflow.d.ts +27 -0
- package/dist/handles/workflow.js +23 -0
- package/dist/identity/caller.d.ts +105 -0
- package/dist/identity/caller.js +68 -0
- package/dist/identity/child.d.ts +18 -0
- package/dist/identity/child.js +39 -0
- package/dist/identity/command.d.ts +19 -0
- package/dist/identity/command.js +21 -0
- package/dist/identity/connection.d.ts +24 -0
- package/dist/identity/connection.js +29 -0
- package/dist/identity/content.d.ts +18 -0
- package/dist/identity/content.js +12 -0
- package/dist/identity/digest.d.ts +4 -0
- package/dist/identity/digest.js +5 -0
- package/dist/identity/execution.d.ts +32 -0
- package/dist/identity/execution.js +63 -0
- package/dist/identity/mint.d.ts +51 -0
- package/dist/identity/mint.js +76 -0
- package/dist/identity/version.d.ts +2 -0
- package/dist/identity/version.js +3 -0
- package/dist/index.d.ts +159 -0
- package/dist/index.js +97 -0
- package/dist/members/blob.d.ts +43 -0
- package/dist/members/blob.js +29 -0
- package/dist/members/command.d.ts +109 -0
- package/dist/members/command.js +61 -0
- package/dist/members/connection.d.ts +55 -0
- package/dist/members/connection.js +49 -0
- package/dist/members/event.d.ts +36 -0
- package/dist/members/event.js +24 -0
- package/dist/members/job.d.ts +157 -0
- package/dist/members/job.js +67 -0
- package/dist/members/payload.d.ts +93 -0
- package/dist/members/payload.js +145 -0
- package/dist/members/reducer.d.ts +64 -0
- package/dist/members/reducer.js +27 -0
- package/dist/members/stream.d.ts +36 -0
- package/dist/members/stream.js +14 -0
- package/dist/members/subscription.d.ts +182 -0
- package/dist/members/subscription.js +91 -0
- package/dist/members/workflow.d.ts +99 -0
- package/dist/members/workflow.js +2 -0
- package/dist/policies/access.d.ts +35 -0
- package/dist/policies/access.js +6 -0
- package/dist/policies/command.d.ts +127 -0
- package/dist/policies/command.js +45 -0
- package/dist/policies/job.d.ts +28 -0
- package/dist/policies/job.js +60 -0
- package/dist/policies/schedules.d.ts +33 -0
- package/dist/policies/schedules.js +131 -0
- package/dist/protocol/frames.d.ts +66 -0
- package/dist/protocol/frames.js +55 -0
- package/dist/protocol/inspection.d.ts +807 -0
- package/dist/protocol/inspection.js +243 -0
- package/dist/protocol/wire.d.ts +184 -0
- package/dist/protocol/wire.js +150 -0
- package/dist/runtime/actors.d.ts +155 -0
- package/dist/runtime/actors.js +4 -0
- package/dist/runtime/admission.d.ts +34 -0
- package/dist/runtime/admission.js +72 -0
- package/dist/runtime/adoption/backfill.d.ts +27 -0
- package/dist/runtime/adoption/backfill.js +144 -0
- package/dist/runtime/adoption/enforce.d.ts +55 -0
- package/dist/runtime/adoption/enforce.js +241 -0
- package/dist/runtime/adoption/observe.d.ts +43 -0
- package/dist/runtime/adoption/observe.js +139 -0
- package/dist/runtime/adoption/plan.d.ts +45 -0
- package/dist/runtime/adoption/plan.js +192 -0
- package/dist/runtime/adoption/startup.d.ts +32 -0
- package/dist/runtime/adoption/startup.js +76 -0
- package/dist/runtime/adoption/status.d.ts +23 -0
- package/dist/runtime/adoption/status.js +47 -0
- package/dist/runtime/adoption/target.d.ts +33 -0
- package/dist/runtime/adoption/target.js +49 -0
- package/dist/runtime/connections/holder.d.ts +221 -0
- package/dist/runtime/connections/holder.js +816 -0
- package/dist/runtime/connections/owner.d.ts +263 -0
- package/dist/runtime/connections/owner.js +896 -0
- package/dist/runtime/connections/protocol.d.ts +441 -0
- package/dist/runtime/connections/protocol.js +222 -0
- package/dist/runtime/connections/reads.d.ts +24 -0
- package/dist/runtime/connections/reads.js +19 -0
- package/dist/runtime/connections/streams.d.ts +62 -0
- package/dist/runtime/connections/streams.js +128 -0
- package/dist/runtime/connections/transport.d.ts +40 -0
- package/dist/runtime/connections/transport.js +68 -0
- package/dist/runtime/connections/watch.d.ts +52 -0
- package/dist/runtime/connections/watch.js +159 -0
- package/dist/runtime/content/grant.d.ts +34 -0
- package/dist/runtime/content/grant.js +58 -0
- package/dist/runtime/content/store.d.ts +63 -0
- package/dist/runtime/content/store.js +294 -0
- package/dist/runtime/cron/key.d.ts +2 -0
- package/dist/runtime/cron/key.js +2 -0
- package/dist/runtime/cron/schedule.d.ts +69 -0
- package/dist/runtime/cron/schedule.js +144 -0
- package/dist/runtime/database/bounded.d.ts +43 -0
- package/dist/runtime/database/bounded.js +108 -0
- package/dist/runtime/database/connection.d.ts +8 -0
- package/dist/runtime/database/connection.js +18 -0
- package/dist/runtime/database/coordination.d.ts +19 -0
- package/dist/runtime/database/coordination.js +72 -0
- package/dist/runtime/database/flock.d.ts +10 -0
- package/dist/runtime/database/flock.js +60 -0
- package/dist/runtime/database/gate.d.ts +26 -0
- package/dist/runtime/database/gate.js +54 -0
- package/dist/runtime/database/keepalive.d.ts +11 -0
- package/dist/runtime/database/keepalive.js +22 -0
- package/dist/runtime/database/migrations.d.ts +177 -0
- package/dist/runtime/database/migrations.js +1018 -0
- package/dist/runtime/database/neki/migrations.d.ts +31 -0
- package/dist/runtime/database/neki/migrations.js +276 -0
- package/dist/runtime/database/neki/session.d.ts +23 -0
- package/dist/runtime/database/neki/session.js +31 -0
- package/dist/runtime/database/pglite.d.ts +21 -0
- package/dist/runtime/database/pglite.js +74 -0
- package/dist/runtime/database/replica.d.ts +41 -0
- package/dist/runtime/database/replica.js +51 -0
- package/dist/runtime/database/shards.d.ts +21 -0
- package/dist/runtime/database/shards.js +37 -0
- package/dist/runtime/database/snapshot.d.ts +7 -0
- package/dist/runtime/database/snapshot.js +7 -0
- package/dist/runtime/database/tenancy.d.ts +69 -0
- package/dist/runtime/database/tenancy.js +145 -0
- package/dist/runtime/database/transient.d.ts +10 -0
- package/dist/runtime/database/transient.js +25 -0
- package/dist/runtime/drain.d.ts +132 -0
- package/dist/runtime/drain.js +109 -0
- package/dist/runtime/entity/mailbox.d.ts +86 -0
- package/dist/runtime/entity/mailbox.js +121 -0
- package/dist/runtime/entity/register.d.ts +424 -0
- package/dist/runtime/entity/register.js +669 -0
- package/dist/runtime/events/append.d.ts +192 -0
- package/dist/runtime/events/append.js +128 -0
- package/dist/runtime/events/cursor.d.ts +2 -0
- package/dist/runtime/events/cursor.js +5 -0
- package/dist/runtime/events/replay.d.ts +20 -0
- package/dist/runtime/events/replay.js +45 -0
- package/dist/runtime/feeds.d.ts +26 -0
- package/dist/runtime/feeds.js +100 -0
- package/dist/runtime/fleet/checks.d.ts +17 -0
- package/dist/runtime/fleet/checks.js +106 -0
- package/dist/runtime/fleet/maintainer.d.ts +38 -0
- package/dist/runtime/fleet/maintainer.js +383 -0
- package/dist/runtime/fleet/pgoutput.d.ts +41 -0
- package/dist/runtime/fleet/pgoutput.js +102 -0
- package/dist/runtime/fleet/setup.d.ts +36 -0
- package/dist/runtime/fleet/setup.js +58 -0
- package/dist/runtime/fleet/subscribe.d.ts +42 -0
- package/dist/runtime/fleet/subscribe.js +147 -0
- package/dist/runtime/index.d.ts +66 -0
- package/dist/runtime/index.js +37 -0
- package/dist/runtime/inspector/http.d.ts +19 -0
- package/dist/runtime/inspector/http.js +36 -0
- package/dist/runtime/inspector/layer.d.ts +46 -0
- package/dist/runtime/inspector/layer.js +180 -0
- package/dist/runtime/inspector/queries.d.ts +711 -0
- package/dist/runtime/inspector/queries.js +494 -0
- package/dist/runtime/jobs/attempt.d.ts +254 -0
- package/dist/runtime/jobs/attempt.js +413 -0
- package/dist/runtime/jobs/isolation.d.ts +20 -0
- package/dist/runtime/jobs/isolation.js +10 -0
- package/dist/runtime/jobs/progress.d.ts +95 -0
- package/dist/runtime/jobs/progress.js +144 -0
- package/dist/runtime/layer.d.ts +260 -0
- package/dist/runtime/layer.js +876 -0
- package/dist/runtime/members.d.ts +381 -0
- package/dist/runtime/members.js +8 -0
- package/dist/runtime/operators/audit.d.ts +64 -0
- package/dist/runtime/operators/audit.js +56 -0
- package/dist/runtime/operators/auth.d.ts +29 -0
- package/dist/runtime/operators/auth.js +42 -0
- package/dist/runtime/operators/export.d.ts +68 -0
- package/dist/runtime/operators/export.js +137 -0
- package/dist/runtime/operators/grants.d.ts +45 -0
- package/dist/runtime/operators/grants.js +40 -0
- package/dist/runtime/operators/repair.d.ts +206 -0
- package/dist/runtime/operators/repair.js +226 -0
- package/dist/runtime/operators/routes.d.ts +35 -0
- package/dist/runtime/operators/routes.js +190 -0
- package/dist/runtime/operators/seed.d.ts +123 -0
- package/dist/runtime/operators/seed.js +123 -0
- package/dist/runtime/payloads/versions.d.ts +65 -0
- package/dist/runtime/payloads/versions.js +240 -0
- package/dist/runtime/peering/authority.d.ts +42 -0
- package/dist/runtime/peering/authority.js +132 -0
- package/dist/runtime/peering/credentials.d.ts +21 -0
- package/dist/runtime/peering/credentials.js +13 -0
- package/dist/runtime/peering/transport.d.ts +51 -0
- package/dist/runtime/peering/transport.js +175 -0
- package/dist/runtime/queries.d.ts +18 -0
- package/dist/runtime/queries.js +169 -0
- package/dist/runtime/readiness.d.ts +36 -0
- package/dist/runtime/readiness.js +44 -0
- package/dist/runtime/registration.d.ts +58 -0
- package/dist/runtime/registration.js +186 -0
- package/dist/runtime/request.d.ts +158 -0
- package/dist/runtime/request.js +102 -0
- package/dist/runtime/retry.d.ts +8 -0
- package/dist/runtime/retry.js +11 -0
- package/dist/runtime/runner.d.ts +93 -0
- package/dist/runtime/runner.js +122 -0
- package/dist/runtime/storage/codec.d.ts +39 -0
- package/dist/runtime/storage/codec.js +41 -0
- package/dist/runtime/storage/generation.d.ts +69 -0
- package/dist/runtime/storage/generation.js +49 -0
- package/dist/runtime/storage/placements.d.ts +15 -0
- package/dist/runtime/storage/placements.js +38 -0
- package/dist/runtime/storage/platform.d.ts +6 -0
- package/dist/runtime/storage/platform.js +9 -0
- package/dist/runtime/storage/retention.d.ts +73 -0
- package/dist/runtime/storage/retention.js +158 -0
- package/dist/runtime/subscriptions/identity.d.ts +31 -0
- package/dist/runtime/subscriptions/identity.js +45 -0
- package/dist/runtime/subscriptions/relay.d.ts +175 -0
- package/dist/runtime/subscriptions/relay.js +763 -0
- package/dist/runtime/subscriptions/storage.d.ts +40 -0
- package/dist/runtime/subscriptions/storage.js +98 -0
- package/dist/runtime/sweeps.d.ts +39 -0
- package/dist/runtime/sweeps.js +54 -0
- package/dist/runtime/telemetry/defects.d.ts +57 -0
- package/dist/runtime/telemetry/defects.js +43 -0
- package/dist/runtime/telemetry/metrics.d.ts +52 -0
- package/dist/runtime/telemetry/metrics.js +138 -0
- package/dist/runtime/telemetry/routes.d.ts +19 -0
- package/dist/runtime/telemetry/routes.js +18 -0
- package/dist/runtime/telemetry/sampler.d.ts +26 -0
- package/dist/runtime/telemetry/sampler.js +101 -0
- package/dist/runtime/telemetry/spans.d.ts +38 -0
- package/dist/runtime/telemetry/spans.js +44 -0
- package/dist/runtime/telemetry/usage.d.ts +52 -0
- package/dist/runtime/telemetry/usage.js +30 -0
- package/dist/runtime/topology/admission.d.ts +13 -0
- package/dist/runtime/topology/admission.js +36 -0
- package/dist/runtime/topology/locks.d.ts +56 -0
- package/dist/runtime/topology/locks.js +81 -0
- package/dist/runtime/topology/messages.d.ts +15 -0
- package/dist/runtime/topology/messages.js +32 -0
- package/dist/runtime/turn/admission.d.ts +22 -0
- package/dist/runtime/turn/admission.js +41 -0
- package/dist/runtime/turn/blobs.d.ts +38 -0
- package/dist/runtime/turn/blobs.js +215 -0
- package/dist/runtime/turn/execute.d.ts +208 -0
- package/dist/runtime/turn/execute.js +972 -0
- package/dist/runtime/turn/group.d.ts +165 -0
- package/dist/runtime/turn/group.js +326 -0
- package/dist/runtime/turn/hooks.d.ts +44 -0
- package/dist/runtime/turn/hooks.js +28 -0
- package/dist/runtime/turn/outbox.d.ts +159 -0
- package/dist/runtime/turn/outbox.js +269 -0
- package/dist/runtime/turn/pipeline.d.ts +68 -0
- package/dist/runtime/turn/pipeline.js +83 -0
- package/dist/runtime/turn/receipt.d.ts +81 -0
- package/dist/runtime/turn/receipt.js +32 -0
- package/dist/runtime/turn/relay.d.ts +179 -0
- package/dist/runtime/turn/relay.js +685 -0
- package/dist/runtime/turn/rows.d.ts +43 -0
- package/dist/runtime/turn/rows.js +592 -0
- package/dist/runtime/workflows/compatibility.d.ts +125 -0
- package/dist/runtime/workflows/compatibility.js +285 -0
- package/dist/runtime/workflows/engine.d.ts +107 -0
- package/dist/runtime/workflows/engine.js +826 -0
- package/dist/runtime/workflows/manifest.d.ts +34 -0
- package/dist/runtime/workflows/manifest.js +39 -0
- package/dist/runtime/workflows/steps.d.ts +33 -0
- package/dist/runtime/workflows/steps.js +152 -0
- package/dist/serve/api.d.ts +99 -0
- package/dist/serve/api.js +403 -0
- package/dist/serve/assertion/binding.d.ts +41 -0
- package/dist/serve/assertion/binding.js +92 -0
- package/dist/serve/assertion/verify.d.ts +93 -0
- package/dist/serve/assertion/verify.js +189 -0
- package/dist/serve/auth.d.ts +200 -0
- package/dist/serve/auth.js +92 -0
- package/dist/serve/clock.d.ts +10 -0
- package/dist/serve/clock.js +25 -0
- package/dist/serve/jwt.d.ts +65 -0
- package/dist/serve/jwt.js +202 -0
- package/dist/serve/layer.d.ts +98 -0
- package/dist/serve/layer.js +809 -0
- package/dist/serve/mcp/endpoint.d.ts +39 -0
- package/dist/serve/mcp/endpoint.js +187 -0
- package/dist/serve/mcp/tools.d.ts +37 -0
- package/dist/serve/mcp/tools.js +125 -0
- package/dist/serve/origin.d.ts +6 -0
- package/dist/serve/origin.js +21 -0
- package/dist/serve/sessions/feed.d.ts +79 -0
- package/dist/serve/sessions/feed.js +115 -0
- package/dist/serve/sessions/socket.d.ts +56 -0
- package/dist/serve/sessions/socket.js +212 -0
- package/dist/serve/sessions/sse.d.ts +27 -0
- package/dist/serve/sessions/sse.js +26 -0
- package/dist/serve/sessions/stream.d.ts +9 -0
- package/dist/serve/sessions/stream.js +9 -0
- package/dist/serve/sessions/watch.d.ts +12 -0
- package/dist/serve/sessions/watch.js +11 -0
- package/dist/serve/wire.d.ts +16 -0
- package/dist/serve/wire.js +50 -0
- package/dist/state/blob.d.ts +71 -0
- package/dist/state/blob.js +0 -0
- package/dist/state/migration.d.ts +53 -0
- package/dist/state/migration.js +29 -0
- package/dist/tables/fleet.d.ts +170 -0
- package/dist/tables/fleet.js +214 -0
- package/dist/tables/owned.d.ts +250 -0
- package/dist/tables/owned.js +233 -0
- package/dist/testing/actor-test.d.ts +360 -0
- package/dist/testing/actor-test.js +337 -0
- package/dist/testing/cluster.d.ts +93 -0
- package/dist/testing/cluster.js +296 -0
- package/dist/testing/conformance/access.d.ts +5 -0
- package/dist/testing/conformance/access.js +531 -0
- package/dist/testing/conformance/admission.d.ts +11 -0
- package/dist/testing/conformance/admission.js +182 -0
- package/dist/testing/conformance/adoption.d.ts +2 -0
- package/dist/testing/conformance/adoption.js +1019 -0
- package/dist/testing/conformance/assertions.d.ts +202 -0
- package/dist/testing/conformance/assertions.js +849 -0
- package/dist/testing/conformance/batches.d.ts +41 -0
- package/dist/testing/conformance/batches.js +388 -0
- package/dist/testing/conformance/blobs.d.ts +14 -0
- package/dist/testing/conformance/blobs.js +405 -0
- package/dist/testing/conformance/capacity.d.ts +8 -0
- package/dist/testing/conformance/capacity.js +433 -0
- package/dist/testing/conformance/client.d.ts +5 -0
- package/dist/testing/conformance/client.js +719 -0
- package/dist/testing/conformance/cold-serve.d.ts +16 -0
- package/dist/testing/conformance/cold-serve.js +254 -0
- package/dist/testing/conformance/connections/actors.d.ts +1143 -0
- package/dist/testing/conformance/connections/actors.js +180 -0
- package/dist/testing/conformance/connections/harness.d.ts +1754 -0
- package/dist/testing/conformance/connections/harness.js +142 -0
- package/dist/testing/conformance/connections/holders.d.ts +4 -0
- package/dist/testing/conformance/connections/holders.js +165 -0
- package/dist/testing/conformance/connections/lifecycle.d.ts +4 -0
- package/dist/testing/conformance/connections/lifecycle.js +113 -0
- package/dist/testing/conformance/connections/limits.d.ts +4 -0
- package/dist/testing/conformance/connections/limits.js +127 -0
- package/dist/testing/conformance/connections/reauthorization.d.ts +4 -0
- package/dist/testing/conformance/connections/reauthorization.js +170 -0
- package/dist/testing/conformance/connections/resync.d.ts +4 -0
- package/dist/testing/conformance/connections/resync.js +360 -0
- package/dist/testing/conformance/connections/takeover.d.ts +4 -0
- package/dist/testing/conformance/connections/takeover.js +287 -0
- package/dist/testing/conformance/connections.d.ts +4 -0
- package/dist/testing/conformance/connections.js +15 -0
- package/dist/testing/conformance/content-blobs.d.ts +16 -0
- package/dist/testing/conformance/content-blobs.js +534 -0
- package/dist/testing/conformance/counter.d.ts +16 -0
- package/dist/testing/conformance/counter.js +813 -0
- package/dist/testing/conformance/cron.d.ts +5 -0
- package/dist/testing/conformance/cron.js +665 -0
- package/dist/testing/conformance/drain.d.ts +26 -0
- package/dist/testing/conformance/drain.js +540 -0
- package/dist/testing/conformance/effect-control.d.ts +38 -0
- package/dist/testing/conformance/effect-control.js +1059 -0
- package/dist/testing/conformance/effects.d.ts +23 -0
- package/dist/testing/conformance/effects.js +432 -0
- package/dist/testing/conformance/events.d.ts +28 -0
- package/dist/testing/conformance/events.js +335 -0
- package/dist/testing/conformance/export.d.ts +2 -0
- package/dist/testing/conformance/export.js +368 -0
- package/dist/testing/conformance/fleet.d.ts +444 -0
- package/dist/testing/conformance/fleet.js +1009 -0
- package/dist/testing/conformance/groups.d.ts +7 -0
- package/dist/testing/conformance/groups.js +353 -0
- package/dist/testing/conformance/heap.d.ts +3 -0
- package/dist/testing/conformance/heap.js +149 -0
- package/dist/testing/conformance/http.d.ts +2809 -0
- package/dist/testing/conformance/http.js +1234 -0
- package/dist/testing/conformance/inspection-views.d.ts +8 -0
- package/dist/testing/conformance/inspection-views.js +272 -0
- package/dist/testing/conformance/inspector.d.ts +7 -0
- package/dist/testing/conformance/inspector.js +650 -0
- package/dist/testing/conformance/mint.d.ts +58 -0
- package/dist/testing/conformance/mint.js +692 -0
- package/dist/testing/conformance/multi-runner.d.ts +8 -0
- package/dist/testing/conformance/multi-runner.js +403 -0
- package/dist/testing/conformance/neki/plan.d.ts +19 -0
- package/dist/testing/conformance/neki/plan.js +30 -0
- package/dist/testing/conformance/observability.d.ts +3 -0
- package/dist/testing/conformance/observability.js +343 -0
- package/dist/testing/conformance/offline.d.ts +4 -0
- package/dist/testing/conformance/offline.js +474 -0
- package/dist/testing/conformance/operator-harness.d.ts +57 -0
- package/dist/testing/conformance/operator-harness.js +78 -0
- package/dist/testing/conformance/operator.d.ts +3 -0
- package/dist/testing/conformance/operator.js +379 -0
- package/dist/testing/conformance/outbox-cross-shard.d.ts +14 -0
- package/dist/testing/conformance/outbox-cross-shard.js +160 -0
- package/dist/testing/conformance/outbox.d.ts +36 -0
- package/dist/testing/conformance/outbox.js +437 -0
- package/dist/testing/conformance/payload-migrations.d.ts +3 -0
- package/dist/testing/conformance/payload-migrations.js +612 -0
- package/dist/testing/conformance/pipeline.d.ts +3 -0
- package/dist/testing/conformance/pipeline.js +1040 -0
- package/dist/testing/conformance/placement.d.ts +22 -0
- package/dist/testing/conformance/placement.js +539 -0
- package/dist/testing/conformance/platform.d.ts +40 -0
- package/dist/testing/conformance/platform.js +101 -0
- package/dist/testing/conformance/progress.d.ts +39 -0
- package/dist/testing/conformance/progress.js +666 -0
- package/dist/testing/conformance/properties.d.ts +6 -0
- package/dist/testing/conformance/properties.js +295 -0
- package/dist/testing/conformance/protocols.d.ts +4 -0
- package/dist/testing/conformance/protocols.js +618 -0
- package/dist/testing/conformance/provider/advertise.d.ts +21 -0
- package/dist/testing/conformance/provider/advertise.js +44 -0
- package/dist/testing/conformance/read-your-writes.d.ts +20 -0
- package/dist/testing/conformance/read-your-writes.js +192 -0
- package/dist/testing/conformance/reducers.d.ts +8 -0
- package/dist/testing/conformance/reducers.js +258 -0
- package/dist/testing/conformance/relay.d.ts +42 -0
- package/dist/testing/conformance/relay.js +1115 -0
- package/dist/testing/conformance/restore.d.ts +43 -0
- package/dist/testing/conformance/restore.js +341 -0
- package/dist/testing/conformance/retention.d.ts +14 -0
- package/dist/testing/conformance/retention.js +463 -0
- package/dist/testing/conformance/rls.d.ts +24 -0
- package/dist/testing/conformance/rls.js +576 -0
- package/dist/testing/conformance/simulation.d.ts +31 -0
- package/dist/testing/conformance/simulation.js +167 -0
- package/dist/testing/conformance/single-shard.d.ts +2 -0
- package/dist/testing/conformance/single-shard.js +125 -0
- package/dist/testing/conformance/singleton.d.ts +3 -0
- package/dist/testing/conformance/singleton.js +293 -0
- package/dist/testing/conformance/statements.d.ts +60 -0
- package/dist/testing/conformance/statements.js +108 -0
- package/dist/testing/conformance/streams.d.ts +7 -0
- package/dist/testing/conformance/streams.js +280 -0
- package/dist/testing/conformance/subscriptions/access.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/access.js +98 -0
- package/dist/testing/conformance/subscriptions/actors.d.ts +4910 -0
- package/dist/testing/conformance/subscriptions/actors.js +372 -0
- package/dist/testing/conformance/subscriptions/cluster.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/cluster.js +89 -0
- package/dist/testing/conformance/subscriptions/delivery.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/delivery.js +253 -0
- package/dist/testing/conformance/subscriptions/deploys.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/deploys.js +162 -0
- package/dist/testing/conformance/subscriptions/epochs.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/epochs.js +169 -0
- package/dist/testing/conformance/subscriptions/failures.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/failures.js +108 -0
- package/dist/testing/conformance/subscriptions/feeds.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/feeds.js +218 -0
- package/dist/testing/conformance/subscriptions/harness.d.ts +124 -0
- package/dist/testing/conformance/subscriptions/harness.js +143 -0
- package/dist/testing/conformance/subscriptions/operator.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/operator.js +128 -0
- package/dist/testing/conformance/subscriptions/retention.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/retention.js +288 -0
- package/dist/testing/conformance/subscriptions/routing.d.ts +4 -0
- package/dist/testing/conformance/subscriptions/routing.js +179 -0
- package/dist/testing/conformance/subscriptions.d.ts +4 -0
- package/dist/testing/conformance/subscriptions.js +19 -0
- package/dist/testing/conformance/tables.d.ts +125 -0
- package/dist/testing/conformance/tables.js +664 -0
- package/dist/testing/conformance/transports/actors.d.ts +1907 -0
- package/dist/testing/conformance/transports/actors.js +163 -0
- package/dist/testing/conformance/transports/client.d.ts +3 -0
- package/dist/testing/conformance/transports/client.js +237 -0
- package/dist/testing/conformance/transports/feeds.d.ts +3 -0
- package/dist/testing/conformance/transports/feeds.js +232 -0
- package/dist/testing/conformance/transports/harness.d.ts +93 -0
- package/dist/testing/conformance/transports/harness.js +84 -0
- package/dist/testing/conformance/transports/streams.d.ts +3 -0
- package/dist/testing/conformance/transports/streams.js +96 -0
- package/dist/testing/conformance/transports/websocket.d.ts +3 -0
- package/dist/testing/conformance/transports/websocket.js +384 -0
- package/dist/testing/conformance/transports/wire.d.ts +141 -0
- package/dist/testing/conformance/transports/wire.js +204 -0
- package/dist/testing/conformance/transports.d.ts +3 -0
- package/dist/testing/conformance/transports.js +11 -0
- package/dist/testing/conformance/watch.d.ts +59 -0
- package/dist/testing/conformance/watch.js +879 -0
- package/dist/testing/conformance/workflow-engine.d.ts +97 -0
- package/dist/testing/conformance/workflow-engine.js +253 -0
- package/dist/testing/conformance/workflow-versions.d.ts +3 -0
- package/dist/testing/conformance/workflow-versions.js +545 -0
- package/dist/testing/conformance/workflows/access.d.ts +4 -0
- package/dist/testing/conformance/workflows/access.js +147 -0
- package/dist/testing/conformance/workflows/actors.d.ts +2317 -0
- package/dist/testing/conformance/workflows/actors.js +305 -0
- package/dist/testing/conformance/workflows/basics.d.ts +4 -0
- package/dist/testing/conformance/workflows/basics.js +144 -0
- package/dist/testing/conformance/workflows/engine.d.ts +4 -0
- package/dist/testing/conformance/workflows/engine.js +80 -0
- package/dist/testing/conformance/workflows/guards.d.ts +4 -0
- package/dist/testing/conformance/workflows/guards.js +172 -0
- package/dist/testing/conformance/workflows/harness.d.ts +14 -0
- package/dist/testing/conformance/workflows/harness.js +44 -0
- package/dist/testing/conformance/workflows/recovery.d.ts +4 -0
- package/dist/testing/conformance/workflows/recovery.js +181 -0
- package/dist/testing/conformance/workflows/starts.d.ts +4 -0
- package/dist/testing/conformance/workflows/starts.js +57 -0
- package/dist/testing/conformance/workflows/suspension.d.ts +4 -0
- package/dist/testing/conformance/workflows/suspension.js +106 -0
- package/dist/testing/conformance/workflows/waits.d.ts +4 -0
- package/dist/testing/conformance/workflows/waits.js +284 -0
- package/dist/testing/conformance/workflows.d.ts +4 -0
- package/dist/testing/conformance/workflows.js +19 -0
- package/dist/testing/conformance.d.ts +330 -0
- package/dist/testing/conformance.js +364 -0
- package/dist/testing/database.d.ts +31 -0
- package/dist/testing/database.js +70 -0
- package/dist/testing/foundation.d.ts +41 -0
- package/dist/testing/foundation.js +517 -0
- package/dist/testing/index.d.ts +20 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/property.d.ts +40 -0
- package/dist/testing/property.js +95 -0
- package/dist/testing/simulate-cluster.d.ts +112 -0
- package/dist/testing/simulate-cluster.js +257 -0
- package/dist/testing/simulate.d.ts +90 -0
- package/dist/testing/simulate.js +127 -0
- package/package.json +1 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { InTurn } from "./handles/intents.ts";
|
|
3
|
+
import { InStream } from "./contexts/command.ts";
|
|
4
|
+
import { type Caller } from "./identity/caller.ts";
|
|
5
|
+
import { Query } from "./members/command.ts";
|
|
6
|
+
import { Connection } from "./members/connection.ts";
|
|
7
|
+
import { Cancelled, DeadLetter } from "./members/job.ts";
|
|
8
|
+
import { blob, content } from "./members/blob.ts";
|
|
9
|
+
import { table } from "./tables/owned.ts";
|
|
10
|
+
import { Delivery } from "./members/subscription.ts";
|
|
11
|
+
/**
|
|
12
|
+
* The declaration namespace of `@rikalabs/akter`: one constructor per
|
|
13
|
+
* kind of member, the actor definition, and the ambient-context combinators.
|
|
14
|
+
* Everything here is browser-safe declaration data; serving and runtime
|
|
15
|
+
* assembly live in `@rikalabs/akter/runtime`. An invalid definition
|
|
16
|
+
* throws when it is built, not when the actor first runs.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const Increment = Actor.command("Increment", { success: Schema.Int })
|
|
20
|
+
* const Counter = Actor.make("Counter", { key: Schema.String, api: { Increment } })
|
|
21
|
+
*/
|
|
22
|
+
export declare const Actor: {
|
|
23
|
+
/** Defines an actor type: its key, state, events, tables, blobs, members, creation, schedules, jobs, subscriptions, and policy. */
|
|
24
|
+
make: import("./actor/definition.ts").Make;
|
|
25
|
+
/** Declares a command member; see `Command.make`. */
|
|
26
|
+
command: <const Tag extends string, const P extends import("./index.ts").PayloadOption = import("effect/Schema").Void, Success extends import("./members/command.ts").ValueSchema = import("effect/Schema").Void, Error extends import("./index.ts").DeclaredError = import("effect/Schema").Never>(tag: Tag, options?: {
|
|
27
|
+
readonly payload?: P | undefined;
|
|
28
|
+
readonly success?: Success | undefined;
|
|
29
|
+
readonly error?: Error | undefined;
|
|
30
|
+
} | undefined) => import("./members/command.ts").Member<"command", Tag, import("./members/command.ts").PayloadOf<P>, Success, Error>;
|
|
31
|
+
/** Declares a query member; see `Query.make`. */
|
|
32
|
+
query: <const Tag extends string, const P extends import("./index.ts").PayloadOption = import("effect/Schema").Void, Success extends import("./members/command.ts").ValueSchema = import("effect/Schema").Void, Error extends import("./index.ts").DeclaredError = import("effect/Schema").Never, const Watch extends boolean = false>(tag: Tag, options?: {
|
|
33
|
+
readonly payload?: P;
|
|
34
|
+
readonly success?: Success;
|
|
35
|
+
readonly error?: Error;
|
|
36
|
+
readonly watch?: Watch;
|
|
37
|
+
}) => Query<Tag, import("./members/command.ts").PayloadOf<P>, Success, Error, Watch>;
|
|
38
|
+
/** Declares a connection member: a long-lived session between one client and the actor. */
|
|
39
|
+
connection: <const Tag extends string, Server extends import("./members/command.ts").ValueSchema, const P extends import("./index.ts").PayloadOption = import("effect/Schema").Void, Client extends import("./members/command.ts").ValueSchema = import("effect/Schema").Never, Session extends import("./members/command.ts").ValueSchema | undefined = undefined, Error extends import("./index.ts").DeclaredError = import("effect/Schema").Never, Jobs extends import("./index.ts").ProgressJob = never>(tag: Tag, options: {
|
|
40
|
+
readonly server: Server;
|
|
41
|
+
readonly payload?: P;
|
|
42
|
+
readonly client?: Client;
|
|
43
|
+
readonly session?: Session;
|
|
44
|
+
readonly error?: Error;
|
|
45
|
+
readonly stampCursor?: boolean;
|
|
46
|
+
readonly progress?: {
|
|
47
|
+
readonly jobs: ReadonlyArray<Jobs>;
|
|
48
|
+
readonly to?: "principal" | "all";
|
|
49
|
+
};
|
|
50
|
+
}) => Connection<Tag, import("./members/command.ts").PayloadOf<P>, Server, Client, Session, Error, Jobs>;
|
|
51
|
+
/** Declares a stream member: a live, read-only feed for one subscriber. */
|
|
52
|
+
stream: <const Tag extends string, Success extends import("./members/command.ts").ValueSchema, const P extends import("./index.ts").PayloadOption = import("effect/Schema").Void, Error extends import("./index.ts").DeclaredError = import("effect/Schema").Never>(tag: Tag, options: {
|
|
53
|
+
readonly success: Success;
|
|
54
|
+
readonly payload?: P;
|
|
55
|
+
readonly error?: Error;
|
|
56
|
+
readonly progress?: {
|
|
57
|
+
readonly jobs: ReadonlyArray<import("./index.ts").ProgressJob>;
|
|
58
|
+
};
|
|
59
|
+
}) => import("./index.ts").StreamMember<Tag, import("./members/command.ts").PayloadOf<P>, Success, Error>;
|
|
60
|
+
/** Declares a workflow member and its typed step constructors. */
|
|
61
|
+
workflow: <const Tag extends string, const PayloadFields extends Readonly<Record<string, import("./members/command.ts").ValueSchema>> = {}, Success extends import("./members/command.ts").ValueSchema = import("effect/Schema").Void, Error extends import("./index.ts").DeclaredError = import("effect/Schema").Never>(tag: Tag, options?: {
|
|
62
|
+
readonly payload?: PayloadFields;
|
|
63
|
+
readonly success?: Success;
|
|
64
|
+
readonly error?: Error;
|
|
65
|
+
readonly key?: (payload: import("effect/Schema").Struct<PayloadFields>["Type"]) => string;
|
|
66
|
+
readonly versions?: Readonly<Record<string, import("./members/workflow.ts").VersionRange>>;
|
|
67
|
+
}) => import("./index.ts").Workflow<Tag, import("effect/Schema").Struct<PayloadFields>, Success, Error>;
|
|
68
|
+
/** Declares a durable event class: `const Posted = Actor.event("Posted", fields)`. */
|
|
69
|
+
event: <const Tag extends string, const Fields extends import("effect/Schema").Struct.Fields>(tag: Tag, fields: Fields, options?: import("./index.ts").PayloadOptions) => import("./index.ts").EventOf<Tag, Fields>;
|
|
70
|
+
/** Declares a pure state transition the server runs as an ordinary command turn; a batched one folds queued calls in order. */
|
|
71
|
+
reducer: import("./members/reducer.ts").MakeReducer;
|
|
72
|
+
/** Declares a job class: a request for external I/O that a turn enqueues and an executor runs after commit. */
|
|
73
|
+
job: <const Tag extends string, const Fields extends import("./members/command.ts").PayloadFields = {}, Success extends import("./members/command.ts").ValueSchema = import("effect/Schema").Void, Progress extends import("./members/command.ts").ValueSchema | undefined = undefined>(tag: Tag, options?: {
|
|
74
|
+
readonly payload?: Fields;
|
|
75
|
+
readonly success?: Success;
|
|
76
|
+
readonly progress?: Progress;
|
|
77
|
+
readonly migrations?: import("./index.ts").PayloadMigrations;
|
|
78
|
+
readonly writeVersion?: number;
|
|
79
|
+
}) => import("./index.ts").JobClass<Tag, Fields, Success, Progress>;
|
|
80
|
+
/** The payload schema of a job binding's `onDeadLetter` command: `Actor.DeadLetter(J)`. */
|
|
81
|
+
DeadLetter: typeof DeadLetter;
|
|
82
|
+
/** The payload schema of a job binding's `onCancelled` command: `Actor.Cancelled(J)`. */
|
|
83
|
+
Cancelled: typeof Cancelled;
|
|
84
|
+
/** Declares an actor's keyed state fields and their migrations. */
|
|
85
|
+
state: <const F extends Readonly<Record<string, import("./members/command.ts").ValueSchema>>>(fields: F, options?: {
|
|
86
|
+
readonly migrations?: ReadonlyArray<import("./state/migration.ts").StateMigration>;
|
|
87
|
+
}) => import("./state/migration.ts").ActorState<F>;
|
|
88
|
+
/** Declares an actor-owned Drizzle table whose rows carry the writing actor's identity. */
|
|
89
|
+
table: typeof table;
|
|
90
|
+
/** Declares named binary storage an actor lists in `blobs`. */
|
|
91
|
+
blob: typeof blob;
|
|
92
|
+
/** Declares shared content: immutable bytes stored once per tenant that actors reference by name. */
|
|
93
|
+
content: typeof content;
|
|
94
|
+
/** Builds one step of a state, event, or job migration chain. */
|
|
95
|
+
migration: <const From extends Readonly<Record<string, import("./members/command.ts").ValueSchema>>, const To extends Readonly<Record<string, import("./members/command.ts").ValueSchema>>>(from: From, to: To, upcast: import("./state/migration.ts").StateMigration<From, To>["upcast"], options?: {
|
|
96
|
+
readonly downcast?: (next: import("effect/Schema").Struct<To>["Type"]) => import("effect/Schema").Struct<From>["Type"];
|
|
97
|
+
}) => import("./state/migration.ts").StateMigration<From, To>;
|
|
98
|
+
/** The key of an actor with one instance per tenant; its handle is `X.get()`. */
|
|
99
|
+
singleton: {
|
|
100
|
+
readonly _tag: "Singleton";
|
|
101
|
+
};
|
|
102
|
+
/** Declares a subscription to another actor type's committed events. */
|
|
103
|
+
subscription: import("./members/subscription.ts").SubscriptionFunction;
|
|
104
|
+
/** The payload schema of a subscription handler, which also names the source and events it delivers. */
|
|
105
|
+
Delivery: typeof Delivery;
|
|
106
|
+
/**
|
|
107
|
+
* Ready-made `access` policies for `Actor.make`. `public` allows every caller
|
|
108
|
+
* and kind, which opens the actor to anyone who can reach the server; use it
|
|
109
|
+
* only for demos and deliberately public actors.
|
|
110
|
+
*/
|
|
111
|
+
access: {
|
|
112
|
+
public: import("./index.ts").Access;
|
|
113
|
+
};
|
|
114
|
+
/** Provided by the runtime only inside command turns; `X.intents` requires it. */
|
|
115
|
+
InTurn: typeof InTurn;
|
|
116
|
+
/** Provided by the runtime only inside stream handlers; `read.follow` requires it. */
|
|
117
|
+
InStream: typeof InStream;
|
|
118
|
+
/** Runs the piped Effect with `caller` as the ambient caller that handles capture, for trusted code that acts on behalf of a user; without it, in-process code is `System({ source: "process" })`. */
|
|
119
|
+
as: (caller: Caller) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, never>>;
|
|
120
|
+
/** Runs the piped Effect in `tenant`, for trusted code that acts on behalf of a tenant; the default tenant is `"default"`. */
|
|
121
|
+
tenant: (tenant: string) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, never>>;
|
|
122
|
+
/** Gives the command call of the piped Effect the explicit command id `id`, so a retry across processes keeps one identity. */
|
|
123
|
+
commandId: (id: string) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, never>>;
|
|
124
|
+
};
|
|
125
|
+
export type { Aggregate, AggregateKind, AnyFleetView, DerivedTable, FleetFilter, FleetOptions, FleetPage, FleetRow, FleetView, } from "./tables/fleet.ts";
|
|
126
|
+
export { Fleet } from "./tables/fleet.ts";
|
|
127
|
+
export { Actors } from "./handles/actors.ts";
|
|
128
|
+
export { Intent } from "./handles/intents.ts";
|
|
129
|
+
export { Content, ContentStore } from "./handles/content.ts";
|
|
130
|
+
export type { WorkflowRun } from "./handles/run.ts";
|
|
131
|
+
export type { ConnectionHandlers, Executors, Handle, Intents, StreamHandler, } from "./actor/definition.ts";
|
|
132
|
+
export { ActorRef, Anonymous, Caller, CurrentCaller, Tenant, User, System, Principal, } from "./identity/caller.ts";
|
|
133
|
+
export { ContentRef } from "./identity/content.ts";
|
|
134
|
+
export type { ContentEntry } from "./identity/content.ts";
|
|
135
|
+
export type { Access, AccessRequest } from "./policies/access.ts";
|
|
136
|
+
export type { Policy } from "./policies/command.ts";
|
|
137
|
+
export { ActorError, ActorUnavailable, CommandConflict, CommandExpired, InvalidCommandId, InvalidInput, Unauthorized, Timeout, NotCreated, MailboxFull, RunnerAtCapacity, QuotaExceeded, SpendLimitExceeded, ConnectionLimitExceeded, StorageQuotaExceeded, SessionEnded, } from "./errors/actor.ts";
|
|
138
|
+
export { RetentionGap, UnknownCursor } from "./errors/events.ts";
|
|
139
|
+
export { ContentTooLarge, InvalidContentRef } from "./errors/content.ts";
|
|
140
|
+
export { ActivityOutcomeUnknown, InvalidExecutionId, InvalidExecutionKey, } from "./errors/workflow.ts";
|
|
141
|
+
export type { Race, Sleep, Step, Wait, Workflow } from "./members/workflow.ts";
|
|
142
|
+
export type { AnyConnection, Connection } from "./members/connection.ts";
|
|
143
|
+
export type { AnyStream, Stream as StreamMember } from "./members/stream.ts";
|
|
144
|
+
export type { AnyJob, JobBinding, JobClass, ProgressJob, ProgressOf } from "./members/job.ts";
|
|
145
|
+
export type { EventOf } from "./members/event.ts";
|
|
146
|
+
export type { DeclaredError, PayloadOption } from "./members/command.ts";
|
|
147
|
+
export type { PayloadMigrations, PayloadOptions } from "./members/payload.ts";
|
|
148
|
+
export type { Batch, Reducer } from "./members/reducer.ts";
|
|
149
|
+
export type { AnyBlob, AnyContent, Blob, ContentBlob } from "./members/blob.ts";
|
|
150
|
+
export type { AnySubscription, DeliveredEvent, DeliveredGap, DeliveredRejection, Delivery, DeliverySchema, Route, SubscribeContext, SubscribeFrom, Subscription, } from "./members/subscription.ts";
|
|
151
|
+
export type { CommandContext, EventEntry, QueryContext, Turn } from "./contexts/command.ts";
|
|
152
|
+
export type { WorkflowContext } from "./contexts/workflow.ts";
|
|
153
|
+
export type { EnqueueContext, EnqueueOptions, ExecutorContext } from "./contexts/job.ts";
|
|
154
|
+
export type { BroadcastContext, BroadcastOptions, ConnectionContext, ConnectionInfo, FrameOf, SessionAccess, } from "./contexts/connection.ts";
|
|
155
|
+
export type { BlobRead, BlobWrite, ContentRead, ContentWrite } from "./state/blob.ts";
|
|
156
|
+
export type { Filter, Filtered, Group, GroupDatabase, Insert, ListOptions, Order, AdoptedTable, AdoptOptions, OwnedTable, OwnerColumns, ReadAdoptedTable, ReadOptions, Row, ScopedRead, ScopedRows, } from "./tables/owned.ts";
|
|
157
|
+
export { ASSERTION_HEADER, ASSERTION_TYPE, canonicalRequest, KEY_REFRESH_PATH, KEY_REFRESH_TYPE, reauthenticationDigest, requestDigest, } from "./serve/assertion/binding.ts";
|
|
158
|
+
export type { BoundRequest } from "./serve/assertion/binding.ts";
|
|
159
|
+
export { ClientWireMessage, ServerWireMessage, SUBPROTOCOL } from "./protocol/frames.ts";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { Definition } from "./actor/definition.js";
|
|
3
|
+
import { InTurn } from "./handles/intents.js";
|
|
4
|
+
import { InStream } from "./contexts/command.js";
|
|
5
|
+
import { CurrentCommandId } from "./identity/command.js";
|
|
6
|
+
import { CurrentCaller, Tenant } from "./identity/caller.js";
|
|
7
|
+
import { Command, Query } from "./members/command.js";
|
|
8
|
+
import { Connection } from "./members/connection.js";
|
|
9
|
+
import { StreamMember } from "./members/stream.js";
|
|
10
|
+
import { EventMember } from "./members/event.js";
|
|
11
|
+
import { Reducer } from "./members/reducer.js";
|
|
12
|
+
import { Cancelled, DeadLetter, JobMember } from "./members/job.js";
|
|
13
|
+
import { ActorStates } from "./state/migration.js";
|
|
14
|
+
import { blob, content } from "./members/blob.js";
|
|
15
|
+
import { table } from "./tables/owned.js";
|
|
16
|
+
import { WorkflowMember } from "./runtime/workflows/steps.js";
|
|
17
|
+
import { Delivery, SubscriptionMember } from "./members/subscription.js";
|
|
18
|
+
import { publicAccess } from "./policies/access.js";
|
|
19
|
+
/**
|
|
20
|
+
* The declaration namespace of `@rikalabs/akter`: one constructor per
|
|
21
|
+
* kind of member, the actor definition, and the ambient-context combinators.
|
|
22
|
+
* Everything here is browser-safe declaration data; serving and runtime
|
|
23
|
+
* assembly live in `@rikalabs/akter/runtime`. An invalid definition
|
|
24
|
+
* throws when it is built, not when the actor first runs.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* const Increment = Actor.command("Increment", { success: Schema.Int })
|
|
28
|
+
* const Counter = Actor.make("Counter", { key: Schema.String, api: { Increment } })
|
|
29
|
+
*/
|
|
30
|
+
export const Actor = {
|
|
31
|
+
/** Defines an actor type: its key, state, events, tables, blobs, members, creation, schedules, jobs, subscriptions, and policy. */
|
|
32
|
+
make: Definition.make,
|
|
33
|
+
/** Declares a command member; see `Command.make`. */
|
|
34
|
+
command: Command.make,
|
|
35
|
+
/** Declares a query member; see `Query.make`. */
|
|
36
|
+
query: Query.make,
|
|
37
|
+
/** Declares a connection member: a long-lived session between one client and the actor. */
|
|
38
|
+
connection: Connection.make,
|
|
39
|
+
/** Declares a stream member: a live, read-only feed for one subscriber. */
|
|
40
|
+
stream: StreamMember.make,
|
|
41
|
+
/** Declares a workflow member and its typed step constructors. */
|
|
42
|
+
workflow: WorkflowMember.make,
|
|
43
|
+
/** Declares a durable event class: `const Posted = Actor.event("Posted", fields)`. */
|
|
44
|
+
event: EventMember.make,
|
|
45
|
+
/** Declares a pure state transition the server runs as an ordinary command turn; a batched one folds queued calls in order. */
|
|
46
|
+
reducer: Reducer.make,
|
|
47
|
+
/** Declares a job class: a request for external I/O that a turn enqueues and an executor runs after commit. */
|
|
48
|
+
job: JobMember.make,
|
|
49
|
+
/** The payload schema of a job binding's `onDeadLetter` command: `Actor.DeadLetter(J)`. */
|
|
50
|
+
DeadLetter,
|
|
51
|
+
/** The payload schema of a job binding's `onCancelled` command: `Actor.Cancelled(J)`. */
|
|
52
|
+
Cancelled,
|
|
53
|
+
/** Declares an actor's keyed state fields and their migrations. */
|
|
54
|
+
state: ActorStates.make,
|
|
55
|
+
/** Declares an actor-owned Drizzle table whose rows carry the writing actor's identity. */
|
|
56
|
+
table,
|
|
57
|
+
/** Declares named binary storage an actor lists in `blobs`. */
|
|
58
|
+
blob,
|
|
59
|
+
/** Declares shared content: immutable bytes stored once per tenant that actors reference by name. */
|
|
60
|
+
content,
|
|
61
|
+
/** Builds one step of a state, event, or job migration chain. */
|
|
62
|
+
migration: ActorStates.migration,
|
|
63
|
+
/** The key of an actor with one instance per tenant; its handle is `X.get()`. */
|
|
64
|
+
singleton: Definition.singleton,
|
|
65
|
+
/** Declares a subscription to another actor type's committed events. */
|
|
66
|
+
subscription: SubscriptionMember.make,
|
|
67
|
+
/** The payload schema of a subscription handler, which also names the source and events it delivers. */
|
|
68
|
+
Delivery,
|
|
69
|
+
/**
|
|
70
|
+
* Ready-made `access` policies for `Actor.make`. `public` allows every caller
|
|
71
|
+
* and kind, which opens the actor to anyone who can reach the server; use it
|
|
72
|
+
* only for demos and deliberately public actors.
|
|
73
|
+
*/
|
|
74
|
+
access: { public: publicAccess },
|
|
75
|
+
/** Provided by the runtime only inside command turns; `X.intents` requires it. */
|
|
76
|
+
InTurn,
|
|
77
|
+
/** Provided by the runtime only inside stream handlers; `read.follow` requires it. */
|
|
78
|
+
InStream,
|
|
79
|
+
/** Runs the piped Effect with `caller` as the ambient caller that handles capture, for trusted code that acts on behalf of a user; without it, in-process code is `System({ source: "process" })`. */
|
|
80
|
+
as: (caller) => (effect) => Effect.provideService(effect, CurrentCaller, caller),
|
|
81
|
+
/** Runs the piped Effect in `tenant`, for trusted code that acts on behalf of a tenant; the default tenant is `"default"`. */
|
|
82
|
+
tenant: (tenant) => (effect) => Effect.provideService(effect, Tenant, tenant),
|
|
83
|
+
/** Gives the command call of the piped Effect the explicit command id `id`, so a retry across processes keeps one identity. */
|
|
84
|
+
commandId: (id) => (effect) => Effect.provideService(effect, CurrentCommandId, id),
|
|
85
|
+
};
|
|
86
|
+
export { Fleet } from "./tables/fleet.js";
|
|
87
|
+
export { Actors } from "./handles/actors.js";
|
|
88
|
+
export { Intent } from "./handles/intents.js";
|
|
89
|
+
export { Content, ContentStore } from "./handles/content.js";
|
|
90
|
+
export { ActorRef, Anonymous, Caller, CurrentCaller, Tenant, User, System, Principal, } from "./identity/caller.js";
|
|
91
|
+
export { ContentRef } from "./identity/content.js";
|
|
92
|
+
export { ActorError, ActorUnavailable, CommandConflict, CommandExpired, InvalidCommandId, InvalidInput, Unauthorized, Timeout, NotCreated, MailboxFull, RunnerAtCapacity, QuotaExceeded, SpendLimitExceeded, ConnectionLimitExceeded, StorageQuotaExceeded, SessionEnded, } from "./errors/actor.js";
|
|
93
|
+
export { RetentionGap, UnknownCursor } from "./errors/events.js";
|
|
94
|
+
export { ContentTooLarge, InvalidContentRef } from "./errors/content.js";
|
|
95
|
+
export { ActivityOutcomeUnknown, InvalidExecutionId, InvalidExecutionKey, } from "./errors/workflow.js";
|
|
96
|
+
export { ASSERTION_HEADER, ASSERTION_TYPE, canonicalRequest, KEY_REFRESH_PATH, KEY_REFRESH_TYPE, reauthenticationDigest, requestDigest, } from "./serve/assertion/binding.js";
|
|
97
|
+
export { ClientWireMessage, ServerWireMessage, SUBPROTOCOL } from "./protocol/frames.js";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
declare const BlobTypeId: unique symbol;
|
|
2
|
+
declare const ContentTypeId: unique symbol;
|
|
3
|
+
/**
|
|
4
|
+
* A declared blob: named binary entries each actor of a listing type stores in
|
|
5
|
+
* `actor_blobs`, scoped like every other row the actor owns.
|
|
6
|
+
*/
|
|
7
|
+
export interface Blob<Name extends string = string> {
|
|
8
|
+
readonly [BlobTypeId]: Name;
|
|
9
|
+
readonly kind: "blob";
|
|
10
|
+
readonly name: Name;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Declared content: named references to immutable bytes stored once per
|
|
14
|
+
* tenant. A turn attaches and detaches references; only off-turn reads see bytes.
|
|
15
|
+
*/
|
|
16
|
+
export interface ContentBlob<Name extends string = string> {
|
|
17
|
+
readonly [ContentTypeId]: Name;
|
|
18
|
+
readonly kind: "content";
|
|
19
|
+
readonly name: Name;
|
|
20
|
+
}
|
|
21
|
+
/** Any declared content, whatever its name. */
|
|
22
|
+
export type AnyContent = ContentBlob<string>;
|
|
23
|
+
/** Anything an actor lists in `blobs`: its own mutable bytes or references to shared content. */
|
|
24
|
+
export type AnyBlob = Blob<string> | AnyContent;
|
|
25
|
+
/** Whether `value` was made by `blob` or `content`. */
|
|
26
|
+
export declare const isBlob: (value: unknown) => value is AnyBlob;
|
|
27
|
+
/** Whether a declared blob is content. Tolerates a value that is not a blob at all, which the declared-blob check then refuses. */
|
|
28
|
+
export declare const isContent: (value: AnyBlob) => value is AnyContent;
|
|
29
|
+
/**
|
|
30
|
+
* `Actor.blob`: declares binary storage an actor lists in `blobs`; the name
|
|
31
|
+
* keys its entries. Throws unless `name` is 1-80 letters, digits, `-` or `_`,
|
|
32
|
+
* starting with a letter.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* const Avatar = Actor.blob("avatar")
|
|
36
|
+
*/
|
|
37
|
+
export declare const blob: <const Name extends string>(name: Name) => Blob<Name>;
|
|
38
|
+
/**
|
|
39
|
+
* Declares shared content an actor lists in `blobs`; the name keys its
|
|
40
|
+
* references. The name rules are those of `blob`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const content: <const Name extends string>(name: Name) => ContentBlob<Name>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Predicate } from "effect";
|
|
2
|
+
/** Only values made by `blob` and `content` are registered, so a look-alike object cannot name another namespace. */
|
|
3
|
+
const declared = new WeakSet();
|
|
4
|
+
/** Whether `value` was made by `blob` or `content`. */
|
|
5
|
+
export const isBlob = (value) => value instanceof Object && declared.has(value);
|
|
6
|
+
/** Whether a declared blob is content. Tolerates a value that is not a blob at all, which the declared-blob check then refuses. */
|
|
7
|
+
export const isContent = (value) => Predicate.hasProperty(value, "kind") && value.kind === "content";
|
|
8
|
+
const NAME = /^[A-Za-z][A-Za-z0-9_-]{0,79}$/;
|
|
9
|
+
const declare = (kind, name) => {
|
|
10
|
+
if (!NAME.test(name))
|
|
11
|
+
throw new Error(`Blob name ${name} must be 1-80 letters, digits, - or _, starting with a letter`);
|
|
12
|
+
const value = Object.freeze({ kind, name });
|
|
13
|
+
declared.add(value);
|
|
14
|
+
return value;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* `Actor.blob`: declares binary storage an actor lists in `blobs`; the name
|
|
18
|
+
* keys its entries. Throws unless `name` is 1-80 letters, digits, `-` or `_`,
|
|
19
|
+
* starting with a letter.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const Avatar = Actor.blob("avatar")
|
|
23
|
+
*/
|
|
24
|
+
export const blob = (name) => declare("blob", name);
|
|
25
|
+
/**
|
|
26
|
+
* Declares shared content an actor lists in `blobs`; the name keys its
|
|
27
|
+
* references. The name rules are those of `blob`.
|
|
28
|
+
*/
|
|
29
|
+
export const content = (name) => declare("content", name);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { type Cause, Schema } from "effect";
|
|
2
|
+
/** A schema that needs no Effect services to encode or decode, so a member codec runs anywhere. */
|
|
3
|
+
export type ValueSchema = Schema.Top & {
|
|
4
|
+
readonly DecodingServices: never;
|
|
5
|
+
readonly EncodingServices: never;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* The `error` schema of a member: a tagged error class, a `Schema.Union` of
|
|
9
|
+
* them, or `Schema.Never`. A handler may fail with its values and callers
|
|
10
|
+
* receive them as typed failures; a framework reason can never masquerade as one.
|
|
11
|
+
*/
|
|
12
|
+
export type DeclaredError = ValueSchema & {
|
|
13
|
+
readonly Type: Cause.YieldableError & {
|
|
14
|
+
readonly _tag: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
/** The struct fields a `payload` option may name instead of a schema. */
|
|
18
|
+
export type PayloadFields = Readonly<Record<string, ValueSchema>>;
|
|
19
|
+
/** A `payload` option: a schema, or struct fields that stand for `Schema.Struct(fields)`. */
|
|
20
|
+
export type PayloadOption = ValueSchema | PayloadFields;
|
|
21
|
+
/** The schema a `payload` option stands for. */
|
|
22
|
+
export type PayloadOf<P extends PayloadOption> = P extends ValueSchema ? P : P extends Schema.Struct.Fields ? Schema.Struct<P> : never;
|
|
23
|
+
/** The kinds of member an actor definition lists. */
|
|
24
|
+
export type MemberKind = "command" | "query" | "reducer" | "connection" | "stream" | "workflow";
|
|
25
|
+
/**
|
|
26
|
+
* An `api` or `internal` member. Commands and reducers run as fenced,
|
|
27
|
+
* receipted turns; queries read committed state without an activation.
|
|
28
|
+
*/
|
|
29
|
+
export interface Member<Kind extends MemberKind, Tag extends string, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError> {
|
|
30
|
+
readonly kind: Kind;
|
|
31
|
+
readonly tag: Tag;
|
|
32
|
+
readonly payload: Payload;
|
|
33
|
+
readonly success: Success;
|
|
34
|
+
readonly error: Error;
|
|
35
|
+
}
|
|
36
|
+
/** A command member: a fenced, receipted turn that may change state, emit events, and stage intents and jobs. */
|
|
37
|
+
export type Command<Tag extends string, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError> = Member<"command", Tag, Payload, Success, Error>;
|
|
38
|
+
/**
|
|
39
|
+
* A query member: reads committed state without activating the actor, taking
|
|
40
|
+
* the fence, or writing a receipt. A `watch` query can also be observed: its
|
|
41
|
+
* handler may use only `Read`, so the runtime can record what it read.
|
|
42
|
+
*/
|
|
43
|
+
export type Query<Tag extends string, Payload extends ValueSchema, Success extends ValueSchema, Error extends DeclaredError, Watch extends boolean = boolean> = Member<"query", Tag, Payload, Success, Error> & {
|
|
44
|
+
readonly watch: Watch;
|
|
45
|
+
};
|
|
46
|
+
/** Any `api` or `internal` member, whatever its schemas. */
|
|
47
|
+
export type AnyMember = Member<MemberKind, string, ValueSchema, ValueSchema, DeclaredError>;
|
|
48
|
+
/** Any command, whatever its schemas. */
|
|
49
|
+
export type AnyCommand = Command<string, ValueSchema, ValueSchema, DeclaredError>;
|
|
50
|
+
/** A record of members keyed by tag, as used by the `api` and `internal` definition sections. */
|
|
51
|
+
export type MemberRecord = Readonly<Record<string, AnyMember>>;
|
|
52
|
+
/** A record of commands keyed by tag. */
|
|
53
|
+
export type CommandRecord = Readonly<Record<string, AnyCommand>>;
|
|
54
|
+
/** Normalizes a `payload` option once: struct fields become `Schema.Struct(fields)`. */
|
|
55
|
+
export declare const payloadSchema: <P extends PayloadOption>(payload: P | undefined) => PayloadOf<P>;
|
|
56
|
+
/**
|
|
57
|
+
* The tagged error classes an `error` schema admits, flattening unions;
|
|
58
|
+
* `Schema.Never` admits none. The served protocol assigns each one its status.
|
|
59
|
+
*/
|
|
60
|
+
export declare const declaredErrors: (error: DeclaredError) => ReadonlyArray<DeclaredError>;
|
|
61
|
+
/**
|
|
62
|
+
* Builds a member of `kind`: `payload` and `success` default to `Schema.Void`
|
|
63
|
+
* and `error` to `Schema.Never`.
|
|
64
|
+
*/
|
|
65
|
+
export declare const member: <Kind extends MemberKind>(kind: Kind) => <const Tag extends string, const P extends PayloadOption = Schema.Void, Success extends ValueSchema = Schema.Void, Error extends DeclaredError = Schema.Never>(tag: Tag, options?: {
|
|
66
|
+
readonly payload?: P;
|
|
67
|
+
readonly success?: Success;
|
|
68
|
+
readonly error?: Error;
|
|
69
|
+
}) => Member<Kind, Tag, PayloadOf<P>, Success, Error>;
|
|
70
|
+
/**
|
|
71
|
+
* `Command.make` is `Actor.command`: declares a command by tag. `payload` is a
|
|
72
|
+
* schema or struct fields and `success` a schema, both `Schema.Void` when
|
|
73
|
+
* omitted; `error` is the tagged error class, or `Schema.Union` of them, its
|
|
74
|
+
* handler may fail with, which callers receive as typed failures.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* const Increment = Actor.command("Increment", {
|
|
78
|
+
* payload: { by: Schema.Int },
|
|
79
|
+
* success: Schema.Int,
|
|
80
|
+
* })
|
|
81
|
+
*/
|
|
82
|
+
export declare const Command: {
|
|
83
|
+
make: <const Tag extends string, const P extends PayloadOption = Schema.Void, Success extends ValueSchema = Schema.Void, Error extends DeclaredError = Schema.Never>(tag: Tag, options?: {
|
|
84
|
+
readonly payload?: P | undefined;
|
|
85
|
+
readonly success?: Success | undefined;
|
|
86
|
+
readonly error?: Error | undefined;
|
|
87
|
+
} | undefined) => Member<"command", Tag, PayloadOf<P>, Success, Error>;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* `Query.make` is `Actor.query`: declares a query by tag, with the same
|
|
91
|
+
* options as a command. A query reads committed state only and never
|
|
92
|
+
* activates the actor. With `watch: true` the query can also be observed
|
|
93
|
+
* (`handle.Total.watch()`): its handler may require nothing but `X.Read`,
|
|
94
|
+
* because the runtime records which state, event classes, tables, and blobs
|
|
95
|
+
* each rerun reads and reruns only after a commit that wrote one of them. It
|
|
96
|
+
* sees the clock and random sources as of its rerun, and they trigger no
|
|
97
|
+
* rerun of their own.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* const Total = Actor.query("Total", { success: Schema.Int, watch: true })
|
|
101
|
+
*/
|
|
102
|
+
export declare const Query: {
|
|
103
|
+
make: <const Tag extends string, const P extends PayloadOption = Schema.Void, Success extends ValueSchema = Schema.Void, Error extends DeclaredError = Schema.Never, const Watch extends boolean = false>(tag: Tag, options?: {
|
|
104
|
+
readonly payload?: P;
|
|
105
|
+
readonly success?: Success;
|
|
106
|
+
readonly error?: Error;
|
|
107
|
+
readonly watch?: Watch;
|
|
108
|
+
}) => Query<Tag, PayloadOf<P>, Success, Error, Watch>;
|
|
109
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Predicate, Schema, SchemaAST } from "effect";
|
|
2
|
+
/** Normalizes a `payload` option once: struct fields become `Schema.Struct(fields)`. */
|
|
3
|
+
export const payloadSchema = (payload) => (payload === undefined
|
|
4
|
+
? Schema.Void
|
|
5
|
+
: Schema.isSchema(payload)
|
|
6
|
+
? payload
|
|
7
|
+
: Schema.Struct(payload));
|
|
8
|
+
/**
|
|
9
|
+
* The tagged error classes an `error` schema admits, flattening unions;
|
|
10
|
+
* `Schema.Never` admits none. The served protocol assigns each one its status.
|
|
11
|
+
*/
|
|
12
|
+
export const declaredErrors = (error) => {
|
|
13
|
+
if (SchemaAST.isNever(error.ast))
|
|
14
|
+
return [];
|
|
15
|
+
if (Predicate.hasProperty(error, "members") && Array.isArray(error.members))
|
|
16
|
+
return error.members.flatMap(declaredErrors);
|
|
17
|
+
return [error];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Builds a member of `kind`: `payload` and `success` default to `Schema.Void`
|
|
21
|
+
* and `error` to `Schema.Never`.
|
|
22
|
+
*/
|
|
23
|
+
export const member = (kind) => (tag, options) => ({
|
|
24
|
+
kind,
|
|
25
|
+
tag,
|
|
26
|
+
payload: payloadSchema(options?.payload),
|
|
27
|
+
success: (options?.success ?? Schema.Void),
|
|
28
|
+
error: (options?.error ?? Schema.Never),
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* `Command.make` is `Actor.command`: declares a command by tag. `payload` is a
|
|
32
|
+
* schema or struct fields and `success` a schema, both `Schema.Void` when
|
|
33
|
+
* omitted; `error` is the tagged error class, or `Schema.Union` of them, its
|
|
34
|
+
* handler may fail with, which callers receive as typed failures.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const Increment = Actor.command("Increment", {
|
|
38
|
+
* payload: { by: Schema.Int },
|
|
39
|
+
* success: Schema.Int,
|
|
40
|
+
* })
|
|
41
|
+
*/
|
|
42
|
+
export const Command = { make: member("command") };
|
|
43
|
+
/**
|
|
44
|
+
* `Query.make` is `Actor.query`: declares a query by tag, with the same
|
|
45
|
+
* options as a command. A query reads committed state only and never
|
|
46
|
+
* activates the actor. With `watch: true` the query can also be observed
|
|
47
|
+
* (`handle.Total.watch()`): its handler may require nothing but `X.Read`,
|
|
48
|
+
* because the runtime records which state, event classes, tables, and blobs
|
|
49
|
+
* each rerun reads and reruns only after a commit that wrote one of them. It
|
|
50
|
+
* sees the clock and random sources as of its rerun, and they trigger no
|
|
51
|
+
* rerun of their own.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const Total = Actor.query("Total", { success: Schema.Int, watch: true })
|
|
55
|
+
*/
|
|
56
|
+
export const Query = {
|
|
57
|
+
make: (tag, options) => ({
|
|
58
|
+
...member("query")(tag, options),
|
|
59
|
+
watch: (options?.watch ?? false),
|
|
60
|
+
}),
|
|
61
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import { type DeclaredError, type Member, type PayloadOf, type PayloadOption, type ValueSchema } from "./command.ts";
|
|
3
|
+
import type { ProgressJob } from "./job.ts";
|
|
4
|
+
/**
|
|
5
|
+
* A long-lived session between one client and one actor. Its `payload` is
|
|
6
|
+
* the open params; `server` frames flow to the client and `client` frames to the
|
|
7
|
+
* actor; `session` is the per-connection state the handlers may set.
|
|
8
|
+
*/
|
|
9
|
+
export interface Connection<Tag extends string, Params extends ValueSchema, Server extends ValueSchema, Client extends ValueSchema, Session extends ValueSchema | undefined, Error extends DeclaredError, Jobs extends ProgressJob = never> extends Member<"connection", Tag, Params, typeof Schema.Void, Error> {
|
|
10
|
+
readonly server: Server;
|
|
11
|
+
readonly client: Client;
|
|
12
|
+
readonly session: Session;
|
|
13
|
+
/** Stamp member frames with the flushed-through cursor and event cursor. Default true. */
|
|
14
|
+
readonly stampCursor: boolean;
|
|
15
|
+
/** Executor progress this member's connections receive, if any. */
|
|
16
|
+
readonly progress: ConnectionProgress<Jobs> | undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The jobs whose executor progress a connection member receives, and to
|
|
20
|
+
* whom: `"principal"` (the default) only connections whose caller has the
|
|
21
|
+
* enqueueing turn's principal, `"all"` every open connection of the member.
|
|
22
|
+
*/
|
|
23
|
+
interface ConnectionProgress<Jobs extends ProgressJob> {
|
|
24
|
+
readonly jobs: ReadonlyArray<Jobs>;
|
|
25
|
+
readonly to: "principal" | "all";
|
|
26
|
+
}
|
|
27
|
+
/** Any connection member, whatever its schemas. */
|
|
28
|
+
export type AnyConnection = Connection<string, ValueSchema, ValueSchema, ValueSchema, ValueSchema | undefined, DeclaredError, ProgressJob>;
|
|
29
|
+
declare const make: <const Tag extends string, Server extends ValueSchema, const P extends PayloadOption = typeof Schema.Void, Client extends ValueSchema = typeof Schema.Never, Session extends ValueSchema | undefined = undefined, Error extends DeclaredError = typeof Schema.Never, Jobs extends ProgressJob = never>(tag: Tag, options: {
|
|
30
|
+
readonly server: Server;
|
|
31
|
+
readonly payload?: P;
|
|
32
|
+
readonly client?: Client;
|
|
33
|
+
readonly session?: Session;
|
|
34
|
+
readonly error?: Error;
|
|
35
|
+
readonly stampCursor?: boolean;
|
|
36
|
+
readonly progress?: {
|
|
37
|
+
readonly jobs: ReadonlyArray<Jobs>;
|
|
38
|
+
readonly to?: "principal" | "all";
|
|
39
|
+
};
|
|
40
|
+
}) => Connection<Tag, PayloadOf<P>, Server, Client, Session, Error, Jobs>;
|
|
41
|
+
/**
|
|
42
|
+
* `Connection.make` is `Actor.connection`: declares a connection by tag.
|
|
43
|
+
* `server` types the frames sent to the client; `payload` the open params,
|
|
44
|
+
* `client` the frames it may send, and `session` the per-connection state
|
|
45
|
+
* handlers may set. Throws when the tag starts with `$`, which names framework
|
|
46
|
+
* members such as the one an event feed opens, or when a frame schema uses a
|
|
47
|
+
* reserved control tag (`Resync`, `ResyncReplayed`, `ResyncDone`).
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* const Room = Actor.connection("Room", { server: Message, client: Say })
|
|
51
|
+
*/
|
|
52
|
+
export declare const Connection: {
|
|
53
|
+
make: typeof make;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Schema, SchemaAST } from "effect";
|
|
2
|
+
import { member, } from "./command.js";
|
|
3
|
+
/** Tags reserved for framework control frames, which travel in their own envelope variant. */
|
|
4
|
+
const CONTROL_TAGS = new Set(["Resync", "ResyncReplayed", "ResyncDone"]);
|
|
5
|
+
const taggedIdentifiers = (schema) => {
|
|
6
|
+
const ast = SchemaAST.toEncoded(schema.ast);
|
|
7
|
+
const members = SchemaAST.isUnion(ast) ? ast.types : [ast];
|
|
8
|
+
const tags = [];
|
|
9
|
+
for (const member of members)
|
|
10
|
+
if (SchemaAST.isObjects(member))
|
|
11
|
+
for (const signature of member.propertySignatures)
|
|
12
|
+
if (signature.name === "_tag" && SchemaAST.isLiteral(signature.type))
|
|
13
|
+
tags.push(String(signature.type.literal));
|
|
14
|
+
return tags;
|
|
15
|
+
};
|
|
16
|
+
const make = (tag, options) => {
|
|
17
|
+
if (tag.startsWith("$"))
|
|
18
|
+
throw new Error(`Connection ${tag} may not start with $`);
|
|
19
|
+
for (const schema of [options.server, options.client])
|
|
20
|
+
if (schema !== undefined)
|
|
21
|
+
for (const reserved of taggedIdentifiers(schema))
|
|
22
|
+
if (CONTROL_TAGS.has(reserved))
|
|
23
|
+
throw new Error(`Connection ${tag} frames may not use the control tag ${reserved}`);
|
|
24
|
+
return {
|
|
25
|
+
...member("connection")(tag, {
|
|
26
|
+
payload: options.payload,
|
|
27
|
+
error: options.error,
|
|
28
|
+
}),
|
|
29
|
+
server: options.server,
|
|
30
|
+
client: (options.client ?? Schema.Never),
|
|
31
|
+
session: options.session,
|
|
32
|
+
stampCursor: options.stampCursor ?? true,
|
|
33
|
+
progress: options.progress === undefined
|
|
34
|
+
? undefined
|
|
35
|
+
: { jobs: options.progress.jobs, to: options.progress.to ?? "principal" },
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* `Connection.make` is `Actor.connection`: declares a connection by tag.
|
|
40
|
+
* `server` types the frames sent to the client; `payload` the open params,
|
|
41
|
+
* `client` the frames it may send, and `session` the per-connection state
|
|
42
|
+
* handlers may set. Throws when the tag starts with `$`, which names framework
|
|
43
|
+
* members such as the one an event feed opens, or when a frame schema uses a
|
|
44
|
+
* reserved control tag (`Resync`, `ResyncReplayed`, `ResyncDone`).
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* const Room = Actor.connection("Room", { server: Message, client: Say })
|
|
48
|
+
*/
|
|
49
|
+
export const Connection = { make };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
import type { ValueSchema } from "./command.ts";
|
|
3
|
+
import { type PayloadOptions } from "./payload.ts";
|
|
4
|
+
/**
|
|
5
|
+
* A declared event class. Its schema identifier is its tag, which is stored
|
|
6
|
+
* with each committed event so replay can filter and decode by class.
|
|
7
|
+
*/
|
|
8
|
+
export type EventClass = ValueSchema & {
|
|
9
|
+
readonly identifier: string;
|
|
10
|
+
readonly Type: {
|
|
11
|
+
readonly _tag: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
/** The class `Actor.event` returns for tag `Tag` and fields `Fields`. */
|
|
15
|
+
export type EventOf<Tag extends string, Fields extends Schema.Struct.Fields> = Schema.Class<Schema.TaggedStruct<Tag, Fields>["Type"], Schema.TaggedStruct<Tag, Fields>, {}>;
|
|
16
|
+
/**
|
|
17
|
+
* `EventMember.make` is `Actor.event`: declares a durable event class. Its schema identifier is
|
|
18
|
+
* fixed to the tag, so a stored event names its class. `migrations` upcasts
|
|
19
|
+
* events stored at older versions when they are read; stored events are never
|
|
20
|
+
* rewritten. An invalid migration chain throws when the class is built. The
|
|
21
|
+
* value is itself the class: `Posted.make(...)`, `new Posted(...)`, and
|
|
22
|
+
* `instanceof` all work.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* const Posted = Actor.event("Posted", { text: Schema.String })
|
|
26
|
+
*/
|
|
27
|
+
declare const make: <const Tag extends string, const Fields extends Schema.Struct.Fields>(tag: Tag, fields: Fields, options?: PayloadOptions) => EventOf<Tag, Fields>;
|
|
28
|
+
/** `Actor.event`; see `make`. */
|
|
29
|
+
export declare const EventMember: {
|
|
30
|
+
make: typeof make;
|
|
31
|
+
};
|
|
32
|
+
/** Entries one `read.events` call returns when the reader names no `limit`. */
|
|
33
|
+
export declare const DEFAULT_REPLAY_LIMIT = 1000;
|
|
34
|
+
/** The largest page a reader may ask for; it bounds rows per page, not their bytes. */
|
|
35
|
+
export declare const MAX_REPLAY_LIMIT = 10000;
|
|
36
|
+
export {};
|