@lostgradient/weft 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -24
- package/dist/cli/conformance.js +7 -1
- package/dist/cli/generated/operation-client.generated.d.ts +28 -13
- package/dist/cli/generated/operation-client.generated.js +1 -0
- package/dist/cli/help-text.d.ts +1 -1
- package/dist/cli/help-text.js +1 -0
- package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
- package/dist/cli/operation-catalog-snapshot.js +11 -0
- package/dist/cli/parse-schedule-arguments.js +3 -1
- package/dist/cli/schedule.js +2 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli-main.js +79 -78
- package/dist/client/handle-delegation.d.ts +3 -2
- package/dist/client/handle-delegation.js +3 -1
- package/dist/client/http-client-requests.d.ts +2 -1
- package/dist/client/http-client-requests.js +7 -0
- package/dist/client/http-client.d.ts +9 -6
- package/dist/client/http-client.js +10 -1
- package/dist/client/http-request.d.ts +11 -1
- package/dist/client/http-request.js +17 -7
- package/dist/client/index.d.ts +1 -1
- package/dist/client/interface.d.ts +61 -5
- package/dist/client/local-handles.d.ts +22 -0
- package/dist/client/local-handles.js +23 -0
- package/dist/client/local.d.ts +6 -3
- package/dist/client/local.js +12 -26
- package/dist/client/start-body.d.ts +4 -3
- package/dist/core/byte-arrays.d.ts +5 -0
- package/dist/core/byte-arrays.js +5 -0
- package/dist/core/checkpoint/lifecycle.d.ts +3 -0
- package/dist/core/checkpoint/lifecycle.js +9 -4
- package/dist/core/checkpoint/serialization.js +12 -5
- package/dist/core/codec/extension-codec.d.ts +16 -0
- package/dist/core/codec/extension-codec.js +100 -6
- package/dist/core/context/activity-retry-state.d.ts +38 -0
- package/dist/core/context/activity-retry-state.js +89 -0
- package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
- package/dist/core/context/activity-schedule-to-close.js +69 -0
- package/dist/core/context/child-workflow-pipe.d.ts +5 -5
- package/dist/core/context/child-workflow-pipe.js +15 -2
- package/dist/core/context/context-presence.d.ts +19 -0
- package/dist/core/context/context-presence.js +13 -0
- package/dist/core/context/durable-operations.d.ts +25 -0
- package/dist/core/context/durable-operations.js +64 -0
- package/dist/core/context/index.d.ts +9 -5
- package/dist/core/context/index.js +17 -12
- package/dist/core/context/internals.d.ts +20 -0
- package/dist/core/context/internals.js +3 -1
- package/dist/core/context/operation-request.d.ts +35 -0
- package/dist/core/context/parallel-cache-entry.d.ts +14 -5
- package/dist/core/context/run-operation.d.ts +6 -1
- package/dist/core/context/run-operation.js +41 -87
- package/dist/core/context/session-state.js +7 -8
- package/dist/core/context/speculative-child.js +2 -0
- package/dist/core/context/types.d.ts +15 -0
- package/dist/core/context/version-patching.d.ts +8 -0
- package/dist/core/context/version-patching.js +40 -0
- package/dist/core/context/workflow-logger.d.ts +98 -0
- package/dist/core/context/workflow-logger.js +68 -0
- package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
- package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
- package/dist/core/engine/activity-per-attempt-timeout.d.ts +46 -0
- package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
- package/dist/core/engine/activity-reconciliation.d.ts +1 -0
- package/dist/core/engine/activity-reconciliation.js +12 -1
- package/dist/core/engine/activity-resolution.d.ts +23 -0
- package/dist/core/engine/activity-resolution.js +37 -0
- package/dist/core/engine/aggregate.js +66 -30
- package/dist/core/engine/async-activity-completion.d.ts +23 -6
- package/dist/core/engine/async-activity-completion.js +53 -12
- package/dist/core/engine/attributes-tags.js +9 -4
- package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
- package/dist/core/engine/bulk-operations-purge.js +38 -3
- package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
- package/dist/core/engine/bulk-operations-shared.js +8 -2
- package/dist/core/engine/bulk-operations.d.ts +4 -1
- package/dist/core/engine/bulk-operations.js +235 -24
- package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
- package/dist/core/engine/callback-creators-bundles.js +30 -2
- package/dist/core/engine/callback-creators-core.js +6 -4
- package/dist/core/engine/callback-creators-router.js +10 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
- package/dist/core/engine/callback-creators-schedule.js +12 -8
- package/dist/core/engine/candidate-read-batching.d.ts +6 -0
- package/dist/core/engine/candidate-read-batching.js +1 -0
- package/dist/core/engine/checkpoint-io.js +61 -25
- package/dist/core/engine/checkpoint-reads.js +3 -2
- package/dist/core/engine/checkpoint-replay.d.ts +20 -0
- package/dist/core/engine/checkpoint-replay.js +242 -0
- package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
- package/dist/core/engine/checkpoint-side-effects.js +35 -0
- package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
- package/dist/core/engine/child-workflow-cancellation.js +40 -0
- package/dist/core/engine/child-workflow.js +27 -4
- package/dist/core/engine/condition-waiters.d.ts +14 -0
- package/dist/core/engine/condition-waiters.js +5 -0
- package/dist/core/engine/construction.d.ts +3 -0
- package/dist/core/engine/construction.js +21 -8
- package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
- package/dist/core/engine/coordination-branch-executors.js +107 -0
- package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
- package/dist/core/engine/deferred-consume-envelope.js +14 -0
- package/dist/core/engine/disposal.js +13 -0
- package/dist/core/engine/engine-create-types.d.ts +14 -4
- package/dist/core/engine/engine-internal-types.d.ts +26 -3
- package/dist/core/engine/errors.d.ts +47 -0
- package/dist/core/engine/errors.js +20 -0
- package/dist/core/engine/event-log-compaction.d.ts +8 -0
- package/dist/core/engine/event-log-compaction.js +20 -2
- package/dist/core/engine/fenced-write.d.ts +65 -0
- package/dist/core/engine/fenced-write.js +71 -0
- package/dist/core/engine/finalizer-state.d.ts +28 -0
- package/dist/core/engine/finalizer-state.js +16 -0
- package/dist/core/engine/handles.d.ts +8 -0
- package/dist/core/engine/index.d.ts +34 -16
- package/dist/core/engine/index.js +136 -9
- package/dist/core/engine/inline-parking.js +3 -2
- package/dist/core/engine/internals.d.ts +107 -3
- package/dist/core/engine/lease-codec.d.ts +35 -0
- package/dist/core/engine/lease-codec.js +32 -0
- package/dist/core/engine/lease-deposition.d.ts +66 -0
- package/dist/core/engine/lease-deposition.js +10 -0
- package/dist/core/engine/lease-errors.d.ts +99 -0
- package/dist/core/engine/lease-errors.js +30 -0
- package/dist/core/engine/lease-manager.d.ts +114 -0
- package/dist/core/engine/lease-manager.js +135 -0
- package/dist/core/engine/lifecycle/persist.js +10 -32
- package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
- package/dist/core/engine/lifecycle/recovered-services.js +18 -3
- package/dist/core/engine/lifecycle/resume.js +16 -9
- package/dist/core/engine/lifecycle/shared.d.ts +8 -1
- package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
- package/dist/core/engine/lifecycle/start-batch.js +2 -1
- package/dist/core/engine/lifecycle/start-commit.d.ts +9 -0
- package/dist/core/engine/lifecycle/start-commit.js +50 -8
- package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
- package/dist/core/engine/lifecycle/start-or-signal.d.ts +3 -2
- package/dist/core/engine/lifecycle/start-or-signal.js +11 -81
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
- package/dist/core/engine/lifecycle/start.d.ts +4 -4
- package/dist/core/engine/lifecycle/start.js +17 -9
- package/dist/core/engine/lifecycle/transition.js +17 -5
- package/dist/core/engine/lifecycle.d.ts +1 -1
- package/dist/core/engine/list-candidate-resolution.js +2 -2
- package/dist/core/engine/listing.js +9 -5
- package/dist/core/engine/operations-activity.d.ts +6 -13
- package/dist/core/engine/operations-activity.js +26 -53
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +44 -9
- package/dist/core/engine/operations-router.d.ts +6 -0
- package/dist/core/engine/operations-router.js +2 -0
- package/dist/core/engine/operations-speculate.js +6 -2
- package/dist/core/engine/operations-stream.js +12 -2
- package/dist/core/engine/operations-time.d.ts +4 -2
- package/dist/core/engine/operations-time.js +14 -2
- package/dist/core/engine/operations-wait-condition.d.ts +23 -0
- package/dist/core/engine/operations-wait-condition.js +62 -0
- package/dist/core/engine/ownership-options.d.ts +23 -0
- package/dist/core/engine/ownership-options.js +26 -0
- package/dist/core/engine/payload-size-policy.d.ts +3 -0
- package/dist/core/engine/payload-size-policy.js +4 -0
- package/dist/core/engine/pending-updates.d.ts +17 -0
- package/dist/core/engine/pending-updates.js +33 -11
- package/dist/core/engine/queries.js +1 -1
- package/dist/core/engine/registration.d.ts +1 -0
- package/dist/core/engine/registration.js +18 -3
- package/dist/core/engine/schedule-jitter.d.ts +5 -0
- package/dist/core/engine/schedule-jitter.js +10 -0
- package/dist/core/engine/schedule-run.d.ts +17 -0
- package/dist/core/engine/schedule-run.js +38 -0
- package/dist/core/engine/schedule-timer.js +81 -17
- package/dist/core/engine/schedules.d.ts +7 -4
- package/dist/core/engine/schedules.js +37 -16
- package/dist/core/engine/search-attribute-records.d.ts +4 -0
- package/dist/core/engine/search-attribute-records.js +17 -0
- package/dist/core/engine/signals.d.ts +18 -2
- package/dist/core/engine/signals.js +42 -21
- package/dist/core/engine/state-utilities.d.ts +49 -2
- package/dist/core/engine/state-utilities.js +114 -3
- package/dist/core/engine/storage-io.d.ts +16 -2
- package/dist/core/engine/storage-io.js +26 -5
- package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
- package/dist/core/engine/stream-chunk-loading.js +24 -1
- package/dist/core/engine/sub-operation.js +25 -6
- package/dist/core/engine/termination/cleanup.d.ts +3 -1
- package/dist/core/engine/termination/cleanup.js +25 -1
- package/dist/core/engine/termination/complete.js +44 -6
- package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
- package/dist/core/engine/termination/finalizer-activity.js +30 -0
- package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
- package/dist/core/engine/termination/finalizer-claim.js +80 -0
- package/dist/core/engine/termination/finalizer.d.ts +48 -0
- package/dist/core/engine/termination/finalizer.js +159 -0
- package/dist/core/engine/termination/suspend.d.ts +3 -1
- package/dist/core/engine/termination.d.ts +1 -0
- package/dist/core/engine/termination.js +4 -0
- package/dist/core/engine/updates.js +5 -25
- package/dist/core/engine/validation/schedule.d.ts +2 -1
- package/dist/core/engine/validation/schedule.js +51 -2
- package/dist/core/engine/validation.js +32 -5
- package/dist/core/engine/waiting-update-response.d.ts +8 -0
- package/dist/core/engine/waiting-update-response.js +22 -0
- package/dist/core/engine/workflow-concurrency.d.ts +10 -0
- package/dist/core/engine/workflow-concurrency.js +136 -0
- package/dist/core/engine/workflow-feed.d.ts +4 -5
- package/dist/core/engine/workflow-feed.js +4 -1
- package/dist/core/engine/workflow-indexes.d.ts +9 -0
- package/dist/core/engine/workflow-indexes.js +10 -0
- package/dist/core/engine/workflow-state-stream.js +33 -13
- package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
- package/dist/core/engine-helpers.js +1 -0
- package/dist/core/events/activity-events.d.ts +43 -12
- package/dist/core/events/activity-events.js +28 -0
- package/dist/core/events/attribute-events.d.ts +2 -3
- package/dist/core/events/event-map.d.ts +18 -12
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/schedule-events.d.ts +71 -0
- package/dist/core/events/schedule-events.js +29 -0
- package/dist/core/events/signal-events.d.ts +4 -6
- package/dist/core/events/system-events.d.ts +29 -19
- package/dist/core/events/system-events.js +26 -0
- package/dist/core/events/update-events.d.ts +6 -8
- package/dist/core/events/workflow-events.d.ts +88 -23
- package/dist/core/events/workflow-events.js +26 -0
- package/dist/core/failure-categories.js +5 -17
- package/dist/core/fault-code.d.ts +9 -3
- package/dist/core/fault-code.js +1 -0
- package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
- package/dist/core/inline-execution-strategy.context-options.js +56 -0
- package/dist/core/inline-execution-strategy.d.ts +31 -36
- package/dist/core/inline-execution-strategy.js +16 -27
- package/dist/core/list-filter-validation.d.ts +1 -1
- package/dist/core/payload-size.d.ts +1 -1
- package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
- package/dist/core/review/events.d.ts +6 -8
- package/dist/core/scheduler/scheduler-class.d.ts +10 -1
- package/dist/core/scheduler/scheduler-class.js +38 -11
- package/dist/core/scheduler/timer-batch.js +9 -1
- package/dist/core/scheduler/timer-sources.d.ts +1 -0
- package/dist/core/scheduler/timer-sources.js +11 -5
- package/dist/core/session-state.d.ts +0 -1
- package/dist/core/session-state.js +2 -2
- package/dist/core/start-workflow-validation.d.ts +34 -0
- package/dist/core/start-workflow-validation.js +19 -0
- package/dist/core/types/activity-verification.d.ts +67 -0
- package/dist/core/types/activity-verification.js +0 -0
- package/dist/core/types/activity.d.ts +80 -61
- package/dist/core/types/bulk.d.ts +50 -9
- package/dist/core/types/checkpoint.d.ts +44 -8
- package/dist/core/types/list-options.d.ts +146 -0
- package/dist/core/types/list-options.js +0 -0
- package/dist/core/types/options.d.ts +121 -165
- package/dist/core/types/schedules.d.ts +39 -3
- package/dist/core/types/services-resolution.d.ts +2 -2
- package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
- package/dist/core/types/workflow-builder-runtime.js +11 -2
- package/dist/core/types/workflow-builder.d.ts +42 -11
- package/dist/core/types/workflow-concurrency.d.ts +39 -0
- package/dist/core/types/workflow-concurrency.js +0 -0
- package/dist/core/types/workflow-context.d.ts +157 -14
- package/dist/core/types/workflow-definition.d.ts +53 -10
- package/dist/core/types/workflow-function.d.ts +84 -9
- package/dist/core/types/workflow-log.d.ts +98 -0
- package/dist/core/types/workflow-log.js +0 -0
- package/dist/core/types/workflow-registries.d.ts +14 -3
- package/dist/core/types/workflow-registry.d.ts +3 -0
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.js +4 -0
- package/dist/core/versioning.d.ts +9 -39
- package/dist/core/versioning.js +2 -12
- package/dist/core/weft-error.d.ts +44 -1
- package/dist/core/weft-error.js +16 -0
- package/dist/core/worker-execution-strategy-options.d.ts +26 -0
- package/dist/core/worker-execution-strategy.js +40 -36
- package/dist/core/worker-inbound-message.d.ts +38 -0
- package/dist/core/worker-inbound-message.js +37 -0
- package/dist/core/worker-log-abuse-counter.d.ts +175 -0
- package/dist/core/worker-log-abuse-counter.js +107 -0
- package/dist/core/worker-message-helpers.d.ts +47 -0
- package/dist/core/worker-message-helpers.js +26 -0
- package/dist/core/worker-protocol-guard.js +1 -1
- package/dist/core/worker-protocol-log.d.ts +56 -0
- package/dist/core/worker-protocol-log.js +18 -0
- package/dist/core/worker-protocol.d.ts +23 -0
- package/dist/core/worker-protocol.js +12 -2
- package/dist/core/workflow-version-tuple.d.ts +3 -9
- package/dist/core/workflow-version-tuple.js +2 -3
- package/dist/diagnostics/format.js +1 -6
- package/dist/diagnostics/types.d.ts +4 -5
- package/dist/diagnostics/validate.d.ts +0 -1
- package/dist/diagnostics/version-check.d.ts +1 -1
- package/dist/diagnostics/version-check.js +4 -9
- package/dist/index.d.ts +12 -10
- package/dist/index.js +29 -3
- package/dist/json-schema.js +3 -3
- package/dist/mcp/cli.js +19 -19
- package/dist/mcp/dispatcher.js +1 -1
- package/dist/mcp/http.js +16 -6
- package/dist/mcp/protocol.d.ts +2 -0
- package/dist/mcp/protocol.js +1 -1
- package/dist/mcp/session.d.ts +16 -0
- package/dist/mcp/session.js +59 -6
- package/dist/mcp/tools.js +73 -6
- package/dist/observability/index.js +2 -2
- package/dist/server/asyncapi-channels.js +5 -2
- package/dist/server/attribute-filters.d.ts +8 -3
- package/dist/server/attribute-filters.js +6 -1
- package/dist/server/authentication/api-key.d.ts +2 -1
- package/dist/server/authentication/api-key.js +5 -2
- package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
- package/dist/server/authentication/constant-time-api-key.js +24 -0
- package/dist/server/authentication/index.d.ts +1 -1
- package/dist/server/authentication/index.js +7 -4
- package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
- package/dist/server/authentication/rotating-api-key-store.js +19 -11
- package/dist/server/engine-event-feed-backend.d.ts +4 -5
- package/dist/server/fault-to-http.js +8 -1
- package/dist/server/fault-to-json-rpc.js +1 -0
- package/dist/server/fleet-event-feed.d.ts +31 -0
- package/dist/server/fleet-event-feed.js +157 -0
- package/dist/server/handler/index.js +1 -1
- package/dist/server/handler/response-helpers.js +2 -1
- package/dist/server/handler/route-dispatch.d.ts +6 -3
- package/dist/server/handler/route-dispatch.js +2 -2
- package/dist/server/handler.js +23 -23
- package/dist/server/index.d.ts +32 -2
- package/dist/server/index.js +32 -32
- package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
- package/dist/server/json-rpc-transport-helpers.js +2 -1
- package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
- package/dist/server/json-rpc-websocket-runtime.js +1 -0
- package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
- package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
- package/dist/server/json-rpc-websocket-types.d.ts +22 -0
- package/dist/server/json-rpc-websocket-types.js +0 -0
- package/dist/server/json-rpc-websocket-validation.js +20 -4
- package/dist/server/json-rpc-websocket.d.ts +2 -43
- package/dist/server/json-rpc-websocket.js +57 -74
- package/dist/server/openapi.d.ts +2 -1
- package/dist/server/openapi.js +1 -3
- package/dist/server/openrpc-document-schema.d.ts +78 -0
- package/dist/server/openrpc-document-schema.js +27 -1
- package/dist/server/openrpc-errors.d.ts +3 -0
- package/dist/server/openrpc-errors.js +2 -1
- package/dist/server/openrpc.js +32 -0
- package/dist/server/operation-catalog/index.d.ts +1 -1
- package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
- package/dist/server/operation-catalog/pipeline-stages.js +26 -12
- package/dist/server/operation-catalog/pipeline.js +8 -1
- package/dist/server/operation-catalog/registry.js +13 -0
- package/dist/server/operation-catalog/types.d.ts +20 -9
- package/dist/server/operation-fault.d.ts +10 -0
- package/dist/server/operation-fault.js +2 -0
- package/dist/server/operation-registry.d.ts +12 -11
- package/dist/server/operation-registry.js +12 -3
- package/dist/server/operations/aggregate-workflows.d.ts +15 -15
- package/dist/server/operations/async-activity.d.ts +2 -2
- package/dist/server/operations/async-activity.js +12 -7
- package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-cancel-workflows.js +2 -2
- package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-delete-workflows.js +2 -2
- package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
- package/dist/server/operations/bulk-filter-helpers.js +54 -24
- package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
- package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
- package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
- package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
- package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
- package/dist/server/operations/bulk-signal-workflows.js +2 -2
- package/dist/server/operations/cancel-schedule.d.ts +1 -1
- package/dist/server/operations/create-schedule.d.ts +3 -1
- package/dist/server/operations/create-schedule.js +29 -11
- package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
- package/dist/server/operations/fleet-events-subscription.js +99 -0
- package/dist/server/operations/fork-workflow.d.ts +1 -1
- package/dist/server/operations/fork-workflow.js +3 -2
- package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
- package/dist/server/operations/get-registry.d.ts +1 -1
- package/dist/server/operations/get-retention-overview.d.ts +1 -1
- package/dist/server/operations/get-review.d.ts +1 -1
- package/dist/server/operations/get-schedule.d.ts +1 -1
- package/dist/server/operations/get-stream-chunks.d.ts +1 -1
- package/dist/server/operations/get-system-metrics.d.ts +2 -2
- package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
- package/dist/server/operations/get-task-diagnostics.js +101 -7
- package/dist/server/operations/get-update-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/get-workflow-events.d.ts +1 -1
- package/dist/server/operations/get-workflow-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
- package/dist/server/operations/get-workflow.d.ts +1 -1
- package/dist/server/operations/list-checkpoints.d.ts +1 -1
- package/dist/server/operations/list-reviews.d.ts +1 -1
- package/dist/server/operations/list-schedules.d.ts +1 -1
- package/dist/server/operations/list-task-queues.d.ts +2 -2
- package/dist/server/operations/list-workers.d.ts +2 -2
- package/dist/server/operations/list-workflows.d.ts +1 -1
- package/dist/server/operations/operation-helpers.d.ts +16 -1
- package/dist/server/operations/operation-helpers.js +15 -3
- package/dist/server/operations/pause-schedule.d.ts +1 -1
- package/dist/server/operations/purge-workflows.d.ts +5 -5
- package/dist/server/operations/purge-workflows.js +2 -2
- package/dist/server/operations/query-workflow.d.ts +1 -1
- package/dist/server/operations/query-workflow.js +3 -2
- package/dist/server/operations/recover-all.d.ts +1 -1
- package/dist/server/operations/replay-workflow.d.ts +1 -1
- package/dist/server/operations/resume-schedule.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.js +6 -3
- package/dist/server/operations/signal-workflow.js +8 -3
- package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
- package/dist/server/operations/start-or-signal-workflow.d.ts +6 -1
- package/dist/server/operations/start-or-signal-workflow.js +14 -24
- package/dist/server/operations/start-workflow-options.d.ts +6 -0
- package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
- package/dist/server/operations/start-workflow-rest-input.js +31 -0
- package/dist/server/operations/start-workflow.d.ts +1 -1
- package/dist/server/operations/start-workflow.js +8 -23
- package/dist/server/operations/storage.d.ts +6 -6
- package/dist/server/operations/storage.js +24 -14
- package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.js +6 -3
- package/dist/server/operations/update-schedule.d.ts +1 -1
- package/dist/server/operations/update-schedule.js +7 -4
- package/dist/server/operations/update-workflow.d.ts +1 -1
- package/dist/server/operations/update-workflow.js +7 -3
- package/dist/server/operations/worker-drain.d.ts +8 -8
- package/dist/server/operations/worker-drain.js +11 -8
- package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
- package/dist/server/operations/workflow-events-subscription.js +43 -8
- package/dist/server/rest-binding.d.ts +3 -1
- package/dist/server/rest-bindings.js +12 -0
- package/dist/server/rest-body.d.ts +10 -0
- package/dist/server/rest-body.js +80 -0
- package/dist/server/runtime/authentication-bridge.d.ts +1 -0
- package/dist/server/runtime/authentication-bridge.js +33 -6
- package/dist/server/runtime/client-visible-events.d.ts +3 -0
- package/dist/server/runtime/client-visible-events.js +65 -0
- package/dist/server/runtime/context.d.ts +7 -0
- package/dist/server/runtime/event-broadcasting.d.ts +6 -0
- package/dist/server/runtime/event-broadcasting.js +72 -38
- package/dist/server/runtime/retry.d.ts +1 -0
- package/dist/server/runtime/retry.js +14 -0
- package/dist/server/runtime/shutdown.d.ts +7 -6
- package/dist/server/runtime/shutdown.js +6 -1
- package/dist/server/runtime/task-polling.js +61 -20
- package/dist/server/runtime/task-reconciliation.js +9 -1
- package/dist/server/runtime/task-result-resolution.d.ts +15 -0
- package/dist/server/runtime/task-result-resolution.js +81 -0
- package/dist/server/runtime/websocket-stream.d.ts +20 -1
- package/dist/server/runtime/websocket-stream.js +173 -7
- package/dist/server/runtime/websocket-upgrade.js +22 -3
- package/dist/server/runtime/websocket-worker.d.ts +1 -1
- package/dist/server/runtime/websocket-worker.js +38 -30
- package/dist/server/serve-internals.d.ts +3 -1
- package/dist/server/serve-internals.js +18 -2
- package/dist/server/task-state.d.ts +30 -0
- package/dist/server/task-state.js +28 -0
- package/dist/server/workflow-event-feed.d.ts +36 -115
- package/dist/server/workflow-event-feed.js +92 -27
- package/dist/service-worker/index.js +30 -30
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +24 -0
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/default-scope.d.ts +7 -4
- package/dist/storage/http.js +2 -2
- package/dist/storage/index.d.ts +76 -4
- package/dist/storage/indexeddb.js +1 -1
- package/dist/storage/interface.d.ts +163 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +10 -0
- package/dist/storage/lmdb.d.ts +4 -3
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon-batch.d.ts +30 -0
- package/dist/storage/neon-batch.js +30 -0
- package/dist/storage/neon-value-mapping.d.ts +30 -3
- package/dist/storage/neon-value-mapping.js +12 -0
- package/dist/storage/neon.d.ts +16 -0
- package/dist/storage/neon.js +9 -4
- package/dist/storage/node-sqlite.js +23 -0
- package/dist/storage/postgres-key-value-queries.d.ts +69 -44
- package/dist/storage/postgres-key-value-queries.js +62 -24
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/testing.d.ts +168 -0
- package/dist/storage/testing.js +2 -0
- package/dist/storage/turso.d.ts +8 -0
- package/dist/storage/turso.js +2 -2
- package/dist/storage/typed-storage.js +1 -1
- package/dist/storage/web-extension.js +1 -1
- package/dist/testing/index.js +20 -20
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/protocol.js +1 -1
- package/dist/workers/worker-replay-state.d.ts +32 -0
- package/dist/workers/worker-replay-state.js +35 -0
- package/dist/workers/worker-state-namespace.d.ts +21 -0
- package/dist/workers/worker-state-namespace.js +13 -0
- package/dist/workers/workflow-runner.d.ts +19 -15
- package/dist/workers/workflow-runner.js +72 -60
- package/dist/workers/workflow-worker-entry.js +5 -2
- package/package.json +5 -1
|
@@ -1,7 +1,7 @@
|
|
|
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
7
|
suspend(id: string): Promise<void>;
|
|
@@ -20,7 +20,8 @@ export interface WorkflowHandleDelegationClient {
|
|
|
20
20
|
export declare abstract class WorkflowHandleDelegation<TClient extends WorkflowHandleDelegationClient = WorkflowHandleDelegationClient> implements ClientHandle {
|
|
21
21
|
readonly id: string;
|
|
22
22
|
protected readonly client: TClient;
|
|
23
|
-
|
|
23
|
+
readonly outcome: StartOrSignalOutcome | undefined;
|
|
24
|
+
constructor(id: string, client: TClient, outcome?: StartOrSignalOutcome);
|
|
24
25
|
abstract result(): Promise<unknown>;
|
|
25
26
|
cancel(): Promise<void>;
|
|
26
27
|
suspend(): Promise<void>;
|
|
@@ -3,9 +3,11 @@ 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);
|
|
@@ -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>;
|
|
@@ -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)
|
|
@@ -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,13 +59,15 @@ 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?:
|
|
64
|
-
startOrSignal<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, signal: StartOrSignalSignal, options?:
|
|
65
|
-
startOrSignal<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, signal: StartOrSignalSignal, 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>;
|
|
66
66
|
schedule<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
67
67
|
schedule<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
68
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>;
|
|
69
71
|
getSchedule(id: string): Promise<ScheduleSummary | null>;
|
|
70
72
|
list<const TAttributeKeys extends readonly AttributeFilterKey[] = readonly AttributeFilterKey[]>(filter?: TypedListFilter<TAttributeKeys>): Promise<PaginatedResult<WorkflowSummary>>;
|
|
71
73
|
listSchedules(filter?: ScheduleFilter): Promise<PaginatedResult<ScheduleSummary>>;
|
|
@@ -121,6 +123,7 @@ export declare class HttpClient implements WeftClient {
|
|
|
121
123
|
getRetentionOverview(): Promise<RetentionOverview>;
|
|
122
124
|
purge(filter?: ListFilter): Promise<PurgeResult>;
|
|
123
125
|
cancelAll(filter: ListFilter): Promise<BulkCancelResult>;
|
|
126
|
+
retryFailedAll(filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
124
127
|
signalAll(filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
125
128
|
deleteAll(filter: ListFilter): Promise<BulkDeleteResult>;
|
|
126
129
|
tagAll(filter: ListFilter, tags: string[]): Promise<BulkTagResult>;
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
removeTagsRequest,
|
|
27
27
|
replayToRequest,
|
|
28
28
|
resumeScheduleRequest,
|
|
29
|
+
retryFailedAllWorkflowRequests,
|
|
29
30
|
setAttributesRequest,
|
|
30
31
|
signalAllWorkflowRequests,
|
|
31
32
|
signalWorkflowRequest,
|
|
@@ -75,7 +76,7 @@ export class HttpClient {
|
|
|
75
76
|
}
|
|
76
77
|
async startOrSignal(type, input, signal, options) {
|
|
77
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) });
|
|
78
|
-
return new HttpHandle(response.id, this);
|
|
79
|
+
return new HttpHandle(response.id, this, response.outcome);
|
|
79
80
|
}
|
|
80
81
|
async schedule(type, input, spec, options) {
|
|
81
82
|
const body = {
|
|
@@ -98,6 +99,11 @@ export class HttpClient {
|
|
|
98
99
|
async get(id) {
|
|
99
100
|
return getWorkflowRequest(this, id);
|
|
100
101
|
}
|
|
102
|
+
async getHandle(id) {
|
|
103
|
+
if (await getWorkflowRequest(this, id) === null)
|
|
104
|
+
return null;
|
|
105
|
+
return new HttpHandle(id, this);
|
|
106
|
+
}
|
|
101
107
|
async getSchedule(id) {
|
|
102
108
|
return getScheduleRequest(this, id);
|
|
103
109
|
}
|
|
@@ -204,6 +210,9 @@ export class HttpClient {
|
|
|
204
210
|
async cancelAll(filter) {
|
|
205
211
|
return cancelAllWorkflowRequests(this, filter);
|
|
206
212
|
}
|
|
213
|
+
async retryFailedAll(filter) {
|
|
214
|
+
return retryFailedAllWorkflowRequests(this, filter);
|
|
215
|
+
}
|
|
207
216
|
async signalAll(filter, name, payload) {
|
|
208
217
|
return signalAllWorkflowRequests(this, filter, name, payload);
|
|
209
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, StartOrSignalOutcome, UpdateResult, WeftClient, WeftClientActivity, } from './interface.ts';
|
|
15
15
|
export type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow-name-typing.ts';
|
|
@@ -7,10 +7,47 @@
|
|
|
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, StartOrSignalSignal, 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
|
+
/**
|
|
36
|
+
* Which atomic path a {@link WeftClient.startOrSignal} call took, returned
|
|
37
|
+
* alongside the {@link ClientHandle}. `'started'` when the call created the
|
|
38
|
+
* run; `'signalled'` when it delivered a signal to a run that already existed,
|
|
39
|
+
* including losing a concurrent same-key create race and converging onto the
|
|
40
|
+
* winner. Each call receives its OWN handle regardless of the outcome.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import type { StartOrSignalOutcome } from '@lostgradient/weft/client';
|
|
45
|
+
*
|
|
46
|
+
* const outcome: StartOrSignalOutcome = 'started';
|
|
47
|
+
* void outcome;
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export type StartOrSignalOutcome = EngineStartOrSignalOutcome;
|
|
14
51
|
/**
|
|
15
52
|
* A reference to a workflow that provides convenience methods.
|
|
16
53
|
*
|
|
@@ -52,6 +89,12 @@ import type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow
|
|
|
52
89
|
export interface ClientHandle<TResult = unknown> extends TypedEventTarget<WeftEventMap>, Disposable {
|
|
53
90
|
/** The workflow's unique identifier. */
|
|
54
91
|
readonly id: string;
|
|
92
|
+
/**
|
|
93
|
+
* For a {@link WeftClient.startOrSignal} handle, which atomic path the call
|
|
94
|
+
* took (see {@link StartOrSignalOutcome}); `undefined` on handles from any
|
|
95
|
+
* other call (`start`, `getHandle`, `resume`, …).
|
|
96
|
+
*/
|
|
97
|
+
readonly outcome: StartOrSignalOutcome | undefined;
|
|
55
98
|
/** Resolves when the workflow completes (or rejects on failure). */
|
|
56
99
|
result(): Promise<TResult>;
|
|
57
100
|
/** Cancel this workflow. */
|
|
@@ -211,8 +254,8 @@ export interface WeftClient {
|
|
|
211
254
|
* `IdempotencyKeyPurgedError`), while `HttpClient` throws `HttpClientError`
|
|
212
255
|
* with `status === 409` and `faultCode === 'Conflict'`.
|
|
213
256
|
*/
|
|
214
|
-
start<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, options?:
|
|
215
|
-
start<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, options?:
|
|
257
|
+
start<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, options?: ClientStartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
258
|
+
start<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, options?: ClientStartOptions): Promise<ClientHandle>;
|
|
216
259
|
/**
|
|
217
260
|
* Atomically start a workflow or signal it if it already exists
|
|
218
261
|
* (signal-with-start). An absent target is created and delivered the signal in
|
|
@@ -235,8 +278,8 @@ export interface WeftClient {
|
|
|
235
278
|
* `options.idempotencyKey`; `options.id` and `options.idempotencyKey` are
|
|
236
279
|
* mutually exclusive.
|
|
237
280
|
*/
|
|
238
|
-
startOrSignal<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, signal: StartOrSignalSignal, options?:
|
|
239
|
-
startOrSignal<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, signal: StartOrSignalSignal, options?:
|
|
281
|
+
startOrSignal<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, signal: StartOrSignalSignal, options?: ClientStartOptions): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>>>;
|
|
282
|
+
startOrSignal<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, signal: StartOrSignalSignal, options?: ClientStartOptions): Promise<ClientHandle>;
|
|
240
283
|
/**
|
|
241
284
|
* Register a recurring schedule (cron string or interval spec) and return a
|
|
242
285
|
* handle to it.
|
|
@@ -249,6 +292,17 @@ export interface WeftClient {
|
|
|
249
292
|
schedule<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
250
293
|
/** Get the full persisted state of a workflow, or `null` if not found. */
|
|
251
294
|
get(id: string): Promise<WorkflowState | null>;
|
|
295
|
+
/**
|
|
296
|
+
* Re-attach a {@link ClientHandle} to an existing workflow by id, or `null`
|
|
297
|
+
* when none exists — handle ergonomics for a run you did not start yourself.
|
|
298
|
+
* `result()` on an already-terminal run resolves (or rejects) from persisted
|
|
299
|
+
* state, so a fire-and-forget run can be observed later without hand-rolling
|
|
300
|
+
* terminal-status polling. Supplying the workflow name as a type argument
|
|
301
|
+
* (`getHandle<'my-workflow'>(id)`) narrows `result()` to that workflow's output
|
|
302
|
+
* when the {@link WorkflowRegistry} is augmented; the name is a type hint only.
|
|
303
|
+
*/
|
|
304
|
+
getHandle(id: string): Promise<ClientHandle | null>;
|
|
305
|
+
getHandle<TName extends KnownWorkflowName>(id: string): Promise<ClientHandle<WorkflowOutput<WorkflowRegistry, TName>> | null>;
|
|
252
306
|
/** Get the current summary of a recurring schedule, or `null` if not found. */
|
|
253
307
|
getSchedule(id: string): Promise<ScheduleSummary | null>;
|
|
254
308
|
/** List workflows with optional filtering and pagination. */
|
|
@@ -343,6 +397,8 @@ export interface WeftClient {
|
|
|
343
397
|
purge(filter?: ListFilter): Promise<PurgeResult>;
|
|
344
398
|
/** Cancel all running or pending workflows that match a filter. */
|
|
345
399
|
cancelAll(filter: ListFilter): Promise<BulkCancelResult>;
|
|
400
|
+
/** Retry all failed workflows that match a filter. */
|
|
401
|
+
retryFailedAll(filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
346
402
|
/** Signal all running or pending workflows that match a filter. */
|
|
347
403
|
signalAll(filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
348
404
|
/** Delete all matching terminal workflows. */
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process handle wrappers for {@link LocalClient}. Split out of
|
|
3
|
+
* `client/local.ts` to keep that module under the per-file line ceiling.
|
|
4
|
+
*
|
|
5
|
+
* @module client/local-handles
|
|
6
|
+
*/
|
|
7
|
+
import type { WorkflowHandle } from '../core/engine.ts';
|
|
8
|
+
import type { WeftEventMap } from '../core/events.ts';
|
|
9
|
+
import { ScheduleHandleDelegation, WorkflowHandleDelegation } from './handle-delegation.ts';
|
|
10
|
+
import type { StartOrSignalOutcome } from './interface.ts';
|
|
11
|
+
import type { LocalClient } from './local.ts';
|
|
12
|
+
export declare class LocalHandle extends WorkflowHandleDelegation<LocalClient> {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(handle: WorkflowHandle, client: LocalClient, outcome?: StartOrSignalOutcome);
|
|
15
|
+
result(): Promise<unknown>;
|
|
16
|
+
addEventListener<K extends keyof WeftEventMap>(type: K, listener: (event: WeftEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
|
|
17
|
+
removeEventListener<K extends keyof WeftEventMap>(type: K, listener: (event: WeftEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
|
|
18
|
+
[Symbol.dispose](): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class LocalScheduleHandle extends ScheduleHandleDelegation<LocalClient> {
|
|
21
|
+
[Symbol.dispose](): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ScheduleHandleDelegation, WorkflowHandleDelegation } from "./handle-delegation.js";
|
|
2
|
+
|
|
3
|
+
export class LocalHandle extends WorkflowHandleDelegation {
|
|
4
|
+
#handle;
|
|
5
|
+
constructor(handle, client, outcome) {
|
|
6
|
+
super(handle.id, client, outcome);
|
|
7
|
+
this.#handle = handle;
|
|
8
|
+
}
|
|
9
|
+
async result() {
|
|
10
|
+
return this.#handle.result();
|
|
11
|
+
}
|
|
12
|
+
addEventListener(type, listener, options) {
|
|
13
|
+
this.#handle.addEventListener(type, listener, options);
|
|
14
|
+
}
|
|
15
|
+
removeEventListener(type, listener, options) {
|
|
16
|
+
this.#handle.removeEventListener(type, listener, options);
|
|
17
|
+
}
|
|
18
|
+
[Symbol.dispose]() {}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class LocalScheduleHandle extends ScheduleHandleDelegation {
|
|
22
|
+
[Symbol.dispose]() {}
|
|
23
|
+
}
|
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, StartOrSignalSignal, 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, DefaultActivityTypes, DefaultWorkflowRegistry, 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';
|
|
@@ -32,7 +32,7 @@ import type { KnownWorkflowName, UnknownNameWhenRegistryEmpty } from './workflow
|
|
|
32
32
|
* console.log(await handle.result()); // 'Hello, World!'
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
export declare class LocalClient implements WeftClient {
|
|
35
|
+
export declare class LocalClient<TWorkflows extends object = DefaultWorkflowRegistry, TActivities extends object = DefaultActivityTypes> implements WeftClient {
|
|
36
36
|
#private;
|
|
37
37
|
/** Typed low-level accessor for every catalog operation, routed in-process. */
|
|
38
38
|
readonly operations: CatalogOperations;
|
|
@@ -53,7 +53,7 @@ export declare class LocalClient implements WeftClient {
|
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
55
55
|
readonly activity: WeftClientActivity;
|
|
56
|
-
constructor(engine: Engine);
|
|
56
|
+
constructor(engine: Engine<TWorkflows, TActivities> | Engine);
|
|
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>;
|
|
@@ -62,6 +62,8 @@ export declare class LocalClient implements WeftClient {
|
|
|
62
62
|
schedule<TName extends KnownWorkflowName>(type: TName, input: WorkflowInput<WorkflowRegistry, TName>, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
63
63
|
schedule<TName extends string>(type: UnknownNameWhenRegistryEmpty<TName>, input: unknown, spec: string | ScheduleSpec, options?: ScheduleOptions): Promise<ClientScheduleHandle>;
|
|
64
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>;
|
|
65
67
|
getSchedule(id: string): Promise<ScheduleSummary | null>;
|
|
66
68
|
list<const TAttributeKeys extends readonly AttributeFilterKey[] = readonly AttributeFilterKey[]>(filter?: TypedListFilter<TAttributeKeys>): Promise<PaginatedResult<WorkflowSummary>>;
|
|
67
69
|
listSchedules(filter?: ScheduleFilter): Promise<PaginatedResult<ScheduleSummary>>;
|
|
@@ -106,6 +108,7 @@ export declare class LocalClient implements WeftClient {
|
|
|
106
108
|
getRetentionOverview(): Promise<RetentionOverview>;
|
|
107
109
|
purge(filter?: ListFilter): Promise<PurgeResult>;
|
|
108
110
|
cancelAll(filter: ListFilter): Promise<BulkCancelResult>;
|
|
111
|
+
retryFailedAll(filter: ListFilter): Promise<BulkRetryFailedResult>;
|
|
109
112
|
signalAll(filter: ListFilter, name: string, payload?: unknown): Promise<BulkSignalResult>;
|
|
110
113
|
deleteAll(filter: ListFilter): Promise<BulkDeleteResult>;
|
|
111
114
|
tagAll(filter: ListFilter, tags: string[]): Promise<BulkTagResult>;
|
package/dist/client/local.js
CHANGED
|
@@ -6,31 +6,9 @@ import {
|
|
|
6
6
|
runtimeWorkflowEngine
|
|
7
7
|
} from "../core/runtime-workflow-engine.js";
|
|
8
8
|
import { messageName } from "../core/types.js";
|
|
9
|
-
import { ScheduleHandleDelegation, WorkflowHandleDelegation } from "./handle-delegation.js";
|
|
10
9
|
import { inProcessCatalogTransport } from "./in-process-operations.js";
|
|
11
10
|
import { createLocalWorkflowEventTail } from "./local-event-tail.js";
|
|
12
|
-
|
|
13
|
-
class LocalHandle extends WorkflowHandleDelegation {
|
|
14
|
-
#handle;
|
|
15
|
-
constructor(handle, client) {
|
|
16
|
-
super(handle.id, client);
|
|
17
|
-
this.#handle = handle;
|
|
18
|
-
}
|
|
19
|
-
async result() {
|
|
20
|
-
return this.#handle.result();
|
|
21
|
-
}
|
|
22
|
-
addEventListener(type, listener, options) {
|
|
23
|
-
this.#handle.addEventListener(type, listener, options);
|
|
24
|
-
}
|
|
25
|
-
removeEventListener(type, listener, options) {
|
|
26
|
-
this.#handle.removeEventListener(type, listener, options);
|
|
27
|
-
}
|
|
28
|
-
[Symbol.dispose]() {}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
class LocalScheduleHandle extends ScheduleHandleDelegation {
|
|
32
|
-
[Symbol.dispose]() {}
|
|
33
|
-
}
|
|
11
|
+
import { LocalHandle, LocalScheduleHandle } from "./local-handles.js";
|
|
34
12
|
|
|
35
13
|
export class LocalClient {
|
|
36
14
|
#engine;
|
|
@@ -44,7 +22,7 @@ export class LocalClient {
|
|
|
44
22
|
complete: (token, result) => this.#engine.completeAsyncActivity(token, result),
|
|
45
23
|
completeExceptionally: (token, error) => this.#engine.failAsyncActivity(token, error)
|
|
46
24
|
};
|
|
47
|
-
this.operations = createCatalogWeftClient(CATALOG_OPERATION_NAMES, inProcessCatalogTransport(
|
|
25
|
+
this.operations = createCatalogWeftClient(CATALOG_OPERATION_NAMES, inProcessCatalogTransport(this.#rawEngine));
|
|
48
26
|
}
|
|
49
27
|
call(name, input) {
|
|
50
28
|
return this.operations[name](input);
|
|
@@ -54,8 +32,8 @@ export class LocalClient {
|
|
|
54
32
|
return new LocalHandle(handle, this);
|
|
55
33
|
}
|
|
56
34
|
async startOrSignal(type, input, signal, options) {
|
|
57
|
-
const handle = await this.#engine.startOrSignal(type, input, signal, options);
|
|
58
|
-
return new LocalHandle(handle, this);
|
|
35
|
+
const { handle, outcome } = await this.#engine.startOrSignal(type, input, signal, options);
|
|
36
|
+
return new LocalHandle(handle, this, outcome);
|
|
59
37
|
}
|
|
60
38
|
async schedule(type, input, spec, options) {
|
|
61
39
|
const handle = await this.#engine.schedule(type, input, spec, options);
|
|
@@ -64,6 +42,11 @@ export class LocalClient {
|
|
|
64
42
|
async get(id) {
|
|
65
43
|
return this.#engine.get(id);
|
|
66
44
|
}
|
|
45
|
+
async getHandle(id) {
|
|
46
|
+
if (await this.#engine.get(id) === null)
|
|
47
|
+
return null;
|
|
48
|
+
return new LocalHandle(this.#engine.getHandle(id), this);
|
|
49
|
+
}
|
|
67
50
|
async getSchedule(id) {
|
|
68
51
|
return this.#engine.getSchedule(id);
|
|
69
52
|
}
|
|
@@ -158,6 +141,9 @@ export class LocalClient {
|
|
|
158
141
|
async cancelAll(filter) {
|
|
159
142
|
return this.#engine.cancelAll(filter);
|
|
160
143
|
}
|
|
144
|
+
async retryFailedAll(filter) {
|
|
145
|
+
return this.#engine.retryFailedAll(filter);
|
|
146
|
+
}
|
|
161
147
|
async signalAll(filter, name, payload) {
|
|
162
148
|
return this.#engine.signalAll(filter, name, payload);
|
|
163
149
|
}
|
|
@@ -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,10 +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>;
|
|
10
11
|
/**
|
|
11
12
|
* Build the wire body for `weft.workflows.startorsignal`. Flattens the signal
|
|
12
13
|
* spec into `signalName` / `signalPayload` / `signalId` and carries the same
|
|
13
14
|
* start options as {@link buildStartBody}.
|
|
14
15
|
*/
|
|
15
|
-
export declare function buildStartOrSignalBody(type: string, input: unknown, signal: StartOrSignalSignal, options?:
|
|
16
|
+
export declare function buildStartOrSignalBody(type: string, input: unknown, signal: StartOrSignalSignal, options?: ClientStartOptions): Record<string, unknown>;
|
|
@@ -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
|
/**
|
|
@@ -6,7 +6,6 @@ export function createCheckpoint(workflowId, version, now) {
|
|
|
6
6
|
step: 0,
|
|
7
7
|
locals: {},
|
|
8
8
|
accumulatedResults: [],
|
|
9
|
-
pendingSignals: [],
|
|
10
9
|
searchAttributes: {},
|
|
11
10
|
version,
|
|
12
11
|
schemaVersion: CURRENT_CHECKPOINT_SCHEMA_VERSION,
|
|
@@ -19,9 +18,15 @@ export function advanceCheckpoint(checkpoint, locals, options) {
|
|
|
19
18
|
step: checkpoint.step + 1,
|
|
20
19
|
locals,
|
|
21
20
|
accumulatedResults: options?.accumulatedResults ?? checkpoint.accumulatedResults,
|
|
22
|
-
...checkpoint.
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
...(options?.accumulatedResultReplayWatermark ?? checkpoint.accumulatedResultReplayWatermark) === void 0 ? {} : {
|
|
22
|
+
accumulatedResultReplayWatermark: options?.accumulatedResultReplayWatermark ?? checkpoint.accumulatedResultReplayWatermark
|
|
23
|
+
},
|
|
24
|
+
...(options?.workerReplaySignatures ?? checkpoint.workerReplaySignatures) === void 0 ? {} : {
|
|
25
|
+
workerReplaySignatures: options?.workerReplaySignatures ?? checkpoint.workerReplaySignatures
|
|
26
|
+
},
|
|
27
|
+
...(options?.workerReplayFailures ?? checkpoint.workerReplayFailures) === void 0 ? {} : {
|
|
28
|
+
workerReplayFailures: options?.workerReplayFailures ?? checkpoint.workerReplayFailures
|
|
29
|
+
},
|
|
25
30
|
searchAttributes: {
|
|
26
31
|
...checkpoint.searchAttributes,
|
|
27
32
|
...options?.searchAttributes
|
|
@@ -26,9 +26,10 @@ export function validateCheckpointShape(value) {
|
|
|
26
26
|
assertRecordField(record, "locals");
|
|
27
27
|
validateSessionStateLocals(record.locals);
|
|
28
28
|
normalizeAccumulatedResults(record);
|
|
29
|
+
validateAccumulatedResultReplayWatermark(record);
|
|
29
30
|
validateWorkerReplaySignatures(record);
|
|
30
31
|
validateWorkerReplayFailures(record);
|
|
31
|
-
|
|
32
|
+
dropLegacyPendingSignals(record);
|
|
32
33
|
assertRecordField(record, "searchAttributes");
|
|
33
34
|
assertStringField(record, "version");
|
|
34
35
|
assertNumberField(record, "createdAt");
|
|
@@ -132,10 +133,6 @@ function assertRecordField(record, field) {
|
|
|
132
133
|
if (typeof record[field] !== "object" || record[field] === null)
|
|
133
134
|
throw Error(`Invalid checkpoint: missing or invalid "${field}" (expected object)`);
|
|
134
135
|
}
|
|
135
|
-
function assertArrayField(record, field) {
|
|
136
|
-
if (!Array.isArray(record[field]))
|
|
137
|
-
throw Error(`Invalid checkpoint: missing or invalid "${field}" (expected array)`);
|
|
138
|
-
}
|
|
139
136
|
function normalizeAccumulatedResults(record) {
|
|
140
137
|
if (!("accumulatedResults" in record)) {
|
|
141
138
|
record.accumulatedResults = [];
|
|
@@ -144,6 +141,16 @@ function normalizeAccumulatedResults(record) {
|
|
|
144
141
|
if (!Array.isArray(record.accumulatedResults))
|
|
145
142
|
throw Error('Invalid checkpoint: invalid "accumulatedResults" (expected array)');
|
|
146
143
|
}
|
|
144
|
+
function validateAccumulatedResultReplayWatermark(record) {
|
|
145
|
+
const watermark = record.accumulatedResultReplayWatermark;
|
|
146
|
+
if (watermark === void 0)
|
|
147
|
+
return;
|
|
148
|
+
if (typeof watermark !== "number" || !Number.isSafeInteger(watermark) || watermark < 0)
|
|
149
|
+
throw Error('Invalid checkpoint: invalid "accumulatedResultReplayWatermark" (expected non-negative safe integer)');
|
|
150
|
+
}
|
|
151
|
+
function dropLegacyPendingSignals(record) {
|
|
152
|
+
delete record.pendingSignals;
|
|
153
|
+
}
|
|
147
154
|
function assertCurrentSchemaVersion(record) {
|
|
148
155
|
const schemaVersion = record.schemaVersion;
|
|
149
156
|
if (schemaVersion === void 0)
|