@lostgradient/weft 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +123 -43
- package/dist/cli/conformance.js +7 -1
- package/dist/cli/generated/operation-client.generated.d.ts +55 -13
- package/dist/cli/generated/operation-client.generated.js +3 -0
- package/dist/cli/help-text.d.ts +1 -1
- package/dist/cli/help-text.js +1 -0
- package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
- package/dist/cli/operation-catalog-snapshot.js +11 -0
- package/dist/cli/parse-schedule-arguments.js +3 -1
- package/dist/cli/schedule.js +2 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli-main.js +80 -79
- package/dist/client/handle-delegation.d.ts +7 -2
- package/dist/client/handle-delegation.js +9 -1
- package/dist/client/http-client-requests.d.ts +4 -1
- package/dist/client/http-client-requests.js +10 -0
- package/dist/client/http-client.d.ts +10 -4
- package/dist/client/http-client.js +18 -1
- package/dist/client/http-request.d.ts +11 -1
- package/dist/client/http-request.js +17 -7
- package/dist/client/index.d.ts +1 -1
- package/dist/client/interface.d.ts +100 -4
- package/dist/client/local.d.ts +7 -1
- package/dist/client/local.js +17 -2
- package/dist/client/start-body.d.ts +9 -2
- package/dist/client/start-body.js +13 -4
- package/dist/core/byte-arrays.d.ts +5 -0
- package/dist/core/byte-arrays.js +5 -0
- package/dist/core/checkpoint/lifecycle.d.ts +3 -0
- package/dist/core/checkpoint/lifecycle.js +9 -4
- package/dist/core/checkpoint/serialization.js +12 -5
- package/dist/core/codec/extension-codec.d.ts +16 -0
- package/dist/core/codec/extension-codec.js +104 -8
- package/dist/core/codec/index.d.ts +1 -0
- package/dist/core/codec/index.js +1 -0
- package/dist/core/codec/serializer-registry.d.ts +122 -0
- package/dist/core/codec/serializer-registry.js +51 -0
- package/dist/core/context/activity-retry-state.d.ts +38 -0
- package/dist/core/context/activity-retry-state.js +89 -0
- package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
- package/dist/core/context/activity-schedule-to-close.js +69 -0
- package/dist/core/context/child-workflow-pipe.d.ts +5 -5
- package/dist/core/context/child-workflow-pipe.js +15 -2
- package/dist/core/context/context-presence.d.ts +19 -0
- package/dist/core/context/context-presence.js +13 -0
- package/dist/core/context/durable-operations.d.ts +25 -0
- package/dist/core/context/durable-operations.js +64 -0
- package/dist/core/context/index.d.ts +18 -5
- package/dist/core/context/index.js +17 -12
- package/dist/core/context/internals.d.ts +29 -0
- package/dist/core/context/internals.js +6 -1
- package/dist/core/context/operation-request.d.ts +35 -0
- package/dist/core/context/parallel-cache-entry.d.ts +14 -5
- package/dist/core/context/run-operation.d.ts +21 -3
- package/dist/core/context/run-operation.js +56 -93
- package/dist/core/context/session-state.js +7 -8
- package/dist/core/context/speculative-child.js +2 -0
- package/dist/core/context/types.d.ts +15 -0
- package/dist/core/context/version-patching.d.ts +8 -0
- package/dist/core/context/version-patching.js +40 -0
- package/dist/core/context/workflow-logger.d.ts +98 -0
- package/dist/core/context/workflow-logger.js +68 -0
- package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
- package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
- package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
- package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
- package/dist/core/engine/activity-reconciliation.d.ts +1 -0
- package/dist/core/engine/activity-reconciliation.js +12 -1
- package/dist/core/engine/activity-resolution.d.ts +23 -0
- package/dist/core/engine/activity-resolution.js +37 -0
- package/dist/core/engine/aggregate.js +66 -30
- package/dist/core/engine/async-activity-completion.d.ts +23 -6
- package/dist/core/engine/async-activity-completion.js +53 -12
- package/dist/core/engine/attributes-tags.js +9 -4
- package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
- package/dist/core/engine/bulk-operations-purge.js +38 -3
- package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
- package/dist/core/engine/bulk-operations-shared.js +8 -2
- package/dist/core/engine/bulk-operations.d.ts +4 -1
- package/dist/core/engine/bulk-operations.js +235 -24
- package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
- package/dist/core/engine/callback-creators-bundles.js +30 -2
- package/dist/core/engine/callback-creators-core.js +6 -4
- package/dist/core/engine/callback-creators-router.js +10 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
- package/dist/core/engine/callback-creators-schedule.js +12 -8
- package/dist/core/engine/candidate-read-batching.d.ts +6 -0
- package/dist/core/engine/candidate-read-batching.js +1 -0
- package/dist/core/engine/checkpoint-io.js +61 -25
- package/dist/core/engine/checkpoint-reads.js +3 -2
- package/dist/core/engine/checkpoint-replay.d.ts +20 -0
- package/dist/core/engine/checkpoint-replay.js +242 -0
- package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
- package/dist/core/engine/checkpoint-side-effects.js +35 -0
- package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
- package/dist/core/engine/child-workflow-cancellation.js +40 -0
- package/dist/core/engine/child-workflow.js +27 -4
- package/dist/core/engine/condition-waiters.d.ts +14 -0
- package/dist/core/engine/condition-waiters.js +5 -0
- package/dist/core/engine/construction.d.ts +3 -1
- package/dist/core/engine/construction.js +30 -8
- package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
- package/dist/core/engine/coordination-branch-executors.js +107 -0
- package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
- package/dist/core/engine/deferred-consume-envelope.js +14 -0
- package/dist/core/engine/disposal.js +25 -0
- package/dist/core/engine/engine-create-types.d.ts +14 -18
- package/dist/core/engine/engine-internal-types.d.ts +38 -3
- package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
- package/dist/core/engine/engine-leak-warnings.js +4 -0
- package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
- package/dist/core/engine/engine-runtime-helpers.js +26 -5
- package/dist/core/engine/errors.d.ts +121 -0
- package/dist/core/engine/errors.js +45 -1
- package/dist/core/engine/event-log-compaction.d.ts +8 -0
- package/dist/core/engine/event-log-compaction.js +20 -2
- package/dist/core/engine/fenced-write.d.ts +65 -0
- package/dist/core/engine/fenced-write.js +71 -0
- package/dist/core/engine/finalizer-state.d.ts +28 -0
- package/dist/core/engine/finalizer-state.js +16 -0
- package/dist/core/engine/handle-result.js +1 -1
- package/dist/core/engine/handles.d.ts +97 -40
- package/dist/core/engine/handles.js +25 -27
- package/dist/core/engine/index.d.ts +125 -15
- package/dist/core/engine/index.js +207 -11
- package/dist/core/engine/inline-launch-queue.d.ts +14 -0
- package/dist/core/engine/inline-launch-queue.js +32 -7
- package/dist/core/engine/inline-parking.js +3 -2
- package/dist/core/engine/internals.d.ts +125 -13
- package/dist/core/engine/lease-codec.d.ts +35 -0
- package/dist/core/engine/lease-codec.js +32 -0
- package/dist/core/engine/lease-deposition.d.ts +66 -0
- package/dist/core/engine/lease-deposition.js +10 -0
- package/dist/core/engine/lease-errors.d.ts +99 -0
- package/dist/core/engine/lease-errors.js +30 -0
- package/dist/core/engine/lease-manager.d.ts +114 -0
- package/dist/core/engine/lease-manager.js +135 -0
- package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
- package/dist/core/engine/lifecycle/persist.js +15 -52
- package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
- package/dist/core/engine/lifecycle/recovered-services.js +18 -3
- package/dist/core/engine/lifecycle/resume.js +39 -11
- package/dist/core/engine/lifecycle/shared.d.ts +8 -1
- package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
- package/dist/core/engine/lifecycle/start-batch.js +2 -1
- package/dist/core/engine/lifecycle/start-commit.d.ts +56 -0
- package/dist/core/engine/lifecycle/start-commit.js +69 -0
- package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
- package/dist/core/engine/lifecycle/start-exec.js +38 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
- package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
- package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
- package/dist/core/engine/lifecycle/start-or-signal.d.ts +46 -0
- package/dist/core/engine/lifecycle/start-or-signal.js +71 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
- package/dist/core/engine/lifecycle/start.d.ts +6 -6
- package/dist/core/engine/lifecycle/start.js +47 -45
- package/dist/core/engine/lifecycle/transition.js +17 -5
- package/dist/core/engine/lifecycle.d.ts +3 -2
- package/dist/core/engine/lifecycle.js +9 -2
- package/dist/core/engine/list-candidate-resolution.js +2 -2
- package/dist/core/engine/listing.js +10 -6
- package/dist/core/engine/operations-activity.d.ts +4 -11
- package/dist/core/engine/operations-activity.js +22 -49
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +43 -8
- package/dist/core/engine/operations-router.d.ts +6 -0
- package/dist/core/engine/operations-router.js +2 -0
- package/dist/core/engine/operations-speculate.js +6 -2
- package/dist/core/engine/operations-stream.js +12 -2
- package/dist/core/engine/operations-time.d.ts +4 -2
- package/dist/core/engine/operations-time.js +14 -2
- package/dist/core/engine/operations-wait-condition.d.ts +23 -0
- package/dist/core/engine/operations-wait-condition.js +62 -0
- package/dist/core/engine/ownership-options.d.ts +23 -0
- package/dist/core/engine/ownership-options.js +26 -0
- package/dist/core/engine/payload-size-policy.d.ts +3 -0
- package/dist/core/engine/payload-size-policy.js +4 -0
- package/dist/core/engine/pending-updates.d.ts +17 -0
- package/dist/core/engine/pending-updates.js +33 -11
- package/dist/core/engine/persisted-data-version.d.ts +5 -9
- package/dist/core/engine/persisted-data-version.js +4 -5
- package/dist/core/engine/queries.js +1 -1
- package/dist/core/engine/registration.d.ts +1 -0
- package/dist/core/engine/registration.js +18 -3
- package/dist/core/engine/schedule-handle.d.ts +45 -0
- package/dist/core/engine/schedule-handle.js +26 -0
- package/dist/core/engine/schedule-jitter.d.ts +5 -0
- package/dist/core/engine/schedule-jitter.js +10 -0
- package/dist/core/engine/schedule-run.d.ts +17 -0
- package/dist/core/engine/schedule-run.js +38 -0
- package/dist/core/engine/schedule-timer.js +81 -17
- package/dist/core/engine/schedules.d.ts +8 -5
- package/dist/core/engine/schedules.js +44 -19
- package/dist/core/engine/search-attribute-records.d.ts +4 -0
- package/dist/core/engine/search-attribute-records.js +17 -0
- package/dist/core/engine/second-instance-detector.d.ts +96 -0
- package/dist/core/engine/second-instance-detector.js +108 -0
- package/dist/core/engine/signals.d.ts +38 -0
- package/dist/core/engine/signals.js +55 -19
- package/dist/core/engine/state-utilities.d.ts +49 -2
- package/dist/core/engine/state-utilities.js +114 -3
- package/dist/core/engine/storage-io.d.ts +16 -2
- package/dist/core/engine/storage-io.js +26 -5
- package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
- package/dist/core/engine/stream-chunk-loading.js +24 -1
- package/dist/core/engine/sub-operation.js +22 -3
- package/dist/core/engine/termination/cleanup.d.ts +28 -1
- package/dist/core/engine/termination/cleanup.js +44 -2
- package/dist/core/engine/termination/complete.js +48 -9
- package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
- package/dist/core/engine/termination/finalizer-activity.js +30 -0
- package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
- package/dist/core/engine/termination/finalizer-claim.js +80 -0
- package/dist/core/engine/termination/finalizer.d.ts +48 -0
- package/dist/core/engine/termination/finalizer.js +159 -0
- package/dist/core/engine/termination/suspend.d.ts +70 -0
- package/dist/core/engine/termination/suspend.js +41 -0
- package/dist/core/engine/termination.d.ts +5 -2
- package/dist/core/engine/termination.js +6 -0
- package/dist/core/engine/updates.js +5 -25
- package/dist/core/engine/validation/schedule.d.ts +2 -1
- package/dist/core/engine/validation/schedule.js +51 -2
- package/dist/core/engine/validation.js +54 -3
- package/dist/core/engine/waiting-update-response.d.ts +8 -0
- package/dist/core/engine/waiting-update-response.js +22 -0
- package/dist/core/engine/workflow-concurrency.d.ts +10 -0
- package/dist/core/engine/workflow-concurrency.js +136 -0
- package/dist/core/engine/workflow-feed.d.ts +9 -8
- package/dist/core/engine/workflow-feed.js +4 -1
- package/dist/core/engine/workflow-indexes.d.ts +9 -0
- package/dist/core/engine/workflow-indexes.js +10 -0
- package/dist/core/engine/workflow-state-stream.js +33 -13
- package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
- package/dist/core/engine-helpers.js +1 -0
- package/dist/core/events/activity-events.d.ts +43 -12
- package/dist/core/events/activity-events.js +28 -0
- package/dist/core/events/attribute-events.d.ts +2 -3
- package/dist/core/events/event-map.d.ts +19 -12
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/schedule-events.d.ts +71 -0
- package/dist/core/events/schedule-events.js +29 -0
- package/dist/core/events/signal-events.d.ts +4 -6
- package/dist/core/events/system-events.d.ts +29 -19
- package/dist/core/events/system-events.js +26 -0
- package/dist/core/events/update-events.d.ts +6 -8
- package/dist/core/events/workflow-events.d.ts +108 -20
- package/dist/core/events/workflow-events.js +35 -0
- package/dist/core/failure-categories.js +5 -17
- package/dist/core/fault-code.d.ts +9 -3
- package/dist/core/fault-code.js +1 -0
- package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
- package/dist/core/inline-execution-strategy.context-options.js +56 -0
- package/dist/core/inline-execution-strategy.d.ts +31 -36
- package/dist/core/inline-execution-strategy.js +16 -27
- package/dist/core/list-filter-validation.d.ts +1 -1
- package/dist/core/list-filter-validation.js +2 -1
- package/dist/core/payload-size.d.ts +1 -1
- package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
- package/dist/core/review/events.d.ts +6 -8
- package/dist/core/scheduler/scheduler-class.d.ts +10 -1
- package/dist/core/scheduler/scheduler-class.js +38 -11
- package/dist/core/scheduler/timer-batch.js +9 -1
- package/dist/core/scheduler/timer-sources.d.ts +1 -0
- package/dist/core/scheduler/timer-sources.js +11 -5
- package/dist/core/session-state.d.ts +0 -1
- package/dist/core/session-state.js +2 -2
- package/dist/core/start-workflow-validation.d.ts +56 -0
- package/dist/core/start-workflow-validation.js +30 -1
- package/dist/core/step-context.d.ts +10 -6
- package/dist/core/step-context.js +7 -15
- package/dist/core/types/activity-verification.d.ts +67 -0
- package/dist/core/types/activity-verification.js +0 -0
- package/dist/core/types/activity.d.ts +86 -64
- package/dist/core/types/bulk.d.ts +50 -9
- package/dist/core/types/checkpoint.d.ts +44 -8
- package/dist/core/types/identity.d.ts +8 -1
- package/dist/core/types/launch-metadata.d.ts +33 -0
- package/dist/core/types/launch-metadata.js +0 -0
- package/dist/core/types/list-options.d.ts +146 -0
- package/dist/core/types/list-options.js +0 -0
- package/dist/core/types/message-handles.d.ts +25 -0
- package/dist/core/types/options.d.ts +165 -215
- package/dist/core/types/reviews.d.ts +2 -1
- package/dist/core/types/schedules.d.ts +39 -3
- package/dist/core/types/services-resolution.d.ts +47 -0
- package/dist/core/types/services-resolution.js +0 -0
- package/dist/core/types/state.d.ts +11 -11
- package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
- package/dist/core/types/workflow-builder-runtime.js +11 -2
- package/dist/core/types/workflow-builder.d.ts +47 -15
- package/dist/core/types/workflow-concurrency.d.ts +39 -0
- package/dist/core/types/workflow-concurrency.js +0 -0
- package/dist/core/types/workflow-context.d.ts +157 -14
- package/dist/core/types/workflow-definition.d.ts +53 -10
- package/dist/core/types/workflow-function.d.ts +101 -9
- package/dist/core/types/workflow-log.d.ts +98 -0
- package/dist/core/types/workflow-log.js +0 -0
- package/dist/core/types/workflow-registries.d.ts +14 -3
- package/dist/core/types/workflow-registry.d.ts +3 -0
- package/dist/core/types/workflow-snapshot.d.ts +29 -0
- package/dist/core/types/workflow-snapshot.js +0 -0
- package/dist/core/types.d.ts +7 -0
- package/dist/core/types.js +7 -0
- package/dist/core/versioning.d.ts +9 -39
- package/dist/core/versioning.js +2 -12
- package/dist/core/weft-error.d.ts +44 -1
- package/dist/core/weft-error.js +19 -1
- package/dist/core/worker-execution-strategy-options.d.ts +26 -0
- package/dist/core/worker-execution-strategy.js +40 -36
- package/dist/core/worker-inbound-message.d.ts +38 -0
- package/dist/core/worker-inbound-message.js +37 -0
- package/dist/core/worker-log-abuse-counter.d.ts +175 -0
- package/dist/core/worker-log-abuse-counter.js +107 -0
- package/dist/core/worker-message-helpers.d.ts +47 -0
- package/dist/core/worker-message-helpers.js +26 -0
- package/dist/core/worker-protocol-guard.js +1 -1
- package/dist/core/worker-protocol-log.d.ts +56 -0
- package/dist/core/worker-protocol-log.js +18 -0
- package/dist/core/worker-protocol.d.ts +23 -0
- package/dist/core/worker-protocol.js +12 -2
- package/dist/core/workflow-version-tuple.d.ts +3 -9
- package/dist/core/workflow-version-tuple.js +2 -3
- package/dist/diagnostics/doctor.js +6 -3
- package/dist/diagnostics/format.js +3 -8
- package/dist/diagnostics/types.d.ts +5 -5
- package/dist/diagnostics/validate.d.ts +0 -1
- package/dist/diagnostics/version-check.d.ts +1 -1
- package/dist/diagnostics/version-check.js +10 -13
- package/dist/index.d.ts +13 -11
- package/dist/index.js +39 -4
- package/dist/json-schema.js +3 -3
- package/dist/mcp/cli.js +35 -35
- package/dist/mcp/dispatcher.js +1 -1
- package/dist/mcp/http.js +16 -6
- package/dist/mcp/list-filter.js +2 -1
- package/dist/mcp/protocol.d.ts +2 -0
- package/dist/mcp/protocol.js +1 -1
- package/dist/mcp/session.d.ts +16 -0
- package/dist/mcp/session.js +60 -6
- package/dist/mcp/tools.js +73 -6
- package/dist/observability/index.js +2 -2
- package/dist/server/asyncapi-channels.js +5 -2
- package/dist/server/attribute-filters.d.ts +8 -3
- package/dist/server/attribute-filters.js +6 -1
- package/dist/server/authentication/api-key.d.ts +2 -1
- package/dist/server/authentication/api-key.js +5 -2
- package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
- package/dist/server/authentication/constant-time-api-key.js +24 -0
- package/dist/server/authentication/index.d.ts +1 -1
- package/dist/server/authentication/index.js +7 -4
- package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
- package/dist/server/authentication/rotating-api-key-store.js +19 -11
- package/dist/server/engine-event-feed-backend.d.ts +4 -5
- package/dist/server/fault-to-http.js +8 -1
- package/dist/server/fault-to-json-rpc.js +1 -0
- package/dist/server/fleet-event-feed.d.ts +31 -0
- package/dist/server/fleet-event-feed.js +157 -0
- package/dist/server/handler/index.js +1 -1
- package/dist/server/handler/response-helpers.js +2 -1
- package/dist/server/handler/route-dispatch.d.ts +6 -3
- package/dist/server/handler/route-dispatch.js +2 -2
- package/dist/server/handler.js +31 -31
- package/dist/server/index.d.ts +32 -2
- package/dist/server/index.js +35 -35
- package/dist/server/interactive-operations.js +1 -0
- package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
- package/dist/server/json-rpc-transport-helpers.js +2 -1
- package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
- package/dist/server/json-rpc-websocket-runtime.js +1 -0
- package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
- package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
- package/dist/server/json-rpc-websocket-types.d.ts +22 -0
- package/dist/server/json-rpc-websocket-types.js +0 -0
- package/dist/server/json-rpc-websocket-validation.js +20 -4
- package/dist/server/json-rpc-websocket.d.ts +2 -43
- package/dist/server/json-rpc-websocket.js +57 -74
- package/dist/server/openapi.d.ts +2 -1
- package/dist/server/openapi.js +1 -3
- package/dist/server/openrpc-document-schema.d.ts +78 -0
- package/dist/server/openrpc-document-schema.js +27 -1
- package/dist/server/openrpc-errors.d.ts +3 -0
- package/dist/server/openrpc-errors.js +2 -1
- package/dist/server/openrpc.js +32 -0
- package/dist/server/operation-catalog/index.d.ts +1 -1
- package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
- package/dist/server/operation-catalog/pipeline-stages.js +26 -12
- package/dist/server/operation-catalog/pipeline.js +8 -1
- package/dist/server/operation-catalog/registry.js +13 -0
- package/dist/server/operation-catalog/types.d.ts +20 -9
- package/dist/server/operation-fault.d.ts +10 -0
- package/dist/server/operation-fault.js +2 -0
- package/dist/server/operation-registry.d.ts +12 -11
- package/dist/server/operation-registry.js +12 -3
- package/dist/server/operations/aggregate-workflows.d.ts +15 -15
- package/dist/server/operations/async-activity.d.ts +2 -2
- package/dist/server/operations/async-activity.js +12 -7
- package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-cancel-workflows.js +2 -2
- package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-delete-workflows.js +2 -2
- package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
- package/dist/server/operations/bulk-filter-helpers.js +54 -24
- package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
- package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
- package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
- package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
- package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
- package/dist/server/operations/bulk-signal-workflows.js +2 -2
- package/dist/server/operations/cancel-schedule.d.ts +1 -1
- package/dist/server/operations/create-schedule.d.ts +3 -1
- package/dist/server/operations/create-schedule.js +29 -11
- package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
- package/dist/server/operations/fleet-events-subscription.js +99 -0
- package/dist/server/operations/fork-workflow.d.ts +1 -1
- package/dist/server/operations/fork-workflow.js +3 -2
- package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
- package/dist/server/operations/get-registry.d.ts +1 -1
- package/dist/server/operations/get-retention-overview.d.ts +1 -1
- package/dist/server/operations/get-review.d.ts +1 -1
- package/dist/server/operations/get-schedule.d.ts +1 -1
- package/dist/server/operations/get-stream-chunks.d.ts +1 -1
- package/dist/server/operations/get-system-metrics.d.ts +2 -2
- package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
- package/dist/server/operations/get-task-diagnostics.js +101 -7
- package/dist/server/operations/get-update-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/get-workflow-events.d.ts +1 -1
- package/dist/server/operations/get-workflow-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
- package/dist/server/operations/get-workflow.d.ts +1 -1
- package/dist/server/operations/list-checkpoints.d.ts +1 -1
- package/dist/server/operations/list-reviews.d.ts +1 -1
- package/dist/server/operations/list-schedules.d.ts +1 -1
- package/dist/server/operations/list-task-queues.d.ts +2 -2
- package/dist/server/operations/list-workers.d.ts +2 -2
- package/dist/server/operations/list-workflows.d.ts +1 -1
- package/dist/server/operations/operation-helpers.d.ts +16 -1
- package/dist/server/operations/operation-helpers.js +15 -3
- package/dist/server/operations/pause-schedule.d.ts +1 -1
- package/dist/server/operations/purge-workflows.d.ts +5 -5
- package/dist/server/operations/purge-workflows.js +2 -2
- package/dist/server/operations/query-workflow.d.ts +1 -1
- package/dist/server/operations/query-workflow.js +3 -2
- package/dist/server/operations/recover-all.d.ts +1 -1
- package/dist/server/operations/replay-workflow.d.ts +1 -1
- package/dist/server/operations/resume-schedule.d.ts +1 -1
- package/dist/server/operations/resume-workflow.js +2 -2
- package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.js +6 -3
- package/dist/server/operations/signal-workflow.js +8 -3
- package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
- package/dist/server/operations/start-or-signal-workflow.d.ts +44 -0
- package/dist/server/operations/start-or-signal-workflow.js +130 -0
- package/dist/server/operations/start-workflow-options.d.ts +38 -0
- package/dist/server/operations/start-workflow-options.js +63 -0
- package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
- package/dist/server/operations/start-workflow-rest-input.js +31 -0
- package/dist/server/operations/start-workflow.d.ts +1 -1
- package/dist/server/operations/start-workflow.js +15 -92
- package/dist/server/operations/storage.d.ts +6 -6
- package/dist/server/operations/storage.js +24 -14
- package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.js +6 -3
- package/dist/server/operations/suspend-workflow.d.ts +13 -0
- package/dist/server/operations/suspend-workflow.js +36 -0
- package/dist/server/operations/update-schedule.d.ts +1 -1
- package/dist/server/operations/update-schedule.js +7 -4
- package/dist/server/operations/update-workflow.d.ts +1 -1
- package/dist/server/operations/update-workflow.js +7 -3
- package/dist/server/operations/worker-drain.d.ts +8 -8
- package/dist/server/operations/worker-drain.js +11 -8
- package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
- package/dist/server/operations/workflow-events-subscription.js +43 -8
- package/dist/server/rest-binding.d.ts +21 -8
- package/dist/server/rest-bindings.js +24 -0
- package/dist/server/rest-body.d.ts +10 -0
- package/dist/server/rest-body.js +80 -0
- package/dist/server/runtime/authentication-bridge.d.ts +1 -0
- package/dist/server/runtime/authentication-bridge.js +33 -6
- package/dist/server/runtime/client-visible-events.d.ts +3 -0
- package/dist/server/runtime/client-visible-events.js +65 -0
- package/dist/server/runtime/context.d.ts +7 -0
- package/dist/server/runtime/event-broadcasting.d.ts +6 -0
- package/dist/server/runtime/event-broadcasting.js +72 -38
- package/dist/server/runtime/retry.d.ts +1 -0
- package/dist/server/runtime/retry.js +14 -0
- package/dist/server/runtime/shutdown.d.ts +7 -6
- package/dist/server/runtime/shutdown.js +6 -1
- package/dist/server/runtime/task-dispatch.js +5 -3
- package/dist/server/runtime/task-polling.d.ts +16 -2
- package/dist/server/runtime/task-polling.js +80 -24
- package/dist/server/runtime/task-reconciliation.js +9 -1
- package/dist/server/runtime/task-result-resolution.d.ts +15 -0
- package/dist/server/runtime/task-result-resolution.js +81 -0
- package/dist/server/runtime/websocket-stream.d.ts +20 -1
- package/dist/server/runtime/websocket-stream.js +173 -7
- package/dist/server/runtime/websocket-upgrade.js +22 -3
- package/dist/server/runtime/websocket-worker.d.ts +1 -1
- package/dist/server/runtime/websocket-worker.js +46 -30
- package/dist/server/serve-internals.d.ts +11 -1
- package/dist/server/serve-internals.js +20 -2
- package/dist/server/task-state.d.ts +38 -0
- package/dist/server/task-state.js +28 -0
- package/dist/server/workflow-event-feed.d.ts +36 -115
- package/dist/server/workflow-event-feed.js +92 -27
- package/dist/service-worker/index.js +31 -31
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +24 -0
- package/dist/storage/capabilities.d.ts +10 -2
- package/dist/storage/capabilities.js +2 -2
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/default-scope.d.ts +7 -4
- package/dist/storage/http.js +2 -2
- package/dist/storage/index.d.ts +81 -4
- package/dist/storage/indexeddb.js +1 -1
- package/dist/storage/interface.d.ts +189 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +12 -0
- package/dist/storage/lmdb.d.ts +4 -3
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon-batch.d.ts +30 -0
- package/dist/storage/neon-batch.js +30 -0
- package/dist/storage/neon-value-mapping.d.ts +74 -0
- package/dist/storage/neon-value-mapping.js +23 -0
- package/dist/storage/neon.d.ts +124 -0
- package/dist/storage/neon.js +15 -0
- package/dist/storage/node-sqlite-loader.d.ts +71 -0
- package/dist/storage/node-sqlite-loader.js +41 -0
- package/dist/storage/node-sqlite.d.ts +1 -19
- package/dist/storage/node-sqlite.js +61 -32
- package/dist/storage/postgres-key-value-queries.d.ts +104 -0
- package/dist/storage/postgres-key-value-queries.js +101 -0
- package/dist/storage/resolve.d.ts +2 -165
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/storage-configuration.d.ts +209 -0
- package/dist/storage/storage-configuration.js +0 -0
- package/dist/storage/testing.d.ts +168 -0
- package/dist/storage/testing.js +2 -0
- package/dist/storage/text-value-store.d.ts +9 -9
- package/dist/storage/turso.d.ts +8 -0
- package/dist/storage/turso.js +2 -2
- package/dist/storage/typed-storage.js +1 -1
- package/dist/storage/web-extension.js +1 -1
- package/dist/testing/index.js +35 -35
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/index.js +9 -5
- package/dist/worker/long-poll.js +4 -0
- package/dist/worker/protocol-messages.d.ts +20 -0
- package/dist/worker/protocol-schemas.d.ts +32 -0
- package/dist/worker/protocol-schemas.js +8 -4
- package/dist/worker/protocol-task-result.d.ts +28 -0
- package/dist/worker/protocol-task-result.js +76 -0
- package/dist/worker/protocol.d.ts +4 -15
- package/dist/worker/protocol.js +1 -1
- package/dist/worker/registry/fair-share.d.ts +29 -0
- package/dist/worker/registry/fair-share.js +30 -0
- package/dist/worker/registry/routing.d.ts +18 -0
- package/dist/worker/registry/routing.js +14 -0
- package/dist/worker/registry/types.d.ts +7 -0
- package/dist/worker/registry.d.ts +16 -1
- package/dist/worker/registry.js +24 -36
- package/dist/workers/worker-replay-state.d.ts +32 -0
- package/dist/workers/worker-replay-state.js +35 -0
- package/dist/workers/worker-state-namespace.d.ts +21 -0
- package/dist/workers/worker-state-namespace.js +13 -0
- package/dist/workers/workflow-runner.d.ts +19 -15
- package/dist/workers/workflow-runner.js +72 -60
- package/dist/workers/workflow-worker-entry.js +5 -2
- package/package.json +21 -4
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { WeftEventMap } from '../core/events.ts';
|
|
2
2
|
import type { QueryDefinition, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions, UpdateDefinition } from '../core/types.ts';
|
|
3
3
|
import type { WorkflowEventTail } from './event-tail.ts';
|
|
4
|
-
import type { ClientHandle, ClientScheduleHandle } from './interface.ts';
|
|
4
|
+
import type { ClientHandle, ClientScheduleHandle, StartOrSignalOutcome } from './interface.ts';
|
|
5
5
|
export interface WorkflowHandleDelegationClient {
|
|
6
6
|
cancel(id: string): Promise<void>;
|
|
7
|
+
suspend(id: string): Promise<void>;
|
|
8
|
+
resume(id: string): Promise<ClientHandle>;
|
|
7
9
|
tail(id: string): WorkflowEventTail;
|
|
8
10
|
signal(id: string, name: string, payload?: unknown, options?: SignalDeliveryOptions): Promise<void>;
|
|
9
11
|
update(id: string, name: string, payload?: unknown, options?: {
|
|
@@ -18,9 +20,12 @@ export interface WorkflowHandleDelegationClient {
|
|
|
18
20
|
export declare abstract class WorkflowHandleDelegation<TClient extends WorkflowHandleDelegationClient = WorkflowHandleDelegationClient> implements ClientHandle {
|
|
19
21
|
readonly id: string;
|
|
20
22
|
protected readonly client: TClient;
|
|
21
|
-
|
|
23
|
+
readonly outcome: StartOrSignalOutcome | undefined;
|
|
24
|
+
constructor(id: string, client: TClient, outcome?: StartOrSignalOutcome);
|
|
22
25
|
abstract result(): Promise<unknown>;
|
|
23
26
|
cancel(): Promise<void>;
|
|
27
|
+
suspend(): Promise<void>;
|
|
28
|
+
resume(): Promise<void>;
|
|
24
29
|
signal(name: SignalDefinition): Promise<void>;
|
|
25
30
|
signal<TInput>(name: SignalDefinition<TInput>, payload: TInput, options?: SignalDeliveryOptions): Promise<void>;
|
|
26
31
|
signal(name: string, payload?: unknown, options?: SignalDeliveryOptions): Promise<void>;
|
|
@@ -3,13 +3,21 @@ import { messageName } from "../core/types.js";
|
|
|
3
3
|
export class WorkflowHandleDelegation {
|
|
4
4
|
id;
|
|
5
5
|
client;
|
|
6
|
-
|
|
6
|
+
outcome;
|
|
7
|
+
constructor(id, client, outcome) {
|
|
7
8
|
this.id = id;
|
|
8
9
|
this.client = client;
|
|
10
|
+
this.outcome = outcome;
|
|
9
11
|
}
|
|
10
12
|
async cancel() {
|
|
11
13
|
return this.client.cancel(this.id);
|
|
12
14
|
}
|
|
15
|
+
async suspend() {
|
|
16
|
+
return this.client.suspend(this.id);
|
|
17
|
+
}
|
|
18
|
+
async resume() {
|
|
19
|
+
await this.client.resume(this.id);
|
|
20
|
+
}
|
|
13
21
|
async signal(nameOrDefinition, payload, options) {
|
|
14
22
|
if (options === void 0)
|
|
15
23
|
return this.client.signal(this.id, messageName(nameOrDefinition), payload);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StoredStreamChunk } from '../core/context.ts';
|
|
2
|
-
import type { BulkCancelResult, BulkDeleteResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PurgeResult, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDeliveryOptions, SubmitReviewOptions, WorkflowReplay, WorkflowState, WorkflowTimelineEntry } from '../core/types.ts';
|
|
2
|
+
import type { BulkCancelResult, BulkDeleteResult, BulkRetryFailedResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PurgeResult, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDeliveryOptions, SubmitReviewOptions, WorkflowReplay, WorkflowState, WorkflowTimelineEntry } from '../core/types.ts';
|
|
3
3
|
import type { UpdateResult } from './interface.ts';
|
|
4
4
|
export type HttpClientRequestContext = {
|
|
5
5
|
readonly baseUrl: string;
|
|
@@ -14,6 +14,7 @@ export declare function forkWorkflowRequest(context: HttpClientRequestContext, i
|
|
|
14
14
|
export declare function getRetentionOverviewRequest(context: HttpClientRequestContext): Promise<RetentionOverview>;
|
|
15
15
|
export declare function purgeWorkflowRequests(context: HttpClientRequestContext, filter?: ListFilter): Promise<PurgeResult>;
|
|
16
16
|
export declare function cancelAllWorkflowRequests(context: HttpClientRequestContext, filter: ListFilter): Promise<BulkCancelResult>;
|
|
17
|
+
export declare function retryFailedAllWorkflowRequests(context: HttpClientRequestContext, filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
17
18
|
export declare function signalAllWorkflowRequests(context: HttpClientRequestContext, filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
18
19
|
export declare function deleteAllWorkflowRequests(context: HttpClientRequestContext, filter: ListFilter): Promise<BulkDeleteResult>;
|
|
19
20
|
export declare function tagAllWorkflowRequests(context: HttpClientRequestContext, filter: ListFilter, tags: string[]): Promise<BulkTagResult>;
|
|
@@ -50,6 +51,8 @@ export declare function getScheduleRequest(context: HttpClientRequestContext, id
|
|
|
50
51
|
export declare function cancelWorkflowRequest(context: HttpClientRequestContext, id: string): Promise<void>;
|
|
51
52
|
/** Force-timeout a workflow (`POST /v1/workflows/:id/timeout`). */
|
|
52
53
|
export declare function timeoutWorkflowRequest(context: HttpClientRequestContext, id: string): Promise<void>;
|
|
54
|
+
/** Suspend a running workflow (`POST /v1/workflows/:id/suspend`). */
|
|
55
|
+
export declare function suspendWorkflowRequest(context: HttpClientRequestContext, id: string): Promise<void>;
|
|
53
56
|
/** Pause a recurring schedule (`POST /v1/schedules/:id/pause`). */
|
|
54
57
|
export declare function pauseScheduleRequest(context: HttpClientRequestContext, id: string): Promise<void>;
|
|
55
58
|
/** Resume a paused schedule (`POST /v1/schedules/:id/resume`). */
|
|
@@ -44,6 +44,13 @@ export function cancelAllWorkflowRequests(context, filter) {
|
|
|
44
44
|
body: JSON.stringify({ filter })
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
+
export function retryFailedAllWorkflowRequests(context, filter) {
|
|
48
|
+
assertScopedBulkWorkflowFilter(filter);
|
|
49
|
+
return request(context.baseUrl, "/workflows/bulk/retry-failed", context.headers, {
|
|
50
|
+
method: "POST",
|
|
51
|
+
body: JSON.stringify({ filter })
|
|
52
|
+
});
|
|
53
|
+
}
|
|
47
54
|
export function signalAllWorkflowRequests(context, filter, name, payload) {
|
|
48
55
|
assertScopedBulkWorkflowFilter(filter);
|
|
49
56
|
if (name.length === 0)
|
|
@@ -155,6 +162,9 @@ export function cancelWorkflowRequest(context, id) {
|
|
|
155
162
|
export function timeoutWorkflowRequest(context, id) {
|
|
156
163
|
return request(context.baseUrl, `/workflows/${encodeURIComponent(id)}/timeout`, context.headers, { method: "POST" });
|
|
157
164
|
}
|
|
165
|
+
export function suspendWorkflowRequest(context, id) {
|
|
166
|
+
return request(context.baseUrl, `/workflows/${encodeURIComponent(id)}/suspend`, context.headers, { method: "POST" });
|
|
167
|
+
}
|
|
158
168
|
export function pauseScheduleRequest(context, id) {
|
|
159
169
|
return request(context.baseUrl, `/schedules/${encodeURIComponent(id)}/pause`, context.headers, { method: "POST" });
|
|
160
170
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type CatalogOperationName, type CatalogOperationTypes, type WeftClient as CatalogOperations } from '../cli/generated/operation-client.generated.ts';
|
|
2
2
|
import type { StoredStreamChunk } from '../core/context.ts';
|
|
3
|
-
import type { AttributeFilterKey, BulkCancelResult, BulkDeleteResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PaginatedResult, PurgeResult, QueryDefinition, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleFilter, ScheduleOptions, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions,
|
|
3
|
+
import type { AttributeFilterKey, BulkCancelResult, BulkDeleteResult, BulkRetryFailedResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PaginatedResult, PurgeResult, QueryDefinition, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleFilter, ScheduleOptions, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions, StartOrSignalSignal, SubmitReviewOptions, TypedListFilter, UpdateDefinition, WorkflowEvent, WorkflowInput, WorkflowOutput, WorkflowRegistry, WorkflowReplay, WorkflowState, WorkflowSummary, WorkflowTimelineEntry } from '../core/types.ts';
|
|
4
4
|
import { type WorkflowEventSubscription } from './event-stream.ts';
|
|
5
5
|
import type { WorkflowEventTail } from './event-tail.ts';
|
|
6
6
|
import { type HttpClientOptions } from './http-request.ts';
|
|
7
|
-
import type { ClientHandle, ClientScheduleHandle, UpdateResult, WeftClient, WeftClientActivity } from './interface.ts';
|
|
7
|
+
import type { ClientHandle, ClientScheduleHandle, ClientStartOptions, UpdateResult, WeftClient, WeftClientActivity } from './interface.ts';
|
|
8
8
|
import type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow-name-typing.ts';
|
|
9
9
|
/**
|
|
10
10
|
* Remote Weft client backed by HTTP requests.
|
|
@@ -59,15 +59,20 @@ export declare class HttpClient implements WeftClient {
|
|
|
59
59
|
readonly activity: WeftClientActivity;
|
|
60
60
|
constructor(options?: HttpClientOptions);
|
|
61
61
|
call<Name extends CatalogOperationName>(name: Name, input: CatalogOperationTypes[Name]['input']): Promise<CatalogOperationTypes[Name]['output']>;
|
|
62
|
-
start<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, options?:
|
|
63
|
-
start<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, options?:
|
|
62
|
+
start<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, options?: ClientStartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
63
|
+
start<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, options?: ClientStartOptions): Promise<ClientHandle>;
|
|
64
|
+
startOrSignal<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, signal: StartOrSignalSignal, options?: ClientStartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
65
|
+
startOrSignal<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, signal: StartOrSignalSignal, options?: ClientStartOptions): Promise<ClientHandle>;
|
|
64
66
|
schedule<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
65
67
|
schedule<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
66
68
|
get(id: string): Promise<WorkflowState | null>;
|
|
69
|
+
getHandle(id: string): Promise<ClientHandle | null>;
|
|
70
|
+
getHandle<TName extends KnownWorkflowName>(id: string): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>> | null>;
|
|
67
71
|
getSchedule(id: string): Promise<ScheduleSummary | null>;
|
|
68
72
|
list<const TAttributeKeys extends readonly AttributeFilterKey[] = readonly AttributeFilterKey[]>(filter?: TypedListFilter<TAttributeKeys>): Promise<PaginatedResult<WorkflowSummary>>;
|
|
69
73
|
listSchedules(filter?: ScheduleFilter): Promise<PaginatedResult<ScheduleSummary>>;
|
|
70
74
|
cancel(id: string): Promise<void>;
|
|
75
|
+
suspend(id: string): Promise<void>;
|
|
71
76
|
pauseSchedule(id: string): Promise<void>;
|
|
72
77
|
resumeSchedule(id: string): Promise<void>;
|
|
73
78
|
cancelSchedule(id: string): Promise<void>;
|
|
@@ -118,6 +123,7 @@ export declare class HttpClient implements WeftClient {
|
|
|
118
123
|
getRetentionOverview(): Promise<RetentionOverview>;
|
|
119
124
|
purge(filter?: ListFilter): Promise<PurgeResult>;
|
|
120
125
|
cancelAll(filter: ListFilter): Promise<BulkCancelResult>;
|
|
126
|
+
retryFailedAll(filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
121
127
|
signalAll(filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
122
128
|
deleteAll(filter: ListFilter): Promise<BulkDeleteResult>;
|
|
123
129
|
tagAll(filter: ListFilter, tags: string[]): Promise<BulkTagResult>;
|
|
@@ -26,11 +26,13 @@ import {
|
|
|
26
26
|
removeTagsRequest,
|
|
27
27
|
replayToRequest,
|
|
28
28
|
resumeScheduleRequest,
|
|
29
|
+
retryFailedAllWorkflowRequests,
|
|
29
30
|
setAttributesRequest,
|
|
30
31
|
signalAllWorkflowRequests,
|
|
31
32
|
signalWorkflowRequest,
|
|
32
33
|
submitCoordinatedUpdateRequest,
|
|
33
34
|
submitReviewRequest,
|
|
35
|
+
suspendWorkflowRequest,
|
|
34
36
|
tagAllWorkflowRequests,
|
|
35
37
|
timeoutWorkflowRequest,
|
|
36
38
|
untagAllWorkflowRequests,
|
|
@@ -43,7 +45,7 @@ import { HttpScheduleHandle } from "./http-schedule-handle.js";
|
|
|
43
45
|
import { openClientEventSubscription } from "./open-event-subscription.js";
|
|
44
46
|
import { buildScheduleListSearchParams } from "./schedule-list-search-params.js";
|
|
45
47
|
import { buildWorkflowListSearchParams } from "./search-params.js";
|
|
46
|
-
import { buildStartBody, scheduleSpecToWireFields } from "./start-body.js";
|
|
48
|
+
import { buildStartBody, buildStartOrSignalBody, scheduleSpecToWireFields } from "./start-body.js";
|
|
47
49
|
|
|
48
50
|
export class HttpClient {
|
|
49
51
|
baseUrl;
|
|
@@ -72,6 +74,10 @@ export class HttpClient {
|
|
|
72
74
|
});
|
|
73
75
|
return new HttpHandle(response.id, this);
|
|
74
76
|
}
|
|
77
|
+
async startOrSignal(type, input, signal, options) {
|
|
78
|
+
const body = buildStartOrSignalBody(type, input, signal, options), response = await request(this.baseUrl, "/workflows/start-or-signal", this.headers, { method: "POST", body: JSON.stringify(body) });
|
|
79
|
+
return new HttpHandle(response.id, this, response.outcome);
|
|
80
|
+
}
|
|
75
81
|
async schedule(type, input, spec, options) {
|
|
76
82
|
const body = {
|
|
77
83
|
type,
|
|
@@ -93,6 +99,11 @@ export class HttpClient {
|
|
|
93
99
|
async get(id) {
|
|
94
100
|
return getWorkflowRequest(this, id);
|
|
95
101
|
}
|
|
102
|
+
async getHandle(id) {
|
|
103
|
+
if (await getWorkflowRequest(this, id) === null)
|
|
104
|
+
return null;
|
|
105
|
+
return new HttpHandle(id, this);
|
|
106
|
+
}
|
|
96
107
|
async getSchedule(id) {
|
|
97
108
|
return getScheduleRequest(this, id);
|
|
98
109
|
}
|
|
@@ -107,6 +118,9 @@ export class HttpClient {
|
|
|
107
118
|
async cancel(id) {
|
|
108
119
|
return cancelWorkflowRequest(this, id);
|
|
109
120
|
}
|
|
121
|
+
async suspend(id) {
|
|
122
|
+
return suspendWorkflowRequest(this, id);
|
|
123
|
+
}
|
|
110
124
|
async pauseSchedule(id) {
|
|
111
125
|
return pauseScheduleRequest(this, id);
|
|
112
126
|
}
|
|
@@ -196,6 +210,9 @@ export class HttpClient {
|
|
|
196
210
|
async cancelAll(filter) {
|
|
197
211
|
return cancelAllWorkflowRequests(this, filter);
|
|
198
212
|
}
|
|
213
|
+
async retryFailedAll(filter) {
|
|
214
|
+
return retryFailedAllWorkflowRequests(this, filter);
|
|
215
|
+
}
|
|
199
216
|
async signalAll(filter, name, payload) {
|
|
200
217
|
return signalAllWorkflowRequests(this, filter, name, payload);
|
|
201
218
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type FaultCode } from '../core/fault-code.ts';
|
|
2
2
|
import type { FailureCategory } from '../core/types/identity.ts';
|
|
3
|
-
import { WeftError } from '../core/weft-error.ts';
|
|
3
|
+
import { WeftError, type WeftErrorCode } from '../core/weft-error.ts';
|
|
4
4
|
import type { WebSocketFactory } from './event-stream-transport.ts';
|
|
5
5
|
/**
|
|
6
6
|
* Configuration for the HTTP client.
|
|
@@ -94,8 +94,18 @@ export declare class HttpClientError extends WeftError<'HttpClientError'> {
|
|
|
94
94
|
* carried on the wire; `undefined` when `faultCode` is `undefined`.
|
|
95
95
|
*/
|
|
96
96
|
readonly category?: FailureCategory | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* The fine-grained originating public {@link WeftErrorCode} the server
|
|
99
|
+
* attached (e.g. `WorkflowNotFoundError`), when the structured fault carried
|
|
100
|
+
* one. This is what makes cross-transport branching work: a producer can call
|
|
101
|
+
* `isWeftFault(error, 'WorkflowNotFoundError')` and have it match over HTTP
|
|
102
|
+
* exactly as it matches the in-process typed error. `undefined` when the fault
|
|
103
|
+
* carried only the coarse {@link faultCode} (most faults) or no structured body.
|
|
104
|
+
*/
|
|
105
|
+
readonly weftCode?: WeftErrorCode | undefined;
|
|
97
106
|
constructor(status: number, message: string, options?: {
|
|
98
107
|
faultCode?: FaultCode | undefined;
|
|
108
|
+
weftCode?: WeftErrorCode | undefined;
|
|
99
109
|
});
|
|
100
110
|
}
|
|
101
111
|
export declare function request<T>(baseUrl: string, path: string, baseHeaders: Record<string, string>, options?: RequestInit): Promise<T>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { resolveConnection } from "../connection.js";
|
|
2
2
|
import { failureCategoryForFaultCode, isFaultCode } from "../core/fault-code.js";
|
|
3
|
-
import { WeftError } from "../core/weft-error.js";
|
|
3
|
+
import { isWeftErrorCode, WeftError } from "../core/weft-error.js";
|
|
4
4
|
export function resolveHttpClientConnection(options) {
|
|
5
5
|
const connection = resolveConnection({
|
|
6
6
|
includeRunLockfile: !1,
|
|
@@ -16,11 +16,13 @@ export class HttpClientError extends WeftError {
|
|
|
16
16
|
status;
|
|
17
17
|
faultCode;
|
|
18
18
|
category;
|
|
19
|
+
weftCode;
|
|
19
20
|
constructor(status, message, options) {
|
|
20
21
|
super("HttpClientError", message);
|
|
21
22
|
this.status = status;
|
|
22
23
|
this.faultCode = options?.faultCode;
|
|
23
24
|
this.category = options?.faultCode === void 0 ? void 0 : failureCategoryForFaultCode(options.faultCode);
|
|
25
|
+
this.weftCode = options?.weftCode;
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
function buildRequestHeaders(baseHeaders, options) {
|
|
@@ -45,15 +47,23 @@ function isStructuredErrorBody(value) {
|
|
|
45
47
|
return !1;
|
|
46
48
|
return typeof error.message === "string";
|
|
47
49
|
}
|
|
50
|
+
function weftCodeFromData(data) {
|
|
51
|
+
if (data === null || typeof data !== "object")
|
|
52
|
+
return;
|
|
53
|
+
const candidate = data.weftCode;
|
|
54
|
+
return isWeftErrorCode(candidate) ? candidate : void 0;
|
|
55
|
+
}
|
|
48
56
|
async function parseErrorBody(response) {
|
|
49
57
|
try {
|
|
50
58
|
const body = await response.json();
|
|
51
59
|
if (isStructuredErrorBody(body)) {
|
|
52
|
-
const { code, message } = body.error;
|
|
53
|
-
return isFaultCode(code) ? {
|
|
60
|
+
const { code, message, data } = body.error, weftCode = weftCodeFromData(data), base = weftCode === void 0 ? { message } : { message, weftCode };
|
|
61
|
+
return isFaultCode(code) ? { ...base, faultCode: code } : base;
|
|
62
|
+
}
|
|
63
|
+
if (isFlatErrorBody(body) && body.error) {
|
|
64
|
+
const weftCode = isWeftErrorCode(body.weftCode) ? body.weftCode : void 0;
|
|
65
|
+
return weftCode === void 0 ? { message: body.error } : { message: body.error, weftCode };
|
|
54
66
|
}
|
|
55
|
-
if (isFlatErrorBody(body) && body.error)
|
|
56
|
-
return { message: body.error };
|
|
57
67
|
return { message: response.statusText };
|
|
58
68
|
} catch {
|
|
59
69
|
return { message: response.statusText };
|
|
@@ -64,8 +74,8 @@ export async function request(baseUrl, path, baseHeaders, options) {
|
|
|
64
74
|
if (response.status === 404 && (!options?.method || options.method === "GET"))
|
|
65
75
|
return null;
|
|
66
76
|
if (!response.ok) {
|
|
67
|
-
const { message, faultCode } = await parseErrorBody(response);
|
|
68
|
-
throw new HttpClientError(response.status, message, { faultCode });
|
|
77
|
+
const { message, faultCode, weftCode } = await parseErrorBody(response);
|
|
78
|
+
throw new HttpClientError(response.status, message, { faultCode, weftCode });
|
|
69
79
|
}
|
|
70
80
|
if (response.status === 204)
|
|
71
81
|
return;
|
package/dist/client/index.d.ts
CHANGED
|
@@ -11,5 +11,5 @@ export type { WorkflowEventTail } from './event-tail.ts';
|
|
|
11
11
|
export { HttpClient } from './http-client.ts';
|
|
12
12
|
export { HttpClientError } from './http-request.ts';
|
|
13
13
|
export type { HttpClientOptions } from './http-request.ts';
|
|
14
|
-
export type { ClientHandle, ClientScheduleHandle, UpdateResult, WeftClient, WeftClientActivity, } from './interface.ts';
|
|
14
|
+
export type { ClientHandle, ClientScheduleHandle, ClientStartOptions, UpdateResult, WeftClient, WeftClientActivity, } from './interface.ts';
|
|
15
15
|
export type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow-name-typing.ts';
|
|
@@ -7,10 +7,32 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { CatalogOperationName, CatalogOperationTypes, WeftClient as CatalogOperations } from '../cli/generated/operation-client.generated.ts';
|
|
9
9
|
import type { StoredStreamChunk } from '../core/context.ts';
|
|
10
|
+
import type { StartOrSignalOutcome as EngineStartOrSignalOutcome } from '../core/engine/handles.ts';
|
|
10
11
|
import type { TypedEventTarget, WeftEventMap } from '../core/events.ts';
|
|
11
|
-
import type { AttributeFilterKey, BulkCancelResult, BulkDeleteResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PaginatedResult, PurgeResult, QueryDefinition, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleFilter, ScheduleOptions, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions, StartOptions, SubmitReviewOptions, TypedListFilter, UpdateDefinition, WorkflowEvent, WorkflowInput, WorkflowOutput, WorkflowRegistry, WorkflowReplay, WorkflowState, WorkflowSummary, WorkflowTimelineEntry } from '../core/types.ts';
|
|
12
|
+
import type { AttributeFilterKey, BulkCancelResult, BulkDeleteResult, BulkRetryFailedResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PaginatedResult, PurgeResult, QueryDefinition, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleFilter, ScheduleOptions, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions, StartOptions, StartOrSignalSignal, SubmitReviewOptions, TypedListFilter, UpdateDefinition, WorkflowEvent, WorkflowInput, WorkflowOutput, WorkflowRegistry, WorkflowReplay, WorkflowState, WorkflowSummary, WorkflowTimelineEntry } from '../core/types.ts';
|
|
12
13
|
import type { WorkflowEventTail } from './event-tail.ts';
|
|
13
14
|
import type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow-name-typing.ts';
|
|
15
|
+
/**
|
|
16
|
+
* Start options accepted by remote-capable clients. These options intentionally
|
|
17
|
+
* exclude inline-only engine features such as `defer` and per-run `services`
|
|
18
|
+
* because they cannot be serialized over the HTTP transport.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* import type { ClientStartOptions } from '@lostgradient/weft/client';
|
|
23
|
+
*
|
|
24
|
+
* const options: ClientStartOptions = {
|
|
25
|
+
* id: 'welcome-ada',
|
|
26
|
+
* tags: ['onboarding'],
|
|
27
|
+
* };
|
|
28
|
+
* void options;
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export type ClientStartOptions = Omit<StartOptions, 'defer' | 'services'> & {
|
|
32
|
+
readonly defer?: never;
|
|
33
|
+
readonly services?: never;
|
|
34
|
+
};
|
|
35
|
+
export type StartOrSignalOutcome = EngineStartOrSignalOutcome;
|
|
14
36
|
/**
|
|
15
37
|
* A reference to a workflow that provides convenience methods.
|
|
16
38
|
*
|
|
@@ -52,10 +74,30 @@ import type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow
|
|
|
52
74
|
export interface ClientHandle<TResult = unknown> extends TypedEventTarget<WeftEventMap>, Disposable {
|
|
53
75
|
/** The workflow's unique identifier. */
|
|
54
76
|
readonly id: string;
|
|
77
|
+
/**
|
|
78
|
+
* For a {@link WeftClient.startOrSignal} handle, which atomic path the call
|
|
79
|
+
* took (see {@link StartOrSignalOutcome}); `undefined` on handles from any
|
|
80
|
+
* other call (`start`, `getHandle`, `resume`, …).
|
|
81
|
+
*/
|
|
82
|
+
readonly outcome: StartOrSignalOutcome | undefined;
|
|
55
83
|
/** Resolves when the workflow completes (or rejects on failure). */
|
|
56
84
|
result(): Promise<TResult>;
|
|
57
85
|
/** Cancel this workflow. */
|
|
58
86
|
cancel(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Suspend this workflow without terminating it: it moves to the non-terminal
|
|
89
|
+
* `suspended` status, keeps its checkpoint, and is later resumable via
|
|
90
|
+
* {@link ClientHandle.resume}. Unlike {@link ClientHandle.cancel}, it does not
|
|
91
|
+
* run cancel handlers and does not settle `result()`. Inline execution mode
|
|
92
|
+
* only (worker-mode servers fault with `Unprocessable`).
|
|
93
|
+
*/
|
|
94
|
+
suspend(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Resume this workflow from its persisted checkpoint after a
|
|
97
|
+
* {@link ClientHandle.suspend} (or after a process restart left it running).
|
|
98
|
+
* `result()` resolves when the resumed run completes.
|
|
99
|
+
*/
|
|
100
|
+
resume(): Promise<void>;
|
|
59
101
|
/** Send a named signal with an optional payload. */
|
|
60
102
|
signal(name: SignalDefinition): Promise<void>;
|
|
61
103
|
signal<TInput>(name: SignalDefinition<TInput>, payload: TInput, options?: SignalDeliveryOptions): Promise<void>;
|
|
@@ -189,9 +231,40 @@ export interface WeftClient {
|
|
|
189
231
|
* returned handle's `result()` to its output type. Without augmentation the
|
|
190
232
|
* permissive string-name overload applies, so the client stays usable with
|
|
191
233
|
* plain string names and no hard dependency on codegen.
|
|
234
|
+
*
|
|
235
|
+
* Pass `options.idempotencyKey` for at-most-once starts: a repeated key returns
|
|
236
|
+
* a handle to the existing run rather than starting a second. Conflicts (a
|
|
237
|
+
* duplicate `id`, or a key whose run was purged) are transport-dependent:
|
|
238
|
+
* `LocalClient` throws the typed error (`WorkflowAlreadyExistsError` /
|
|
239
|
+
* `IdempotencyKeyPurgedError`), while `HttpClient` throws `HttpClientError`
|
|
240
|
+
* with `status === 409` and `faultCode === 'Conflict'`.
|
|
241
|
+
*/
|
|
242
|
+
start<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, options?: ClientStartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
243
|
+
start<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, options?: ClientStartOptions): Promise<ClientHandle>;
|
|
244
|
+
/**
|
|
245
|
+
* Atomically start a workflow or signal it if it already exists
|
|
246
|
+
* (signal-with-start). An absent target is created and delivered the signal in
|
|
247
|
+
* one batch; a non-terminal target (running, pending, or suspended) is
|
|
248
|
+
* signalled; a terminal target is rejected as a conflict.
|
|
249
|
+
*
|
|
250
|
+
* The rejection shape is transport-dependent: `LocalClient` throws the typed
|
|
251
|
+
* `StartOrSignalConflictError` (and `IdempotencyKeyPurgedError` for a spent
|
|
252
|
+
* key), while `HttpClient` throws `HttpClientError` with `status === 409` and
|
|
253
|
+
* `faultCode === 'Conflict'`. Branch on `faultCode`/`status` for code that runs
|
|
254
|
+
* over either transport.
|
|
255
|
+
*
|
|
256
|
+
* Pass `options.idempotencyKey` to dedup independent callers such as retried
|
|
257
|
+
* webhooks: concurrent same-key callers converge on one workflow and one
|
|
258
|
+
* delivered signal, with the signal id derived from the key. Convergence needs a
|
|
259
|
+
* shared workflow identity — `options.idempotencyKey` (id-free) or
|
|
260
|
+
* `options.id` + `signal.signalId`. A bare `signal.signalId` with neither is an
|
|
261
|
+
* atomic start-with-one-signal that does NOT converge concurrent callers (each
|
|
262
|
+
* gets its own run). Supply exactly one of `signal.signalId` or
|
|
263
|
+
* `options.idempotencyKey`; `options.id` and `options.idempotencyKey` are
|
|
264
|
+
* mutually exclusive.
|
|
192
265
|
*/
|
|
193
|
-
|
|
194
|
-
|
|
266
|
+
startOrSignal<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, signal: StartOrSignalSignal, options?: ClientStartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
267
|
+
startOrSignal<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, signal: StartOrSignalSignal, options?: ClientStartOptions): Promise<ClientHandle>;
|
|
195
268
|
/**
|
|
196
269
|
* Register a recurring schedule (cron string or interval spec) and return a
|
|
197
270
|
* handle to it.
|
|
@@ -204,6 +277,17 @@ export interface WeftClient {
|
|
|
204
277
|
schedule<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
205
278
|
/** Get the full persisted state of a workflow, or `null` if not found. */
|
|
206
279
|
get(id: string): Promise<WorkflowState | null>;
|
|
280
|
+
/**
|
|
281
|
+
* Re-attach a {@link ClientHandle} to an existing workflow by id, or `null`
|
|
282
|
+
* when none exists — handle ergonomics for a run you did not start yourself.
|
|
283
|
+
* `result()` on an already-terminal run resolves (or rejects) from persisted
|
|
284
|
+
* state, so a fire-and-forget run can be observed later without hand-rolling
|
|
285
|
+
* terminal-status polling. Supplying the workflow name as a type argument
|
|
286
|
+
* (`getHandle<'my-workflow'>(id)`) narrows `result()` to that workflow's output
|
|
287
|
+
* when the {@link WorkflowRegistry} is augmented; the name is a type hint only.
|
|
288
|
+
*/
|
|
289
|
+
getHandle(id: string): Promise<ClientHandle | null>;
|
|
290
|
+
getHandle<TName extends KnownWorkflowName>(id: string): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>> | null>;
|
|
207
291
|
/** Get the current summary of a recurring schedule, or `null` if not found. */
|
|
208
292
|
getSchedule(id: string): Promise<ScheduleSummary | null>;
|
|
209
293
|
/** List workflows with optional filtering and pagination. */
|
|
@@ -212,6 +296,12 @@ export interface WeftClient {
|
|
|
212
296
|
listSchedules(filter?: ScheduleFilter): Promise<PaginatedResult<ScheduleSummary>>;
|
|
213
297
|
/** Cancel a running workflow. */
|
|
214
298
|
cancel(id: string): Promise<void>;
|
|
299
|
+
/**
|
|
300
|
+
* Suspend a running workflow without terminating it. It moves to the
|
|
301
|
+
* non-terminal `suspended` status, keeps its checkpoint, and is later
|
|
302
|
+
* resumable via {@link WeftClient.resume}. Inline execution mode only.
|
|
303
|
+
*/
|
|
304
|
+
suspend(id: string): Promise<void>;
|
|
215
305
|
/** Pause a recurring schedule. */
|
|
216
306
|
pauseSchedule(id: string): Promise<void>;
|
|
217
307
|
/** Resume a recurring schedule. */
|
|
@@ -240,7 +330,11 @@ export interface WeftClient {
|
|
|
240
330
|
}): Promise<unknown>;
|
|
241
331
|
/** Out-of-band ("async") activity completion by task token. See {@link WeftClientActivity}. */
|
|
242
332
|
readonly activity: WeftClientActivity;
|
|
243
|
-
/**
|
|
333
|
+
/**
|
|
334
|
+
* Re-drive a workflow from its persisted checkpoint. Accepts a workflow that
|
|
335
|
+
* was explicitly suspended (`suspend(id)`) or one left `'running'` by a prior
|
|
336
|
+
* process; throws for a status that cannot be resumed (terminal or pending).
|
|
337
|
+
*/
|
|
244
338
|
resume(id: string): Promise<ClientHandle>;
|
|
245
339
|
/** Recover all interrupted workflows. */
|
|
246
340
|
recoverAll(): Promise<ClientHandle[]>;
|
|
@@ -288,6 +382,8 @@ export interface WeftClient {
|
|
|
288
382
|
purge(filter?: ListFilter): Promise<PurgeResult>;
|
|
289
383
|
/** Cancel all running or pending workflows that match a filter. */
|
|
290
384
|
cancelAll(filter: ListFilter): Promise<BulkCancelResult>;
|
|
385
|
+
/** Retry all failed workflows that match a filter. */
|
|
386
|
+
retryFailedAll(filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
291
387
|
/** Signal all running or pending workflows that match a filter. */
|
|
292
388
|
signalAll(filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
293
389
|
/** Delete all matching terminal workflows. */
|
package/dist/client/local.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { type CatalogOperationName, type CatalogOperationTypes, type WeftClient as CatalogOperations } from '../cli/generated/operation-client.generated.ts';
|
|
11
11
|
import type { Engine } from '../core/engine.ts';
|
|
12
|
-
import type { AttributeFilterKey, BulkCancelResult, BulkDeleteResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PaginatedResult, PurgeResult, QueryDefinition, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleFilter, ScheduleOptions, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions, StartOptions, SubmitReviewOptions, TypedListFilter, UpdateDefinition, WorkflowEvent, WorkflowInput, WorkflowOutput, WorkflowRegistry, WorkflowReplay, WorkflowState, WorkflowSummary, WorkflowTimelineEntry } from '../core/types.ts';
|
|
12
|
+
import type { AttributeFilterKey, BulkCancelResult, BulkDeleteResult, BulkRetryFailedResult, BulkSignalResult, BulkTagResult, CoordinatedUpdateResult, ForkOptions, ListFilter, PaginatedResult, PurgeResult, QueryDefinition, RetentionOverview, ReviewListEntry, ReviewListFilter, ScheduleFilter, ScheduleOptions, ScheduleSpec, ScheduleSummary, SearchAttributeValue, SignalDefinition, SignalDeliveryOptions, StartOptions, StartOrSignalSignal, SubmitReviewOptions, TypedListFilter, UpdateDefinition, WorkflowEvent, WorkflowInput, WorkflowOutput, WorkflowRegistry, WorkflowReplay, WorkflowState, WorkflowSummary, WorkflowTimelineEntry } from '../core/types.ts';
|
|
13
13
|
import type { WorkflowEventTail } from './event-tail.ts';
|
|
14
14
|
import type { ClientHandle, ClientScheduleHandle, UpdateResult, WeftClient, WeftClientActivity } from './interface.ts';
|
|
15
15
|
import type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow-name-typing.ts';
|
|
@@ -57,13 +57,18 @@ export declare class LocalClient implements WeftClient {
|
|
|
57
57
|
call<Name extends CatalogOperationName>(name: Name, input: CatalogOperationTypes[Name]['input']): Promise<CatalogOperationTypes[Name]['output']>;
|
|
58
58
|
start<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, options?: StartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
59
59
|
start<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, options?: StartOptions): Promise<ClientHandle>;
|
|
60
|
+
startOrSignal<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, signal: StartOrSignalSignal, options?: StartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
61
|
+
startOrSignal<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, signal: StartOrSignalSignal, options?: StartOptions): Promise<ClientHandle>;
|
|
60
62
|
schedule<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
61
63
|
schedule<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
62
64
|
get(id: string): Promise<WorkflowState | null>;
|
|
65
|
+
getHandle(id: string): Promise<ClientHandle | null>;
|
|
66
|
+
getHandle<TName extends KnownWorkflowName>(id: string): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>> | null>;
|
|
63
67
|
getSchedule(id: string): Promise<ScheduleSummary | null>;
|
|
64
68
|
list<const TAttributeKeys extends readonly AttributeFilterKey[] = readonly AttributeFilterKey[]>(filter?: TypedListFilter<TAttributeKeys>): Promise<PaginatedResult<WorkflowSummary>>;
|
|
65
69
|
listSchedules(filter?: ScheduleFilter): Promise<PaginatedResult<ScheduleSummary>>;
|
|
66
70
|
cancel(id: string): Promise<void>;
|
|
71
|
+
suspend(id: string): Promise<void>;
|
|
67
72
|
pauseSchedule(id: string): Promise<void>;
|
|
68
73
|
resumeSchedule(id: string): Promise<void>;
|
|
69
74
|
cancelSchedule(id: string): Promise<void>;
|
|
@@ -103,6 +108,7 @@ export declare class LocalClient implements WeftClient {
|
|
|
103
108
|
getRetentionOverview(): Promise<RetentionOverview>;
|
|
104
109
|
purge(filter?: ListFilter): Promise<PurgeResult>;
|
|
105
110
|
cancelAll(filter: ListFilter): Promise<BulkCancelResult>;
|
|
111
|
+
retryFailedAll(filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
106
112
|
signalAll(filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
107
113
|
deleteAll(filter: ListFilter): Promise<BulkDeleteResult>;
|
|
108
114
|
tagAll(filter: ListFilter, tags: string[]): Promise<BulkTagResult>;
|
package/dist/client/local.js
CHANGED
|
@@ -12,8 +12,8 @@ import { createLocalWorkflowEventTail } from "./local-event-tail.js";
|
|
|
12
12
|
|
|
13
13
|
class LocalHandle extends WorkflowHandleDelegation {
|
|
14
14
|
#handle;
|
|
15
|
-
constructor(handle, client) {
|
|
16
|
-
super(handle.id, client);
|
|
15
|
+
constructor(handle, client, outcome) {
|
|
16
|
+
super(handle.id, client, outcome);
|
|
17
17
|
this.#handle = handle;
|
|
18
18
|
}
|
|
19
19
|
async result() {
|
|
@@ -53,6 +53,10 @@ export class LocalClient {
|
|
|
53
53
|
const handle = await this.#engine.start(type, input, options);
|
|
54
54
|
return new LocalHandle(handle, this);
|
|
55
55
|
}
|
|
56
|
+
async startOrSignal(type, input, signal, options) {
|
|
57
|
+
const { handle, outcome } = await this.#engine.startOrSignal(type, input, signal, options);
|
|
58
|
+
return new LocalHandle(handle, this, outcome);
|
|
59
|
+
}
|
|
56
60
|
async schedule(type, input, spec, options) {
|
|
57
61
|
const handle = await this.#engine.schedule(type, input, spec, options);
|
|
58
62
|
return new LocalScheduleHandle(handle.id, this);
|
|
@@ -60,6 +64,11 @@ export class LocalClient {
|
|
|
60
64
|
async get(id) {
|
|
61
65
|
return this.#engine.get(id);
|
|
62
66
|
}
|
|
67
|
+
async getHandle(id) {
|
|
68
|
+
if (await this.#engine.get(id) === null)
|
|
69
|
+
return null;
|
|
70
|
+
return new LocalHandle(this.#engine.getHandle(id), this);
|
|
71
|
+
}
|
|
63
72
|
async getSchedule(id) {
|
|
64
73
|
return this.#engine.getSchedule(id);
|
|
65
74
|
}
|
|
@@ -72,6 +81,9 @@ export class LocalClient {
|
|
|
72
81
|
async cancel(id) {
|
|
73
82
|
return this.#engine.cancel(id);
|
|
74
83
|
}
|
|
84
|
+
async suspend(id) {
|
|
85
|
+
return this.#engine.suspend(id);
|
|
86
|
+
}
|
|
75
87
|
async pauseSchedule(id) {
|
|
76
88
|
return this.#engine.pauseSchedule(id);
|
|
77
89
|
}
|
|
@@ -151,6 +163,9 @@ export class LocalClient {
|
|
|
151
163
|
async cancelAll(filter) {
|
|
152
164
|
return this.#engine.cancelAll(filter);
|
|
153
165
|
}
|
|
166
|
+
async retryFailedAll(filter) {
|
|
167
|
+
return this.#engine.retryFailedAll(filter);
|
|
168
|
+
}
|
|
154
169
|
async signalAll(filter, name, payload) {
|
|
155
170
|
return this.#engine.signalAll(filter, name, payload);
|
|
156
171
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ScheduleSpec,
|
|
1
|
+
import type { ScheduleSpec, StartOrSignalSignal } from '../core/types.ts';
|
|
2
|
+
import type { ClientStartOptions } from './interface.ts';
|
|
2
3
|
export declare function setIfDefined(body: Record<string, unknown>, key: string, value: unknown): void;
|
|
3
4
|
/**
|
|
4
5
|
* Translate a schedule recurrence specification into the wire body fields the
|
|
@@ -6,4 +7,10 @@ export declare function setIfDefined(body: Record<string, unknown>, key: string,
|
|
|
6
7
|
* `cronExpression`; an interval spec is sent as `every`.
|
|
7
8
|
*/
|
|
8
9
|
export declare function scheduleSpecToWireFields(spec: string | ScheduleSpec): Record<string, unknown>;
|
|
9
|
-
export declare function buildStartBody(type: string, input: unknown, options?:
|
|
10
|
+
export declare function buildStartBody(type: string, input: unknown, options?: ClientStartOptions): Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* Build the wire body for `weft.workflows.startorsignal`. Flattens the signal
|
|
13
|
+
* spec into `signalName` / `signalPayload` / `signalId` and carries the same
|
|
14
|
+
* start options as {@link buildStartBody}.
|
|
15
|
+
*/
|
|
16
|
+
export declare function buildStartOrSignalBody(type: string, input: unknown, signal: StartOrSignalSignal, options?: ClientStartOptions): Record<string, unknown>;
|
|
@@ -9,15 +9,24 @@ export function scheduleSpecToWireFields(spec) {
|
|
|
9
9
|
return { every: spec.every };
|
|
10
10
|
return { cronExpression: spec.cron };
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
if (options?.idempotencyKey !== void 0)
|
|
14
|
-
throw Error("idempotencyKey is not supported over HttpClient because the start workflow HTTP protocol does not implement start idempotency");
|
|
15
|
-
const body = { type, input };
|
|
12
|
+
function applyStartOptionsToBody(body, options) {
|
|
16
13
|
setIfDefined(body, "id", options?.id);
|
|
17
14
|
setIfDefined(body, "executionTimeout", options?.executionTimeout);
|
|
18
15
|
setIfDefined(body, "startAt", options?.startAt);
|
|
19
16
|
setIfDefined(body, "startAfter", options?.startAfter);
|
|
20
17
|
setIfDefined(body, "tags", options?.tags);
|
|
18
|
+
setIfDefined(body, "idempotencyKey", options?.idempotencyKey);
|
|
21
19
|
setIfDefined(body, "searchAttributes", options?.searchAttributes);
|
|
20
|
+
}
|
|
21
|
+
export function buildStartBody(type, input, options) {
|
|
22
|
+
const body = { type, input };
|
|
23
|
+
applyStartOptionsToBody(body, options);
|
|
24
|
+
return body;
|
|
25
|
+
}
|
|
26
|
+
export function buildStartOrSignalBody(type, input, signal, options) {
|
|
27
|
+
const body = { type, input, signalName: signal.name };
|
|
28
|
+
setIfDefined(body, "signalPayload", signal.payload);
|
|
29
|
+
setIfDefined(body, "signalId", signal.signalId);
|
|
30
|
+
applyStartOptionsToBody(body, options);
|
|
22
31
|
return body;
|
|
23
32
|
}
|
|
@@ -29,6 +29,9 @@ export declare function createCheckpoint(workflowId: WorkflowId, version: string
|
|
|
29
29
|
export declare function advanceCheckpoint(checkpoint: Checkpoint, locals: Record<string, unknown>, options?: {
|
|
30
30
|
searchAttributes?: Record<string, SearchAttributeValue>;
|
|
31
31
|
accumulatedResults?: Array<[number, unknown]>;
|
|
32
|
+
accumulatedResultReplayWatermark?: number;
|
|
33
|
+
workerReplaySignatures?: Checkpoint['workerReplaySignatures'];
|
|
34
|
+
workerReplayFailures?: Checkpoint['workerReplayFailures'];
|
|
32
35
|
now?: number;
|
|
33
36
|
}): Checkpoint;
|
|
34
37
|
/**
|