@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
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { is, sql } from "drizzle-orm";
|
|
2
|
+
import { bigint, ForeignKeyBuilder, IndexBuilder, pgPolicy, PgTable, PrimaryKeyBuilder, primaryKey, text, unique, UniqueConstraintBuilder, } from "drizzle-orm/pg-core";
|
|
3
|
+
/** Ownership column keys, which are also their SQL names. */
|
|
4
|
+
export const OWNERSHIP = ["routing_key", "tenant_id", "actor_id"];
|
|
5
|
+
const ownershipColumns = () => ({
|
|
6
|
+
routing_key: bigint("routing_key", { mode: "bigint" }).notNull(),
|
|
7
|
+
tenant_id: text("tenant_id").notNull(),
|
|
8
|
+
actor_id: text("actor_id").notNull(),
|
|
9
|
+
});
|
|
10
|
+
const NameKey = Symbol.for("drizzle:Name");
|
|
11
|
+
const SchemaKey = Symbol.for("drizzle:Schema");
|
|
12
|
+
const ColumnsKey = Symbol.for("drizzle:Columns");
|
|
13
|
+
const ExtraColumnsKey = Symbol.for("drizzle:ExtraConfigColumns");
|
|
14
|
+
const ExtraConfigKey = Symbol.for("drizzle:ExtraConfigBuilder");
|
|
15
|
+
const IsAliasKey = Symbol.for("drizzle:IsAlias");
|
|
16
|
+
const ForeignKeysKey = Symbol.for("drizzle:PgInlineForeignKeys");
|
|
17
|
+
/** Ownership lives beside the table, keyed by the table object itself, so no other object can claim it by copying a property or symbol. */
|
|
18
|
+
const owned = new WeakMap();
|
|
19
|
+
const routingColumn = () => ({ routing_key: bigint("routing_key", { mode: "bigint" }) });
|
|
20
|
+
/** The ownership of `table`, or undefined when it is not an owned table. */
|
|
21
|
+
export const ownership = (table) => owned.get(table);
|
|
22
|
+
const isOwned = (table) => ownership(table) !== undefined;
|
|
23
|
+
const flatten = (config, self) => (config?.(self) ?? []).flat();
|
|
24
|
+
const mappedKindOf = (columnType) => {
|
|
25
|
+
if (columnType === "PgText" || columnType === "PgVarchar")
|
|
26
|
+
return "text";
|
|
27
|
+
return columnType === "PgUUID" ? "uuid" : undefined;
|
|
28
|
+
};
|
|
29
|
+
const declaredKey = (columns, extraColumns, extraConfig) => {
|
|
30
|
+
const keyOf = new Map(Object.entries(columns).map(([key, column]) => [column.name, key]));
|
|
31
|
+
let composite;
|
|
32
|
+
for (const builder of flatten(extraConfig, extraColumns))
|
|
33
|
+
if (is(builder, PrimaryKeyBuilder))
|
|
34
|
+
composite = builder.columns.map((column) => keyOf.get(column.name) ?? column.name);
|
|
35
|
+
return (composite ?? Object.entries(columns).flatMap(([key, column]) => (column.primary ? [key] : [])));
|
|
36
|
+
};
|
|
37
|
+
const adopt = (source, options) => {
|
|
38
|
+
const internals = source;
|
|
39
|
+
const name = internals[NameKey];
|
|
40
|
+
const columns = internals[ColumnsKey];
|
|
41
|
+
const access = options.access ?? "write";
|
|
42
|
+
if (access !== "write" && access !== "read")
|
|
43
|
+
throw new Error(`access of ${name} is "write" or "read"`);
|
|
44
|
+
const find = (column, role) => {
|
|
45
|
+
const found = Object.entries(columns).find(([, candidate]) => candidate === column);
|
|
46
|
+
if (found === undefined)
|
|
47
|
+
throw new Error(`owner.${role} is not a column of ${name}`);
|
|
48
|
+
const kind = mappedKindOf(found[1].columnType);
|
|
49
|
+
if (kind === undefined)
|
|
50
|
+
throw new Error(`owner.${role} of ${name} is a ${found[1].columnType} column; only text, varchar, and uuid columns can be mapped`);
|
|
51
|
+
return { key: found[0], column: found[1], kind };
|
|
52
|
+
};
|
|
53
|
+
const tenant = find(options.owner.tenant, "tenant");
|
|
54
|
+
const actor = find(options.owner.actor, "actor");
|
|
55
|
+
if (tenant.key === actor.key)
|
|
56
|
+
throw new Error(`owner.tenant and owner.actor of ${name} name the same column`);
|
|
57
|
+
for (const [key, column] of Object.entries(columns))
|
|
58
|
+
if (key === "routing_key" || column.name === "routing_key")
|
|
59
|
+
throw new Error(`Column ${key} of ${name} is reserved for ownership`);
|
|
60
|
+
const extraColumns = internals[ExtraColumnsKey];
|
|
61
|
+
const extraConfig = internals[ExtraConfigKey];
|
|
62
|
+
const primaryKey = declaredKey(columns, extraColumns, extraConfig);
|
|
63
|
+
if (access === "write" && primaryKey.length === 0)
|
|
64
|
+
throw new Error(`Owned table ${name} needs a primary key`);
|
|
65
|
+
let routingKey;
|
|
66
|
+
if (access === "write") {
|
|
67
|
+
const builder = routingColumn().routing_key;
|
|
68
|
+
const internal = builder;
|
|
69
|
+
internal.setName("routing_key");
|
|
70
|
+
const built = internal.build(source).postBuild();
|
|
71
|
+
Object.assign(source, { routing_key: built });
|
|
72
|
+
internals[ColumnsKey] = { ...columns, routing_key: built };
|
|
73
|
+
internals[ExtraColumnsKey] = {
|
|
74
|
+
...extraColumns,
|
|
75
|
+
routing_key: internal.buildExtraConfigColumn(source),
|
|
76
|
+
};
|
|
77
|
+
routingKey = "routing_key";
|
|
78
|
+
}
|
|
79
|
+
const ownerKeys = [...(routingKey === undefined ? [] : [routingKey]), tenant.key, actor.key];
|
|
80
|
+
const schema = internals[SchemaKey];
|
|
81
|
+
owned.set(source, {
|
|
82
|
+
name: schema === undefined ? name : `${schema}.${name}`,
|
|
83
|
+
schema,
|
|
84
|
+
table: name,
|
|
85
|
+
columns: Object.keys(columns).filter((key) => key !== routingKey),
|
|
86
|
+
primaryKey,
|
|
87
|
+
owner: undefined,
|
|
88
|
+
placement: undefined,
|
|
89
|
+
adopted: true,
|
|
90
|
+
access,
|
|
91
|
+
ownerKeys,
|
|
92
|
+
ownerColumns: ownerKeys.map((key) => internals[ColumnsKey][key].name),
|
|
93
|
+
routingKey,
|
|
94
|
+
tenantKey: tenant.key,
|
|
95
|
+
actorKey: actor.key,
|
|
96
|
+
tenantKind: tenant.kind,
|
|
97
|
+
actorKind: actor.kind,
|
|
98
|
+
});
|
|
99
|
+
if (!isOwned(source))
|
|
100
|
+
throw new Error(`Table ${name} did not take ownership`);
|
|
101
|
+
return source;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Declares an actor-owned Drizzle table. The table gains `routing_key`,
|
|
105
|
+
* `tenant_id`, and `actor_id` columns; its primary key, unique constraints, and
|
|
106
|
+
* indexes are prefixed with them, so drizzle-kit generates keys that are
|
|
107
|
+
* unique per actor and scans that stay on one shard. Each table also carries
|
|
108
|
+
* the `durable_tenant` row-level-security policy: the table owner is exempt,
|
|
109
|
+
* and a runtime with row-level security sees only each transaction's tenant.
|
|
110
|
+
*
|
|
111
|
+
* Throws for anything but a `pgTable`, an alias, an already owned table, a
|
|
112
|
+
* table with a reserved ownership column, a table without a primary key, or a
|
|
113
|
+
* foreign key, which would cross actors and need ownership columns on both
|
|
114
|
+
* sides. Column-level `primaryKey` and `unique` would be global, so they move
|
|
115
|
+
* into the prefixed extra config. Only btree indexes are accepted: other
|
|
116
|
+
* methods cannot lead with the bigint and text ownership prefix.
|
|
117
|
+
*
|
|
118
|
+
* With `owner`, adopts a table that already exists and other code writes: its
|
|
119
|
+
* `tenant` and `actor` columns, which must be text, varchar, or uuid, hold the
|
|
120
|
+
* tenant and the actor's key, and nothing else about the table changes, so
|
|
121
|
+
* foreign keys stay. A writable adopted table gains a nullable `routing_key`
|
|
122
|
+
* and starts only after `durable adopt observe`; its primary key stays global,
|
|
123
|
+
* so a key another actor already holds fails the turn. `access: "read"` maps
|
|
124
|
+
* the two columns for reading and adds nothing.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* const Notes = Actor.table(pgTable("notes", { id: text("id").primaryKey(), body: text("body") }))
|
|
128
|
+
* const Invoices = Actor.table(invoices, { owner: { tenant: invoices.orgId, actor: invoices.accountId } })
|
|
129
|
+
*/
|
|
130
|
+
export const table = (source, ...adoption) => {
|
|
131
|
+
const options = adoption[0];
|
|
132
|
+
if (!is(source, PgTable))
|
|
133
|
+
throw new Error("Actor.table takes a pgTable");
|
|
134
|
+
const internals = source;
|
|
135
|
+
const name = internals[NameKey];
|
|
136
|
+
if (internals[IsAliasKey])
|
|
137
|
+
throw new Error(`Actor.table takes a table, not an alias: ${name}`);
|
|
138
|
+
if (ownership(source) !== undefined)
|
|
139
|
+
throw new Error(`Table ${name} is already owned`);
|
|
140
|
+
if (options !== undefined)
|
|
141
|
+
return adopt(source, options);
|
|
142
|
+
const columns = internals[ColumnsKey];
|
|
143
|
+
const reserved = OWNERSHIP;
|
|
144
|
+
for (const [key, column] of Object.entries(columns))
|
|
145
|
+
if (reserved.includes(key) || reserved.includes(column.name))
|
|
146
|
+
throw new Error(`Column ${key} of ${name} is reserved for ownership`);
|
|
147
|
+
if (internals[ForeignKeysKey].length > 0)
|
|
148
|
+
throw new Error(`Owned table ${name} cannot declare foreign keys`);
|
|
149
|
+
const extraColumns = internals[ExtraColumnsKey];
|
|
150
|
+
const extraConfig = internals[ExtraConfigKey];
|
|
151
|
+
const keyOf = new Map(Object.entries(columns).map(([key, column]) => [column.name, key]));
|
|
152
|
+
let composite;
|
|
153
|
+
for (const builder of flatten(extraConfig, extraColumns)) {
|
|
154
|
+
if (is(builder, ForeignKeyBuilder))
|
|
155
|
+
throw new Error(`Owned table ${name} cannot declare foreign keys`);
|
|
156
|
+
if (is(builder, PrimaryKeyBuilder))
|
|
157
|
+
composite = builder.columns.map((column) => keyOf.get(column.name) ?? column.name);
|
|
158
|
+
}
|
|
159
|
+
const columnKey = Object.entries(columns).filter(([, column]) => column.primary);
|
|
160
|
+
const key = composite ?? columnKey.map(([key]) => key);
|
|
161
|
+
if (key.length === 0)
|
|
162
|
+
throw new Error(`Owned table ${name} needs a primary key`);
|
|
163
|
+
const uniques = Object.entries(columns).filter(([, column]) => column.isUnique);
|
|
164
|
+
for (const [, column] of columnKey)
|
|
165
|
+
column.primary = false;
|
|
166
|
+
for (const [, column] of uniques)
|
|
167
|
+
column.isUnique = false;
|
|
168
|
+
const built = {};
|
|
169
|
+
const builtExtra = {};
|
|
170
|
+
for (const [key, builder] of Object.entries(ownershipColumns())) {
|
|
171
|
+
const internal = builder;
|
|
172
|
+
internal.setName(key);
|
|
173
|
+
built[key] = internal.build(source).postBuild();
|
|
174
|
+
builtExtra[key] = internal.buildExtraConfigColumn(source);
|
|
175
|
+
}
|
|
176
|
+
Object.assign(source, built);
|
|
177
|
+
internals[ColumnsKey] = { ...built, ...columns };
|
|
178
|
+
internals[ExtraColumnsKey] = { ...builtExtra, ...extraColumns };
|
|
179
|
+
internals[ExtraConfigKey] = (self) => {
|
|
180
|
+
const owner = OWNERSHIP.map((key) => self[key]);
|
|
181
|
+
const result = [];
|
|
182
|
+
let primaryName;
|
|
183
|
+
for (const builder of flatten(extraConfig, self)) {
|
|
184
|
+
if (is(builder, PrimaryKeyBuilder)) {
|
|
185
|
+
primaryName = builder.name;
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (is(builder, IndexBuilder)) {
|
|
189
|
+
const config = builder.config;
|
|
190
|
+
if (config.method !== undefined && config.method !== "btree")
|
|
191
|
+
throw new Error(`Owned table ${name} supports btree indexes only; a ${config.method} index cannot lead with routing_key`);
|
|
192
|
+
config.columns = [...owner, ...config.columns];
|
|
193
|
+
}
|
|
194
|
+
else if (is(builder, UniqueConstraintBuilder)) {
|
|
195
|
+
const constraint = builder;
|
|
196
|
+
constraint.columns = [...owner, ...constraint.columns];
|
|
197
|
+
}
|
|
198
|
+
result.push(builder);
|
|
199
|
+
}
|
|
200
|
+
const [routing, tenant, actor] = owner;
|
|
201
|
+
for (const [key, column] of uniques) {
|
|
202
|
+
const constraint = unique(column.uniqueName).on(routing, tenant, actor, self[key]);
|
|
203
|
+
result.push(column.uniqueType === "not distinct" ? constraint.nullsNotDistinct() : constraint);
|
|
204
|
+
}
|
|
205
|
+
const [first, ...rest] = [...owner, ...key.map((column) => self[column])];
|
|
206
|
+
result.push(primaryKey({ name: primaryName, columns: [first, ...rest] }));
|
|
207
|
+
const scoped = sql `tenant_id = current_setting('durable.tenant', true)`;
|
|
208
|
+
result.push(pgPolicy("durable_tenant", { for: "all", using: scoped, withCheck: scoped }));
|
|
209
|
+
return result;
|
|
210
|
+
};
|
|
211
|
+
const schema = internals[SchemaKey];
|
|
212
|
+
owned.set(source, {
|
|
213
|
+
name: schema === undefined ? name : `${schema}.${name}`,
|
|
214
|
+
schema,
|
|
215
|
+
table: name,
|
|
216
|
+
columns: Object.keys(columns),
|
|
217
|
+
primaryKey: key,
|
|
218
|
+
owner: undefined,
|
|
219
|
+
adopted: false,
|
|
220
|
+
access: "write",
|
|
221
|
+
ownerKeys: OWNERSHIP,
|
|
222
|
+
ownerColumns: OWNERSHIP,
|
|
223
|
+
routingKey: "routing_key",
|
|
224
|
+
tenantKey: "tenant_id",
|
|
225
|
+
actorKey: "actor_id",
|
|
226
|
+
tenantKind: "text",
|
|
227
|
+
actorKind: "text",
|
|
228
|
+
placement: undefined,
|
|
229
|
+
});
|
|
230
|
+
if (!isOwned(source))
|
|
231
|
+
throw new Error(`Table ${name} did not take ownership`);
|
|
232
|
+
return source;
|
|
233
|
+
};
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import type { PgClient } from "@effect/sql-pg";
|
|
2
|
+
import type { PgliteClient } from "@effect/sql-pglite";
|
|
3
|
+
import { Context, Crypto, Data, DateTime, Duration, Effect, FileSystem, Layer, Redacted, Schema, Stream } from "effect";
|
|
4
|
+
import { SqlClient } from "effect/sql";
|
|
5
|
+
import { type ActorRef, type Caller } from "../identity/caller.ts";
|
|
6
|
+
import type { DefinitionWithInternal } from "../actor/definition.ts";
|
|
7
|
+
import type { ActorError } from "../errors/actor.ts";
|
|
8
|
+
import type { AnyConnection } from "../members/connection.ts";
|
|
9
|
+
import { ClientMessage } from "../runtime/connections/protocol.ts";
|
|
10
|
+
import { type Actors } from "../handles/actors.ts";
|
|
11
|
+
import { InternalActors } from "../runtime/actors.ts";
|
|
12
|
+
import { type Outcome, type Request } from "../runtime/request.ts";
|
|
13
|
+
import { type Options } from "../runtime/layer.ts";
|
|
14
|
+
import { type TurnPoint } from "../runtime/turn/hooks.ts";
|
|
15
|
+
import { type ProgressClosed, type ProgressMessage } from "../runtime/jobs/progress.ts";
|
|
16
|
+
import type { Swept } from "../runtime/storage/retention.ts";
|
|
17
|
+
import { ActorCluster, type ClusterOptions } from "./cluster.ts";
|
|
18
|
+
import { type Simulation, type SimulationOptions } from "./simulate.ts";
|
|
19
|
+
import { type ClusterSimulation, type ClusterSimulationOptions } from "./simulate-cluster.ts";
|
|
20
|
+
declare const ClusterMember_base: Context.ServiceClass<ClusterMember, "@rikalabs/akter/testing/actor-test/ClusterMember", {
|
|
21
|
+
readonly tenant: string;
|
|
22
|
+
readonly connect: NonNullable<PgClient.PgPoolConfig["stream"]>;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Present while `ActorTest.cluster` builds one of its runners: the runner
|
|
26
|
+
* shares the cluster's tenant and opens its database connections through
|
|
27
|
+
* `connect`, so killing it can cut them.
|
|
28
|
+
*/
|
|
29
|
+
export declare class ClusterMember extends ClusterMember_base {
|
|
30
|
+
}
|
|
31
|
+
export interface TestOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Postgres connection string or a PGlite client config. Omitted, a fresh
|
|
34
|
+
* in-memory PGlite database is created per layer build; `dataDir` retains
|
|
35
|
+
* a database across builds. PGlite is single-process and supplies no
|
|
36
|
+
* independent-connection behavior.
|
|
37
|
+
*/
|
|
38
|
+
readonly database?: Redacted.Redacted<string> | PgliteClient.PgliteClientConfig;
|
|
39
|
+
/** A streaming replica of the Postgres `database`, which queries read once caught up. */
|
|
40
|
+
readonly replica?: Redacted.Redacted<string> | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Sessions each of the runtime's two pools may open; default 10. Many
|
|
43
|
+
* runtimes share one Postgres server in a test run, so a runtime that
|
|
44
|
+
* needs few sessions says so instead of sitting near `max_connections`.
|
|
45
|
+
*/
|
|
46
|
+
readonly maxConnections?: number;
|
|
47
|
+
readonly as?: Caller;
|
|
48
|
+
readonly authorize?: Options["authorize"];
|
|
49
|
+
readonly retryWindowMs?: number;
|
|
50
|
+
readonly maxResidentActors?: number;
|
|
51
|
+
readonly admission?: Options["admission"];
|
|
52
|
+
readonly relay?: Options["relay"];
|
|
53
|
+
readonly executors?: Options["executors"];
|
|
54
|
+
readonly observability?: Options["observability"];
|
|
55
|
+
readonly rowLevelSecurity?: Options["rowLevelSecurity"];
|
|
56
|
+
readonly adoption?: Options["adoption"];
|
|
57
|
+
readonly payloadWriterWindow?: Options["payloadWriterWindow"];
|
|
58
|
+
/** Shared content settings; omitted, a fixed test grant key with the default grace and skew. */
|
|
59
|
+
readonly content?: Options["content"] | undefined;
|
|
60
|
+
/** Fleet views the runtime maintains; they need Postgres with `wal_level=logical`. */
|
|
61
|
+
readonly fleet?: Options["fleet"];
|
|
62
|
+
}
|
|
63
|
+
/** The grant key tests sign content grants with unless they configure their own. */
|
|
64
|
+
export declare const TEST_CONTENT_KEY: {
|
|
65
|
+
id: string;
|
|
66
|
+
secret: Redacted.Redacted<string>;
|
|
67
|
+
};
|
|
68
|
+
export interface FaultOptions {
|
|
69
|
+
/** Only a turn running this command id takes the fault. */
|
|
70
|
+
readonly commandId?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface Inspection {
|
|
73
|
+
readonly generation: string | undefined;
|
|
74
|
+
readonly state: Schema.JsonObject["Type"];
|
|
75
|
+
readonly receipts: number;
|
|
76
|
+
readonly events: number;
|
|
77
|
+
/** Pending intents and timers this actor sent, including job routes awaiting delivery. */
|
|
78
|
+
readonly outbox: number;
|
|
79
|
+
/** Jobs this actor enqueued whose executor has not yet settled them. */
|
|
80
|
+
readonly jobs: number;
|
|
81
|
+
/**
|
|
82
|
+
* The actor's row count per owned table, keyed by table name (schema-qualified
|
|
83
|
+
* outside the current schema); present when its type owns tables.
|
|
84
|
+
*/
|
|
85
|
+
readonly rows?: Readonly<Record<string, number>>;
|
|
86
|
+
/** The actor's entry count per declared blob; present when its type declares blobs. */
|
|
87
|
+
readonly blobs?: Readonly<Record<string, number>>;
|
|
88
|
+
}
|
|
89
|
+
/** A test client's open connection, as a socket on this runner's transport would see it. */
|
|
90
|
+
export interface TestConnection<C extends AnyConnection> {
|
|
91
|
+
readonly connectionId: string;
|
|
92
|
+
/** The flushed-through cursor after `open`: events after it were not replayed by `open`. */
|
|
93
|
+
readonly cursor: string;
|
|
94
|
+
/** Sends one client frame; it is encoded and numbered like a socket frame. */
|
|
95
|
+
readonly send: (frame: C["client"]["Type"]) => Effect.Effect<void, ActorError>;
|
|
96
|
+
/** Server frames in order; fails with the session's end. Control frames are skipped. */
|
|
97
|
+
readonly frames: Stream.Stream<C["server"]["Type"], ActorError>;
|
|
98
|
+
/** Every envelope in order, member frames with their cursors and control frames included. */
|
|
99
|
+
readonly messages: Stream.Stream<TestMessage<C["server"]["Type"]>, ActorError>;
|
|
100
|
+
/** Answers a `Resync` control frame once the client has caught up. */
|
|
101
|
+
readonly resyncDone: Effect.Effect<void>;
|
|
102
|
+
readonly close: Effect.Effect<void>;
|
|
103
|
+
}
|
|
104
|
+
export type TestMessage<Server> = {
|
|
105
|
+
readonly _tag: "Frame";
|
|
106
|
+
readonly frame: Server;
|
|
107
|
+
readonly cursor?: string | undefined;
|
|
108
|
+
readonly event?: string | undefined;
|
|
109
|
+
} | {
|
|
110
|
+
/** Executor progress: display-only, lossy, and never replayed. */
|
|
111
|
+
readonly _tag: "Progress";
|
|
112
|
+
readonly job: string;
|
|
113
|
+
readonly jobId: string;
|
|
114
|
+
readonly attempt: number;
|
|
115
|
+
readonly seq: number;
|
|
116
|
+
/** The frame as the job's progress schema encodes it to JSON. */
|
|
117
|
+
readonly frame: unknown;
|
|
118
|
+
} | Exclude<ClientMessage, {
|
|
119
|
+
readonly _tag: "Frame" | "Progress";
|
|
120
|
+
}>;
|
|
121
|
+
export interface TestDefinition {
|
|
122
|
+
readonly get: unknown;
|
|
123
|
+
}
|
|
124
|
+
type InternalHandleOf<D> = D extends DefinitionWithInternal<infer H> ? H : never;
|
|
125
|
+
/** Package-internal escape hatch for deterministic runtime conformance cases. */
|
|
126
|
+
export declare const executeForTest: (request: Request) => Effect.Effect<Outcome, ActorError, ActorTest>;
|
|
127
|
+
/**
|
|
128
|
+
* Runs one retention sweep in the current runtime now, as its background loop
|
|
129
|
+
* does every minute; for benchmarks and tests that use the production layer.
|
|
130
|
+
*/
|
|
131
|
+
export declare const cleanup: Effect.Effect<Swept, never, InternalActors>;
|
|
132
|
+
/**
|
|
133
|
+
* Sweeps every tenant's unreferenced content now, however recently each was
|
|
134
|
+
* swept, and returns how many contents it deleted; for benchmarks and tests.
|
|
135
|
+
*/
|
|
136
|
+
export declare const sweepContent: Effect.Effect<number, never, InternalActors>;
|
|
137
|
+
/** A progress message an executor pool sent, and whether `dropProgress` dropped it. */
|
|
138
|
+
export type ProgressRecord = Data.TaggedEnum<{
|
|
139
|
+
Progress: ProgressMessage & {
|
|
140
|
+
readonly dropped: boolean;
|
|
141
|
+
};
|
|
142
|
+
ProgressClosed: ProgressClosed & {
|
|
143
|
+
readonly dropped: boolean;
|
|
144
|
+
};
|
|
145
|
+
}>;
|
|
146
|
+
export declare const ProgressRecord: {
|
|
147
|
+
readonly $is: <Tag extends "Progress" | "ProgressClosed">(tag: Tag) => (u: unknown) => u is Extract<{
|
|
148
|
+
readonly _tag: "Progress";
|
|
149
|
+
readonly ref: ActorRef;
|
|
150
|
+
readonly jobId: string;
|
|
151
|
+
readonly job: string;
|
|
152
|
+
readonly attempt: number;
|
|
153
|
+
readonly seq: number;
|
|
154
|
+
readonly leaseUntil: number;
|
|
155
|
+
readonly frame: Uint8Array;
|
|
156
|
+
readonly dropped: boolean;
|
|
157
|
+
}, {
|
|
158
|
+
readonly _tag: Tag;
|
|
159
|
+
}> | Extract<{
|
|
160
|
+
readonly _tag: "ProgressClosed";
|
|
161
|
+
readonly ref: ActorRef;
|
|
162
|
+
readonly jobId: string;
|
|
163
|
+
readonly attempt: number;
|
|
164
|
+
readonly dropped: boolean;
|
|
165
|
+
}, {
|
|
166
|
+
readonly _tag: Tag;
|
|
167
|
+
}>;
|
|
168
|
+
readonly $match: {
|
|
169
|
+
<Cases extends { readonly [Tag in "Progress" | "ProgressClosed"]: (args: Extract<{
|
|
170
|
+
readonly _tag: "Progress";
|
|
171
|
+
readonly ref: ActorRef;
|
|
172
|
+
readonly jobId: string;
|
|
173
|
+
readonly job: string;
|
|
174
|
+
readonly attempt: number;
|
|
175
|
+
readonly seq: number;
|
|
176
|
+
readonly leaseUntil: number;
|
|
177
|
+
readonly frame: Uint8Array;
|
|
178
|
+
readonly dropped: boolean;
|
|
179
|
+
} | {
|
|
180
|
+
readonly _tag: "ProgressClosed";
|
|
181
|
+
readonly ref: ActorRef;
|
|
182
|
+
readonly jobId: string;
|
|
183
|
+
readonly attempt: number;
|
|
184
|
+
readonly dropped: boolean;
|
|
185
|
+
}, {
|
|
186
|
+
readonly _tag: Tag;
|
|
187
|
+
}>) => any; }>(cases: Cases): (value: {
|
|
188
|
+
readonly _tag: "Progress";
|
|
189
|
+
readonly ref: ActorRef;
|
|
190
|
+
readonly jobId: string;
|
|
191
|
+
readonly job: string;
|
|
192
|
+
readonly attempt: number;
|
|
193
|
+
readonly seq: number;
|
|
194
|
+
readonly leaseUntil: number;
|
|
195
|
+
readonly frame: Uint8Array;
|
|
196
|
+
readonly dropped: boolean;
|
|
197
|
+
} | {
|
|
198
|
+
readonly _tag: "ProgressClosed";
|
|
199
|
+
readonly ref: ActorRef;
|
|
200
|
+
readonly jobId: string;
|
|
201
|
+
readonly attempt: number;
|
|
202
|
+
readonly dropped: boolean;
|
|
203
|
+
}) => import("effect/Unify").Unify<ReturnType<Cases["Progress" | "ProgressClosed"]>>;
|
|
204
|
+
<Cases extends { readonly [Tag in "Progress" | "ProgressClosed"]: (args: Extract<{
|
|
205
|
+
readonly _tag: "Progress";
|
|
206
|
+
readonly ref: ActorRef;
|
|
207
|
+
readonly jobId: string;
|
|
208
|
+
readonly job: string;
|
|
209
|
+
readonly attempt: number;
|
|
210
|
+
readonly seq: number;
|
|
211
|
+
readonly leaseUntil: number;
|
|
212
|
+
readonly frame: Uint8Array;
|
|
213
|
+
readonly dropped: boolean;
|
|
214
|
+
} | {
|
|
215
|
+
readonly _tag: "ProgressClosed";
|
|
216
|
+
readonly ref: ActorRef;
|
|
217
|
+
readonly jobId: string;
|
|
218
|
+
readonly attempt: number;
|
|
219
|
+
readonly dropped: boolean;
|
|
220
|
+
}, {
|
|
221
|
+
readonly _tag: Tag;
|
|
222
|
+
}>) => any; }>(value: {
|
|
223
|
+
readonly _tag: "Progress";
|
|
224
|
+
readonly ref: ActorRef;
|
|
225
|
+
readonly jobId: string;
|
|
226
|
+
readonly job: string;
|
|
227
|
+
readonly attempt: number;
|
|
228
|
+
readonly seq: number;
|
|
229
|
+
readonly leaseUntil: number;
|
|
230
|
+
readonly frame: Uint8Array;
|
|
231
|
+
readonly dropped: boolean;
|
|
232
|
+
} | {
|
|
233
|
+
readonly _tag: "ProgressClosed";
|
|
234
|
+
readonly ref: ActorRef;
|
|
235
|
+
readonly jobId: string;
|
|
236
|
+
readonly attempt: number;
|
|
237
|
+
readonly dropped: boolean;
|
|
238
|
+
}, cases: Cases): import("effect/Unify").Unify<ReturnType<Cases["Progress" | "ProgressClosed"]>>;
|
|
239
|
+
};
|
|
240
|
+
readonly Progress: Data.TaggedEnum.ConstructorFrom<{
|
|
241
|
+
readonly _tag: "Progress";
|
|
242
|
+
readonly ref: ActorRef;
|
|
243
|
+
readonly jobId: string;
|
|
244
|
+
readonly job: string;
|
|
245
|
+
readonly attempt: number;
|
|
246
|
+
readonly seq: number;
|
|
247
|
+
readonly leaseUntil: number;
|
|
248
|
+
readonly frame: Uint8Array;
|
|
249
|
+
readonly dropped: boolean;
|
|
250
|
+
}, "_tag">;
|
|
251
|
+
readonly ProgressClosed: Data.TaggedEnum.ConstructorFrom<{
|
|
252
|
+
readonly _tag: "ProgressClosed";
|
|
253
|
+
readonly ref: ActorRef;
|
|
254
|
+
readonly jobId: string;
|
|
255
|
+
readonly attempt: number;
|
|
256
|
+
readonly dropped: boolean;
|
|
257
|
+
}, "_tag">;
|
|
258
|
+
};
|
|
259
|
+
/** Options of `ActorTest.actor`. */
|
|
260
|
+
export interface TestActorOptions {
|
|
261
|
+
/**
|
|
262
|
+
* Path of a seed file `durable export` wrote. The actor starts from its
|
|
263
|
+
* state and pending work, staged as the caller the test runs as; the seed
|
|
264
|
+
* carries no tenant, caller, or credential. Reading it needs a `FileSystem`.
|
|
265
|
+
* An actor that already exists, a seed of another actor type, and a seed
|
|
266
|
+
* naming an effect the actor does not register each die.
|
|
267
|
+
*/
|
|
268
|
+
readonly seed?: string;
|
|
269
|
+
}
|
|
270
|
+
declare const ActorTest_base: Context.ServiceClass<ActorTest, "@rikalabs/akter/testing/actor-test/ActorTest", {
|
|
271
|
+
readonly tenant: string;
|
|
272
|
+
readonly actor: <D extends TestDefinition, O extends TestActorOptions = {}>(definition: D, id?: string, options?: O) => Effect.Effect<{
|
|
273
|
+
readonly system: InternalHandleOf<D>;
|
|
274
|
+
readonly inspect: Effect.Effect<Inspection>;
|
|
275
|
+
}, never, Actors | (O extends {
|
|
276
|
+
readonly seed: string;
|
|
277
|
+
} ? FileSystem.FileSystem : never)>;
|
|
278
|
+
readonly inspect: (ref: ActorRef) => Effect.Effect<Inspection>;
|
|
279
|
+
/**
|
|
280
|
+
* Crashes the next turn to reach `point`, or with `commandId` the next
|
|
281
|
+
* turn of that command, which other commands' turns pass through.
|
|
282
|
+
*/
|
|
283
|
+
readonly crashNext: (point: TurnPoint, options?: FaultOptions) => Effect.Effect<void>;
|
|
284
|
+
/** Pauses the next turn to reach `point`, or with `commandId` the next turn of that command. */
|
|
285
|
+
readonly pauseNext: (point: TurnPoint, options?: FaultOptions) => Effect.Effect<{
|
|
286
|
+
readonly reached: Effect.Effect<void>;
|
|
287
|
+
readonly release: Effect.Effect<void>;
|
|
288
|
+
}>;
|
|
289
|
+
/** Removes every queued `crashNext` and `pauseNext` fault and returns the points they were queued at. */
|
|
290
|
+
readonly clearFaults: Effect.Effect<ReadonlyArray<TurnPoint>>;
|
|
291
|
+
readonly invalidate: (ref: ActorRef) => Effect.Effect<void>;
|
|
292
|
+
/**
|
|
293
|
+
* Opens a connection to `ref` through this runner's in-process transport,
|
|
294
|
+
* which then holds it. A declared failure of `open` fails with that error.
|
|
295
|
+
*/
|
|
296
|
+
readonly connect: <C extends AnyConnection>(ref: ActorRef, member: C, params: C["payload"]["Type"]) => Effect.Effect<TestConnection<C>, ActorError | C["error"]["Type"]>;
|
|
297
|
+
/** Ends the actor's activation on this runner as `hibernateAfter` would; its connections stay open. */
|
|
298
|
+
readonly hibernate: (ref: ActorRef) => Effect.Effect<void>;
|
|
299
|
+
/**
|
|
300
|
+
* Moves the framework clock forward by `duration`, then delivers every
|
|
301
|
+
* intent and timer that is due, including intents those deliveries stage.
|
|
302
|
+
* Command-id expiry, event timestamps, and retention follow the same clock.
|
|
303
|
+
*/
|
|
304
|
+
readonly advance: (duration: Duration.Input) => Effect.Effect<void>;
|
|
305
|
+
/** The framework clock: database time plus every `advance` so far; `Intent.at` is due against it. */
|
|
306
|
+
readonly now: Effect.Effect<DateTime.Utc>;
|
|
307
|
+
/**
|
|
308
|
+
* Runs one retention sweep now, as the runtime does every minute, and
|
|
309
|
+
* returns how many receipts and events it deleted.
|
|
310
|
+
*/
|
|
311
|
+
readonly cleanup: Effect.Effect<Swept>;
|
|
312
|
+
/** Committed receipts of `command` on the actor `ref`. */
|
|
313
|
+
readonly receiptsFor: (ref: ActorRef, command: string) => Effect.Effect<number>;
|
|
314
|
+
/**
|
|
315
|
+
* Writes raw stored state, as an older deployment would have, so tests can
|
|
316
|
+
* exercise state migrations. `version` is the number of migrations the
|
|
317
|
+
* stored shape has already passed through.
|
|
318
|
+
*/
|
|
319
|
+
readonly seed: (ref: ActorRef, state: {
|
|
320
|
+
readonly [key: string]: Schema.Json;
|
|
321
|
+
}, version: number) => Effect.Effect<void>;
|
|
322
|
+
/** Every progress message this runner's executor pool sent, in order. */
|
|
323
|
+
readonly progress: Effect.Effect<ReadonlyArray<ProgressRecord>>;
|
|
324
|
+
/**
|
|
325
|
+
* Sends a progress message to its owner again, as a frame the network
|
|
326
|
+
* delayed would arrive; for cases about late progress.
|
|
327
|
+
*/
|
|
328
|
+
readonly resendProgress: (message: ProgressMessage) => Effect.Effect<void>;
|
|
329
|
+
/**
|
|
330
|
+
* While `dropping` holds, this runner's owners send no `Committed` frame
|
|
331
|
+
* to query watches, as a lost broadcast would; a watch then shows a change
|
|
332
|
+
* only on its reconcile rerun.
|
|
333
|
+
*/
|
|
334
|
+
readonly dropCommitted: (dropping: boolean) => Effect.Effect<void>;
|
|
335
|
+
/** Drops progress messages matching `predicate` between the pool and the owner. */
|
|
336
|
+
readonly dropProgress: (predicate: (message: ProgressMessage | ProgressClosed) => boolean) => Effect.Effect<void>;
|
|
337
|
+
}>;
|
|
338
|
+
export declare class ActorTest extends ActorTest_base {
|
|
339
|
+
/**
|
|
340
|
+
* Runs `runners` runtimes in this process against one Postgres database,
|
|
341
|
+
* each a distinct Cluster runner with its own address, connection pool, and
|
|
342
|
+
* expiring shard locks. Provides `ActorCluster`; see its controls.
|
|
343
|
+
*/
|
|
344
|
+
static readonly cluster: <ROut, E, RIn>(options: ClusterOptions<ROut, E, RIn>) => Layer.Layer<ActorCluster, never, Crypto.Crypto | Exclude<Exclude<RIn, ActorTest | Actors | import("../index.ts").ContentStore | import("../runtime/index.ts").DefectLog | InternalActors | import("../runtime/operators/repair.ts").OperatorRuntime | PgliteClient.PgliteClient | import("../runtime/drain.ts").RuntimeControl | SqlClient.SqlClient | import("../runtime/index.ts").TelemetrySampler>, import("effect/Scope").Scope>>;
|
|
345
|
+
/**
|
|
346
|
+
* Runs `program` on the current test runtime under a fault schedule drawn
|
|
347
|
+
* from `seed`, then checks exactly-once receipts and outbox delivery; a
|
|
348
|
+
* failure dies with the seed that reproduces it.
|
|
349
|
+
*/
|
|
350
|
+
static readonly simulate: <E, R>(options: SimulationOptions, program: (simulation: Simulation) => Effect.Effect<void, E, R>) => Effect.Effect<import("./simulate.ts").SimulationReport, never, R | ActorTest | Actors | SqlClient.SqlClient>;
|
|
351
|
+
/**
|
|
352
|
+
* Runs `program` on the current `ActorTest.cluster` under a fault schedule
|
|
353
|
+
* drawn from `seed`, with runner kills, lost heartbeats, and primary
|
|
354
|
+
* failovers as well as crashes, then checks exactly-once receipts and
|
|
355
|
+
* outbox delivery; a failure dies with the seed that reproduces it.
|
|
356
|
+
*/
|
|
357
|
+
static readonly simulateCluster: <E, R>(options: ClusterSimulationOptions, program: (simulation: ClusterSimulation) => Effect.Effect<void, E, R>) => Effect.Effect<import("./simulate-cluster.ts").ClusterSimulationReport, never, R | ActorCluster>;
|
|
358
|
+
static readonly layer: (options?: TestOptions) => Layer.Layer<ActorTest | Actors | import("../index.ts").ContentStore | import("../runtime/index.ts").DefectLog | InternalActors | import("../runtime/operators/repair.ts").OperatorRuntime | PgliteClient.PgliteClient | import("../runtime/drain.ts").RuntimeControl | SqlClient.SqlClient | import("../runtime/index.ts").TelemetrySampler, import("../errors/database.ts").DataDirLocked | import("../errors/database.ts").DataDirVersion | import("effect/sql/Migrator").MigrationError | import("effect/sql/SqlError").SqlError, Crypto.Crypto>;
|
|
359
|
+
}
|
|
360
|
+
export {};
|