@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,364 @@
|
|
|
1
|
+
import { Effect, Layer, Logger, ManagedRuntime, Option } from "effect";
|
|
2
|
+
import { constVoid } from "effect/Function";
|
|
3
|
+
import { Statement } from "effect/sql";
|
|
4
|
+
import { User } from "../index.js";
|
|
5
|
+
import { principal } from "../identity/caller.js";
|
|
6
|
+
import { ContentHooks, TurnHooks, } from "../runtime/turn/hooks.js";
|
|
7
|
+
import { NekiTurnSessions } from "../runtime/database/neki/session.js";
|
|
8
|
+
import { ActorTest } from "./actor-test.js";
|
|
9
|
+
import { accessConformance, accessSuite } from "./conformance/access.js";
|
|
10
|
+
import { admissionConformance, admissionSuite } from "./conformance/admission.js";
|
|
11
|
+
import { adoptionConformance } from "./conformance/adoption.js";
|
|
12
|
+
import { assertionsConformance, assertionsSuite, edgeConformance, } from "./conformance/assertions.js";
|
|
13
|
+
import { batchesConformance, batchesSuite } from "./conformance/batches.js";
|
|
14
|
+
import { blobsConformance, blobsSuite } from "./conformance/blobs.js";
|
|
15
|
+
import { capacityConformance } from "./conformance/capacity.js";
|
|
16
|
+
import { clientConformance, clientSuite } from "./conformance/client.js";
|
|
17
|
+
import { coldServeConformance, coldServeEdgeConformance, coldServeSuite, } from "./conformance/cold-serve.js";
|
|
18
|
+
import { connectionsConformance } from "./conformance/connections.js";
|
|
19
|
+
import { connectionsSuite } from "./conformance/connections/actors.js";
|
|
20
|
+
import { contentConformance, contentSuite } from "./conformance/content-blobs.js";
|
|
21
|
+
import { counterConformance, counterSuite } from "./conformance/counter.js";
|
|
22
|
+
import { cronClusterConformance, cronConformance } from "./conformance/cron.js";
|
|
23
|
+
import { drainConformance, drainSuite } from "./conformance/drain.js";
|
|
24
|
+
import { effectControlClusterConformance, effectControlConformance, effectControlSuite, } from "./conformance/effect-control.js";
|
|
25
|
+
import { effectsConformance, effectsSuite } from "./conformance/effects.js";
|
|
26
|
+
import { eventsConformance, eventsSuite } from "./conformance/events.js";
|
|
27
|
+
import { exportConformance } from "./conformance/export.js";
|
|
28
|
+
import { fleetConformance, fleetSuite } from "./conformance/fleet.js";
|
|
29
|
+
import { heapConformance } from "./conformance/heap.js";
|
|
30
|
+
import { httpConformance, httpSuite } from "./conformance/http.js";
|
|
31
|
+
import { inspectionViewsConformance, inspectionViewsSuite } from "./conformance/inspection-views.js";
|
|
32
|
+
import { inspectorConformance, inspectorSuite } from "./conformance/inspector.js";
|
|
33
|
+
import { mintConformance, mintSuite } from "./conformance/mint.js";
|
|
34
|
+
import { multiRunnerConformance } from "./conformance/multi-runner.js";
|
|
35
|
+
import { observabilityConformance } from "./conformance/observability.js";
|
|
36
|
+
import { offlineConformance, offlineSuite } from "./conformance/offline.js";
|
|
37
|
+
import { operatorConformance } from "./conformance/operator.js";
|
|
38
|
+
import { crossShardOutboxConformance, crossShardSuite } from "./conformance/outbox-cross-shard.js";
|
|
39
|
+
import { outboxConformance, outboxSuite } from "./conformance/outbox.js";
|
|
40
|
+
import { payloadMigrationsConformance } from "./conformance/payload-migrations.js";
|
|
41
|
+
import { pipelineConformance } from "./conformance/pipeline.js";
|
|
42
|
+
import { groupsConformance } from "./conformance/groups.js";
|
|
43
|
+
import { placementConformance, placementSuite } from "./conformance/placement.js";
|
|
44
|
+
import { progressConformance, progressDeliveryConformance, progressSuite, } from "./conformance/progress.js";
|
|
45
|
+
import { propertiesConformance, propertiesSuite } from "./conformance/properties.js";
|
|
46
|
+
import { protocolsConformance, protocolsSuite } from "./conformance/protocols.js";
|
|
47
|
+
import { readYourWritesConformance, readYourWritesSuite } from "./conformance/read-your-writes.js";
|
|
48
|
+
import { reducerConformance, reducerSuite } from "./conformance/reducers.js";
|
|
49
|
+
import { relayClusterConformance, relayConformance, relaySuite } from "./conformance/relay.js";
|
|
50
|
+
import { restoreConformance, restoreSuite } from "./conformance/restore.js";
|
|
51
|
+
import { retentionConformance, retentionSuite } from "./conformance/retention.js";
|
|
52
|
+
import { rlsConformance } from "./conformance/rls.js";
|
|
53
|
+
import { simulationConformance } from "./conformance/simulation.js";
|
|
54
|
+
import { singleShardConformance } from "./conformance/single-shard.js";
|
|
55
|
+
import { singletonConformance } from "./conformance/singleton.js";
|
|
56
|
+
import { streamsConformance, streamsSuite } from "./conformance/streams.js";
|
|
57
|
+
import { subscriptionsConformance } from "./conformance/subscriptions.js";
|
|
58
|
+
import { subscriptionsSuite } from "./conformance/subscriptions/actors.js";
|
|
59
|
+
import { subscriptionsClusterConformance } from "./conformance/subscriptions/cluster.js";
|
|
60
|
+
import { subscriptionsRetentionConformance } from "./conformance/subscriptions/retention.js";
|
|
61
|
+
import { tablesConformance, tablesSuite } from "./conformance/tables.js";
|
|
62
|
+
import { transportsConformance } from "./conformance/transports.js";
|
|
63
|
+
import { transportsSuite } from "./conformance/transports/actors.js";
|
|
64
|
+
import { watchConformance, watchSuite } from "./conformance/watch.js";
|
|
65
|
+
import { workflowVersionsConformance } from "./conformance/workflow-versions.js";
|
|
66
|
+
import { workflowsConformance } from "./conformance/workflows.js";
|
|
67
|
+
import { workflowsSuite } from "./conformance/workflows/actors.js";
|
|
68
|
+
import { foundationConformance, foundationSuite } from "./foundation.js";
|
|
69
|
+
const group = (suite, cases, requires) => ({
|
|
70
|
+
suite,
|
|
71
|
+
cases: requires === undefined ? cases : cases.map((each) => ({ ...each, ...requires })),
|
|
72
|
+
});
|
|
73
|
+
/** Every case of the group opens a fresh database or a snapshot. */
|
|
74
|
+
const freshDatabases = { requiresFreshDatabase: true };
|
|
75
|
+
/** Cases whose own actors, if any, they build into their own runtimes or clusters. */
|
|
76
|
+
const standalone = {};
|
|
77
|
+
/**
|
|
78
|
+
* Every suite in the registry. The single-shard case checks the routing of
|
|
79
|
+
* every statement the framework issues, so it needs every feature's actors
|
|
80
|
+
* registered, as a deployment of all of them would.
|
|
81
|
+
*/
|
|
82
|
+
const everySuite = {
|
|
83
|
+
get uses() {
|
|
84
|
+
return [...new Set(allGroups.map((group) => conformanceGroups[group].suite))].filter((suite) => suite !== everySuite);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Every conformance case, grouped by the file that owns it, with the suite
|
|
89
|
+
* that owns its actors. `describeConformance` runs a subset through `groups`,
|
|
90
|
+
* so a group can run in its own Vitest file and worker; `conformance` is
|
|
91
|
+
* their union and the order within a group is kept.
|
|
92
|
+
*/
|
|
93
|
+
export const conformanceGroups = {
|
|
94
|
+
foundation: group(foundationSuite, foundationConformance),
|
|
95
|
+
access: group(accessSuite, accessConformance, freshDatabases),
|
|
96
|
+
admission: group(admissionSuite, admissionConformance),
|
|
97
|
+
http: group(httpSuite, httpConformance),
|
|
98
|
+
protocols: group(protocolsSuite, protocolsConformance),
|
|
99
|
+
assertions: group(assertionsSuite, assertionsConformance),
|
|
100
|
+
edge: group(assertionsSuite, edgeConformance),
|
|
101
|
+
coldServeEdge: group(coldServeSuite, coldServeEdgeConformance),
|
|
102
|
+
client: group(clientSuite, clientConformance),
|
|
103
|
+
offline: group(offlineSuite, offlineConformance),
|
|
104
|
+
capacity: group(standalone, capacityConformance, freshDatabases),
|
|
105
|
+
heap: group(standalone, heapConformance, freshDatabases),
|
|
106
|
+
events: group(eventsSuite, eventsConformance),
|
|
107
|
+
reducer: group(reducerSuite, reducerConformance),
|
|
108
|
+
outbox: group(outboxSuite, outboxConformance),
|
|
109
|
+
tables: group(tablesSuite, tablesConformance),
|
|
110
|
+
effects: group(effectsSuite, effectsConformance),
|
|
111
|
+
progress: group(progressSuite, progressConformance),
|
|
112
|
+
multiRunner: group(standalone, multiRunnerConformance, freshDatabases),
|
|
113
|
+
simulation: group(standalone, simulationConformance, freshDatabases),
|
|
114
|
+
drain: group(drainSuite, drainConformance),
|
|
115
|
+
pipeline: group(standalone, pipelineConformance, freshDatabases),
|
|
116
|
+
batches: group(batchesSuite, batchesConformance),
|
|
117
|
+
groups: group(standalone, groupsConformance, freshDatabases),
|
|
118
|
+
relay: group(relaySuite, relayConformance),
|
|
119
|
+
relayCluster: group(relaySuite, relayClusterConformance, freshDatabases),
|
|
120
|
+
effectControl: group(effectControlSuite, effectControlConformance),
|
|
121
|
+
effectControlCluster: group(effectControlSuite, effectControlClusterConformance),
|
|
122
|
+
singleton: group(standalone, singletonConformance, freshDatabases),
|
|
123
|
+
cron: group(standalone, cronConformance, freshDatabases),
|
|
124
|
+
cronCluster: group(standalone, cronClusterConformance, freshDatabases),
|
|
125
|
+
blobs: group(blobsSuite, blobsConformance),
|
|
126
|
+
inspectionViews: group(inspectionViewsSuite, inspectionViewsConformance),
|
|
127
|
+
inspector: group(inspectorSuite, inspectorConformance),
|
|
128
|
+
rls: group(standalone, rlsConformance, freshDatabases),
|
|
129
|
+
retention: group(retentionSuite, retentionConformance),
|
|
130
|
+
restore: group(restoreSuite, restoreConformance, freshDatabases),
|
|
131
|
+
workflows: group(workflowsSuite, workflowsConformance),
|
|
132
|
+
connections: group(connectionsSuite, connectionsConformance),
|
|
133
|
+
streams: group(streamsSuite, streamsConformance),
|
|
134
|
+
progressDelivery: group(progressSuite, progressDeliveryConformance),
|
|
135
|
+
transports: group(transportsSuite, transportsConformance),
|
|
136
|
+
workflowVersions: group(standalone, workflowVersionsConformance, freshDatabases),
|
|
137
|
+
payloadMigrations: group(standalone, payloadMigrationsConformance, freshDatabases),
|
|
138
|
+
subscriptions: group(subscriptionsSuite, subscriptionsConformance),
|
|
139
|
+
subscriptionsRetention: group(subscriptionsSuite, subscriptionsRetentionConformance),
|
|
140
|
+
subscriptionsCluster: group(subscriptionsSuite, subscriptionsClusterConformance, freshDatabases),
|
|
141
|
+
content: group(contentSuite, contentConformance),
|
|
142
|
+
counter: group(counterSuite, counterConformance),
|
|
143
|
+
properties: group(propertiesSuite, propertiesConformance),
|
|
144
|
+
mint: group(mintSuite, mintConformance),
|
|
145
|
+
readYourWrites: group(readYourWritesSuite, readYourWritesConformance),
|
|
146
|
+
observability: group(standalone, observabilityConformance, freshDatabases),
|
|
147
|
+
operator: group(standalone, operatorConformance, freshDatabases),
|
|
148
|
+
export: group(standalone, exportConformance, freshDatabases),
|
|
149
|
+
coldServe: group(coldServeSuite, coldServeConformance),
|
|
150
|
+
placement: group(placementSuite, placementConformance),
|
|
151
|
+
watch: group(watchSuite, watchConformance),
|
|
152
|
+
adoption: group(standalone, adoptionConformance),
|
|
153
|
+
singleShard: group(everySuite, singleShardConformance),
|
|
154
|
+
crossShardOutbox: group(crossShardSuite, crossShardOutboxConformance),
|
|
155
|
+
fleet: group(fleetSuite, fleetConformance),
|
|
156
|
+
};
|
|
157
|
+
const allGroups = Object.keys(conformanceGroups);
|
|
158
|
+
/**
|
|
159
|
+
* The shared durable-turn conformance cases. Cases flagged
|
|
160
|
+
* `requiresIndependentConnections` need real Postgres: a second database
|
|
161
|
+
* connection to read committed state while a turn holds its transaction open
|
|
162
|
+
* or to take a competing row lock, or a database outside the JavaScript heap
|
|
163
|
+
* they measure. They never run on single-connection backends such as PGlite.
|
|
164
|
+
*/
|
|
165
|
+
export const conformance = allGroups.flatMap((name) => conformanceGroups[name].cases);
|
|
166
|
+
/** The capabilities `conformanceCase` requires, in a fixed order. */
|
|
167
|
+
export const requirementsOf = (conformanceCase) => [
|
|
168
|
+
...(conformanceCase.requiresIndependentConnections === true
|
|
169
|
+
? ["independentConnections"]
|
|
170
|
+
: []),
|
|
171
|
+
...(conformanceCase.requiresReplica === true ? ["replica"] : []),
|
|
172
|
+
...(conformanceCase.requiresEdge === true ? ["edge"] : []),
|
|
173
|
+
...(conformanceCase.requiresNeki === true ? ["neki"] : []),
|
|
174
|
+
...(conformanceCase.requiresLogicalDecoding === true ? ["logicalDecoding"] : []),
|
|
175
|
+
...(conformanceCase.requiresFreshDatabase === true ? ["freshDatabase"] : []),
|
|
176
|
+
];
|
|
177
|
+
/** The capabilities `backend` provides. */
|
|
178
|
+
export const capabilitiesOf = (backend) => new Set([
|
|
179
|
+
...(backend.independentConnections ? ["independentConnections"] : []),
|
|
180
|
+
...(backend.hasReplica === true ? ["replica"] : []),
|
|
181
|
+
...(backend.edge === undefined ? [] : ["edge"]),
|
|
182
|
+
...(backend.neki === true ? ["neki"] : []),
|
|
183
|
+
...(backend.logicalDecoding === true ? ["logicalDecoding"] : []),
|
|
184
|
+
...(backend.freshDatabases ? ["freshDatabase"] : []),
|
|
185
|
+
]);
|
|
186
|
+
/** `suites` and every suite they use, each once, dependencies first. */
|
|
187
|
+
const withDependencies = (suites) => {
|
|
188
|
+
const ordered = [];
|
|
189
|
+
const visit = (suite) => {
|
|
190
|
+
if (ordered.includes(suite))
|
|
191
|
+
return;
|
|
192
|
+
for (const used of suite.uses ?? [])
|
|
193
|
+
visit(used);
|
|
194
|
+
ordered.push(suite);
|
|
195
|
+
};
|
|
196
|
+
for (const suite of suites)
|
|
197
|
+
visit(suite);
|
|
198
|
+
return ordered;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Registers the named groups' cases, or every group's, against `backend`.
|
|
202
|
+
* Only the selected groups' suites, and the suites they use, build their
|
|
203
|
+
* actors and fixtures. The same case names run on every backend; a case
|
|
204
|
+
* whose requirements the backend lacks is reported through `registrar.skip`.
|
|
205
|
+
*
|
|
206
|
+
* Each case runs under the registrar's abort signal: a timed-out or
|
|
207
|
+
* cancelled case is interrupted, its finalizers run, and the next case waits
|
|
208
|
+
* for them, then restarts a runtime the case left stopped and starts with
|
|
209
|
+
* open test authorization.
|
|
210
|
+
*/
|
|
211
|
+
export const describeConformance = (options) => registerConformance({
|
|
212
|
+
...options,
|
|
213
|
+
selected: (options.groups ?? allGroups).map((group) => conformanceGroups[group]),
|
|
214
|
+
});
|
|
215
|
+
/** How long the next case waits for an interrupted case's finalizers before it starts anyway. */
|
|
216
|
+
const SETTLE_TIMEOUT = "20 seconds";
|
|
217
|
+
/** Registers `selected` groups; `describeConformance` passes registry groups, tests pass their own. */
|
|
218
|
+
export const registerConformance = (options) => {
|
|
219
|
+
const { name, backend, registrar, selected } = options;
|
|
220
|
+
const suites = withDependencies(selected.map(({ suite }) => suite));
|
|
221
|
+
const fixtures = new Map(suites.map((suite) => [suite, suite.fixture?.()]));
|
|
222
|
+
const fixtureOf = (suite) => {
|
|
223
|
+
if (!fixtures.has(suite))
|
|
224
|
+
throw new Error("A conformance case read the fixture of a suite its own suite does not use");
|
|
225
|
+
return fixtures.get(suite);
|
|
226
|
+
};
|
|
227
|
+
const access = { allowed: true, denied: new Set(), revoked: new Set() };
|
|
228
|
+
const turnHooks = suites.flatMap((suite) => suite.turn?.(fixtureOf(suite)) ?? []);
|
|
229
|
+
const contentHooks = suites.flatMap((suite) => suite.content?.(fixtureOf(suite)) ?? []);
|
|
230
|
+
const loggers = suites.flatMap((suite) => suite.logger?.(fixtureOf(suite)) ?? []);
|
|
231
|
+
let live = Layer.empty;
|
|
232
|
+
for (const suite of suites)
|
|
233
|
+
if (suite.layer !== undefined)
|
|
234
|
+
live = Layer.merge(live, suite.layer(fixtureOf(suite)));
|
|
235
|
+
const capabilities = capabilitiesOf(backend);
|
|
236
|
+
let store;
|
|
237
|
+
let current;
|
|
238
|
+
const opened = () => {
|
|
239
|
+
if (store === undefined)
|
|
240
|
+
throw new Error("Conformance environment is not open");
|
|
241
|
+
return store;
|
|
242
|
+
};
|
|
243
|
+
const environment = {
|
|
244
|
+
run: (effect) => {
|
|
245
|
+
if (current === undefined)
|
|
246
|
+
return Promise.reject(new Error("Conformance environment is stopped"));
|
|
247
|
+
return current.runPromise(Effect.scoped(effect));
|
|
248
|
+
},
|
|
249
|
+
build: (overrides) => ManagedRuntime.make(live.pipe(Layer.provideMerge(ActorTest.layer({
|
|
250
|
+
database: overrides?.database ?? opened().database,
|
|
251
|
+
maxConnections: 6,
|
|
252
|
+
admission: overrides?.admission,
|
|
253
|
+
replica: overrides?.replica,
|
|
254
|
+
as: User.make({ subject: "alice" }),
|
|
255
|
+
authorize: (request) => Effect.sync(() => access.allowed &&
|
|
256
|
+
!access.denied.has(request.command) &&
|
|
257
|
+
Option.match(principal(request.caller), {
|
|
258
|
+
onNone: () => true,
|
|
259
|
+
onSome: ({ subject }) => !access.revoked.has(subject),
|
|
260
|
+
})),
|
|
261
|
+
retryWindowMs: overrides?.retryWindowMs ?? 60_000,
|
|
262
|
+
content: overrides?.content,
|
|
263
|
+
}).pipe(Layer.provide(Layer.mergeAll(Layer.succeed(TurnHooks, {
|
|
264
|
+
at: (point, request) => Effect.forEach(turnHooks, (hook) => hook(point, request), { discard: true }),
|
|
265
|
+
}), Layer.succeed(ContentHooks, {
|
|
266
|
+
at: (point) => Effect.forEach(contentHooks, (hook) => hook(point), { discard: true }),
|
|
267
|
+
}), Layer.succeed(NekiTurnSessions, backend.neki === true), overrides?.observe === undefined
|
|
268
|
+
? Layer.empty
|
|
269
|
+
: Layer.succeed(Statement.CurrentTransformer, (statement) => Effect.sync(() => {
|
|
270
|
+
overrides.observe(statement);
|
|
271
|
+
return statement;
|
|
272
|
+
})))))), Layer.provideMerge(backend.services), Layer.provide(Logger.layer(loggers, { mergeWithExisting: true })), Layer.orDie)),
|
|
273
|
+
stop: Effect.suspend(() => {
|
|
274
|
+
const previous = current;
|
|
275
|
+
current = undefined;
|
|
276
|
+
return previous === undefined ? Effect.void : Effect.promise(() => previous.dispose());
|
|
277
|
+
}),
|
|
278
|
+
restart: Effect.suspend(() => Effect.andThen(environment.stop, () => Effect.promise(() => {
|
|
279
|
+
current = environment.build();
|
|
280
|
+
return current.runPromise(Effect.void);
|
|
281
|
+
}))),
|
|
282
|
+
freshDatabase: Effect.suspend(() => opened().freshDatabase),
|
|
283
|
+
snapshot: Effect.suspend(() => {
|
|
284
|
+
if (current !== undefined)
|
|
285
|
+
return Effect.die(new Error("A snapshot needs the conformance runtime stopped"));
|
|
286
|
+
return opened().copy(opened().database);
|
|
287
|
+
}),
|
|
288
|
+
get connect() {
|
|
289
|
+
return store?.connect;
|
|
290
|
+
},
|
|
291
|
+
get replica() {
|
|
292
|
+
return store?.replica;
|
|
293
|
+
},
|
|
294
|
+
httpServer: backend.httpServer,
|
|
295
|
+
get edge() {
|
|
296
|
+
return backend.edge;
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
/** The environment one case sees: its runs end with its signal, and only a declared case opens databases. */
|
|
300
|
+
const environmentFor = (conformanceCase, signal) => {
|
|
301
|
+
const undeclared = Effect.die(new Error(`Conformance case "${conformanceCase.name}" opens a fresh database or snapshot without declaring requiresFreshDatabase`));
|
|
302
|
+
return {
|
|
303
|
+
run: (effect) => {
|
|
304
|
+
if (current === undefined)
|
|
305
|
+
return Promise.reject(new Error("Conformance environment is stopped"));
|
|
306
|
+
return current.runPromise(Effect.scoped(effect), { signal });
|
|
307
|
+
},
|
|
308
|
+
build: environment.build,
|
|
309
|
+
stop: environment.stop,
|
|
310
|
+
restart: environment.restart,
|
|
311
|
+
freshDatabase: conformanceCase.requiresFreshDatabase === true ? environment.freshDatabase : undeclared,
|
|
312
|
+
snapshot: conformanceCase.requiresFreshDatabase === true ? environment.snapshot : undeclared,
|
|
313
|
+
get connect() {
|
|
314
|
+
return environment.connect;
|
|
315
|
+
},
|
|
316
|
+
get replica() {
|
|
317
|
+
return environment.replica;
|
|
318
|
+
},
|
|
319
|
+
httpServer: environment.httpServer,
|
|
320
|
+
get edge() {
|
|
321
|
+
return environment.edge;
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
};
|
|
325
|
+
let previousCase = Promise.resolve();
|
|
326
|
+
registrar.describe(name, () => {
|
|
327
|
+
registrar.beforeAll(() => Effect.runPromise(Effect.gen(function* () {
|
|
328
|
+
store = yield* Effect.promise(() => backend.open());
|
|
329
|
+
yield* environment.restart;
|
|
330
|
+
})), 30_000);
|
|
331
|
+
registrar.afterAll(() => previousCase.then(constVoid, constVoid).then(() => Effect.runPromise(Effect.gen(function* () {
|
|
332
|
+
yield* environment.stop;
|
|
333
|
+
if (store !== undefined)
|
|
334
|
+
yield* store.close;
|
|
335
|
+
store = undefined;
|
|
336
|
+
}))));
|
|
337
|
+
for (const { suite, cases } of selected)
|
|
338
|
+
for (const conformanceCase of cases) {
|
|
339
|
+
if (requirementsOf(conformanceCase).some((required) => !capabilities.has(required))) {
|
|
340
|
+
registrar.skip(conformanceCase.name);
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
registrar.it(conformanceCase.name, ({ signal }) => {
|
|
344
|
+
const settled = Effect.runPromise(Effect.promise(() => previousCase.then(constVoid, constVoid)).pipe(Effect.timeoutOption(SETTLE_TIMEOUT)));
|
|
345
|
+
const running = settled
|
|
346
|
+
.then(() => {
|
|
347
|
+
access.allowed = true;
|
|
348
|
+
access.denied.clear();
|
|
349
|
+
access.revoked.clear();
|
|
350
|
+
return Effect.runPromise(Effect.suspend(() => (current === undefined ? environment.restart : Effect.void)));
|
|
351
|
+
})
|
|
352
|
+
.then(() => conformanceCase.run({
|
|
353
|
+
expect: registrar.expect,
|
|
354
|
+
environment: environmentFor(conformanceCase, signal),
|
|
355
|
+
fixture: fixtureOf(suite),
|
|
356
|
+
access,
|
|
357
|
+
fixtureOf,
|
|
358
|
+
}));
|
|
359
|
+
previousCase = running;
|
|
360
|
+
return running;
|
|
361
|
+
}, conformanceCase.timeoutMs);
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Config, Crypto, Effect, Redacted, type Scope } from "effect";
|
|
2
|
+
/**
|
|
3
|
+
* A name for a test database that carries its creation time, so a later run
|
|
4
|
+
* on a shared server can tell a leftover from a live run's database.
|
|
5
|
+
*/
|
|
6
|
+
export declare const databaseName: (crypto: Crypto.Crypto, prefix: "actors" | "actors_template" | "disposable" | "isolated" | "restored") => Effect.Effect<string, never, never>;
|
|
7
|
+
/**
|
|
8
|
+
* Creates a database on the Postgres server `url` names for the current
|
|
9
|
+
* scope and drops it, ending its sessions, when the scope closes. With
|
|
10
|
+
* `template` the database is a copy of that one. Postgres refuses to copy a
|
|
11
|
+
* database while a session is open on it, and a closed pool's server
|
|
12
|
+
* sessions outlive it briefly, so a copy retries.
|
|
13
|
+
*/
|
|
14
|
+
export declare const disposableDatabase: (options: {
|
|
15
|
+
readonly url: Redacted.Redacted<string>;
|
|
16
|
+
readonly prefix?: "actors" | "actors_template" | "isolated" | "restored" | "disposable";
|
|
17
|
+
readonly template?: string | undefined;
|
|
18
|
+
}) => Effect.Effect<Redacted.Redacted<string>, never, Crypto.Crypto | Scope.Scope>;
|
|
19
|
+
/**
|
|
20
|
+
* Drops the test databases an earlier run left behind on the server `url`
|
|
21
|
+
* names: a run that was killed, or whose teardown timed out, never dropped
|
|
22
|
+
* its own.
|
|
23
|
+
*/
|
|
24
|
+
export declare const sweepStaleDatabases: (url: Redacted.Redacted<string>) => Effect.Effect<void, never, never>;
|
|
25
|
+
/**
|
|
26
|
+
* The database a test that runs on both backends uses: `undefined`, a fresh
|
|
27
|
+
* in-memory PGlite for each `ActorTest.layer` build, when `TEST_BACKEND` is
|
|
28
|
+
* `pglite`, and otherwise a disposable database on the server
|
|
29
|
+
* `TEST_DATABASE_URL` names, dropped when the scope closes.
|
|
30
|
+
*/
|
|
31
|
+
export declare const testDatabase: Effect.Effect<Redacted.Redacted<string> | undefined, Config.ConfigError, Scope.Scope | Crypto.Crypto>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { PgClient } from "@effect/sql-pg";
|
|
2
|
+
import { Clock, Config, Context, Crypto, Effect, Layer, Redacted, Schedule, } from "effect";
|
|
3
|
+
import { SqlClient } from "effect/sql";
|
|
4
|
+
/** A test database older than this belongs to no live run: runs are cut off well before it. */
|
|
5
|
+
const STALE_AFTER_MS = 60 * 60 * 1000;
|
|
6
|
+
/** Test database names: a prefix, the creation time, and a random suffix. */
|
|
7
|
+
const NAMED = /^(?:actors|actors_template|isolated|restored|disposable)_(\d{13})_[0-9a-f]{32}$/;
|
|
8
|
+
/**
|
|
9
|
+
* A name for a test database that carries its creation time, so a later run
|
|
10
|
+
* on a shared server can tell a leftover from a live run's database.
|
|
11
|
+
*/
|
|
12
|
+
export const databaseName = Effect.fnUntraced(function* (crypto, prefix) {
|
|
13
|
+
const uuid = (yield* crypto.randomUUIDv4.pipe(Effect.orDie)).replaceAll("-", "");
|
|
14
|
+
return `${prefix}_${yield* Clock.currentTimeMillis}_${uuid}`;
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Runs `use` on an administrative connection to the server `url` names that
|
|
18
|
+
* lives only as long as `use`. A connection held across a caller's scope
|
|
19
|
+
* would belong to the fiber that opened it, and a finalizer running after
|
|
20
|
+
* that fiber ended would find it interrupted.
|
|
21
|
+
*/
|
|
22
|
+
const withAdmin = (url, use) => Effect.scoped(Layer.build(PgClient.layer({ url, maxConnections: 1 })).pipe(Effect.map((context) => Context.get(context, SqlClient.SqlClient)), Effect.flatMap(use))).pipe(Effect.orDie);
|
|
23
|
+
/** `url` with its database replaced by `name`. */
|
|
24
|
+
const onDatabase = (url, name) => {
|
|
25
|
+
const database = new URL(Redacted.value(url));
|
|
26
|
+
database.pathname = `/${name}`;
|
|
27
|
+
return Redacted.make(database.href);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Creates a database on the Postgres server `url` names for the current
|
|
31
|
+
* scope and drops it, ending its sessions, when the scope closes. With
|
|
32
|
+
* `template` the database is a copy of that one. Postgres refuses to copy a
|
|
33
|
+
* database while a session is open on it, and a closed pool's server
|
|
34
|
+
* sessions outlive it briefly, so a copy retries.
|
|
35
|
+
*/
|
|
36
|
+
export const disposableDatabase = Effect.fnUntraced(function* (options) {
|
|
37
|
+
const name = yield* databaseName(yield* Crypto.Crypto, options.prefix ?? "disposable");
|
|
38
|
+
yield* Effect.acquireRelease(options.template === undefined
|
|
39
|
+
? withAdmin(options.url, (admin) => admin.unsafe(`CREATE DATABASE "${name}"`))
|
|
40
|
+
: withAdmin(options.url, (admin) => admin
|
|
41
|
+
.unsafe(`CREATE DATABASE "${name}" TEMPLATE "${options.template}"`)
|
|
42
|
+
.pipe(Effect.retry({ times: 100, schedule: Schedule.spaced("50 millis") }))), () => withAdmin(options.url, (admin) => admin.unsafe(`DROP DATABASE IF EXISTS "${name}" WITH (FORCE)`)));
|
|
43
|
+
return onDatabase(options.url, name);
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* Drops the test databases an earlier run left behind on the server `url`
|
|
47
|
+
* names: a run that was killed, or whose teardown timed out, never dropped
|
|
48
|
+
* its own.
|
|
49
|
+
*/
|
|
50
|
+
export const sweepStaleDatabases = (url) => withAdmin(url, (admin) => Effect.gen(function* () {
|
|
51
|
+
const now = yield* Clock.currentTimeMillis;
|
|
52
|
+
const rows = yield* admin `SELECT datname FROM pg_database`;
|
|
53
|
+
yield* Effect.forEach(rows
|
|
54
|
+
.map(({ datname }) => datname)
|
|
55
|
+
.filter((name) => {
|
|
56
|
+
const created = NAMED.exec(name)?.[1];
|
|
57
|
+
return created !== undefined && now - Number(created) > STALE_AFTER_MS;
|
|
58
|
+
}), (name) => admin.unsafe(`DROP DATABASE IF EXISTS "${name}" WITH (FORCE)`), { concurrency: "unbounded", discard: true });
|
|
59
|
+
}));
|
|
60
|
+
/**
|
|
61
|
+
* The database a test that runs on both backends uses: `undefined`, a fresh
|
|
62
|
+
* in-memory PGlite for each `ActorTest.layer` build, when `TEST_BACKEND` is
|
|
63
|
+
* `pglite`, and otherwise a disposable database on the server
|
|
64
|
+
* `TEST_DATABASE_URL` names, dropped when the scope closes.
|
|
65
|
+
*/
|
|
66
|
+
export const testDatabase = Effect.gen(function* () {
|
|
67
|
+
if ((yield* Config.Literals(["pglite", "postgres"], "TEST_BACKEND")) === "pglite")
|
|
68
|
+
return undefined;
|
|
69
|
+
return yield* disposableDatabase({ url: yield* Config.Redacted("TEST_DATABASE_URL") });
|
|
70
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Effect, Layer, Logger } from "effect";
|
|
2
|
+
import type { ConformanceCase } from "./conformance.ts";
|
|
3
|
+
import type { ConformanceSuite } from "./conformance.ts";
|
|
4
|
+
export interface RecordedDefect {
|
|
5
|
+
readonly actor: string;
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly command: string;
|
|
8
|
+
readonly cause: string;
|
|
9
|
+
}
|
|
10
|
+
/** The annotations of a `Delivery timed out` warning. */
|
|
11
|
+
export interface RecordedTimeout {
|
|
12
|
+
readonly actor: unknown;
|
|
13
|
+
readonly id: unknown;
|
|
14
|
+
readonly commandId: unknown;
|
|
15
|
+
readonly activation: unknown;
|
|
16
|
+
readonly turnSessions: unknown;
|
|
17
|
+
readonly restarting: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface FoundationFixture {
|
|
20
|
+
creates: number;
|
|
21
|
+
privateRuns: number;
|
|
22
|
+
slowIds: Array<string>;
|
|
23
|
+
slowFirst: Effect.Effect<void>;
|
|
24
|
+
deliveryRuns: number;
|
|
25
|
+
deliveryHold: Effect.Effect<void>;
|
|
26
|
+
defects: Array<RecordedDefect>;
|
|
27
|
+
/** Each `Delivery timed out` warning the runtime logged. */
|
|
28
|
+
timeouts: Array<RecordedTimeout>;
|
|
29
|
+
}
|
|
30
|
+
export declare const foundationFixture: () => FoundationFixture;
|
|
31
|
+
/**
|
|
32
|
+
* Captures the runtime's deterministic-defect log records, which replace the
|
|
33
|
+
* removed defect hook, and the diagnostics of each delivery that timed out.
|
|
34
|
+
*/
|
|
35
|
+
export declare const defectRecorder: (fixture: FoundationFixture) => Logger.Logger<unknown, void>;
|
|
36
|
+
/** Handlers for the foundation actors; `fixture` supplies the observable state cases assert on. */
|
|
37
|
+
export declare const foundationLayer: (fixture: FoundationFixture) => Layer.Layer<never, never, import("./index.ts").InternalActors>;
|
|
38
|
+
/** Identity, admission, receipts, state migration, and blob cases every backend must pass. A receipt retry may wait for PGlite's busy connection, so its delivery deadline covers that wait as well as the RPC reply. */
|
|
39
|
+
export declare const foundationConformance: ReadonlyArray<ConformanceCase<FoundationFixture>>;
|
|
40
|
+
/** Foundation actors; its logger records deterministic defects and delivery timeouts for the cases to read. */
|
|
41
|
+
export declare const foundationSuite: ConformanceSuite<FoundationFixture>;
|