@lostgradient/weft 0.3.0 → 0.5.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 +79 -24
- package/dist/cli/conformance.js +7 -1
- package/dist/cli/generated/operation-client.generated.d.ts +28 -13
- package/dist/cli/generated/operation-client.generated.js +1 -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 +79 -78
- package/dist/client/handle-delegation.d.ts +3 -2
- package/dist/client/handle-delegation.js +3 -1
- package/dist/client/http-client-requests.d.ts +2 -1
- package/dist/client/http-client-requests.js +7 -0
- package/dist/client/http-client.d.ts +9 -6
- package/dist/client/http-client.js +10 -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 +61 -5
- package/dist/client/local-handles.d.ts +22 -0
- package/dist/client/local-handles.js +23 -0
- package/dist/client/local.d.ts +6 -3
- package/dist/client/local.js +12 -26
- package/dist/client/start-body.d.ts +4 -3
- 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 +100 -6
- 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 +9 -5
- package/dist/core/context/index.js +17 -12
- package/dist/core/context/internals.d.ts +20 -0
- package/dist/core/context/internals.js +3 -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 +6 -1
- package/dist/core/context/run-operation.js +41 -87
- 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 +46 -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 -0
- package/dist/core/engine/construction.js +21 -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 +13 -0
- package/dist/core/engine/engine-create-types.d.ts +14 -4
- package/dist/core/engine/engine-internal-types.d.ts +26 -3
- package/dist/core/engine/errors.d.ts +47 -0
- package/dist/core/engine/errors.js +20 -0
- 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/handles.d.ts +8 -0
- package/dist/core/engine/index.d.ts +34 -16
- package/dist/core/engine/index.js +136 -9
- package/dist/core/engine/inline-parking.js +3 -2
- package/dist/core/engine/internals.d.ts +107 -3
- 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/persist.js +10 -32
- 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 +16 -9
- 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 +9 -0
- package/dist/core/engine/lifecycle/start-commit.js +50 -8
- 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.d.ts +3 -2
- package/dist/core/engine/lifecycle/start-or-signal.js +11 -81
- 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 +4 -4
- package/dist/core/engine/lifecycle/start.js +17 -9
- package/dist/core/engine/lifecycle/transition.js +17 -5
- package/dist/core/engine/lifecycle.d.ts +1 -1
- package/dist/core/engine/list-candidate-resolution.js +2 -2
- package/dist/core/engine/listing.js +9 -5
- package/dist/core/engine/operations-activity.d.ts +6 -13
- package/dist/core/engine/operations-activity.js +26 -53
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +44 -9
- 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/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-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 +7 -4
- package/dist/core/engine/schedules.js +37 -16
- 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/signals.d.ts +18 -2
- package/dist/core/engine/signals.js +42 -21
- 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 +25 -6
- package/dist/core/engine/termination/cleanup.d.ts +3 -1
- package/dist/core/engine/termination/cleanup.js +25 -1
- package/dist/core/engine/termination/complete.js +44 -6
- 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 +3 -1
- package/dist/core/engine/termination.d.ts +1 -0
- package/dist/core/engine/termination.js +4 -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 +32 -5
- 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 +4 -5
- 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 +18 -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 +88 -23
- package/dist/core/events/workflow-events.js +26 -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/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 +34 -0
- package/dist/core/start-workflow-validation.js +19 -0
- 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 +80 -61
- package/dist/core/types/bulk.d.ts +50 -9
- package/dist/core/types/checkpoint.d.ts +44 -8
- package/dist/core/types/list-options.d.ts +146 -0
- package/dist/core/types/list-options.js +0 -0
- package/dist/core/types/options.d.ts +121 -165
- package/dist/core/types/schedules.d.ts +39 -3
- package/dist/core/types/services-resolution.d.ts +2 -2
- 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 +42 -11
- 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 +84 -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.d.ts +4 -0
- package/dist/core/types.js +4 -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 +16 -0
- 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/format.js +1 -6
- package/dist/diagnostics/types.d.ts +4 -5
- package/dist/diagnostics/validate.d.ts +0 -1
- package/dist/diagnostics/version-check.d.ts +1 -1
- package/dist/diagnostics/version-check.js +4 -9
- package/dist/index.d.ts +12 -10
- package/dist/index.js +29 -3
- package/dist/json-schema.js +3 -3
- package/dist/mcp/cli.js +19 -19
- package/dist/mcp/dispatcher.js +1 -1
- package/dist/mcp/http.js +16 -6
- 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 +59 -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 +23 -23
- package/dist/server/index.d.ts +32 -2
- package/dist/server/index.js +32 -32
- 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/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 +6 -1
- package/dist/server/operations/start-or-signal-workflow.js +14 -24
- package/dist/server/operations/start-workflow-options.d.ts +6 -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 +8 -23
- 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/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 +3 -1
- package/dist/server/rest-bindings.js +12 -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-polling.js +61 -20
- 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 +38 -30
- package/dist/server/serve-internals.d.ts +3 -1
- package/dist/server/serve-internals.js +18 -2
- package/dist/server/task-state.d.ts +30 -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 +30 -30
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +24 -0
- 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 +76 -4
- package/dist/storage/indexeddb.js +1 -1
- package/dist/storage/interface.d.ts +163 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +10 -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 +30 -3
- package/dist/storage/neon-value-mapping.js +12 -0
- package/dist/storage/neon.d.ts +16 -0
- package/dist/storage/neon.js +9 -4
- package/dist/storage/node-sqlite.js +23 -0
- package/dist/storage/postgres-key-value-queries.d.ts +69 -44
- package/dist/storage/postgres-key-value-queries.js +62 -24
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/testing.d.ts +168 -0
- package/dist/storage/testing.js +2 -0
- 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 +20 -20
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/protocol.js +1 -1
- 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 +5 -1
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);
|
|
@@ -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=(F)=>F;function m(F,J){this[F]=u.bind(null,J)}var n=(F,J)=>{for(var Q in J)k(F,Q,{get:J[Q],enumerable:!0,configurable:!0,set:m.bind(J,Q)})};function U(F){let J=[];for(let Q=0;Q<F.length;Q+=512)J.push(String.fromCharCode(...F.subarray(Q,Q+512)));return btoa(J.join(""))}function T(F){let J=atob(F),Q=new Uint8Array(J.length);for(let Z=0;Z<J.length;Z+=1)Q[Z]=J.charCodeAt(Z);return Q}function N(F){return typeof F==="object"&&F!==null&&!Array.isArray(F)}async function M(F,J){return await F.get(J)!==null}async function*X(F,J,Q){for await(let[Z]of F.scan(J,Q))yield Z}async function V(F,J){let Q=0;for await(let Z of X(F,J))Q++;return Q}async function E(F,J){let Q=[];for await(let Z of X(F,J))Q.push({type:"delete",key:Z});if(Q.length===0)return 0;return await F.batch(Q),Q.length}async function H(F,J,Q){let Z=[];for await(let $ of X(F,J,Q))Z.push({type:"delete",key:$});if(Z.length===0)return 0;return await F.batch(Z),Z.length}function q(F,J,Q){if(!F.capabilities()[J])throw Error(`Feature "${Q}" requires storage capability "${J}", but this storage backend does not provide it.`)}var R="default";function O(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function GF(F,J={}){if(J.gt!==void 0&&F<=J.gt)return!1;if(J.gte!==void 0&&F<J.gte)return!1;if(J.lt!==void 0&&F>=J.lt)return!1;if(J.lte!==void 0&&F>J.lte)return!1;return!0}function WF(F,J){if(F===null||J===null)return F===J;if(F.byteLength!==J.byteLength)return!1;for(let Q=0;Q<F.byteLength;Q++)if(F[Q]!==J[Q])return!1;return!0}async function P(F,J){if(F.has)return F.has(J);return M(F,J)}function h(F,J,Q){if(F.keys)return F.keys(J,Q);return X(F,J,Q)}async function v(F,J){if(F.count)return F.count(J);return V(F,J)}async function C(F,J){if(F.deletePrefix)return F.deletePrefix(J);return E(F,J)}async function b(F,J,Q){if(q(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(J,Q)}function Y(F){return encodeURIComponent(F)}function XF(F){try{return decodeURIComponent(F)}catch{return null}}var G=(F)=>String(F).padStart(16,"0"),_F={workflow:(F)=>`wf:${Y(F)}`,checkpoint:(F)=>`wf:${Y(F)}:ckpt`,checkpointHistory:(F,J)=>`wf:${Y(F)}:ckpt:${String(J).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Y(F)}:timeline:`,timeline:(F,J)=>`wf:${Y(F)}:timeline:${String(J).padStart(10,"0")}`,schedule:(F)=>`schedule:${Y(F)}`,scheduleTick:(F,J)=>`schedule-due:${String(F).padStart(16,"0")}:${Y(J)}`,scheduleRun:(F)=>`schedule-run:${Y(F)}`,operation:(F,J,Q)=>`op:${F}:${G(J)}:${Q}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,J,Q)=>`audit:bulk:${G(F)}:${Y(J)}:${Y(Q)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,J)=>`op:resolved-by-time:${G(F)}:${Y(J)}`,asyncActivity:(F,J)=>`async-act:v1:${Y(F)}:${Y(J)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Y(F)}:`,activityReconciliation:(F,J,Q)=>`actrec:v1:${Y(F)}:${Y(J)}:${Q}`,eventPrefix:(F)=>`ev:${Y(F)}:`,event:(F,J)=>`ev:${Y(F)}:${String(J).padStart(10,"0")}`,eventHead:(F)=>`ev:${Y(F)}:head`,eventWatermark:(F)=>`ev:${Y(F)}:watermark`,signal:(F,J,Q)=>`sig:${Y(F)}:${J}:${Y(Q)}`,signalSequence:(F)=>`sigseq:v1:${Y(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Y(F)}:`,signalAcceptedResponse:(F,J,Q)=>`sigres:v1:${Y(F)}:${Y(J)}:${Y(Q)}`,deadline:(F,J)=>`wf-deadline:${G(F)}:${Y(J)}`,terminalCleanup:(F,J)=>`wf-cleanup:${G(F)}:${Y(J)}`,delayedStart:(F,J)=>`wf-delayed:${G(F)}:${Y(J)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,J)=>`wf-terminal:${G(F)}:${Y(J)}`,attribute:(F)=>`attr:${Y(F)}`,attributeIndex:(F,J,Q)=>`idx:${F}:${J}:${Y(Q)}`,tagIndex:(F,J)=>`tag:${Y(F)}:${Y(J)}`,updatePrefix:(F)=>`upd:${Y(F)}:`,update:(F,J)=>`upd:${Y(F)}:${J}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,J)=>`upk:${Y(F)}:${J}`,startIdempotency:(F)=>`start-idem:${Y(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Y(F)}`,budget:(F,J,Q)=>`budget:${F}:${J}:${Q}`,review:(F,J)=>`review:${Y(F)}:${J}`,workflowHeaders:(F)=>`wf-headers:${Y(F)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Y(F)}`,workflowHasServices:(F)=>`wf-has-services:${Y(F)}`,offload:(F,J)=>`offload:${Y(F)}:${J}`,archive:(F,J)=>`archive:${Y(F)}:${J}`,stateExecution:(F,J)=>`state:execution:${Y(F)}:${Y(J)}`,stateWorkflow:(F,J)=>`state:workflow-scope:${R}:${Y(F)}:${Y(J)}`,streamChunkPrefix:(F,J)=>`blob:${Y(F)}:${J}:chunk:`,streamChunk:(F,J,Q)=>`blob:${Y(F)}:${J}:chunk:${String(Q).padStart(10,"0")}`,streamMetadata:(F,J)=>`blob:${Y(F)}:${J}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,J,Q)=>`tool-effect:${Y(F)}:${J}:${Q}`,workflowVisibilityStatus:(F,J)=>`wf-idx-status:${Y(F)}:${Y(J)}`,workflowVisibilityType:(F,J)=>`wf-idx-type:${Y(F)}:${Y(J)}`,workflowVisibilityCreated:(F,J)=>`wf-idx-created:${G(F)}:${Y(J)}`,workflowVisibilityUpdated:(F,J)=>`wf-idx-updated:${G(F)}:${Y(J)}`,workflowVisibilityDeadline:(F,J)=>`wf-idx-deadline:${G(F)}:${Y(J)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Y(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function w(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 j(F){let J={},Q=!1;for(let $ of["gt","gte","lt","lte"]){let W=F[$];if(W===void 0)continue;if(typeof W!=="string")throw Error("deleteRange bounds must be strings");J[$]=W,Q=!0}if(!Q)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let Z=w(F.limit);if(Z!==void 0)J.limit=Z;return J}async function K(F,J,Q){let Z=j(Q);if(F.deleteRange)return F.deleteRange(J,Z);return H(F,J,Z)}function c(F,J){let Q={key:F,open:!1};if(J.gte!==void 0&&J.gte>Q.key)Q.key=J.gte,Q.open=!1;if(J.gt!==void 0&&J.gt>=Q.key)Q.key=J.gt,Q.open=!0;return Q}function y(F,J){let Q={key:O(F),open:!0};if(J.lt!==void 0&&J.lt<=Q.key)Q.key=J.lt,Q.open=!0;if(J.lte!==void 0&&J.lte<Q.key)Q.key=J.lte,Q.open=!1;return Q}function HF(F,J){let Q=c(F,J),Z=y(F,J);if(Q.key>Z.key||Q.key===Z.key&&(Q.open||Z.open))return null;return{lower:Q,upper:Z}}function B(F){return F.replaceAll(/:+$/g,"")}function g(F,J){let Q=B(F),Z=B(J);if(Q.length===0)return Z;if(Z.length===0)return Q;return`${Q}:${Z}`}class D{#J;#Q;constructor(F,J){this.#J=F,this.#Q=B(J)}#F(F){if(this.#Q.length===0)return F;return F.length===0?`${this.#Q}:`:`${this.#Q}:${F}`}#Y(F){if(this.#Q.length===0)return F;return F.slice(this.#Q.length+1)}#Z(F={}){let J={};if(F.limit!==void 0)J.limit=F.limit;if(F.reverse!==void 0)J.reverse=F.reverse;if(F.gt!==void 0)J.gt=this.#F(F.gt);if(F.gte!==void 0)J.gte=this.#F(F.gte);if(F.lt!==void 0)J.lt=this.#F(F.lt);if(F.lte!==void 0)J.lte=this.#F(F.lte);return J}#G(F){let J={};if(F.limit!==void 0)J.limit=F.limit;if(F.gt!==void 0)J.gt=this.#F(F.gt);if(F.gte!==void 0)J.gte=this.#F(F.gte);if(F.lt!==void 0)J.lt=this.#F(F.lt);if(F.lte!==void 0)J.lte=this.#F(F.lte);return J}capabilities(){return this.#J.capabilities()}scoped(F){return new D(this.#J,g(this.#Q,F))}async get(F){return this.#J.get(this.#F(F))}async put(F,J){await this.#J.put(this.#F(F),J)}async delete(F){await this.#J.delete(this.#F(F))}async*scan(F,J){for await(let[Q,Z]of this.#J.scan(this.#F(F),this.#Z(J)))yield[this.#Y(Q),Z]}async batch(F){await this.#J.batch(F.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 conditionalBatch(F,J){return b(this.#J,F.map((Q)=>({key:this.#F(Q.key),expectedValue:Q.expectedValue})),J.map((Q)=>{if(Q.type==="put")return{type:"put",key:this.#F(Q.key),value:Q.value};return{type:"delete",key:this.#F(Q.key)}}))}async has(F){return P(this.#J,this.#F(F))}async deletePrefix(F){return C(this.#J,this.#F(F))}async deleteRange(F,J){let Q=this.#G(j(J));return K(this.#J,this.#F(F),Q)}async*keys(F,J){for await(let Q of h(this.#J,this.#F(F),this.#Z(J)))yield this.#Y(Q)}async count(F){return v(this.#J,this.#F(F))}[Symbol.dispose](){this.#J[Symbol.dispose]()}}function S(F,J){return new D(F,J)}var f=67108864;function I(F){if(F.type==="put")return{type:"put",key:F.key,value:U(F.value)};return{type:"delete",key:F.key}}function l(F){return{key:F.key,expectedValue:F.expectedValue===null?null:U(F.expectedValue)}}function d(F){if(!N(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 p(F){if(!N(F)||typeof F.applied!=="boolean")throw Error('HTTPStorage conditional batch response must include a boolean "applied" field.');return F.applied}function _(F,J,Q){if(Q!==void 0)F.searchParams.set(J,String(Q))}function s(F){if(F.trim().length===0)return null;let J=d(JSON.parse(F));return[J.key,T(J.value)]}function a(F){if(F>f)throw Error("HTTPStorage scan response exceeded the maximum allowed size.")}async function*i(F){if(F.body===null)return;let J=F.body.getReader(),Q=new TextDecoder,Z="",$=0,W=!1;try{while(!0){let{done:L,value:A}=await J.read();if(L){W=!0;break}$+=A.byteLength,a($),Z+=Q.decode(A,{stream:!0});let z=Z.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
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* @module @lostgradient/weft/storage
|
|
23
23
|
*/
|
|
24
24
|
import { storageDeleteRange } from './delete-range';
|
|
25
|
-
import { assertDurableStorageForRecovery, requireStorageCapability, storageConditionalBatch, storageValuesEqual } from './interface';
|
|
25
|
+
import { assertDurableStorageForRecovery, assertStorageBatchOperationCount, requireStorageCapability, storageBatch, StorageBatchOperationLimitExceededError, storageConditionalBatch, storageValuesEqual } from './interface';
|
|
26
26
|
import { MemoryStorage } from './memory';
|
|
27
27
|
import { resolveStorage } from './resolve';
|
|
28
28
|
import { ScopedStorage, scopedStorage } from './scoped-storage';
|
|
@@ -93,6 +93,8 @@ declare const exportedKeys: {
|
|
|
93
93
|
readonly operationInflight: (id: string) => string;
|
|
94
94
|
readonly operationQueued: (id: string) => string;
|
|
95
95
|
readonly operationResolved: (id: string) => string;
|
|
96
|
+
readonly operationDeadLetterPrefix: () => string;
|
|
97
|
+
readonly operationDeadLetter: (id: string) => string;
|
|
96
98
|
readonly bulkOperationAuditPrefix: () => string;
|
|
97
99
|
readonly bulkOperationAudit: (timestamp: number, requestId: string, confirmationToken: string) => string;
|
|
98
100
|
readonly operationResolvedByTimePrefix: () => string;
|
|
@@ -104,12 +106,19 @@ declare const exportedKeys: {
|
|
|
104
106
|
readonly event: (workflowId: string, sequence: number) => string;
|
|
105
107
|
readonly eventHead: (workflowId: string) => string;
|
|
106
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;
|
|
107
114
|
readonly signal: (workflowId: string, name: string, id: string) => string;
|
|
115
|
+
readonly startSignal: (workflowId: string, name: string, id: string) => string;
|
|
108
116
|
readonly signalSequence: (workflowId: string) => string;
|
|
109
117
|
readonly signalAcceptedResponsePrefix: (workflowId: string) => string;
|
|
110
118
|
readonly signalAcceptedResponse: (workflowId: string, name: string, signalId: string) => string;
|
|
111
119
|
readonly deadline: (deadline: number, workflowId: string) => string;
|
|
112
120
|
readonly terminalCleanup: (fireAt: number, timerId: string) => string;
|
|
121
|
+
readonly teardownTimer: (fireAt: number, timerId: string) => string;
|
|
113
122
|
readonly delayedStart: (startAt: number, workflowId: string) => string;
|
|
114
123
|
readonly terminalWorkflowPrefix: () => string;
|
|
115
124
|
readonly terminalWorkflow: (updatedAt: number, workflowId: string) => string;
|
|
@@ -124,17 +133,28 @@ declare const exportedKeys: {
|
|
|
124
133
|
readonly startIdempotencySignalId: (key: string) => string;
|
|
125
134
|
readonly livenessPrefix: () => string;
|
|
126
135
|
readonly liveness: (instanceId: string) => string;
|
|
136
|
+
readonly leasePrefix: () => string;
|
|
137
|
+
readonly leaseEpoch: () => string;
|
|
138
|
+
readonly leaseHolder: () => string;
|
|
127
139
|
readonly budget: (namespace: string, period: string, date: string) => string;
|
|
128
140
|
readonly review: (workflowId: string, reviewId: string) => string;
|
|
129
141
|
readonly workflowHeaders: (workflowId: string) => string;
|
|
142
|
+
readonly childCancellationPrefix: (workflowId: string) => string;
|
|
143
|
+
readonly childCancellation: (workflowId: string, childWorkflowId: string) => string;
|
|
130
144
|
readonly terminalCleanupNeeded: (workflowId: string) => string;
|
|
145
|
+
readonly workflowConcurrency: (workflowType: string, partitionKey: string) => string;
|
|
146
|
+
readonly workflowConcurrencyHolder: (workflowId: string) => string;
|
|
131
147
|
readonly workflowHasServices: (workflowId: string) => string;
|
|
148
|
+
readonly finalizerState: (workflowId: string) => string;
|
|
149
|
+
readonly teardownOwed: (workflowId: string) => string;
|
|
150
|
+
readonly teardownDeadLetter: (workflowId: string) => string;
|
|
132
151
|
readonly offload: (workflowId: string, key: string) => string;
|
|
133
152
|
readonly archive: (workflowId: string, key: string) => string;
|
|
134
153
|
readonly stateExecution: (ownerWorkflowId: string, key: string) => string;
|
|
135
154
|
readonly stateWorkflow: (workflowType: string, key: string) => string;
|
|
136
155
|
readonly streamChunkPrefix: (workflowId: string, key: string) => string;
|
|
137
156
|
readonly streamChunk: (workflowId: string, key: string, chunkIndex: number) => string;
|
|
157
|
+
readonly streamTail: (workflowId: string, key: string) => string;
|
|
138
158
|
readonly streamMetadata: (workflowId: string, key: string) => string;
|
|
139
159
|
readonly budgetCharged: (operationId: string) => string;
|
|
140
160
|
readonly toolEffect: (workflowId: string, agentId: string, semanticHash: string) => string;
|
|
@@ -148,6 +168,26 @@ declare const exportedKeys: {
|
|
|
148
168
|
readonly workflowVisibilityMetaBuiltAt: () => string;
|
|
149
169
|
readonly workflowVisibilityMetaCursor: () => string;
|
|
150
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;
|
|
151
191
|
/**
|
|
152
192
|
* Re-exported {@link MemoryStorage}. See the original declaration for full docs.
|
|
153
193
|
*
|
|
@@ -205,6 +245,27 @@ declare const exportedScopedStorage: typeof ScopedStorage;
|
|
|
205
245
|
* ```
|
|
206
246
|
*/
|
|
207
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;
|
|
208
269
|
/**
|
|
209
270
|
* Re-exported {@link storageConditionalBatch}. See the original declaration for full docs.
|
|
210
271
|
*
|
|
@@ -251,6 +312,17 @@ declare const exportedRequireStorageCapability: typeof requireStorageCapability;
|
|
|
251
312
|
* ```
|
|
252
313
|
*/
|
|
253
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;
|
|
254
326
|
/**
|
|
255
327
|
* Re-exported {@link textValueStore}. See the original declaration for full docs.
|
|
256
328
|
*
|
|
@@ -275,7 +347,7 @@ declare const exportedTextValueStore: typeof textValueStore;
|
|
|
275
347
|
* void isWeftKey;
|
|
276
348
|
* ```
|
|
277
349
|
*/
|
|
278
|
-
declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:", "async-act:", "attr:", "audit:bulk:", "blob:", "budget:", "budget-charged:", "ev:", "idx:", "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-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:"];
|
|
279
351
|
/**
|
|
280
352
|
* Re-exported {@link withCodec}. See the original declaration for full docs.
|
|
281
353
|
*
|
|
@@ -290,9 +362,9 @@ declare const exportedWeftReservedKeyPrefixes: readonly ["actrec:", "archive:",
|
|
|
290
362
|
declare const exportedWithCodec: typeof withCodec;
|
|
291
363
|
export type { JSONValue } from '../core/json.ts';
|
|
292
364
|
export type { DeleteRangeOptions } from './delete-range';
|
|
293
|
-
export type { BatchOperation, ConditionalBatchCondition, GatedStorageCapabilityKey, ScanOptions, Storage, StorageCapabilities, } from './interface';
|
|
365
|
+
export type { BatchOperation, ConditionalBatchCondition, GatedStorageCapabilityKey, ScanOptions, Storage, StorageBatchOperationLimitTarget, StorageCapabilities, } from './interface';
|
|
294
366
|
export type { StorageConfiguration } from './resolve';
|
|
295
367
|
export type { CopyTextKeyValueRowsToStorageOptions, CopyTextKeyValueRowsToStorageResult, TextKeyValueRow, } from './text-value-import';
|
|
296
368
|
export type { TextValueStore, TextValueStoreBatchOperation, TextValueStoreCondition, TextValueStoreOptions, } from './text-value-store';
|
|
297
369
|
export type { CodecStorageOptions, MessagePackValue, StorageCodec, StorageValueParser, TypedBatchOperation, TypedConditionalBatchCondition, TypedStorage, } from './typed-storage';
|
|
298
|
-
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=(F)=>F;function p(F,Y){this[F]=d.bind(null,Y)}var t=(F,Y)=>{for(var J in Y)l(F,J,{get:Y[J],enumerable:!0,configurable:!0,set:p.bind(Y,J)})};async function E(F,Y){return await F.get(Y)!==null}async function*T(F,Y,J){for await(let[U]of F.scan(Y,J))yield U}async function v(F,Y){let J=0;for await(let U of T(F,Y))J++;return J}async function K(F,Y){let J=[];for await(let U of T(F,Y))J.push({type:"delete",key:U});if(J.length===0)return 0;return await F.batch(J),J.length}async function b(F,Y,J){let U=[];for await(let X of T(F,Y,J))U.push({type:"delete",key:X});if(U.length===0)return 0;return await F.batch(U),U.length}function q(F,Y,J){if(!F.capabilities()[Y])throw Error(`Feature "${J}" requires storage capability "${Y}", but this storage backend does not provide it.`)}var C="default";function N(F){return F.length>0?F.slice(0,-1)+String.fromCharCode(F.charCodeAt(F.length-1)+1):"ÿ"}function O(F,Y={}){if(Y.gt!==void 0&&F<=Y.gt)return!1;if(Y.gte!==void 0&&F<Y.gte)return!1;if(Y.lt!==void 0&&F>=Y.lt)return!1;if(Y.lte!==void 0&&F>Y.lte)return!1;return!0}function I(F,Y){if(F===null||Y===null)return F===Y;if(F.byteLength!==Y.byteLength)return!1;for(let J=0;J<F.byteLength;J++)if(F[J]!==Y[J])return!1;return!0}async function S(F,Y){if(F.has)return F.has(Y);return E(F,Y)}function x(F,Y,J){if(F.keys)return F.keys(Y,J);return T(F,Y,J)}async function k(F,Y){if(F.count)return F.count(Y);return v(F,Y)}async function w(F,Y){if(F.deletePrefix)return F.deletePrefix(Y);return K(F,Y)}async function u(F,Y,J){if(q(F,"conditionalBatch","storageConditionalBatch"),!F.conditionalBatch)throw Error("This storage backend reports conditionalBatch capability but does not implement the conditionalBatch() method.");return F.conditionalBatch(Y,J)}function Q(F){return encodeURIComponent(F)}function ZF(F){try{return decodeURIComponent(F)}catch{return null}}var _=(F)=>String(F).padStart(16,"0"),$F={workflow:(F)=>`wf:${Q(F)}`,checkpoint:(F)=>`wf:${Q(F)}:ckpt`,checkpointHistory:(F,Y)=>`wf:${Q(F)}:ckpt:${String(Y).padStart(10,"0")}`,timelinePrefix:(F)=>`wf:${Q(F)}:timeline:`,timeline:(F,Y)=>`wf:${Q(F)}:timeline:${String(Y).padStart(10,"0")}`,schedule:(F)=>`schedule:${Q(F)}`,scheduleTick:(F,Y)=>`schedule-due:${String(F).padStart(16,"0")}:${Q(Y)}`,scheduleRun:(F)=>`schedule-run:${Q(F)}`,operation:(F,Y,J)=>`op:${F}:${_(Y)}:${J}`,operationInflight:(F)=>`op:inflight:${F}`,operationQueued:(F)=>`op:queued:${F}`,operationResolved:(F)=>`op:resolved:${F}`,bulkOperationAuditPrefix:()=>"audit:bulk:",bulkOperationAudit:(F,Y,J)=>`audit:bulk:${_(F)}:${Q(Y)}:${Q(J)}`,operationResolvedByTimePrefix:()=>"op:resolved-by-time:",operationResolvedByTime:(F,Y)=>`op:resolved-by-time:${_(F)}:${Q(Y)}`,asyncActivity:(F,Y)=>`async-act:v1:${Q(F)}:${Q(Y)}`,activityReconciliationPrefix:(F)=>`actrec:v1:${Q(F)}:`,activityReconciliation:(F,Y,J)=>`actrec:v1:${Q(F)}:${Q(Y)}:${J}`,eventPrefix:(F)=>`ev:${Q(F)}:`,event:(F,Y)=>`ev:${Q(F)}:${String(Y).padStart(10,"0")}`,eventHead:(F)=>`ev:${Q(F)}:head`,eventWatermark:(F)=>`ev:${Q(F)}:watermark`,signal:(F,Y,J)=>`sig:${Q(F)}:${Y}:${Q(J)}`,signalSequence:(F)=>`sigseq:v1:${Q(F)}`,signalAcceptedResponsePrefix:(F)=>`sigres:v1:${Q(F)}:`,signalAcceptedResponse:(F,Y,J)=>`sigres:v1:${Q(F)}:${Q(Y)}:${Q(J)}`,deadline:(F,Y)=>`wf-deadline:${_(F)}:${Q(Y)}`,terminalCleanup:(F,Y)=>`wf-cleanup:${_(F)}:${Q(Y)}`,delayedStart:(F,Y)=>`wf-delayed:${_(F)}:${Q(Y)}`,terminalWorkflowPrefix:()=>"wf-terminal:",terminalWorkflow:(F,Y)=>`wf-terminal:${_(F)}:${Q(Y)}`,attribute:(F)=>`attr:${Q(F)}`,attributeIndex:(F,Y,J)=>`idx:${F}:${Y}:${Q(J)}`,tagIndex:(F,Y)=>`tag:${Q(F)}:${Q(Y)}`,updatePrefix:(F)=>`upd:${Q(F)}:`,update:(F,Y)=>`upd:${Q(F)}:${Y}`,updateResponse:(F)=>`upr:${F}`,updateIdempotency:(F,Y)=>`upk:${Q(F)}:${Y}`,startIdempotency:(F)=>`start-idem:${Q(F)}`,startIdempotencySignalId:(F)=>`start-idem:${F}`,livenessPrefix:()=>"liveness:",liveness:(F)=>`liveness:${Q(F)}`,budget:(F,Y,J)=>`budget:${F}:${Y}:${J}`,review:(F,Y)=>`review:${Q(F)}:${Y}`,workflowHeaders:(F)=>`wf-headers:${Q(F)}`,terminalCleanupNeeded:(F)=>`wf-cleanup-needed:${Q(F)}`,workflowHasServices:(F)=>`wf-has-services:${Q(F)}`,offload:(F,Y)=>`offload:${Q(F)}:${Y}`,archive:(F,Y)=>`archive:${Q(F)}:${Y}`,stateExecution:(F,Y)=>`state:execution:${Q(F)}:${Q(Y)}`,stateWorkflow:(F,Y)=>`state:workflow-scope:${C}:${Q(F)}:${Q(Y)}`,streamChunkPrefix:(F,Y)=>`blob:${Q(F)}:${Y}:chunk:`,streamChunk:(F,Y,J)=>`blob:${Q(F)}:${Y}:chunk:${String(J).padStart(10,"0")}`,streamMetadata:(F,Y)=>`blob:${Q(F)}:${Y}:meta`,budgetCharged:(F)=>`budget-charged:${F}`,toolEffect:(F,Y,J)=>`tool-effect:${Q(F)}:${Y}:${J}`,workflowVisibilityStatus:(F,Y)=>`wf-idx-status:${Q(F)}:${Q(Y)}`,workflowVisibilityType:(F,Y)=>`wf-idx-type:${Q(F)}:${Q(Y)}`,workflowVisibilityCreated:(F,Y)=>`wf-idx-created:${_(F)}:${Q(Y)}`,workflowVisibilityUpdated:(F,Y)=>`wf-idx-updated:${_(F)}:${Q(Y)}`,workflowVisibilityDeadline:(F,Y)=>`wf-idx-deadline:${_(F)}:${Q(Y)}`,workflowVisibilityManifest:(F)=>`wf-idx-manifest:${Q(F)}`,workflowVisibilityMetaVersion:()=>"wf-idx-meta:version",workflowVisibilityMetaBuiltAt:()=>"wf-idx-meta:built-at",workflowVisibilityMetaCursor:()=>"wf-idx-meta:cursor"};function s(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 P(F){let Y={},J=!1;for(let X of["gt","gte","lt","lte"]){let $=F[X];if($===void 0)continue;if(typeof $!=="string")throw Error("deleteRange bounds must be strings");Y[X]=$,J=!0}if(!J)throw Error("deleteRange requires at least one of gt/gte/lt/lte; use deletePrefix to delete a whole prefix");let U=s(F.limit);if(U!==void 0)Y.limit=U;return Y}async function m(F,Y,J){let U=P(J);if(F.deleteRange)return F.deleteRange(Y,U);return b(F,Y,U)}function a(F,Y){let J={key:F,open:!1};if(Y.gte!==void 0&&Y.gte>J.key)J.key=Y.gte,J.open=!1;if(Y.gt!==void 0&&Y.gt>=J.key)J.key=Y.gt,J.open=!0;return J}function i(F,Y){let J={key:N(F),open:!0};if(Y.lt!==void 0&&Y.lt<=J.key)J.key=Y.lt,J.open=!0;if(Y.lte!==void 0&&Y.lte<J.key)J.key=Y.lte,J.open=!1;return J}function y(F,Y){let J=a(F,Y),U=i(F,Y);if(J.key>U.key||J.key===U.key&&(J.open||U.open))return null;return{lower:J,upper:U}}function h(F){return F.replaceAll(/:+$/g,"")}function n(F,Y){let J=h(F),U=h(Y);if(J.length===0)return U;if(U.length===0)return J;return`${J}:${U}`}class R{#Y;#J;constructor(F,Y){this.#Y=F,this.#J=h(Y)}#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)}#U(F={}){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.reverse!==void 0)Y.reverse=F.reverse;if(F.gt!==void 0)Y.gt=this.#F(F.gt);if(F.gte!==void 0)Y.gte=this.#F(F.gte);if(F.lt!==void 0)Y.lt=this.#F(F.lt);if(F.lte!==void 0)Y.lte=this.#F(F.lte);return Y}#X(F){let Y={};if(F.limit!==void 0)Y.limit=F.limit;if(F.gt!==void 0)Y.gt=this.#F(F.gt);if(F.gte!==void 0)Y.gte=this.#F(F.gte);if(F.lt!==void 0)Y.lt=this.#F(F.lt);if(F.lte!==void 0)Y.lte=this.#F(F.lte);return Y}capabilities(){return this.#Y.capabilities()}scoped(F){return new R(this.#Y,n(this.#J,F))}async get(F){return this.#Y.get(this.#F(F))}async put(F,Y){await this.#Y.put(this.#F(F),Y)}async delete(F){await this.#Y.delete(this.#F(F))}async*scan(F,Y){for await(let[J,U]of this.#Y.scan(this.#F(F),this.#U(Y)))yield[this.#Q(J),U]}async batch(F){await this.#Y.batch(F.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 conditionalBatch(F,Y){return u(this.#Y,F.map((J)=>({key:this.#F(J.key),expectedValue:J.expectedValue})),Y.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 S(this.#Y,this.#F(F))}async deletePrefix(F){return w(this.#Y,this.#F(F))}async deleteRange(F,Y){let J=this.#X(P(Y));return m(this.#Y,this.#F(F),J)}async*keys(F,Y){for await(let J of x(this.#Y,this.#F(F),this.#U(Y)))yield this.#Q(J)}async count(F){return k(this.#Y,this.#F(F))}[Symbol.dispose](){this.#Y[Symbol.dispose]()}}function f(F,Y){return new R(F,Y)}var G="kv";function A(F){return new Promise((Y,J)=>{F.onsuccess=()=>Y(F.result),F.onerror=()=>J(F.error)})}function g(F,Y){let J=null,U=null,X=null,$=(Z,L)=>{let W=Z??Error(L);if(U){let B=U;J=null,U=null,B(W);return}X=W};return F.onsuccess=()=>{if(!J)return;let Z=J;J=null,U=null,Z(F.result)},F.onerror=()=>{$(F.error,"IndexedDB cursor request failed.")},Y.onerror=()=>{$(Y.error,"IndexedDB transaction failed.")},Y.onabort=()=>{$(Y.error,"IndexedDB transaction aborted.")},()=>{return new Promise((Z,L)=>{if(X){let W=X;X=null,L(W);return}if(J=Z,U=L,F.readyState==="done"){let W=J;J=null,U=null,W?.(F.result)}})}}class r{#Y;#J=null;#F;constructor(F="weft"){this.#Y=F,this.#F=this.#Q()}capabilities(){return{persistence:"local",readAfterWrite:"linearizable",scanConsistency:"best-effort",atomicBatch:!0,conditionalBatch:!0,boundedRangeDelete:!0}}#Q(){let F=indexedDB.open(this.#Y,1);return F.onupgradeneeded=()=>{let Y=F.result;if(!Y.objectStoreNames.contains(G))Y.createObjectStore(G)},A(F).then((Y)=>{return this.#J=Y,Y})}async get(F){let U=(await this.#F).transaction(G,"readonly").objectStore(G),X=await A(U.get(F));return X===void 0?null:new Uint8Array(X)}async put(F,Y){let X=(await this.#F).transaction(G,"readwrite").objectStore(G);await A(X.put(Y,F))}async delete(F){let U=(await this.#F).transaction(G,"readwrite").objectStore(G);await A(U.delete(F))}async has(F){let U=(await this.#F).transaction(G,"readonly").objectStore(G);return await A(U.count(F))>0}async deletePrefix(F){let Y=await this.#F,J=N(F),U=IDBKeyRange.bound(F,J,!1,!0);return new Promise((X,$)=>{let Z=Y.transaction(G,"readwrite"),L=Z.objectStore(G),W=0,B=L.count(U);B.onsuccess=()=>{W=B.result,L.delete(U)},Z.oncomplete=()=>X(W),Z.onerror=()=>$(Z.error)})}async deleteRange(F,Y){let J=P(Y),U=y(F,J);if(U===null)return 0;let X=IDBKeyRange.bound(U.lower.key,U.upper.key,U.lower.open,U.upper.open),$=await this.#F,{limit:Z}=J;return new Promise((L,W)=>{let B=$.transaction(G,"readwrite"),M=B.objectStore(G),D=0;if(Z===void 0){let H=M.count(X);H.onsuccess=()=>{D=H.result,M.delete(X)}}else{let H=M.openCursor(X,"next");H.onsuccess=()=>{let z=H.result;if(z===null||D>=Z)return;if(z.delete(),D++,D<Z)z.continue()}}B.oncomplete=()=>L(D),B.onerror=()=>W(B.error)})}async*scan(F,Y={}){let{limit:J,reverse:U}=Y,X=await this.#F,$=N(F),Z=IDBKeyRange.bound(F,$,!1,!0),L=U?"prev":"next",W=X.transaction(G,"readonly"),M=W.objectStore(G).openCursor(Z,L),D=0,H=g(M,W),z=!1;try{let V=await H();while(V){if(J!==void 0&&D>=J)break;let j=V.key;if(O(j,Y))yield[j,new Uint8Array(V.value)],D++;V.continue(),V=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async batch(F){if(F.length===0)return;let Y=await this.#F;return new Promise((J,U)=>{let X=Y.transaction(G,"readwrite"),$=X.objectStore(G);for(let Z of F)if(Z.type==="put")$.put(Z.value,Z.key);else $.delete(Z.key);X.oncomplete=()=>J(),X.onerror=()=>U(X.error)})}async conditionalBatch(F,Y){let J=await this.#F;return new Promise((U,X)=>{let $=J.transaction(G,"readwrite"),Z=$.objectStore(G),L=!1,W=!1,B=(H,z)=>{if(L)return;L=!0,X(H??Error(z))};$.oncomplete=()=>{if(L)return;L=!0,U(!0)},$.onerror=()=>{B($.error,"IndexedDB conditionalBatch transaction failed.")},$.onabort=()=>{if(L)return;if(L=!0,W){U(!1);return}X($.error??Error("IndexedDB conditionalBatch transaction aborted."))};let M=()=>{for(let H of Y)if(H.type==="put")Z.put(H.value,H.key);else Z.delete(H.key)},D=(H)=>{if(H>=F.length){M();return}let z=F[H],V=Z.get(z.key);V.onsuccess=()=>{let j=V.result,c=j===void 0?null:new Uint8Array(j);if(!I(c,z.expectedValue)){W=!0,$.abort();return}D(H+1)},V.onerror=()=>{B(V.error,"IndexedDB conditionalBatch condition check failed.")}};D(0)})}async*keys(F,Y={}){let{limit:J,reverse:U}=Y,X=await this.#F,$=N(F),Z=IDBKeyRange.bound(F,$,!1,!0),L=U?"prev":"next",W=X.transaction(G,"readonly"),M=W.objectStore(G).openKeyCursor(Z,L),D=0,H=g(M,W),z=!1;try{let V=await H();while(V){if(J!==void 0&&D>=J)break;let j=V.key;if(O(j,Y))yield j,D++;V.continue(),V=await H()}z=!0}finally{if(!z)try{W.abort()}catch{}}}async count(F){let Y=await this.#F,J=N(F),X=Y.transaction(G,"readonly").objectStore(G);return A(X.count(IDBKeyRange.bound(F,J,!1,!0)))}scoped(F){return f(this,F)}[Symbol.dispose](){if(this.#J)this.#J.close(),this.#J=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};
|