@lostgradient/weft 0.2.1 → 0.4.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/README.md +123 -43
- package/dist/cli/conformance.js +7 -1
- package/dist/cli/generated/operation-client.generated.d.ts +55 -13
- package/dist/cli/generated/operation-client.generated.js +3 -0
- package/dist/cli/help-text.d.ts +1 -1
- package/dist/cli/help-text.js +1 -0
- package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
- package/dist/cli/operation-catalog-snapshot.js +11 -0
- package/dist/cli/parse-schedule-arguments.js +3 -1
- package/dist/cli/schedule.js +2 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli-main.js +80 -79
- package/dist/client/handle-delegation.d.ts +7 -2
- package/dist/client/handle-delegation.js +9 -1
- package/dist/client/http-client-requests.d.ts +4 -1
- package/dist/client/http-client-requests.js +10 -0
- package/dist/client/http-client.d.ts +10 -4
- package/dist/client/http-client.js +18 -1
- package/dist/client/http-request.d.ts +11 -1
- package/dist/client/http-request.js +17 -7
- package/dist/client/index.d.ts +1 -1
- package/dist/client/interface.d.ts +100 -4
- package/dist/client/local.d.ts +7 -1
- package/dist/client/local.js +17 -2
- package/dist/client/start-body.d.ts +9 -2
- package/dist/client/start-body.js +13 -4
- package/dist/core/byte-arrays.d.ts +5 -0
- package/dist/core/byte-arrays.js +5 -0
- package/dist/core/checkpoint/lifecycle.d.ts +3 -0
- package/dist/core/checkpoint/lifecycle.js +9 -4
- package/dist/core/checkpoint/serialization.js +12 -5
- package/dist/core/codec/extension-codec.d.ts +16 -0
- package/dist/core/codec/extension-codec.js +104 -8
- package/dist/core/codec/index.d.ts +1 -0
- package/dist/core/codec/index.js +1 -0
- package/dist/core/codec/serializer-registry.d.ts +122 -0
- package/dist/core/codec/serializer-registry.js +51 -0
- package/dist/core/context/activity-retry-state.d.ts +38 -0
- package/dist/core/context/activity-retry-state.js +89 -0
- package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
- package/dist/core/context/activity-schedule-to-close.js +69 -0
- package/dist/core/context/child-workflow-pipe.d.ts +5 -5
- package/dist/core/context/child-workflow-pipe.js +15 -2
- package/dist/core/context/context-presence.d.ts +19 -0
- package/dist/core/context/context-presence.js +13 -0
- package/dist/core/context/durable-operations.d.ts +25 -0
- package/dist/core/context/durable-operations.js +64 -0
- package/dist/core/context/index.d.ts +18 -5
- package/dist/core/context/index.js +17 -12
- package/dist/core/context/internals.d.ts +29 -0
- package/dist/core/context/internals.js +6 -1
- package/dist/core/context/operation-request.d.ts +35 -0
- package/dist/core/context/parallel-cache-entry.d.ts +14 -5
- package/dist/core/context/run-operation.d.ts +21 -3
- package/dist/core/context/run-operation.js +56 -93
- package/dist/core/context/session-state.js +7 -8
- package/dist/core/context/speculative-child.js +2 -0
- package/dist/core/context/types.d.ts +15 -0
- package/dist/core/context/version-patching.d.ts +8 -0
- package/dist/core/context/version-patching.js +40 -0
- package/dist/core/context/workflow-logger.d.ts +98 -0
- package/dist/core/context/workflow-logger.js +68 -0
- package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
- package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
- package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
- package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
- package/dist/core/engine/activity-reconciliation.d.ts +1 -0
- package/dist/core/engine/activity-reconciliation.js +12 -1
- package/dist/core/engine/activity-resolution.d.ts +23 -0
- package/dist/core/engine/activity-resolution.js +37 -0
- package/dist/core/engine/aggregate.js +66 -30
- package/dist/core/engine/async-activity-completion.d.ts +23 -6
- package/dist/core/engine/async-activity-completion.js +53 -12
- package/dist/core/engine/attributes-tags.js +9 -4
- package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
- package/dist/core/engine/bulk-operations-purge.js +38 -3
- package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
- package/dist/core/engine/bulk-operations-shared.js +8 -2
- package/dist/core/engine/bulk-operations.d.ts +4 -1
- package/dist/core/engine/bulk-operations.js +235 -24
- package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
- package/dist/core/engine/callback-creators-bundles.js +30 -2
- package/dist/core/engine/callback-creators-core.js +6 -4
- package/dist/core/engine/callback-creators-router.js +10 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
- package/dist/core/engine/callback-creators-schedule.js +12 -8
- package/dist/core/engine/candidate-read-batching.d.ts +6 -0
- package/dist/core/engine/candidate-read-batching.js +1 -0
- package/dist/core/engine/checkpoint-io.js +61 -25
- package/dist/core/engine/checkpoint-reads.js +3 -2
- package/dist/core/engine/checkpoint-replay.d.ts +20 -0
- package/dist/core/engine/checkpoint-replay.js +242 -0
- package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
- package/dist/core/engine/checkpoint-side-effects.js +35 -0
- package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
- package/dist/core/engine/child-workflow-cancellation.js +40 -0
- package/dist/core/engine/child-workflow.js +27 -4
- package/dist/core/engine/condition-waiters.d.ts +14 -0
- package/dist/core/engine/condition-waiters.js +5 -0
- package/dist/core/engine/construction.d.ts +3 -1
- package/dist/core/engine/construction.js +30 -8
- package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
- package/dist/core/engine/coordination-branch-executors.js +107 -0
- package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
- package/dist/core/engine/deferred-consume-envelope.js +14 -0
- package/dist/core/engine/disposal.js +25 -0
- package/dist/core/engine/engine-create-types.d.ts +14 -18
- package/dist/core/engine/engine-internal-types.d.ts +38 -3
- package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
- package/dist/core/engine/engine-leak-warnings.js +4 -0
- package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
- package/dist/core/engine/engine-runtime-helpers.js +26 -5
- package/dist/core/engine/errors.d.ts +121 -0
- package/dist/core/engine/errors.js +45 -1
- package/dist/core/engine/event-log-compaction.d.ts +8 -0
- package/dist/core/engine/event-log-compaction.js +20 -2
- package/dist/core/engine/fenced-write.d.ts +65 -0
- package/dist/core/engine/fenced-write.js +71 -0
- package/dist/core/engine/finalizer-state.d.ts +28 -0
- package/dist/core/engine/finalizer-state.js +16 -0
- package/dist/core/engine/handle-result.js +1 -1
- package/dist/core/engine/handles.d.ts +97 -40
- package/dist/core/engine/handles.js +25 -27
- package/dist/core/engine/index.d.ts +125 -15
- package/dist/core/engine/index.js +207 -11
- package/dist/core/engine/inline-launch-queue.d.ts +14 -0
- package/dist/core/engine/inline-launch-queue.js +32 -7
- package/dist/core/engine/inline-parking.js +3 -2
- package/dist/core/engine/internals.d.ts +125 -13
- package/dist/core/engine/lease-codec.d.ts +35 -0
- package/dist/core/engine/lease-codec.js +32 -0
- package/dist/core/engine/lease-deposition.d.ts +66 -0
- package/dist/core/engine/lease-deposition.js +10 -0
- package/dist/core/engine/lease-errors.d.ts +99 -0
- package/dist/core/engine/lease-errors.js +30 -0
- package/dist/core/engine/lease-manager.d.ts +114 -0
- package/dist/core/engine/lease-manager.js +135 -0
- package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
- package/dist/core/engine/lifecycle/persist.js +15 -52
- package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
- package/dist/core/engine/lifecycle/recovered-services.js +18 -3
- package/dist/core/engine/lifecycle/resume.js +39 -11
- package/dist/core/engine/lifecycle/shared.d.ts +8 -1
- package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
- package/dist/core/engine/lifecycle/start-batch.js +2 -1
- package/dist/core/engine/lifecycle/start-commit.d.ts +56 -0
- package/dist/core/engine/lifecycle/start-commit.js +69 -0
- package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
- package/dist/core/engine/lifecycle/start-exec.js +38 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
- package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
- package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
- package/dist/core/engine/lifecycle/start-or-signal.d.ts +46 -0
- package/dist/core/engine/lifecycle/start-or-signal.js +71 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
- package/dist/core/engine/lifecycle/start.d.ts +6 -6
- package/dist/core/engine/lifecycle/start.js +47 -45
- package/dist/core/engine/lifecycle/transition.js +17 -5
- package/dist/core/engine/lifecycle.d.ts +3 -2
- package/dist/core/engine/lifecycle.js +9 -2
- package/dist/core/engine/list-candidate-resolution.js +2 -2
- package/dist/core/engine/listing.js +10 -6
- package/dist/core/engine/operations-activity.d.ts +4 -11
- package/dist/core/engine/operations-activity.js +22 -49
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +43 -8
- package/dist/core/engine/operations-router.d.ts +6 -0
- package/dist/core/engine/operations-router.js +2 -0
- package/dist/core/engine/operations-speculate.js +6 -2
- package/dist/core/engine/operations-stream.js +12 -2
- package/dist/core/engine/operations-time.d.ts +4 -2
- package/dist/core/engine/operations-time.js +14 -2
- package/dist/core/engine/operations-wait-condition.d.ts +23 -0
- package/dist/core/engine/operations-wait-condition.js +62 -0
- package/dist/core/engine/ownership-options.d.ts +23 -0
- package/dist/core/engine/ownership-options.js +26 -0
- package/dist/core/engine/payload-size-policy.d.ts +3 -0
- package/dist/core/engine/payload-size-policy.js +4 -0
- package/dist/core/engine/pending-updates.d.ts +17 -0
- package/dist/core/engine/pending-updates.js +33 -11
- package/dist/core/engine/persisted-data-version.d.ts +5 -9
- package/dist/core/engine/persisted-data-version.js +4 -5
- package/dist/core/engine/queries.js +1 -1
- package/dist/core/engine/registration.d.ts +1 -0
- package/dist/core/engine/registration.js +18 -3
- package/dist/core/engine/schedule-handle.d.ts +45 -0
- package/dist/core/engine/schedule-handle.js +26 -0
- package/dist/core/engine/schedule-jitter.d.ts +5 -0
- package/dist/core/engine/schedule-jitter.js +10 -0
- package/dist/core/engine/schedule-run.d.ts +17 -0
- package/dist/core/engine/schedule-run.js +38 -0
- package/dist/core/engine/schedule-timer.js +81 -17
- package/dist/core/engine/schedules.d.ts +8 -5
- package/dist/core/engine/schedules.js +44 -19
- package/dist/core/engine/search-attribute-records.d.ts +4 -0
- package/dist/core/engine/search-attribute-records.js +17 -0
- package/dist/core/engine/second-instance-detector.d.ts +96 -0
- package/dist/core/engine/second-instance-detector.js +108 -0
- package/dist/core/engine/signals.d.ts +38 -0
- package/dist/core/engine/signals.js +55 -19
- package/dist/core/engine/state-utilities.d.ts +49 -2
- package/dist/core/engine/state-utilities.js +114 -3
- package/dist/core/engine/storage-io.d.ts +16 -2
- package/dist/core/engine/storage-io.js +26 -5
- package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
- package/dist/core/engine/stream-chunk-loading.js +24 -1
- package/dist/core/engine/sub-operation.js +22 -3
- package/dist/core/engine/termination/cleanup.d.ts +28 -1
- package/dist/core/engine/termination/cleanup.js +44 -2
- package/dist/core/engine/termination/complete.js +48 -9
- package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
- package/dist/core/engine/termination/finalizer-activity.js +30 -0
- package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
- package/dist/core/engine/termination/finalizer-claim.js +80 -0
- package/dist/core/engine/termination/finalizer.d.ts +48 -0
- package/dist/core/engine/termination/finalizer.js +159 -0
- package/dist/core/engine/termination/suspend.d.ts +70 -0
- package/dist/core/engine/termination/suspend.js +41 -0
- package/dist/core/engine/termination.d.ts +5 -2
- package/dist/core/engine/termination.js +6 -0
- package/dist/core/engine/updates.js +5 -25
- package/dist/core/engine/validation/schedule.d.ts +2 -1
- package/dist/core/engine/validation/schedule.js +51 -2
- package/dist/core/engine/validation.js +54 -3
- package/dist/core/engine/waiting-update-response.d.ts +8 -0
- package/dist/core/engine/waiting-update-response.js +22 -0
- package/dist/core/engine/workflow-concurrency.d.ts +10 -0
- package/dist/core/engine/workflow-concurrency.js +136 -0
- package/dist/core/engine/workflow-feed.d.ts +9 -8
- package/dist/core/engine/workflow-feed.js +4 -1
- package/dist/core/engine/workflow-indexes.d.ts +9 -0
- package/dist/core/engine/workflow-indexes.js +10 -0
- package/dist/core/engine/workflow-state-stream.js +33 -13
- package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
- package/dist/core/engine-helpers.js +1 -0
- package/dist/core/events/activity-events.d.ts +43 -12
- package/dist/core/events/activity-events.js +28 -0
- package/dist/core/events/attribute-events.d.ts +2 -3
- package/dist/core/events/event-map.d.ts +19 -12
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/schedule-events.d.ts +71 -0
- package/dist/core/events/schedule-events.js +29 -0
- package/dist/core/events/signal-events.d.ts +4 -6
- package/dist/core/events/system-events.d.ts +29 -19
- package/dist/core/events/system-events.js +26 -0
- package/dist/core/events/update-events.d.ts +6 -8
- package/dist/core/events/workflow-events.d.ts +108 -20
- package/dist/core/events/workflow-events.js +35 -0
- package/dist/core/failure-categories.js +5 -17
- package/dist/core/fault-code.d.ts +9 -3
- package/dist/core/fault-code.js +1 -0
- package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
- package/dist/core/inline-execution-strategy.context-options.js +56 -0
- package/dist/core/inline-execution-strategy.d.ts +31 -36
- package/dist/core/inline-execution-strategy.js +16 -27
- package/dist/core/list-filter-validation.d.ts +1 -1
- package/dist/core/list-filter-validation.js +2 -1
- package/dist/core/payload-size.d.ts +1 -1
- package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
- package/dist/core/review/events.d.ts +6 -8
- package/dist/core/scheduler/scheduler-class.d.ts +10 -1
- package/dist/core/scheduler/scheduler-class.js +38 -11
- package/dist/core/scheduler/timer-batch.js +9 -1
- package/dist/core/scheduler/timer-sources.d.ts +1 -0
- package/dist/core/scheduler/timer-sources.js +11 -5
- package/dist/core/session-state.d.ts +0 -1
- package/dist/core/session-state.js +2 -2
- package/dist/core/start-workflow-validation.d.ts +56 -0
- package/dist/core/start-workflow-validation.js +30 -1
- package/dist/core/step-context.d.ts +10 -6
- package/dist/core/step-context.js +7 -15
- package/dist/core/types/activity-verification.d.ts +67 -0
- package/dist/core/types/activity-verification.js +0 -0
- package/dist/core/types/activity.d.ts +86 -64
- package/dist/core/types/bulk.d.ts +50 -9
- package/dist/core/types/checkpoint.d.ts +44 -8
- package/dist/core/types/identity.d.ts +8 -1
- package/dist/core/types/launch-metadata.d.ts +33 -0
- package/dist/core/types/launch-metadata.js +0 -0
- package/dist/core/types/list-options.d.ts +146 -0
- package/dist/core/types/list-options.js +0 -0
- package/dist/core/types/message-handles.d.ts +25 -0
- package/dist/core/types/options.d.ts +165 -215
- package/dist/core/types/reviews.d.ts +2 -1
- package/dist/core/types/schedules.d.ts +39 -3
- package/dist/core/types/services-resolution.d.ts +47 -0
- package/dist/core/types/services-resolution.js +0 -0
- package/dist/core/types/state.d.ts +11 -11
- package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
- package/dist/core/types/workflow-builder-runtime.js +11 -2
- package/dist/core/types/workflow-builder.d.ts +47 -15
- package/dist/core/types/workflow-concurrency.d.ts +39 -0
- package/dist/core/types/workflow-concurrency.js +0 -0
- package/dist/core/types/workflow-context.d.ts +157 -14
- package/dist/core/types/workflow-definition.d.ts +53 -10
- package/dist/core/types/workflow-function.d.ts +101 -9
- package/dist/core/types/workflow-log.d.ts +98 -0
- package/dist/core/types/workflow-log.js +0 -0
- package/dist/core/types/workflow-registries.d.ts +14 -3
- package/dist/core/types/workflow-registry.d.ts +3 -0
- package/dist/core/types/workflow-snapshot.d.ts +29 -0
- package/dist/core/types/workflow-snapshot.js +0 -0
- package/dist/core/types.d.ts +7 -0
- package/dist/core/types.js +7 -0
- package/dist/core/versioning.d.ts +9 -39
- package/dist/core/versioning.js +2 -12
- package/dist/core/weft-error.d.ts +44 -1
- package/dist/core/weft-error.js +19 -1
- package/dist/core/worker-execution-strategy-options.d.ts +26 -0
- package/dist/core/worker-execution-strategy.js +40 -36
- package/dist/core/worker-inbound-message.d.ts +38 -0
- package/dist/core/worker-inbound-message.js +37 -0
- package/dist/core/worker-log-abuse-counter.d.ts +175 -0
- package/dist/core/worker-log-abuse-counter.js +107 -0
- package/dist/core/worker-message-helpers.d.ts +47 -0
- package/dist/core/worker-message-helpers.js +26 -0
- package/dist/core/worker-protocol-guard.js +1 -1
- package/dist/core/worker-protocol-log.d.ts +56 -0
- package/dist/core/worker-protocol-log.js +18 -0
- package/dist/core/worker-protocol.d.ts +23 -0
- package/dist/core/worker-protocol.js +12 -2
- package/dist/core/workflow-version-tuple.d.ts +3 -9
- package/dist/core/workflow-version-tuple.js +2 -3
- package/dist/diagnostics/doctor.js +6 -3
- package/dist/diagnostics/format.js +3 -8
- package/dist/diagnostics/types.d.ts +5 -5
- package/dist/diagnostics/validate.d.ts +0 -1
- package/dist/diagnostics/version-check.d.ts +1 -1
- package/dist/diagnostics/version-check.js +10 -13
- package/dist/index.d.ts +13 -11
- package/dist/index.js +39 -4
- package/dist/json-schema.js +3 -3
- package/dist/mcp/cli.js +35 -35
- package/dist/mcp/dispatcher.js +1 -1
- package/dist/mcp/http.js +16 -6
- package/dist/mcp/list-filter.js +2 -1
- package/dist/mcp/protocol.d.ts +2 -0
- package/dist/mcp/protocol.js +1 -1
- package/dist/mcp/session.d.ts +16 -0
- package/dist/mcp/session.js +60 -6
- package/dist/mcp/tools.js +73 -6
- package/dist/observability/index.js +2 -2
- package/dist/server/asyncapi-channels.js +5 -2
- package/dist/server/attribute-filters.d.ts +8 -3
- package/dist/server/attribute-filters.js +6 -1
- package/dist/server/authentication/api-key.d.ts +2 -1
- package/dist/server/authentication/api-key.js +5 -2
- package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
- package/dist/server/authentication/constant-time-api-key.js +24 -0
- package/dist/server/authentication/index.d.ts +1 -1
- package/dist/server/authentication/index.js +7 -4
- package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
- package/dist/server/authentication/rotating-api-key-store.js +19 -11
- package/dist/server/engine-event-feed-backend.d.ts +4 -5
- package/dist/server/fault-to-http.js +8 -1
- package/dist/server/fault-to-json-rpc.js +1 -0
- package/dist/server/fleet-event-feed.d.ts +31 -0
- package/dist/server/fleet-event-feed.js +157 -0
- package/dist/server/handler/index.js +1 -1
- package/dist/server/handler/response-helpers.js +2 -1
- package/dist/server/handler/route-dispatch.d.ts +6 -3
- package/dist/server/handler/route-dispatch.js +2 -2
- package/dist/server/handler.js +31 -31
- package/dist/server/index.d.ts +32 -2
- package/dist/server/index.js +35 -35
- package/dist/server/interactive-operations.js +1 -0
- package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
- package/dist/server/json-rpc-transport-helpers.js +2 -1
- package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
- package/dist/server/json-rpc-websocket-runtime.js +1 -0
- package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
- package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
- package/dist/server/json-rpc-websocket-types.d.ts +22 -0
- package/dist/server/json-rpc-websocket-types.js +0 -0
- package/dist/server/json-rpc-websocket-validation.js +20 -4
- package/dist/server/json-rpc-websocket.d.ts +2 -43
- package/dist/server/json-rpc-websocket.js +57 -74
- package/dist/server/openapi.d.ts +2 -1
- package/dist/server/openapi.js +1 -3
- package/dist/server/openrpc-document-schema.d.ts +78 -0
- package/dist/server/openrpc-document-schema.js +27 -1
- package/dist/server/openrpc-errors.d.ts +3 -0
- package/dist/server/openrpc-errors.js +2 -1
- package/dist/server/openrpc.js +32 -0
- package/dist/server/operation-catalog/index.d.ts +1 -1
- package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
- package/dist/server/operation-catalog/pipeline-stages.js +26 -12
- package/dist/server/operation-catalog/pipeline.js +8 -1
- package/dist/server/operation-catalog/registry.js +13 -0
- package/dist/server/operation-catalog/types.d.ts +20 -9
- package/dist/server/operation-fault.d.ts +10 -0
- package/dist/server/operation-fault.js +2 -0
- package/dist/server/operation-registry.d.ts +12 -11
- package/dist/server/operation-registry.js +12 -3
- package/dist/server/operations/aggregate-workflows.d.ts +15 -15
- package/dist/server/operations/async-activity.d.ts +2 -2
- package/dist/server/operations/async-activity.js +12 -7
- package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-cancel-workflows.js +2 -2
- package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-delete-workflows.js +2 -2
- package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
- package/dist/server/operations/bulk-filter-helpers.js +54 -24
- package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
- package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
- package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
- package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
- package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
- package/dist/server/operations/bulk-signal-workflows.js +2 -2
- package/dist/server/operations/cancel-schedule.d.ts +1 -1
- package/dist/server/operations/create-schedule.d.ts +3 -1
- package/dist/server/operations/create-schedule.js +29 -11
- package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
- package/dist/server/operations/fleet-events-subscription.js +99 -0
- package/dist/server/operations/fork-workflow.d.ts +1 -1
- package/dist/server/operations/fork-workflow.js +3 -2
- package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
- package/dist/server/operations/get-registry.d.ts +1 -1
- package/dist/server/operations/get-retention-overview.d.ts +1 -1
- package/dist/server/operations/get-review.d.ts +1 -1
- package/dist/server/operations/get-schedule.d.ts +1 -1
- package/dist/server/operations/get-stream-chunks.d.ts +1 -1
- package/dist/server/operations/get-system-metrics.d.ts +2 -2
- package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
- package/dist/server/operations/get-task-diagnostics.js +101 -7
- package/dist/server/operations/get-update-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/get-workflow-events.d.ts +1 -1
- package/dist/server/operations/get-workflow-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
- package/dist/server/operations/get-workflow.d.ts +1 -1
- package/dist/server/operations/list-checkpoints.d.ts +1 -1
- package/dist/server/operations/list-reviews.d.ts +1 -1
- package/dist/server/operations/list-schedules.d.ts +1 -1
- package/dist/server/operations/list-task-queues.d.ts +2 -2
- package/dist/server/operations/list-workers.d.ts +2 -2
- package/dist/server/operations/list-workflows.d.ts +1 -1
- package/dist/server/operations/operation-helpers.d.ts +16 -1
- package/dist/server/operations/operation-helpers.js +15 -3
- package/dist/server/operations/pause-schedule.d.ts +1 -1
- package/dist/server/operations/purge-workflows.d.ts +5 -5
- package/dist/server/operations/purge-workflows.js +2 -2
- package/dist/server/operations/query-workflow.d.ts +1 -1
- package/dist/server/operations/query-workflow.js +3 -2
- package/dist/server/operations/recover-all.d.ts +1 -1
- package/dist/server/operations/replay-workflow.d.ts +1 -1
- package/dist/server/operations/resume-schedule.d.ts +1 -1
- package/dist/server/operations/resume-workflow.js +2 -2
- package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.js +6 -3
- package/dist/server/operations/signal-workflow.js +8 -3
- package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
- package/dist/server/operations/start-or-signal-workflow.d.ts +44 -0
- package/dist/server/operations/start-or-signal-workflow.js +130 -0
- package/dist/server/operations/start-workflow-options.d.ts +38 -0
- package/dist/server/operations/start-workflow-options.js +63 -0
- package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
- package/dist/server/operations/start-workflow-rest-input.js +31 -0
- package/dist/server/operations/start-workflow.d.ts +1 -1
- package/dist/server/operations/start-workflow.js +15 -92
- package/dist/server/operations/storage.d.ts +6 -6
- package/dist/server/operations/storage.js +24 -14
- package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.js +6 -3
- package/dist/server/operations/suspend-workflow.d.ts +13 -0
- package/dist/server/operations/suspend-workflow.js +36 -0
- package/dist/server/operations/update-schedule.d.ts +1 -1
- package/dist/server/operations/update-schedule.js +7 -4
- package/dist/server/operations/update-workflow.d.ts +1 -1
- package/dist/server/operations/update-workflow.js +7 -3
- package/dist/server/operations/worker-drain.d.ts +8 -8
- package/dist/server/operations/worker-drain.js +11 -8
- package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
- package/dist/server/operations/workflow-events-subscription.js +43 -8
- package/dist/server/rest-binding.d.ts +21 -8
- package/dist/server/rest-bindings.js +24 -0
- package/dist/server/rest-body.d.ts +10 -0
- package/dist/server/rest-body.js +80 -0
- package/dist/server/runtime/authentication-bridge.d.ts +1 -0
- package/dist/server/runtime/authentication-bridge.js +33 -6
- package/dist/server/runtime/client-visible-events.d.ts +3 -0
- package/dist/server/runtime/client-visible-events.js +65 -0
- package/dist/server/runtime/context.d.ts +7 -0
- package/dist/server/runtime/event-broadcasting.d.ts +6 -0
- package/dist/server/runtime/event-broadcasting.js +72 -38
- package/dist/server/runtime/retry.d.ts +1 -0
- package/dist/server/runtime/retry.js +14 -0
- package/dist/server/runtime/shutdown.d.ts +7 -6
- package/dist/server/runtime/shutdown.js +6 -1
- package/dist/server/runtime/task-dispatch.js +5 -3
- package/dist/server/runtime/task-polling.d.ts +16 -2
- package/dist/server/runtime/task-polling.js +80 -24
- package/dist/server/runtime/task-reconciliation.js +9 -1
- package/dist/server/runtime/task-result-resolution.d.ts +15 -0
- package/dist/server/runtime/task-result-resolution.js +81 -0
- package/dist/server/runtime/websocket-stream.d.ts +20 -1
- package/dist/server/runtime/websocket-stream.js +173 -7
- package/dist/server/runtime/websocket-upgrade.js +22 -3
- package/dist/server/runtime/websocket-worker.d.ts +1 -1
- package/dist/server/runtime/websocket-worker.js +46 -30
- package/dist/server/serve-internals.d.ts +11 -1
- package/dist/server/serve-internals.js +20 -2
- package/dist/server/task-state.d.ts +38 -0
- package/dist/server/task-state.js +28 -0
- package/dist/server/workflow-event-feed.d.ts +36 -115
- package/dist/server/workflow-event-feed.js +92 -27
- package/dist/service-worker/index.js +31 -31
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +24 -0
- package/dist/storage/capabilities.d.ts +10 -2
- package/dist/storage/capabilities.js +2 -2
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/default-scope.d.ts +7 -4
- package/dist/storage/http.js +2 -2
- package/dist/storage/index.d.ts +81 -4
- package/dist/storage/indexeddb.js +1 -1
- package/dist/storage/interface.d.ts +189 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +12 -0
- package/dist/storage/lmdb.d.ts +4 -3
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon-batch.d.ts +30 -0
- package/dist/storage/neon-batch.js +30 -0
- package/dist/storage/neon-value-mapping.d.ts +74 -0
- package/dist/storage/neon-value-mapping.js +23 -0
- package/dist/storage/neon.d.ts +124 -0
- package/dist/storage/neon.js +15 -0
- package/dist/storage/node-sqlite-loader.d.ts +71 -0
- package/dist/storage/node-sqlite-loader.js +41 -0
- package/dist/storage/node-sqlite.d.ts +1 -19
- package/dist/storage/node-sqlite.js +61 -32
- package/dist/storage/postgres-key-value-queries.d.ts +104 -0
- package/dist/storage/postgres-key-value-queries.js +101 -0
- package/dist/storage/resolve.d.ts +2 -165
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/storage-configuration.d.ts +209 -0
- package/dist/storage/storage-configuration.js +0 -0
- package/dist/storage/testing.d.ts +168 -0
- package/dist/storage/testing.js +2 -0
- package/dist/storage/text-value-store.d.ts +9 -9
- package/dist/storage/turso.d.ts +8 -0
- package/dist/storage/turso.js +2 -2
- package/dist/storage/typed-storage.js +1 -1
- package/dist/storage/web-extension.js +1 -1
- package/dist/testing/index.js +35 -35
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/index.js +9 -5
- package/dist/worker/long-poll.js +4 -0
- package/dist/worker/protocol-messages.d.ts +20 -0
- package/dist/worker/protocol-schemas.d.ts +32 -0
- package/dist/worker/protocol-schemas.js +8 -4
- package/dist/worker/protocol-task-result.d.ts +28 -0
- package/dist/worker/protocol-task-result.js +76 -0
- package/dist/worker/protocol.d.ts +4 -15
- package/dist/worker/protocol.js +1 -1
- package/dist/worker/registry/fair-share.d.ts +29 -0
- package/dist/worker/registry/fair-share.js +30 -0
- package/dist/worker/registry/routing.d.ts +18 -0
- package/dist/worker/registry/routing.js +14 -0
- package/dist/worker/registry/types.d.ts +7 -0
- package/dist/worker/registry.d.ts +16 -1
- package/dist/worker/registry.js +24 -36
- package/dist/workers/worker-replay-state.d.ts +32 -0
- package/dist/workers/worker-replay-state.js +35 -0
- package/dist/workers/worker-state-namespace.d.ts +21 -0
- package/dist/workers/worker-state-namespace.js +13 -0
- package/dist/workers/workflow-runner.d.ts +19 -15
- package/dist/workers/workflow-runner.js +72 -60
- package/dist/workers/workflow-worker-entry.js +5 -2
- package/package.json +21 -4
package/dist/storage/auto.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
2
|
+
var k=Object.defineProperty;var q=(z)=>z;function A(z,C){this[z]=q.bind(null,C)}var D=(z,C)=>{for(var F in C)k(z,F,{get:C[F],enumerable:!0,configurable:!0,set:A.bind(C,F)})};var G=(z,C)=>()=>(z&&(C=z(z=0)),C);var N=(z,C,F)=>{if(C!=null){if(typeof C!=="object"&&typeof C!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let J;if(F)J=C[Symbol.asyncDispose];if(J===void 0)J=C[Symbol.dispose];if(typeof J!=="function")throw TypeError("Object not disposable");z.push([F,J,C])}else if(F)z.push([F]);return C},O=(z,C,F)=>{let J=(K)=>C=F?new SuppressedError(K,C,"An error was suppressed during disposal"):(F=!0,K),V=(K)=>{while(K=z.pop())try{var j=K[1]&&K[1].call(K[2]);if(K[0])return Promise.resolve(j).then(V,(X)=>(J(X),V()))}catch(X){J(X)}if(F)throw C};return V()};import{createHash as H}from"crypto";import{mkdirSync as I}from"fs";import{tmpdir as P}from"os";import{dirname as x,join as y}from"path";function R(){return{hasBun:typeof globalThis.Bun<"u",hasNode:typeof process<"u"&&typeof process.versions?.node==="string"}}function U(){let z=typeof process<"u"?process.cwd():"weft-default";return H("sha256").update(z).digest("hex").slice(0,16)}function Y(){let z=typeof process<"u"?process.env.WEFT_DEFAULT_STORAGE_PATH:void 0,C=z!==void 0&&z.length>0?z:y(P(),"weft-default",`${U()}.db`);return I(x(C),{recursive:!0}),C}function Z(z){if(z==="Bun")return typeof globalThis.Bun;return typeof process}function W(z,C){return import.meta.url.endsWith(".ts")?z:C}async function $(z){return await import(z)}var B=W("./bun-sql.ts","./bun-sql.js"),Q=W("./node-sqlite.ts","./node-sqlite.js");async function v(){let z=R();if(z.hasBun){let{BunSQLiteStorage:C}=await $(B);return new C(Y())}if(z.hasNode){let{NodeSQLiteStorage:C}=await $(Q);return new C(Y())}throw Error(`resolveDefaultStorage: requires Bun or Node. Detected: typeof Bun=${Z("Bun")}, typeof process=${Z("process")}. In browser/Service Worker contexts, use \`IndexedDBStorage\` directly or \`setupServiceWorker()\` from \`@lostgradient/weft/service-worker\`.`)}export{v as resolveDefaultStorage};
|
package/dist/storage/bun-sql.js
CHANGED
|
@@ -49,6 +49,24 @@ function requireStorageCapability(storage, capability, featureName) {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// src/storage/interface.ts
|
|
52
|
+
var MAX_BATCH_OPERATIONS = 1e4;
|
|
53
|
+
class StorageBatchOperationLimitExceededError extends Error {
|
|
54
|
+
code = "StorageBatchOperationLimitExceededError";
|
|
55
|
+
cap = MAX_BATCH_OPERATIONS;
|
|
56
|
+
count;
|
|
57
|
+
target;
|
|
58
|
+
constructor(target, count) {
|
|
59
|
+
super(`${target} count ${count} exceeds MAX_BATCH_OPERATIONS (${MAX_BATCH_OPERATIONS}).`);
|
|
60
|
+
this.name = "StorageBatchOperationLimitExceededError";
|
|
61
|
+
this.target = target;
|
|
62
|
+
this.count = count;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function assertStorageBatchOperationCount(target, count) {
|
|
66
|
+
if (count > MAX_BATCH_OPERATIONS) {
|
|
67
|
+
throw new StorageBatchOperationLimitExceededError(target, count);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
52
70
|
function resolvePrefixRangeEnd(prefix) {
|
|
53
71
|
return prefix.length > 0 ? prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1) : "\xFF";
|
|
54
72
|
}
|
|
@@ -91,6 +109,8 @@ async function storageDeletePrefix(storage, prefix) {
|
|
|
91
109
|
return storageDeletePrefixCore(storage, prefix);
|
|
92
110
|
}
|
|
93
111
|
async function storageConditionalBatch(storage, conditions, operations) {
|
|
112
|
+
assertStorageBatchOperationCount("conditionalBatch conditions", conditions.length);
|
|
113
|
+
assertStorageBatchOperationCount("conditionalBatch operations", operations.length);
|
|
94
114
|
requireStorageCapability(storage, "conditionalBatch", "storageConditionalBatch");
|
|
95
115
|
if (!storage.conditionalBatch) {
|
|
96
116
|
throw new Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");
|
|
@@ -263,6 +283,7 @@ class ScopedStorage {
|
|
|
263
283
|
}
|
|
264
284
|
}
|
|
265
285
|
async batch(operations) {
|
|
286
|
+
assertStorageBatchOperationCount("batch operations", operations.length);
|
|
266
287
|
await this.#storage.batch(operations.map((operation) => {
|
|
267
288
|
if (operation.type === "put") {
|
|
268
289
|
return {
|
|
@@ -514,11 +535,14 @@ class BunSQLiteStorage {
|
|
|
514
535
|
return scoped;
|
|
515
536
|
}
|
|
516
537
|
async batch(operations) {
|
|
538
|
+
assertStorageBatchOperationCount("batch operations", operations.length);
|
|
517
539
|
if (operations.length === 0)
|
|
518
540
|
return;
|
|
519
541
|
this.#batchTransaction(operations);
|
|
520
542
|
}
|
|
521
543
|
async conditionalBatch(conditions, operations) {
|
|
544
|
+
assertStorageBatchOperationCount("conditionalBatch conditions", conditions.length);
|
|
545
|
+
assertStorageBatchOperationCount("conditionalBatch operations", operations.length);
|
|
522
546
|
const conditionalTransaction = this.#database.transaction((pendingConditions, pendingOperations) => {
|
|
523
547
|
for (const condition of pendingConditions) {
|
|
524
548
|
const row = this.#getStatement.get(condition.key);
|
|
@@ -170,8 +170,16 @@ export declare function requireStorageCapability(storage: Storage, capability: G
|
|
|
170
170
|
/**
|
|
171
171
|
* Fail fast when a storage backend is not conservative enough for boot-time
|
|
172
172
|
* durable recovery. This is intentionally stricter than the engine's per-feature
|
|
173
|
-
* gates: it rejects ephemeral,
|
|
174
|
-
*
|
|
173
|
+
* gates: it rejects ephemeral, eventual, best-effort, non-atomic, and non-CAS
|
|
174
|
+
* storage before an application starts in durable mode.
|
|
175
|
+
*
|
|
176
|
+
* Persistence may be `local` (a same-process file-backed store) or `remote` (a
|
|
177
|
+
* durable service such as Neon Postgres). A `remote` backend is acceptable only
|
|
178
|
+
* because the other four axes are still required at their strongest:
|
|
179
|
+
* `linearizable` read-after-write, `snapshot` scans, atomic batches, and
|
|
180
|
+
* compare-and-swap. A remote store that cannot promise all four (an eventually
|
|
181
|
+
* consistent HTTP backend, say) is still rejected — by those axes, not by its
|
|
182
|
+
* persistence scope.
|
|
175
183
|
*
|
|
176
184
|
* @throws {Error} When the backend's capability row is not suitable for recovery.
|
|
177
185
|
*
|
|
@@ -4,8 +4,8 @@ export function requireStorageCapability(storage, capability, featureName) {
|
|
|
4
4
|
}
|
|
5
5
|
export function assertDurableStorageForRecovery(storage) {
|
|
6
6
|
const capabilities = storage.capabilities(), failures = [];
|
|
7
|
-
if (capabilities.persistence !== "local")
|
|
8
|
-
failures.push(`persistence must be "local" (got "${capabilities.persistence}")`);
|
|
7
|
+
if (capabilities.persistence !== "local" && capabilities.persistence !== "remote")
|
|
8
|
+
failures.push(`persistence must be "local" or "remote" (got "${capabilities.persistence}")`);
|
|
9
9
|
if (capabilities.readAfterWrite !== "linearizable")
|
|
10
10
|
failures.push(`readAfterWrite must be "linearizable" (got "${capabilities.readAfterWrite}")`);
|
|
11
11
|
if (capabilities.scanConsistency !== "snapshot")
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var A=Object.defineProperty;var S=(j)=>j;function y(j,J){this[j]=S.bind(null,J)}var p=(j,J)=>{for(var W in J)A(j,W,{get:J[W],enumerable:!0,configurable:!0,set:y.bind(J,W)})};var Y=(j,J)=>()=>(j&&(J=j(j=0)),J);function x(){return typeof(K&&"bun"in K?K.bun:globalThis.Bun)<"u"}function I(){if(K&&"process"in K)return K.process;return globalThis.process}function d(j){if(x())return Bun.sleep(j);return new Promise((J)=>setTimeout(J,j))}function z(j){let J=v;for(let W=0;W<j.length;W++)J^=BigInt(j[W]),J=J*O&_;return J.toString(16).padStart(16,"0")}function n(j){return z(j)}function i(j){return z(b.encode(j))}function w(j){let W=I()?.getBuiltinModule;if(typeof W!=="function")return;return W(j)}function s(j){if(x())return Bun.file(j).size;let J=w("node:fs");if(!J)throw Error("fileSize() requires Bun or Node 22.5+ (process.getBuiltinModule). Not available in browser or edge runtimes.");try{return J.statSync(j).size}catch(W){if(typeof W==="object"&&W!==null&&"code"in W&&W.code==="ENOENT")return 0;throw W}}function C(){let j=w("node:zlib");if(!j)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return j}function P(j){if(x())return new Uint8Array(Bun.gzipSync(new Uint8Array(j)));return new Uint8Array(C().gzipSync(j))}function G(j){if(x())return new Uint8Array(Bun.gunzipSync(new Uint8Array(j)));return new Uint8Array(C().gunzipSync(j))}function N(){return w("node:zlib")}var K,v=0xcbf29ce484222325n,O=0x00000100000001b3n,_=0xffffffffffffffffn,b;var f=Y(()=>{b=new TextEncoder});function L(){let j=N();if(!j)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return j}function T(j){return new Uint8Array(L().brotliCompressSync(j))}function h(j){return new Uint8Array(L().brotliDecompressSync(j))}function D(j){return c(j)}function c(j){switch(j){case"gzip":return{algorithm:"gzip",compress(J){return P(J)}};case"brotli":return{algorithm:"brotli",compress(J){return T(J)}};case"none":return{algorithm:"none",compress(J){return J}}}}async function U(j,J,W){if(j.length<W||J.algorithm==="none"){let $=new Uint8Array(j.length+X);return $[0]=V,$[1]=F,$.set(j,X),$}let q=await J.compress(j);if(q.length+X>=j.length+X){let $=new Uint8Array(j.length+X);return $[0]=V,$[1]=F,$.set(j,X),$}let B=J.algorithm==="gzip"?Z:g,Q=new Uint8Array(q.length+X);return Q[0]=V,Q[1]=B,Q.set(q,X),Q}async function k(j){if(j.length<X)throw Error("Compression payload missing 2-byte header.");if(j[0]!==V)throw Error("Compression payload missing magic byte 0xC1.");let J=j[1],W=j.slice(X);switch(J){case F:return W;case Z:return G(W);case g:return h(W);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${J.toString(16).padStart(2,"0")}.`)}}function H(j){return{threshold:j?.threshold??E,algorithm:j?.algorithm??R}}var V=193,F=0,Z=1,g=2,X=2,E=4096,R="gzip";var M=Y(()=>{f()});var m;var u=Y(()=>{M();m=class m{#j;#J;#W;constructor(j,J){this.#j=j;let W=H(J);if(this.#J=D(W.algorithm),this.#W=W.threshold,j.query){let q=j.query.bind(j);Object.defineProperty(this,"query",{value:q,enumerable:!0,configurable:!0})}}capabilities(){let j=this.#j.capabilities();return{...j.persistence===void 0?{}:{persistence:j.persistence},readAfterWrite:j.readAfterWrite,scanConsistency:j.scanConsistency,atomicBatch:j.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(j){let J=await this.#j.get(j);if(!J)return null;return k(J)}async put(j,J){let W=await U(J,this.#J,this.#W);return this.#j.put(j,W)}async delete(j){return this.#j.delete(j)}async*scan(j,J){for await(let[W,q]of this.#j.scan(j,J))yield[W,await k(q)]}async batch(j){let J=await Promise.all(j.map(async(W)=>{if(W.type==="put")return{type:"put",key:W.key,value:await U(W.value,this.#J,this.#W)};return W}));return this.#j.batch(J)}[Symbol.dispose](){this.#j[Symbol.dispose]()}}});u();export{m as CompressedStorage};
|
|
2
|
+
var n=Object.defineProperty;var l=(W)=>W;function s(W,F){this[W]=l.bind(null,F)}var UW=(W,F)=>{for(var X in F)n(W,X,{get:F[X],enumerable:!0,configurable:!0,set:s.bind(F,X)})};var P=(W,F)=>()=>(W&&(F=W(W=0)),F);var VW=(W,F,X)=>{if(F!=null){if(typeof F!=="object"&&typeof F!=="function")throw TypeError('Object expected to be assigned to "using" declaration');let Y;if(X)Y=F[Symbol.asyncDispose];if(Y===void 0)Y=F[Symbol.dispose];if(typeof Y!=="function")throw TypeError("Object not disposable");W.push([X,Y,F])}else if(X)W.push([X]);return F},PW=(W,F,X)=>{let Y=($)=>F=X?new SuppressedError($,F,"An error was suppressed during disposal"):(X=!0,$),U=($)=>{while($=W.pop())try{var j=$[1]&&$[1].call($[2]);if($[0])return Promise.resolve(j).then(U,(D)=>(Y(D),U()))}catch(D){Y(D)}if(X)throw F};return U()};function S(W,F,X){if(!W.capabilities()[F])throw Error(`Feature "${X}" requires storage capability "${F}", but this storage backend does not provide it.`)}function d(W){let F=W.capabilities(),X=[];if(F.persistence!=="local"&&F.persistence!=="remote")X.push(`persistence must be "local" or "remote" (got "${F.persistence}")`);if(F.readAfterWrite!=="linearizable")X.push(`readAfterWrite must be "linearizable" (got "${F.readAfterWrite}")`);if(F.scanConsistency!=="snapshot")X.push(`scanConsistency must be "snapshot" (got "${F.scanConsistency}")`);if(!F.atomicBatch)X.push("atomicBatch must be true");if(!F.conditionalBatch)X.push("conditionalBatch must be true");if(X.length>0)throw Error(`Storage is not durable enough for recovery: ${X.join("; ")}.`)}var Z="default";async function B(W,F){return await W.get(F)!==null}async function*z(W,F,X){for await(let[Y]of W.scan(F,X))yield Y}async function x(W,F){let X=0;for await(let Y of z(W,F))X++;return X}async function v(W,F){let X=[];for await(let Y of z(W,F))X.push({type:"delete",key:Y});if(X.length===0)return 0;return await W.batch(X),X.length}async function LW(W,F,X){let Y=[];for await(let U of z(W,F,X))Y.push({type:"delete",key:U});if(Y.length===0)return 0;return await W.batch(Y),Y.length}var a;var O=P(()=>{a=["actrec:","archive:","async-act:","attr:","audit:bulk:","blob:","budget:","budget-charged:","ev:","fleet-event-by-workflow:","fleet-event:","fleet-event-tail","idx:","lease:","liveness:","offload:","op:","review:","schedule:","schedule-due:","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-teardown:","wf-teardown-deadletter:","wf-teardown-needed:","wf-terminal:"]});function G(W,F){if(F>_)throw new h(W,F)}function NW(W){return W.length>0?W.slice(0,-1)+String.fromCharCode(W.charCodeAt(W.length-1)+1):"\xFF"}function HW(W,F={}){if(F.gt!==void 0&&W<=F.gt)return!1;if(F.gte!==void 0&&W<F.gte)return!1;if(F.lt!==void 0&&W>=F.lt)return!1;if(F.lte!==void 0&&W>F.lte)return!1;return!0}function EW(W,F){if(W===null||F===null)return W===F;if(W.byteLength!==F.byteLength)return!1;for(let X=0;X<W.byteLength;X++)if(W[X]!==F[X])return!1;return!0}async function BW(W,F){if(W.has)return W.has(F);return B(W,F)}function xW(W,F,X){if(W.keys)return W.keys(F,X);return z(W,F,X)}async function vW(W,F){if(W.count)return W.count(F);return x(W,F)}async function OW(W,F){if(W.deletePrefix)return W.deletePrefix(F);return v(W,F)}async function TW(W,F){G("batch operations",F.length),await W.batch(F)}async function hW(W,F,X){if(G("conditionalBatch conditions",F.length),G("conditionalBatch operations",X.length),S(W,"conditionalBatch","storageConditionalBatch"),!W.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return W.conditionalBatch(F,X)}function J(W){return encodeURIComponent(W)}function AW(W){return decodeURIComponent(W)}function RW(W){try{return decodeURIComponent(W)}catch{return null}}var _=1e4,MW=1e4,h,K=(W)=>String(W).padStart(16,"0"),i="0",t="1",T=(W,F,X,Y)=>`sig:${J(W)}:${J(F)}:${Y}:${J(X)}`,bW;var A=P(()=>{O();h=class h extends Error{code="StorageBatchOperationLimitExceededError";cap=_;count;target;constructor(W,F){super(`${W} count ${F} exceeds MAX_BATCH_OPERATIONS (${_}).`);this.name="StorageBatchOperationLimitExceededError",this.target=W,this.count=F}};bW={workflow:(W)=>`wf:${J(W)}`,checkpoint:(W)=>`wf:${J(W)}:ckpt`,checkpointHistory:(W,F)=>`wf:${J(W)}:ckpt:${String(F).padStart(10,"0")}`,timelinePrefix:(W)=>`wf:${J(W)}:timeline:`,timeline:(W,F)=>`wf:${J(W)}:timeline:${String(F).padStart(10,"0")}`,schedule:(W)=>`schedule:${J(W)}`,scheduleTick:(W,F)=>`schedule-due:${String(W).padStart(16,"0")}:${J(F)}`,scheduleRun:(W)=>`schedule-run:${J(W)}`,operation:(W,F,X)=>`op:${W}:${K(F)}:${X}`,operationInflight:(W)=>`op:inflight:${W}`,operationQueued:(W)=>`op:queued:${W}`,operationResolved:(W)=>`op:resolved:${W}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(W)=>`op:dead-letter:${W}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(W,F,X)=>`audit:bulk:${K(W)}:${J(F)}:${J(X)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(W,F)=>`op:resolved-by-time:${K(W)}:${J(F)}`,asyncActivity:(W,F)=>`async-act:v1:${J(W)}:${J(F)}`,activityReconciliationPrefix:(W)=>`actrec:v1:${J(W)}:`,activityReconciliation:(W,F,X)=>`actrec:v1:${J(W)}:${J(F)}:${X}`,eventPrefix:(W)=>`ev:${J(W)}:`,event:(W,F)=>`ev:${J(W)}:${String(F).padStart(10,"0")}`,eventHead:(W)=>`ev:${J(W)}:head`,eventWatermark:(W)=>`ev:${J(W)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(W)=>`fleet-event:${String(W).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(W)=>`fleet-event-by-workflow:${J(W)}:`,fleetEventByWorkflow:(W,F)=>`fleet-event-by-workflow:${J(W)}:${String(F).padStart(10,"0")}`,signal:(W,F,X)=>T(W,F,X,t),startSignal:(W,F,X)=>T(W,F,X,i),signalSequence:(W)=>`sigseq:v1:${J(W)}`,signalAcceptedResponsePrefix:(W)=>`sigres:v1:${J(W)}:`,signalAcceptedResponse:(W,F,X)=>`sigres:v1:${J(W)}:${J(F)}:${J(X)}`,deadline:(W,F)=>`wf-deadline:${K(W)}:${J(F)}`,terminalCleanup:(W,F)=>`wf-cleanup:${K(W)}:${J(F)}`,teardownTimer:(W,F)=>`wf-teardown:${K(W)}:${J(F)}`,delayedStart:(W,F)=>`wf-delayed:${K(W)}:${J(F)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(W,F)=>`wf-terminal:${K(W)}:${J(F)}`,attribute:(W)=>`attr:${J(W)}`,attributeIndex:(W,F,X)=>`idx:${W}:${F}:${J(X)}`,tagIndex:(W,F)=>`tag:${J(W)}:${J(F)}`,updatePrefix:(W)=>`upd:${J(W)}:`,update:(W,F)=>`upd:${J(W)}:${F}`,updateResponse:(W)=>`upr:${W}`,updateIdempotency:(W,F)=>`upk:${J(W)}:${F}`,startIdempotency:(W)=>`start-idem:${J(W)}`,startIdempotencySignalId:(W)=>`start-idem:${W}`,livenessPrefix:()=>"liveness:",liveness:(W)=>`liveness:${J(W)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(W,F,X)=>`budget:${W}:${F}:${X}`,review:(W,F)=>`review:${J(W)}:${F}`,workflowHeaders:(W)=>`wf-headers:${J(W)}`,childCancellationPrefix:(W)=>`child-cancel:${J(W)}:`,childCancellation:(W,F)=>`child-cancel:${J(W)}:${J(F)}`,terminalCleanupNeeded:(W)=>`wf-cleanup-needed:${J(W)}`,workflowConcurrency:(W,F)=>`wf-concurrency:${J(W)}:${J(F)}`,workflowConcurrencyHolder:(W)=>`wf-concurrency-holder:${J(W)}`,workflowHasServices:(W)=>`wf-has-services:${J(W)}`,finalizerState:(W)=>`wf-finalizer-state:${J(W)}`,teardownOwed:(W)=>`wf-teardown-needed:${J(W)}`,teardownDeadLetter:(W)=>`wf-teardown-deadletter:${J(W)}`,offload:(W,F)=>`offload:${J(W)}:${F}`,archive:(W,F)=>`archive:${J(W)}:${F}`,stateExecution:(W,F)=>`state:execution:${J(W)}:${J(F)}`,stateWorkflow:(W,F)=>`state:workflow-scope:${Z}:${J(W)}:${J(F)}`,streamChunkPrefix:(W,F)=>`blob:${J(W)}:${F}:chunk:`,streamChunk:(W,F,X)=>`blob:${J(W)}:${F}:chunk:${String(X).padStart(10,"0")}`,streamTail:(W,F)=>`blob:${J(W)}:${F}:tail`,streamMetadata:(W,F)=>`blob:${J(W)}:${F}:meta`,budgetCharged:(W)=>`budget-charged:${W}`,toolEffect:(W,F,X)=>`tool-effect:${J(W)}:${F}:${X}`,workflowVisibilityStatus:(W,F)=>`wf-idx-status:${J(W)}:${J(F)}`,workflowVisibilityType:(W,F)=>`wf-idx-type:${J(W)}:${J(F)}`,workflowVisibilityCreated:(W,F)=>`wf-idx-created:${K(W)}:${J(F)}`,workflowVisibilityUpdated:(W,F)=>`wf-idx-updated:${K(W)}:${J(F)}`,workflowVisibilityDeadline:(W,F)=>`wf-idx-deadline:${K(W)}:${J(F)}`,workflowVisibilityManifest:(W)=>`wf-idx-manifest:${J(W)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"}});function L(){return typeof(V&&"bun"in V?V.bun:globalThis.Bun)<"u"}function r(){if(V&&"process"in V)return V.process;return globalThis.process}function uW(W){if(L())return Bun.sleep(W);return new Promise((F)=>setTimeout(F,W))}function R(W){let F=e;for(let X=0;X<W.length;X++)F^=BigInt(W[X]),F=F*o&WW;return F.toString(16).padStart(16,"0")}function fW(W){return R(W)}function IW(W){return R(FW.encode(W))}function M(W){let X=r()?.getBuiltinModule;if(typeof X!=="function")return;return X(W)}function kW(W){if(L())return Bun.file(W).size;let F=M("node:fs");if(!F)throw Error("fileSize() requires Bun or Node 22.5+ (process.getBuiltinModule). Not available in browser or edge runtimes.");try{return F.statSync(W).size}catch(X){if(typeof X==="object"&&X!==null&&"code"in X&&X.code==="ENOENT")return 0;throw X}}function b(){let W=M("node:zlib");if(!W)throw Error("gzip/gunzip require Bun or Node 22.5+ (process.getBuiltinModule). "+"Not available in browser or edge runtimes \u2014 use CompressionStream directly.");return W}function c(W){if(L())return new Uint8Array(Bun.gzipSync(new Uint8Array(W)));return new Uint8Array(b().gzipSync(W))}function y(W){if(L())return new Uint8Array(Bun.gunzipSync(new Uint8Array(W)));return new Uint8Array(b().gunzipSync(W))}function m(){return M("node:zlib")}var V,e=0xcbf29ce484222325n,o=0x00000100000001b3n,WW=0xffffffffffffffffn,FW;var g=P(()=>{FW=new TextEncoder});function u(){let W=m();if(!W)throw Error("Brotli compression requires Bun or Node 22.5+ with process.getBuiltinModule support. Use gzip compression for browser/edge runtimes.");return W}function XW(W){return new Uint8Array(u().brotliCompressSync(W))}function JW(W){return new Uint8Array(u().brotliDecompressSync(W))}function k(W){return YW(W)}function YW(W){switch(W){case"gzip":return{algorithm:"gzip",compress(F){return c(F)}};case"brotli":return{algorithm:"brotli",compress(F){return XW(F)}};case"none":return{algorithm:"none",compress(F){return F}}}}async function H(W,F,X){if(W.length<X||F.algorithm==="none"){let j=new Uint8Array(W.length+Q);return j[0]=C,j[1]=N,j.set(W,Q),j}let Y=await F.compress(W);if(Y.length+Q>=W.length+Q){let j=new Uint8Array(W.length+Q);return j[0]=C,j[1]=N,j.set(W,Q),j}let U=F.algorithm==="gzip"?f:I,$=new Uint8Array(Y.length+Q);return $[0]=C,$[1]=U,$.set(Y,Q),$}async function E(W){if(W.length<Q)throw Error("Compression payload missing 2-byte header.");if(W[0]!==C)throw Error("Compression payload missing magic byte 0xC1.");let F=W[1],X=W.slice(Q);switch(F){case N:return X;case f:return y(X);case I:return JW(X);default:throw Error(`Compression payload uses unsupported algorithm byte 0x${F.toString(16).padStart(2,"0")}.`)}}function p(W){return{threshold:W?.threshold??$W,algorithm:W?.algorithm??jW}}var C=193,N=0,f=1,I=2,Q=2,$W=4096,jW="gzip";var w=P(()=>{g()});var KW;var QW=P(()=>{w();A();KW=class KW{#W;#F;#X;constructor(W,F){this.#W=W;let X=p(F);if(this.#F=k(X.algorithm),this.#X=X.threshold,W.query){let Y=W.query.bind(W);Object.defineProperty(this,"query",{value:Y,enumerable:!0,configurable:!0})}}capabilities(){let W=this.#W.capabilities();return{...W.persistence===void 0?{}:{persistence:W.persistence},readAfterWrite:W.readAfterWrite,scanConsistency:W.scanConsistency,atomicBatch:W.atomicBatch,conditionalBatch:!1,boundedRangeDelete:!1}}async get(W){let F=await this.#W.get(W);if(!F)return null;return E(F)}async put(W,F){let X=await H(F,this.#F,this.#X);return this.#W.put(W,X)}async delete(W){return this.#W.delete(W)}async*scan(W,F){for await(let[X,Y]of this.#W.scan(W,F))yield[X,await E(Y)]}async batch(W){G("batch operations",W.length);let F=await Promise.all(W.map(async(X)=>{if(X.type==="put")return{type:"put",key:X.key,value:await H(X.value,this.#F,this.#X)};return X}));return this.#W.batch(F)}[Symbol.dispose](){this.#W[Symbol.dispose]()}}});QW();export{KW as CompressedStorage};
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Constant scope for workflow-type-shared durable state (single source of truth;
|
|
3
|
-
* never inline the literal). Keys live under `state:workflow-scope:` —
|
|
4
|
-
* from the
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* never inline the literal). Keys live under `state:workflow-scope:` —
|
|
4
|
+
* deliberately distinct from the retired `state:workflow:<tenantId>:` prefix so
|
|
5
|
+
* that a tenant id which happened to equal a scope name can never alias into
|
|
6
|
+
* this namespace (the current key never starts with `state:workflow:`).
|
|
7
|
+
* Re-partitioning the scope is therefore a key rename, not a data rewrite. See
|
|
8
|
+
* `KEYS.stateWorkflow` in `./interface.ts`, pinned by the alias test in
|
|
9
|
+
* `../core/atomic-state.test.ts`.
|
|
7
10
|
*
|
|
8
11
|
* Internal leaf module (no imports) so both `./interface.ts` and
|
|
9
12
|
* `../core/atomic-state.ts` can depend on it without an import cycle.
|
package/dist/storage/http.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var k=Object.defineProperty;var u=(J)=>J;function m(J,Y){this[J]=u.bind(null,Y)}var n=(J,Y)=>{for(var Z in Y)k(J,Z,{get:Y[Z],enumerable:!0,configurable:!0,set:m.bind(Y,Z)})};function U(J){let Y=[];for(let Z=0;Z<J.length;Z+=512)Y.push(String.fromCharCode(...J.subarray(Z,Z+512)));return btoa(Y.join(""))}function T(J){let Y=atob(J),Z=new Uint8Array(Y.length);for(let G=0;G<Y.length;G+=1)Z[G]=Y.charCodeAt(G);return Z}function N(J){return typeof J==="object"&&J!==null&&!Array.isArray(J)}async function M(J,Y){return await J.get(Y)!==null}async function*Q(J,Y,Z){for await(let[G]of J.scan(Y,Z))yield G}async function V(J,Y){let Z=0;for await(let G of Q(J,Y))Z++;return Z}async function E(J,Y){let Z=[];for await(let G of Q(J,Y))Z.push({type:"delete",key:G});if(Z.length===0)return 0;return await J.batch(Z),Z.length}async function H(J,Y,Z){let G=[];for await(let X of Q(J,Y,Z))G.push({type:"delete",key:X});if(G.length===0)return 0;return await J.batch(G),G.length}function q(J,Y,Z){if(!J.capabilities()[Y])throw Error(`Feature "${Z}" requires storage capability "${Y}", but this storage backend does not provide it.`)}var R="default";function O(J){return J.length>0?J.slice(0,-1)+String.fromCharCode(J.charCodeAt(J.length-1)+1):"ÿ"}function _J(J,Y={}){if(Y.gt!==void 0&&J<=Y.gt)return!1;if(Y.gte!==void 0&&J<Y.gte)return!1;if(Y.lt!==void 0&&J>=Y.lt)return!1;if(Y.lte!==void 0&&J>Y.lte)return!1;return!0}function FJ(J,Y){if(J===null||Y===null)return J===Y;if(J.byteLength!==Y.byteLength)return!1;for(let Z=0;Z<J.byteLength;Z++)if(J[Z]!==Y[Z])return!1;return!0}async function P(J,Y){if(J.has)return J.has(Y);return M(J,Y)}function h(J,Y,Z){if(J.keys)return J.keys(Y,Z);return Q(J,Y,Z)}async function v(J,Y){if(J.count)return J.count(Y);return V(J,Y)}async function C(J,Y){if(J.deletePrefix)return J.deletePrefix(Y);return E(J,Y)}async function K(J,Y,Z){if(q(J,"conditionalBatch","storageConditionalBatch"),!J.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return J.conditionalBatch(Y,Z)}function $(J){return encodeURIComponent(J)}function QJ(J){try{return decodeURIComponent(J)}catch{return null}}var _=(J)=>String(J).padStart(16,"0"),WJ={workflow:(J)=>`wf:${$(J)}`,checkpoint:(J)=>`wf:${$(J)}:ckpt`,checkpointHistory:(J,Y)=>`wf:${$(J)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(J)=>`wf:${$(J)}:timeline:`,timeline:(J,Y)=>`wf:${$(J)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(J)=>`schedule:${$(J)}`,scheduleTick:(J,Y)=>`schedule-due:${String(J).padStart(16,"0")}:${$(Y)}`,scheduleRun:(J)=>`schedule-run:${$(J)}`,operation:(J,Y,Z)=>`op:${J}:${_(Y)}:${Z}`,operationInflight:(J)=>`op:inflight:${J}`,operationQueued:(J)=>`op:queued:${J}`,operationResolved:(J)=>`op:resolved:${J}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(J,Y,Z)=>`audit:bulk:${_(J)}:${$(Y)}:${$(Z)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(J,Y)=>`op:resolved-by-time:${_(J)}:${$(Y)}`,asyncActivity:(J,Y)=>`async-act:v1:${$(J)}:${$(Y)}`,activityReconciliationPrefix:(J)=>`actrec:v1:${$(J)}:`,activityReconciliation:(J,Y,Z)=>`actrec:v1:${$(J)}:${$(Y)}:${Z}`,eventPrefix:(J)=>`ev:${$(J)}:`,event:(J,Y)=>`ev:${$(J)}:${String(Y).padStart(10,"0")}`,eventHead:(J)=>`ev:${$(J)}:head`,eventWatermark:(J)=>`ev:${$(J)}:watermark`,signal:(J,Y,Z)=>`sig:${$(J)}:${Y}:${$(Z)}`,signalSequence:(J)=>`sigseq:v1:${$(J)}`,signalAcceptedResponsePrefix:(J)=>`sigres:v1:${$(J)}:`,signalAcceptedResponse:(J,Y,Z)=>`sigres:v1:${$(J)}:${$(Y)}:${$(Z)}`,deadline:(J,Y)=>`wf-deadline:${_(J)}:${$(Y)}`,terminalCleanup:(J,Y)=>`wf-cleanup:${_(J)}:${$(Y)}`,delayedStart:(J,Y)=>`wf-delayed:${_(J)}:${$(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(J,Y)=>`wf-terminal:${_(J)}:${$(Y)}`,attribute:(J)=>`attr:${$(J)}`,attributeIndex:(J,Y,Z)=>`idx:${J}:${Y}:${$(Z)}`,tagIndex:(J,Y)=>`tag:${$(J)}:${$(Y)}`,updatePrefix:(J)=>`upd:${$(J)}:`,update:(J,Y)=>`upd:${$(J)}:${Y}`,updateResponse:(J)=>`upr:${J}`,updateIdempotency:(J,Y)=>`upk:${$(J)}:${Y}`,budget:(J,Y,Z)=>`budget:${J}:${Y}:${Z}`,review:(J,Y)=>`review:${$(J)}:${Y}`,workflowHeaders:(J)=>`wf-headers:${$(J)}`,terminalCleanupNeeded:(J)=>`wf-cleanup-needed:${$(J)}`,workflowHasServices:(J)=>`wf-has-services:${$(J)}`,offload:(J,Y)=>`offload:${$(J)}:${Y}`,archive:(J,Y)=>`archive:${$(J)}:${Y}`,stateExecution:(J,Y)=>`state:execution:${$(J)}:${$(Y)}`,stateWorkflow:(J,Y)=>`state:workflow-scope:${R}:${$(J)}:${$(Y)}`,streamChunkPrefix:(J,Y)=>`blob:${$(J)}:${Y}:chunk:`,streamChunk:(J,Y,Z)=>`blob:${$(J)}:${Y}:chunk:${String(Z).padStart(10,"0")}`,streamMetadata:(J,Y)=>`blob:${$(J)}:${Y}:meta`,budgetCharged:(J)=>`budget-charged:${J}`,toolEffect:(J,Y,Z)=>`tool-effect:${$(J)}:${Y}:${Z}`,workflowVisibilityStatus:(J,Y)=>`wf-idx-status:${$(J)}:${$(Y)}`,workflowVisibilityType:(J,Y)=>`wf-idx-type:${$(J)}:${$(Y)}`,workflowVisibilityCreated:(J,Y)=>`wf-idx-created:${_(J)}:${$(Y)}`,workflowVisibilityUpdated:(J,Y)=>`wf-idx-updated:${_(J)}:${$(Y)}`,workflowVisibilityDeadline:(J,Y)=>`wf-idx-deadline:${_(J)}:${$(Y)}`,workflowVisibilityManifest:(J)=>`wf-idx-manifest:${$(J)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function w(J){if(J===void 0)return;if(typeof J!=="number"||!Number.isInteger(J)||J<0)throw Error("deleteRange limit must be a finite non-negative integer");return J===0?0:J}function j(J){let Y={},Z=!1;for(let X of["gt","gte","lt","lte"]){let F=J[X];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");Y[X]=F,Z=!0}if(!Z)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let G=w(J.limit);if(G!==void 0)Y.limit=G;return Y}async function b(J,Y,Z){let G=j(Z);if(J.deleteRange)return J.deleteRange(Y,G);return H(J,Y,G)}function c(J,Y){let Z={key:J,open:!1};if(Y.gte!==void 0&&Y.gte>Z.key)Z.key=Y.gte,Z.open=!1;if(Y.gt!==void 0&&Y.gt>=Z.key)Z.key=Y.gt,Z.open=!0;return Z}function y(J,Y){let Z={key:O(J),open:!0};if(Y.lt!==void 0&&Y.lt<=Z.key)Z.key=Y.lt,Z.open=!0;if(Y.lte!==void 0&&Y.lte<Z.key)Z.key=Y.lte,Z.open=!1;return Z}function HJ(J,Y){let Z=c(J,Y),G=y(J,Y);if(Z.key>G.key||Z.key===G.key&&(Z.open||G.open))return null;return{lower:Z,upper:G}}function B(J){return J.replaceAll(/:+$/g,"")}function g(J,Y){let Z=B(J),G=B(Y);if(Z.length===0)return G;if(G.length===0)return Z;return`${Z}:${G}`}class A{#Y;#Z;constructor(J,Y){this.#Y=J,this.#Z=B(Y)}#J(J){if(this.#Z.length===0)return J;return J.length===0?`${this.#Z}:`:`${this.#Z}:${J}`}#$(J){if(this.#Z.length===0)return J;return J.slice(this.#Z.length+1)}#G(J={}){let Y={};if(J.limit!==void 0)Y.limit=J.limit;if(J.reverse!==void 0)Y.reverse=J.reverse;if(J.gt!==void 0)Y.gt=this.#J(J.gt);if(J.gte!==void 0)Y.gte=this.#J(J.gte);if(J.lt!==void 0)Y.lt=this.#J(J.lt);if(J.lte!==void 0)Y.lte=this.#J(J.lte);return Y}#_(J){let Y={};if(J.limit!==void 0)Y.limit=J.limit;if(J.gt!==void 0)Y.gt=this.#J(J.gt);if(J.gte!==void 0)Y.gte=this.#J(J.gte);if(J.lt!==void 0)Y.lt=this.#J(J.lt);if(J.lte!==void 0)Y.lte=this.#J(J.lte);return Y}capabilities(){return this.#Y.capabilities()}scoped(J){return new A(this.#Y,g(this.#Z,J))}async get(J){return this.#Y.get(this.#J(J))}async put(J,Y){await this.#Y.put(this.#J(J),Y)}async delete(J){await this.#Y.delete(this.#J(J))}async*scan(J,Y){for await(let[Z,G]of this.#Y.scan(this.#J(J),this.#G(Y)))yield[this.#$(Z),G]}async batch(J){await this.#Y.batch(J.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#J(Y.key),value:Y.value};return{type:"delete",key:this.#J(Y.key)}}))}async conditionalBatch(J,Y){return K(this.#Y,J.map((Z)=>({key:this.#J(Z.key),expectedValue:Z.expectedValue})),Y.map((Z)=>{if(Z.type==="put")return{type:"put",key:this.#J(Z.key),value:Z.value};return{type:"delete",key:this.#J(Z.key)}}))}async has(J){return P(this.#Y,this.#J(J))}async deletePrefix(J){return C(this.#Y,this.#J(J))}async deleteRange(J,Y){let Z=this.#_(j(Y));return b(this.#Y,this.#J(J),Z)}async*keys(J,Y){for await(let Z of h(this.#Y,this.#J(J),this.#G(Y)))yield this.#$(Z)}async count(J){return v(this.#Y,this.#J(J))}[Symbol.dispose](){this.#Y[Symbol.dispose]()}}function S(J,Y){return new A(J,Y)}var f=67108864;function I(J){if(J.type==="put")return{type:"put",key:J.key,value:U(J.value)};return{type:"delete",key:J.key}}function l(J){return{key:J.key,expectedValue:J.expectedValue===null?null:U(J.expectedValue)}}function d(J){if(!N(J)||typeof J.key!=="string"||typeof J.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:J.key,value:J.value}}function p(J){if(!N(J)||typeof J.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return J.applied}function W(J,Y,Z){if(Z!==void 0)J.searchParams.set(Y,String(Z))}function s(J){if(J.trim().length===0)return null;let Y=d(JSON.parse(J));return[Y.key,T(Y.value)]}function a(J){if(J>f)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*i(J){if(J.body===null)return;let Y=J.body.getReader(),Z=new TextDecoder,G="",X=0,F=!1;try{while(!0){let{done:L,value:D}=await Y.read();if(L){F=!0;break}X+=D.byteLength,a(X),G+=Z.decode(D,{stream:!0});let z=G.split(`
|
|
2
|
-
`);
|
|
1
|
+
var u=Object.defineProperty;var k=(F)=>F;function w(F,G){this[F]=k.bind(null,G)}var JF=(F,G)=>{for(var J in G)u(F,J,{get:G[J],enumerable:!0,configurable:!0,set:w.bind(G,J)})};function N(F){let G=[];for(let J=0;J<F.length;J+=512)G.push(String.fromCharCode(...F.subarray(J,J+512)));return btoa(G.join(""))}function R(F){let G=atob(F),J=new Uint8Array(G.length);for(let Y=0;Y<G.length;Y+=1)J[Y]=G.charCodeAt(Y);return J}function D(F){return typeof F==="object"&&F!==null&&!Array.isArray(F)}async function j(F,G){return await F.get(G)!==null}async function*X(F,G,J){for await(let[Y]of F.scan(G,J))yield Y}async function W(F,G){let J=0;for await(let Y of X(F,G))J++;return J}async function H(F,G){let J=[];for await(let Y of X(F,G))J.push({type:"delete",key:Y});if(J.length===0)return 0;return await F.batch(J),J.length}async function L(F,G,J){let Y=[];for await(let Z of X(F,G,J))Y.push({type:"delete",key:Z});if(Y.length===0)return 0;return await F.batch(Y),Y.length}function q(F,G,J){if(!F.capabilities()[G])throw Error(`Feature "${J}" requires storage capability "${G}", but this storage backend does not provide it.`)}var S="default";var T=1e4,jF=1e4;class K extends Error{code="StorageBatchOperationLimitExceededError";cap=T;count;target;constructor(F,G){super(`${F} count ${G} exceeds MAX_BATCH_OPERATIONS (${T}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=G}}function $(F,G){if(G>T)throw new K(F,G)}function O(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function WF(F,G={}){if(G.gt!==void 0&&F<=G.gt)return!1;if(G.gte!==void 0&&F<G.gte)return!1;if(G.lt!==void 0&&F>=G.lt)return!1;if(G.lte!==void 0&&F>G.lte)return!1;return!0}function HF(F,G){if(F===null||G===null)return F===G;if(F.byteLength!==G.byteLength)return!1;for(let J=0;J<F.byteLength;J++)if(F[J]!==G[J])return!1;return!0}async function h(F,G){if(F.has)return F.has(G);return j(F,G)}function b(F,G,J){if(F.keys)return F.keys(G,J);return X(F,G,J)}async function v(F,G){if(F.count)return F.count(G);return W(F,G)}async function m(F,G){if(F.deletePrefix)return F.deletePrefix(G);return H(F,G)}async function LF(F,G){$("batch operations",G.length),await F.batch(G)}async function x(F,G,J){if($("conditionalBatch conditions",G.length),$("conditionalBatch operations",J.length),q(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(G,J)}function Q(F){return encodeURIComponent(F)}function UF(F){return decodeURIComponent(F)}function NF(F){try{return decodeURIComponent(F)}catch{return null}}var _=(F)=>String(F).padStart(16,"0"),f="0",l="1",P=(F,G,J,Y)=>`sig:${Q(F)}:${Q(G)}:${Y}:${Q(J)}`,DF={workflow:(F)=>`wf:${Q(F)}`,checkpoint:(F)=>`wf:${Q(F)}:ckpt`,checkpointHistory:(F,G)=>`wf:${Q(F)}:ckpt:${String(G).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Q(F)}:timeline:`,timeline:(F,G)=>`wf:${Q(F)}:timeline:${String(G).padStart(10,"0")}`,schedule:(F)=>`schedule:${Q(F)}`,scheduleTick:(F,G)=>`schedule-due:${String(F).padStart(16,"0")}:${Q(G)}`,scheduleRun:(F)=>`schedule-run:${Q(F)}`,operation:(F,G,J)=>`op:${F}:${_(G)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,G,J)=>`audit:bulk:${_(F)}:${Q(G)}:${Q(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,G)=>`op:resolved-by-time:${_(F)}:${Q(G)}`,asyncActivity:(F,G)=>`async-act:v1:${Q(F)}:${Q(G)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Q(F)}:`,activityReconciliation:(F,G,J)=>`actrec:v1:${Q(F)}:${Q(G)}:${J}`,eventPrefix:(F)=>`ev:${Q(F)}:`,event:(F,G)=>`ev:${Q(F)}:${String(G).padStart(10,"0")}`,eventHead:(F)=>`ev:${Q(F)}:head`,eventWatermark:(F)=>`ev:${Q(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${Q(F)}:`,fleetEventByWorkflow:(F,G)=>`fleet-event-by-workflow:${Q(F)}:${String(G).padStart(10,"0")}`,signal:(F,G,J)=>P(F,G,J,l),startSignal:(F,G,J)=>P(F,G,J,f),signalSequence:(F)=>`sigseq:v1:${Q(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Q(F)}:`,signalAcceptedResponse:(F,G,J)=>`sigres:v1:${Q(F)}:${Q(G)}:${Q(J)}`,deadline:(F,G)=>`wf-deadline:${_(F)}:${Q(G)}`,terminalCleanup:(F,G)=>`wf-cleanup:${_(F)}:${Q(G)}`,teardownTimer:(F,G)=>`wf-teardown:${_(F)}:${Q(G)}`,delayedStart:(F,G)=>`wf-delayed:${_(F)}:${Q(G)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,G)=>`wf-terminal:${_(F)}:${Q(G)}`,attribute:(F)=>`attr:${Q(F)}`,attributeIndex:(F,G,J)=>`idx:${F}:${G}:${Q(J)}`,tagIndex:(F,G)=>`tag:${Q(F)}:${Q(G)}`,updatePrefix:(F)=>`upd:${Q(F)}:`,update:(F,G)=>`upd:${Q(F)}:${G}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,G)=>`upk:${Q(F)}:${G}`,startIdempotency:(F)=>`start-idem:${Q(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Q(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,G,J)=>`budget:${F}:${G}:${J}`,review:(F,G)=>`review:${Q(F)}:${G}`,workflowHeaders:(F)=>`wf-headers:${Q(F)}`,childCancellationPrefix:(F)=>`child-cancel:${Q(F)}:`,childCancellation:(F,G)=>`child-cancel:${Q(F)}:${Q(G)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Q(F)}`,workflowConcurrency:(F,G)=>`wf-concurrency:${Q(F)}:${Q(G)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${Q(F)}`,workflowHasServices:(F)=>`wf-has-services:${Q(F)}`,finalizerState:(F)=>`wf-finalizer-state:${Q(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${Q(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${Q(F)}`,offload:(F,G)=>`offload:${Q(F)}:${G}`,archive:(F,G)=>`archive:${Q(F)}:${G}`,stateExecution:(F,G)=>`state:execution:${Q(F)}:${Q(G)}`,stateWorkflow:(F,G)=>`state:workflow-scope:${S}:${Q(F)}:${Q(G)}`,streamChunkPrefix:(F,G)=>`blob:${Q(F)}:${G}:chunk:`,streamChunk:(F,G,J)=>`blob:${Q(F)}:${G}:chunk:${String(J).padStart(10,"0")}`,streamTail:(F,G)=>`blob:${Q(F)}:${G}:tail`,streamMetadata:(F,G)=>`blob:${Q(F)}:${G}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,G,J)=>`tool-effect:${Q(F)}:${G}:${J}`,workflowVisibilityStatus:(F,G)=>`wf-idx-status:${Q(F)}:${Q(G)}`,workflowVisibilityType:(F,G)=>`wf-idx-type:${Q(F)}:${Q(G)}`,workflowVisibilityCreated:(F,G)=>`wf-idx-created:${_(F)}:${Q(G)}`,workflowVisibilityUpdated:(F,G)=>`wf-idx-updated:${_(F)}:${Q(G)}`,workflowVisibilityDeadline:(F,G)=>`wf-idx-deadline:${_(F)}:${Q(G)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Q(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function d(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function V(F){let G={},J=!1;for(let Z of["gt","gte","lt","lte"]){let M=F[Z];if(M===void 0)continue;if(typeof M!=="string")throw Error("deleteRange bounds must be strings");G[Z]=M,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Y=d(F.limit);if(Y!==void 0)G.limit=Y;return G}async function c(F,G,J){let Y=V(J);if(F.deleteRange)return F.deleteRange(G,Y);return L(F,G,Y)}function p(F,G){let J={key:F,open:!1};if(G.gte!==void 0&&G.gte>J.key)J.key=G.gte,J.open=!1;if(G.gt!==void 0&&G.gt>=J.key)J.key=G.gt,J.open=!0;return J}function a(F,G){let J={key:O(F),open:!0};if(G.lt!==void 0&&G.lt<=J.key)J.key=G.lt,J.open=!0;if(G.lte!==void 0&&G.lte<J.key)J.key=G.lte,J.open=!1;return J}function BF(F,G){let J=p(F,G),Y=a(F,G);if(J.key>Y.key||J.key===Y.key&&(J.open||Y.open))return null;return{lower:J,upper:Y}}function A(F){return F.replaceAll(/:+$/g,"")}function s(F,G){let J=A(F),Y=A(G);if(J.length===0)return Y;if(Y.length===0)return J;return`${J}:${Y}`}class z{#G;#J;constructor(F,G){this.#G=F,this.#J=A(G)}#F(F){if(this.#J.length===0)return F;return F.length===0?`${this.#J}:`:`${this.#J}:${F}`}#Q(F){if(this.#J.length===0)return F;return F.slice(this.#J.length+1)}#Y(F={}){let G={};if(F.limit!==void 0)G.limit=F.limit;if(F.reverse!==void 0)G.reverse=F.reverse;if(F.gt!==void 0)G.gt=this.#F(F.gt);if(F.gte!==void 0)G.gte=this.#F(F.gte);if(F.lt!==void 0)G.lt=this.#F(F.lt);if(F.lte!==void 0)G.lte=this.#F(F.lte);return G}#_(F){let G={};if(F.limit!==void 0)G.limit=F.limit;if(F.gt!==void 0)G.gt=this.#F(F.gt);if(F.gte!==void 0)G.gte=this.#F(F.gte);if(F.lt!==void 0)G.lt=this.#F(F.lt);if(F.lte!==void 0)G.lte=this.#F(F.lte);return G}capabilities(){return this.#G.capabilities()}scoped(F){return new z(this.#G,s(this.#J,F))}async get(F){return this.#G.get(this.#F(F))}async put(F,G){await this.#G.put(this.#F(F),G)}async delete(F){await this.#G.delete(this.#F(F))}async*scan(F,G){for await(let[J,Y]of this.#G.scan(this.#F(F),this.#Y(G)))yield[this.#Q(J),Y]}async batch(F){$("batch operations",F.length),await this.#G.batch(F.map((G)=>{if(G.type==="put")return{type:"put",key:this.#F(G.key),value:G.value};return{type:"delete",key:this.#F(G.key)}}))}async conditionalBatch(F,G){return x(this.#G,F.map((J)=>({key:this.#F(J.key),expectedValue:J.expectedValue})),G.map((J)=>{if(J.type==="put")return{type:"put",key:this.#F(J.key),value:J.value};return{type:"delete",key:this.#F(J.key)}}))}async has(F){return h(this.#G,this.#F(F))}async deletePrefix(F){return m(this.#G,this.#F(F))}async deleteRange(F,G){let J=this.#_(V(G));return c(this.#G,this.#F(F),J)}async*keys(F,G){for await(let J of b(this.#G,this.#F(F),this.#Y(G)))yield this.#Q(J)}async count(F){return v(this.#G,this.#F(F))}[Symbol.dispose](){this.#G[Symbol.dispose]()}}function I(F,G){return new z(F,G)}var n=67108864;function g(F){if(F.type==="put")return{type:"put",key:F.key,value:N(F.value)};return{type:"delete",key:F.key}}function r(F){return{key:F.key,expectedValue:F.expectedValue===null?null:N(F.expectedValue)}}function i(F){if(!D(F)||typeof F.key!=="string"||typeof F.value!=="string")throw Error("HTTPStorage scan response contained an invalid NDJSON entry.");return{key:F.key,value:F.value}}function t(F){if(!D(F)||typeof F.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return F.applied}function E(F,G,J){if(J!==void 0)F.searchParams.set(G,String(J))}function o(F){if(F.trim().length===0)return null;let G=i(JSON.parse(F));return[G.key,R(G.value)]}function e(F){if(F>n)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*FF(F){if(F.body===null)return;let G=F.body.getReader(),J=new TextDecoder,Y="",Z=0,M=!1;try{while(!0){let{done:U,value:B}=await G.read();if(U){M=!0;break}Z+=B.byteLength,e(Z),Y+=J.decode(B,{stream:!0});let C=Y.split(`
|
|
2
|
+
`);Y=C.pop()??"";for(let y of C)yield y}if(Y+=J.decode(),Y.length>0)yield Y}finally{try{if(!M)await G.cancel()}catch{}G.releaseLock()}}class GF{#G;#J;#F;constructor(F){this.#G=F.baseUrl instanceof URL?F.baseUrl:new URL(F.baseUrl),this.#J={...F.headers},this.#F=F.remoteConditionalBatch??!1}capabilities(){return{persistence:"remote",readAfterWrite:"eventual",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:this.#F,boundedRangeDelete:!1}}#Q(F){let G=this.#G.href.endsWith("/")?this.#G.href:`${this.#G.href}/`;return new URL(F.replace(/^\/+/,""),G)}#Y(F){return this.#Q(`/v1/storage/${encodeURIComponent(F)}`)}#_(F,G){let J=this.#Q("/v1/storage");return J.searchParams.set("prefix",F),E(J,"limit",G.limit),E(J,"reverse",G.reverse),E(J,"gt",G.gt),E(J,"gte",G.gte),E(J,"lt",G.lt),E(J,"lte",G.lte),J}async#Z(F,G={},J=[]){let Y=new Headers(this.#J);for(let[M,U]of new Headers(G.headers).entries())Y.set(M,U);let Z=await fetch(F,{...G,headers:Y});if(!Z.ok&&!J.includes(Z.status))throw Error(`HTTPStorage request failed: ${G.method??"GET"} ${F.pathname} returned ${String(Z.status)}.`);return Z}async get(F){let G=await this.#Z(this.#Y(F),{method:"GET"},[404]);if(G.status===404)return null;return new Uint8Array(await G.arrayBuffer())}async put(F,G){await this.#Z(this.#Y(F),{method:"PUT",headers:{"content-type":"application/octet-stream"},body:new Blob([G])})}async delete(F){await this.#Z(this.#Y(F),{method:"DELETE"})}async*scan(F,G={}){let J=await this.#Z(this.#_(F,G),{method:"GET",headers:{accept:"application/x-ndjson"}});for await(let Y of FF(J)){let Z=o(Y);if(Z!==null)yield Z}}async batch(F){$("batch operations",F.length),await this.#Z(this.#Q("/v1/storage/-/batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({operations:F.map(g)})})}async conditionalBatch(F,G){$("conditionalBatch conditions",F.length),$("conditionalBatch operations",G.length);let J=await this.#Z(this.#Q("/v1/storage/-/conditional-batch"),{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({conditions:F.map(r),operations:G.map(g)})});return t(await J.json())}has(F){return j(this,F)}async*keys(F,G){yield*X(this,F,G)}count(F){return W(this,F)}deletePrefix(F){return H(this,F)}deleteRange(F,G){return L(this,F,V(G))}scoped(F){return I(this,F)}[Symbol.dispose](){}}export{GF as HTTPStorage};
|
package/dist/storage/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* import { SQLiteStorage } from '@lostgradient/weft/storage/sqlite'; // Bun or Node SQLite
|
|
14
14
|
* import { LMDBStorage } from '@lostgradient/weft/storage/lmdb'; // peer: lmdb
|
|
15
15
|
* import { TursoStorage } from '@lostgradient/weft/storage/turso'; // peer: @libsql/client
|
|
16
|
+
* import { NeonStorage } from '@lostgradient/weft/storage/neon'; // peer: @neondatabase/serverless
|
|
16
17
|
* import { IndexedDBStorage } from '@lostgradient/weft/storage/indexeddb'; // browser-only
|
|
17
18
|
* import { WebExtensionStorage } from '@lostgradient/weft/storage/web-extension'; // extension-only
|
|
18
19
|
* import { HTTPStorage } from '@lostgradient/weft/storage/http'; // remote storage
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
* @module @lostgradient/weft/storage
|
|
22
23
|
*/
|
|
23
24
|
import { storageDeleteRange } from './delete-range';
|
|
24
|
-
import { assertDurableStorageForRecovery, requireStorageCapability, storageConditionalBatch, storageValuesEqual } from './interface';
|
|
25
|
+
import { assertDurableStorageForRecovery, assertStorageBatchOperationCount, requireStorageCapability, storageBatch, StorageBatchOperationLimitExceededError, storageConditionalBatch, storageValuesEqual } from './interface';
|
|
25
26
|
import { MemoryStorage } from './memory';
|
|
26
27
|
import { resolveStorage } from './resolve';
|
|
27
28
|
import { ScopedStorage, scopedStorage } from './scoped-storage';
|
|
@@ -92,6 +93,8 @@ declare const exportedKeys: {
|
|
|
92
93
|
readonly operationInflight: (id: string) => string;
|
|
93
94
|
readonly operationQueued: (id: string) => string;
|
|
94
95
|
readonly operationResolved: (id: string) => string;
|
|
96
|
+
readonly operationDeadLetterPrefix: () => string;
|
|
97
|
+
readonly operationDeadLetter: (id: string) => string;
|
|
95
98
|
readonly bulkOperationAuditPrefix: () => string;
|
|
96
99
|
readonly bulkOperationAudit: (timestamp: number, requestId: string, confirmationToken: string) => string;
|
|
97
100
|
readonly operationResolvedByTimePrefix: () => string;
|
|
@@ -103,12 +106,19 @@ declare const exportedKeys: {
|
|
|
103
106
|
readonly event: (workflowId: string, sequence: number) => string;
|
|
104
107
|
readonly eventHead: (workflowId: string) => string;
|
|
105
108
|
readonly eventWatermark: (workflowId: string) => string;
|
|
109
|
+
readonly fleetEventPrefix: () => string;
|
|
110
|
+
readonly fleetEvent: (sequence: number) => string;
|
|
111
|
+
readonly fleetEventTail: () => string;
|
|
112
|
+
readonly fleetEventByWorkflowPrefix: (workflowId: string) => string;
|
|
113
|
+
readonly fleetEventByWorkflow: (workflowId: string, sequence: number) => string;
|
|
106
114
|
readonly signal: (workflowId: string, name: string, id: string) => string;
|
|
115
|
+
readonly startSignal: (workflowId: string, name: string, id: string) => string;
|
|
107
116
|
readonly signalSequence: (workflowId: string) => string;
|
|
108
117
|
readonly signalAcceptedResponsePrefix: (workflowId: string) => string;
|
|
109
118
|
readonly signalAcceptedResponse: (workflowId: string, name: string, signalId: string) => string;
|
|
110
119
|
readonly deadline: (deadline: number, workflowId: string) => string;
|
|
111
120
|
readonly terminalCleanup: (fireAt: number, timerId: string) => string;
|
|
121
|
+
readonly teardownTimer: (fireAt: number, timerId: string) => string;
|
|
112
122
|
readonly delayedStart: (startAt: number, workflowId: string) => string;
|
|
113
123
|
readonly terminalWorkflowPrefix: () => string;
|
|
114
124
|
readonly terminalWorkflow: (updatedAt: number, workflowId: string) => string;
|
|
@@ -119,17 +129,32 @@ declare const exportedKeys: {
|
|
|
119
129
|
readonly update: (workflowId: string, updateId: string) => string;
|
|
120
130
|
readonly updateResponse: (updateId: string) => string;
|
|
121
131
|
readonly updateIdempotency: (workflowId: string, key: string) => string;
|
|
132
|
+
readonly startIdempotency: (key: string) => string;
|
|
133
|
+
readonly startIdempotencySignalId: (key: string) => string;
|
|
134
|
+
readonly livenessPrefix: () => string;
|
|
135
|
+
readonly liveness: (instanceId: string) => string;
|
|
136
|
+
readonly leasePrefix: () => string;
|
|
137
|
+
readonly leaseEpoch: () => string;
|
|
138
|
+
readonly leaseHolder: () => string;
|
|
122
139
|
readonly budget: (namespace: string, period: string, date: string) => string;
|
|
123
140
|
readonly review: (workflowId: string, reviewId: string) => string;
|
|
124
141
|
readonly workflowHeaders: (workflowId: string) => string;
|
|
142
|
+
readonly childCancellationPrefix: (workflowId: string) => string;
|
|
143
|
+
readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
|
|
125
144
|
readonly terminalCleanupNeeded: (workflowId: string) => string;
|
|
145
|
+
readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
|
|
146
|
+
readonly workflowConcurrencyHolder: (workflowId: string) => string;
|
|
126
147
|
readonly workflowHasServices: (workflowId: string) => string;
|
|
148
|
+
readonly finalizerState: (workflowId: string) => string;
|
|
149
|
+
readonly teardownOwed: (workflowId: string) => string;
|
|
150
|
+
readonly teardownDeadLetter: (workflowId: string) => string;
|
|
127
151
|
readonly offload: (workflowId: string, key: string) => string;
|
|
128
152
|
readonly archive: (workflowId: string, key: string) => string;
|
|
129
153
|
readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
|
|
130
154
|
readonly stateWorkflow: (workflowType: string, key: string) => string;
|
|
131
155
|
readonly streamChunkPrefix: (workflowId: string, key: string) => string;
|
|
132
156
|
readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
|
|
157
|
+
readonly streamTail: (workflowId: string, key: string) => string;
|
|
133
158
|
readonly streamMetadata: (workflowId: string, key: string) => string;
|
|
134
159
|
readonly budgetCharged: (operationId: string) => string;
|
|
135
160
|
readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
|
|
@@ -143,6 +168,26 @@ declare const exportedKeys: {
|
|
|
143
168
|
readonly workflowVisibilityMetaBuiltAt: () => string;
|
|
144
169
|
readonly workflowVisibilityMetaCursor: () => string;
|
|
145
170
|
};
|
|
171
|
+
/**
|
|
172
|
+
* Re-exported {@link MAX_BATCH_OPERATIONS}. See the original declaration for full docs.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```ts
|
|
176
|
+
* import { MAX_BATCH_OPERATIONS } from '@lostgradient/weft/storage';
|
|
177
|
+
* console.log(MAX_BATCH_OPERATIONS);
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
declare const exportedMaxBatchOperations = 10000;
|
|
181
|
+
/**
|
|
182
|
+
* Re-exported {@link MAX_SCAN_LIMIT}. See the original declaration for full docs.
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```ts
|
|
186
|
+
* import { MAX_SCAN_LIMIT } from '@lostgradient/weft/storage';
|
|
187
|
+
* console.log(MAX_SCAN_LIMIT);
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
declare const exportedMaxScanLimit = 10000;
|
|
146
191
|
/**
|
|
147
192
|
* Re-exported {@link MemoryStorage}. See the original declaration for full docs.
|
|
148
193
|
*
|
|
@@ -200,6 +245,27 @@ declare const exportedScopedStorage: typeof ScopedStorage;
|
|
|
200
245
|
* ```
|
|
201
246
|
*/
|
|
202
247
|
declare const exportedScopedStorageFactory: typeof scopedStorage;
|
|
248
|
+
/**
|
|
249
|
+
* Re-exported {@link assertStorageBatchOperationCount}. See the original declaration for full docs.
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```ts
|
|
253
|
+
* import { assertStorageBatchOperationCount } from '@lostgradient/weft/storage';
|
|
254
|
+
* assertStorageBatchOperationCount('batch operations', 1);
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
declare const exportedAssertStorageBatchOperationCount: typeof assertStorageBatchOperationCount;
|
|
258
|
+
/**
|
|
259
|
+
* Re-exported {@link storageBatch}. See the original declaration for full docs.
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
* ```ts
|
|
263
|
+
* import { MemoryStorage, storageBatch } from '@lostgradient/weft/storage';
|
|
264
|
+
* await using storage = new MemoryStorage();
|
|
265
|
+
* await storageBatch(storage, []);
|
|
266
|
+
* ```
|
|
267
|
+
*/
|
|
268
|
+
declare const exportedStorageBatch: typeof storageBatch;
|
|
203
269
|
/**
|
|
204
270
|
* Re-exported {@link storageConditionalBatch}. See the original declaration for full docs.
|
|
205
271
|
*
|
|
@@ -246,6 +312,17 @@ declare const exportedRequireStorageCapability: typeof requireStorageCapability;
|
|
|
246
312
|
* ```
|
|
247
313
|
*/
|
|
248
314
|
declare const exportedStorageValuesEqual: typeof storageValuesEqual;
|
|
315
|
+
/**
|
|
316
|
+
* Re-exported {@link StorageBatchOperationLimitExceededError}. See the original declaration for full docs.
|
|
317
|
+
*
|
|
318
|
+
* @example
|
|
319
|
+
* ```ts
|
|
320
|
+
* import { StorageBatchOperationLimitExceededError } from '@lostgradient/weft/storage';
|
|
321
|
+
* const error = new StorageBatchOperationLimitExceededError('batch operations', 10001);
|
|
322
|
+
* console.log(error.count);
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
325
|
+
declare const exportedStorageBatchOperationLimitExceededError: typeof StorageBatchOperationLimitExceededError;
|
|
249
326
|
/**
|
|
250
327
|
* Re-exported {@link textValueStore}. See the original declaration for full docs.
|
|
251
328
|
*
|
|
@@ -270,7 +347,7 @@ declare const exportedTextValueStore: typeof textValueStore;
|
|
|
270
347
|
* void isWeftKey;
|
|
271
348
|
* ```
|
|
272
349
|
*/
|
|
273
|
-
declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "schedule-run:", "sig:", "sigres:", "sigseq:", "state:", "tag:", "tool-effect:", "upd:", "upk:", "upr:", "wf:", "wf-cleanup:", "wf-cleanup-needed:", "wf-deadline:", "wf-delayed:", "wf-has-services:", "wf-headers:", "wf-idx-", "wf-terminal:"];
|
|
350
|
+
declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "fleet-event-by-workflow:", "fleet-event:", "fleet-event-tail", "idx:", "lease:", "liveness:", "offload:", "op:", "review:", "schedule:", "schedule-due:", "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-teardown:", "wf-teardown-deadletter:", "wf-teardown-needed:", "wf-terminal:"];
|
|
274
351
|
/**
|
|
275
352
|
* Re-exported {@link withCodec}. See the original declaration for full docs.
|
|
276
353
|
*
|
|
@@ -285,9 +362,9 @@ declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:",
|
|
|
285
362
|
declare const exportedWithCodec: typeof withCodec;
|
|
286
363
|
export type { JSONValue } from '../core/json.ts';
|
|
287
364
|
export type { DeleteRangeOptions } from './delete-range';
|
|
288
|
-
export type { BatchOperation, ConditionalBatchCondition, GatedStorageCapabilityKey, ScanOptions, Storage, StorageCapabilities, } from './interface';
|
|
365
|
+
export type { BatchOperation, ConditionalBatchCondition, GatedStorageCapabilityKey, ScanOptions, Storage, StorageBatchOperationLimitTarget, StorageCapabilities, } from './interface';
|
|
289
366
|
export type { StorageConfiguration } from './resolve';
|
|
290
367
|
export type { CopyTextKeyValueRowsToStorageOptions, CopyTextKeyValueRowsToStorageResult, TextKeyValueRow, } from './text-value-import';
|
|
291
368
|
export type { TextValueStore, TextValueStoreBatchOperation, TextValueStoreCondition, TextValueStoreOptions, } from './text-value-store';
|
|
292
369
|
export type { CodecStorageOptions, MessagePackValue, StorageCodec, StorageValueParser, TypedBatchOperation, TypedConditionalBatchCondition, TypedStorage, } from './typed-storage';
|
|
293
|
-
export { exportedAssertDurableStorageForRecovery as assertDurableStorageForRecovery, exportedCopyTextKeyValueRowsToStorage as copyTextKeyValueRowsToStorage, exportedJsonCodec as jsonCodec, exportedKeys as KEYS, exportedMemoryStorage as MemoryStorage, exportedMsgpackCodec as msgpackCodec, exportedRequireStorageCapability as requireStorageCapability, exportedResolveStorage as resolveStorage, exportedScopedStorage as ScopedStorage, exportedScopedStorageFactory as scopedStorage, exportedStorageConditionalBatch as storageConditionalBatch, exportedStorageDeleteRange as storageDeleteRange, exportedStorageValuesEqual as storageValuesEqual, exportedTextValueStore as textValueStore, exportedWeftReservedKeyPrefixes as WEFT_RESERVED_KEY_PREFIXES, exportedWithCodec as withCodec, };
|
|
370
|
+
export { exportedAssertDurableStorageForRecovery as assertDurableStorageForRecovery, exportedAssertStorageBatchOperationCount as assertStorageBatchOperationCount, exportedCopyTextKeyValueRowsToStorage as copyTextKeyValueRowsToStorage, exportedJsonCodec as jsonCodec, exportedKeys as KEYS, exportedMaxBatchOperations as MAX_BATCH_OPERATIONS, exportedMaxScanLimit as MAX_SCAN_LIMIT, exportedMemoryStorage as MemoryStorage, exportedMsgpackCodec as msgpackCodec, exportedRequireStorageCapability as requireStorageCapability, exportedResolveStorage as resolveStorage, exportedScopedStorage as ScopedStorage, exportedScopedStorageFactory as scopedStorage, exportedStorageBatch as storageBatch, exportedStorageBatchOperationLimitExceededError as StorageBatchOperationLimitExceededError, exportedStorageConditionalBatch as storageConditionalBatch, exportedStorageDeleteRange as storageDeleteRange, exportedStorageValuesEqual as storageValuesEqual, exportedTextValueStore as textValueStore, exportedWeftReservedKeyPrefixes as WEFT_RESERVED_KEY_PREFIXES, exportedWithCodec as withCodec, };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var l=Object.defineProperty;var d=(Y)=>Y;function p(Y,J){this[Y]=d.bind(null,J)}var t=(Y,J)=>{for(var U in J)l(Y,U,{get:J[U],enumerable:!0,configurable:!0,set:p.bind(J,U)})};async function E(Y,J){return await Y.get(J)!==null}async function*T(Y,J,U){for await(let[Z]of Y.scan(J,U))yield Z}async function v(Y,J){let U=0;for await(let Z of T(Y,J))U++;return U}async function K(Y,J){let U=[];for await(let Z of T(Y,J))U.push({type:"delete",key:Z});if(U.length===0)return 0;return await Y.batch(U),U.length}async function C(Y,J,U){let Z=[];for await(let $ of T(Y,J,U))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await Y.batch(Z),Z.length}function q(Y,J,U){if(!Y.capabilities()[J])throw Error(`Feature "${U}" requires storage capability "${J}", but this storage backend does not provide it.`)}var b="default";function N(Y){return Y.length>0?Y.slice(0,-1)+String.fromCharCode(Y.charCodeAt(Y.length-1)+1):"ÿ"}function O(Y,J={}){if(J.gt!==void 0&&Y<=J.gt)return!1;if(J.gte!==void 0&&Y<J.gte)return!1;if(J.lt!==void 0&&Y>=J.lt)return!1;if(J.lte!==void 0&&Y>J.lte)return!1;return!0}function I(Y,J){if(Y===null||J===null)return Y===J;if(Y.byteLength!==J.byteLength)return!1;for(let U=0;U<Y.byteLength;U++)if(Y[U]!==J[U])return!1;return!0}async function S(Y,J){if(Y.has)return Y.has(J);return E(Y,J)}function x(Y,J,U){if(Y.keys)return Y.keys(J,U);return T(Y,J,U)}async function k(Y,J){if(Y.count)return Y.count(J);return v(Y,J)}async function w(Y,J){if(Y.deletePrefix)return Y.deletePrefix(J);return K(Y,J)}async function u(Y,J,U){if(q(Y,"conditionalBatch","storageConditionalBatch"),!Y.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return Y.conditionalBatch(J,U)}function X(Y){return encodeURIComponent(Y)}function GY(Y){try{return decodeURIComponent(Y)}catch{return null}}var _=(Y)=>String(Y).padStart(16,"0"),FY={workflow:(Y)=>`wf:${X(Y)}`,checkpoint:(Y)=>`wf:${X(Y)}:ckpt`,checkpointHistory:(Y,J)=>`wf:${X(Y)}:ckpt:${String(J).padStart(10,"0")}`,timelinePrefix:(Y)=>`wf:${X(Y)}:timeline:`,timeline:(Y,J)=>`wf:${X(Y)}:timeline:${String(J).padStart(10,"0")}`,schedule:(Y)=>`schedule:${X(Y)}`,scheduleTick:(Y,J)=>`schedule-due:${String(Y).padStart(16,"0")}:${X(J)}`,scheduleRun:(Y)=>`schedule-run:${X(Y)}`,operation:(Y,J,U)=>`op:${Y}:${_(J)}:${U}`,operationInflight:(Y)=>`op:inflight:${Y}`,operationQueued:(Y)=>`op:queued:${Y}`,operationResolved:(Y)=>`op:resolved:${Y}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(Y,J,U)=>`audit:bulk:${_(Y)}:${X(J)}:${X(U)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(Y,J)=>`op:resolved-by-time:${_(Y)}:${X(J)}`,asyncActivity:(Y,J)=>`async-act:v1:${X(Y)}:${X(J)}`,activityReconciliationPrefix:(Y)=>`actrec:v1:${X(Y)}:`,activityReconciliation:(Y,J,U)=>`actrec:v1:${X(Y)}:${X(J)}:${U}`,eventPrefix:(Y)=>`ev:${X(Y)}:`,event:(Y,J)=>`ev:${X(Y)}:${String(J).padStart(10,"0")}`,eventHead:(Y)=>`ev:${X(Y)}:head`,eventWatermark:(Y)=>`ev:${X(Y)}:watermark`,signal:(Y,J,U)=>`sig:${X(Y)}:${J}:${X(U)}`,signalSequence:(Y)=>`sigseq:v1:${X(Y)}`,signalAcceptedResponsePrefix:(Y)=>`sigres:v1:${X(Y)}:`,signalAcceptedResponse:(Y,J,U)=>`sigres:v1:${X(Y)}:${X(J)}:${X(U)}`,deadline:(Y,J)=>`wf-deadline:${_(Y)}:${X(J)}`,terminalCleanup:(Y,J)=>`wf-cleanup:${_(Y)}:${X(J)}`,delayedStart:(Y,J)=>`wf-delayed:${_(Y)}:${X(J)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(Y,J)=>`wf-terminal:${_(Y)}:${X(J)}`,attribute:(Y)=>`attr:${X(Y)}`,attributeIndex:(Y,J,U)=>`idx:${Y}:${J}:${X(U)}`,tagIndex:(Y,J)=>`tag:${X(Y)}:${X(J)}`,updatePrefix:(Y)=>`upd:${X(Y)}:`,update:(Y,J)=>`upd:${X(Y)}:${J}`,updateResponse:(Y)=>`upr:${Y}`,updateIdempotency:(Y,J)=>`upk:${X(Y)}:${J}`,budget:(Y,J,U)=>`budget:${Y}:${J}:${U}`,review:(Y,J)=>`review:${X(Y)}:${J}`,workflowHeaders:(Y)=>`wf-headers:${X(Y)}`,terminalCleanupNeeded:(Y)=>`wf-cleanup-needed:${X(Y)}`,workflowHasServices:(Y)=>`wf-has-services:${X(Y)}`,offload:(Y,J)=>`offload:${X(Y)}:${J}`,archive:(Y,J)=>`archive:${X(Y)}:${J}`,stateExecution:(Y,J)=>`state:execution:${X(Y)}:${X(J)}`,stateWorkflow:(Y,J)=>`state:workflow-scope:${b}:${X(Y)}:${X(J)}`,streamChunkPrefix:(Y,J)=>`blob:${X(Y)}:${J}:chunk:`,streamChunk:(Y,J,U)=>`blob:${X(Y)}:${J}:chunk:${String(U).padStart(10,"0")}`,streamMetadata:(Y,J)=>`blob:${X(Y)}:${J}:meta`,budgetCharged:(Y)=>`budget-charged:${Y}`,toolEffect:(Y,J,U)=>`tool-effect:${X(Y)}:${J}:${U}`,workflowVisibilityStatus:(Y,J)=>`wf-idx-status:${X(Y)}:${X(J)}`,workflowVisibilityType:(Y,J)=>`wf-idx-type:${X(Y)}:${X(J)}`,workflowVisibilityCreated:(Y,J)=>`wf-idx-created:${_(Y)}:${X(J)}`,workflowVisibilityUpdated:(Y,J)=>`wf-idx-updated:${_(Y)}:${X(J)}`,workflowVisibilityDeadline:(Y,J)=>`wf-idx-deadline:${_(Y)}:${X(J)}`,workflowVisibilityManifest:(Y)=>`wf-idx-manifest:${X(Y)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function s(Y){if(Y===void 0)return;if(typeof Y!=="number"||!Number.isInteger(Y)||Y<0)throw Error("deleteRange limit must be a finite non-negative integer");return Y===0?0:Y}function P(Y){let J={},U=!1;for(let $ of["gt","gte","lt","lte"]){let F=Y[$];if(F===void 0)continue;if(typeof F!=="string")throw Error("deleteRange bounds must be strings");J[$]=F,U=!0}if(!U)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=s(Y.limit);if(Z!==void 0)J.limit=Z;return J}async function y(Y,J,U){let Z=P(U);if(Y.deleteRange)return Y.deleteRange(J,Z);return C(Y,J,Z)}function a(Y,J){let U={key:Y,open:!1};if(J.gte!==void 0&&J.gte>U.key)U.key=J.gte,U.open=!1;if(J.gt!==void 0&&J.gt>=U.key)U.key=J.gt,U.open=!0;return U}function i(Y,J){let U={key:N(Y),open:!0};if(J.lt!==void 0&&J.lt<=U.key)U.key=J.lt,U.open=!0;if(J.lte!==void 0&&J.lte<U.key)U.key=J.lte,U.open=!1;return U}function m(Y,J){let U=a(Y,J),Z=i(Y,J);if(U.key>Z.key||U.key===Z.key&&(U.open||Z.open))return null;return{lower:U,upper:Z}}function R(Y){return Y.replaceAll(/:+$/g,"")}function n(Y,J){let U=R(Y),Z=R(J);if(U.length===0)return Z;if(Z.length===0)return U;return`${U}:${Z}`}class h{#J;#U;constructor(Y,J){this.#J=Y,this.#U=R(J)}#Y(Y){if(this.#U.length===0)return Y;return Y.length===0?`${this.#U}:`:`${this.#U}:${Y}`}#X(Y){if(this.#U.length===0)return Y;return Y.slice(this.#U.length+1)}#Z(Y={}){let J={};if(Y.limit!==void 0)J.limit=Y.limit;if(Y.reverse!==void 0)J.reverse=Y.reverse;if(Y.gt!==void 0)J.gt=this.#Y(Y.gt);if(Y.gte!==void 0)J.gte=this.#Y(Y.gte);if(Y.lt!==void 0)J.lt=this.#Y(Y.lt);if(Y.lte!==void 0)J.lte=this.#Y(Y.lte);return J}#$(Y){let J={};if(Y.limit!==void 0)J.limit=Y.limit;if(Y.gt!==void 0)J.gt=this.#Y(Y.gt);if(Y.gte!==void 0)J.gte=this.#Y(Y.gte);if(Y.lt!==void 0)J.lt=this.#Y(Y.lt);if(Y.lte!==void 0)J.lte=this.#Y(Y.lte);return J}capabilities(){return this.#J.capabilities()}scoped(Y){return new h(this.#J,n(this.#U,Y))}async get(Y){return this.#J.get(this.#Y(Y))}async put(Y,J){await this.#J.put(this.#Y(Y),J)}async delete(Y){await this.#J.delete(this.#Y(Y))}async*scan(Y,J){for await(let[U,Z]of this.#J.scan(this.#Y(Y),this.#Z(J)))yield[this.#X(U),Z]}async batch(Y){await this.#J.batch(Y.map((J)=>{if(J.type==="put")return{type:"put",key:this.#Y(J.key),value:J.value};return{type:"delete",key:this.#Y(J.key)}}))}async conditionalBatch(Y,J){return u(this.#J,Y.map((U)=>({key:this.#Y(U.key),expectedValue:U.expectedValue})),J.map((U)=>{if(U.type==="put")return{type:"put",key:this.#Y(U.key),value:U.value};return{type:"delete",key:this.#Y(U.key)}}))}async has(Y){return S(this.#J,this.#Y(Y))}async deletePrefix(Y){return w(this.#J,this.#Y(Y))}async deleteRange(Y,J){let U=this.#$(P(J));return y(this.#J,this.#Y(Y),U)}async*keys(Y,J){for await(let U of x(this.#J,this.#Y(Y),this.#Z(J)))yield this.#X(U)}async count(Y){return k(this.#J,this.#Y(Y))}[Symbol.dispose](){this.#J[Symbol.dispose]()}}function f(Y,J){return new h(Y,J)}var Q="kv";function A(Y){return new Promise((J,U)=>{Y.onsuccess=()=>J(Y.result),Y.onerror=()=>U(Y.error)})}function g(Y,J){let U=null,Z=null,$=null,F=(G,V)=>{let W=G??Error(V);if(Z){let B=Z;U=null,Z=null,B(W);return}$=W};return Y.onsuccess=()=>{if(!U)return;let G=U;U=null,Z=null,G(Y.result)},Y.onerror=()=>{F(Y.error,"IndexedDB cursor request failed.")},J.onerror=()=>{F(J.error,"IndexedDB transaction failed.")},J.onabort=()=>{F(J.error,"IndexedDB transaction aborted.")},()=>{return new Promise((G,V)=>{if($){let W=$;$=null,V(W);return}if(U=G,Z=V,Y.readyState==="done"){let W=U;U=null,Z=null,W?.(Y.result)}})}}class r{#J;#U=null;#Y;constructor(Y="weft"){this.#J=Y,this.#Y=this.#X()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#X(){let Y=indexedDB.open(this.#J,1);return Y.onupgradeneeded=()=>{let J=Y.result;if(!J.objectStoreNames.contains(Q))J.createObjectStore(Q)},A(Y).then((J)=>{return this.#U=J,J})}async get(Y){let Z=(await this.#Y).transaction(Q,"readonly").objectStore(Q),$=await A(Z.get(Y));return $===void 0?null:new Uint8Array($)}async put(Y,J){let $=(await this.#Y).transaction(Q,"readwrite").objectStore(Q);await A($.put(J,Y))}async delete(Y){let Z=(await this.#Y).transaction(Q,"readwrite").objectStore(Q);await A(Z.delete(Y))}async has(Y){let Z=(await this.#Y).transaction(Q,"readonly").objectStore(Q);return await A(Z.count(Y))>0}async deletePrefix(Y){let J=await this.#Y,U=N(Y),Z=IDBKeyRange.bound(Y,U,!1,!0);return new Promise(($,F)=>{let G=J.transaction(Q,"readwrite"),V=G.objectStore(Q),W=0,B=V.count(Z);B.onsuccess=()=>{W=B.result,V.delete(Z)},G.oncomplete=()=>$(W),G.onerror=()=>F(G.error)})}async deleteRange(Y,J){let U=P(J),Z=m(Y,U);if(Z===null)return 0;let $=IDBKeyRange.bound(Z.lower.key,Z.upper.key,Z.lower.open,Z.upper.open),F=await this.#Y,{limit:G}=U;return new Promise((V,W)=>{let B=F.transaction(Q,"readwrite"),M=B.objectStore(Q),D=0;if(G===void 0){let H=M.count($);H.onsuccess=()=>{D=H.result,M.delete($)}}else{let H=M.openCursor($,"next");H.onsuccess=()=>{let z=H.result;if(z===null||D>=G)return;if(z.delete(),D++,D<G)z.continue()}}B.oncomplete=()=>V(D),B.onerror=()=>W(B.error)})}async*scan(Y,J={}){let{limit:U,reverse:Z}=J,$=await this.#Y,F=N(Y),G=IDBKeyRange.bound(Y,F,!1,!0),V=Z?"prev":"next",W=$.transaction(Q,"readonly"),M=W.objectStore(Q).openCursor(G,V),D=0,H=g(M,W),z=!1;try{let L=await H();while(L){if(U!==void 0&&D>=U)break;let j=L.key;if(O(j,J))yield[j,new Uint8Array(L.value)],D++;L.continue(),L=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async batch(Y){if(Y.length===0)return;let J=await this.#Y;return new Promise((U,Z)=>{let $=J.transaction(Q,"readwrite"),F=$.objectStore(Q);for(let G of Y)if(G.type==="put")F.put(G.value,G.key);else F.delete(G.key);$.oncomplete=()=>U(),$.onerror=()=>Z($.error)})}async conditionalBatch(Y,J){let U=await this.#Y;return new Promise((Z,$)=>{let F=U.transaction(Q,"readwrite"),G=F.objectStore(Q),V=!1,W=!1,B=(H,z)=>{if(V)return;V=!0,$(H??Error(z))};F.oncomplete=()=>{if(V)return;V=!0,Z(!0)},F.onerror=()=>{B(F.error,"IndexedDB conditionalBatch transaction failed.")},F.onabort=()=>{if(V)return;if(V=!0,W){Z(!1);return}$(F.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let H of J)if(H.type==="put")G.put(H.value,H.key);else G.delete(H.key)},D=(H)=>{if(H>=Y.length){M();return}let z=Y[H],L=G.get(z.key);L.onsuccess=()=>{let j=L.result,c=j===void 0?null:new Uint8Array(j);if(!I(c,z.expectedValue)){W=!0,F.abort();return}D(H+1)},L.onerror=()=>{B(L.error,"IndexedDB conditionalBatch condition check failed.")}};D(0)})}async*keys(Y,J={}){let{limit:U,reverse:Z}=J,$=await this.#Y,F=N(Y),G=IDBKeyRange.bound(Y,F,!1,!0),V=Z?"prev":"next",W=$.transaction(Q,"readonly"),M=W.objectStore(Q).openKeyCursor(G,V),D=0,H=g(M,W),z=!1;try{let L=await H();while(L){if(U!==void 0&&D>=U)break;let j=L.key;if(O(j,J))yield j,D++;L.continue(),L=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async count(Y){let J=await this.#Y,U=N(Y),$=J.transaction(Q,"readonly").objectStore(Q);return A($.count(IDBKeyRange.bound(Y,U,!1,!0)))}scoped(Y){return f(this,Y)}[Symbol.dispose](){if(this.#U)this.#U.close(),this.#U=null}}export{r as IndexedDBStorage};
|
|
1
|
+
var s=Object.defineProperty;var n=(F)=>F;function i(F,U){this[F]=n.bind(null,U)}var GF=(F,U)=>{for(var Y in U)s(F,Y,{get:U[Y],enumerable:!0,configurable:!0,set:i.bind(U,Y)})};async function R(F,U){return await F.get(U)!==null}async function*S(F,U,Y){for await(let[J]of F.scan(U,Y))yield J}async function E(F,U){let Y=0;for await(let J of S(F,U))Y++;return Y}async function v(F,U){let Y=[];for await(let J of S(F,U))Y.push({type:"delete",key:J});if(Y.length===0)return 0;return await F.batch(Y),Y.length}async function b(F,U,Y){let J=[];for await(let Q of S(F,U,Y))J.push({type:"delete",key:Q});if(J.length===0)return 0;return await F.batch(J),J.length}function A(F,U,Y){if(!F.capabilities()[U])throw Error(`Feature "${Y}" requires storage capability "${U}", but this storage backend does not provide it.`)}var m="default";var P=1e4,VF=1e4;class y extends Error{code="StorageBatchOperationLimitExceededError";cap=P;count;target;constructor(F,U){super(`${F} count ${U} exceeds MAX_BATCH_OPERATIONS (${P}).`);this.name="StorageBatchOperationLimitExceededError",this.target=F,this.count=U}}function T(F,U){if(U>P)throw new y(F,U)}function K(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function C(F,U={}){if(U.gt!==void 0&&F<=U.gt)return!1;if(U.gte!==void 0&&F<U.gte)return!1;if(U.lt!==void 0&&F>=U.lt)return!1;if(U.lte!==void 0&&F>U.lte)return!1;return!0}function I(F,U){if(F===null||U===null)return F===U;if(F.byteLength!==U.byteLength)return!1;for(let Y=0;Y<F.byteLength;Y++)if(F[Y]!==U[Y])return!1;return!0}async function g(F,U){if(F.has)return F.has(U);return R(F,U)}function k(F,U,Y){if(F.keys)return F.keys(U,Y);return S(F,U,Y)}async function c(F,U){if(F.count)return F.count(U);return E(F,U)}async function u(F,U){if(F.deletePrefix)return F.deletePrefix(U);return v(F,U)}async function DF(F,U){T("batch operations",U.length),await F.batch(U)}async function w(F,U,Y){if(T("conditionalBatch conditions",U.length),T("conditionalBatch operations",Y.length),A(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(U,Y)}function G(F){return encodeURIComponent(F)}function BF(F){return decodeURIComponent(F)}function _F(F){try{return decodeURIComponent(F)}catch{return null}}var z=(F)=>String(F).padStart(16,"0"),r="0",t="1",x=(F,U,Y,J)=>`sig:${G(F)}:${G(U)}:${J}:${G(Y)}`,zF={workflow:(F)=>`wf:${G(F)}`,checkpoint:(F)=>`wf:${G(F)}:ckpt`,checkpointHistory:(F,U)=>`wf:${G(F)}:ckpt:${String(U).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${G(F)}:timeline:`,timeline:(F,U)=>`wf:${G(F)}:timeline:${String(U).padStart(10,"0")}`,schedule:(F)=>`schedule:${G(F)}`,scheduleTick:(F,U)=>`schedule-due:${String(F).padStart(16,"0")}:${G(U)}`,scheduleRun:(F)=>`schedule-run:${G(F)}`,operation:(F,U,Y)=>`op:${F}:${z(U)}:${Y}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,operationDeadLetterPrefix:()=>"op:dead-letter:",operationDeadLetter:(F)=>`op:dead-letter:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,U,Y)=>`audit:bulk:${z(F)}:${G(U)}:${G(Y)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,U)=>`op:resolved-by-time:${z(F)}:${G(U)}`,asyncActivity:(F,U)=>`async-act:v1:${G(F)}:${G(U)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${G(F)}:`,activityReconciliation:(F,U,Y)=>`actrec:v1:${G(F)}:${G(U)}:${Y}`,eventPrefix:(F)=>`ev:${G(F)}:`,event:(F,U)=>`ev:${G(F)}:${String(U).padStart(10,"0")}`,eventHead:(F)=>`ev:${G(F)}:head`,eventWatermark:(F)=>`ev:${G(F)}:watermark`,fleetEventPrefix:()=>"fleet-event:",fleetEvent:(F)=>`fleet-event:${String(F).padStart(10,"0")}`,fleetEventTail:()=>"fleet-event-tail",fleetEventByWorkflowPrefix:(F)=>`fleet-event-by-workflow:${G(F)}:`,fleetEventByWorkflow:(F,U)=>`fleet-event-by-workflow:${G(F)}:${String(U).padStart(10,"0")}`,signal:(F,U,Y)=>x(F,U,Y,t),startSignal:(F,U,Y)=>x(F,U,Y,r),signalSequence:(F)=>`sigseq:v1:${G(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${G(F)}:`,signalAcceptedResponse:(F,U,Y)=>`sigres:v1:${G(F)}:${G(U)}:${G(Y)}`,deadline:(F,U)=>`wf-deadline:${z(F)}:${G(U)}`,terminalCleanup:(F,U)=>`wf-cleanup:${z(F)}:${G(U)}`,teardownTimer:(F,U)=>`wf-teardown:${z(F)}:${G(U)}`,delayedStart:(F,U)=>`wf-delayed:${z(F)}:${G(U)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,U)=>`wf-terminal:${z(F)}:${G(U)}`,attribute:(F)=>`attr:${G(F)}`,attributeIndex:(F,U,Y)=>`idx:${F}:${U}:${G(Y)}`,tagIndex:(F,U)=>`tag:${G(F)}:${G(U)}`,updatePrefix:(F)=>`upd:${G(F)}:`,update:(F,U)=>`upd:${G(F)}:${U}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,U)=>`upk:${G(F)}:${U}`,startIdempotency:(F)=>`start-idem:${G(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${G(F)}`,leasePrefix:()=>"lease:",leaseEpoch:()=>"lease:epoch",leaseHolder:()=>"lease:holder",budget:(F,U,Y)=>`budget:${F}:${U}:${Y}`,review:(F,U)=>`review:${G(F)}:${U}`,workflowHeaders:(F)=>`wf-headers:${G(F)}`,childCancellationPrefix:(F)=>`child-cancel:${G(F)}:`,childCancellation:(F,U)=>`child-cancel:${G(F)}:${G(U)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${G(F)}`,workflowConcurrency:(F,U)=>`wf-concurrency:${G(F)}:${G(U)}`,workflowConcurrencyHolder:(F)=>`wf-concurrency-holder:${G(F)}`,workflowHasServices:(F)=>`wf-has-services:${G(F)}`,finalizerState:(F)=>`wf-finalizer-state:${G(F)}`,teardownOwed:(F)=>`wf-teardown-needed:${G(F)}`,teardownDeadLetter:(F)=>`wf-teardown-deadletter:${G(F)}`,offload:(F,U)=>`offload:${G(F)}:${U}`,archive:(F,U)=>`archive:${G(F)}:${U}`,stateExecution:(F,U)=>`state:execution:${G(F)}:${G(U)}`,stateWorkflow:(F,U)=>`state:workflow-scope:${m}:${G(F)}:${G(U)}`,streamChunkPrefix:(F,U)=>`blob:${G(F)}:${U}:chunk:`,streamChunk:(F,U,Y)=>`blob:${G(F)}:${U}:chunk:${String(Y).padStart(10,"0")}`,streamTail:(F,U)=>`blob:${G(F)}:${U}:tail`,streamMetadata:(F,U)=>`blob:${G(F)}:${U}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,U,Y)=>`tool-effect:${G(F)}:${U}:${Y}`,workflowVisibilityStatus:(F,U)=>`wf-idx-status:${G(F)}:${G(U)}`,workflowVisibilityType:(F,U)=>`wf-idx-type:${G(F)}:${G(U)}`,workflowVisibilityCreated:(F,U)=>`wf-idx-created:${z(F)}:${G(U)}`,workflowVisibilityUpdated:(F,U)=>`wf-idx-updated:${z(F)}:${G(U)}`,workflowVisibilityDeadline:(F,U)=>`wf-idx-deadline:${z(F)}:${G(U)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${G(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function o(F){if(F===void 0)return;if(typeof F!=="number"||!Number.isInteger(F)||F<0)throw Error("deleteRange limit must be a finite non-negative integer");return F===0?0:F}function h(F){let U={},Y=!1;for(let Q of["gt","gte","lt","lte"]){let Z=F[Q];if(Z===void 0)continue;if(typeof Z!=="string")throw Error("deleteRange bounds must be strings");U[Q]=Z,Y=!0}if(!Y)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let J=o(F.limit);if(J!==void 0)U.limit=J;return U}async function f(F,U,Y){let J=h(Y);if(F.deleteRange)return F.deleteRange(U,J);return b(F,U,J)}function e(F,U){let Y={key:F,open:!1};if(U.gte!==void 0&&U.gte>Y.key)Y.key=U.gte,Y.open=!1;if(U.gt!==void 0&&U.gt>=Y.key)Y.key=U.gt,Y.open=!0;return Y}function FF(F,U){let Y={key:K(F),open:!0};if(U.lt!==void 0&&U.lt<=Y.key)Y.key=U.lt,Y.open=!0;if(U.lte!==void 0&&U.lte<Y.key)Y.key=U.lte,Y.open=!1;return Y}function l(F,U){let Y=e(F,U),J=FF(F,U);if(Y.key>J.key||Y.key===J.key&&(Y.open||J.open))return null;return{lower:Y,upper:J}}function q(F){return F.replaceAll(/:+$/g,"")}function UF(F,U){let Y=q(F),J=q(U);if(Y.length===0)return J;if(J.length===0)return Y;return`${Y}:${J}`}class O{#U;#Y;constructor(F,U){this.#U=F,this.#Y=q(U)}#F(F){if(this.#Y.length===0)return F;return F.length===0?`${this.#Y}:`:`${this.#Y}:${F}`}#G(F){if(this.#Y.length===0)return F;return F.slice(this.#Y.length+1)}#J(F={}){let U={};if(F.limit!==void 0)U.limit=F.limit;if(F.reverse!==void 0)U.reverse=F.reverse;if(F.gt!==void 0)U.gt=this.#F(F.gt);if(F.gte!==void 0)U.gte=this.#F(F.gte);if(F.lt!==void 0)U.lt=this.#F(F.lt);if(F.lte!==void 0)U.lte=this.#F(F.lte);return U}#Q(F){let U={};if(F.limit!==void 0)U.limit=F.limit;if(F.gt!==void 0)U.gt=this.#F(F.gt);if(F.gte!==void 0)U.gte=this.#F(F.gte);if(F.lt!==void 0)U.lt=this.#F(F.lt);if(F.lte!==void 0)U.lte=this.#F(F.lte);return U}capabilities(){return this.#U.capabilities()}scoped(F){return new O(this.#U,UF(this.#Y,F))}async get(F){return this.#U.get(this.#F(F))}async put(F,U){await this.#U.put(this.#F(F),U)}async delete(F){await this.#U.delete(this.#F(F))}async*scan(F,U){for await(let[Y,J]of this.#U.scan(this.#F(F),this.#J(U)))yield[this.#G(Y),J]}async batch(F){T("batch operations",F.length),await this.#U.batch(F.map((U)=>{if(U.type==="put")return{type:"put",key:this.#F(U.key),value:U.value};return{type:"delete",key:this.#F(U.key)}}))}async conditionalBatch(F,U){return w(this.#U,F.map((Y)=>({key:this.#F(Y.key),expectedValue:Y.expectedValue})),U.map((Y)=>{if(Y.type==="put")return{type:"put",key:this.#F(Y.key),value:Y.value};return{type:"delete",key:this.#F(Y.key)}}))}async has(F){return g(this.#U,this.#F(F))}async deletePrefix(F){return u(this.#U,this.#F(F))}async deleteRange(F,U){let Y=this.#Q(h(U));return f(this.#U,this.#F(F),Y)}async*keys(F,U){for await(let Y of k(this.#U,this.#F(F),this.#J(U)))yield this.#G(Y)}async count(F){return c(this.#U,this.#F(F))}[Symbol.dispose](){this.#U[Symbol.dispose]()}}function d(F,U){return new O(F,U)}var $="kv";function N(F){return new Promise((U,Y)=>{F.onsuccess=()=>U(F.result),F.onerror=()=>Y(F.error)})}function p(F,U){let Y=null,J=null,Q=null,Z=(X,L)=>{let H=X??Error(L);if(J){let D=J;Y=null,J=null,D(H);return}Q=H};return F.onsuccess=()=>{if(!Y)return;let X=Y;Y=null,J=null,X(F.result)},F.onerror=()=>{Z(F.error,"IndexedDB cursor request failed.")},U.onerror=()=>{Z(U.error,"IndexedDB transaction failed.")},U.onabort=()=>{Z(U.error,"IndexedDB transaction aborted.")},()=>{return new Promise((X,L)=>{if(Q){let H=Q;Q=null,L(H);return}if(Y=X,J=L,F.readyState==="done"){let H=Y;Y=null,J=null,H?.(F.result)}})}}class YF{#U;#Y=null;#F;constructor(F="weft"){this.#U=F,this.#F=this.#G()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#G(){let F=indexedDB.open(this.#U,1);return F.onupgradeneeded=()=>{let U=F.result;if(!U.objectStoreNames.contains($))U.createObjectStore($)},N(F).then((U)=>{return this.#Y=U,U})}async get(F){let J=(await this.#F).transaction($,"readonly").objectStore($),Q=await N(J.get(F));return Q===void 0?null:new Uint8Array(Q)}async put(F,U){let Q=(await this.#F).transaction($,"readwrite").objectStore($);await N(Q.put(U,F))}async delete(F){let J=(await this.#F).transaction($,"readwrite").objectStore($);await N(J.delete(F))}async has(F){let J=(await this.#F).transaction($,"readonly").objectStore($);return await N(J.count(F))>0}async deletePrefix(F){let U=await this.#F,Y=K(F),J=IDBKeyRange.bound(F,Y,!1,!0);return new Promise((Q,Z)=>{let X=U.transaction($,"readwrite"),L=X.objectStore($),H=0,D=L.count(J);D.onsuccess=()=>{H=D.result,L.delete(J)},X.oncomplete=()=>Q(H),X.onerror=()=>Z(X.error)})}async deleteRange(F,U){let Y=h(U),J=l(F,Y);if(J===null)return 0;let Q=IDBKeyRange.bound(J.lower.key,J.upper.key,J.lower.open,J.upper.open),Z=await this.#F,{limit:X}=Y;return new Promise((L,H)=>{let D=Z.transaction($,"readwrite"),M=D.objectStore($),B=0;if(X===void 0){let W=M.count(Q);W.onsuccess=()=>{B=W.result,M.delete(Q)}}else{let W=M.openCursor(Q,"next");W.onsuccess=()=>{let _=W.result;if(_===null||B>=X)return;if(_.delete(),B++,B<X)_.continue()}}D.oncomplete=()=>L(B),D.onerror=()=>H(D.error)})}async*scan(F,U={}){let{limit:Y,reverse:J}=U,Q=await this.#F,Z=K(F),X=IDBKeyRange.bound(F,Z,!1,!0),L=J?"prev":"next",H=Q.transaction($,"readonly"),M=H.objectStore($).openCursor(X,L),B=0,W=p(M,H),_=!1;try{let V=await W();while(V){if(Y!==void 0&&B>=Y)break;let j=V.key;if(C(j,U))yield[j,new Uint8Array(V.value)],B++;V.continue(),V=await W()}_=!0}finally{if(!_)try{H.abort()}catch{}}}async batch(F){if(T("batch operations",F.length),F.length===0)return;let U=await this.#F;return new Promise((Y,J)=>{let Q=U.transaction($,"readwrite"),Z=Q.objectStore($);for(let X of F)if(X.type==="put")Z.put(X.value,X.key);else Z.delete(X.key);Q.oncomplete=()=>Y(),Q.onerror=()=>J(Q.error)})}async conditionalBatch(F,U){T("conditionalBatch conditions",F.length),T("conditionalBatch operations",U.length);let Y=await this.#F;return new Promise((J,Q)=>{let Z=Y.transaction($,"readwrite"),X=Z.objectStore($),L=!1,H=!1,D=(W,_)=>{if(L)return;L=!0,Q(W??Error(_))};Z.oncomplete=()=>{if(L)return;L=!0,J(!0)},Z.onerror=()=>{D(Z.error,"IndexedDB conditionalBatch transaction failed.")},Z.onabort=()=>{if(L)return;if(L=!0,H){J(!1);return}Q(Z.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let W of U)if(W.type==="put")X.put(W.value,W.key);else X.delete(W.key)},B=(W)=>{if(W>=F.length){M();return}let _=F[W],V=X.get(_.key);V.onsuccess=()=>{let j=V.result,a=j===void 0?null:new Uint8Array(j);if(!I(a,_.expectedValue)){H=!0,Z.abort();return}B(W+1)},V.onerror=()=>{D(V.error,"IndexedDB conditionalBatch condition check failed.")}};B(0)})}async*keys(F,U={}){let{limit:Y,reverse:J}=U,Q=await this.#F,Z=K(F),X=IDBKeyRange.bound(F,Z,!1,!0),L=J?"prev":"next",H=Q.transaction($,"readonly"),M=H.objectStore($).openKeyCursor(X,L),B=0,W=p(M,H),_=!1;try{let V=await W();while(V){if(Y!==void 0&&B>=Y)break;let j=V.key;if(C(j,U))yield j,B++;V.continue(),V=await W()}_=!0}finally{if(!_)try{H.abort()}catch{}}}async count(F){let U=await this.#F,Y=K(F),Q=U.transaction($,"readonly").objectStore($);return N(Q.count(IDBKeyRange.bound(F,Y,!1,!0)))}scoped(F){return d(this,F)}[Symbol.dispose](){if(this.#Y)this.#Y.close(),this.#Y=null}}export{YF as IndexedDBStorage};
|