@lostgradient/weft 0.24.0 → 0.24.2
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/README.md +2 -2
- package/dist/cli/conformance.js +5 -2
- package/dist/cli/generated/operation-catalog.snapshot.json +95 -1
- package/dist/cli/generated/operation-client.generated.d.ts +28 -2
- package/dist/cli/generated/operation-client.generated.js +2 -0
- package/dist/cli/parse-schedule-arguments.js +15 -3
- package/dist/cli/schedule.js +2 -1
- package/dist/cli/types.d.ts +2 -1
- package/dist/client/http-client-requests.js +6 -9
- package/dist/client/start-body.js +1 -0
- package/dist/core/catalog/index.d.ts +2 -2
- package/dist/core/catalog/index.js +9 -2
- package/dist/core/catalog/reference-counts.d.ts +29 -14
- package/dist/core/catalog/removal.d.ts +63 -10
- package/dist/core/catalog/removal.js +18 -2
- package/dist/core/catalog/storage-io.d.ts +23 -0
- package/dist/core/catalog/storage-io.js +1 -1
- package/dist/core/engine/activity-resolution.js +17 -17
- package/dist/core/engine/bulk-operations-purge.d.ts +1 -1
- package/dist/core/engine/bulk-operations-purge.js +17 -22
- package/dist/core/engine/bulk-operations-retry.d.ts +24 -0
- package/dist/core/engine/bulk-operations-retry.js +190 -0
- package/dist/core/engine/bulk-operations-shared.d.ts +18 -0
- package/dist/core/engine/bulk-operations-shared.js +14 -0
- package/dist/core/engine/bulk-operations.d.ts +3 -2
- package/dist/core/engine/bulk-operations.js +10 -169
- package/dist/core/engine/callback-creators-bundles.js +5 -3
- package/dist/core/engine/callback-creators-core.js +9 -1
- package/dist/core/engine/callback-creators-schedule.js +2 -2
- package/dist/core/engine/catalog-readiness.js +2 -0
- package/dist/core/engine/catalog-removal.d.ts +107 -3
- package/dist/core/engine/catalog-removal.js +66 -13
- package/dist/core/engine/catalog-tombstone-recovery.d.ts +56 -0
- package/dist/core/engine/catalog-tombstone-recovery.js +39 -0
- package/dist/core/engine/child-workflow.d.ts +13 -1
- package/dist/core/engine/child-workflow.js +22 -4
- package/dist/core/engine/constraints.js +5 -1
- package/dist/core/engine/construction.d.ts +1 -1
- package/dist/core/engine/decode-revision.d.ts +32 -0
- package/dist/core/engine/decode-revision.js +9 -0
- package/dist/core/engine/disposal.d.ts +6 -2
- package/dist/core/engine/disposal.js +24 -10
- package/dist/core/engine/dynamic-source-errors.d.ts +81 -0
- package/dist/core/engine/dynamic-source-errors.js +25 -0
- package/dist/core/engine/dynamic-source-execution.d.ts +173 -0
- package/dist/core/engine/dynamic-source-execution.js +108 -0
- package/dist/core/engine/engine-internal-types.d.ts +16 -0
- package/dist/core/engine/engine-workflows-namespace.d.ts +10 -0
- package/dist/core/engine/engine-workflows-namespace.js +3 -1
- package/dist/core/engine/generation-codec.d.ts +22 -0
- package/dist/core/engine/generation-codec.js +2 -0
- package/dist/core/engine/index.d.ts +18 -10
- package/dist/core/engine/index.js +22 -11
- package/dist/core/engine/inline-launch-queue.js +1 -1
- package/dist/core/engine/internals.d.ts +26 -30
- package/dist/core/engine/lifecycle/checkpoint-launch.d.ts +29 -0
- package/dist/core/engine/lifecycle/checkpoint-launch.js +75 -0
- package/dist/core/engine/lifecycle/delayed-start-registration.d.ts +30 -0
- package/dist/core/engine/lifecycle/delayed-start-registration.js +11 -0
- package/dist/core/engine/lifecycle/fork-helpers.d.ts +33 -1
- package/dist/core/engine/lifecycle/fork-helpers.js +3 -1
- package/dist/core/engine/lifecycle/recovery-isolation.d.ts +20 -0
- package/dist/core/engine/lifecycle/recovery-isolation.js +26 -0
- package/dist/core/engine/lifecycle/recovery-revision-groups.d.ts +75 -0
- package/dist/core/engine/lifecycle/recovery-revision-groups.js +64 -0
- package/dist/core/engine/lifecycle/resume-body.d.ts +44 -0
- package/dist/core/engine/lifecycle/resume-body.js +211 -0
- package/dist/core/engine/lifecycle/resume-generation-guard.d.ts +58 -0
- package/dist/core/engine/lifecycle/resume-generation-guard.js +11 -0
- package/dist/core/engine/lifecycle/resume.d.ts +46 -3
- package/dist/core/engine/lifecycle/resume.js +21 -201
- package/dist/core/engine/lifecycle/shared.d.ts +43 -0
- package/dist/core/engine/lifecycle/standalone-claim-acquire.d.ts +80 -2
- package/dist/core/engine/lifecycle/standalone-claim-acquire.js +20 -4
- package/dist/core/engine/lifecycle/start-commit-errors.d.ts +12 -0
- package/dist/core/engine/lifecycle/start-commit-errors.js +6 -0
- package/dist/core/engine/lifecycle/start-commit.d.ts +24 -7
- package/dist/core/engine/lifecycle/start-commit.js +57 -15
- package/dist/core/engine/lifecycle/start-exec.d.ts +18 -2
- package/dist/core/engine/lifecycle/start-exec.js +7 -5
- package/dist/core/engine/lifecycle/start-or-signal-create.js +1 -3
- package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +8 -2
- package/dist/core/engine/lifecycle/start-or-signal-resolution.js +11 -3
- package/dist/core/engine/lifecycle/start-or-signal.js +1 -1
- package/dist/core/engine/lifecycle/start-precondition-attribution.d.ts +55 -0
- package/dist/core/engine/lifecycle/start-precondition-attribution.js +13 -0
- package/dist/core/engine/lifecycle/start-revision-resolution.d.ts +34 -0
- package/dist/core/engine/lifecycle/start-revision-resolution.js +11 -0
- package/dist/core/engine/lifecycle/start-schedule-timing.d.ts +11 -0
- package/dist/core/engine/lifecycle/start-schedule-timing.js +21 -0
- package/dist/core/engine/lifecycle/start-state.d.ts +16 -0
- package/dist/core/engine/lifecycle/start-state.js +60 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +146 -4
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +33 -4
- package/dist/core/engine/lifecycle/start.d.ts +54 -7
- package/dist/core/engine/lifecycle/start.js +53 -90
- package/dist/core/engine/lifecycle/transition.d.ts +12 -4
- package/dist/core/engine/lifecycle/transition.js +40 -95
- package/dist/core/engine/lifecycle.d.ts +5 -2
- package/dist/core/engine/lifecycle.js +7 -6
- package/dist/core/engine/listing.js +15 -1
- package/dist/core/engine/memo-durable-activity.js +4 -1
- package/dist/core/engine/nonterminal-revision-count.d.ts +25 -0
- package/dist/core/engine/nonterminal-revision-count.js +16 -0
- package/dist/core/engine/operations-time.d.ts +5 -23
- package/dist/core/engine/operations-time.js +13 -11
- package/dist/core/engine/ownership-bootstrap.d.ts +1 -1
- package/dist/core/engine/pinned-schedule-revision-count.d.ts +26 -0
- package/dist/core/engine/pinned-schedule-revision-count.js +19 -0
- package/dist/core/engine/pinned-schedule-revision.d.ts +76 -0
- package/dist/core/engine/pinned-schedule-revision.js +53 -0
- package/dist/core/engine/registration.d.ts +30 -0
- package/dist/core/engine/registration.js +17 -2
- package/dist/core/engine/retention.js +9 -2
- package/dist/core/engine/revision-errors.d.ts +71 -0
- package/dist/core/engine/revision-errors.js +13 -0
- package/dist/core/engine/schedule-overlap.js +2 -1
- package/dist/core/engine/schedule-revision-fire.d.ts +17 -0
- package/dist/core/engine/schedule-revision-fire.js +3 -0
- package/dist/core/engine/schedule-run.d.ts +10 -0
- package/dist/core/engine/schedule-run.js +2 -1
- package/dist/core/engine/schedules.d.ts +11 -1
- package/dist/core/engine/schedules.js +28 -9
- package/dist/core/engine/source-diagnostics.d.ts +76 -0
- package/dist/core/engine/source-diagnostics.js +105 -0
- package/dist/core/engine/source-registration.js +4 -2
- package/dist/core/engine/source-resolution.d.ts +25 -9
- package/dist/core/engine/source-resolution.js +49 -14
- package/dist/core/engine/source-runtime-state.d.ts +92 -0
- package/dist/core/engine/source-runtime-state.js +36 -0
- package/dist/core/engine/storage-io.d.ts +19 -2
- package/dist/core/engine/storage-io.js +21 -2
- package/dist/core/engine/termination/complete.js +1 -1
- package/dist/core/engine/termination/finalizer-registration.d.ts +18 -0
- package/dist/core/engine/termination/finalizer-registration.js +21 -0
- package/dist/core/engine/termination/finalizer.d.ts +16 -19
- package/dist/core/engine/termination/finalizer.js +3 -3
- package/dist/core/engine/termination/suspend.js +3 -0
- package/dist/core/engine/time-operation-callbacks.d.ts +32 -0
- package/dist/core/engine/time-operation-callbacks.js +0 -0
- package/dist/core/engine/validation/schedule-cadence.d.ts +16 -0
- package/dist/core/engine/validation/schedule-cadence.js +20 -0
- package/dist/core/engine/validation/schedule-options.d.ts +4 -1
- package/dist/core/engine/validation/schedule-options.js +14 -0
- package/dist/core/engine/validation/schedule-revision.d.ts +24 -0
- package/dist/core/engine/validation/schedule-revision.js +21 -0
- package/dist/core/engine/validation/schedule-warnings.d.ts +11 -0
- package/dist/core/engine/validation/schedule-warnings.js +5 -0
- package/dist/core/engine/validation/schedule.d.ts +29 -4
- package/dist/core/engine/validation/schedule.js +19 -36
- package/dist/core/engine/validation.js +13 -17
- package/dist/core/engine/workflow-claim-reclaim-target.d.ts +1 -1
- package/dist/core/engine/workflow-claim-reclaim-target.js +22 -8
- package/dist/core/engine/workflow-claim-registry.d.ts +79 -75
- package/dist/core/engine/workflow-claim-registry.js +15 -2
- package/dist/core/engine/workflow-generation-fence.d.ts +74 -0
- package/dist/core/engine/workflow-generation-fence.js +19 -0
- package/dist/core/engine/workflow-retention-deadline.d.ts +16 -0
- package/dist/core/engine/workflow-retention-deadline.js +33 -0
- package/dist/core/events/event-map.d.ts +5 -0
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/workflow-source-events.d.ts +102 -0
- package/dist/core/events/workflow-source-events.js +57 -0
- package/dist/core/execution-strategy.d.ts +7 -0
- package/dist/core/inline-execution-strategy.context-options.d.ts +1 -1
- package/dist/core/inline-execution-strategy.js +1 -1
- package/dist/core/start-workflow-validation.d.ts +15 -0
- package/dist/core/start-workflow-validation.js +11 -1
- package/dist/core/types/checkpoint.d.ts +14 -0
- package/dist/core/types/schedules.d.ts +52 -1
- package/dist/core/types/state.d.ts +16 -0
- package/dist/core/weft-error.d.ts +1 -1
- package/dist/core/weft-error.js +4 -1
- package/dist/core/worker-execution-strategy.d.ts +1 -0
- package/dist/core/worker-execution-strategy.js +13 -1
- package/dist/core/worker-fault-handling.d.ts +10 -0
- package/dist/core/worker-fault-handling.js +1 -0
- package/dist/core/worker-inbound-message.d.ts +1 -0
- package/dist/core/worker-inbound-message.js +1 -0
- package/dist/core/worker-protocol-guard.js +4 -0
- package/dist/core/worker-protocol.d.ts +7 -0
- package/dist/core/worker-protocol.js +2 -1
- package/dist/core/worker-turn-watchdog.d.ts +8 -1
- package/dist/core/worker-turn-watchdog.js +3 -2
- package/dist/core/workflow-identifiers.d.ts +37 -0
- package/dist/core/workflow-identifiers.js +19 -1
- package/dist/diagnostics/format.js +5 -0
- package/dist/diagnostics/types.d.ts +24 -0
- package/dist/diagnostics/version-check.js +8 -2
- package/dist/http.js +2 -2
- package/dist/index.d.ts +3 -3
- package/dist/index.js +7 -0
- package/dist/indexeddb.js +1 -1
- package/dist/json-schema.js +3 -3
- package/dist/server/fault-to-json-rpc.js +2 -1
- package/dist/server/fleet-event-feed.js +6 -6
- package/dist/server/index.d.ts +11 -0
- package/dist/server/operation-fault.d.ts +2 -0
- package/dist/server/operation-fault.js +2 -1
- package/dist/server/operations/create-schedule.d.ts +2 -0
- package/dist/server/operations/create-schedule.js +10 -6
- package/dist/server/operations/get-catalog-diagnostics.d.ts +28 -0
- package/dist/server/operations/get-catalog-diagnostics.js +10 -2
- package/dist/server/operations/get-task-detail-schema.d.ts +8 -0
- package/dist/server/operations/get-task-detail-schema.js +1 -0
- package/dist/server/operations/get-task-detail.d.ts +8 -0
- package/dist/server/operations/get-task-detail.js +1 -0
- package/dist/server/operations/get-task-diagnostics.d.ts +4 -4
- package/dist/server/operations/preload-workflow-revision.d.ts +28 -0
- package/dist/server/operations/preload-workflow-revision.js +60 -0
- package/dist/server/operations/schedule-faults.d.ts +1 -0
- package/dist/server/operations/schedule-faults.js +32 -4
- package/dist/server/operations/schedule-rest-body.d.ts +1 -0
- package/dist/server/operations/schedule-rest-body.js +2 -1
- package/dist/server/operations/static-registrations.js +6 -0
- package/dist/server/operations/update-schedule.d.ts +2 -0
- package/dist/server/operations/update-schedule.js +4 -2
- package/dist/server/operations/workflow-catalog-operation-helpers.js +27 -0
- package/dist/server/rest-binding.d.ts +11 -0
- package/dist/server/runtime/task-dispatch-envelope.d.ts +41 -0
- package/dist/server/runtime/task-dispatch-envelope.js +54 -0
- package/dist/server/runtime/task-dispatch-revision.d.ts +29 -0
- package/dist/server/runtime/task-dispatch-revision.js +13 -0
- package/dist/server/runtime/task-dispatch.d.ts +3 -1
- package/dist/server/runtime/task-dispatch.js +20 -44
- package/dist/server/runtime/task-ledger-recovery.js +1 -1
- package/dist/server/runtime/task-ledger-runtime.d.ts +14 -2
- package/dist/server/runtime/task-ledger-runtime.js +5 -3
- package/dist/server/runtime/task-polling.js +9 -3
- package/dist/server/runtime/task-reconciliation.js +2 -1
- package/dist/server/runtime/websocket-worker.js +9 -0
- package/dist/server/task-ledger-codec.d.ts +28 -0
- package/dist/server/task-ledger-codec.js +7 -1
- package/dist/server/task-ledger-transition-helpers.js +1 -0
- package/dist/server/task-ledger-types.d.ts +9 -0
- package/dist/server/task-ledger.d.ts +1 -1
- package/dist/server/task-ledger.js +3 -1
- package/dist/server/task-queue-types.d.ts +2 -0
- package/dist/storage/bun-sql.js +135 -100
- package/dist/storage/catalog-keys.d.ts +19 -0
- package/dist/storage/catalog-keys.js +3 -1
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/generation-keys.d.ts +52 -0
- package/dist/storage/generation-keys.js +4 -0
- package/dist/storage/index.d.ts +76 -63
- package/dist/storage/interface.d.ts +24 -230
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +2 -0
- package/dist/storage/lease-keys.d.ts +48 -0
- package/dist/storage/lease-keys.js +8 -0
- package/dist/storage/lmdb.d.ts +30 -2
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon.js +3 -3
- package/dist/storage/node-sqlite.js +135 -100
- package/dist/storage/postgres.js +3 -3
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/signal-keys.d.ts +23 -0
- package/dist/storage/signal-keys.js +9 -0
- package/dist/storage/testing.js +1 -1
- package/dist/storage/turso.js +2 -2
- package/dist/storage/workflow-lifecycle-keys.d.ts +128 -0
- package/dist/storage/workflow-lifecycle-keys.js +46 -0
- package/dist/storage/workflow-record-keys.d.ts +98 -0
- package/dist/storage/workflow-record-keys.js +47 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/web-extension.js +1 -1
- package/dist/worker/protocol-messages.d.ts +17 -0
- package/dist/worker/protocol-schemas.d.ts +32 -0
- package/dist/worker/protocol-schemas.js +7 -3
- package/dist/worker/protocol-task-result.js +35 -3
- package/dist/worker/protocol.js +1 -1
- package/dist/worker/registry/types.d.ts +2 -0
- package/dist/worker/registry.d.ts +1 -1
- package/dist/worker/registry.js +3 -1
- package/dist/workers/workflow-runner.d.ts +9 -0
- package/dist/workers/workflow-runner.js +9 -2
- package/dist/workers/workflow-worker-entry.js +9 -4
- package/package.json +2 -2
package/dist/storage/index.d.ts
CHANGED
|
@@ -82,68 +82,6 @@ declare const exportedCopyTextKeyValueRowsToStorage: typeof copyTextKeyValueRows
|
|
|
82
82
|
* ```
|
|
83
83
|
*/
|
|
84
84
|
declare const exportedKeys: {
|
|
85
|
-
readonly budget: (namespace: string, period: string, date: string) => string;
|
|
86
|
-
readonly review: (workflowId: string, reviewId: string) => string;
|
|
87
|
-
readonly workflowHeaders: (workflowId: string) => string;
|
|
88
|
-
readonly childCancellationPrefix: (workflowId: string) => string;
|
|
89
|
-
readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
|
|
90
|
-
readonly childWorkflowByParentPrefix: (parentWorkflowId: string, parentWorkflowExecutionToken?: string) => string;
|
|
91
|
-
readonly childWorkflowByParent: (parentWorkflowId: string, parentWorkflowExecutionToken: string | undefined, childWorkflowId: string) => string;
|
|
92
|
-
readonly terminalCleanupNeeded: (workflowId: string) => string;
|
|
93
|
-
readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
|
|
94
|
-
readonly workflowConcurrencyHolder: (workflowId: string) => string;
|
|
95
|
-
readonly workflowHasServices: (workflowId: string) => string;
|
|
96
|
-
readonly finalizerState: (workflowId: string) => string;
|
|
97
|
-
readonly teardownOwed: (workflowId: string) => string;
|
|
98
|
-
readonly teardownSucceeded: (workflowId: string) => string;
|
|
99
|
-
readonly teardownDeadLetter: (workflowId: string) => string;
|
|
100
|
-
readonly offload: (workflowId: string, key: string) => string;
|
|
101
|
-
readonly archive: (workflowId: string, key: string) => string;
|
|
102
|
-
readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
|
|
103
|
-
readonly stateWorkflow: (workflowType: string, key: string) => string;
|
|
104
|
-
readonly streamChunkPrefix: (workflowId: string, key: string) => string;
|
|
105
|
-
readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
|
|
106
|
-
readonly streamTail: (workflowId: string, key: string) => string;
|
|
107
|
-
readonly streamMetadata: (workflowId: string, key: string) => string;
|
|
108
|
-
readonly budgetCharged: (operationId: string) => string;
|
|
109
|
-
readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
|
|
110
|
-
readonly workflowVisibilityStatus: (status: string, workflowId: string) => string;
|
|
111
|
-
readonly workflowVisibilityType: (type: string, workflowId: string) => string;
|
|
112
|
-
readonly workflowVisibilityCreated: (createdAt: number, workflowId: string) => string;
|
|
113
|
-
readonly workflowVisibilityUpdated: (updatedAt: number, workflowId: string) => string;
|
|
114
|
-
readonly workflowVisibilityDeadline: (deadline: number, workflowId: string) => string;
|
|
115
|
-
readonly workflowVisibilityManifest: (workflowId: string) => string;
|
|
116
|
-
readonly workflowVisibilityMetaVersion: () => string;
|
|
117
|
-
readonly workflowVisibilityMetaBuiltAt: () => string;
|
|
118
|
-
readonly workflowVisibilityMetaCursor: () => string;
|
|
119
|
-
readonly catalogEntry: (name: string, revision: string) => string;
|
|
120
|
-
readonly catalogEntryPrefix: (name: string) => string;
|
|
121
|
-
readonly catalogActive: (name: string) => string;
|
|
122
|
-
readonly workflowOwnerEpoch: (workflowId: string) => string;
|
|
123
|
-
readonly workflowOwnerHolder: (workflowId: string) => string;
|
|
124
|
-
readonly ownershipModeMarker: () => string;
|
|
125
|
-
readonly applicationOutbox: (namespace: string, ownerId: string) => string;
|
|
126
|
-
readonly applicationOutboxSinkProbe: (namespace: string, ownerId: string, nonce: string) => string;
|
|
127
|
-
readonly applicationDeliveryPrefix: (namespace: string, ownerId: string) => string;
|
|
128
|
-
readonly applicationDelivery: (namespace: string, ownerId: string, deliveryId: string) => string;
|
|
129
|
-
readonly applicationDeliveryDuePrefix: (namespace: string, ownerId: string) => string;
|
|
130
|
-
readonly applicationDeliveryDue: (namespace: string, ownerId: string, availableAt: number, deliveryId: string) => string;
|
|
131
|
-
readonly applicationDeliveryIdempotency: (namespace: string, ownerId: string, key: string) => string;
|
|
132
|
-
readonly applicationDeliveryBySequencePrefix: (namespace: string, ownerId: string) => string;
|
|
133
|
-
readonly applicationDeliveryBySequence: (namespace: string, ownerId: string, sequence: number) => string;
|
|
134
|
-
readonly applicationDeliveryTerminalPrefix: (namespace: string, ownerId: string) => string;
|
|
135
|
-
readonly applicationDeliveryTerminal: (namespace: string, ownerId: string, terminalAt: number, deliveryId: string) => string;
|
|
136
|
-
readonly applicationMailbox: (namespace: string, resourceId: string) => string;
|
|
137
|
-
readonly applicationMailboxSinkProbe: (namespace: string, resourceId: string, nonce: string) => string;
|
|
138
|
-
readonly applicationCommandPrefix: (namespace: string, resourceId: string) => string;
|
|
139
|
-
readonly applicationCommand: (namespace: string, resourceId: string, commandId: string) => string;
|
|
140
|
-
readonly applicationCommandReadyPrefix: (namespace: string, resourceId: string) => string;
|
|
141
|
-
readonly applicationCommandReady: (namespace: string, resourceId: string, sequence: number) => string;
|
|
142
|
-
readonly applicationCommandIdempotency: (namespace: string, resourceId: string, key: string) => string;
|
|
143
|
-
readonly applicationCommandBySequencePrefix: (namespace: string, resourceId: string) => string;
|
|
144
|
-
readonly applicationCommandBySequence: (namespace: string, resourceId: string, sequence: number) => string;
|
|
145
|
-
readonly applicationCommandTerminalPrefix: (namespace: string, resourceId: string) => string;
|
|
146
|
-
readonly applicationCommandTerminal: (namespace: string, resourceId: string, terminalAt: number, commandId: string) => string;
|
|
147
85
|
readonly workflow: (id: string) => string;
|
|
148
86
|
readonly checkpoint: (id: string) => string;
|
|
149
87
|
readonly checkpointHistory: (id: string, step: number) => string;
|
|
@@ -177,17 +115,20 @@ declare const exportedKeys: {
|
|
|
177
115
|
readonly fleetEventWatermark: () => string;
|
|
178
116
|
readonly fleetEventByWorkflowPrefix: (workflowId: string) => string;
|
|
179
117
|
readonly fleetEventByWorkflow: (workflowId: string, sequence: number) => string;
|
|
118
|
+
} & {
|
|
180
119
|
readonly signal: (workflowId: string, name: string, id: string) => string;
|
|
181
120
|
readonly startSignal: (workflowId: string, name: string, id: string) => string;
|
|
182
121
|
readonly signalSequence: (workflowId: string) => string;
|
|
183
122
|
readonly signalAcceptedResponsePrefix: (workflowId: string) => string;
|
|
184
123
|
readonly signalAcceptedResponse: (workflowId: string, name: string, signalId: string) => string;
|
|
124
|
+
} & {
|
|
185
125
|
readonly deadline: (deadline: number, workflowId: string) => string;
|
|
186
126
|
readonly terminalCleanup: (fireAt: number, timerId: string) => string;
|
|
187
127
|
readonly teardownTimer: (fireAt: number, timerId: string) => string;
|
|
188
128
|
readonly delayedStart: (startAt: number, workflowId: string) => string;
|
|
189
129
|
readonly terminalWorkflowPrefix: () => string;
|
|
190
130
|
readonly terminalWorkflow: (updatedAt: number, workflowId: string) => string;
|
|
131
|
+
} & {
|
|
191
132
|
readonly attribute: (workflowId: string) => string;
|
|
192
133
|
readonly attributeIndex: (attributeName: string, encodedValue: string, workflowId: string) => string;
|
|
193
134
|
readonly tagIndex: (tag: string, workflowId: string) => string;
|
|
@@ -197,11 +138,83 @@ declare const exportedKeys: {
|
|
|
197
138
|
readonly updateIdempotency: (workflowId: string, key: string) => string;
|
|
198
139
|
readonly startIdempotency: (key: string) => string;
|
|
199
140
|
readonly startIdempotencySignalId: (key: string) => string;
|
|
141
|
+
} & {
|
|
200
142
|
readonly livenessPrefix: () => string;
|
|
201
143
|
readonly liveness: (instanceId: string) => string;
|
|
202
144
|
readonly leasePrefix: () => string;
|
|
203
145
|
readonly leaseEpoch: () => string;
|
|
204
146
|
readonly leaseHolder: () => string;
|
|
147
|
+
} & {
|
|
148
|
+
readonly applicationMailbox: (namespace: string, resourceId: string) => string;
|
|
149
|
+
readonly applicationMailboxSinkProbe: (namespace: string, resourceId: string, nonce: string) => string;
|
|
150
|
+
readonly applicationCommandPrefix: (namespace: string, resourceId: string) => string;
|
|
151
|
+
readonly applicationCommand: (namespace: string, resourceId: string, commandId: string) => string;
|
|
152
|
+
readonly applicationCommandReadyPrefix: (namespace: string, resourceId: string) => string;
|
|
153
|
+
readonly applicationCommandReady: (namespace: string, resourceId: string, sequence: number) => string;
|
|
154
|
+
readonly applicationCommandIdempotency: (namespace: string, resourceId: string, key: string) => string;
|
|
155
|
+
readonly applicationCommandBySequencePrefix: (namespace: string, resourceId: string) => string;
|
|
156
|
+
readonly applicationCommandBySequence: (namespace: string, resourceId: string, sequence: number) => string;
|
|
157
|
+
readonly applicationCommandTerminalPrefix: (namespace: string, resourceId: string) => string;
|
|
158
|
+
readonly applicationCommandTerminal: (namespace: string, resourceId: string, terminalAt: number, commandId: string) => string;
|
|
159
|
+
} & {
|
|
160
|
+
readonly applicationOutbox: (namespace: string, ownerId: string) => string;
|
|
161
|
+
readonly applicationOutboxSinkProbe: (namespace: string, ownerId: string, nonce: string) => string;
|
|
162
|
+
readonly applicationDeliveryPrefix: (namespace: string, ownerId: string) => string;
|
|
163
|
+
readonly applicationDelivery: (namespace: string, ownerId: string, deliveryId: string) => string;
|
|
164
|
+
readonly applicationDeliveryDuePrefix: (namespace: string, ownerId: string) => string;
|
|
165
|
+
readonly applicationDeliveryDue: (namespace: string, ownerId: string, availableAt: number, deliveryId: string) => string;
|
|
166
|
+
readonly applicationDeliveryIdempotency: (namespace: string, ownerId: string, key: string) => string;
|
|
167
|
+
readonly applicationDeliveryBySequencePrefix: (namespace: string, ownerId: string) => string;
|
|
168
|
+
readonly applicationDeliveryBySequence: (namespace: string, ownerId: string, sequence: number) => string;
|
|
169
|
+
readonly applicationDeliveryTerminalPrefix: (namespace: string, ownerId: string) => string;
|
|
170
|
+
readonly applicationDeliveryTerminal: (namespace: string, ownerId: string, terminalAt: number, deliveryId: string) => string;
|
|
171
|
+
} & {
|
|
172
|
+
readonly workflowOwnerEpoch: (workflowId: string) => string;
|
|
173
|
+
readonly workflowOwnerHolder: (workflowId: string) => string;
|
|
174
|
+
readonly ownershipModeMarker: () => string;
|
|
175
|
+
} & {
|
|
176
|
+
readonly catalogEntry: (name: string, revision: string) => string;
|
|
177
|
+
readonly catalogEntryPrefix: (name: string) => string;
|
|
178
|
+
readonly catalogActive: (name: string) => string;
|
|
179
|
+
readonly catalogTombstone: (name: string, revision: string) => string;
|
|
180
|
+
readonly catalogTombstonePrefix: () => string;
|
|
181
|
+
} & {
|
|
182
|
+
readonly workflowGeneration: (workflowId: string) => string;
|
|
183
|
+
} & {
|
|
184
|
+
readonly budget: (namespace: string, period: string, date: string) => string;
|
|
185
|
+
readonly review: (workflowId: string, reviewId: string) => string;
|
|
186
|
+
readonly workflowHeaders: (workflowId: string) => string;
|
|
187
|
+
readonly childCancellationPrefix: (workflowId: string) => string;
|
|
188
|
+
readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
|
|
189
|
+
readonly childWorkflowByParentPrefix: (parentWorkflowId: string, parentWorkflowExecutionToken?: string) => string;
|
|
190
|
+
readonly childWorkflowByParent: (parentWorkflowId: string, parentWorkflowExecutionToken: string | undefined, childWorkflowId: string) => string;
|
|
191
|
+
readonly terminalCleanupNeeded: (workflowId: string) => string;
|
|
192
|
+
readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
|
|
193
|
+
readonly workflowConcurrencyHolder: (workflowId: string) => string;
|
|
194
|
+
readonly workflowHasServices: (workflowId: string) => string;
|
|
195
|
+
readonly finalizerState: (workflowId: string) => string;
|
|
196
|
+
readonly teardownOwed: (workflowId: string) => string;
|
|
197
|
+
readonly teardownSucceeded: (workflowId: string) => string;
|
|
198
|
+
readonly teardownDeadLetter: (workflowId: string) => string;
|
|
199
|
+
readonly offload: (workflowId: string, key: string) => string;
|
|
200
|
+
readonly archive: (workflowId: string, key: string) => string;
|
|
201
|
+
readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
|
|
202
|
+
readonly stateWorkflow: (workflowType: string, key: string) => string;
|
|
203
|
+
readonly streamChunkPrefix: (workflowId: string, key: string) => string;
|
|
204
|
+
readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
|
|
205
|
+
readonly streamTail: (workflowId: string, key: string) => string;
|
|
206
|
+
readonly streamMetadata: (workflowId: string, key: string) => string;
|
|
207
|
+
readonly budgetCharged: (operationId: string) => string;
|
|
208
|
+
readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
|
|
209
|
+
readonly workflowVisibilityStatus: (status: string, workflowId: string) => string;
|
|
210
|
+
readonly workflowVisibilityType: (type: string, workflowId: string) => string;
|
|
211
|
+
readonly workflowVisibilityCreated: (createdAt: number, workflowId: string) => string;
|
|
212
|
+
readonly workflowVisibilityUpdated: (updatedAt: number, workflowId: string) => string;
|
|
213
|
+
readonly workflowVisibilityDeadline: (deadline: number, workflowId: string) => string;
|
|
214
|
+
readonly workflowVisibilityManifest: (workflowId: string) => string;
|
|
215
|
+
readonly workflowVisibilityMetaVersion: () => string;
|
|
216
|
+
readonly workflowVisibilityMetaBuiltAt: () => string;
|
|
217
|
+
readonly workflowVisibilityMetaCursor: () => string;
|
|
205
218
|
};
|
|
206
219
|
/**
|
|
207
220
|
* Re-exported {@link MAX_BATCH_OPERATIONS}. See the original declaration for full docs.
|
|
@@ -382,7 +395,7 @@ declare const exportedTextValueStore: typeof textValueStore;
|
|
|
382
395
|
* void isWeftKey;
|
|
383
396
|
* ```
|
|
384
397
|
*/
|
|
385
|
-
declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "appcmd:", "appdidem:", "appdlv:", "appdseq:", "appdterm:", "appdue:", "appidem:", "appmbx:", "appobx:", "appprobe:", "appready:", "appseq:", "appterm:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "catalog-active:", "catalog-entry:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
|
|
398
|
+
declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "appcmd:", "appdidem:", "appdlv:", "appdseq:", "appdterm:", "appdue:", "appidem:", "appmbx:", "appobx:", "appprobe:", "appready:", "appseq:", "appterm:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "catalog-active:", "catalog-entry:", "catalog-tombstone:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-gen:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
|
|
386
399
|
/**
|
|
387
400
|
* Re-exported {@link withCodec}. See the original declaration for full docs.
|
|
388
401
|
*
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { type StorageCapabilities } from './capabilities.ts';
|
|
2
|
+
import { WORKFLOW_CATALOG_KEYS } from './catalog-keys.ts';
|
|
2
3
|
import type { DeleteRangeOptions } from './delete-range.ts';
|
|
4
|
+
import { GENERATION_KEYS } from './generation-keys.ts';
|
|
5
|
+
import { LEASE_KEYS } from './lease-keys.ts';
|
|
6
|
+
import { MAILBOX_KEYS } from './mailbox-keys.ts';
|
|
7
|
+
import { OUTBOX_KEYS } from './outbox-keys.ts';
|
|
8
|
+
import { OWNERSHIP_CLAIM_KEYS } from './ownership-keys.ts';
|
|
9
|
+
import { SIGNAL_KEYS } from './signal-keys.ts';
|
|
10
|
+
import { WORKFLOW_LIFECYCLE_KEYS_CORE, WORKFLOW_LIFECYCLE_KEYS_EXTENDED } from './workflow-lifecycle-keys.ts';
|
|
11
|
+
import { WORKFLOW_RECORD_KEYS_CORE, WORKFLOW_RECORD_KEYS_EXTENDED } from './workflow-record-keys.ts';
|
|
3
12
|
export { assertDurableStorageForRecovery, requireStorageCapability } from './capabilities.ts';
|
|
4
13
|
export type { GatedStorageCapabilityKey, StorageCapabilities } from './capabilities.ts';
|
|
5
14
|
export { DEFAULT_SCOPE } from './default-scope.ts';
|
|
@@ -303,11 +312,20 @@ export { decodeStorageKeyComponent, encodeStorageKeyComponent, formatSortableSto
|
|
|
303
312
|
* Key layout constants for hierarchical key encoding. Timestamps are
|
|
304
313
|
* zero-padded to 16 digits for lexicographic ordering.
|
|
305
314
|
*
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
* module spread into `KEYS` (see `ownership-keys.ts`) over
|
|
315
|
+
* The registry itself is assembled from feature-specific modules — `KEYS` is
|
|
316
|
+
* the spread merge of the workflow record, lifecycle, signal, lease, mailbox,
|
|
317
|
+
* outbox, ownership, and catalog key modules — so this file stays under the
|
|
318
|
+
* repository's default 500-line ceiling (WFT-90). Prefer adding a new key
|
|
319
|
+
* family as its own module spread into `KEYS` (see `ownership-keys.ts`) over
|
|
320
|
+
* growing this file directly.
|
|
321
|
+
*
|
|
322
|
+
* `KEYS` is typed as an explicit intersection of each source module's own
|
|
323
|
+
* `typeof` type rather than left to plain spread inference: TypeScript's
|
|
324
|
+
* declaration emit does not propagate per-member JSDoc through an inferred
|
|
325
|
+
* spread type, so hovering `KEYS.scheduleRunLink` would otherwise lose the
|
|
326
|
+
* documentation on `scheduleRunLink` itself. The intersection keeps each
|
|
327
|
+
* module's per-member docs as the single source of truth while still
|
|
328
|
+
* surfacing them through `KEYS`.
|
|
311
329
|
*
|
|
312
330
|
* @example
|
|
313
331
|
* ```ts
|
|
@@ -315,228 +333,4 @@ export { decodeStorageKeyComponent, encodeStorageKeyComponent, formatSortableSto
|
|
|
315
333
|
* KEYS.workflow('workflow-id');
|
|
316
334
|
* ```
|
|
317
335
|
*/
|
|
318
|
-
export declare const KEYS:
|
|
319
|
-
readonly budget: (namespace: string, period: string, date: string) => string;
|
|
320
|
-
readonly review: (workflowId: string, reviewId: string) => string;
|
|
321
|
-
readonly workflowHeaders: (workflowId: string) => string;
|
|
322
|
-
readonly childCancellationPrefix: (workflowId: string) => string;
|
|
323
|
-
readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
|
|
324
|
-
readonly childWorkflowByParentPrefix: (parentWorkflowId: string, parentWorkflowExecutionToken?: string) => string;
|
|
325
|
-
readonly childWorkflowByParent: (parentWorkflowId: string, parentWorkflowExecutionToken: string | undefined, childWorkflowId: string) => string;
|
|
326
|
-
readonly terminalCleanupNeeded: (workflowId: string) => string;
|
|
327
|
-
readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
|
|
328
|
-
readonly workflowConcurrencyHolder: (workflowId: string) => string;
|
|
329
|
-
/**
|
|
330
|
-
* Presence-only marker written at start only when a run is launched with a
|
|
331
|
-
* non-serialized `services` value (see `start-batch.ts`). It lets a
|
|
332
|
-
* fresh-process recovery tell a run whose services were lost on crash apart
|
|
333
|
-
* from one that never had any — the services value itself is never persisted,
|
|
334
|
-
* so this bit is the only durable trace. Cleared on terminal cleanup.
|
|
335
|
-
*/
|
|
336
|
-
readonly workflowHasServices: (workflowId: string) => string;
|
|
337
|
-
/**
|
|
338
|
-
* Last-write-wins payload that `ctx.setFinalizerState(value)` records for a
|
|
339
|
-
* workflow's definition-level `finalizer` activity (issue #446). Staged as a
|
|
340
|
-
* pending atomic side-effect so it commits with the next checkpoint or the
|
|
341
|
-
* terminal batch, and swept on terminal cleanup.
|
|
342
|
-
*
|
|
343
|
-
* **Current behavior (this release): recorded only.** Nothing reads this value
|
|
344
|
-
* yet. **Planned behavior (future release):** the engine will pass the decoded
|
|
345
|
-
* value as the finalizer's input when driving teardown after a
|
|
346
|
-
* `cancelled`/`timed-out` terminal, where presence means "a resource was
|
|
347
|
-
* recorded" and absence means the finalizer is skipped.
|
|
348
|
-
*/
|
|
349
|
-
readonly finalizerState: (workflowId: string) => string;
|
|
350
|
-
/**
|
|
351
|
-
* Durable execution-claim + attempt marker for a workflow that owes a finalizer
|
|
352
|
-
* run after a `cancelled`/`timed-out` terminal (issue #446 Phase 2). Mirrors the
|
|
353
|
-
* `wf-cleanup-needed:` lifecycle. The value is the encoded claim record
|
|
354
|
-
* `{ status: 'owed' | 'running'; attempts: number; token: string; claimedAt?: number }`:
|
|
355
|
-
* the engine fenced-CAS's `owed → running` (stamping `claimedAt`) before invoking the
|
|
356
|
-
* finalizer, and settle-CAS's the exact `running` bytes it wrote when clearing or
|
|
357
|
-
* rescheduling. Liveness is decided purely by TIME: a `running` claim is reclaimable
|
|
358
|
-
* once `claimedAt` is older than the finalizer's per-attempt timeout plus a margin
|
|
359
|
-
* (see `teardownStaleThresholdMs`), so crash recovery is an ordinary stale-claim retry
|
|
360
|
-
* driven by the timer that survived the terminal batch — there is no in-memory liveness
|
|
361
|
-
* set and no epoch in the record. The cost is that a finalizer running past the stale
|
|
362
|
-
* threshold may be re-driven concurrently, which is why workflow finalizers must be
|
|
363
|
-
* idempotent. Present while teardown is outstanding; deleted by the finalizer on
|
|
364
|
-
* success or when it dead-letters, which is what unblocks purge.
|
|
365
|
-
*/
|
|
366
|
-
readonly teardownOwed: (workflowId: string) => string;
|
|
367
|
-
/** Durable successful finalizer outcome, retained until workflow purge or retention. */
|
|
368
|
-
readonly teardownSucceeded: (workflowId: string) => string;
|
|
369
|
-
/**
|
|
370
|
-
* Durable audit record written when a workflow's finalizer permanently fails — the
|
|
371
|
-
* retry horizon is reached, or the recorded resource state vanished so the finalizer
|
|
372
|
-
* can never run (issue #446 Phase 2). Holds the `TeardownDeadLetterRecord` shape
|
|
373
|
-
* `{ type, lastError, attempts, deadLetteredAt, workflowExecutionToken?, finalizerInput? }`.
|
|
374
|
-
* **Excluded from the workflow purge delete-set** so it survives as the operator's
|
|
375
|
-
* evidence of a leaked external resource and remains queryable through the durable
|
|
376
|
-
* finalizer-status API after purge.
|
|
377
|
-
*/
|
|
378
|
-
readonly teardownDeadLetter: (workflowId: string) => string;
|
|
379
|
-
readonly offload: (workflowId: string, key: string) => string;
|
|
380
|
-
readonly archive: (workflowId: string, key: string) => string;
|
|
381
|
-
readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
|
|
382
|
-
readonly stateWorkflow: (workflowType: string, key: string) => string;
|
|
383
|
-
readonly streamChunkPrefix: (workflowId: string, key: string) => string;
|
|
384
|
-
readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
|
|
385
|
-
readonly streamTail: (workflowId: string, key: string) => string;
|
|
386
|
-
readonly streamMetadata: (workflowId: string, key: string) => string;
|
|
387
|
-
readonly budgetCharged: (operationId: string) => string;
|
|
388
|
-
readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
|
|
389
|
-
readonly workflowVisibilityStatus: (status: string, workflowId: string) => string;
|
|
390
|
-
readonly workflowVisibilityType: (type: string, workflowId: string) => string;
|
|
391
|
-
readonly workflowVisibilityCreated: (createdAt: number, workflowId: string) => string;
|
|
392
|
-
readonly workflowVisibilityUpdated: (updatedAt: number, workflowId: string) => string;
|
|
393
|
-
readonly workflowVisibilityDeadline: (deadline: number, workflowId: string) => string;
|
|
394
|
-
readonly workflowVisibilityManifest: (workflowId: string) => string;
|
|
395
|
-
readonly workflowVisibilityMetaVersion: () => string;
|
|
396
|
-
readonly workflowVisibilityMetaBuiltAt: () => string;
|
|
397
|
-
readonly workflowVisibilityMetaCursor: () => string;
|
|
398
|
-
readonly catalogEntry: (name: string, revision: string) => string;
|
|
399
|
-
readonly catalogEntryPrefix: (name: string) => string;
|
|
400
|
-
readonly catalogActive: (name: string) => string;
|
|
401
|
-
readonly workflowOwnerEpoch: (workflowId: string) => string;
|
|
402
|
-
readonly workflowOwnerHolder: (workflowId: string) => string;
|
|
403
|
-
readonly ownershipModeMarker: () => string;
|
|
404
|
-
readonly applicationOutbox: (namespace: string, ownerId: string) => string;
|
|
405
|
-
readonly applicationOutboxSinkProbe: (namespace: string, ownerId: string, nonce: string) => string;
|
|
406
|
-
readonly applicationDeliveryPrefix: (namespace: string, ownerId: string) => string;
|
|
407
|
-
readonly applicationDelivery: (namespace: string, ownerId: string, deliveryId: string) => string;
|
|
408
|
-
readonly applicationDeliveryDuePrefix: (namespace: string, ownerId: string) => string;
|
|
409
|
-
readonly applicationDeliveryDue: (namespace: string, ownerId: string, availableAt: number, deliveryId: string) => string;
|
|
410
|
-
readonly applicationDeliveryIdempotency: (namespace: string, ownerId: string, key: string) => string;
|
|
411
|
-
readonly applicationDeliveryBySequencePrefix: (namespace: string, ownerId: string) => string;
|
|
412
|
-
readonly applicationDeliveryBySequence: (namespace: string, ownerId: string, sequence: number) => string;
|
|
413
|
-
readonly applicationDeliveryTerminalPrefix: (namespace: string, ownerId: string) => string;
|
|
414
|
-
readonly applicationDeliveryTerminal: (namespace: string, ownerId: string, terminalAt: number, deliveryId: string) => string;
|
|
415
|
-
readonly applicationMailbox: (namespace: string, resourceId: string) => string;
|
|
416
|
-
readonly applicationMailboxSinkProbe: (namespace: string, resourceId: string, nonce: string) => string;
|
|
417
|
-
readonly applicationCommandPrefix: (namespace: string, resourceId: string) => string;
|
|
418
|
-
readonly applicationCommand: (namespace: string, resourceId: string, commandId: string) => string;
|
|
419
|
-
readonly applicationCommandReadyPrefix: (namespace: string, resourceId: string) => string;
|
|
420
|
-
readonly applicationCommandReady: (namespace: string, resourceId: string, sequence: number) => string;
|
|
421
|
-
readonly applicationCommandIdempotency: (namespace: string, resourceId: string, key: string) => string;
|
|
422
|
-
readonly applicationCommandBySequencePrefix: (namespace: string, resourceId: string) => string;
|
|
423
|
-
readonly applicationCommandBySequence: (namespace: string, resourceId: string, sequence: number) => string;
|
|
424
|
-
readonly applicationCommandTerminalPrefix: (namespace: string, resourceId: string) => string;
|
|
425
|
-
readonly applicationCommandTerminal: (namespace: string, resourceId: string, terminalAt: number, commandId: string) => string;
|
|
426
|
-
readonly workflow: (id: string) => string;
|
|
427
|
-
readonly checkpoint: (id: string) => string;
|
|
428
|
-
readonly checkpointHistory: (id: string, step: number) => string;
|
|
429
|
-
readonly timelinePrefix: (id: string) => string;
|
|
430
|
-
readonly timeline: (id: string, step: number) => string;
|
|
431
|
-
readonly schedule: (id: string) => string;
|
|
432
|
-
readonly scheduleTick: (fireAt: number, id: string) => string;
|
|
433
|
-
readonly scheduleRun: (workflowId: string) => string;
|
|
434
|
-
/**
|
|
435
|
-
* Durable per-workflow manifest for the schedule that launched a run. Unlike
|
|
436
|
-
* `scheduleRun`, this link survives terminal cleanup so schedule history can
|
|
437
|
-
* be queried until the workflow itself is purged.
|
|
438
|
-
*/
|
|
439
|
-
readonly scheduleRunLink: (workflowId: string) => string;
|
|
440
|
-
readonly scheduleRunBySchedulePrefix: (scheduleId: string) => string;
|
|
441
|
-
readonly scheduleRunBySchedule: (scheduleId: string, workflowId: string) => string;
|
|
442
|
-
readonly operation: (queue: string, scheduledAt: number, id: string) => string;
|
|
443
|
-
readonly operationInflight: (id: string) => string;
|
|
444
|
-
readonly operationQueued: (id: string) => string;
|
|
445
|
-
readonly operationResolved: (id: string) => string;
|
|
446
|
-
readonly bulkOperationAuditPrefix: () => string;
|
|
447
|
-
readonly bulkOperationAudit: (timestamp: number, requestId: string, confirmationToken: string) => string;
|
|
448
|
-
readonly operationResolvedByTimePrefix: () => string;
|
|
449
|
-
readonly operationResolvedByTime: (resolvedAt: number, id: string) => string;
|
|
450
|
-
readonly asyncActivity: (workflowId: string, token: string) => string;
|
|
451
|
-
readonly asyncActivityResolution: (workflowId: string, token: string) => string;
|
|
452
|
-
readonly activityReconciliationPrefix: (workflowId: string) => string;
|
|
453
|
-
readonly activityReconciliation: (workflowId: string, activityName: string, idempotencyKeyDigest: string) => string;
|
|
454
|
-
readonly eventPrefix: (workflowId: string) => string;
|
|
455
|
-
readonly event: (workflowId: string, sequence: number) => string;
|
|
456
|
-
readonly eventHead: (workflowId: string) => string;
|
|
457
|
-
readonly eventWatermark: (workflowId: string) => string;
|
|
458
|
-
readonly fleetEventPrefix: () => string;
|
|
459
|
-
readonly fleetEvent: (sequence: number) => string;
|
|
460
|
-
readonly fleetEventTail: () => string;
|
|
461
|
-
readonly fleetEventWatermark: () => string;
|
|
462
|
-
readonly fleetEventByWorkflowPrefix: (workflowId: string) => string;
|
|
463
|
-
readonly fleetEventByWorkflow: (workflowId: string, sequence: number) => string;
|
|
464
|
-
readonly signal: (workflowId: string, name: string, id: string) => string;
|
|
465
|
-
readonly startSignal: (workflowId: string, name: string, id: string) => string;
|
|
466
|
-
readonly signalSequence: (workflowId: string) => string;
|
|
467
|
-
readonly signalAcceptedResponsePrefix: (workflowId: string) => string;
|
|
468
|
-
readonly signalAcceptedResponse: (workflowId: string, name: string, signalId: string) => string;
|
|
469
|
-
readonly deadline: (deadline: number, workflowId: string) => string;
|
|
470
|
-
readonly terminalCleanup: (fireAt: number, timerId: string) => string;
|
|
471
|
-
/**
|
|
472
|
-
* Durable timer that drives a workflow's finalizer after a `cancelled`/`timed-out`
|
|
473
|
-
* terminal (issue #446 Phase 2). Sortable by `fireAt` and scanned by its own
|
|
474
|
-
* source (`wf-teardown:`) so it dispatches as the `teardown` timer kind rather
|
|
475
|
-
* than `terminal-cleanup`. Re-armed with exponential backoff on a failed finalizer
|
|
476
|
-
* attempt; the scheduler deletes the fired entry after the drive returns without
|
|
477
|
-
* throwing, so a backoff reschedule is a write of a new entry at the later `fireAt`.
|
|
478
|
-
*/
|
|
479
|
-
readonly teardownTimer: (fireAt: number, timerId: string) => string;
|
|
480
|
-
readonly delayedStart: (startAt: number, workflowId: string) => string;
|
|
481
|
-
readonly terminalWorkflowPrefix: () => string;
|
|
482
|
-
readonly terminalWorkflow: (updatedAt: number, workflowId: string) => string;
|
|
483
|
-
readonly attribute: (workflowId: string) => string;
|
|
484
|
-
readonly attributeIndex: (attributeName: string, encodedValue: string, workflowId: string) => string;
|
|
485
|
-
readonly tagIndex: (tag: string, workflowId: string) => string;
|
|
486
|
-
readonly updatePrefix: (workflowId: string) => string;
|
|
487
|
-
readonly update: (workflowId: string, updateId: string) => string;
|
|
488
|
-
readonly updateResponse: (updateId: string) => string;
|
|
489
|
-
readonly updateIdempotency: (workflowId: string, key: string) => string;
|
|
490
|
-
/**
|
|
491
|
-
* Maps a start `idempotencyKey` to the workflow id created for it. Written
|
|
492
|
-
* atomically with the workflow record under a `conditionalBatch` gated on this
|
|
493
|
-
* key being absent, so concurrent same-key starts converge on one workflow.
|
|
494
|
-
* Unlike `updateIdempotency`, it is keyed by the idempotency key alone (no
|
|
495
|
-
* workflow id) because the workflow id is the value it resolves to. It is
|
|
496
|
-
* intentionally NOT swept on terminal cleanup: it must outlive the run so a
|
|
497
|
-
* post-completion `startOrSignal` sees a terminal workflow (and conflicts)
|
|
498
|
-
* rather than missing the mapping and creating a fresh run.
|
|
499
|
-
*/
|
|
500
|
-
readonly startIdempotency: (key: string) => string;
|
|
501
|
-
/**
|
|
502
|
-
* The convergence signal id that `startOrSignal` derives from an idempotency
|
|
503
|
-
* key so independent same-key callers deliver ONE signal. Deliberately uses the
|
|
504
|
-
* RAW key (not `encodeStorageKeyComponent`): unlike `startIdempotency` this is a
|
|
505
|
-
* signal id, not a storage key, and `validateSignalId` is character-agnostic, so
|
|
506
|
-
* the raw key is always a valid id as long as it fits the byte cap (enforced as
|
|
507
|
-
* ≤117 bytes so `"start-idem:"` + key stays within the 128-byte signal-id
|
|
508
|
-
* ceiling). The two derivations are independent namespaces; both are individually
|
|
509
|
-
* correct, so the raw-vs-encoded difference is harmless.
|
|
510
|
-
*/
|
|
511
|
-
readonly startIdempotencySignalId: (key: string) => string;
|
|
512
|
-
/** Scan prefix for engine liveness heartbeats (best-effort second-instance detection). */
|
|
513
|
-
readonly livenessPrefix: () => string;
|
|
514
|
-
/** Per-engine liveness heartbeat key. One key per engine instance under the shared store. */
|
|
515
|
-
readonly liveness: (instanceId: string) => string;
|
|
516
|
-
/**
|
|
517
|
-
* Scan/match prefix for the lease-fenced single-writer ownership keys
|
|
518
|
-
* ({@link KEYS.leaseEpoch} and {@link KEYS.leaseHolder}). Reserved so a
|
|
519
|
-
* caller can recognize lease-owned keys; the lease itself uses the two exact
|
|
520
|
-
* keys below, not a scan.
|
|
521
|
-
*/
|
|
522
|
-
readonly leasePrefix: () => string;
|
|
523
|
-
/**
|
|
524
|
-
* The fencing epoch for lease-fenced ownership. A single shared key (one lease
|
|
525
|
-
* per durable store) holding an 8-byte big-endian uint64. It changes ONLY on
|
|
526
|
-
* ownership transfer (initial acquire or a steal after expiry), never on a
|
|
527
|
-
* renewal — so a holder's cached epoch stays stable across heartbeats and can
|
|
528
|
-
* be used unchanged as a `conditionalBatch` fencing condition. Kept separate
|
|
529
|
-
* from {@link KEYS.leaseHolder} precisely because `conditionalBatch` compares
|
|
530
|
-
* the whole stored value as bytes: folding the churning holder fields into the
|
|
531
|
-
* fencing token would make every renewal invalidate the fence.
|
|
532
|
-
*/
|
|
533
|
-
readonly leaseEpoch: () => string;
|
|
534
|
-
/**
|
|
535
|
-
* The current lease holder record for lease-fenced ownership. A single shared
|
|
536
|
-
* key (one lease per durable store) holding a JSON `{ holderId, expiresAt,
|
|
537
|
-
* epoch }`. Renewed every heartbeat tick (the `expiresAt` field advances), so
|
|
538
|
-
* its bytes churn and it must NOT be used as the fencing token — see
|
|
539
|
-
* {@link KEYS.leaseEpoch}.
|
|
540
|
-
*/
|
|
541
|
-
readonly leaseHolder: () => string;
|
|
542
|
-
};
|
|
336
|
+
export declare const KEYS: typeof WORKFLOW_RECORD_KEYS_CORE & typeof SIGNAL_KEYS & typeof WORKFLOW_LIFECYCLE_KEYS_CORE & typeof WORKFLOW_RECORD_KEYS_EXTENDED & typeof LEASE_KEYS & typeof MAILBOX_KEYS & typeof OUTBOX_KEYS & typeof OWNERSHIP_CLAIM_KEYS & typeof WORKFLOW_CATALOG_KEYS & typeof GENERATION_KEYS & typeof WORKFLOW_LIFECYCLE_KEYS_EXTENDED;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var E=import.meta.require;function l(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}function x(e){let t=e.capabilities(),n=[];if(t.persistence!=="local"&&t.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)n.push("atomicBatch must be true");if(!t.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}function r(e){return encodeURIComponent(e)}function C(e){return decodeURIComponent(e)}function k(e){try{return decodeURIComponent(e)}catch{return null}}function o(e){return String(e).padStart(16,"0")}var d={catalogEntry:(e,t)=>`catalog-entry:${r(e)}:${r(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${r(e)}:`,catalogActive:(e)=>`catalog-active:${r(e)}`};var g="default";async function u(e,t){return await e.get(t)!==null}async function*s(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function f(e,t){let n=0;for await(let i of s(e,t))n++;return n}async function m(e,t){let n=[];for await(let i of s(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function I(e,t,n){let i=[];for await(let v of s(e,t,n))i.push({type:"delete",key:v});if(i.length===0)return 0;return await e.batch(i),i.length}var y={applicationMailbox:(e,t)=>`appmbx:v1:${r(e)}:${r(t)}`,applicationMailboxSinkProbe:(e,t,n)=>`appprobe:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${r(e)}:${r(t)}:`,applicationCommand:(e,t,n)=>`appcmd:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${r(e)}:${r(t)}:`,applicationCommandReady:(e,t,n)=>`appready:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandIdempotency:(e,t,n)=>`appidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${r(e)}:${r(t)}:`,applicationCommandBySequence:(e,t,n)=>`appseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${r(e)}:${r(t)}:`,applicationCommandTerminal:(e,t,n,i)=>`appterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var b={applicationOutbox:(e,t)=>`appobx:v1:${r(e)}:${r(t)}`,applicationOutboxSinkProbe:(e,t,n)=>`appprobe:v1:outbox:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${r(e)}:${r(t)}:`,applicationDelivery:(e,t,n)=>`appdlv:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${r(e)}:${r(t)}:`,applicationDeliveryDue:(e,t,n,i)=>`appdue:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`,applicationDeliveryIdempotency:(e,t,n)=>`appdidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${r(e)}:${r(t)}:`,applicationDeliveryBySequence:(e,t,n)=>`appdseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${r(e)}:${r(t)}:`,applicationDeliveryTerminal:(e,t,n,i)=>`appdterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var h={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var P=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var c=1e4,Z=1e4;class S extends Error{code="StorageBatchOperationLimitExceededError";cap=c;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${c}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function p(e,t){if(t>c)throw new S(e,t)}function ee(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function te(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function re(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function ne(e,t){if(e.has)return e.has(t);return u(e,t)}function ie(e,t,n){if(e.keys)return e.keys(t,n);return s(e,t,n)}async function oe(e,t){if(e.count)return e.count(t);return f(e,t)}async function ae(e,t){if(e.deletePrefix)return e.deletePrefix(t);return m(e,t)}async function se(e,t){p("batch operations",t.length),await e.batch(t)}async function le(e,t,n){if(p("conditionalBatch conditions",t.length),p("conditionalBatch operations",n.length),l(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var a=o,O="0",B="1",w=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,ge={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${a(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${a(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${a(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`,signal:(e,t,n)=>w(e,t,n,B),startSignal:(e,t,n)=>w(e,t,n,O),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`,deadline:(e,t)=>`wf-deadline:${a(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${r(t)}`,attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`,livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",...y,...b,...h,...d,budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${g}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};export{g as DEFAULT_SCOPE,ge as KEYS,c as MAX_BATCH_OPERATIONS,Z as MAX_SCAN_LIMIT,S as StorageBatchOperationLimitExceededError,P as WEFT_RESERVED_KEY_PREFIXES,x as assertDurableStorageForRecovery,p as assertStorageBatchOperationCount,C as decodeStorageKeyComponent,r as encodeStorageKeyComponent,o as formatSortableStorageTimestamp,te as matchesScanOptions,l as requireStorageCapability,ee as resolvePrefixRangeEnd,se as storageBatch,le as storageConditionalBatch,oe as storageCount,ae as storageDeletePrefix,ne as storageHas,ie as storageKeys,re as storageValuesEqual,k as tryDecodeStorageKeyComponent};
|
|
2
|
+
var W=import.meta.require;function g(e,t,n){if(!e.capabilities()[t])throw Error(`Feature "${n}" requires storage capability "${t}", but this storage backend does not provide it.`)}function k(e){let t=e.capabilities(),n=[];if(t.persistence!=="local"&&t.persistence!=="remote")n.push(`persistence must be "local" or "remote" (got "${t.persistence}")`);if(t.readAfterWrite!=="linearizable")n.push(`readAfterWrite must be "linearizable" (got "${t.readAfterWrite}")`);if(t.scanConsistency!=="snapshot")n.push(`scanConsistency must be "snapshot" (got "${t.scanConsistency}")`);if(!t.atomicBatch)n.push("atomicBatch must be true");if(!t.conditionalBatch)n.push("conditionalBatch must be true");if(n.length>0)throw Error(`Storage is not durable enough for recovery: ${n.join("; ")}.`)}function r(e){return encodeURIComponent(e)}function A(e){return decodeURIComponent(e)}function L(e){try{return decodeURIComponent(e)}catch{return null}}function o(e){return String(e).padStart(16,"0")}var f={catalogEntry:(e,t)=>`catalog-entry:${r(e)}:${r(t)}`,catalogEntryPrefix:(e)=>`catalog-entry:${r(e)}:`,catalogActive:(e)=>`catalog-active:${r(e)}`,catalogTombstone:(e,t)=>`catalog-tombstone:${r(e)}:${r(t)}`,catalogTombstonePrefix:()=>"catalog-tombstone:"};async function m(e,t){return await e.get(t)!==null}async function*s(e,t,n){for await(let[i]of e.scan(t,n))yield i}async function u(e,t){let n=0;for await(let i of s(e,t))n++;return n}async function y(e,t){let n=[];for await(let i of s(e,t))n.push({type:"delete",key:i});if(n.length===0)return 0;return await e.batch(n),n.length}async function M(e,t,n){let i=[];for await(let P of s(e,t,n))i.push({type:"delete",key:P});if(i.length===0)return 0;return await e.batch(i),i.length}var S={workflowGeneration:(e)=>`wf-gen:${r(e)}`};var b={livenessPrefix:()=>"liveness:",liveness:(e)=>`liveness:${r(e)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder"};var h={applicationMailbox:(e,t)=>`appmbx:v1:${r(e)}:${r(t)}`,applicationMailboxSinkProbe:(e,t,n)=>`appprobe:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandPrefix:(e,t)=>`appcmd:v1:${r(e)}:${r(t)}:`,applicationCommand:(e,t,n)=>`appcmd:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandReadyPrefix:(e,t)=>`appready:v1:${r(e)}:${r(t)}:`,applicationCommandReady:(e,t,n)=>`appready:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandIdempotency:(e,t,n)=>`appidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationCommandBySequencePrefix:(e,t)=>`appseq:v1:${r(e)}:${r(t)}:`,applicationCommandBySequence:(e,t,n)=>`appseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationCommandTerminalPrefix:(e,t)=>`appterm:v1:${r(e)}:${r(t)}:`,applicationCommandTerminal:(e,t,n,i)=>`appterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var w={applicationOutbox:(e,t)=>`appobx:v1:${r(e)}:${r(t)}`,applicationOutboxSinkProbe:(e,t,n)=>`appprobe:v1:outbox:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryPrefix:(e,t)=>`appdlv:v1:${r(e)}:${r(t)}:`,applicationDelivery:(e,t,n)=>`appdlv:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryDuePrefix:(e,t)=>`appdue:v1:${r(e)}:${r(t)}:`,applicationDeliveryDue:(e,t,n,i)=>`appdue:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`,applicationDeliveryIdempotency:(e,t,n)=>`appdidem:v1:${r(e)}:${r(t)}:${r(n)}`,applicationDeliveryBySequencePrefix:(e,t)=>`appdseq:v1:${r(e)}:${r(t)}:`,applicationDeliveryBySequence:(e,t,n)=>`appdseq:v1:${r(e)}:${r(t)}:${o(n)}`,applicationDeliveryTerminalPrefix:(e,t)=>`appdterm:v1:${r(e)}:${r(t)}:`,applicationDeliveryTerminal:(e,t,n,i)=>`appdterm:v1:${r(e)}:${r(t)}:${o(n)}:${r(i)}`};var E={workflowOwnerEpoch:(e)=>`wf-owner-epoch:${r(e)}`,workflowOwnerHolder:(e)=>`wf-owner-holder:${r(e)}`,ownershipModeMarker:()=>"ownership-mode-marker"};var B="0",T="1",x=(e,t,n,i)=>`sig:${r(e)}:${r(t)}:${i}:${r(n)}`,C={signal:(e,t,n)=>x(e,t,n,T),startSignal:(e,t,n)=>x(e,t,n,B),signalSequence:(e)=>`sigseq:v1:${r(e)}`,signalAcceptedResponsePrefix:(e)=>`sigres:v1:${r(e)}:`,signalAcceptedResponse:(e,t,n)=>`sigres:v1:${r(e)}:${r(t)}:${r(n)}`};var c="default";var a=o,v={deadline:(e,t)=>`wf-deadline:${a(e)}:${r(t)}`,terminalCleanup:(e,t)=>`wf-cleanup:${a(e)}:${r(t)}`,teardownTimer:(e,t)=>`wf-teardown:${a(e)}:${r(t)}`,delayedStart:(e,t)=>`wf-delayed:${a(e)}:${r(t)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(e,t)=>`wf-terminal:${a(e)}:${r(t)}`},O={budget:(e,t,n)=>`budget:${e}:${t}:${n}`,review:(e,t)=>`review:${r(e)}:${t}`,workflowHeaders:(e)=>`wf-headers:${r(e)}`,childCancellationPrefix:(e)=>`child-cancel:${r(e)}:`,childCancellation:(e,t)=>`child-cancel:${r(e)}:${r(t)}`,childWorkflowByParentPrefix:(e,t)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}`,childWorkflowByParent:(e,t,n)=>`child-by-parent:${r(e)}:${t===void 0?"":`${r(t)}:`}${r(n)}`,terminalCleanupNeeded:(e)=>`wf-cleanup-needed:${r(e)}`,workflowConcurrency:(e,t)=>`wf-concurrency:${r(e)}:${r(t)}`,workflowConcurrencyHolder:(e)=>`wf-concurrency-holder:${r(e)}`,workflowHasServices:(e)=>`wf-has-services:${r(e)}`,finalizerState:(e)=>`wf-finalizer-state:${r(e)}`,teardownOwed:(e)=>`wf-teardown-needed:${r(e)}`,teardownSucceeded:(e)=>`wf-teardown-succeeded:${r(e)}`,teardownDeadLetter:(e)=>`wf-teardown-deadletter:${r(e)}`,offload:(e,t)=>`offload:${r(e)}:${t}`,archive:(e,t)=>`archive:${r(e)}:${t}`,stateExecution:(e,t)=>`state:execution:${r(e)}:${r(t)}`,stateWorkflow:(e,t)=>`state:workflow-scope:${c}:${r(e)}:${r(t)}`,streamChunkPrefix:(e,t)=>`blob:${r(e)}:${t}:chunk:`,streamChunk:(e,t,n)=>`blob:${r(e)}:${t}:chunk:${String(n).padStart(10,"0")}`,streamTail:(e,t)=>`blob:${r(e)}:${t}:tail`,streamMetadata:(e,t)=>`blob:${r(e)}:${t}:meta`,budgetCharged:(e)=>`budget-charged:${e}`,toolEffect:(e,t,n)=>`tool-effect:${r(e)}:${t}:${n}`,workflowVisibilityStatus:(e,t)=>`wf-idx-status:${r(e)}:${r(t)}`,workflowVisibilityType:(e,t)=>`wf-idx-type:${r(e)}:${r(t)}`,workflowVisibilityCreated:(e,t)=>`wf-idx-created:${a(e)}:${r(t)}`,workflowVisibilityUpdated:(e,t)=>`wf-idx-updated:${a(e)}:${r(t)}`,workflowVisibilityDeadline:(e,t)=>`wf-idx-deadline:${a(e)}:${r(t)}`,workflowVisibilityManifest:(e)=>`wf-idx-manifest:${r(e)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};var l=o,_={workflow:(e)=>`wf:${r(e)}`,checkpoint:(e)=>`wf:${r(e)}:ckpt`,checkpointHistory:(e,t)=>`wf:${r(e)}:ckpt:${String(t).padStart(10,"0")}`,timelinePrefix:(e)=>`wf:${r(e)}:timeline:`,timeline:(e,t)=>`wf:${r(e)}:timeline:${String(t).padStart(10,"0")}`,schedule:(e)=>`schedule:${r(e)}`,scheduleTick:(e,t)=>`schedule-due:${String(e).padStart(16,"0")}:${r(t)}`,scheduleRun:(e)=>`schedule-run:${r(e)}`,scheduleRunLink:(e)=>`schedule-run-link:${r(e)}`,scheduleRunBySchedulePrefix:(e)=>`schedule-run-by-schedule:${r(e)}:`,scheduleRunBySchedule:(e,t)=>`schedule-run-by-schedule:${r(e)}:${r(t)}`,operation:(e,t,n)=>`op:${e}:${l(t)}:${n}`,operationInflight:(e)=>`op:inflight:${e}`,operationQueued:(e)=>`op:queued:${e}`,operationResolved:(e)=>`op:resolved:${e}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(e,t,n)=>`audit:bulk:${l(e)}:${r(t)}:${r(n)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(e,t)=>`op:resolved-by-time:${l(e)}:${r(t)}`,asyncActivity:(e,t)=>`async-act:v1:${r(e)}:${r(t)}`,asyncActivityResolution:(e,t)=>`async-act:v1:${r(e)}:${r(t)}:resolution`,activityReconciliationPrefix:(e)=>`actrec:v1:${r(e)}:`,activityReconciliation:(e,t,n)=>`actrec:v1:${r(e)}:${r(t)}:${n}`,eventPrefix:(e)=>`ev:${r(e)}:`,event:(e,t)=>`ev:${r(e)}:${String(t).padStart(10,"0")}`,eventHead:(e)=>`ev:${r(e)}:head`,eventWatermark:(e)=>`ev:${r(e)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(e)=>`fleet-event:${String(e).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventWatermark:()=>"fleet-event-watermark",fleetEventByWorkflowPrefix:(e)=>`fleet-event-by-workflow:${r(e)}:`,fleetEventByWorkflow:(e,t)=>`fleet-event-by-workflow:${r(e)}:${String(t).padStart(10,"0")}`},R={attribute:(e)=>`attr:${r(e)}`,attributeIndex:(e,t,n)=>`idx:${e}:${t}:${r(n)}`,tagIndex:(e,t)=>`tag:${r(e)}:${r(t)}`,updatePrefix:(e)=>`upd:${r(e)}:`,update:(e,t)=>`upd:${r(e)}:${t}`,updateResponse:(e)=>`upr:${e}`,updateIdempotency:(e,t)=>`upk:${r(e)}:${t}`,startIdempotency:(e)=>`start-idem:${r(e)}`,startIdempotencySignalId:(e)=>`start-idem:${e}`};var D=["actrec:","appcmd:","appdidem:","appdlv:","appdseq:","appdterm:","appdue:","appidem:","appmbx:","appobx:","appprobe:","appready:","appseq:","appterm:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","catalog-active:","catalog-entry:","catalog-tombstone:","child-by-parent:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","fleet-event-watermark","idx:","lease:","liveness:","offload:","ownership-mode-marker","op:","review:","schedule:","schedule-due:","schedule-run-by-schedule:","schedule-run-link:","schedule-run:","sig:","sigres:","sigseq:","start-idem:","state:","tag:","tool-effect:","upd:","upk:","upr:","wf:","wf-cleanup:","wf-cleanup-needed:","wf-concurrency:","wf-concurrency-holder:","wf-deadline:","wf-delayed:","wf-finalizer-state:","wf-gen:","wf-has-services:","wf-headers:","wf-idx-","wf-owner-epoch:","wf-owner-holder:","wf-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-teardown-succeeded:","wf-terminal:"];var p=1e4,we=1e4;class K extends Error{code="StorageBatchOperationLimitExceededError";cap=p;count;target;constructor(e,t){super(`${e} count ${t} exceeds MAX_BATCH_OPERATIONS (${p}).`);this.name="StorageBatchOperationLimitExceededError",this.target=e,this.count=t}}function d(e,t){if(t>p)throw new K(e,t)}function Ee(e){return e.length>0?e.slice(0,-1)+String.fromCharCode(e.charCodeAt(e.length-1)+1):"\xFF"}function xe(e,t={}){if(t.gt!==void 0&&e<=t.gt)return!1;if(t.gte!==void 0&&e<t.gte)return!1;if(t.lt!==void 0&&e>=t.lt)return!1;if(t.lte!==void 0&&e>t.lte)return!1;return!0}function Ce(e,t){if(e===null||t===null)return e===t;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}async function ve(e,t){if(e.has)return e.has(t);return m(e,t)}function Oe(e,t,n){if(e.keys)return e.keys(t,n);return s(e,t,n)}async function _e(e,t){if(e.count)return e.count(t);return u(e,t)}async function Re(e,t){if(e.deletePrefix)return e.deletePrefix(t);return y(e,t)}async function Ke(e,t){d("batch operations",t.length),await e.batch(t)}async function Pe(e,t,n){if(d("conditionalBatch conditions",t.length),d("conditionalBatch operations",n.length),g(e,"conditionalBatch","storageConditionalBatch"),!e.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return e.conditionalBatch(t,n)}var ke={..._,...C,...v,...R,...b,...h,...w,...E,...f,...S,...O};export{c as DEFAULT_SCOPE,ke as KEYS,p as MAX_BATCH_OPERATIONS,we as MAX_SCAN_LIMIT,K as StorageBatchOperationLimitExceededError,D as WEFT_RESERVED_KEY_PREFIXES,k as assertDurableStorageForRecovery,d as assertStorageBatchOperationCount,A as decodeStorageKeyComponent,r as encodeStorageKeyComponent,o as formatSortableStorageTimestamp,xe as matchesScanOptions,g as requireStorageCapability,Ee as resolvePrefixRangeEnd,Ke as storageBatch,Pe as storageConditionalBatch,_e as storageCount,Re as storageDeletePrefix,ve as storageHas,Oe as storageKeys,Ce as storageValuesEqual,L as tryDecodeStorageKeyComponent};
|
|
@@ -16,4 +16,4 @@
|
|
|
16
16
|
* console.log(isWeftKey); // true
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
|
-
export declare const WEFT_RESERVED_KEY_PREFIXES: readonly ["actrec:", "appcmd:", "appdidem:", "appdlv:", "appdseq:", "appdterm:", "appdue:", "appidem:", "appmbx:", "appobx:", "appprobe:", "appready:", "appseq:", "appterm:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "catalog-active:", "catalog-entry:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
|
|
19
|
+
export declare const WEFT_RESERVED_KEY_PREFIXES: readonly ["actrec:", "appcmd:", "appdidem:", "appdlv:", "appdseq:", "appdterm:", "appdue:", "appidem:", "appmbx:", "appobx:", "appprobe:", "appready:", "appseq:", "appterm:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "catalog-active:", "catalog-entry:", "catalog-tombstone:", "child-by-parent:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "fleet-event-watermark", "idx:", "lease:", "liveness:", "offload:", "ownership-mode-marker", "op:", "review:", "schedule:", "schedule-due:", "schedule-run-by-schedule:", "schedule-run-link:", "schedule-run:", "sig:", "sigres:", "sigseq:", "start-idem:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-concurrency:", "wf-concurrency-holder:", "wf-deadline:", "wf-delayed:", "wf-finalizer-state:", "wf-gen:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-owner-epoch:", "wf-owner-holder:", "wf-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-teardown-succeeded:", "wf-terminal:"];
|
|
@@ -22,6 +22,7 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
|
|
|
22
22
|
"budget-charged:",
|
|
23
23
|
"catalog-active:",
|
|
24
24
|
"catalog-entry:",
|
|
25
|
+
"catalog-tombstone:",
|
|
25
26
|
"child-by-parent:",
|
|
26
27
|
"ev:",
|
|
27
28
|
"fleet-event-by-workflow:",
|
|
@@ -58,6 +59,7 @@ export const WEFT_RESERVED_KEY_PREFIXES = [
|
|
|
58
59
|
"wf-deadline:",
|
|
59
60
|
"wf-delayed:",
|
|
60
61
|
"wf-finalizer-state:",
|
|
62
|
+
"wf-gen:",
|
|
61
63
|
"wf-has-services:",
|
|
62
64
|
"wf-headers:",
|
|
63
65
|
"wf-idx-",
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage key builders for engine liveness heartbeats and the store-wide
|
|
3
|
+
* lease-fenced single-writer lock.
|
|
4
|
+
*
|
|
5
|
+
* These are spread into `KEYS` in `interface.ts` rather than declared there, so
|
|
6
|
+
* the liveness and lease keyspace can carry its full rationale without pushing
|
|
7
|
+
* that file's documented line ceiling. Callers still reach them through `KEYS`,
|
|
8
|
+
* which keeps one import contract for storage keys.
|
|
9
|
+
*
|
|
10
|
+
* @module storage/lease-keys
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Engine liveness heartbeat keys plus the lease-fenced single-writer ownership
|
|
14
|
+
* keys (`ownership: 'lease'`).
|
|
15
|
+
*
|
|
16
|
+
* Spread into `KEYS`; not intended to be imported directly by engine code.
|
|
17
|
+
*/
|
|
18
|
+
export declare const LEASE_KEYS: {
|
|
19
|
+
/** Scan prefix for engine liveness heartbeats (best-effort second-instance detection). */
|
|
20
|
+
readonly livenessPrefix: () => string;
|
|
21
|
+
/** Per-engine liveness heartbeat key. One key per engine instance under the shared store. */
|
|
22
|
+
readonly liveness: (instanceId: string) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Scan/match prefix for the lease-fenced single-writer ownership keys
|
|
25
|
+
* (`leaseEpoch` and `leaseHolder`). Reserved so a caller can recognize
|
|
26
|
+
* lease-owned keys; the lease itself uses the two exact keys below, not a scan.
|
|
27
|
+
*/
|
|
28
|
+
readonly leasePrefix: () => string;
|
|
29
|
+
/**
|
|
30
|
+
* The fencing epoch for lease-fenced ownership. A single shared key (one lease
|
|
31
|
+
* per durable store) holding an 8-byte big-endian uint64. It changes ONLY on
|
|
32
|
+
* ownership transfer (initial acquire or a steal after expiry), never on a
|
|
33
|
+
* renewal — so a holder's cached epoch stays stable across heartbeats and can
|
|
34
|
+
* be used unchanged as a `conditionalBatch` fencing condition. Kept separate
|
|
35
|
+
* from `leaseHolder` precisely because `conditionalBatch` compares the whole
|
|
36
|
+
* stored value as bytes: folding the churning holder fields into the fencing
|
|
37
|
+
* token would make every renewal invalidate the fence.
|
|
38
|
+
*/
|
|
39
|
+
readonly leaseEpoch: () => string;
|
|
40
|
+
/**
|
|
41
|
+
* The current lease holder record for lease-fenced ownership. A single shared
|
|
42
|
+
* key (one lease per durable store) holding a JSON `{ holderId, expiresAt,
|
|
43
|
+
* epoch }`. Renewed every heartbeat tick (the `expiresAt` field advances), so
|
|
44
|
+
* its bytes churn and it must NOT be used as the fencing token — see
|
|
45
|
+
* `leaseEpoch`.
|
|
46
|
+
*/
|
|
47
|
+
readonly leaseHolder: () => string;
|
|
48
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { encodeStorageKeyComponent } from "./key-encoding.js";
|
|
2
|
+
export const LEASE_KEYS = {
|
|
3
|
+
livenessPrefix: () => "liveness:",
|
|
4
|
+
liveness: (instanceId) => `liveness:${encodeStorageKeyComponent(instanceId)}`,
|
|
5
|
+
leasePrefix: () => "lease:",
|
|
6
|
+
leaseEpoch: () => "lease:epoch",
|
|
7
|
+
leaseHolder: () => "lease:holder"
|
|
8
|
+
};
|