@lostgradient/weft 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +46 -5
- package/dist/client/local.d.ts +4 -1
- package/dist/client/local.js +12 -4
- 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 +41 -0
- package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
- package/dist/core/engine/activity-reconciliation.d.ts +1 -0
- package/dist/core/engine/activity-reconciliation.js +12 -1
- package/dist/core/engine/activity-resolution.d.ts +23 -0
- package/dist/core/engine/activity-resolution.js +37 -0
- package/dist/core/engine/aggregate.js +66 -30
- package/dist/core/engine/async-activity-completion.d.ts +23 -6
- package/dist/core/engine/async-activity-completion.js +53 -12
- package/dist/core/engine/attributes-tags.js +9 -4
- package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
- package/dist/core/engine/bulk-operations-purge.js +38 -3
- package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
- package/dist/core/engine/bulk-operations-shared.js +8 -2
- package/dist/core/engine/bulk-operations.d.ts +4 -1
- package/dist/core/engine/bulk-operations.js +235 -24
- package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
- package/dist/core/engine/callback-creators-bundles.js +30 -2
- package/dist/core/engine/callback-creators-core.js +6 -4
- package/dist/core/engine/callback-creators-router.js +10 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
- package/dist/core/engine/callback-creators-schedule.js +12 -8
- package/dist/core/engine/candidate-read-batching.d.ts +6 -0
- package/dist/core/engine/candidate-read-batching.js +1 -0
- package/dist/core/engine/checkpoint-io.js +61 -25
- package/dist/core/engine/checkpoint-reads.js +3 -2
- package/dist/core/engine/checkpoint-replay.d.ts +20 -0
- package/dist/core/engine/checkpoint-replay.js +242 -0
- package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
- package/dist/core/engine/checkpoint-side-effects.js +35 -0
- package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
- package/dist/core/engine/child-workflow-cancellation.js +40 -0
- package/dist/core/engine/child-workflow.js +27 -4
- package/dist/core/engine/condition-waiters.d.ts +14 -0
- package/dist/core/engine/condition-waiters.js +5 -0
- package/dist/core/engine/construction.d.ts +3 -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 +133 -8
- 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 +4 -11
- package/dist/core/engine/operations-activity.js +22 -49
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +43 -8
- package/dist/core/engine/operations-router.d.ts +6 -0
- package/dist/core/engine/operations-router.js +2 -0
- package/dist/core/engine/operations-speculate.js +6 -2
- package/dist/core/engine/operations-stream.js +12 -2
- package/dist/core/engine/operations-time.d.ts +4 -2
- package/dist/core/engine/operations-time.js +14 -2
- package/dist/core/engine/operations-wait-condition.d.ts +23 -0
- package/dist/core/engine/operations-wait-condition.js +62 -0
- package/dist/core/engine/ownership-options.d.ts +23 -0
- package/dist/core/engine/ownership-options.js +26 -0
- package/dist/core/engine/payload-size-policy.d.ts +3 -0
- package/dist/core/engine/payload-size-policy.js +4 -0
- package/dist/core/engine/pending-updates.d.ts +17 -0
- package/dist/core/engine/pending-updates.js +33 -11
- package/dist/core/engine/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 +22 -3
- 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 +27 -27
- 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 +26 -26
- 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 +28 -28
- 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
|
@@ -6,19 +6,20 @@ import {
|
|
|
6
6
|
MAX_BULK_CONFIRMATION_TOKEN_LENGTH,
|
|
7
7
|
MAX_BULK_OPERATION_REQUEST_ID_LENGTH
|
|
8
8
|
} from "../../core/types/bulk.js";
|
|
9
|
+
import { readRestTextBody } from "../rest-body.js";
|
|
9
10
|
import { parseOptionalFailureCategoryFilter } from "./failure-category-filter.js";
|
|
10
|
-
import { invalidParamsFault } from "./operation-helpers.js";
|
|
11
|
+
import { invalidParamsFault, isOperationFault } from "./operation-helpers.js";
|
|
11
12
|
const workflowStatusSchema = z.custom((value) => typeof value === "string"), searchAttributeValueSchema = z.custom((value) => {
|
|
12
13
|
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
|
|
13
14
|
return !0;
|
|
14
|
-
return Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
15
|
-
}), attributeFilterSchema = z.object({
|
|
15
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === "string" || typeof entry === "number" || typeof entry === "boolean");
|
|
16
|
+
}), attributeFilterScalarValueSchema = z.custom((value) => typeof value === "string" || typeof value === "number" || typeof value === "boolean"), attributeFilterSchema = z.object({
|
|
16
17
|
key: z.string().min(1),
|
|
17
18
|
value: searchAttributeValueSchema.optional(),
|
|
18
|
-
gt:
|
|
19
|
-
lt:
|
|
20
|
-
gte:
|
|
21
|
-
lte:
|
|
19
|
+
gt: attributeFilterScalarValueSchema.optional(),
|
|
20
|
+
lt: attributeFilterScalarValueSchema.optional(),
|
|
21
|
+
gte: attributeFilterScalarValueSchema.optional(),
|
|
22
|
+
lte: attributeFilterScalarValueSchema.optional()
|
|
22
23
|
}), failureCategorySchema = z.custom(isFailureCategory), timeRangeSchema = z.object({
|
|
23
24
|
gte: z.number().optional(),
|
|
24
25
|
gt: z.number().optional(),
|
|
@@ -40,7 +41,8 @@ export const bulkListFilterInputSchema = z.object({
|
|
|
40
41
|
}), bulkOperationControlInputSchema = z.object({
|
|
41
42
|
dryRun: z.boolean().optional(),
|
|
42
43
|
confirmationToken: z.string().min(1).max(MAX_BULK_CONFIRMATION_TOKEN_LENGTH).optional(),
|
|
43
|
-
requestId: z.string().min(1).max(MAX_BULK_OPERATION_REQUEST_ID_LENGTH).optional()
|
|
44
|
+
requestId: z.string().min(1).max(MAX_BULK_OPERATION_REQUEST_ID_LENGTH).optional(),
|
|
45
|
+
bulkConcurrency: z.number().int().min(1).optional()
|
|
44
46
|
}), bulkOperatorAccessPolicy = {
|
|
45
47
|
kind: "scoped",
|
|
46
48
|
scopes: { kind: "anyOf", scopes: ["workflows:admin"] }
|
|
@@ -62,11 +64,13 @@ export function engineFailureFault(message) {
|
|
|
62
64
|
data: {}
|
|
63
65
|
};
|
|
64
66
|
}
|
|
65
|
-
export async function readOptionalJsonBody(request) {
|
|
67
|
+
export async function readOptionalJsonBody(request, context) {
|
|
66
68
|
try {
|
|
67
|
-
const text = await request
|
|
69
|
+
const text = await readRestTextBody(request, context);
|
|
68
70
|
return text.trim() === "" ? void 0 : JSON.parse(text);
|
|
69
|
-
} catch {
|
|
71
|
+
} catch (error) {
|
|
72
|
+
if (isOperationFault(error))
|
|
73
|
+
throw error;
|
|
70
74
|
throw invalidParamsFault("Invalid JSON body");
|
|
71
75
|
}
|
|
72
76
|
}
|
|
@@ -92,7 +96,13 @@ function parseAttributeFiltersFromBody(value) {
|
|
|
92
96
|
if (attributeValue === void 0)
|
|
93
97
|
continue;
|
|
94
98
|
if (!isJsonSearchAttributeValue(attributeValue))
|
|
95
|
-
throw Error(`Field "filter.attributes[${index}].${property}" must be a string, number, boolean, or
|
|
99
|
+
throw Error(`Field "filter.attributes[${index}].${property}" must be a string, number, boolean, or scalar array`);
|
|
100
|
+
if (property === "value") {
|
|
101
|
+
filter.value = attributeValue;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (Array.isArray(attributeValue))
|
|
105
|
+
throw Error(`Field "filter.attributes[${index}].${property}" must be a string, number, or boolean`);
|
|
96
106
|
filter[property] = attributeValue;
|
|
97
107
|
}
|
|
98
108
|
return filter;
|
|
@@ -243,14 +253,23 @@ function applyBasicBulkFilterFields(filter, input) {
|
|
|
243
253
|
filter.offset = input.offset;
|
|
244
254
|
}
|
|
245
255
|
function copyAttributeFilter(attribute) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
256
|
+
const filter = { key: attribute.key };
|
|
257
|
+
if (attribute.value !== void 0)
|
|
258
|
+
filter.value = attribute.value;
|
|
259
|
+
if (attribute.gt !== void 0)
|
|
260
|
+
filter.gt = copyAttributeRangeBound(attribute.gt, "gt");
|
|
261
|
+
if (attribute.lt !== void 0)
|
|
262
|
+
filter.lt = copyAttributeRangeBound(attribute.lt, "lt");
|
|
263
|
+
if (attribute.gte !== void 0)
|
|
264
|
+
filter.gte = copyAttributeRangeBound(attribute.gte, "gte");
|
|
265
|
+
if (attribute.lte !== void 0)
|
|
266
|
+
filter.lte = copyAttributeRangeBound(attribute.lte, "lte");
|
|
267
|
+
return filter;
|
|
268
|
+
}
|
|
269
|
+
function copyAttributeRangeBound(value, property) {
|
|
270
|
+
if (Array.isArray(value))
|
|
271
|
+
throw Error(`Field "filter.attributes[].${property}" must be a string, number, or boolean`);
|
|
272
|
+
return value;
|
|
254
273
|
}
|
|
255
274
|
function applyExtendedBulkFilterFields(filter, input) {
|
|
256
275
|
if (input.idPrefix !== void 0)
|
|
@@ -272,11 +291,12 @@ function applyBulkTimeRangeFields(filter, input) {
|
|
|
272
291
|
export function parseBulkOperationControlFromBody(body) {
|
|
273
292
|
if (body === void 0)
|
|
274
293
|
return {};
|
|
275
|
-
const record = parseJsonObjectBody(body), dryRun = parseOptionalBooleanControl(record, "dryRun"), confirmationToken = parseOptionalNonEmptyStringControl(record, "confirmationToken"), requestId = parseOptionalBulkRequestId(record);
|
|
294
|
+
const record = parseJsonObjectBody(body), dryRun = parseOptionalBooleanControl(record, "dryRun"), confirmationToken = parseOptionalNonEmptyStringControl(record, "confirmationToken"), requestId = parseOptionalBulkRequestId(record), bulkConcurrency = parseOptionalPositiveIntegerControl(record, "bulkConcurrency");
|
|
276
295
|
return {
|
|
277
296
|
...dryRun === void 0 ? {} : { dryRun },
|
|
278
297
|
...confirmationToken === void 0 ? {} : { confirmationToken },
|
|
279
|
-
...requestId === void 0 ? {} : { requestId }
|
|
298
|
+
...requestId === void 0 ? {} : { requestId },
|
|
299
|
+
...bulkConcurrency === void 0 ? {} : { bulkConcurrency }
|
|
280
300
|
};
|
|
281
301
|
}
|
|
282
302
|
export function bulkOperationOptionsFromInput(input, principal) {
|
|
@@ -285,14 +305,16 @@ export function bulkOperationOptionsFromInput(input, principal) {
|
|
|
285
305
|
return {
|
|
286
306
|
dryRun: !0,
|
|
287
307
|
principal: auditPrincipal,
|
|
288
|
-
...input.requestId === void 0 ? {} : { requestId: input.requestId }
|
|
308
|
+
...input.requestId === void 0 ? {} : { requestId: input.requestId },
|
|
309
|
+
...input.bulkConcurrency === void 0 ? {} : { bulkConcurrency: input.bulkConcurrency }
|
|
289
310
|
};
|
|
290
311
|
if (input.confirmationToken === void 0)
|
|
291
312
|
throw invalidParamsFault('Field "confirmationToken" is required after a dry run');
|
|
292
313
|
return {
|
|
293
314
|
confirmationToken: input.confirmationToken,
|
|
294
315
|
principal: auditPrincipal,
|
|
295
|
-
...input.requestId === void 0 ? {} : { requestId: input.requestId }
|
|
316
|
+
...input.requestId === void 0 ? {} : { requestId: input.requestId },
|
|
317
|
+
...input.bulkConcurrency === void 0 ? {} : { bulkConcurrency: input.bulkConcurrency }
|
|
296
318
|
};
|
|
297
319
|
}
|
|
298
320
|
function principalToBulkOperationPrincipal(principal) {
|
|
@@ -316,6 +338,14 @@ function parseOptionalBooleanControl(record, fieldName) {
|
|
|
316
338
|
return value;
|
|
317
339
|
throw Error(`Field "${fieldName}" must be a boolean`);
|
|
318
340
|
}
|
|
341
|
+
function parseOptionalPositiveIntegerControl(record, fieldName) {
|
|
342
|
+
const value = record[fieldName];
|
|
343
|
+
if (value === void 0)
|
|
344
|
+
return;
|
|
345
|
+
if (typeof value === "number" && Number.isSafeInteger(value) && value >= 1)
|
|
346
|
+
return value;
|
|
347
|
+
throw Error(`Field "${fieldName}" must be a positive integer`);
|
|
348
|
+
}
|
|
319
349
|
function parseOptionalNonEmptyStringControl(record, fieldName) {
|
|
320
350
|
const value = record[fieldName];
|
|
321
351
|
if (value === void 0)
|
|
@@ -9,10 +9,10 @@ declare const bulkMutateWorkflowTagsInput: z.ZodObject<{
|
|
|
9
9
|
attributes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
10
10
|
key: z.ZodString;
|
|
11
11
|
value: z.ZodOptional<z.ZodCustom<import("../../index.ts").SearchAttributeValue, import("../../index.ts").SearchAttributeValue>>;
|
|
12
|
-
gt: z.ZodOptional<z.ZodCustom<import("../../
|
|
13
|
-
lt: z.ZodOptional<z.ZodCustom<import("../../
|
|
14
|
-
gte: z.ZodOptional<z.ZodCustom<import("../../
|
|
15
|
-
lte: z.ZodOptional<z.ZodCustom<import("../../
|
|
12
|
+
gt: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
13
|
+
lt: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
14
|
+
gte: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
15
|
+
lte: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
16
16
|
}, z.core.$strip>>>;
|
|
17
17
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
18
18
|
offset: z.ZodOptional<z.ZodNumber>;
|
|
@@ -45,6 +45,7 @@ declare const bulkMutateWorkflowTagsInput: z.ZodObject<{
|
|
|
45
45
|
dryRun: z.ZodOptional<z.ZodBoolean>;
|
|
46
46
|
confirmationToken: z.ZodOptional<z.ZodString>;
|
|
47
47
|
requestId: z.ZodOptional<z.ZodString>;
|
|
48
|
+
bulkConcurrency: z.ZodOptional<z.ZodNumber>;
|
|
48
49
|
}, z.core.$strip>;
|
|
49
50
|
export type BulkMutateWorkflowTagsInput = z.infer<typeof bulkMutateWorkflowTagsInput>;
|
|
50
51
|
export type BulkMutateWorkflowTagsOutput = BulkTagResult | BulkOperationDryRunResult;
|
|
@@ -58,10 +59,10 @@ export declare const bulkMutateWorkflowTagsOperation: import("../operation-catal
|
|
|
58
59
|
attributes?: {
|
|
59
60
|
key: string;
|
|
60
61
|
value?: import("../../index.ts").SearchAttributeValue | undefined;
|
|
61
|
-
gt?: import("../../
|
|
62
|
-
lt?: import("../../
|
|
63
|
-
gte?: import("../../
|
|
64
|
-
lte?: import("../../
|
|
62
|
+
gt?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
63
|
+
lt?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
64
|
+
gte?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
65
|
+
lte?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
65
66
|
}[] | undefined;
|
|
66
67
|
limit?: number | undefined;
|
|
67
68
|
offset?: number | undefined;
|
|
@@ -89,6 +90,7 @@ export declare const bulkMutateWorkflowTagsOperation: import("../operation-catal
|
|
|
89
90
|
dryRun?: boolean | undefined;
|
|
90
91
|
confirmationToken?: string | undefined;
|
|
91
92
|
requestId?: string | undefined;
|
|
92
|
-
|
|
93
|
+
bulkConcurrency?: number | undefined;
|
|
94
|
+
}, BulkMutateWorkflowTagsOutput, unknown>;
|
|
93
95
|
export declare const bulkMutateWorkflowTagsRestBinding: UnknownRestBinding;
|
|
94
96
|
export {};
|
|
@@ -67,8 +67,8 @@ export const bulkMutateWorkflowTagsRestBinding = {
|
|
|
67
67
|
tags: { kind: "body-field", bodyField: "tags" },
|
|
68
68
|
operation: { kind: "body-field", bodyField: "operation" }
|
|
69
69
|
},
|
|
70
|
-
extractInput: async (request) => {
|
|
71
|
-
const raw = await readOptionalJsonBody(request);
|
|
70
|
+
extractInput: async (request, _pathParams, context) => {
|
|
71
|
+
const raw = await readOptionalJsonBody(request, context);
|
|
72
72
|
if (raw === void 0 || typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
73
73
|
throw invalidParamsFault("Request body must be a JSON object");
|
|
74
74
|
const body = raw;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BulkCancelResult, BulkDeleteResult, BulkOperationDryRunResult, BulkSignalResult, BulkTagResult, ListFilter, PurgeResult } from '../../core/types.ts';
|
|
1
|
+
import type { BulkCancelResult, BulkDeleteResult, BulkOperationDryRunResult, BulkRetryFailedResult, BulkSignalResult, BulkTagResult, ListFilter, PurgeResult } from '../../core/types.ts';
|
|
2
2
|
import { type BulkListFilterInput } from './bulk-filter-helpers.ts';
|
|
3
3
|
/**
|
|
4
4
|
* Coerces filter tags (label `Field "filter.tags"`), builds a `ListFilter`
|
|
@@ -17,7 +17,7 @@ import { type BulkListFilterInput } from './bulk-filter-helpers.ts';
|
|
|
17
17
|
* raw engine messages through unmasked.
|
|
18
18
|
*/
|
|
19
19
|
export declare function validatedListFilterFromBulkInput(input: BulkListFilterInput): ListFilter;
|
|
20
|
-
export type BulkOperationSuccessResult = BulkCancelResult | BulkDeleteResult | BulkSignalResult | BulkTagResult | BulkOperationDryRunResult | PurgeResult;
|
|
20
|
+
export type BulkOperationSuccessResult = BulkCancelResult | BulkDeleteResult | BulkRetryFailedResult | BulkSignalResult | BulkTagResult | BulkOperationDryRunResult | PurgeResult;
|
|
21
21
|
/**
|
|
22
22
|
* Standard JSON 200 response shape for bulk-workflow operations. Used by
|
|
23
23
|
* every bulk operation's REST `shapeSuccess`; the result types are unioned
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BulkOperationDryRunResult, BulkRetryFailedResult } from '../../core/types.ts';
|
|
2
|
+
import type { UnknownRestBinding } from '../rest-bindings.ts';
|
|
3
|
+
import { type BulkListFilterInput, type BulkOperationControlInput } from './bulk-filter-helpers.ts';
|
|
4
|
+
export type BulkRetryFailedWorkflowsInput = BulkListFilterInput & BulkOperationControlInput;
|
|
5
|
+
export type BulkRetryFailedWorkflowsOutput = BulkRetryFailedResult | BulkOperationDryRunResult;
|
|
6
|
+
export declare const bulkRetryFailedWorkflowsOperation: import("../operation-catalog.ts").OperationDefinition<BulkRetryFailedWorkflowsInput, BulkRetryFailedWorkflowsOutput, unknown>;
|
|
7
|
+
export declare const bulkRetryFailedWorkflowsRestBinding: UnknownRestBinding;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { BulkOperationConfirmationError } from "../../core/engine.js";
|
|
3
|
+
import { defineOperation } from "../operation-registry.js";
|
|
4
|
+
import {
|
|
5
|
+
bulkListFilterInputSchema,
|
|
6
|
+
bulkOperationControlInputSchema,
|
|
7
|
+
bulkOperationOptionsFromInput,
|
|
8
|
+
bulkOperatorAccessPolicy,
|
|
9
|
+
engineFailureFault,
|
|
10
|
+
faultMessage,
|
|
11
|
+
parseBulkListFilterFromBody,
|
|
12
|
+
parseBulkOperationControlFromBody,
|
|
13
|
+
readOptionalJsonBody
|
|
14
|
+
} from "./bulk-filter-helpers.js";
|
|
15
|
+
import {
|
|
16
|
+
shapeBulkJsonSuccess,
|
|
17
|
+
validatedListFilterFromBulkInput
|
|
18
|
+
} from "./bulk-operation-helpers.js";
|
|
19
|
+
import { invalidParamsFault, shapeRestFault } from "./operation-helpers.js";
|
|
20
|
+
const bulkRetryFailedWorkflowsInput = bulkListFilterInputSchema.merge(bulkOperationControlInputSchema), bulkRetryFailedWorkflowsOutput = z.unknown();
|
|
21
|
+
export const bulkRetryFailedWorkflowsOperation = defineOperation({
|
|
22
|
+
name: "weft.workflows.bulk.retryfailed",
|
|
23
|
+
mcpExposable: !1,
|
|
24
|
+
summary: "Retry failed workflows in bulk",
|
|
25
|
+
destructive: !0,
|
|
26
|
+
tags: ["Workflows"],
|
|
27
|
+
inputSchema: bulkRetryFailedWorkflowsInput,
|
|
28
|
+
outputSchema: bulkRetryFailedWorkflowsOutput,
|
|
29
|
+
access: bulkOperatorAccessPolicy,
|
|
30
|
+
transports: { http: !0, jsonRpcHttp: !0, jsonRpcWebSocket: !0, jsonRpcStdio: !0 },
|
|
31
|
+
unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
|
|
32
|
+
invoke: async ({ input, engine, principal }) => {
|
|
33
|
+
const e = engine, filter = validatedListFilterFromBulkInput(input), operationOptions = bulkOperationOptionsFromInput(input, principal);
|
|
34
|
+
try {
|
|
35
|
+
if (operationOptions.dryRun === !0)
|
|
36
|
+
return await e.retryFailedAll(filter, operationOptions);
|
|
37
|
+
return await e.retryFailedAll(filter, operationOptions);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
if (error instanceof BulkOperationConfirmationError)
|
|
40
|
+
throw invalidParamsFault(error.message);
|
|
41
|
+
throw engineFailureFault(faultMessage(error));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}), bulkRetryFailedWorkflowsRestBinding = {
|
|
45
|
+
method: "POST",
|
|
46
|
+
path: "/v1/workflows/bulk/retry-failed",
|
|
47
|
+
pathParamNames: [],
|
|
48
|
+
operationName: "weft.workflows.bulk.retryfailed",
|
|
49
|
+
inputSources: {},
|
|
50
|
+
extractInput: async (request, _pathParams, context) => {
|
|
51
|
+
const raw = await readOptionalJsonBody(request, context);
|
|
52
|
+
try {
|
|
53
|
+
return {
|
|
54
|
+
...parseBulkListFilterFromBody(raw),
|
|
55
|
+
...parseBulkOperationControlFromBody(raw)
|
|
56
|
+
};
|
|
57
|
+
} catch (error) {
|
|
58
|
+
throw invalidParamsFault(faultMessage(error));
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
success: { kind: "json", status: 200 },
|
|
62
|
+
shapeSuccess: (output) => shapeBulkJsonSuccess(output),
|
|
63
|
+
shapeFault: shapeRestFault
|
|
64
|
+
};
|
|
@@ -8,10 +8,10 @@ declare const bulkSignalWorkflowsInput: z.ZodObject<{
|
|
|
8
8
|
attributes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
9
9
|
key: z.ZodString;
|
|
10
10
|
value: z.ZodOptional<z.ZodCustom<import("../../index.ts").SearchAttributeValue, import("../../index.ts").SearchAttributeValue>>;
|
|
11
|
-
gt: z.ZodOptional<z.ZodCustom<import("../../
|
|
12
|
-
lt: z.ZodOptional<z.ZodCustom<import("../../
|
|
13
|
-
gte: z.ZodOptional<z.ZodCustom<import("../../
|
|
14
|
-
lte: z.ZodOptional<z.ZodCustom<import("../../
|
|
11
|
+
gt: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
12
|
+
lt: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
13
|
+
gte: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
14
|
+
lte: z.ZodOptional<z.ZodCustom<import("../../core/types.ts").AttributeFilterScalarValue, import("../../core/types.ts").AttributeFilterScalarValue>>;
|
|
15
15
|
}, z.core.$strip>>>;
|
|
16
16
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
17
17
|
offset: z.ZodOptional<z.ZodNumber>;
|
|
@@ -40,6 +40,7 @@ declare const bulkSignalWorkflowsInput: z.ZodObject<{
|
|
|
40
40
|
dryRun: z.ZodOptional<z.ZodBoolean>;
|
|
41
41
|
confirmationToken: z.ZodOptional<z.ZodString>;
|
|
42
42
|
requestId: z.ZodOptional<z.ZodString>;
|
|
43
|
+
bulkConcurrency: z.ZodOptional<z.ZodNumber>;
|
|
43
44
|
}, z.core.$strip>;
|
|
44
45
|
export type BulkSignalWorkflowsInput = z.infer<typeof bulkSignalWorkflowsInput>;
|
|
45
46
|
export type BulkSignalWorkflowsOutput = BulkSignalResult | BulkOperationDryRunResult;
|
|
@@ -51,10 +52,10 @@ export declare const bulkSignalWorkflowsOperation: import("../operation-catalog.
|
|
|
51
52
|
attributes?: {
|
|
52
53
|
key: string;
|
|
53
54
|
value?: import("../../index.ts").SearchAttributeValue | undefined;
|
|
54
|
-
gt?: import("../../
|
|
55
|
-
lt?: import("../../
|
|
56
|
-
gte?: import("../../
|
|
57
|
-
lte?: import("../../
|
|
55
|
+
gt?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
56
|
+
lt?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
57
|
+
gte?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
58
|
+
lte?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
|
|
58
59
|
}[] | undefined;
|
|
59
60
|
limit?: number | undefined;
|
|
60
61
|
offset?: number | undefined;
|
|
@@ -82,6 +83,7 @@ export declare const bulkSignalWorkflowsOperation: import("../operation-catalog.
|
|
|
82
83
|
dryRun?: boolean | undefined;
|
|
83
84
|
confirmationToken?: string | undefined;
|
|
84
85
|
requestId?: string | undefined;
|
|
85
|
-
|
|
86
|
+
bulkConcurrency?: number | undefined;
|
|
87
|
+
}, BulkSignalWorkflowsOutput, unknown>;
|
|
86
88
|
export declare const bulkSignalWorkflowsRestBinding: UnknownRestBinding;
|
|
87
89
|
export {};
|
|
@@ -53,8 +53,8 @@ export const bulkSignalWorkflowsOperation = defineOperation({
|
|
|
53
53
|
name: { kind: "body-field", bodyField: "name" },
|
|
54
54
|
payload: { kind: "body-field", bodyField: "payload" }
|
|
55
55
|
},
|
|
56
|
-
extractInput: async (request) => {
|
|
57
|
-
const raw = await readOptionalJsonBody(request);
|
|
56
|
+
extractInput: async (request, _pathParams, context) => {
|
|
57
|
+
const raw = await readOptionalJsonBody(request, context);
|
|
58
58
|
if (raw === void 0 || typeof raw !== "object" || raw === null || Array.isArray(raw))
|
|
59
59
|
throw invalidParamsFault("Request body must be a JSON object");
|
|
60
60
|
const body = raw;
|
|
@@ -8,6 +8,6 @@ export type CancelScheduleInput = z.infer<typeof cancelScheduleInput>;
|
|
|
8
8
|
export type CancelScheduleOutput = z.infer<typeof cancelScheduleOutput>;
|
|
9
9
|
export declare const cancelScheduleOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
10
10
|
scheduleId: string;
|
|
11
|
-
}, undefined>;
|
|
11
|
+
}, undefined, unknown>;
|
|
12
12
|
export declare const cancelScheduleRestBinding: UnknownRestBinding;
|
|
13
13
|
export {};
|
|
@@ -8,6 +8,7 @@ declare const createScheduleInput: z.ZodObject<{
|
|
|
8
8
|
id: z.ZodOptional<z.ZodUnknown>;
|
|
9
9
|
overlap: z.ZodOptional<z.ZodUnknown>;
|
|
10
10
|
backfill: z.ZodOptional<z.ZodUnknown>;
|
|
11
|
+
jitter: z.ZodOptional<z.ZodUnknown>;
|
|
11
12
|
}, z.core.$strip>;
|
|
12
13
|
declare const createScheduleOutput: z.ZodObject<{
|
|
13
14
|
id: z.ZodString;
|
|
@@ -22,8 +23,9 @@ export declare const createScheduleOperation: import("../operation-catalog.ts").
|
|
|
22
23
|
id?: unknown;
|
|
23
24
|
overlap?: unknown;
|
|
24
25
|
backfill?: unknown;
|
|
26
|
+
jitter?: unknown;
|
|
25
27
|
}, {
|
|
26
28
|
id: string;
|
|
27
|
-
}>;
|
|
29
|
+
}, unknown>;
|
|
28
30
|
export declare const createScheduleRestBinding: UnknownRestBinding;
|
|
29
31
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { defineOperation } from "../operation-registry.js";
|
|
3
|
-
import {
|
|
3
|
+
import { readRestJsonBody } from "../rest-body.js";
|
|
4
|
+
import { invalidParamsFault, isOperationFault, shapeRestFault } from "./operation-helpers.js";
|
|
4
5
|
import { mapScheduleErrorToFault, validateScheduleInputCadence } from "./schedule-faults.js";
|
|
5
6
|
const VALID_SCHEDULE_OVERLAP_POLICIES = new Set([
|
|
6
7
|
"skip",
|
|
@@ -14,7 +15,8 @@ const VALID_SCHEDULE_OVERLAP_POLICIES = new Set([
|
|
|
14
15
|
input: z.unknown().optional(),
|
|
15
16
|
id: z.unknown().optional(),
|
|
16
17
|
overlap: z.unknown().optional(),
|
|
17
|
-
backfill: z.unknown().optional()
|
|
18
|
+
backfill: z.unknown().optional(),
|
|
19
|
+
jitter: z.unknown().optional()
|
|
18
20
|
}), createScheduleOutput = z.object({
|
|
19
21
|
id: z.string()
|
|
20
22
|
});
|
|
@@ -42,11 +44,22 @@ function validateOptionalScheduleFields(input) {
|
|
|
42
44
|
throw invalidParamsFault('Field "backfill" must be a boolean');
|
|
43
45
|
validatedBackfill = input.backfill;
|
|
44
46
|
}
|
|
45
|
-
|
|
47
|
+
let validatedJitter;
|
|
48
|
+
if (input.jitter !== void 0) {
|
|
49
|
+
if (typeof input.jitter !== "string" && typeof input.jitter !== "number")
|
|
50
|
+
throw invalidParamsFault('Field "jitter" must be a duration string or a number of milliseconds');
|
|
51
|
+
validatedJitter = input.jitter;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
id: validatedId,
|
|
55
|
+
overlap: validatedOverlap,
|
|
56
|
+
backfill: validatedBackfill,
|
|
57
|
+
jitter: validatedJitter
|
|
58
|
+
};
|
|
46
59
|
}
|
|
47
60
|
function validateCreateScheduleInput(input) {
|
|
48
|
-
const { type, spec } = validateRequiredScheduleFields(input), { id, overlap, backfill } = validateOptionalScheduleFields(input);
|
|
49
|
-
return { type, spec, id, overlap, backfill };
|
|
61
|
+
const { type, spec } = validateRequiredScheduleFields(input), { id, overlap, backfill, jitter } = validateOptionalScheduleFields(input);
|
|
62
|
+
return { type, spec, id, overlap, backfill, jitter };
|
|
50
63
|
}
|
|
51
64
|
export const createScheduleOperation = defineOperation({
|
|
52
65
|
name: "weft.schedules.create",
|
|
@@ -65,7 +78,8 @@ export const createScheduleOperation = defineOperation({
|
|
|
65
78
|
const typedEngine = engine, validated = validateCreateScheduleInput(input), options = {
|
|
66
79
|
...validated.id !== void 0 ? { id: validated.id } : {},
|
|
67
80
|
...validated.overlap !== void 0 ? { overlap: validated.overlap } : {},
|
|
68
|
-
...validated.backfill !== void 0 ? { backfill: validated.backfill } : {}
|
|
81
|
+
...validated.backfill !== void 0 ? { backfill: validated.backfill } : {},
|
|
82
|
+
...validated.jitter !== void 0 ? { jitter: validated.jitter } : {}
|
|
69
83
|
};
|
|
70
84
|
try {
|
|
71
85
|
return { id: (await typedEngine.schedule(validated.type, input.input, validated.spec, options)).id };
|
|
@@ -89,13 +103,16 @@ export const createScheduleRestBinding = {
|
|
|
89
103
|
input: { kind: "body-field", bodyField: "input" },
|
|
90
104
|
id: { kind: "body-field", bodyField: "id" },
|
|
91
105
|
overlap: { kind: "body-field", bodyField: "overlap" },
|
|
92
|
-
backfill: { kind: "body-field", bodyField: "backfill" }
|
|
106
|
+
backfill: { kind: "body-field", bodyField: "backfill" },
|
|
107
|
+
jitter: { kind: "body-field", bodyField: "jitter" }
|
|
93
108
|
},
|
|
94
|
-
extractInput: async (request) => {
|
|
109
|
+
extractInput: async (request, _pathParams, context) => {
|
|
95
110
|
let body;
|
|
96
111
|
try {
|
|
97
|
-
body = await request
|
|
98
|
-
} catch {
|
|
112
|
+
body = await readRestJsonBody(request, context);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
if (isOperationFault(error))
|
|
115
|
+
throw error;
|
|
99
116
|
throw invalidParamsFault("Invalid JSON body");
|
|
100
117
|
}
|
|
101
118
|
if (typeof body !== "object" || body === null)
|
|
@@ -108,7 +125,8 @@ export const createScheduleRestBinding = {
|
|
|
108
125
|
input: record.input,
|
|
109
126
|
id: record.id,
|
|
110
127
|
overlap: record.overlap,
|
|
111
|
-
backfill: record.backfill
|
|
128
|
+
backfill: record.backfill,
|
|
129
|
+
jitter: record.jitter
|
|
112
130
|
};
|
|
113
131
|
},
|
|
114
132
|
success: { kind: "json", status: 201 },
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { FleetEventEnvelope } from '../fleet-event-feed.ts';
|
|
3
|
+
declare const fleetEventsSubscriptionInput: z.ZodObject<{
|
|
4
|
+
workflowId: z.ZodOptional<z.ZodString>;
|
|
5
|
+
kind: z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
"human-review:requested": "human-review:requested";
|
|
7
|
+
"human-review:completed": "human-review:completed";
|
|
8
|
+
"alert:fired": "alert:fired";
|
|
9
|
+
"alert:resolved": "alert:resolved";
|
|
10
|
+
"activity:started": "activity:started";
|
|
11
|
+
"activity:completed": "activity:completed";
|
|
12
|
+
"activity:async-pending": "activity:async-pending";
|
|
13
|
+
"activity:failed": "activity:failed";
|
|
14
|
+
"task:dead-lettered": "task:dead-lettered";
|
|
15
|
+
"attributes:changed": "attributes:changed";
|
|
16
|
+
"schedule:fired": "schedule:fired";
|
|
17
|
+
"schedule:missed-fire": "schedule:missed-fire";
|
|
18
|
+
"signal:received": "signal:received";
|
|
19
|
+
"signal:delivered": "signal:delivered";
|
|
20
|
+
"checkpoint:size-warning": "checkpoint:size-warning";
|
|
21
|
+
"development:warning": "development:warning";
|
|
22
|
+
"cleanup:warning": "cleanup:warning";
|
|
23
|
+
"storage:size-reported": "storage:size-reported";
|
|
24
|
+
"worker:connected": "worker:connected";
|
|
25
|
+
"worker:disconnected": "worker:disconnected";
|
|
26
|
+
"constraint:violated": "constraint:violated";
|
|
27
|
+
"update:received": "update:received";
|
|
28
|
+
"update:completed": "update:completed";
|
|
29
|
+
"workflow:started": "workflow:started";
|
|
30
|
+
"workflow:completed": "workflow:completed";
|
|
31
|
+
"workflow:failed": "workflow:failed";
|
|
32
|
+
"workflow:cancelled": "workflow:cancelled";
|
|
33
|
+
"workflow:timed-out": "workflow:timed-out";
|
|
34
|
+
"workflow:resumed": "workflow:resumed";
|
|
35
|
+
"workflow:suspended": "workflow:suspended";
|
|
36
|
+
"workflow:teardown": "workflow:teardown";
|
|
37
|
+
}>>;
|
|
38
|
+
fromCursor: z.ZodOptional<z.ZodString>;
|
|
39
|
+
}, z.core.$strip>;
|
|
40
|
+
declare const fleetEventsSubscriptionEnvelope: z.ZodObject<{
|
|
41
|
+
subscriptionId: z.ZodString;
|
|
42
|
+
cursor: z.ZodString;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
export type FleetEventsSubscriptionInput = z.infer<typeof fleetEventsSubscriptionInput>;
|
|
45
|
+
export type FleetEventsSubscriptionEnvelope = z.infer<typeof fleetEventsSubscriptionEnvelope>;
|
|
46
|
+
export declare const fleetEventsSubscriptionOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
47
|
+
workflowId?: string | undefined;
|
|
48
|
+
kind?: "human-review:requested" | "human-review:completed" | "alert:fired" | "alert:resolved" | "activity:started" | "activity:completed" | "activity:async-pending" | "activity:failed" | "task:dead-lettered" | "attributes:changed" | "schedule:fired" | "schedule:missed-fire" | "signal:received" | "signal:delivered" | "checkpoint:size-warning" | "development:warning" | "cleanup:warning" | "storage:size-reported" | "worker:connected" | "worker:disconnected" | "constraint:violated" | "update:received" | "update:completed" | "workflow:started" | "workflow:completed" | "workflow:failed" | "workflow:cancelled" | "workflow:timed-out" | "workflow:resumed" | "workflow:suspended" | "workflow:teardown" | undefined;
|
|
49
|
+
fromCursor?: string | undefined;
|
|
50
|
+
}, {
|
|
51
|
+
subscriptionId: string;
|
|
52
|
+
cursor: string;
|
|
53
|
+
}, FleetEventEnvelope>;
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { raiseFault } from "../operation-catalog/raise-fault.js";
|
|
3
|
+
import { defineOperation } from "../operation-registry.js";
|
|
4
|
+
import { EVENTS_READ_EVENT_TYPES } from "../runtime/client-visible-events.js";
|
|
5
|
+
import { decodeCursor } from "../workflow-event-feed.js";
|
|
6
|
+
import { invalidParamsFault } from "./operation-helpers.js";
|
|
7
|
+
const INITIAL_SUBSCRIPTION_CURSOR = "-1", MAX_FLEET_SUBSCRIPTION_REPLAY_EVENTS = 1000, fleetEventKindSchema = z.enum(EVENTS_READ_EVENT_TYPES), fleetCursorSchema = z.string().regex(/^(?:-1|\d+)$/, "Invalid cursor").refine((cursor) => decodeCursor(cursor) !== null, {
|
|
8
|
+
message: "Invalid cursor"
|
|
9
|
+
}), fleetEventsSubscriptionInput = z.object({
|
|
10
|
+
workflowId: z.string().min(1).optional(),
|
|
11
|
+
kind: fleetEventKindSchema.optional(),
|
|
12
|
+
fromCursor: fleetCursorSchema.optional()
|
|
13
|
+
}), fleetEventsSubscriptionEnvelope = z.object({
|
|
14
|
+
subscriptionId: z.string(),
|
|
15
|
+
cursor: z.string()
|
|
16
|
+
}), fleetEventEnvelopeSchema = z.object({
|
|
17
|
+
kind: z.string(),
|
|
18
|
+
workflowId: z.string().optional(),
|
|
19
|
+
sequence: z.number(),
|
|
20
|
+
cursor: z.string(),
|
|
21
|
+
emittedAtMs: z.number(),
|
|
22
|
+
payload: z.unknown()
|
|
23
|
+
});
|
|
24
|
+
export const fleetEventsSubscriptionOperation = defineOperation({
|
|
25
|
+
name: "weft.events.subscribe",
|
|
26
|
+
mcpExposable: !1,
|
|
27
|
+
kind: "subscription",
|
|
28
|
+
summary: "Subscribe to fleet-wide events with replay-from-cursor",
|
|
29
|
+
description: "Subscribes to the server-level event feed across workflows. Optional filters narrow delivery by workflow id or event kind after the single fleet cursor has been applied. Historical replay is capped at 1,000 matching retained events per subscription; use a recent fromCursor for older feeds.",
|
|
30
|
+
destructive: !1,
|
|
31
|
+
tags: ["Events"],
|
|
32
|
+
inputSchema: fleetEventsSubscriptionInput,
|
|
33
|
+
outputSchema: fleetEventsSubscriptionEnvelope,
|
|
34
|
+
producibleFaults: ["UnsupportedTransport", "InvalidParams"],
|
|
35
|
+
eventSchema: fleetEventEnvelopeSchema,
|
|
36
|
+
access: {
|
|
37
|
+
kind: "scoped",
|
|
38
|
+
scopes: { kind: "anyOf", scopes: ["events:read"] }
|
|
39
|
+
},
|
|
40
|
+
discoverable: !0,
|
|
41
|
+
transports: { http: !1, jsonRpcHttp: !1, jsonRpcWebSocket: !0, jsonRpcStdio: !1 },
|
|
42
|
+
unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
|
|
43
|
+
invoke: async ({ input, engine, transport }) => {
|
|
44
|
+
const startingCursor = input.fromCursor ?? INITIAL_SUBSCRIPTION_CURSOR;
|
|
45
|
+
if (decodeCursor(startingCursor) === null)
|
|
46
|
+
raiseFault(fleetEventsSubscriptionOperation, invalidParamsFault("Invalid cursor"));
|
|
47
|
+
const fleetFeed = getFleetEventFeed(engine, transport), controller = new AbortController, iterable = fleetFeed.subscribe({
|
|
48
|
+
...input.fromCursor === void 0 ? {} : { fromCursor: input.fromCursor },
|
|
49
|
+
signal: controller.signal,
|
|
50
|
+
replayLimit: MAX_FLEET_SUBSCRIPTION_REPLAY_EVENTS,
|
|
51
|
+
filterEnvelope: (envelope) => matchesFleetEventFilter(envelope, input),
|
|
52
|
+
createReplayLimitError: (count, limit) => fleetReplayLimitFault(count, limit)
|
|
53
|
+
});
|
|
54
|
+
return {
|
|
55
|
+
envelope: { subscriptionId: `sub_${crypto.randomUUID()}`, cursor: startingCursor },
|
|
56
|
+
iterable,
|
|
57
|
+
close: async () => {
|
|
58
|
+
controller.abort();
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
function fleetReplayLimitFault(count, limit) {
|
|
64
|
+
return invalidParamsFault(`Fleet event replay window is ${count} matching events; maximum is ${limit}. Supply a more recent fromCursor.`);
|
|
65
|
+
}
|
|
66
|
+
function matchesFleetEventFilter(envelope, input) {
|
|
67
|
+
if (!matchesWorkflowIdFilter(envelope, input.workflowId))
|
|
68
|
+
return !1;
|
|
69
|
+
if (!matchesKindFilter(envelope, input.kind))
|
|
70
|
+
return !1;
|
|
71
|
+
return !0;
|
|
72
|
+
}
|
|
73
|
+
function matchesWorkflowIdFilter(envelope, workflowId) {
|
|
74
|
+
if (workflowId === void 0)
|
|
75
|
+
return !0;
|
|
76
|
+
return envelope.workflowId === workflowId;
|
|
77
|
+
}
|
|
78
|
+
function matchesKindFilter(envelope, kind) {
|
|
79
|
+
if (kind === void 0)
|
|
80
|
+
return !0;
|
|
81
|
+
return envelope.kind === kind;
|
|
82
|
+
}
|
|
83
|
+
function getFleetEventFeed(engine, transport) {
|
|
84
|
+
if (typeof engine === "object" && engine !== null && "fleetFeed" in engine) {
|
|
85
|
+
const fleetFeed = engine.fleetFeed;
|
|
86
|
+
if (isFleetEventSubscriber(fleetFeed))
|
|
87
|
+
return fleetFeed;
|
|
88
|
+
}
|
|
89
|
+
raiseFault(fleetEventsSubscriptionOperation, {
|
|
90
|
+
code: "UnsupportedTransport",
|
|
91
|
+
message: "Fleet event subscription requires a WebSocket fleet event feed",
|
|
92
|
+
data: { transport, supported: ["jsonRpcWebSocket"] }
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function isFleetEventSubscriber(value) {
|
|
96
|
+
if (typeof value !== "object" || value === null)
|
|
97
|
+
return !1;
|
|
98
|
+
return typeof value.subscribe === "function";
|
|
99
|
+
}
|