@lostgradient/weft 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -24
- package/dist/cli/conformance.js +7 -1
- package/dist/cli/generated/operation-client.generated.d.ts +28 -13
- package/dist/cli/generated/operation-client.generated.js +1 -0
- package/dist/cli/help-text.d.ts +1 -1
- package/dist/cli/help-text.js +1 -0
- package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
- package/dist/cli/operation-catalog-snapshot.js +11 -0
- package/dist/cli/parse-schedule-arguments.js +3 -1
- package/dist/cli/schedule.js +2 -1
- package/dist/cli/types.d.ts +1 -0
- package/dist/cli-main.js +79 -78
- package/dist/client/handle-delegation.d.ts +3 -2
- package/dist/client/handle-delegation.js +3 -1
- package/dist/client/http-client-requests.d.ts +2 -1
- package/dist/client/http-client-requests.js +7 -0
- package/dist/client/http-client.d.ts +9 -6
- package/dist/client/http-client.js +10 -1
- package/dist/client/http-request.d.ts +11 -1
- package/dist/client/http-request.js +17 -7
- package/dist/client/index.d.ts +1 -1
- package/dist/client/interface.d.ts +46 -5
- package/dist/client/local.d.ts +4 -1
- package/dist/client/local.js +12 -4
- package/dist/client/start-body.d.ts +4 -3
- package/dist/core/byte-arrays.d.ts +5 -0
- package/dist/core/byte-arrays.js +5 -0
- package/dist/core/checkpoint/lifecycle.d.ts +3 -0
- package/dist/core/checkpoint/lifecycle.js +9 -4
- package/dist/core/checkpoint/serialization.js +12 -5
- package/dist/core/codec/extension-codec.d.ts +16 -0
- package/dist/core/codec/extension-codec.js +100 -6
- package/dist/core/context/activity-retry-state.d.ts +38 -0
- package/dist/core/context/activity-retry-state.js +89 -0
- package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
- package/dist/core/context/activity-schedule-to-close.js +69 -0
- package/dist/core/context/child-workflow-pipe.d.ts +5 -5
- package/dist/core/context/child-workflow-pipe.js +15 -2
- package/dist/core/context/context-presence.d.ts +19 -0
- package/dist/core/context/context-presence.js +13 -0
- package/dist/core/context/durable-operations.d.ts +25 -0
- package/dist/core/context/durable-operations.js +64 -0
- package/dist/core/context/index.d.ts +9 -5
- package/dist/core/context/index.js +17 -12
- package/dist/core/context/internals.d.ts +20 -0
- package/dist/core/context/internals.js +3 -1
- package/dist/core/context/operation-request.d.ts +35 -0
- package/dist/core/context/parallel-cache-entry.d.ts +14 -5
- package/dist/core/context/run-operation.d.ts +6 -1
- package/dist/core/context/run-operation.js +41 -87
- package/dist/core/context/session-state.js +7 -8
- package/dist/core/context/speculative-child.js +2 -0
- package/dist/core/context/types.d.ts +15 -0
- package/dist/core/context/version-patching.d.ts +8 -0
- package/dist/core/context/version-patching.js +40 -0
- package/dist/core/context/workflow-logger.d.ts +98 -0
- package/dist/core/context/workflow-logger.js +68 -0
- package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
- package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
- package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
- package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
- package/dist/core/engine/activity-reconciliation.d.ts +1 -0
- package/dist/core/engine/activity-reconciliation.js +12 -1
- package/dist/core/engine/activity-resolution.d.ts +23 -0
- package/dist/core/engine/activity-resolution.js +37 -0
- package/dist/core/engine/aggregate.js +66 -30
- package/dist/core/engine/async-activity-completion.d.ts +23 -6
- package/dist/core/engine/async-activity-completion.js +53 -12
- package/dist/core/engine/attributes-tags.js +9 -4
- package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
- package/dist/core/engine/bulk-operations-purge.js +38 -3
- package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
- package/dist/core/engine/bulk-operations-shared.js +8 -2
- package/dist/core/engine/bulk-operations.d.ts +4 -1
- package/dist/core/engine/bulk-operations.js +235 -24
- package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
- package/dist/core/engine/callback-creators-bundles.js +30 -2
- package/dist/core/engine/callback-creators-core.js +6 -4
- package/dist/core/engine/callback-creators-router.js +10 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
- package/dist/core/engine/callback-creators-schedule.js +12 -8
- package/dist/core/engine/candidate-read-batching.d.ts +6 -0
- package/dist/core/engine/candidate-read-batching.js +1 -0
- package/dist/core/engine/checkpoint-io.js +61 -25
- package/dist/core/engine/checkpoint-reads.js +3 -2
- package/dist/core/engine/checkpoint-replay.d.ts +20 -0
- package/dist/core/engine/checkpoint-replay.js +242 -0
- package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
- package/dist/core/engine/checkpoint-side-effects.js +35 -0
- package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
- package/dist/core/engine/child-workflow-cancellation.js +40 -0
- package/dist/core/engine/child-workflow.js +27 -4
- package/dist/core/engine/condition-waiters.d.ts +14 -0
- package/dist/core/engine/condition-waiters.js +5 -0
- package/dist/core/engine/construction.d.ts +3 -0
- package/dist/core/engine/construction.js +21 -8
- package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
- package/dist/core/engine/coordination-branch-executors.js +107 -0
- package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
- package/dist/core/engine/deferred-consume-envelope.js +14 -0
- package/dist/core/engine/disposal.js +13 -0
- package/dist/core/engine/engine-create-types.d.ts +14 -4
- package/dist/core/engine/engine-internal-types.d.ts +26 -3
- package/dist/core/engine/errors.d.ts +47 -0
- package/dist/core/engine/errors.js +20 -0
- package/dist/core/engine/event-log-compaction.d.ts +8 -0
- package/dist/core/engine/event-log-compaction.js +20 -2
- package/dist/core/engine/fenced-write.d.ts +65 -0
- package/dist/core/engine/fenced-write.js +71 -0
- package/dist/core/engine/finalizer-state.d.ts +28 -0
- package/dist/core/engine/finalizer-state.js +16 -0
- package/dist/core/engine/handles.d.ts +8 -0
- package/dist/core/engine/index.d.ts +34 -16
- package/dist/core/engine/index.js +133 -8
- package/dist/core/engine/inline-parking.js +3 -2
- package/dist/core/engine/internals.d.ts +107 -3
- package/dist/core/engine/lease-codec.d.ts +35 -0
- package/dist/core/engine/lease-codec.js +32 -0
- package/dist/core/engine/lease-deposition.d.ts +66 -0
- package/dist/core/engine/lease-deposition.js +10 -0
- package/dist/core/engine/lease-errors.d.ts +99 -0
- package/dist/core/engine/lease-errors.js +30 -0
- package/dist/core/engine/lease-manager.d.ts +114 -0
- package/dist/core/engine/lease-manager.js +135 -0
- package/dist/core/engine/lifecycle/persist.js +10 -32
- package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
- package/dist/core/engine/lifecycle/recovered-services.js +18 -3
- package/dist/core/engine/lifecycle/resume.js +16 -9
- package/dist/core/engine/lifecycle/shared.d.ts +8 -1
- package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
- package/dist/core/engine/lifecycle/start-batch.js +2 -1
- package/dist/core/engine/lifecycle/start-commit.d.ts +9 -0
- package/dist/core/engine/lifecycle/start-commit.js +50 -8
- package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
- package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
- package/dist/core/engine/lifecycle/start-or-signal.d.ts +3 -2
- package/dist/core/engine/lifecycle/start-or-signal.js +11 -81
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
- package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
- package/dist/core/engine/lifecycle/start.d.ts +4 -4
- package/dist/core/engine/lifecycle/start.js +17 -9
- package/dist/core/engine/lifecycle/transition.js +17 -5
- package/dist/core/engine/lifecycle.d.ts +1 -1
- package/dist/core/engine/list-candidate-resolution.js +2 -2
- package/dist/core/engine/listing.js +9 -5
- package/dist/core/engine/operations-activity.d.ts +4 -11
- package/dist/core/engine/operations-activity.js +22 -49
- package/dist/core/engine/operations-coordination.d.ts +10 -0
- package/dist/core/engine/operations-coordination.js +43 -8
- package/dist/core/engine/operations-router.d.ts +6 -0
- package/dist/core/engine/operations-router.js +2 -0
- package/dist/core/engine/operations-speculate.js +6 -2
- package/dist/core/engine/operations-stream.js +12 -2
- package/dist/core/engine/operations-time.d.ts +4 -2
- package/dist/core/engine/operations-time.js +14 -2
- package/dist/core/engine/operations-wait-condition.d.ts +23 -0
- package/dist/core/engine/operations-wait-condition.js +62 -0
- package/dist/core/engine/ownership-options.d.ts +23 -0
- package/dist/core/engine/ownership-options.js +26 -0
- package/dist/core/engine/payload-size-policy.d.ts +3 -0
- package/dist/core/engine/payload-size-policy.js +4 -0
- package/dist/core/engine/pending-updates.d.ts +17 -0
- package/dist/core/engine/pending-updates.js +33 -11
- package/dist/core/engine/queries.js +1 -1
- package/dist/core/engine/registration.d.ts +1 -0
- package/dist/core/engine/registration.js +18 -3
- package/dist/core/engine/schedule-jitter.d.ts +5 -0
- package/dist/core/engine/schedule-jitter.js +10 -0
- package/dist/core/engine/schedule-run.d.ts +17 -0
- package/dist/core/engine/schedule-run.js +38 -0
- package/dist/core/engine/schedule-timer.js +81 -17
- package/dist/core/engine/schedules.d.ts +7 -4
- package/dist/core/engine/schedules.js +37 -16
- package/dist/core/engine/search-attribute-records.d.ts +4 -0
- package/dist/core/engine/search-attribute-records.js +17 -0
- package/dist/core/engine/signals.d.ts +18 -2
- package/dist/core/engine/signals.js +42 -21
- package/dist/core/engine/state-utilities.d.ts +49 -2
- package/dist/core/engine/state-utilities.js +114 -3
- package/dist/core/engine/storage-io.d.ts +16 -2
- package/dist/core/engine/storage-io.js +26 -5
- package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
- package/dist/core/engine/stream-chunk-loading.js +24 -1
- package/dist/core/engine/sub-operation.js +22 -3
- package/dist/core/engine/termination/cleanup.d.ts +3 -1
- package/dist/core/engine/termination/cleanup.js +25 -1
- package/dist/core/engine/termination/complete.js +44 -6
- package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
- package/dist/core/engine/termination/finalizer-activity.js +30 -0
- package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
- package/dist/core/engine/termination/finalizer-claim.js +80 -0
- package/dist/core/engine/termination/finalizer.d.ts +48 -0
- package/dist/core/engine/termination/finalizer.js +159 -0
- package/dist/core/engine/termination/suspend.d.ts +3 -1
- package/dist/core/engine/termination.d.ts +1 -0
- package/dist/core/engine/termination.js +4 -0
- package/dist/core/engine/updates.js +5 -25
- package/dist/core/engine/validation/schedule.d.ts +2 -1
- package/dist/core/engine/validation/schedule.js +51 -2
- package/dist/core/engine/validation.js +32 -5
- package/dist/core/engine/waiting-update-response.d.ts +8 -0
- package/dist/core/engine/waiting-update-response.js +22 -0
- package/dist/core/engine/workflow-concurrency.d.ts +10 -0
- package/dist/core/engine/workflow-concurrency.js +136 -0
- package/dist/core/engine/workflow-feed.d.ts +4 -5
- package/dist/core/engine/workflow-feed.js +4 -1
- package/dist/core/engine/workflow-indexes.d.ts +9 -0
- package/dist/core/engine/workflow-indexes.js +10 -0
- package/dist/core/engine/workflow-state-stream.js +33 -13
- package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
- package/dist/core/engine-helpers.js +1 -0
- package/dist/core/events/activity-events.d.ts +43 -12
- package/dist/core/events/activity-events.js +28 -0
- package/dist/core/events/attribute-events.d.ts +2 -3
- package/dist/core/events/event-map.d.ts +18 -12
- package/dist/core/events/index.d.ts +1 -0
- package/dist/core/events/index.js +1 -0
- package/dist/core/events/schedule-events.d.ts +71 -0
- package/dist/core/events/schedule-events.js +29 -0
- package/dist/core/events/signal-events.d.ts +4 -6
- package/dist/core/events/system-events.d.ts +29 -19
- package/dist/core/events/system-events.js +26 -0
- package/dist/core/events/update-events.d.ts +6 -8
- package/dist/core/events/workflow-events.d.ts +88 -23
- package/dist/core/events/workflow-events.js +26 -0
- package/dist/core/failure-categories.js +5 -17
- package/dist/core/fault-code.d.ts +9 -3
- package/dist/core/fault-code.js +1 -0
- package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
- package/dist/core/inline-execution-strategy.context-options.js +56 -0
- package/dist/core/inline-execution-strategy.d.ts +31 -36
- package/dist/core/inline-execution-strategy.js +16 -27
- package/dist/core/list-filter-validation.d.ts +1 -1
- package/dist/core/payload-size.d.ts +1 -1
- package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
- package/dist/core/review/events.d.ts +6 -8
- package/dist/core/scheduler/scheduler-class.d.ts +10 -1
- package/dist/core/scheduler/scheduler-class.js +38 -11
- package/dist/core/scheduler/timer-batch.js +9 -1
- package/dist/core/scheduler/timer-sources.d.ts +1 -0
- package/dist/core/scheduler/timer-sources.js +11 -5
- package/dist/core/session-state.d.ts +0 -1
- package/dist/core/session-state.js +2 -2
- package/dist/core/start-workflow-validation.d.ts +34 -0
- package/dist/core/start-workflow-validation.js +19 -0
- package/dist/core/types/activity-verification.d.ts +67 -0
- package/dist/core/types/activity-verification.js +0 -0
- package/dist/core/types/activity.d.ts +80 -61
- package/dist/core/types/bulk.d.ts +50 -9
- package/dist/core/types/checkpoint.d.ts +44 -8
- package/dist/core/types/list-options.d.ts +146 -0
- package/dist/core/types/list-options.js +0 -0
- package/dist/core/types/options.d.ts +121 -165
- package/dist/core/types/schedules.d.ts +39 -3
- package/dist/core/types/services-resolution.d.ts +2 -2
- package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
- package/dist/core/types/workflow-builder-runtime.js +11 -2
- package/dist/core/types/workflow-builder.d.ts +42 -11
- package/dist/core/types/workflow-concurrency.d.ts +39 -0
- package/dist/core/types/workflow-concurrency.js +0 -0
- package/dist/core/types/workflow-context.d.ts +157 -14
- package/dist/core/types/workflow-definition.d.ts +53 -10
- package/dist/core/types/workflow-function.d.ts +84 -9
- package/dist/core/types/workflow-log.d.ts +98 -0
- package/dist/core/types/workflow-log.js +0 -0
- package/dist/core/types/workflow-registries.d.ts +14 -3
- package/dist/core/types/workflow-registry.d.ts +3 -0
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.js +4 -0
- package/dist/core/versioning.d.ts +9 -39
- package/dist/core/versioning.js +2 -12
- package/dist/core/weft-error.d.ts +44 -1
- package/dist/core/weft-error.js +16 -0
- package/dist/core/worker-execution-strategy-options.d.ts +26 -0
- package/dist/core/worker-execution-strategy.js +40 -36
- package/dist/core/worker-inbound-message.d.ts +38 -0
- package/dist/core/worker-inbound-message.js +37 -0
- package/dist/core/worker-log-abuse-counter.d.ts +175 -0
- package/dist/core/worker-log-abuse-counter.js +107 -0
- package/dist/core/worker-message-helpers.d.ts +47 -0
- package/dist/core/worker-message-helpers.js +26 -0
- package/dist/core/worker-protocol-guard.js +1 -1
- package/dist/core/worker-protocol-log.d.ts +56 -0
- package/dist/core/worker-protocol-log.js +18 -0
- package/dist/core/worker-protocol.d.ts +23 -0
- package/dist/core/worker-protocol.js +12 -2
- package/dist/core/workflow-version-tuple.d.ts +3 -9
- package/dist/core/workflow-version-tuple.js +2 -3
- package/dist/diagnostics/format.js +1 -6
- package/dist/diagnostics/types.d.ts +4 -5
- package/dist/diagnostics/validate.d.ts +0 -1
- package/dist/diagnostics/version-check.d.ts +1 -1
- package/dist/diagnostics/version-check.js +4 -9
- package/dist/index.d.ts +12 -10
- package/dist/index.js +29 -3
- package/dist/json-schema.js +3 -3
- package/dist/mcp/cli.js +27 -27
- package/dist/mcp/dispatcher.js +1 -1
- package/dist/mcp/http.js +16 -6
- package/dist/mcp/protocol.d.ts +2 -0
- package/dist/mcp/protocol.js +1 -1
- package/dist/mcp/session.d.ts +16 -0
- package/dist/mcp/session.js +59 -6
- package/dist/mcp/tools.js +73 -6
- package/dist/observability/index.js +2 -2
- package/dist/server/asyncapi-channels.js +5 -2
- package/dist/server/attribute-filters.d.ts +8 -3
- package/dist/server/attribute-filters.js +6 -1
- package/dist/server/authentication/api-key.d.ts +2 -1
- package/dist/server/authentication/api-key.js +5 -2
- package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
- package/dist/server/authentication/constant-time-api-key.js +24 -0
- package/dist/server/authentication/index.d.ts +1 -1
- package/dist/server/authentication/index.js +7 -4
- package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
- package/dist/server/authentication/rotating-api-key-store.js +19 -11
- package/dist/server/engine-event-feed-backend.d.ts +4 -5
- package/dist/server/fault-to-http.js +8 -1
- package/dist/server/fault-to-json-rpc.js +1 -0
- package/dist/server/fleet-event-feed.d.ts +31 -0
- package/dist/server/fleet-event-feed.js +157 -0
- package/dist/server/handler/index.js +1 -1
- package/dist/server/handler/response-helpers.js +2 -1
- package/dist/server/handler/route-dispatch.d.ts +6 -3
- package/dist/server/handler/route-dispatch.js +2 -2
- package/dist/server/handler.js +23 -23
- package/dist/server/index.d.ts +32 -2
- package/dist/server/index.js +26 -26
- package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
- package/dist/server/json-rpc-transport-helpers.js +2 -1
- package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
- package/dist/server/json-rpc-websocket-runtime.js +1 -0
- package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
- package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
- package/dist/server/json-rpc-websocket-types.d.ts +22 -0
- package/dist/server/json-rpc-websocket-types.js +0 -0
- package/dist/server/json-rpc-websocket-validation.js +20 -4
- package/dist/server/json-rpc-websocket.d.ts +2 -43
- package/dist/server/json-rpc-websocket.js +57 -74
- package/dist/server/openapi.d.ts +2 -1
- package/dist/server/openapi.js +1 -3
- package/dist/server/openrpc-document-schema.d.ts +78 -0
- package/dist/server/openrpc-document-schema.js +27 -1
- package/dist/server/openrpc-errors.d.ts +3 -0
- package/dist/server/openrpc-errors.js +2 -1
- package/dist/server/openrpc.js +32 -0
- package/dist/server/operation-catalog/index.d.ts +1 -1
- package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
- package/dist/server/operation-catalog/pipeline-stages.js +26 -12
- package/dist/server/operation-catalog/pipeline.js +8 -1
- package/dist/server/operation-catalog/registry.js +13 -0
- package/dist/server/operation-catalog/types.d.ts +20 -9
- package/dist/server/operation-fault.d.ts +10 -0
- package/dist/server/operation-fault.js +2 -0
- package/dist/server/operation-registry.d.ts +12 -11
- package/dist/server/operation-registry.js +12 -3
- package/dist/server/operations/aggregate-workflows.d.ts +15 -15
- package/dist/server/operations/async-activity.d.ts +2 -2
- package/dist/server/operations/async-activity.js +12 -7
- package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-cancel-workflows.js +2 -2
- package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
- package/dist/server/operations/bulk-delete-workflows.js +2 -2
- package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
- package/dist/server/operations/bulk-filter-helpers.js +54 -24
- package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
- package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
- package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
- package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
- package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
- package/dist/server/operations/bulk-signal-workflows.js +2 -2
- package/dist/server/operations/cancel-schedule.d.ts +1 -1
- package/dist/server/operations/create-schedule.d.ts +3 -1
- package/dist/server/operations/create-schedule.js +29 -11
- package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
- package/dist/server/operations/fleet-events-subscription.js +99 -0
- package/dist/server/operations/fork-workflow.d.ts +1 -1
- package/dist/server/operations/fork-workflow.js +3 -2
- package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
- package/dist/server/operations/get-registry.d.ts +1 -1
- package/dist/server/operations/get-retention-overview.d.ts +1 -1
- package/dist/server/operations/get-review.d.ts +1 -1
- package/dist/server/operations/get-schedule.d.ts +1 -1
- package/dist/server/operations/get-stream-chunks.d.ts +1 -1
- package/dist/server/operations/get-system-metrics.d.ts +2 -2
- package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
- package/dist/server/operations/get-task-diagnostics.js +101 -7
- package/dist/server/operations/get-update-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/get-workflow-events.d.ts +1 -1
- package/dist/server/operations/get-workflow-result.d.ts +1 -1
- package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
- package/dist/server/operations/get-workflow.d.ts +1 -1
- package/dist/server/operations/list-checkpoints.d.ts +1 -1
- package/dist/server/operations/list-reviews.d.ts +1 -1
- package/dist/server/operations/list-schedules.d.ts +1 -1
- package/dist/server/operations/list-task-queues.d.ts +2 -2
- package/dist/server/operations/list-workers.d.ts +2 -2
- package/dist/server/operations/list-workflows.d.ts +1 -1
- package/dist/server/operations/operation-helpers.d.ts +16 -1
- package/dist/server/operations/operation-helpers.js +15 -3
- package/dist/server/operations/pause-schedule.d.ts +1 -1
- package/dist/server/operations/purge-workflows.d.ts +5 -5
- package/dist/server/operations/purge-workflows.js +2 -2
- package/dist/server/operations/query-workflow.d.ts +1 -1
- package/dist/server/operations/query-workflow.js +3 -2
- package/dist/server/operations/recover-all.d.ts +1 -1
- package/dist/server/operations/replay-workflow.d.ts +1 -1
- package/dist/server/operations/resume-schedule.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
- package/dist/server/operations/set-workflow-attributes.js +6 -3
- package/dist/server/operations/signal-workflow.js +8 -3
- package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
- package/dist/server/operations/start-or-signal-workflow.d.ts +6 -1
- package/dist/server/operations/start-or-signal-workflow.js +14 -24
- package/dist/server/operations/start-workflow-options.d.ts +6 -0
- package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
- package/dist/server/operations/start-workflow-rest-input.js +31 -0
- package/dist/server/operations/start-workflow.d.ts +1 -1
- package/dist/server/operations/start-workflow.js +8 -23
- package/dist/server/operations/storage.d.ts +6 -6
- package/dist/server/operations/storage.js +24 -14
- package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.d.ts +1 -1
- package/dist/server/operations/submit-review-decision.js +6 -3
- package/dist/server/operations/update-schedule.d.ts +1 -1
- package/dist/server/operations/update-schedule.js +7 -4
- package/dist/server/operations/update-workflow.d.ts +1 -1
- package/dist/server/operations/update-workflow.js +7 -3
- package/dist/server/operations/worker-drain.d.ts +8 -8
- package/dist/server/operations/worker-drain.js +11 -8
- package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
- package/dist/server/operations/workflow-events-subscription.js +43 -8
- package/dist/server/rest-binding.d.ts +3 -1
- package/dist/server/rest-bindings.js +12 -0
- package/dist/server/rest-body.d.ts +10 -0
- package/dist/server/rest-body.js +80 -0
- package/dist/server/runtime/authentication-bridge.d.ts +1 -0
- package/dist/server/runtime/authentication-bridge.js +33 -6
- package/dist/server/runtime/client-visible-events.d.ts +3 -0
- package/dist/server/runtime/client-visible-events.js +65 -0
- package/dist/server/runtime/context.d.ts +7 -0
- package/dist/server/runtime/event-broadcasting.d.ts +6 -0
- package/dist/server/runtime/event-broadcasting.js +72 -38
- package/dist/server/runtime/retry.d.ts +1 -0
- package/dist/server/runtime/retry.js +14 -0
- package/dist/server/runtime/shutdown.d.ts +7 -6
- package/dist/server/runtime/shutdown.js +6 -1
- package/dist/server/runtime/task-polling.js +61 -20
- package/dist/server/runtime/task-reconciliation.js +9 -1
- package/dist/server/runtime/task-result-resolution.d.ts +15 -0
- package/dist/server/runtime/task-result-resolution.js +81 -0
- package/dist/server/runtime/websocket-stream.d.ts +20 -1
- package/dist/server/runtime/websocket-stream.js +173 -7
- package/dist/server/runtime/websocket-upgrade.js +22 -3
- package/dist/server/runtime/websocket-worker.d.ts +1 -1
- package/dist/server/runtime/websocket-worker.js +38 -30
- package/dist/server/serve-internals.d.ts +3 -1
- package/dist/server/serve-internals.js +18 -2
- package/dist/server/task-state.d.ts +30 -0
- package/dist/server/task-state.js +28 -0
- package/dist/server/workflow-event-feed.d.ts +36 -115
- package/dist/server/workflow-event-feed.js +92 -27
- package/dist/service-worker/index.js +30 -30
- package/dist/storage/auto.js +1 -1
- package/dist/storage/bun-sql.js +24 -0
- package/dist/storage/compressed-storage.js +1 -1
- package/dist/storage/default-scope.d.ts +7 -4
- package/dist/storage/http.js +2 -2
- package/dist/storage/index.d.ts +76 -4
- package/dist/storage/indexeddb.js +1 -1
- package/dist/storage/interface.d.ts +163 -0
- package/dist/storage/interface.js +1 -1
- package/dist/storage/key-prefixes.d.ts +1 -1
- package/dist/storage/key-prefixes.js +10 -0
- package/dist/storage/lmdb.d.ts +4 -3
- package/dist/storage/lmdb.js +1 -1
- package/dist/storage/memory.js +1 -1
- package/dist/storage/neon-batch.d.ts +30 -0
- package/dist/storage/neon-batch.js +30 -0
- package/dist/storage/neon-value-mapping.d.ts +30 -3
- package/dist/storage/neon-value-mapping.js +12 -0
- package/dist/storage/neon.d.ts +16 -0
- package/dist/storage/neon.js +9 -4
- package/dist/storage/node-sqlite.js +23 -0
- package/dist/storage/postgres-key-value-queries.d.ts +69 -44
- package/dist/storage/postgres-key-value-queries.js +62 -24
- package/dist/storage/resolve.js +1 -1
- package/dist/storage/scoped-storage.js +1 -1
- package/dist/storage/testing.d.ts +168 -0
- package/dist/storage/testing.js +2 -0
- package/dist/storage/turso.d.ts +8 -0
- package/dist/storage/turso.js +2 -2
- package/dist/storage/typed-storage.js +1 -1
- package/dist/storage/web-extension.js +1 -1
- package/dist/testing/index.js +28 -28
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/worker/protocol.js +1 -1
- package/dist/workers/worker-replay-state.d.ts +32 -0
- package/dist/workers/worker-replay-state.js +35 -0
- package/dist/workers/worker-state-namespace.d.ts +21 -0
- package/dist/workers/worker-state-namespace.js +13 -0
- package/dist/workers/workflow-runner.d.ts +19 -15
- package/dist/workers/workflow-runner.js +72 -60
- package/dist/workers/workflow-worker-entry.js +5 -2
- package/package.json +5 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { defineOperation } from "../operation-registry.js";
|
|
3
|
+
import { readRestTextBody } from "../rest-body.js";
|
|
3
4
|
import { invalidParamsFault, shapeRestFault } from "./operation-helpers.js";
|
|
4
5
|
const forkWorkflowInput = z.object({
|
|
5
6
|
workflowId: z.string().min(1),
|
|
@@ -65,8 +66,8 @@ export const forkWorkflowOperation = defineOperation({
|
|
|
65
66
|
workflowId: { kind: "path", pathParam: "id" },
|
|
66
67
|
fromStep: { kind: "body-field", bodyField: "fromStep" }
|
|
67
68
|
},
|
|
68
|
-
extractInput: async (request, pathParams) => {
|
|
69
|
-
const rawBody = await request
|
|
69
|
+
extractInput: async (request, pathParams, context) => {
|
|
70
|
+
const rawBody = await readRestTextBody(request, context);
|
|
70
71
|
if (rawBody.trim().length === 0)
|
|
71
72
|
return { workflowId: pathParams.id ?? "" };
|
|
72
73
|
let body;
|
|
@@ -10,6 +10,6 @@ export type GetCheckpointAtOutput = CheckpointState;
|
|
|
10
10
|
export declare const getCheckpointAtOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
11
11
|
workflowId: string;
|
|
12
12
|
step: number;
|
|
13
|
-
}, CheckpointState>;
|
|
13
|
+
}, CheckpointState, unknown>;
|
|
14
14
|
export declare const getCheckpointAtRestBinding: UnknownRestBinding;
|
|
15
15
|
export {};
|
|
@@ -21,6 +21,6 @@ import type { UnknownRestBinding } from '../rest-bindings.ts';
|
|
|
21
21
|
declare const getRegistryInput: z.ZodObject<{}, z.core.$strip>;
|
|
22
22
|
export type GetRegistryInput = z.infer<typeof getRegistryInput>;
|
|
23
23
|
export type GetRegistryOutput = RegistrySnapshot;
|
|
24
|
-
export declare const getRegistryOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, RegistrySnapshot>;
|
|
24
|
+
export declare const getRegistryOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, RegistrySnapshot, unknown>;
|
|
25
25
|
export declare const getRegistryRestBinding: UnknownRestBinding;
|
|
26
26
|
export {};
|
|
@@ -4,6 +4,6 @@ import type { UnknownRestBinding } from '../rest-bindings.ts';
|
|
|
4
4
|
declare const getRetentionOverviewInput: z.ZodObject<{}, z.core.$strip>;
|
|
5
5
|
export type GetRetentionOverviewInput = z.infer<typeof getRetentionOverviewInput>;
|
|
6
6
|
export type GetRetentionOverviewOutput = RetentionOverview;
|
|
7
|
-
export declare const getRetentionOverviewOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, RetentionOverview>;
|
|
7
|
+
export declare const getRetentionOverviewOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, RetentionOverview, unknown>;
|
|
8
8
|
export declare const getRetentionOverviewRestBinding: UnknownRestBinding;
|
|
9
9
|
export {};
|
|
@@ -10,6 +10,6 @@ export type GetReviewOutput = ReviewRequest;
|
|
|
10
10
|
export declare const getReviewOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
11
11
|
workflowId: string;
|
|
12
12
|
reviewId: string;
|
|
13
|
-
}, ReviewRequest>;
|
|
13
|
+
}, ReviewRequest, unknown>;
|
|
14
14
|
export declare const getReviewRestBinding: UnknownRestBinding;
|
|
15
15
|
export {};
|
|
@@ -15,6 +15,6 @@ export type GetScheduleInput = z.infer<typeof getScheduleInput>;
|
|
|
15
15
|
export type GetScheduleOutput = ScheduleSummary;
|
|
16
16
|
export declare const getScheduleOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
17
17
|
scheduleId: string;
|
|
18
|
-
}, ScheduleSummary>;
|
|
18
|
+
}, ScheduleSummary, unknown>;
|
|
19
19
|
export declare const getScheduleRestBinding: UnknownRestBinding;
|
|
20
20
|
export {};
|
|
@@ -14,6 +14,6 @@ export declare const getStreamChunksOperation: import("../operation-catalog.ts")
|
|
|
14
14
|
workflowId: string;
|
|
15
15
|
key: string;
|
|
16
16
|
after?: unknown;
|
|
17
|
-
}, GetStreamChunksOutput>;
|
|
17
|
+
}, GetStreamChunksOutput, unknown>;
|
|
18
18
|
export declare const getStreamChunksRestBinding: UnknownRestBinding;
|
|
19
19
|
export {};
|
|
@@ -28,8 +28,8 @@ export type GetSystemMetricsOutput = MetricsSnapshot;
|
|
|
28
28
|
*/
|
|
29
29
|
export declare function createGetSystemMetricsOperation(options?: {
|
|
30
30
|
metricsCollector?: MetricsCollector | undefined;
|
|
31
|
-
}): import("../operation-catalog.ts").OperationDefinition<Record<string, never>, MetricsSnapshot>;
|
|
32
|
-
export declare const getSystemMetricsOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, MetricsSnapshot>;
|
|
31
|
+
}): import("../operation-catalog.ts").OperationDefinition<Record<string, never>, MetricsSnapshot, unknown>;
|
|
32
|
+
export declare const getSystemMetricsOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, MetricsSnapshot, unknown>;
|
|
33
33
|
/**
|
|
34
34
|
* Factory for the `weft.system.metrics` REST binding.
|
|
35
35
|
*
|
|
@@ -13,6 +13,7 @@ import type { WorkerRegistry } from '../../worker/registry.ts';
|
|
|
13
13
|
import type { UnknownRestBinding } from '../rest-bindings.ts';
|
|
14
14
|
import type { TaskQueue } from '../task-queue.ts';
|
|
15
15
|
declare const taskDiagnosticKindSchema: z.ZodEnum<{
|
|
16
|
+
"dead-lettered": "dead-lettered";
|
|
16
17
|
"stuck-queued": "stuck-queued";
|
|
17
18
|
"stale-inflight": "stale-inflight";
|
|
18
19
|
"retry-storm": "retry-storm";
|
|
@@ -20,12 +21,14 @@ declare const taskDiagnosticKindSchema: z.ZodEnum<{
|
|
|
20
21
|
}>;
|
|
21
22
|
declare const taskDiagnosticItemSchema: z.ZodObject<{
|
|
22
23
|
kind: z.ZodEnum<{
|
|
24
|
+
"dead-lettered": "dead-lettered";
|
|
23
25
|
"stuck-queued": "stuck-queued";
|
|
24
26
|
"stale-inflight": "stale-inflight";
|
|
25
27
|
"retry-storm": "retry-storm";
|
|
26
28
|
"all-workers-at-capacity": "all-workers-at-capacity";
|
|
27
29
|
}>;
|
|
28
30
|
state: z.ZodEnum<{
|
|
31
|
+
"dead-lettered": "dead-lettered";
|
|
29
32
|
queued: "queued";
|
|
30
33
|
inflight: "inflight";
|
|
31
34
|
resolved: "resolved";
|
|
@@ -46,6 +49,10 @@ declare const taskDiagnosticItemSchema: z.ZodObject<{
|
|
|
46
49
|
"worker-disconnect": "worker-disconnect";
|
|
47
50
|
}>>;
|
|
48
51
|
resolutionReason: z.ZodOptional<z.ZodString>;
|
|
52
|
+
deadLetteredAt: z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
deadLetterReason: z.ZodOptional<z.ZodLiteral<"result-resolution-storage-exhausted">>;
|
|
54
|
+
storageError: z.ZodOptional<z.ZodString>;
|
|
55
|
+
retryAttempts: z.ZodOptional<z.ZodNumber>;
|
|
49
56
|
evidence: z.ZodArray<z.ZodString>;
|
|
50
57
|
}, z.core.$strict>;
|
|
51
58
|
declare const taskDiagnosticsSummarySchema: z.ZodObject<{
|
|
@@ -53,16 +60,19 @@ declare const taskDiagnosticsSummarySchema: z.ZodObject<{
|
|
|
53
60
|
staleInflight: z.ZodNumber;
|
|
54
61
|
retryStorms: z.ZodNumber;
|
|
55
62
|
allWorkersAtCapacity: z.ZodNumber;
|
|
63
|
+
deadLettered: z.ZodNumber;
|
|
56
64
|
}, z.core.$strict>;
|
|
57
65
|
declare const getTaskDiagnosticsOutput: z.ZodObject<{
|
|
58
66
|
items: z.ZodArray<z.ZodObject<{
|
|
59
67
|
kind: z.ZodEnum<{
|
|
68
|
+
"dead-lettered": "dead-lettered";
|
|
60
69
|
"stuck-queued": "stuck-queued";
|
|
61
70
|
"stale-inflight": "stale-inflight";
|
|
62
71
|
"retry-storm": "retry-storm";
|
|
63
72
|
"all-workers-at-capacity": "all-workers-at-capacity";
|
|
64
73
|
}>;
|
|
65
74
|
state: z.ZodEnum<{
|
|
75
|
+
"dead-lettered": "dead-lettered";
|
|
66
76
|
queued: "queued";
|
|
67
77
|
inflight: "inflight";
|
|
68
78
|
resolved: "resolved";
|
|
@@ -83,6 +93,10 @@ declare const getTaskDiagnosticsOutput: z.ZodObject<{
|
|
|
83
93
|
"worker-disconnect": "worker-disconnect";
|
|
84
94
|
}>>;
|
|
85
95
|
resolutionReason: z.ZodOptional<z.ZodString>;
|
|
96
|
+
deadLetteredAt: z.ZodOptional<z.ZodNumber>;
|
|
97
|
+
deadLetterReason: z.ZodOptional<z.ZodLiteral<"result-resolution-storage-exhausted">>;
|
|
98
|
+
storageError: z.ZodOptional<z.ZodString>;
|
|
99
|
+
retryAttempts: z.ZodOptional<z.ZodNumber>;
|
|
86
100
|
evidence: z.ZodArray<z.ZodString>;
|
|
87
101
|
}, z.core.$strict>>;
|
|
88
102
|
summary: z.ZodObject<{
|
|
@@ -90,6 +104,7 @@ declare const getTaskDiagnosticsOutput: z.ZodObject<{
|
|
|
90
104
|
staleInflight: z.ZodNumber;
|
|
91
105
|
retryStorms: z.ZodNumber;
|
|
92
106
|
allWorkersAtCapacity: z.ZodNumber;
|
|
107
|
+
deadLettered: z.ZodNumber;
|
|
93
108
|
}, z.core.$strict>;
|
|
94
109
|
limit: z.ZodNumber;
|
|
95
110
|
}, z.core.$strict>;
|
|
@@ -102,11 +117,19 @@ declare const getTaskDiagnosticsInput: z.ZodObject<{
|
|
|
102
117
|
retryStormMinimumAttempts: z.ZodDefault<z.ZodNumber>;
|
|
103
118
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
104
119
|
}, z.core.$strip>;
|
|
120
|
+
declare const clearTaskDeadLetterInput: z.ZodObject<{
|
|
121
|
+
operationId: z.ZodString;
|
|
122
|
+
}, z.core.$strip>;
|
|
123
|
+
declare const okOutput: z.ZodObject<{
|
|
124
|
+
ok: z.ZodLiteral<true>;
|
|
125
|
+
}, z.core.$strict>;
|
|
105
126
|
export type GetTaskDiagnosticsInput = z.infer<typeof getTaskDiagnosticsInput>;
|
|
106
127
|
export type TaskDiagnosticKind = z.infer<typeof taskDiagnosticKindSchema>;
|
|
107
128
|
export type TaskDiagnosticItem = z.infer<typeof taskDiagnosticItemSchema>;
|
|
108
129
|
export type TaskDiagnosticsSummary = z.infer<typeof taskDiagnosticsSummarySchema>;
|
|
109
130
|
export type GetTaskDiagnosticsOutput = z.infer<typeof getTaskDiagnosticsOutput>;
|
|
131
|
+
export type ClearTaskDeadLetterInput = z.infer<typeof clearTaskDeadLetterInput>;
|
|
132
|
+
export type ClearTaskDeadLetterOutput = z.infer<typeof okOutput>;
|
|
110
133
|
interface GetTaskDiagnosticsOptions {
|
|
111
134
|
registry?: WorkerRegistry | undefined;
|
|
112
135
|
taskQueue?: TaskQueue | undefined;
|
|
@@ -122,8 +145,8 @@ export declare function createGetTaskDiagnosticsOperation(options?: GetTaskDiagn
|
|
|
122
145
|
queue?: string | undefined;
|
|
123
146
|
}, {
|
|
124
147
|
items: {
|
|
125
|
-
kind: "stuck-queued" | "stale-inflight" | "retry-storm" | "all-workers-at-capacity";
|
|
126
|
-
state: "queued" | "inflight" | "resolved" | "capacity";
|
|
148
|
+
kind: "dead-lettered" | "stuck-queued" | "stale-inflight" | "retry-storm" | "all-workers-at-capacity";
|
|
149
|
+
state: "dead-lettered" | "queued" | "inflight" | "resolved" | "capacity";
|
|
127
150
|
retryCount: number;
|
|
128
151
|
requeueCount: number;
|
|
129
152
|
evidence: string[];
|
|
@@ -137,15 +160,20 @@ export declare function createGetTaskDiagnosticsOperation(options?: GetTaskDiagn
|
|
|
137
160
|
heartbeatAgeMs?: number | undefined;
|
|
138
161
|
lastRequeueReason?: "visibility-timeout" | "worker-disconnect" | undefined;
|
|
139
162
|
resolutionReason?: string | undefined;
|
|
163
|
+
deadLetteredAt?: number | undefined;
|
|
164
|
+
deadLetterReason?: "result-resolution-storage-exhausted" | undefined;
|
|
165
|
+
storageError?: string | undefined;
|
|
166
|
+
retryAttempts?: number | undefined;
|
|
140
167
|
}[];
|
|
141
168
|
summary: {
|
|
142
169
|
stuckQueued: number;
|
|
143
170
|
staleInflight: number;
|
|
144
171
|
retryStorms: number;
|
|
145
172
|
allWorkersAtCapacity: number;
|
|
173
|
+
deadLettered: number;
|
|
146
174
|
};
|
|
147
175
|
limit: number;
|
|
148
|
-
}>;
|
|
176
|
+
}, unknown>;
|
|
149
177
|
export declare const getTaskDiagnosticsOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
150
178
|
staleQueuedAfterMs: number;
|
|
151
179
|
staleHeartbeatAfterMs: number;
|
|
@@ -156,8 +184,8 @@ export declare const getTaskDiagnosticsOperation: import("../operation-catalog.t
|
|
|
156
184
|
queue?: string | undefined;
|
|
157
185
|
}, {
|
|
158
186
|
items: {
|
|
159
|
-
kind: "stuck-queued" | "stale-inflight" | "retry-storm" | "all-workers-at-capacity";
|
|
160
|
-
state: "queued" | "inflight" | "resolved" | "capacity";
|
|
187
|
+
kind: "dead-lettered" | "stuck-queued" | "stale-inflight" | "retry-storm" | "all-workers-at-capacity";
|
|
188
|
+
state: "dead-lettered" | "queued" | "inflight" | "resolved" | "capacity";
|
|
161
189
|
retryCount: number;
|
|
162
190
|
requeueCount: number;
|
|
163
191
|
evidence: string[];
|
|
@@ -171,14 +199,25 @@ export declare const getTaskDiagnosticsOperation: import("../operation-catalog.t
|
|
|
171
199
|
heartbeatAgeMs?: number | undefined;
|
|
172
200
|
lastRequeueReason?: "visibility-timeout" | "worker-disconnect" | undefined;
|
|
173
201
|
resolutionReason?: string | undefined;
|
|
202
|
+
deadLetteredAt?: number | undefined;
|
|
203
|
+
deadLetterReason?: "result-resolution-storage-exhausted" | undefined;
|
|
204
|
+
storageError?: string | undefined;
|
|
205
|
+
retryAttempts?: number | undefined;
|
|
174
206
|
}[];
|
|
175
207
|
summary: {
|
|
176
208
|
stuckQueued: number;
|
|
177
209
|
staleInflight: number;
|
|
178
210
|
retryStorms: number;
|
|
179
211
|
allWorkersAtCapacity: number;
|
|
212
|
+
deadLettered: number;
|
|
180
213
|
};
|
|
181
214
|
limit: number;
|
|
182
|
-
}>;
|
|
215
|
+
}, unknown>;
|
|
216
|
+
export declare const clearTaskDeadLetterOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
217
|
+
operationId: string;
|
|
218
|
+
}, {
|
|
219
|
+
ok: true;
|
|
220
|
+
}, unknown>;
|
|
183
221
|
export declare const getTaskDiagnosticsRestBinding: UnknownRestBinding;
|
|
222
|
+
export declare const clearTaskDeadLetterRestBinding: UnknownRestBinding;
|
|
184
223
|
export {};
|
|
@@ -6,6 +6,8 @@ import {
|
|
|
6
6
|
calculateExecutionLatencyMs,
|
|
7
7
|
calculateHeartbeatAgeMs,
|
|
8
8
|
calculateQueueLatencyMs,
|
|
9
|
+
clearDeadLetteredTaskRecord,
|
|
10
|
+
isDeadLetteredTaskRecord,
|
|
9
11
|
isInflightRecord,
|
|
10
12
|
isQueuedRecord,
|
|
11
13
|
isResolvedRecord
|
|
@@ -15,10 +17,11 @@ const DEFAULT_STALE_QUEUED_AFTER_MS = 60000, DEFAULT_STALE_HEARTBEAT_AFTER_MS =
|
|
|
15
17
|
"stuck-queued",
|
|
16
18
|
"stale-inflight",
|
|
17
19
|
"retry-storm",
|
|
18
|
-
"all-workers-at-capacity"
|
|
20
|
+
"all-workers-at-capacity",
|
|
21
|
+
"dead-lettered"
|
|
19
22
|
]), taskDiagnosticItemSchema = z.object({
|
|
20
23
|
kind: taskDiagnosticKindSchema,
|
|
21
|
-
state: z.enum(["queued", "inflight", "resolved", "capacity"]),
|
|
24
|
+
state: z.enum(["queued", "inflight", "resolved", "capacity", "dead-lettered"]),
|
|
22
25
|
operationId: z.string().optional(),
|
|
23
26
|
workflowId: z.string().optional(),
|
|
24
27
|
activityName: z.string().optional(),
|
|
@@ -31,12 +34,17 @@ const DEFAULT_STALE_QUEUED_AFTER_MS = 60000, DEFAULT_STALE_HEARTBEAT_AFTER_MS =
|
|
|
31
34
|
heartbeatAgeMs: z.number().nonnegative().optional(),
|
|
32
35
|
lastRequeueReason: z.enum(["visibility-timeout", "worker-disconnect"]).optional(),
|
|
33
36
|
resolutionReason: z.string().optional(),
|
|
37
|
+
deadLetteredAt: z.number().nonnegative().optional(),
|
|
38
|
+
deadLetterReason: z.literal("result-resolution-storage-exhausted").optional(),
|
|
39
|
+
storageError: z.string().optional(),
|
|
40
|
+
retryAttempts: z.number().int().nonnegative().optional(),
|
|
34
41
|
evidence: z.array(z.string())
|
|
35
42
|
}).strict(), taskDiagnosticsSummarySchema = z.object({
|
|
36
43
|
stuckQueued: z.number().int().nonnegative(),
|
|
37
44
|
staleInflight: z.number().int().nonnegative(),
|
|
38
45
|
retryStorms: z.number().int().nonnegative(),
|
|
39
|
-
allWorkersAtCapacity: z.number().int().nonnegative()
|
|
46
|
+
allWorkersAtCapacity: z.number().int().nonnegative(),
|
|
47
|
+
deadLettered: z.number().int().nonnegative()
|
|
40
48
|
}).strict(), getTaskDiagnosticsOutput = z.object({
|
|
41
49
|
items: z.array(taskDiagnosticItemSchema),
|
|
42
50
|
summary: taskDiagnosticsSummarySchema,
|
|
@@ -49,7 +57,14 @@ const DEFAULT_STALE_QUEUED_AFTER_MS = 60000, DEFAULT_STALE_HEARTBEAT_AFTER_MS =
|
|
|
49
57
|
staleHeartbeatAfterMs: z.number().int().nonnegative().default(DEFAULT_STALE_HEARTBEAT_AFTER_MS),
|
|
50
58
|
retryStormMinimumAttempts: z.number().int().min(1).default(DEFAULT_RETRY_STORM_MINIMUM_ATTEMPTS),
|
|
51
59
|
limit: z.number().int().min(1).max(MAX_LIMIT).default(DEFAULT_LIMIT)
|
|
52
|
-
})
|
|
60
|
+
}), clearTaskDeadLetterInput = z.object({
|
|
61
|
+
operationId: z.string().min(1)
|
|
62
|
+
}), okOutput = z.object({ ok: z.literal(!0) }).strict(), restOnlyTaskDiagnosticsTransports = {
|
|
63
|
+
http: !0,
|
|
64
|
+
jsonRpcHttp: !1,
|
|
65
|
+
jsonRpcWebSocket: !1,
|
|
66
|
+
jsonRpcStdio: !1
|
|
67
|
+
};
|
|
53
68
|
export function createGetTaskDiagnosticsOperation(options = {}) {
|
|
54
69
|
return defineOperation({
|
|
55
70
|
name: "weft.tasks.diagnostics",
|
|
@@ -79,7 +94,27 @@ export function createGetTaskDiagnosticsOperation(options = {}) {
|
|
|
79
94
|
}
|
|
80
95
|
});
|
|
81
96
|
}
|
|
82
|
-
export const getTaskDiagnosticsOperation = createGetTaskDiagnosticsOperation()
|
|
97
|
+
export const getTaskDiagnosticsOperation = createGetTaskDiagnosticsOperation(), clearTaskDeadLetterOperation = defineOperation({
|
|
98
|
+
name: "weft.tasks.diagnostics.deadletters.clear",
|
|
99
|
+
mcpExposable: !1,
|
|
100
|
+
summary: "Clear a task-result dead-letter diagnostic entry",
|
|
101
|
+
destructive: !0,
|
|
102
|
+
tags: ["Observability"],
|
|
103
|
+
inputSchema: clearTaskDeadLetterInput,
|
|
104
|
+
outputSchema: okOutput,
|
|
105
|
+
access: {
|
|
106
|
+
kind: "scoped",
|
|
107
|
+
scopes: { kind: "anyOf", scopes: ["system:admin"] }
|
|
108
|
+
},
|
|
109
|
+
producibleFaults: [],
|
|
110
|
+
discoverable: !0,
|
|
111
|
+
transports: restOnlyTaskDiagnosticsTransports,
|
|
112
|
+
unknownKeyPolicy: { http: "reject", jsonRpc: "reject" },
|
|
113
|
+
invoke: async ({ input, engine }) => {
|
|
114
|
+
await clearDeadLetteredTaskRecord(engine.storage, input.operationId);
|
|
115
|
+
return { ok: !0 };
|
|
116
|
+
}
|
|
117
|
+
});
|
|
83
118
|
async function collectTaskDiagnostics({
|
|
84
119
|
engine,
|
|
85
120
|
input,
|
|
@@ -91,12 +126,21 @@ async function collectTaskDiagnostics({
|
|
|
91
126
|
stuckQueued: 0,
|
|
92
127
|
staleInflight: 0,
|
|
93
128
|
retryStorms: 0,
|
|
94
|
-
allWorkersAtCapacity: 0
|
|
95
|
-
|
|
129
|
+
allWorkersAtCapacity: 0,
|
|
130
|
+
deadLettered: 0
|
|
131
|
+
}, relevantQueues = new Set, deadLetteredOperationIds = new Set, addItem = (item) => {
|
|
96
132
|
incrementSummary(summary, item.kind);
|
|
97
133
|
if (items.length < input.limit)
|
|
98
134
|
items.push(item);
|
|
99
135
|
};
|
|
136
|
+
for await (const record of scanDeadLetterRecords(engine)) {
|
|
137
|
+
if (!matchesTaskRecordFilter(record, input))
|
|
138
|
+
continue;
|
|
139
|
+
deadLetteredOperationIds.add(record.operationId);
|
|
140
|
+
if (record.queue !== void 0)
|
|
141
|
+
relevantQueues.add(record.queue);
|
|
142
|
+
addDeadLetterDiagnostics(record, addItem);
|
|
143
|
+
}
|
|
100
144
|
for await (const record of scanQueuedRecords(engine)) {
|
|
101
145
|
if (!matchesTaskRecordFilter(record, input))
|
|
102
146
|
continue;
|
|
@@ -106,6 +150,8 @@ async function collectTaskDiagnostics({
|
|
|
106
150
|
for await (const record of scanInflightRecords(engine)) {
|
|
107
151
|
if (!matchesTaskRecordFilter(record, input))
|
|
108
152
|
continue;
|
|
153
|
+
if (deadLetteredOperationIds.has(record.operationId))
|
|
154
|
+
continue;
|
|
109
155
|
relevantQueues.add(record.queue);
|
|
110
156
|
addInflightDiagnostics(record, input, currentTime, addItem);
|
|
111
157
|
}
|
|
@@ -125,6 +171,13 @@ async function collectTaskDiagnostics({
|
|
|
125
171
|
});
|
|
126
172
|
return { items, summary, limit: input.limit };
|
|
127
173
|
}
|
|
174
|
+
async function* scanDeadLetterRecords(engine) {
|
|
175
|
+
for await (const [, value] of engine.storage.scan(KEYS.operationDeadLetterPrefix())) {
|
|
176
|
+
const decoded = decode(value);
|
|
177
|
+
if (isDeadLetteredTaskRecord(decoded))
|
|
178
|
+
yield decoded;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
128
181
|
async function* scanQueuedRecords(engine) {
|
|
129
182
|
for await (const [, value] of engine.storage.scan("op:queued:")) {
|
|
130
183
|
const decoded = decode(value);
|
|
@@ -201,6 +254,27 @@ function addInflightDiagnostics(record, input, currentTime, addItem) {
|
|
|
201
254
|
});
|
|
202
255
|
addRetryStormDiagnostic(record, "inflight", input, addItem);
|
|
203
256
|
}
|
|
257
|
+
function addDeadLetterDiagnostics(record, addItem) {
|
|
258
|
+
addItem({
|
|
259
|
+
kind: "dead-lettered",
|
|
260
|
+
state: "dead-lettered",
|
|
261
|
+
operationId: record.operationId,
|
|
262
|
+
workflowId: record.workflowId,
|
|
263
|
+
activityName: record.activityName,
|
|
264
|
+
queue: record.queue,
|
|
265
|
+
workerId: record.workerId,
|
|
266
|
+
retryCount: record.retryCount ?? Math.max(0, (record.attempt ?? 1) - 1),
|
|
267
|
+
requeueCount: record.requeueCount ?? 0,
|
|
268
|
+
lastRequeueReason: record.lastRequeueReason,
|
|
269
|
+
deadLetteredAt: record.deadLetteredAt,
|
|
270
|
+
deadLetterReason: record.reason,
|
|
271
|
+
storageError: record.errorMessage,
|
|
272
|
+
retryAttempts: record.retryAttempts,
|
|
273
|
+
evidence: [
|
|
274
|
+
`Task result transition exhausted ${record.retryAttempts} storage attempts; reconciliation will not re-dispatch operation "${record.operationId}" until the dead-letter entry is cleared`
|
|
275
|
+
]
|
|
276
|
+
});
|
|
277
|
+
}
|
|
204
278
|
function addRetryStormDiagnostic(record, state, input, addItem) {
|
|
205
279
|
const retryCount = record.retryCount ?? Math.max(0, (record.attempt ?? 1) - 1), requeueCount = record.requeueCount ?? 0;
|
|
206
280
|
if (retryCount < input.retryStormMinimumAttempts && requeueCount < input.retryStormMinimumAttempts)
|
|
@@ -300,6 +374,9 @@ function incrementSummary(summary, kind) {
|
|
|
300
374
|
case "all-workers-at-capacity":
|
|
301
375
|
summary.allWorkersAtCapacity += 1;
|
|
302
376
|
return;
|
|
377
|
+
case "dead-lettered":
|
|
378
|
+
summary.deadLettered += 1;
|
|
379
|
+
return;
|
|
303
380
|
}
|
|
304
381
|
}
|
|
305
382
|
function parseOptionalNumber(value) {
|
|
@@ -337,4 +414,21 @@ export const getTaskDiagnosticsRestBinding = {
|
|
|
337
414
|
headers: { "Content-Type": "application/json" }
|
|
338
415
|
}),
|
|
339
416
|
shapeFault: shapeRestFault
|
|
417
|
+
}, clearTaskDeadLetterRestBinding = {
|
|
418
|
+
method: "DELETE",
|
|
419
|
+
path: "/v1/tasks/diagnostics/dead-letter/:operationId",
|
|
420
|
+
pathParamNames: ["operationId"],
|
|
421
|
+
operationName: "weft.tasks.diagnostics.deadletters.clear",
|
|
422
|
+
inputSources: {
|
|
423
|
+
operationId: { kind: "path", pathParam: "operationId" }
|
|
424
|
+
},
|
|
425
|
+
extractInput: async (_request, pathParams) => ({
|
|
426
|
+
operationId: pathParams.operationId ?? ""
|
|
427
|
+
}),
|
|
428
|
+
success: { kind: "json", status: 200 },
|
|
429
|
+
shapeSuccess: (output) => new Response(JSON.stringify(output), {
|
|
430
|
+
status: 200,
|
|
431
|
+
headers: { "Content-Type": "application/json" }
|
|
432
|
+
}),
|
|
433
|
+
shapeFault: shapeRestFault
|
|
340
434
|
};
|
|
@@ -13,6 +13,6 @@ export type GetUpdateResultOutput = {
|
|
|
13
13
|
};
|
|
14
14
|
export declare const getUpdateResultOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
15
15
|
updateId: string;
|
|
16
|
-
}, GetUpdateResultOutput>;
|
|
16
|
+
}, GetUpdateResultOutput, unknown>;
|
|
17
17
|
export declare const getUpdateResultRestBinding: UnknownRestBinding;
|
|
18
18
|
export {};
|
|
@@ -8,6 +8,6 @@ export type GetWorkflowAttributesInput = z.infer<typeof getWorkflowAttributesInp
|
|
|
8
8
|
export type GetWorkflowAttributesOutput = Record<string, SearchAttributeValue>;
|
|
9
9
|
export declare const getWorkflowAttributesOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
10
10
|
workflowId: string;
|
|
11
|
-
}, GetWorkflowAttributesOutput>;
|
|
11
|
+
}, GetWorkflowAttributesOutput, unknown>;
|
|
12
12
|
export declare const getWorkflowAttributesRestBinding: UnknownRestBinding;
|
|
13
13
|
export {};
|
|
@@ -10,6 +10,6 @@ export type GetWorkflowEventsOutput = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare const getWorkflowEventsOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
12
12
|
workflowId: string;
|
|
13
|
-
}, GetWorkflowEventsOutput>;
|
|
13
|
+
}, GetWorkflowEventsOutput, unknown>;
|
|
14
14
|
export declare const getWorkflowEventsRestBinding: UnknownRestBinding;
|
|
15
15
|
export {};
|
|
@@ -9,6 +9,6 @@ export type GetWorkflowResultOutput = {
|
|
|
9
9
|
};
|
|
10
10
|
export declare const getWorkflowResultOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
11
11
|
workflowId: string;
|
|
12
|
-
}, GetWorkflowResultOutput>;
|
|
12
|
+
}, GetWorkflowResultOutput, unknown>;
|
|
13
13
|
export declare const getWorkflowResultRestBinding: UnknownRestBinding;
|
|
14
14
|
export {};
|
|
@@ -8,6 +8,6 @@ export type GetWorkflowTimelineInput = z.infer<typeof getWorkflowTimelineInput>;
|
|
|
8
8
|
export type GetWorkflowTimelineOutput = WorkflowTimelineEntry[];
|
|
9
9
|
export declare const getWorkflowTimelineOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
10
10
|
workflowId: string;
|
|
11
|
-
}, GetWorkflowTimelineOutput>;
|
|
11
|
+
}, GetWorkflowTimelineOutput, unknown>;
|
|
12
12
|
export declare const getWorkflowTimelineRestBinding: UnknownRestBinding;
|
|
13
13
|
export {};
|
|
@@ -18,7 +18,7 @@ export type GetWorkflowInput = z.infer<typeof getWorkflowInput>;
|
|
|
18
18
|
export type GetWorkflowOutput = WorkflowState;
|
|
19
19
|
export declare const getWorkflowOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
20
20
|
workflowId: string;
|
|
21
|
-
}, WorkflowState>;
|
|
21
|
+
}, WorkflowState, unknown>;
|
|
22
22
|
/**
|
|
23
23
|
* RestBinding for `GET /v1/workflows/:id`. Pulls the workflow id from
|
|
24
24
|
* the path param, invokes the operation, maps success/fault to the
|
|
@@ -8,6 +8,6 @@ export type ListCheckpointsInput = z.infer<typeof listCheckpointsInput>;
|
|
|
8
8
|
export type ListCheckpointsOutput = CheckpointSummary[];
|
|
9
9
|
export declare const listCheckpointsOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
10
10
|
workflowId: string;
|
|
11
|
-
}, ListCheckpointsOutput>;
|
|
11
|
+
}, ListCheckpointsOutput, unknown>;
|
|
12
12
|
export declare const listCheckpointsRestBinding: UnknownRestBinding;
|
|
13
13
|
export {};
|
|
@@ -14,6 +14,6 @@ export declare const listReviewsOperation: import("../operation-catalog.ts").Ope
|
|
|
14
14
|
status?: ReviewStatus | undefined;
|
|
15
15
|
workflowId?: string | undefined;
|
|
16
16
|
reviewType?: string | undefined;
|
|
17
|
-
}, ListReviewsOutput>;
|
|
17
|
+
}, ListReviewsOutput, unknown>;
|
|
18
18
|
export declare const listReviewsRestBinding: UnknownRestBinding;
|
|
19
19
|
export {};
|
|
@@ -23,6 +23,6 @@ export declare const listSchedulesOperation: import("../operation-catalog.ts").O
|
|
|
23
23
|
workflowType?: unknown;
|
|
24
24
|
limit?: unknown;
|
|
25
25
|
offset?: unknown;
|
|
26
|
-
}, ListSchedulesOutput>;
|
|
26
|
+
}, ListSchedulesOutput, unknown>;
|
|
27
27
|
export declare const listSchedulesRestBinding: UnknownRestBinding;
|
|
28
28
|
export {};
|
|
@@ -52,7 +52,7 @@ type ListTaskQueuesOptions = {
|
|
|
52
52
|
* with metadata only — discovery output still describes the endpoint —
|
|
53
53
|
* but `invoke` throws if called.
|
|
54
54
|
*/
|
|
55
|
-
export declare function createListTaskQueuesOperation(options?: ListTaskQueuesOptions): import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListTaskQueuesOutput>;
|
|
55
|
+
export declare function createListTaskQueuesOperation(options?: ListTaskQueuesOptions): import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListTaskQueuesOutput, unknown>;
|
|
56
56
|
type MergeArgs = {
|
|
57
57
|
now: number;
|
|
58
58
|
workerSummaries: WorkerSummary[];
|
|
@@ -65,7 +65,7 @@ type MergeArgs = {
|
|
|
65
65
|
*/
|
|
66
66
|
export declare function mergeQueueHealth(args: MergeArgs): TaskQueueHealth[];
|
|
67
67
|
/** Default discovery-only operation; live servers use `createListTaskQueuesOperation(...)`. */
|
|
68
|
-
export declare const listTaskQueuesOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListTaskQueuesOutput>;
|
|
68
|
+
export declare const listTaskQueuesOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListTaskQueuesOutput, unknown>;
|
|
69
69
|
/** Build the REST binding for `weft.task.queues.list`. */
|
|
70
70
|
export declare function createListTaskQueuesRestBinding(): UnknownRestBinding;
|
|
71
71
|
export {};
|
|
@@ -44,9 +44,9 @@ type ListWorkersOptions = {
|
|
|
44
44
|
* stays honest, but `invoke` throws if called — this path is reserved
|
|
45
45
|
* for discovery-only registries (OpenAPI/AsyncAPI generators).
|
|
46
46
|
*/
|
|
47
|
-
export declare function createListWorkersOperation(options?: ListWorkersOptions): import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListWorkersOutput>;
|
|
47
|
+
export declare function createListWorkersOperation(options?: ListWorkersOptions): import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListWorkersOutput, unknown>;
|
|
48
48
|
/** Default discovery-only operation; live servers use `createListWorkersOperation(...)`. */
|
|
49
|
-
export declare const listWorkersOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListWorkersOutput>;
|
|
49
|
+
export declare const listWorkersOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, ListWorkersOutput, unknown>;
|
|
50
50
|
/**
|
|
51
51
|
* Build the REST binding for `weft.workers.list`. The binding is metadata
|
|
52
52
|
* only; the live `WorkerRegistry` is wired into the operation, not the
|
|
@@ -74,6 +74,6 @@ export declare const listWorkflowsOperation: import("../operation-catalog.ts").O
|
|
|
74
74
|
} | undefined;
|
|
75
75
|
failureCategory?: FailureCategory | FailureCategory[] | undefined;
|
|
76
76
|
include?: string | string[] | undefined;
|
|
77
|
-
}, ListWorkflowsOutput>;
|
|
77
|
+
}, ListWorkflowsOutput, unknown>;
|
|
78
78
|
export declare const listWorkflowsRestBinding: UnknownRestBinding;
|
|
79
79
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type WeftErrorCode } from '../../core/weft-error.ts';
|
|
1
2
|
import { type OperationFault } from '../operation-fault.ts';
|
|
2
3
|
/** Type guard distinguishing an `OperationFault` from a value type. */
|
|
3
4
|
export declare function isOperationFault(value: unknown): value is OperationFault;
|
|
@@ -11,11 +12,25 @@ export declare function jsonErrorResponse(message: string, status: number): Resp
|
|
|
11
12
|
* Construct an `InvalidParams` fault with the `{ issues: [] }` data
|
|
12
13
|
* shape. This is the canonical 400-class fault for caller-input validation
|
|
13
14
|
* errors raised inside `invoke()` or `extractInput()`.
|
|
15
|
+
*
|
|
16
|
+
* Pass `weftCode` only when a typed `WeftError` is in hand (e.g. a caught
|
|
17
|
+
* `WorkflowNotRegisteredError`) so REST clients can branch on it through
|
|
18
|
+
* `isWeftFault`. It is omitted entirely when absent — never written as
|
|
19
|
+
* `weftCode: undefined` — so the dozens of generic validation callers keep
|
|
20
|
+
* their exact `{ issues: [] }` data shape.
|
|
14
21
|
*/
|
|
15
|
-
export declare function invalidParamsFault(message: string): OperationFault;
|
|
22
|
+
export declare function invalidParamsFault(message: string, weftCode?: WeftErrorCode): OperationFault;
|
|
16
23
|
/**
|
|
17
24
|
* Default REST fault shaper: masks `EngineFailure` to a generic
|
|
18
25
|
* `"Internal server error"` 500; other faults map by `FAULT_CODE_TO_HTTP_STATUS`.
|
|
19
26
|
* REST-only — JSON-RPC transports receive unmasked faults.
|
|
27
|
+
*
|
|
28
|
+
* When the fault carries a fine-grained `data.weftCode` (set only at sites that
|
|
29
|
+
* hold a typed `WeftError`, e.g. `WorkflowNotFoundError` /
|
|
30
|
+
* `WorkflowNotRegisteredError`), it is emitted as a top-level `weftCode` sibling
|
|
31
|
+
* of the flat `{ error }` body so REST clients can branch transport-uniformly
|
|
32
|
+
* via `isWeftFault`. The body's `error` stays a plain string, so the new field
|
|
33
|
+
* is a sibling rather than nested. Faults without a `weftCode` keep their exact
|
|
34
|
+
* `{ error }` shape, and `EngineFailure` stays masked (it carries no weftCode).
|
|
20
35
|
*/
|
|
21
36
|
export declare function shapeRestFault(fault: OperationFault): Response;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isWeftErrorCode } from "../../core/weft-error.js";
|
|
1
2
|
import { FAULT_CODE_TO_HTTP_STATUS } from "../operation-fault.js";
|
|
2
3
|
export function isOperationFault(value) {
|
|
3
4
|
return typeof value === "object" && value !== null && "code" in value && "message" in value && "data" in value;
|
|
@@ -8,15 +9,26 @@ export function jsonErrorResponse(message, status) {
|
|
|
8
9
|
headers: { "Content-Type": "application/json" }
|
|
9
10
|
});
|
|
10
11
|
}
|
|
11
|
-
export function invalidParamsFault(message) {
|
|
12
|
+
export function invalidParamsFault(message, weftCode) {
|
|
12
13
|
return {
|
|
13
14
|
code: "InvalidParams",
|
|
14
15
|
message,
|
|
15
|
-
data: { issues: [] }
|
|
16
|
+
data: weftCode === void 0 ? { issues: [] } : { issues: [], weftCode }
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
export function shapeRestFault(fault) {
|
|
19
20
|
if (fault.code === "EngineFailure")
|
|
20
21
|
return jsonErrorResponse("Internal server error", 500);
|
|
21
|
-
|
|
22
|
+
const status = FAULT_CODE_TO_HTTP_STATUS[fault.code], weftCode = weftCodeFromFaultData(fault.data);
|
|
23
|
+
if (weftCode === void 0)
|
|
24
|
+
return jsonErrorResponse(fault.message, status);
|
|
25
|
+
return new Response(JSON.stringify({ error: fault.message, weftCode }), {
|
|
26
|
+
status,
|
|
27
|
+
headers: { "Content-Type": "application/json" }
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function weftCodeFromFaultData(data) {
|
|
31
|
+
if (typeof data !== "object" || data === null || !("weftCode" in data))
|
|
32
|
+
return;
|
|
33
|
+
return isWeftErrorCode(data.weftCode) ? data.weftCode : void 0;
|
|
22
34
|
}
|
|
@@ -8,6 +8,6 @@ export type PauseScheduleInput = z.infer<typeof pauseScheduleInput>;
|
|
|
8
8
|
export type PauseScheduleOutput = z.infer<typeof pauseScheduleOutput>;
|
|
9
9
|
export declare const pauseScheduleOperation: import("../operation-catalog.ts").OperationDefinition<{
|
|
10
10
|
scheduleId: string;
|
|
11
|
-
}, undefined>;
|
|
11
|
+
}, undefined, unknown>;
|
|
12
12
|
export declare const pauseScheduleRestBinding: UnknownRestBinding;
|
|
13
13
|
export {};
|