@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,60 @@
|
|
|
1
|
+
import { Duration } from "effect";
|
|
2
|
+
/** Retries after a job's first failed attempt when its binding names none. */
|
|
3
|
+
const DEFAULT_RETRIES = 3;
|
|
4
|
+
/** An attempt that runs longer is abandoned and counts as an unknown outcome. */
|
|
5
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
6
|
+
const DEFAULT_BACKOFF = { baseMs: 1000, maxMs: 256_000 };
|
|
7
|
+
const PROGRESS_EVERY_MS = { default: 250, min: 50, max: 60_000 };
|
|
8
|
+
const TIMER = { min: 1, max: 2_147_483_647, label: "1 millisecond to 2147483647 milliseconds" };
|
|
9
|
+
/** Job timings are timer durations: 1 ms to 2^31 − 1 ms unless `bounds` narrows them. */
|
|
10
|
+
const millis = (path, duration, bounds = TIMER) => {
|
|
11
|
+
const value = Duration.toMillis(Duration.fromInputUnsafe(duration));
|
|
12
|
+
if (!Number.isFinite(value) || value < bounds.min || value > bounds.max)
|
|
13
|
+
throw new Error(`${path} must be a duration from ${bounds.label}`);
|
|
14
|
+
return Math.floor(value);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Resolves one declared job's binding, throwing on a route that is not one of
|
|
18
|
+
* `commands`, a `concurrency.perActor` outside 1..64, `retry.times` outside
|
|
19
|
+
* 0..100, a duration outside its bounds, or a backoff whose max is below its
|
|
20
|
+
* base. `path` names the binding in those messages.
|
|
21
|
+
*/
|
|
22
|
+
export const resolveJobPolicy = ({ path, declared, commands, }) => {
|
|
23
|
+
for (const route of [declared?.onSuccess, declared?.onDeadLetter, declared?.onCancelled])
|
|
24
|
+
if (route !== undefined && !commands.includes(route))
|
|
25
|
+
throw new Error(`${path} routes must name a command of this actor`);
|
|
26
|
+
const perActor = declared?.concurrency?.perActor;
|
|
27
|
+
if (declared?.concurrency !== undefined &&
|
|
28
|
+
(perActor === undefined || !Number.isInteger(perActor) || perActor < 1 || perActor > 64))
|
|
29
|
+
throw new Error(`${path}.concurrency.perActor must be an integer from 1 to 64`);
|
|
30
|
+
const times = declared?.retry?.times ?? DEFAULT_RETRIES;
|
|
31
|
+
if (!Number.isInteger(times) || times < 0 || times > 100)
|
|
32
|
+
throw new Error(`${path}.retry.times must be an integer from 0 to 100`);
|
|
33
|
+
const backoff = declared?.retry?.backoff;
|
|
34
|
+
const resolved = {
|
|
35
|
+
attempts: 1 + times,
|
|
36
|
+
timeoutMs: declared?.timeout === undefined
|
|
37
|
+
? DEFAULT_TIMEOUT_MS
|
|
38
|
+
: millis(`${path}.timeout`, declared.timeout),
|
|
39
|
+
backoff: backoff === undefined
|
|
40
|
+
? DEFAULT_BACKOFF
|
|
41
|
+
: {
|
|
42
|
+
baseMs: millis(`${path}.retry.backoff.base`, backoff.base),
|
|
43
|
+
maxMs: millis(`${path}.retry.backoff.max`, backoff.max),
|
|
44
|
+
},
|
|
45
|
+
progressEveryMs: declared?.progressEvery === undefined
|
|
46
|
+
? PROGRESS_EVERY_MS.default
|
|
47
|
+
: millis(`${path}.progressEvery`, declared.progressEvery, {
|
|
48
|
+
min: PROGRESS_EVERY_MS.min,
|
|
49
|
+
max: PROGRESS_EVERY_MS.max,
|
|
50
|
+
label: "50 milliseconds to 1 minute",
|
|
51
|
+
}),
|
|
52
|
+
perActor,
|
|
53
|
+
onSuccess: declared?.onSuccess,
|
|
54
|
+
onDeadLetter: declared?.onDeadLetter,
|
|
55
|
+
onCancelled: declared?.onCancelled,
|
|
56
|
+
};
|
|
57
|
+
if (resolved.backoff.maxMs < resolved.backoff.baseMs)
|
|
58
|
+
throw new Error(`${path}.retry.backoff.max must be at least its base`);
|
|
59
|
+
return Object.freeze(resolved);
|
|
60
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import type { AnyCommand } from "../members/command.ts";
|
|
3
|
+
/** One `schedules` entry: its tick's timer key, when it ticks, and its zero-input target. */
|
|
4
|
+
export interface CronEntry {
|
|
5
|
+
readonly key: string;
|
|
6
|
+
/** The first scheduled instant strictly after `afterMs`. */
|
|
7
|
+
readonly next: (afterMs: number) => number;
|
|
8
|
+
readonly command: string;
|
|
9
|
+
/** Encodes the target's empty input, as an intent carries it. */
|
|
10
|
+
readonly payload: Effect.Effect<string>;
|
|
11
|
+
}
|
|
12
|
+
/** The commands a `schedules` entry may target: those whose payload is `Schema.Void`. */
|
|
13
|
+
export type ScheduleTarget<Command extends AnyCommand> = AnyCommand extends Command ? AnyCommand : Extract<Command, {
|
|
14
|
+
readonly payload: Schema.Void;
|
|
15
|
+
}>;
|
|
16
|
+
/** An actor type's cron entries and how late a tick may still fire. */
|
|
17
|
+
export interface CronSchedule {
|
|
18
|
+
readonly entries: ReadonlyArray<CronEntry>;
|
|
19
|
+
readonly skipMs: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parses `schedules`. A key is a five- or six-field Effect `Cron.parse`
|
|
23
|
+
* expression evaluated in UTC, the same with a `CRON_TZ=<IANA zone> ` prefix
|
|
24
|
+
* evaluated in that zone, or `@every <duration>`. Whitespace is normalized and
|
|
25
|
+
* the timer key names the zone, so one expression in two zones is two entries.
|
|
26
|
+
* Two declarations with one timer key, an unparsable expression, an unknown
|
|
27
|
+
* zone, a bad interval, or a target that is not a zero-input command of this
|
|
28
|
+
* actor throw.
|
|
29
|
+
*/
|
|
30
|
+
export declare const resolveSchedules: ({ declared, commands, }: {
|
|
31
|
+
readonly declared: Readonly<Record<string, AnyCommand>> | undefined;
|
|
32
|
+
readonly commands: ReadonlyArray<AnyCommand>;
|
|
33
|
+
}) => ReadonlyArray<CronEntry>;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Cron, DateTime, Duration, Effect, Option, Result, Schema, SchemaAST } from "effect";
|
|
2
|
+
import { CRON_PREFIX } from "../runtime/cron/key.js";
|
|
3
|
+
const emptyPayload = (command) => Schema.encodeEffect(Schema.fromJsonString(Schema.toCodecJson(Schema.Struct({ value: command.payload }))))({ value: undefined }).pipe(Effect.orDie);
|
|
4
|
+
const ZONE_PREFIX = /^CRON_TZ=(\S+)\s+(.*)$/;
|
|
5
|
+
const EVERY_PREFIX = /^@every(?:\s+(.*))?$/;
|
|
6
|
+
const DAY_MS = 86_400_000;
|
|
7
|
+
/**
|
|
8
|
+
* A declaration's timer key and the first scheduled instant strictly after a
|
|
9
|
+
* time. Offset zones such as `+05:00` are rejected as unknown: they have no
|
|
10
|
+
* daylight saving, so a UTC expression says the same thing. Cron fields are
|
|
11
|
+
* parsed in UTC and `nextInZone` maps the wall-clock times to instants.
|
|
12
|
+
*/
|
|
13
|
+
const scheduleOf = (declaration) => {
|
|
14
|
+
const normalized = declaration.trim().replace(/\s+/g, " ");
|
|
15
|
+
const zoned = ZONE_PREFIX.exec(normalized);
|
|
16
|
+
const zone = zoned?.[1] ?? "UTC";
|
|
17
|
+
const expression = zoned?.[2] ?? normalized;
|
|
18
|
+
const every = EVERY_PREFIX.exec(expression);
|
|
19
|
+
if (every !== null) {
|
|
20
|
+
if (zoned !== null)
|
|
21
|
+
throw new Error(`schedules "${declaration}": an interval takes no time zone`);
|
|
22
|
+
const length = Duration.fromInput((every[1] ?? ""));
|
|
23
|
+
const millis = Option.isSome(length) ? Duration.toMillis(length.value) : Number.NaN;
|
|
24
|
+
if (!Number.isSafeInteger(millis) || millis < 1000)
|
|
25
|
+
throw new Error(`schedules "${declaration}" needs an interval of whole milliseconds, at least 1 second`);
|
|
26
|
+
return { key: `${CRON_PREFIX}@every ${millis}ms`, next: nextEvery(millis) };
|
|
27
|
+
}
|
|
28
|
+
if (/^[+-]/.test(zone) || Option.isNone(DateTime.zoneMakeNamed(zone)))
|
|
29
|
+
throw new Error(`schedules "${declaration}" names an unknown time zone "${zone}"`);
|
|
30
|
+
const parsed = Cron.parse(expression, "UTC");
|
|
31
|
+
if (Result.isFailure(parsed))
|
|
32
|
+
throw new Error(`schedules "${declaration}" does not parse: ${parsed.failure.message}`);
|
|
33
|
+
return {
|
|
34
|
+
key: `${CRON_PREFIX}${zone} ${canonicalOf(parsed.success)}`,
|
|
35
|
+
next: nextInZone(zone, parsed.success),
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Parses `schedules`. A key is a five- or six-field Effect `Cron.parse`
|
|
40
|
+
* expression evaluated in UTC, the same with a `CRON_TZ=<IANA zone> ` prefix
|
|
41
|
+
* evaluated in that zone, or `@every <duration>`. Whitespace is normalized and
|
|
42
|
+
* the timer key names the zone, so one expression in two zones is two entries.
|
|
43
|
+
* Two declarations with one timer key, an unparsable expression, an unknown
|
|
44
|
+
* zone, a bad interval, or a target that is not a zero-input command of this
|
|
45
|
+
* actor throw.
|
|
46
|
+
*/
|
|
47
|
+
export const resolveSchedules = ({ declared, commands, }) => {
|
|
48
|
+
const entries = [];
|
|
49
|
+
const declarations = new Map();
|
|
50
|
+
for (const [declaration, command] of Object.entries(declared ?? {})) {
|
|
51
|
+
const { key, next } = scheduleOf(declaration);
|
|
52
|
+
if (!commands.includes(command))
|
|
53
|
+
throw new Error(`schedules "${declaration}" must name a command of this actor`);
|
|
54
|
+
if (!SchemaAST.isVoid(command.payload.ast))
|
|
55
|
+
throw new Error(`schedules "${declaration}" must name a command without input`);
|
|
56
|
+
const duplicate = declarations.get(key);
|
|
57
|
+
if (duplicate !== undefined)
|
|
58
|
+
throw new Error(`schedules "${declaration}" repeats the schedule of "${duplicate}"`);
|
|
59
|
+
declarations.set(key, declaration);
|
|
60
|
+
entries.push({
|
|
61
|
+
key,
|
|
62
|
+
next,
|
|
63
|
+
command: command.tag,
|
|
64
|
+
payload: emptyPayload(command),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return entries;
|
|
68
|
+
};
|
|
69
|
+
const field = (values, size) => values.size === 0 || values.size === size ? "*" : [...values].join(",");
|
|
70
|
+
/** One spelling per parsed schedule, so equivalent expressions share a timer key. */
|
|
71
|
+
const canonicalOf = (cron) => {
|
|
72
|
+
const seconds = [...cron.seconds];
|
|
73
|
+
const fields = [
|
|
74
|
+
field(cron.minutes, 60),
|
|
75
|
+
field(cron.hours, 24),
|
|
76
|
+
cron.days.size === 0 ? "*" : [...cron.days].join(","),
|
|
77
|
+
field(cron.months, 12),
|
|
78
|
+
cron.weekdays.size === 0 ? "*" : [...cron.weekdays].join(","),
|
|
79
|
+
];
|
|
80
|
+
return (seconds.length === 1 && seconds[0] === 0 ? fields : [field(cron.seconds, 60), ...fields]).join(" ");
|
|
81
|
+
};
|
|
82
|
+
/** Interval ticks fall on whole multiples of the interval since the Unix epoch. */
|
|
83
|
+
const nextEvery = (millis) => (afterMs) => (Math.floor(afterMs / millis) + 1) * millis;
|
|
84
|
+
const offsetAt = (zone, ms) => DateTime.zonedOffset(DateTime.makeZonedUnsafe(ms, { timeZone: zone }));
|
|
85
|
+
/**
|
|
86
|
+
* The earliest instant whose wall clock in `zone` shows `wall` (a wall-clock
|
|
87
|
+
* time written as UTC milliseconds), or, when a spring-forward gap skips
|
|
88
|
+
* `wall`, the first instant after that gap. Offsets a day either side bound
|
|
89
|
+
* the candidates, since no zone changes its offset twice within two days. A
|
|
90
|
+
* larger offset gives an earlier instant, so candidates are tried larger
|
|
91
|
+
* offset first and a repeated time resolves to its first occurrence; a gap is
|
|
92
|
+
* resolved by bisecting for the first instant whose wall clock reaches `wall`.
|
|
93
|
+
*/
|
|
94
|
+
const instantOf = (zone, wall) => {
|
|
95
|
+
const before = offsetAt(zone, wall - DAY_MS);
|
|
96
|
+
const after = offsetAt(zone, wall + DAY_MS);
|
|
97
|
+
for (const offset of before >= after ? [before, after] : [after, before]) {
|
|
98
|
+
if (offsetAt(zone, wall - offset) === offset)
|
|
99
|
+
return wall - offset;
|
|
100
|
+
}
|
|
101
|
+
let low = wall - Math.max(before, after);
|
|
102
|
+
let high = wall - Math.min(before, after);
|
|
103
|
+
while (high - low > 1) {
|
|
104
|
+
const middle = Math.floor((low + high) / 2);
|
|
105
|
+
if (middle + offsetAt(zone, middle) >= wall)
|
|
106
|
+
high = middle;
|
|
107
|
+
else
|
|
108
|
+
low = middle;
|
|
109
|
+
}
|
|
110
|
+
return high;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* The first scheduled instant after `afterMs`: a matching wall-clock time at
|
|
114
|
+
* its first occurrence, or the first instant after a gap that skips one. A
|
|
115
|
+
* repeated time's second occurrence is never scheduled, however late the tick
|
|
116
|
+
* is rewritten, so it cannot fire twice.
|
|
117
|
+
*/
|
|
118
|
+
const nextInZone = (zone, cron) => {
|
|
119
|
+
if (zone === "UTC")
|
|
120
|
+
return (afterMs) => Cron.next(cron, afterMs).getTime();
|
|
121
|
+
const named = DateTime.zoneMakeNamedUnsafe(zone);
|
|
122
|
+
return (afterMs) => {
|
|
123
|
+
let wall = afterMs + offsetAt(named, afterMs);
|
|
124
|
+
for (;;) {
|
|
125
|
+
wall = Cron.next(cron, wall).getTime();
|
|
126
|
+
const instant = instantOf(named, wall);
|
|
127
|
+
if (instant > afterMs)
|
|
128
|
+
return instant;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** The WebSocket subprotocol a connection upgrade must offer; it versions the envelope below. */
|
|
3
|
+
export declare const SUBPROTOCOL = "akter.v1";
|
|
4
|
+
/**
|
|
5
|
+
* Messages a client sends on a connection's socket. Member frames travel only
|
|
6
|
+
* inside `frame`, so an application frame can never be read as control.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ClientWireMessage: Schema.Union<readonly [Schema.Struct<{
|
|
9
|
+
readonly t: Schema.Literal<"hello">;
|
|
10
|
+
readonly authorization: Schema.optional<Schema.String>;
|
|
11
|
+
readonly params: Schema.optional<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
12
|
+
}>, Schema.Struct<{
|
|
13
|
+
readonly t: Schema.Literal<"frame">;
|
|
14
|
+
readonly frame: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
15
|
+
}>, Schema.Struct<{
|
|
16
|
+
readonly t: Schema.Literal<"resyncDone">;
|
|
17
|
+
readonly through: Schema.optional<Schema.String>;
|
|
18
|
+
}>, Schema.Struct<{
|
|
19
|
+
readonly t: Schema.Literal<"reauthenticate">;
|
|
20
|
+
readonly authorization: Schema.String;
|
|
21
|
+
}>]>;
|
|
22
|
+
/** A message a client sends on a connection's socket. */
|
|
23
|
+
export type ClientWireMessage = typeof ClientWireMessage.Type;
|
|
24
|
+
/**
|
|
25
|
+
* Messages a server sends on a connection's socket. Times are milliseconds
|
|
26
|
+
* since the epoch, except `deadline`, which is how long the client has to
|
|
27
|
+
* answer `resync`. `progress` is a job executor's progress apart from member frames:
|
|
28
|
+
* display-only, lossy, never replayed, and without cursors.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ServerWireMessage: Schema.Union<readonly [Schema.Struct<{
|
|
31
|
+
readonly t: Schema.Literal<"open">;
|
|
32
|
+
readonly connectionId: Schema.String;
|
|
33
|
+
readonly baseline: Schema.optional<Schema.String>;
|
|
34
|
+
readonly reauthenticateBy: Schema.optional<Schema.Finite>;
|
|
35
|
+
}>, Schema.Struct<{
|
|
36
|
+
readonly t: Schema.Literal<"frame">;
|
|
37
|
+
readonly frame: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
38
|
+
readonly cursor: Schema.optional<Schema.String>;
|
|
39
|
+
readonly event: Schema.optional<Schema.String>;
|
|
40
|
+
}>, Schema.Struct<{
|
|
41
|
+
readonly t: Schema.Literal<"resync">;
|
|
42
|
+
readonly after: Schema.optional<Schema.String>;
|
|
43
|
+
readonly reason: Schema.Literal<"OwnerLost">;
|
|
44
|
+
readonly deadline: Schema.Finite;
|
|
45
|
+
}>, Schema.Struct<{
|
|
46
|
+
readonly t: Schema.Literal<"resyncReplayed">;
|
|
47
|
+
readonly through: Schema.optional<Schema.String>;
|
|
48
|
+
}>, Schema.Struct<{
|
|
49
|
+
readonly t: Schema.Literal<"progress">;
|
|
50
|
+
readonly job: Schema.String;
|
|
51
|
+
readonly jobId: Schema.String;
|
|
52
|
+
readonly attempt: Schema.Finite;
|
|
53
|
+
readonly seq: Schema.Finite;
|
|
54
|
+
readonly frame: Schema.Codec<Schema.Json, Schema.Json, never, never>;
|
|
55
|
+
}>, Schema.Struct<{
|
|
56
|
+
readonly t: Schema.Literal<"reauthenticate">;
|
|
57
|
+
readonly by: Schema.Finite;
|
|
58
|
+
}>, Schema.Struct<{
|
|
59
|
+
readonly t: Schema.Literal<"reauthenticated">;
|
|
60
|
+
readonly by: Schema.optional<Schema.Finite>;
|
|
61
|
+
}>, Schema.Struct<{
|
|
62
|
+
readonly t: Schema.Literal<"end">;
|
|
63
|
+
readonly error: Schema.optional<Schema.Codec<Schema.Json, Schema.Json, never, never>>;
|
|
64
|
+
}>]>;
|
|
65
|
+
/** A message a server sends on a connection's socket. */
|
|
66
|
+
export type ServerWireMessage = typeof ServerWireMessage.Type;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
/** The WebSocket subprotocol a connection upgrade must offer; it versions the envelope below. */
|
|
3
|
+
export const SUBPROTOCOL = "akter.v1";
|
|
4
|
+
/**
|
|
5
|
+
* Messages a client sends on a connection's socket. Member frames travel only
|
|
6
|
+
* inside `frame`, so an application frame can never be read as control.
|
|
7
|
+
*/
|
|
8
|
+
export const ClientWireMessage = Schema.Union([
|
|
9
|
+
Schema.Struct({
|
|
10
|
+
t: Schema.Literal("hello"),
|
|
11
|
+
authorization: Schema.optional(Schema.String),
|
|
12
|
+
params: Schema.optional(Schema.Json),
|
|
13
|
+
}),
|
|
14
|
+
Schema.Struct({ t: Schema.Literal("frame"), frame: Schema.Json }),
|
|
15
|
+
Schema.Struct({ t: Schema.Literal("resyncDone"), through: Schema.optional(Schema.String) }),
|
|
16
|
+
Schema.Struct({ t: Schema.Literal("reauthenticate"), authorization: Schema.String }),
|
|
17
|
+
]);
|
|
18
|
+
/**
|
|
19
|
+
* Messages a server sends on a connection's socket. Times are milliseconds
|
|
20
|
+
* since the epoch, except `deadline`, which is how long the client has to
|
|
21
|
+
* answer `resync`. `progress` is a job executor's progress apart from member frames:
|
|
22
|
+
* display-only, lossy, never replayed, and without cursors.
|
|
23
|
+
*/
|
|
24
|
+
export const ServerWireMessage = Schema.Union([
|
|
25
|
+
Schema.Struct({
|
|
26
|
+
t: Schema.Literal("open"),
|
|
27
|
+
connectionId: Schema.String,
|
|
28
|
+
baseline: Schema.optional(Schema.String),
|
|
29
|
+
reauthenticateBy: Schema.optional(Schema.Finite),
|
|
30
|
+
}),
|
|
31
|
+
Schema.Struct({
|
|
32
|
+
t: Schema.Literal("frame"),
|
|
33
|
+
frame: Schema.Json,
|
|
34
|
+
cursor: Schema.optional(Schema.String),
|
|
35
|
+
event: Schema.optional(Schema.String),
|
|
36
|
+
}),
|
|
37
|
+
Schema.Struct({
|
|
38
|
+
t: Schema.Literal("resync"),
|
|
39
|
+
after: Schema.optional(Schema.String),
|
|
40
|
+
reason: Schema.Literal("OwnerLost"),
|
|
41
|
+
deadline: Schema.Finite,
|
|
42
|
+
}),
|
|
43
|
+
Schema.Struct({ t: Schema.Literal("resyncReplayed"), through: Schema.optional(Schema.String) }),
|
|
44
|
+
Schema.Struct({
|
|
45
|
+
t: Schema.Literal("progress"),
|
|
46
|
+
job: Schema.String,
|
|
47
|
+
jobId: Schema.String,
|
|
48
|
+
attempt: Schema.Finite,
|
|
49
|
+
seq: Schema.Finite,
|
|
50
|
+
frame: Schema.Json,
|
|
51
|
+
}),
|
|
52
|
+
Schema.Struct({ t: Schema.Literal("reauthenticate"), by: Schema.Finite }),
|
|
53
|
+
Schema.Struct({ t: Schema.Literal("reauthenticated"), by: Schema.optional(Schema.Finite) }),
|
|
54
|
+
Schema.Struct({ t: Schema.Literal("end"), error: Schema.optional(Schema.Json) }),
|
|
55
|
+
]);
|