@lostgradient/weft 0.2.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/LICENSE +21 -0
- package/README.md +493 -0
- package/dist/alerting/alert-manager.d.ts +42 -0
- package/dist/alerting/alert-manager.js +167 -0
- package/dist/alerting/index.d.ts +2 -0
- package/dist/alerting/index.js +1 -0
- package/dist/alerting/sliding-window.d.ts +26 -0
- package/dist/alerting/sliding-window.js +97 -0
- package/dist/alerting/types.d.ts +157 -0
- package/dist/alerting/types.js +0 -0
- package/dist/cli/api-arguments.d.ts +2 -0
- package/dist/cli/api-arguments.js +48 -0
- package/dist/cli/api.d.ts +13 -0
- package/dist/cli/api.js +191 -0
- package/dist/cli/codegen-arguments.d.ts +10 -0
- package/dist/cli/codegen-arguments.js +50 -0
- package/dist/cli/codegen-emit-keywords.d.ts +28 -0
- package/dist/cli/codegen-emit-keywords.js +48 -0
- package/dist/cli/codegen-emit.d.ts +50 -0
- package/dist/cli/codegen-emit.js +280 -0
- package/dist/cli/codegen.d.ts +38 -0
- package/dist/cli/codegen.js +268 -0
- package/dist/cli/command-suggestions.d.ts +9 -0
- package/dist/cli/command-suggestions.js +27 -0
- package/dist/cli/completions.d.ts +17 -0
- package/dist/cli/completions.js +112 -0
- package/dist/cli/conformance.d.ts +9 -0
- package/dist/cli/conformance.js +226 -0
- package/dist/cli/doctor.d.ts +6 -0
- package/dist/cli/doctor.js +9 -0
- package/dist/cli/generated/operation-client.generated.d.ts +605 -0
- package/dist/cli/generated/operation-client.generated.js +60 -0
- package/dist/cli/help-text.d.ts +13 -0
- package/dist/cli/help-text.js +269 -0
- package/dist/cli/index.d.ts +23 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/json-rpc-client.d.ts +15 -0
- package/dist/cli/json-rpc-client.js +37 -0
- package/dist/cli/noun-verb-arguments.d.ts +15 -0
- package/dist/cli/noun-verb-arguments.js +190 -0
- package/dist/cli/operation-catalog-snapshot.d.ts +38 -0
- package/dist/cli/operation-catalog-snapshot.js +48 -0
- package/dist/cli/operation-client-runtime.d.ts +47 -0
- package/dist/cli/operation-client-runtime.js +33 -0
- package/dist/cli/output.d.ts +66 -0
- package/dist/cli/output.js +83 -0
- package/dist/cli/parse-arguments.d.ts +3 -0
- package/dist/cli/parse-arguments.js +214 -0
- package/dist/cli/parse-schedule-arguments.d.ts +9 -0
- package/dist/cli/parse-schedule-arguments.js +132 -0
- package/dist/cli/schedule.d.ts +3 -0
- package/dist/cli/schedule.js +128 -0
- package/dist/cli/serve-registrations.d.ts +15 -0
- package/dist/cli/serve-registrations.js +23 -0
- package/dist/cli/server-client.d.ts +45 -0
- package/dist/cli/server-client.js +33 -0
- package/dist/cli/server-commands.d.ts +19 -0
- package/dist/cli/server-commands.js +151 -0
- package/dist/cli/storage-backend-arguments.d.ts +15 -0
- package/dist/cli/storage-backend-arguments.js +16 -0
- package/dist/cli/storage-factory.d.ts +8 -0
- package/dist/cli/storage-factory.js +18 -0
- package/dist/cli/subcommand-detection.d.ts +2 -0
- package/dist/cli/subcommand-detection.js +38 -0
- package/dist/cli/tail.d.ts +50 -0
- package/dist/cli/tail.js +161 -0
- package/dist/cli/timeline.d.ts +9 -0
- package/dist/cli/timeline.js +78 -0
- package/dist/cli/types.d.ts +224 -0
- package/dist/cli/types.js +0 -0
- package/dist/cli/utilities.d.ts +9 -0
- package/dist/cli/utilities.js +120 -0
- package/dist/cli/validate.d.ts +6 -0
- package/dist/cli/validate.js +70 -0
- package/dist/cli/version-check.d.ts +7 -0
- package/dist/cli/version-check.js +16 -0
- package/dist/cli/version.d.ts +7 -0
- package/dist/cli/version.js +4 -0
- package/dist/cli/workflow-commands.d.ts +15 -0
- package/dist/cli/workflow-commands.js +195 -0
- package/dist/cli-main.d.ts +2 -0
- package/dist/cli-main.js +402 -0
- package/dist/client/event-stream-transport.d.ts +73 -0
- package/dist/client/event-stream-transport.js +59 -0
- package/dist/client/event-stream.d.ts +90 -0
- package/dist/client/event-stream.js +221 -0
- package/dist/client/event-tail.d.ts +50 -0
- package/dist/client/event-tail.js +0 -0
- package/dist/client/handle-delegation.d.ts +73 -0
- package/dist/client/handle-delegation.js +66 -0
- package/dist/client/http-client-requests.d.ts +65 -0
- package/dist/client/http-client-requests.js +178 -0
- package/dist/client/http-client.d.ts +130 -0
- package/dist/client/http-client.js +217 -0
- package/dist/client/http-handle.d.ts +27 -0
- package/dist/client/http-handle.js +43 -0
- package/dist/client/http-operations.d.ts +29 -0
- package/dist/client/http-operations.js +36 -0
- package/dist/client/http-request.d.ts +101 -0
- package/dist/client/http-request.js +73 -0
- package/dist/client/http-schedule-handle.d.ts +5 -0
- package/dist/client/http-schedule-handle.js +5 -0
- package/dist/client/in-process-operations.d.ts +30 -0
- package/dist/client/in-process-operations.js +17 -0
- package/dist/client/index.d.ts +15 -0
- package/dist/client/index.js +2 -0
- package/dist/client/interface.d.ts +333 -0
- package/dist/client/interface.js +0 -0
- package/dist/client/local-event-tail.d.ts +30 -0
- package/dist/client/local-event-tail.js +131 -0
- package/dist/client/local.d.ts +115 -0
- package/dist/client/local.js +178 -0
- package/dist/client/open-event-subscription.d.ts +33 -0
- package/dist/client/open-event-subscription.js +5 -0
- package/dist/client/schedule-list-search-params.d.ts +3 -0
- package/dist/client/schedule-list-search-params.js +18 -0
- package/dist/client/search-params.d.ts +3 -0
- package/dist/client/search-params.js +54 -0
- package/dist/client/start-body.d.ts +9 -0
- package/dist/client/start-body.js +23 -0
- package/dist/client/workflow-name-typing.d.ts +33 -0
- package/dist/client/workflow-name-typing.js +0 -0
- package/dist/connection.d.ts +121 -0
- package/dist/connection.js +161 -0
- package/dist/core/activity-registry.d.ts +135 -0
- package/dist/core/activity-registry.js +174 -0
- package/dist/core/activity.d.ts +2 -0
- package/dist/core/activity.js +1 -0
- package/dist/core/aggregate-validation.d.ts +85 -0
- package/dist/core/aggregate-validation.js +48 -0
- package/dist/core/atomic-state-events.d.ts +214 -0
- package/dist/core/atomic-state-events.js +39 -0
- package/dist/core/atomic-state.d.ts +79 -0
- package/dist/core/atomic-state.js +231 -0
- package/dist/core/bulk-workflow-filter.d.ts +23 -0
- package/dist/core/bulk-workflow-filter.js +38 -0
- package/dist/core/checkpoint/comparison.d.ts +2 -0
- package/dist/core/checkpoint/comparison.js +137 -0
- package/dist/core/checkpoint/index.d.ts +4 -0
- package/dist/core/checkpoint/index.js +3 -0
- package/dist/core/checkpoint/interfaces.d.ts +11 -0
- package/dist/core/checkpoint/interfaces.js +0 -0
- package/dist/core/checkpoint/lifecycle.d.ts +49 -0
- package/dist/core/checkpoint/lifecycle.js +36 -0
- package/dist/core/checkpoint/serialization.d.ts +31 -0
- package/dist/core/checkpoint/serialization.js +155 -0
- package/dist/core/checkpoint/validation.d.ts +4 -0
- package/dist/core/checkpoint/validation.js +26 -0
- package/dist/core/checkpoint.d.ts +1 -0
- package/dist/core/checkpoint.js +1 -0
- package/dist/core/codec/api.d.ts +32 -0
- package/dist/core/codec/api.js +9 -0
- package/dist/core/codec/extension-codec.d.ts +7 -0
- package/dist/core/codec/extension-codec.js +145 -0
- package/dist/core/codec/index.d.ts +3 -0
- package/dist/core/codec/index.js +2 -0
- package/dist/core/codec/validation.d.ts +28 -0
- package/dist/core/codec/validation.js +139 -0
- package/dist/core/codec-helpers.d.ts +8 -0
- package/dist/core/codec-helpers.js +19 -0
- package/dist/core/codec.d.ts +1 -0
- package/dist/core/codec.js +1 -0
- package/dist/core/compression.d.ts +127 -0
- package/dist/core/compression.js +88 -0
- package/dist/core/concurrency-lock-record.d.ts +122 -0
- package/dist/core/concurrency-lock-record.js +53 -0
- package/dist/core/concurrency.d.ts +221 -0
- package/dist/core/concurrency.js +93 -0
- package/dist/core/constraint.d.ts +144 -0
- package/dist/core/constraint.js +3 -0
- package/dist/core/context/attributes.d.ts +7 -0
- package/dist/core/context/attributes.js +29 -0
- package/dist/core/context/child-workflow-pipe.d.ts +18 -0
- package/dist/core/context/child-workflow-pipe.js +111 -0
- package/dist/core/context/durable-operations.d.ts +29 -0
- package/dist/core/context/durable-operations.js +166 -0
- package/dist/core/context/index.d.ts +114 -0
- package/dist/core/context/index.js +224 -0
- package/dist/core/context/internals.d.ts +30 -0
- package/dist/core/context/internals.js +36 -0
- package/dist/core/context/operation-request.d.ts +160 -0
- package/dist/core/context/operation-request.js +0 -0
- package/dist/core/context/parallel-cache-entry.d.ts +91 -0
- package/dist/core/context/parallel-cache-entry.js +92 -0
- package/dist/core/context/parallel-operations.d.ts +9 -0
- package/dist/core/context/parallel-operations.js +202 -0
- package/dist/core/context/run-operation.d.ts +21 -0
- package/dist/core/context/run-operation.js +231 -0
- package/dist/core/context/saga.d.ts +4 -0
- package/dist/core/context/saga.js +65 -0
- package/dist/core/context/session-state.d.ts +22 -0
- package/dist/core/context/session-state.js +154 -0
- package/dist/core/context/speculate-operations.d.ts +4 -0
- package/dist/core/context/speculate-operations.js +14 -0
- package/dist/core/context/speculative-child.d.ts +6 -0
- package/dist/core/context/speculative-child.js +67 -0
- package/dist/core/context/state-namespace.d.ts +27 -0
- package/dist/core/context/state-namespace.js +138 -0
- package/dist/core/context/types.d.ts +181 -0
- package/dist/core/context/types.js +0 -0
- package/dist/core/context/updates.d.ts +46 -0
- package/dist/core/context/updates.js +21 -0
- package/dist/core/context/validation.d.ts +2 -0
- package/dist/core/context/validation.js +12 -0
- package/dist/core/context.d.ts +1 -0
- package/dist/core/context.js +1 -0
- package/dist/core/debug-output.d.ts +3 -0
- package/dist/core/debug-output.js +112 -0
- package/dist/core/effect-log/index.d.ts +194 -0
- package/dist/core/effect-log/index.js +104 -0
- package/dist/core/engine/activity-reconciliation.d.ts +108 -0
- package/dist/core/engine/activity-reconciliation.js +182 -0
- package/dist/core/engine/aggregate.d.ts +47 -0
- package/dist/core/engine/aggregate.js +132 -0
- package/dist/core/engine/anonymous-signal-sequence.d.ts +4 -0
- package/dist/core/engine/anonymous-signal-sequence.js +101 -0
- package/dist/core/engine/async-activity-completion.d.ts +141 -0
- package/dist/core/engine/async-activity-completion.js +131 -0
- package/dist/core/engine/attributes-tags.d.ts +31 -0
- package/dist/core/engine/attributes-tags.js +178 -0
- package/dist/core/engine/broadcast.d.ts +8 -0
- package/dist/core/engine/broadcast.js +26 -0
- package/dist/core/engine/bulk-operations-purge.d.ts +11 -0
- package/dist/core/engine/bulk-operations-purge.js +246 -0
- package/dist/core/engine/bulk-operations-shared.d.ts +28 -0
- package/dist/core/engine/bulk-operations-shared.js +198 -0
- package/dist/core/engine/bulk-operations.d.ts +21 -0
- package/dist/core/engine/bulk-operations.js +128 -0
- package/dist/core/engine/callback-creators-bundles.d.ts +25 -0
- package/dist/core/engine/callback-creators-bundles.js +154 -0
- package/dist/core/engine/callback-creators-core.d.ts +39 -0
- package/dist/core/engine/callback-creators-core.js +136 -0
- package/dist/core/engine/callback-creators-router-registry.d.ts +4 -0
- package/dist/core/engine/callback-creators-router-registry.js +9 -0
- package/dist/core/engine/callback-creators-router.d.ts +3 -0
- package/dist/core/engine/callback-creators-router.js +68 -0
- package/dist/core/engine/callback-creators-schedule.d.ts +13 -0
- package/dist/core/engine/callback-creators-schedule.js +65 -0
- package/dist/core/engine/callback-creators.d.ts +9 -0
- package/dist/core/engine/callback-creators.js +87 -0
- package/dist/core/engine/cancel-handlers.d.ts +6 -0
- package/dist/core/engine/cancel-handlers.js +32 -0
- package/dist/core/engine/checkpoint-commit-snapshots.d.ts +4 -0
- package/dist/core/engine/checkpoint-commit-snapshots.js +16 -0
- package/dist/core/engine/checkpoint-io.d.ts +34 -0
- package/dist/core/engine/checkpoint-io.js +183 -0
- package/dist/core/engine/checkpoint-reads.d.ts +22 -0
- package/dist/core/engine/checkpoint-reads.js +98 -0
- package/dist/core/engine/child-workflow.d.ts +20 -0
- package/dist/core/engine/child-workflow.js +72 -0
- package/dist/core/engine/completed-review-storage.d.ts +14 -0
- package/dist/core/engine/completed-review-storage.js +61 -0
- package/dist/core/engine/constraints.d.ts +24 -0
- package/dist/core/engine/constraints.js +57 -0
- package/dist/core/engine/construction.d.ts +60 -0
- package/dist/core/engine/construction.js +213 -0
- package/dist/core/engine/disposal.d.ts +9 -0
- package/dist/core/engine/disposal.js +58 -0
- package/dist/core/engine/engine-create-types.d.ts +70 -0
- package/dist/core/engine/engine-create-types.js +0 -0
- package/dist/core/engine/engine-internal-types.d.ts +59 -0
- package/dist/core/engine/engine-internal-types.js +0 -0
- package/dist/core/engine/engine-leak-warnings.d.ts +26 -0
- package/dist/core/engine/engine-leak-warnings.js +42 -0
- package/dist/core/engine/engine-runtime-helpers.d.ts +8 -0
- package/dist/core/engine/engine-runtime-helpers.js +52 -0
- package/dist/core/engine/engine-state-namespace.d.ts +20 -0
- package/dist/core/engine/engine-state-namespace.js +0 -0
- package/dist/core/engine/errors.d.ts +215 -0
- package/dist/core/engine/errors.js +90 -0
- package/dist/core/engine/event-log-compaction.d.ts +102 -0
- package/dist/core/engine/event-log-compaction.js +76 -0
- package/dist/core/engine/guards.d.ts +17 -0
- package/dist/core/engine/guards.js +43 -0
- package/dist/core/engine/handle-iteration.d.ts +2 -0
- package/dist/core/engine/handle-iteration.js +59 -0
- package/dist/core/engine/handle-result.d.ts +8 -0
- package/dist/core/engine/handle-result.js +74 -0
- package/dist/core/engine/handles.d.ts +137 -0
- package/dist/core/engine/handles.js +173 -0
- package/dist/core/engine/index.d.ts +311 -0
- package/dist/core/engine/index.js +595 -0
- package/dist/core/engine/inline-launch-queue.d.ts +17 -0
- package/dist/core/engine/inline-launch-queue.js +93 -0
- package/dist/core/engine/inline-parking.d.ts +26 -0
- package/dist/core/engine/inline-parking.js +86 -0
- package/dist/core/engine/internals.d.ts +167 -0
- package/dist/core/engine/internals.js +11 -0
- package/dist/core/engine/lifecycle/fork-helpers.d.ts +9 -0
- package/dist/core/engine/lifecycle/fork-helpers.js +66 -0
- package/dist/core/engine/lifecycle/persist.d.ts +22 -0
- package/dist/core/engine/lifecycle/persist.js +80 -0
- package/dist/core/engine/lifecycle/resume.d.ts +4 -0
- package/dist/core/engine/lifecycle/resume.js +136 -0
- package/dist/core/engine/lifecycle/shared.d.ts +79 -0
- package/dist/core/engine/lifecycle/shared.js +49 -0
- package/dist/core/engine/lifecycle/start-batch.d.ts +7 -0
- package/dist/core/engine/lifecycle/start-batch.js +70 -0
- package/dist/core/engine/lifecycle/start-exec.d.ts +5 -0
- package/dist/core/engine/lifecycle/start-exec.js +39 -0
- package/dist/core/engine/lifecycle/start.d.ts +13 -0
- package/dist/core/engine/lifecycle/start.js +163 -0
- package/dist/core/engine/lifecycle/transition.d.ts +8 -0
- package/dist/core/engine/lifecycle/transition.js +183 -0
- package/dist/core/engine/lifecycle.d.ts +8 -0
- package/dist/core/engine/lifecycle.js +40 -0
- package/dist/core/engine/list-candidate-resolution.d.ts +15 -0
- package/dist/core/engine/list-candidate-resolution.js +88 -0
- package/dist/core/engine/listing.d.ts +17 -0
- package/dist/core/engine/listing.js +186 -0
- package/dist/core/engine/operations-activity.d.ts +40 -0
- package/dist/core/engine/operations-activity.js +194 -0
- package/dist/core/engine/operations-coordination.d.ts +39 -0
- package/dist/core/engine/operations-coordination.js +162 -0
- package/dist/core/engine/operations-data.d.ts +23 -0
- package/dist/core/engine/operations-data.js +38 -0
- package/dist/core/engine/operations-router.d.ts +75 -0
- package/dist/core/engine/operations-router.js +90 -0
- package/dist/core/engine/operations-speculate.d.ts +16 -0
- package/dist/core/engine/operations-speculate.js +40 -0
- package/dist/core/engine/operations-state.d.ts +16 -0
- package/dist/core/engine/operations-state.js +27 -0
- package/dist/core/engine/operations-stream.d.ts +20 -0
- package/dist/core/engine/operations-stream.js +54 -0
- package/dist/core/engine/operations-time.d.ts +28 -0
- package/dist/core/engine/operations-time.js +167 -0
- package/dist/core/engine/parallel-dispatch.d.ts +92 -0
- package/dist/core/engine/parallel-dispatch.js +45 -0
- package/dist/core/engine/pending-updates.d.ts +18 -0
- package/dist/core/engine/pending-updates.js +109 -0
- package/dist/core/engine/persisted-data-version.d.ts +24 -0
- package/dist/core/engine/persisted-data-version.js +25 -0
- package/dist/core/engine/queries.d.ts +3 -0
- package/dist/core/engine/queries.js +17 -0
- package/dist/core/engine/registration.d.ts +6 -0
- package/dist/core/engine/registration.js +107 -0
- package/dist/core/engine/retention.d.ts +15 -0
- package/dist/core/engine/retention.js +76 -0
- package/dist/core/engine/review-list-entries.d.ts +6 -0
- package/dist/core/engine/review-list-entries.js +117 -0
- package/dist/core/engine/reviews.d.ts +34 -0
- package/dist/core/engine/reviews.js +242 -0
- package/dist/core/engine/schedule-occurrence.d.ts +35 -0
- package/dist/core/engine/schedule-occurrence.js +26 -0
- package/dist/core/engine/schedule-timer.d.ts +4 -0
- package/dist/core/engine/schedule-timer.js +77 -0
- package/dist/core/engine/schedules.d.ts +34 -0
- package/dist/core/engine/schedules.js +204 -0
- package/dist/core/engine/signals.d.ts +40 -0
- package/dist/core/engine/signals.js +185 -0
- package/dist/core/engine/speculative-execution-state.d.ts +8 -0
- package/dist/core/engine/speculative-execution-state.js +26 -0
- package/dist/core/engine/state-utilities.d.ts +62 -0
- package/dist/core/engine/state-utilities.js +306 -0
- package/dist/core/engine/storage-io.d.ts +21 -0
- package/dist/core/engine/storage-io.js +82 -0
- package/dist/core/engine/strategy-helpers.d.ts +27 -0
- package/dist/core/engine/strategy-helpers.js +47 -0
- package/dist/core/engine/stream-chunk-loading.d.ts +5 -0
- package/dist/core/engine/stream-chunk-loading.js +22 -0
- package/dist/core/engine/sub-operation.d.ts +24 -0
- package/dist/core/engine/sub-operation.js +78 -0
- package/dist/core/engine/termination/cleanup.d.ts +67 -0
- package/dist/core/engine/termination/cleanup.js +167 -0
- package/dist/core/engine/termination/complete.d.ts +13 -0
- package/dist/core/engine/termination/complete.js +249 -0
- package/dist/core/engine/termination.d.ts +7 -0
- package/dist/core/engine/termination.js +23 -0
- package/dist/core/engine/updates.d.ts +56 -0
- package/dist/core/engine/updates.js +230 -0
- package/dist/core/engine/validation/schedule.d.ts +38 -0
- package/dist/core/engine/validation/schedule.js +258 -0
- package/dist/core/engine/validation.d.ts +40 -0
- package/dist/core/engine/validation.js +144 -0
- package/dist/core/engine/workflow-feed.d.ts +82 -0
- package/dist/core/engine/workflow-feed.js +96 -0
- package/dist/core/engine/workflow-indexes.d.ts +103 -0
- package/dist/core/engine/workflow-indexes.js +93 -0
- package/dist/core/engine/workflow-state-stream.d.ts +9 -0
- package/dist/core/engine/workflow-state-stream.js +126 -0
- package/dist/core/engine/workflow-visibility-queries.d.ts +40 -0
- package/dist/core/engine/workflow-visibility-queries.js +56 -0
- package/dist/core/engine-helpers.d.ts +56 -0
- package/dist/core/engine-helpers.js +52 -0
- package/dist/core/engine.d.ts +1 -0
- package/dist/core/engine.js +1 -0
- package/dist/core/event-log-shared.d.ts +65 -0
- package/dist/core/event-log-shared.js +31 -0
- package/dist/core/event-log-verify.d.ts +51 -0
- package/dist/core/event-log-verify.js +64 -0
- package/dist/core/event-log.d.ts +112 -0
- package/dist/core/event-log.js +81 -0
- package/dist/core/events/activity-events.d.ts +104 -0
- package/dist/core/events/activity-events.js +63 -0
- package/dist/core/events/attribute-events.d.ts +22 -0
- package/dist/core/events/attribute-events.js +10 -0
- package/dist/core/events/event-map.d.ts +80 -0
- package/dist/core/events/event-map.js +0 -0
- package/dist/core/events/index.d.ts +7 -0
- package/dist/core/events/index.js +7 -0
- package/dist/core/events/signal-events.d.ts +45 -0
- package/dist/core/events/signal-events.js +23 -0
- package/dist/core/events/system-events.d.ts +149 -0
- package/dist/core/events/system-events.js +92 -0
- package/dist/core/events/update-events.d.ts +53 -0
- package/dist/core/events/update-events.js +31 -0
- package/dist/core/events/workflow-events.d.ts +198 -0
- package/dist/core/events/workflow-events.js +91 -0
- package/dist/core/events.d.ts +1 -0
- package/dist/core/events.js +1 -0
- package/dist/core/execution-strategy.d.ts +107 -0
- package/dist/core/execution-strategy.js +0 -0
- package/dist/core/failure-categories.d.ts +18 -0
- package/dist/core/failure-categories.js +70 -0
- package/dist/core/fault-code.d.ts +92 -0
- package/dist/core/fault-code.js +21 -0
- package/dist/core/inline-execution-strategy.d.ts +76 -0
- package/dist/core/inline-execution-strategy.js +264 -0
- package/dist/core/interceptor/activity-composition.d.ts +20 -0
- package/dist/core/interceptor/activity-composition.js +17 -0
- package/dist/core/interceptor/index.d.ts +25 -0
- package/dist/core/interceptor/index.js +8 -0
- package/dist/core/interceptor/interception-contexts.d.ts +200 -0
- package/dist/core/interceptor/interception-contexts.js +0 -0
- package/dist/core/interceptor/interceptor-interfaces.d.ts +149 -0
- package/dist/core/interceptor/interceptor-interfaces.js +9 -0
- package/dist/core/interceptor/split.d.ts +11 -0
- package/dist/core/interceptor/split.js +14 -0
- package/dist/core/interceptor/workflow-composition.d.ts +21 -0
- package/dist/core/interceptor/workflow-composition.js +116 -0
- package/dist/core/interceptor.d.ts +1 -0
- package/dist/core/interceptor.js +1 -0
- package/dist/core/json.d.ts +56 -0
- package/dist/core/json.js +77 -0
- package/dist/core/list-filter-validation.d.ts +78 -0
- package/dist/core/list-filter-validation.js +75 -0
- package/dist/core/payload-size.d.ts +78 -0
- package/dist/core/payload-size.js +27 -0
- package/dist/core/persisted-data-incompatible-error.d.ts +48 -0
- package/dist/core/persisted-data-incompatible-error.js +12 -0
- package/dist/core/registry-snapshot.d.ts +69 -0
- package/dist/core/registry-snapshot.js +70 -0
- package/dist/core/review/events.d.ts +73 -0
- package/dist/core/review/events.js +31 -0
- package/dist/core/review/index.d.ts +265 -0
- package/dist/core/review/index.js +96 -0
- package/dist/core/runtime-workflow-engine.d.ts +16 -0
- package/dist/core/runtime-workflow-engine.js +6 -0
- package/dist/core/schedule/cron-formatter.d.ts +10 -0
- package/dist/core/schedule/cron-formatter.js +103 -0
- package/dist/core/schedule/cron-occurrence.d.ts +3 -0
- package/dist/core/schedule/cron-occurrence.js +129 -0
- package/dist/core/schedule/cron-parser.d.ts +2 -0
- package/dist/core/schedule/cron-parser.js +93 -0
- package/dist/core/schedule/cron-types.d.ts +35 -0
- package/dist/core/schedule/cron-types.js +0 -0
- package/dist/core/schedule/index.d.ts +3 -0
- package/dist/core/schedule/index.js +2 -0
- package/dist/core/schedule/interval-occurrence.d.ts +31 -0
- package/dist/core/schedule/interval-occurrence.js +26 -0
- package/dist/core/schedule.d.ts +1 -0
- package/dist/core/schedule.js +1 -0
- package/dist/core/scheduler/duration.d.ts +44 -0
- package/dist/core/scheduler/duration.js +48 -0
- package/dist/core/scheduler/index.d.ts +4 -0
- package/dist/core/scheduler/index.js +3 -0
- package/dist/core/scheduler/scheduler-class.d.ts +52 -0
- package/dist/core/scheduler/scheduler-class.js +167 -0
- package/dist/core/scheduler/timer-batch.d.ts +10 -0
- package/dist/core/scheduler/timer-batch.js +42 -0
- package/dist/core/scheduler/timer-sources.d.ts +17 -0
- package/dist/core/scheduler/timer-sources.js +61 -0
- package/dist/core/scheduler.d.ts +1 -0
- package/dist/core/scheduler.js +1 -0
- package/dist/core/search-attributes.d.ts +67 -0
- package/dist/core/search-attributes.js +196 -0
- package/dist/core/session-state.d.ts +18 -0
- package/dist/core/session-state.js +71 -0
- package/dist/core/signal-id.d.ts +2 -0
- package/dist/core/signal-id.js +10 -0
- package/dist/core/start-workflow-validation.d.ts +14 -0
- package/dist/core/start-workflow-validation.js +63 -0
- package/dist/core/step-context.d.ts +97 -0
- package/dist/core/step-context.js +113 -0
- package/dist/core/timeouts.d.ts +98 -0
- package/dist/core/timeouts.js +38 -0
- package/dist/core/types/activity.d.ts +316 -0
- package/dist/core/types/activity.js +15 -0
- package/dist/core/types/archive-adapter.d.ts +49 -0
- package/dist/core/types/archive-adapter.js +0 -0
- package/dist/core/types/bulk.d.ts +312 -0
- package/dist/core/types/bulk.js +1 -0
- package/dist/core/types/checkpoint.d.ts +237 -0
- package/dist/core/types/checkpoint.js +12 -0
- package/dist/core/types/clone-plain.d.ts +17 -0
- package/dist/core/types/clone-plain.js +25 -0
- package/dist/core/types/constants.d.ts +54 -0
- package/dist/core/types/constants.js +1 -0
- package/dist/core/types/deep-freeze.d.ts +31 -0
- package/dist/core/types/deep-freeze.js +31 -0
- package/dist/core/types/definition-schema-to-json.d.ts +41 -0
- package/dist/core/types/definition-schema-to-json.js +56 -0
- package/dist/core/types/definition-schema.d.ts +341 -0
- package/dist/core/types/definition-schema.js +45 -0
- package/dist/core/types/history-policy.d.ts +92 -0
- package/dist/core/types/history-policy.js +1 -0
- package/dist/core/types/identity.d.ts +55 -0
- package/dist/core/types/identity.js +0 -0
- package/dist/core/types/message-handles.d.ts +229 -0
- package/dist/core/types/message-handles.js +36 -0
- package/dist/core/types/name-grammar.d.ts +30 -0
- package/dist/core/types/name-grammar.js +9 -0
- package/dist/core/types/options.d.ts +360 -0
- package/dist/core/types/options.js +0 -0
- package/dist/core/types/payload-size-policy.d.ts +47 -0
- package/dist/core/types/payload-size-policy.js +0 -0
- package/dist/core/types/registry-type-helpers.d.ts +1 -0
- package/dist/core/types/registry-type-helpers.js +0 -0
- package/dist/core/types/retry-retention.d.ts +163 -0
- package/dist/core/types/retry-retention.js +6 -0
- package/dist/core/types/reviews.d.ts +170 -0
- package/dist/core/types/reviews.js +0 -0
- package/dist/core/types/schedules.d.ts +176 -0
- package/dist/core/types/schedules.js +3 -0
- package/dist/core/types/search-attributes.d.ts +127 -0
- package/dist/core/types/search-attributes.js +8 -0
- package/dist/core/types/serializer.d.ts +30 -0
- package/dist/core/types/serializer.js +0 -0
- package/dist/core/types/standard-schema-validate.d.ts +113 -0
- package/dist/core/types/standard-schema-validate.js +60 -0
- package/dist/core/types/state.d.ts +261 -0
- package/dist/core/types/state.js +0 -0
- package/dist/core/types/workflow-builder-helpers.d.ts +310 -0
- package/dist/core/types/workflow-builder-helpers.js +0 -0
- package/dist/core/types/workflow-builder-runtime.d.ts +97 -0
- package/dist/core/types/workflow-builder-runtime.js +137 -0
- package/dist/core/types/workflow-builder.d.ts +343 -0
- package/dist/core/types/workflow-builder.js +0 -0
- package/dist/core/types/workflow-context.d.ts +168 -0
- package/dist/core/types/workflow-context.js +0 -0
- package/dist/core/types/workflow-definition.d.ts +61 -0
- package/dist/core/types/workflow-definition.js +0 -0
- package/dist/core/types/workflow-function.d.ts +330 -0
- package/dist/core/types/workflow-function.js +9 -0
- package/dist/core/types/workflow-registries.d.ts +203 -0
- package/dist/core/types/workflow-registries.js +0 -0
- package/dist/core/types/workflow-registry.d.ts +31 -0
- package/dist/core/types/workflow-registry.js +0 -0
- package/dist/core/types.d.ts +26 -0
- package/dist/core/types.js +26 -0
- package/dist/core/updates.d.ts +183 -0
- package/dist/core/updates.js +141 -0
- package/dist/core/versioning.d.ts +153 -0
- package/dist/core/versioning.js +94 -0
- package/dist/core/weft-error.d.ts +82 -0
- package/dist/core/weft-error.js +43 -0
- package/dist/core/worker-checkpoint-resume-state.d.ts +11 -0
- package/dist/core/worker-checkpoint-resume-state.js +40 -0
- package/dist/core/worker-execution-dispatcher.d.ts +42 -0
- package/dist/core/worker-execution-dispatcher.js +95 -0
- package/dist/core/worker-execution-ownership.d.ts +20 -0
- package/dist/core/worker-execution-ownership.js +91 -0
- package/dist/core/worker-execution-strategy-options.d.ts +7 -0
- package/dist/core/worker-execution-strategy-options.js +0 -0
- package/dist/core/worker-execution-strategy.d.ts +29 -0
- package/dist/core/worker-execution-strategy.js +356 -0
- package/dist/core/worker-listener-registry.d.ts +11 -0
- package/dist/core/worker-listener-registry.js +35 -0
- package/dist/core/worker-message-helpers.d.ts +5 -0
- package/dist/core/worker-message-helpers.js +14 -0
- package/dist/core/worker-protocol-guard.d.ts +20 -0
- package/dist/core/worker-protocol-guard.js +69 -0
- package/dist/core/worker-protocol.d.ts +27 -0
- package/dist/core/worker-protocol.js +346 -0
- package/dist/core/worker-turn-watchdog.d.ts +14 -0
- package/dist/core/worker-turn-watchdog.js +40 -0
- package/dist/core/workflow-identifiers.d.ts +1 -0
- package/dist/core/workflow-identifiers.js +19 -0
- package/dist/core/workflow-tags.d.ts +9 -0
- package/dist/core/workflow-tags.js +37 -0
- package/dist/core/workflow-version-tuple.d.ts +67 -0
- package/dist/core/workflow-version-tuple.js +77 -0
- package/dist/diagnostics/doctor.d.ts +30 -0
- package/dist/diagnostics/doctor.js +173 -0
- package/dist/diagnostics/format.d.ts +77 -0
- package/dist/diagnostics/format.js +115 -0
- package/dist/diagnostics/index.d.ts +15 -0
- package/dist/diagnostics/index.js +10 -0
- package/dist/diagnostics/memory-profiler.d.ts +136 -0
- package/dist/diagnostics/memory-profiler.js +93 -0
- package/dist/diagnostics/recommendations.d.ts +37 -0
- package/dist/diagnostics/recommendations.js +116 -0
- package/dist/diagnostics/types.d.ts +178 -0
- package/dist/diagnostics/types.js +9 -0
- package/dist/diagnostics/validate.d.ts +79 -0
- package/dist/diagnostics/validate.js +88 -0
- package/dist/diagnostics/version-check.d.ts +34 -0
- package/dist/diagnostics/version-check.js +61 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.js +182 -0
- package/dist/json-schema.d.ts +55 -0
- package/dist/json-schema.js +4 -0
- package/dist/mcp/access.d.ts +21 -0
- package/dist/mcp/access.js +22 -0
- package/dist/mcp/cli.d.ts +2 -0
- package/dist/mcp/cli.js +72 -0
- package/dist/mcp/dispatcher.d.ts +13 -0
- package/dist/mcp/dispatcher.js +198 -0
- package/dist/mcp/http.d.ts +64 -0
- package/dist/mcp/http.js +272 -0
- package/dist/mcp/index.d.ts +17 -0
- package/dist/mcp/index.js +26 -0
- package/dist/mcp/list-filter.d.ts +10 -0
- package/dist/mcp/list-filter.js +116 -0
- package/dist/mcp/protocol.d.ts +89 -0
- package/dist/mcp/protocol.js +64 -0
- package/dist/mcp/resources.d.ts +40 -0
- package/dist/mcp/resources.js +141 -0
- package/dist/mcp/session.d.ts +138 -0
- package/dist/mcp/session.js +204 -0
- package/dist/mcp/stdio.d.ts +89 -0
- package/dist/mcp/stdio.js +204 -0
- package/dist/mcp/tools.d.ts +27 -0
- package/dist/mcp/tools.js +262 -0
- package/dist/observability/activity-interceptor.d.ts +3 -0
- package/dist/observability/activity-interceptor.js +34 -0
- package/dist/observability/index.d.ts +60 -0
- package/dist/observability/index.js +4 -0
- package/dist/observability/metrics-catalog.d.ts +128 -0
- package/dist/observability/metrics-catalog.js +110 -0
- package/dist/observability/metrics-snapshot.d.ts +106 -0
- package/dist/observability/metrics-snapshot.js +0 -0
- package/dist/observability/metrics.d.ts +156 -0
- package/dist/observability/metrics.js +152 -0
- package/dist/observability/no-op-telemetry.d.ts +168 -0
- package/dist/observability/no-op-telemetry.js +96 -0
- package/dist/observability/propagation.d.ts +121 -0
- package/dist/observability/propagation.js +41 -0
- package/dist/observability/span-helpers.d.ts +50 -0
- package/dist/observability/span-helpers.js +83 -0
- package/dist/observability/types.d.ts +92 -0
- package/dist/observability/types.js +0 -0
- package/dist/observability/workflow-interceptor.d.ts +3 -0
- package/dist/observability/workflow-interceptor.js +106 -0
- package/dist/observability/workflow-lifecycle.d.ts +8 -0
- package/dist/observability/workflow-lifecycle.js +103 -0
- package/dist/runtime/portable.d.ts +119 -0
- package/dist/runtime/portable.js +90 -0
- package/dist/server/api-catalog.d.ts +85 -0
- package/dist/server/api-catalog.js +47 -0
- package/dist/server/asyncapi-channels.d.ts +40 -0
- package/dist/server/asyncapi-channels.js +264 -0
- package/dist/server/asyncapi.d.ts +25 -0
- package/dist/server/asyncapi.js +110 -0
- package/dist/server/attribute-filters.d.ts +37 -0
- package/dist/server/attribute-filters.js +39 -0
- package/dist/server/authentication/api-key.d.ts +3 -0
- package/dist/server/authentication/api-key.js +80 -0
- package/dist/server/authentication/audit.d.ts +116 -0
- package/dist/server/authentication/audit.js +25 -0
- package/dist/server/authentication/crypto.d.ts +7 -0
- package/dist/server/authentication/crypto.js +99 -0
- package/dist/server/authentication/index.d.ts +68 -0
- package/dist/server/authentication/index.js +144 -0
- package/dist/server/authentication/rate-limiter.d.ts +126 -0
- package/dist/server/authentication/rate-limiter.js +61 -0
- package/dist/server/authentication/redaction.d.ts +72 -0
- package/dist/server/authentication/redaction.js +30 -0
- package/dist/server/authentication/rotating-api-key-store.d.ts +107 -0
- package/dist/server/authentication/rotating-api-key-store.js +43 -0
- package/dist/server/authentication/types.d.ts +290 -0
- package/dist/server/authentication/types.js +13 -0
- package/dist/server/authentication.d.ts +1 -0
- package/dist/server/authentication.js +1 -0
- package/dist/server/authorization-scope.d.ts +43 -0
- package/dist/server/authorization-scope.js +53 -0
- package/dist/server/authorization.d.ts +55 -0
- package/dist/server/authorization.js +87 -0
- package/dist/server/deadline-tracker.d.ts +47 -0
- package/dist/server/deadline-tracker.js +106 -0
- package/dist/server/discovery-filter.d.ts +13 -0
- package/dist/server/discovery-filter.js +5 -0
- package/dist/server/discovery-info.d.ts +69 -0
- package/dist/server/discovery-info.js +12 -0
- package/dist/server/engine-event-feed-backend.d.ts +31 -0
- package/dist/server/engine-event-feed-backend.js +36 -0
- package/dist/server/fault-to-http.d.ts +14 -0
- package/dist/server/fault-to-http.js +29 -0
- package/dist/server/fault-to-json-rpc.d.ts +23 -0
- package/dist/server/fault-to-json-rpc.js +60 -0
- package/dist/server/handler/binding-dispatch.d.ts +11 -0
- package/dist/server/handler/binding-dispatch.js +13 -0
- package/dist/server/handler/index.d.ts +31 -0
- package/dist/server/handler/index.js +78 -0
- package/dist/server/handler/response-helpers.d.ts +5 -0
- package/dist/server/handler/response-helpers.js +28 -0
- package/dist/server/handler/route-dispatch.d.ts +144 -0
- package/dist/server/handler/route-dispatch.js +192 -0
- package/dist/server/handler/route-matching.d.ts +55 -0
- package/dist/server/handler/route-matching.js +45 -0
- package/dist/server/handler.d.ts +1 -0
- package/dist/server/handler.js +56 -0
- package/dist/server/index.d.ts +346 -0
- package/dist/server/index.js +64 -0
- package/dist/server/interactive-operations.d.ts +18 -0
- package/dist/server/interactive-operations.js +28 -0
- package/dist/server/json-rpc-dispatch.d.ts +49 -0
- package/dist/server/json-rpc-dispatch.js +92 -0
- package/dist/server/json-rpc-framing.d.ts +42 -0
- package/dist/server/json-rpc-framing.js +15 -0
- package/dist/server/json-rpc-http.d.ts +33 -0
- package/dist/server/json-rpc-http.js +112 -0
- package/dist/server/json-rpc-parse.d.ts +69 -0
- package/dist/server/json-rpc-parse.js +139 -0
- package/dist/server/json-rpc-protocol.d.ts +76 -0
- package/dist/server/json-rpc-protocol.js +27 -0
- package/dist/server/json-rpc-transport-helpers.d.ts +17 -0
- package/dist/server/json-rpc-transport-helpers.js +26 -0
- package/dist/server/json-rpc-websocket-runtime.d.ts +37 -0
- package/dist/server/json-rpc-websocket-runtime.js +51 -0
- package/dist/server/json-rpc-websocket-validation.d.ts +38 -0
- package/dist/server/json-rpc-websocket-validation.js +96 -0
- package/dist/server/json-rpc-websocket.d.ts +60 -0
- package/dist/server/json-rpc-websocket.js +268 -0
- package/dist/server/json-schema-utilities.d.ts +4 -0
- package/dist/server/json-schema-utilities.js +16 -0
- package/dist/server/mcp-discovery.d.ts +57 -0
- package/dist/server/mcp-discovery.js +50 -0
- package/dist/server/openapi-canonical-json.d.ts +10 -0
- package/dist/server/openapi-canonical-json.js +13 -0
- package/dist/server/openapi-error-responses.d.ts +15 -0
- package/dist/server/openapi-error-responses.js +36 -0
- package/dist/server/openapi-schemas.d.ts +17 -0
- package/dist/server/openapi-schemas.js +69 -0
- package/dist/server/openapi.d.ts +48 -0
- package/dist/server/openapi.js +290 -0
- package/dist/server/openrpc-document-schema.d.ts +112 -0
- package/dist/server/openrpc-document-schema.js +65 -0
- package/dist/server/openrpc-errors.d.ts +73 -0
- package/dist/server/openrpc-errors.js +57 -0
- package/dist/server/openrpc.d.ts +53 -0
- package/dist/server/openrpc.js +179 -0
- package/dist/server/operation-catalog/activity-adapter.d.ts +11 -0
- package/dist/server/operation-catalog/activity-adapter.js +9 -0
- package/dist/server/operation-catalog/dispatch-allowlist.d.ts +4 -0
- package/dist/server/operation-catalog/dispatch-allowlist.js +4 -0
- package/dist/server/operation-catalog/dispatch-preparation.d.ts +39 -0
- package/dist/server/operation-catalog/dispatch-preparation.js +52 -0
- package/dist/server/operation-catalog/index.d.ts +22 -0
- package/dist/server/operation-catalog/index.js +17 -0
- package/dist/server/operation-catalog/pipeline-helpers.d.ts +66 -0
- package/dist/server/operation-catalog/pipeline-helpers.js +179 -0
- package/dist/server/operation-catalog/pipeline-stages.d.ts +23 -0
- package/dist/server/operation-catalog/pipeline-stages.js +189 -0
- package/dist/server/operation-catalog/pipeline.d.ts +7 -0
- package/dist/server/operation-catalog/pipeline.js +32 -0
- package/dist/server/operation-catalog/raise-fault.d.ts +32 -0
- package/dist/server/operation-catalog/raise-fault.js +18 -0
- package/dist/server/operation-catalog/registry.d.ts +6 -0
- package/dist/server/operation-catalog/registry.js +93 -0
- package/dist/server/operation-catalog/stream-pipeline.d.ts +25 -0
- package/dist/server/operation-catalog/stream-pipeline.js +122 -0
- package/dist/server/operation-catalog/types.d.ts +246 -0
- package/dist/server/operation-catalog/types.js +9 -0
- package/dist/server/operation-catalog/workflow-adapter.d.ts +55 -0
- package/dist/server/operation-catalog/workflow-adapter.js +85 -0
- package/dist/server/operation-catalog.d.ts +1 -0
- package/dist/server/operation-catalog.js +1 -0
- package/dist/server/operation-fault.d.ts +153 -0
- package/dist/server/operation-fault.js +50 -0
- package/dist/server/operation-registry.d.ts +100 -0
- package/dist/server/operation-registry.js +56 -0
- package/dist/server/operations/add-workflow-tags.d.ts +15 -0
- package/dist/server/operations/add-workflow-tags.js +13 -0
- package/dist/server/operations/aggregate-workflows.d.ts +81 -0
- package/dist/server/operations/aggregate-workflows.js +110 -0
- package/dist/server/operations/async-activity.d.ts +44 -0
- package/dist/server/operations/async-activity.js +134 -0
- package/dist/server/operations/bulk-cancel-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-cancel-workflows.js +64 -0
- package/dist/server/operations/bulk-delete-workflows.d.ts +7 -0
- package/dist/server/operations/bulk-delete-workflows.js +71 -0
- package/dist/server/operations/bulk-filter-helpers.d.ts +62 -0
- package/dist/server/operations/bulk-filter-helpers.js +334 -0
- package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +94 -0
- package/dist/server/operations/bulk-mutate-workflow-tags.js +100 -0
- package/dist/server/operations/bulk-operation-helpers.d.ts +27 -0
- package/dist/server/operations/bulk-operation-helpers.js +29 -0
- package/dist/server/operations/bulk-signal-workflows.d.ts +87 -0
- package/dist/server/operations/bulk-signal-workflows.js +80 -0
- package/dist/server/operations/cancel-schedule.d.ts +13 -0
- package/dist/server/operations/cancel-schedule.js +43 -0
- package/dist/server/operations/cancel-workflow.d.ts +13 -0
- package/dist/server/operations/cancel-workflow.js +34 -0
- package/dist/server/operations/create-schedule.d.ts +29 -0
- package/dist/server/operations/create-schedule.js +116 -0
- package/dist/server/operations/failure-category-filter.d.ts +2 -0
- package/dist/server/operations/failure-category-filter.js +19 -0
- package/dist/server/operations/fork-workflow.d.ts +29 -0
- package/dist/server/operations/fork-workflow.js +88 -0
- package/dist/server/operations/get-checkpoint-at.d.ts +15 -0
- package/dist/server/operations/get-checkpoint-at.js +74 -0
- package/dist/server/operations/get-registry.d.ts +26 -0
- package/dist/server/operations/get-registry.js +56 -0
- package/dist/server/operations/get-retention-overview.d.ts +9 -0
- package/dist/server/operations/get-retention-overview.js +39 -0
- package/dist/server/operations/get-review.d.ts +15 -0
- package/dist/server/operations/get-review.js +57 -0
- package/dist/server/operations/get-schedule.d.ts +20 -0
- package/dist/server/operations/get-schedule.js +48 -0
- package/dist/server/operations/get-stream-chunks.d.ts +19 -0
- package/dist/server/operations/get-stream-chunks.js +71 -0
- package/dist/server/operations/get-system-metrics.d.ts +42 -0
- package/dist/server/operations/get-system-metrics.js +43 -0
- package/dist/server/operations/get-task-diagnostics.d.ts +184 -0
- package/dist/server/operations/get-task-diagnostics.js +340 -0
- package/dist/server/operations/get-update-result.d.ts +18 -0
- package/dist/server/operations/get-update-result.js +55 -0
- package/dist/server/operations/get-workflow-attributes.d.ts +13 -0
- package/dist/server/operations/get-workflow-attributes.js +51 -0
- package/dist/server/operations/get-workflow-events.d.ts +15 -0
- package/dist/server/operations/get-workflow-events.js +51 -0
- package/dist/server/operations/get-workflow-result.d.ts +14 -0
- package/dist/server/operations/get-workflow-result.js +93 -0
- package/dist/server/operations/get-workflow-timeline.d.ts +13 -0
- package/dist/server/operations/get-workflow-timeline.js +51 -0
- package/dist/server/operations/get-workflow.d.ts +36 -0
- package/dist/server/operations/get-workflow.js +49 -0
- package/dist/server/operations/list-checkpoints.d.ts +13 -0
- package/dist/server/operations/list-checkpoints.js +43 -0
- package/dist/server/operations/list-filter-query-extractor.d.ts +23 -0
- package/dist/server/operations/list-filter-query-extractor.js +87 -0
- package/dist/server/operations/list-reviews.d.ts +19 -0
- package/dist/server/operations/list-reviews.js +77 -0
- package/dist/server/operations/list-schedules.d.ts +28 -0
- package/dist/server/operations/list-schedules.js +108 -0
- package/dist/server/operations/list-task-queues.d.ts +71 -0
- package/dist/server/operations/list-task-queues.js +105 -0
- package/dist/server/operations/list-workers.d.ts +56 -0
- package/dist/server/operations/list-workers.js +92 -0
- package/dist/server/operations/list-workflows.d.ts +79 -0
- package/dist/server/operations/list-workflows.js +136 -0
- package/dist/server/operations/operation-helpers.d.ts +21 -0
- package/dist/server/operations/operation-helpers.js +22 -0
- package/dist/server/operations/pause-schedule.d.ts +13 -0
- package/dist/server/operations/pause-schedule.js +43 -0
- package/dist/server/operations/purge-workflows.d.ts +41 -0
- package/dist/server/operations/purge-workflows.js +57 -0
- package/dist/server/operations/query-workflow.d.ts +19 -0
- package/dist/server/operations/query-workflow.js +99 -0
- package/dist/server/operations/recover-all.d.ts +13 -0
- package/dist/server/operations/recover-all.js +65 -0
- package/dist/server/operations/remove-workflow-tags.d.ts +15 -0
- package/dist/server/operations/remove-workflow-tags.js +13 -0
- package/dist/server/operations/replay-workflow.d.ts +28 -0
- package/dist/server/operations/replay-workflow.js +69 -0
- package/dist/server/operations/resume-schedule.d.ts +13 -0
- package/dist/server/operations/resume-schedule.js +43 -0
- package/dist/server/operations/resume-workflow.d.ts +17 -0
- package/dist/server/operations/resume-workflow.js +40 -0
- package/dist/server/operations/schedule-faults.d.ts +14 -0
- package/dist/server/operations/schedule-faults.js +41 -0
- package/dist/server/operations/set-workflow-attributes.d.ts +19 -0
- package/dist/server/operations/set-workflow-attributes.js +67 -0
- package/dist/server/operations/signal-workflow.d.ts +23 -0
- package/dist/server/operations/signal-workflow.js +58 -0
- package/dist/server/operations/single-workflow-control-operation.d.ts +32 -0
- package/dist/server/operations/single-workflow-control-operation.js +44 -0
- package/dist/server/operations/single-workflow-tag-mutation.d.ts +27 -0
- package/dist/server/operations/single-workflow-tag-mutation.js +108 -0
- package/dist/server/operations/sse-stream.d.ts +13 -0
- package/dist/server/operations/sse-stream.js +42 -0
- package/dist/server/operations/start-workflow.d.ts +33 -0
- package/dist/server/operations/start-workflow.js +181 -0
- package/dist/server/operations/storage.d.ts +112 -0
- package/dist/server/operations/storage.js +358 -0
- package/dist/server/operations/stream-workflow-sse.d.ts +17 -0
- package/dist/server/operations/stream-workflow-sse.js +94 -0
- package/dist/server/operations/submit-review-decision.d.ts +25 -0
- package/dist/server/operations/submit-review-decision.js +113 -0
- package/dist/server/operations/timeout-workflow.d.ts +11 -0
- package/dist/server/operations/timeout-workflow.js +34 -0
- package/dist/server/operations/update-schedule.d.ts +15 -0
- package/dist/server/operations/update-schedule.js +60 -0
- package/dist/server/operations/update-workflow.d.ts +27 -0
- package/dist/server/operations/update-workflow.js +109 -0
- package/dist/server/operations/worker-drain.d.ts +69 -0
- package/dist/server/operations/worker-drain.js +214 -0
- package/dist/server/operations/workflow-events-subscription.d.ts +47 -0
- package/dist/server/operations/workflow-events-subscription.js +51 -0
- package/dist/server/principal.d.ts +176 -0
- package/dist/server/principal.js +59 -0
- package/dist/server/rest-binding.d.ts +158 -0
- package/dist/server/rest-binding.js +35 -0
- package/dist/server/rest-bindings.d.ts +76 -0
- package/dist/server/rest-bindings.js +376 -0
- package/dist/server/route-model.d.ts +268 -0
- package/dist/server/route-model.js +166 -0
- package/dist/server/runtime/authentication-bridge.d.ts +22 -0
- package/dist/server/runtime/authentication-bridge.js +194 -0
- package/dist/server/runtime/context.d.ts +73 -0
- package/dist/server/runtime/context.js +0 -0
- package/dist/server/runtime/cors.d.ts +149 -0
- package/dist/server/runtime/cors.js +123 -0
- package/dist/server/runtime/event-broadcasting.d.ts +71 -0
- package/dist/server/runtime/event-broadcasting.js +205 -0
- package/dist/server/runtime/request-gate.d.ts +54 -0
- package/dist/server/runtime/request-gate.js +71 -0
- package/dist/server/runtime/shutdown.d.ts +10 -0
- package/dist/server/runtime/shutdown.js +18 -0
- package/dist/server/runtime/stop-server.d.ts +3 -0
- package/dist/server/runtime/stop-server.js +19 -0
- package/dist/server/runtime/task-dispatch.d.ts +8 -0
- package/dist/server/runtime/task-dispatch.js +157 -0
- package/dist/server/runtime/task-metrics.d.ts +12 -0
- package/dist/server/runtime/task-metrics.js +36 -0
- package/dist/server/runtime/task-polling.d.ts +9 -0
- package/dist/server/runtime/task-polling.js +132 -0
- package/dist/server/runtime/task-reconciliation.d.ts +17 -0
- package/dist/server/runtime/task-reconciliation.js +163 -0
- package/dist/server/runtime/websocket-stream.d.ts +15 -0
- package/dist/server/runtime/websocket-stream.js +79 -0
- package/dist/server/runtime/websocket-upgrade.d.ts +8 -0
- package/dist/server/runtime/websocket-upgrade.js +76 -0
- package/dist/server/runtime/websocket-worker.d.ts +7 -0
- package/dist/server/runtime/websocket-worker.js +224 -0
- package/dist/server/runtime-helpers.d.ts +18 -0
- package/dist/server/runtime-helpers.js +23 -0
- package/dist/server/sequence-cursor.d.ts +5 -0
- package/dist/server/sequence-cursor.js +19 -0
- package/dist/server/serve-internals.d.ts +83 -0
- package/dist/server/serve-internals.js +203 -0
- package/dist/server/stdio-session.d.ts +51 -0
- package/dist/server/stdio-session.js +245 -0
- package/dist/server/task-queue-summary.d.ts +27 -0
- package/dist/server/task-queue-summary.js +34 -0
- package/dist/server/task-queue-types.d.ts +95 -0
- package/dist/server/task-queue-types.js +0 -0
- package/dist/server/task-queue.d.ts +90 -0
- package/dist/server/task-queue.js +247 -0
- package/dist/server/task-resolved-record.d.ts +12 -0
- package/dist/server/task-resolved-record.js +35 -0
- package/dist/server/task-state.d.ts +152 -0
- package/dist/server/task-state.js +178 -0
- package/dist/server/workflow-event-feed.d.ts +166 -0
- package/dist/server/workflow-event-feed.js +193 -0
- package/dist/service-worker/index.d.ts +123 -0
- package/dist/service-worker/index.js +56 -0
- package/dist/service-worker/scheduler.d.ts +37 -0
- package/dist/service-worker/scheduler.js +117 -0
- package/dist/service-worker/setup.d.ts +127 -0
- package/dist/service-worker/setup.js +129 -0
- package/dist/service-worker/shared.d.ts +94 -0
- package/dist/service-worker/shared.js +15 -0
- package/dist/storage/auto.d.ts +45 -0
- package/dist/storage/auto.js +2 -0
- package/dist/storage/bun-sql.d.ts +64 -0
- package/dist/storage/bun-sql.js +575 -0
- package/dist/storage/byte-encoding.d.ts +6 -0
- package/dist/storage/byte-encoding.js +16 -0
- package/dist/storage/capabilities.d.ts +187 -0
- package/dist/storage/capabilities.js +19 -0
- package/dist/storage/compressed-storage.d.ts +45 -0
- package/dist/storage/compressed-storage.js +2 -0
- package/dist/storage/default-scope.d.ts +17 -0
- package/dist/storage/default-scope.js +1 -0
- package/dist/storage/delete-range.d.ts +109 -0
- package/dist/storage/delete-range.js +64 -0
- package/dist/storage/derived-operations.d.ts +53 -0
- package/dist/storage/derived-operations.js +31 -0
- package/dist/storage/http.d.ts +67 -0
- package/dist/storage/http.js +2 -0
- package/dist/storage/index.d.ts +292 -0
- package/dist/storage/index.js +51 -0
- package/dist/storage/indexeddb.d.ts +49 -0
- package/dist/storage/indexeddb.js +1 -0
- package/dist/storage/interface.d.ts +340 -0
- package/dist/storage/interface.js +2 -0
- package/dist/storage/key-prefixes.d.ts +19 -0
- package/dist/storage/key-prefixes.js +35 -0
- package/dist/storage/lmdb.d.ts +40 -0
- package/dist/storage/lmdb.js +2 -0
- package/dist/storage/memory.d.ts +46 -0
- package/dist/storage/memory.js +2 -0
- package/dist/storage/node-sqlite.d.ts +85 -0
- package/dist/storage/node-sqlite.js +323 -0
- package/dist/storage/read-only-query.d.ts +2 -0
- package/dist/storage/read-only-query.js +19 -0
- package/dist/storage/resolve.d.ts +180 -0
- package/dist/storage/resolve.js +2 -0
- package/dist/storage/scoped-storage.d.ts +68 -0
- package/dist/storage/scoped-storage.js +2 -0
- package/dist/storage/sqlite-key-value-queries.d.ts +40 -0
- package/dist/storage/sqlite-key-value-queries.js +64 -0
- package/dist/storage/sqlite.d.ts +31 -0
- package/dist/storage/sqlite.js +0 -0
- package/dist/storage/text-value-import.d.ts +87 -0
- package/dist/storage/text-value-import.js +50 -0
- package/dist/storage/text-value-store.d.ts +171 -0
- package/dist/storage/text-value-store.js +55 -0
- package/dist/storage/turso.d.ts +60 -0
- package/dist/storage/turso.js +5 -0
- package/dist/storage/typed-storage.d.ts +258 -0
- package/dist/storage/typed-storage.js +2 -0
- package/dist/storage/web-extension.d.ts +55 -0
- package/dist/storage/web-extension.js +1 -0
- package/dist/testing/chaos.d.ts +157 -0
- package/dist/testing/chaos.js +69 -0
- package/dist/testing/event-loop.d.ts +4 -0
- package/dist/testing/event-loop.js +21 -0
- package/dist/testing/index.d.ts +126 -0
- package/dist/testing/index.js +61 -0
- package/dist/testing/mocks.d.ts +145 -0
- package/dist/testing/mocks.js +136 -0
- package/dist/testing/subprocess-engine.d.ts +100 -0
- package/dist/testing/subprocess-engine.js +291 -0
- package/dist/testing/test-engine.d.ts +145 -0
- package/dist/testing/test-engine.js +147 -0
- package/dist/testing/time-control.d.ts +59 -0
- package/dist/testing/time-control.js +68 -0
- package/dist/version.d.ts +12 -0
- package/dist/version.js +1 -0
- package/dist/worker/activity-table.d.ts +33 -0
- package/dist/worker/activity-table.js +20 -0
- package/dist/worker/execute-with-interceptors.d.ts +28 -0
- package/dist/worker/execute-with-interceptors.js +21 -0
- package/dist/worker/heartbeat.d.ts +34 -0
- package/dist/worker/heartbeat.js +31 -0
- package/dist/worker/index.d.ts +57 -0
- package/dist/worker/index.js +334 -0
- package/dist/worker/long-poll.d.ts +54 -0
- package/dist/worker/long-poll.js +134 -0
- package/dist/worker/options.d.ts +66 -0
- package/dist/worker/options.js +19 -0
- package/dist/worker/protocol-internals.d.ts +82 -0
- package/dist/worker/protocol-internals.js +56 -0
- package/dist/worker/protocol-messages.d.ts +264 -0
- package/dist/worker/protocol-messages.js +0 -0
- package/dist/worker/protocol-schemas.d.ts +559 -0
- package/dist/worker/protocol-schemas.js +180 -0
- package/dist/worker/protocol-version.d.ts +71 -0
- package/dist/worker/protocol-version.js +1 -0
- package/dist/worker/protocol.d.ts +72 -0
- package/dist/worker/protocol.js +2 -0
- package/dist/worker/registry/fair-share.d.ts +59 -0
- package/dist/worker/registry/fair-share.js +15 -0
- package/dist/worker/registry/routing.d.ts +17 -0
- package/dist/worker/registry/routing.js +16 -0
- package/dist/worker/registry/summary.d.ts +87 -0
- package/dist/worker/registry/summary.js +81 -0
- package/dist/worker/registry/types.d.ts +123 -0
- package/dist/worker/registry/types.js +0 -0
- package/dist/worker/registry.d.ts +94 -0
- package/dist/worker/registry.js +305 -0
- package/dist/worker/remote-activity-context.d.ts +15 -0
- package/dist/worker/remote-activity-context.js +0 -0
- package/dist/worker/task-result-outbox.d.ts +40 -0
- package/dist/worker/task-result-outbox.js +42 -0
- package/dist/worker/worker-protocol-incompatible-error.d.ts +52 -0
- package/dist/worker/worker-protocol-incompatible-error.js +15 -0
- package/dist/worker/workflow-activity-binding.d.ts +96 -0
- package/dist/worker/workflow-activity-binding.js +22 -0
- package/dist/workers/activity-runner.d.ts +87 -0
- package/dist/workers/activity-runner.js +29 -0
- package/dist/workers/activity-worker-dispatcher.d.ts +85 -0
- package/dist/workers/activity-worker-dispatcher.js +68 -0
- package/dist/workers/activity-worker-entry.d.ts +99 -0
- package/dist/workers/activity-worker-entry.js +59 -0
- package/dist/workers/pool.d.ts +83 -0
- package/dist/workers/pool.js +174 -0
- package/dist/workers/workflow-runner.d.ts +79 -0
- package/dist/workers/workflow-runner.js +245 -0
- package/dist/workers/workflow-worker-entry.d.ts +24 -0
- package/dist/workers/workflow-worker-entry.js +70 -0
- package/package.json +297 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { ServerWebSocket } from 'bun';
|
|
2
|
+
import type { McpSessionManager } from '../../mcp/session.ts';
|
|
3
|
+
import type { MetricsCollector } from '../../observability/metrics.ts';
|
|
4
|
+
import type { WorkerRegistry } from '../../worker/registry.ts';
|
|
5
|
+
import type { Authenticator, RateLimiter } from '../authentication.ts';
|
|
6
|
+
import type { DeadlineTracker } from '../deadline-tracker.ts';
|
|
7
|
+
import type { createEngineEventFeedBackend } from '../engine-event-feed-backend.ts';
|
|
8
|
+
import type { WebSocketData } from '../json-rpc-websocket-runtime.ts';
|
|
9
|
+
import type { JsonRpcWebSocketSession } from '../json-rpc-websocket.ts';
|
|
10
|
+
import type { OpenApiSecuritySchemeName } from '../openapi.ts';
|
|
11
|
+
import type { createLiveOperationRegistry, createLiveRestBindings } from '../rest-bindings.ts';
|
|
12
|
+
import type { TaskQueue } from '../task-queue.ts';
|
|
13
|
+
import type { WorkflowEventFeed } from '../workflow-event-feed.ts';
|
|
14
|
+
import type { ResolvedCorsPolicy } from './cors.ts';
|
|
15
|
+
/**
|
|
16
|
+
* Internal closure state for a single `serve()` invocation.
|
|
17
|
+
*
|
|
18
|
+
* Extracted runtime helpers receive this record explicitly so they do not
|
|
19
|
+
* rely on closure capture from `serve()`.
|
|
20
|
+
*/
|
|
21
|
+
export interface ServerContext {
|
|
22
|
+
readonly registry: WorkerRegistry;
|
|
23
|
+
readonly taskQueue: TaskQueue;
|
|
24
|
+
readonly workerSockets: Map<string, ServerWebSocket<WebSocketData>>;
|
|
25
|
+
readonly streamSockets: Map<string, Set<ServerWebSocket<WebSocketData>>>;
|
|
26
|
+
/** Tracks per-workflow worker affinity for sticky routing. Maps workflowId to workerId. */
|
|
27
|
+
readonly workerAffinity: Map<string, string>;
|
|
28
|
+
/** Reverse index: workflowId to set of operationIds currently in-flight for that workflow. */
|
|
29
|
+
readonly workflowOperations: Map<string, Set<string>>;
|
|
30
|
+
/** Reverse lookup: operationId to workflowId for O(1) cleanup on task completion. */
|
|
31
|
+
readonly operationToWorkflow: Map<string, string>;
|
|
32
|
+
/** Tracks pending backoff-delay timers so they can be cleared on shutdown. */
|
|
33
|
+
readonly pendingTimers: Set<ReturnType<typeof setTimeout>>;
|
|
34
|
+
/** In-memory min-heap for inflight task deadlines, avoiding full storage scans on each visibility tick. */
|
|
35
|
+
readonly deadlineTracker: DeadlineTracker;
|
|
36
|
+
readonly liveOperationRegistry: ReturnType<typeof createLiveOperationRegistry>;
|
|
37
|
+
readonly liveRestBindings: ReturnType<typeof createLiveRestBindings>;
|
|
38
|
+
readonly supportedAuthenticationSchemes: ReadonlySet<OpenApiSecuritySchemeName>;
|
|
39
|
+
/** Resolved CORS policy, or `null` when `serve()` was called without `cors` (same-origin only). */
|
|
40
|
+
readonly corsPolicy: ResolvedCorsPolicy | null;
|
|
41
|
+
/** Server-owned process-local metrics collector used by runtime diagnostics. */
|
|
42
|
+
readonly metricsCollector: MetricsCollector;
|
|
43
|
+
readonly eventFeedBackend: ReturnType<typeof createEngineEventFeedBackend>;
|
|
44
|
+
readonly workflowEventFeed: WorkflowEventFeed;
|
|
45
|
+
readonly activeJsonRpcSessions: Set<JsonRpcWebSocketSession>;
|
|
46
|
+
readonly mcpSessionManager: McpSessionManager;
|
|
47
|
+
readonly authenticatorPromise: Promise<Authenticator> | null;
|
|
48
|
+
/**
|
|
49
|
+
* Per-key request rate limiter, or `null` when `serve()` was called without
|
|
50
|
+
* `rateLimit`. Keyed by authenticated principal subject when available, else
|
|
51
|
+
* by client address. Disposed on `server.stop()`.
|
|
52
|
+
*/
|
|
53
|
+
readonly rateLimiter: RateLimiter | null;
|
|
54
|
+
/** Visibility poll interval in milliseconds. */
|
|
55
|
+
readonly visibilityPollMs: number;
|
|
56
|
+
/**
|
|
57
|
+
* Grace period (in ms) before the close handler requeues a disconnected
|
|
58
|
+
* worker's in-flight tasks. A re-register from the same worker id within
|
|
59
|
+
* this window cancels the pending requeue. `0` means inline requeue.
|
|
60
|
+
*/
|
|
61
|
+
readonly workerReconnectGracePeriodMs: number;
|
|
62
|
+
/**
|
|
63
|
+
* Pending requeue timers keyed by `workerId`. A successful re-register clears
|
|
64
|
+
* the timer for that worker, suppressing the deferred requeue.
|
|
65
|
+
*/
|
|
66
|
+
readonly pendingWorkerRequeues: Map<string, ReturnType<typeof setTimeout>>;
|
|
67
|
+
/** Mutex: prevents concurrent visibility scans from running simultaneously. */
|
|
68
|
+
scanRunning: boolean;
|
|
69
|
+
/** Fine-grained mutex for in-flight operation IDs being processed by expiry paths. */
|
|
70
|
+
readonly processingOperations: Set<string>;
|
|
71
|
+
/** Mutex: prevents concurrent reconciliation scans from running simultaneously. */
|
|
72
|
+
reconciliationRunning: boolean;
|
|
73
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Origin Resource Sharing (CORS) for the Weft server.
|
|
3
|
+
*
|
|
4
|
+
* The server supports browser clients such as external dashboards and the
|
|
5
|
+
* documented browser runtime (Service Worker + IndexedDB). When those run on a
|
|
6
|
+
* different origin than the API, the browser enforces CORS — and with no policy
|
|
7
|
+
* configured it blocks every cross-origin call. This module supplies an
|
|
8
|
+
* opt-in, **safe by default** policy: when `serve()` is called without a `cors`
|
|
9
|
+
* option, the server emits no `Access-Control-*` headers at all (same-origin
|
|
10
|
+
* only). It never defaults to `Access-Control-Allow-Origin: *`.
|
|
11
|
+
*
|
|
12
|
+
* Three pieces wire into the request pipeline:
|
|
13
|
+
* - {@link buildPreflightResponse} answers `OPTIONS` preflight requests
|
|
14
|
+
* before authentication runs (browsers never send credentials on
|
|
15
|
+
* preflight, so auth-gating it would break CORS).
|
|
16
|
+
* - {@link decorateResponseWithCors} adds the response headers for actual
|
|
17
|
+
* (non-preflight) requests.
|
|
18
|
+
* - {@link isOriginAllowed} gates WebSocket upgrades, which CORS does not
|
|
19
|
+
* otherwise protect.
|
|
20
|
+
*
|
|
21
|
+
* Origins are compared as canonical origin tuples (`scheme://host[:port]`)
|
|
22
|
+
* via the URL parser, so case, default-port elision, and trailing slashes do
|
|
23
|
+
* not cause spurious mismatches. The literal `Origin: null` (sandboxed iframe,
|
|
24
|
+
* `file://`) never matches an allowlist entry.
|
|
25
|
+
*
|
|
26
|
+
* @module server/runtime/cors
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Operator-supplied CORS policy. Attach to `serve({ cors })`. Omitting it is
|
|
30
|
+
* the safe default — the server emits no `Access-Control-*` headers and only
|
|
31
|
+
* same-origin browser requests succeed; it never defaults to a wildcard origin.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { serve, type CorsOptions } from '@lostgradient/weft/server';
|
|
36
|
+
* import { Engine, MemoryStorage } from '@lostgradient/weft';
|
|
37
|
+
*
|
|
38
|
+
* const cors: CorsOptions = {
|
|
39
|
+
* allowedOrigins: ['https://dashboard.example.com'],
|
|
40
|
+
* credentials: true,
|
|
41
|
+
* };
|
|
42
|
+
*
|
|
43
|
+
* await using engine = new Engine({ storage: new MemoryStorage() });
|
|
44
|
+
* await using server = serve({ engine, port: 0, cors });
|
|
45
|
+
* void server;
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export interface CorsOptions {
|
|
49
|
+
/**
|
|
50
|
+
* Origins permitted to make cross-origin requests. Either an explicit
|
|
51
|
+
* allowlist (compared as canonical origins) or a predicate that receives
|
|
52
|
+
* the raw `Origin` header value. The single-element sentinel `['*']` means
|
|
53
|
+
* "any origin" and is only legal when `credentials` is not `true`.
|
|
54
|
+
*
|
|
55
|
+
* Omitting this (or an empty array) allows no cross-origin requests.
|
|
56
|
+
*
|
|
57
|
+
* Note: the array form canonicalizes both the allowlist and the incoming
|
|
58
|
+
* origin (so case, default-port elision, and trailing slashes do not matter).
|
|
59
|
+
* The predicate form receives the **raw** `Origin` header value with no
|
|
60
|
+
* canonicalization — apply `canonicalizeOrigin` yourself if you need the same
|
|
61
|
+
* normalization for case-insensitive or default-port comparisons.
|
|
62
|
+
*/
|
|
63
|
+
readonly allowedOrigins?: ReadonlyArray<string> | ((origin: string) => boolean);
|
|
64
|
+
/** Methods advertised in preflight responses. Defaults to the common verbs plus `OPTIONS`. */
|
|
65
|
+
readonly allowedMethods?: ReadonlyArray<string>;
|
|
66
|
+
/** Request headers a client may send. Defaults to `Authorization, Content-Type`. */
|
|
67
|
+
readonly allowedHeaders?: ReadonlyArray<string>;
|
|
68
|
+
/** Response headers exposed to client scripts via `Access-Control-Expose-Headers`. */
|
|
69
|
+
readonly exposedHeaders?: ReadonlyArray<string>;
|
|
70
|
+
/** Whether credentialed requests are allowed. When `true`, the origin is never wildcarded. */
|
|
71
|
+
readonly credentials?: boolean;
|
|
72
|
+
/** Preflight cache lifetime in seconds (`Access-Control-Max-Age`). Defaults to 600. */
|
|
73
|
+
readonly maxAgeSeconds?: number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A CorsOptions normalized into the exact strings the response builders emit,
|
|
77
|
+
* so the per-request hot path does no defaulting or array joining.
|
|
78
|
+
*/
|
|
79
|
+
export type ResolvedCorsPolicy = {
|
|
80
|
+
readonly matchOrigin: (origin: string) => boolean;
|
|
81
|
+
readonly allowsAnyOrigin: boolean;
|
|
82
|
+
/** Pre-joined `Access-Control-Allow-Methods` value emitted in preflight responses. */
|
|
83
|
+
readonly allowedMethodsHeader: string;
|
|
84
|
+
/** Uppercased method names, for O(1) validation of the preflight's requested method. */
|
|
85
|
+
readonly allowedMethodSet: ReadonlySet<string>;
|
|
86
|
+
/** Pre-joined `Access-Control-Allow-Headers` value emitted in preflight responses. */
|
|
87
|
+
readonly allowedHeadersHeader: string;
|
|
88
|
+
/** Lowercased header names, for O(1) validation of the preflight's requested headers. */
|
|
89
|
+
readonly allowedHeaderSet: ReadonlySet<string>;
|
|
90
|
+
readonly exposedHeadersHeader: string | null;
|
|
91
|
+
readonly credentials: boolean;
|
|
92
|
+
readonly maxAgeSeconds: number;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Canonicalize an origin string to its `scheme://host[:port]` tuple. Returns
|
|
96
|
+
* `null` for the literal `"null"`, empty input, or anything the URL parser
|
|
97
|
+
* rejects — those must never match an allowlist entry. Default ports are
|
|
98
|
+
* elided by the URL parser, so `https://x:443` and `https://x` compare equal.
|
|
99
|
+
*/
|
|
100
|
+
export declare function canonicalizeOrigin(value: string): string | null;
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a `CorsOptions` (already validated by {@link validateCorsOptions})
|
|
103
|
+
* into the precomputed policy used per request. When `auth` is configured the
|
|
104
|
+
* caller passes `requireAuthorizationHeader: true` so `Authorization` is
|
|
105
|
+
* always advertised in `Access-Control-Allow-Headers`.
|
|
106
|
+
*/
|
|
107
|
+
export declare function resolveCorsPolicy(options: CorsOptions, requireAuthorizationHeader?: boolean): ResolvedCorsPolicy;
|
|
108
|
+
/**
|
|
109
|
+
* Whether a request's `Origin` header is permitted by the policy. The literal
|
|
110
|
+
* `Origin: null` (sandboxed iframe, `file://`, some redirects) is rejected
|
|
111
|
+
* unconditionally — even under a wildcard policy — so a sandboxed page can
|
|
112
|
+
* never be treated as an allowed origin.
|
|
113
|
+
*/
|
|
114
|
+
export declare function isOriginAllowed(policy: ResolvedCorsPolicy, origin: string | null): boolean;
|
|
115
|
+
/** True when the request is a CORS preflight (an `OPTIONS` with the request-method hint). */
|
|
116
|
+
export declare function isPreflightRequest(request: Request): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Build the preflight (`OPTIONS`) response. Always returns a bounded 204 so
|
|
119
|
+
* the path is cheap and stateless — it emits `Access-Control-*` headers only
|
|
120
|
+
* when the origin is allowed AND the requested method and headers are within
|
|
121
|
+
* policy; otherwise the 204 carries no CORS headers and the browser blocks the
|
|
122
|
+
* real request. `Vary` covers all three request dimensions a shared cache
|
|
123
|
+
* could key on, and `Cache-Control: no-store` keeps a proxy from reusing one
|
|
124
|
+
* origin's decision for another.
|
|
125
|
+
*/
|
|
126
|
+
export declare function buildPreflightResponse(policy: ResolvedCorsPolicy, request: Request): Response;
|
|
127
|
+
/**
|
|
128
|
+
* Add CORS response headers to an actual (non-preflight) response when the
|
|
129
|
+
* request carried an allowed `Origin`. Mutates and returns the same response.
|
|
130
|
+
* Always sets `Vary: Origin` (appending to any existing value) so caches do
|
|
131
|
+
* not serve one origin's headers to another.
|
|
132
|
+
*/
|
|
133
|
+
export declare function decorateResponseWithCors(policy: ResolvedCorsPolicy, request: Request, response: Response): Response;
|
|
134
|
+
/**
|
|
135
|
+
* Validate a `CorsOptions` at `serve()` time so misconfigurations fail before
|
|
136
|
+
* the port binds. Throws `Error` on:
|
|
137
|
+
* - `credentials: true` combined with a wildcard origin (illegal per spec);
|
|
138
|
+
* - a wildcard origin paired with an `Authorization` allowed-header (lets any
|
|
139
|
+
* origin read responses to bearer-token requests — almost never intended).
|
|
140
|
+
*
|
|
141
|
+
* `authConfigured` must mirror what `serve()` passes as `requireAuthorizationHeader`
|
|
142
|
+
* to {@link resolveCorsPolicy}: when `auth` is set, `Authorization` is auto-added
|
|
143
|
+
* to the effective allowed-headers, so the wildcard + `Authorization` check has to
|
|
144
|
+
* account for that even when the operator did not list it explicitly. Validating
|
|
145
|
+
* against `options.allowedHeaders` alone would let `cors: { allowedOrigins: ['*'],
|
|
146
|
+
* allowedHeaders: ['Content-Type'] }` pass under `auth` and then resolve to a policy
|
|
147
|
+
* that allows bearer tokens under a wildcard origin.
|
|
148
|
+
*/
|
|
149
|
+
export declare function validateCorsOptions(options: CorsOptions, authConfigured?: boolean): void;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const DEFAULT_ALLOWED_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"], DEFAULT_ALLOWED_HEADERS = ["Authorization", "Content-Type"], DEFAULT_MAX_AGE_SECONDS = 600, WILDCARD_ORIGIN = "*";
|
|
2
|
+
export function canonicalizeOrigin(value) {
|
|
3
|
+
const trimmed = value.trim();
|
|
4
|
+
if (trimmed === "" || trimmed === "null")
|
|
5
|
+
return null;
|
|
6
|
+
try {
|
|
7
|
+
const parsed = new URL(trimmed);
|
|
8
|
+
return parsed.origin === "null" ? null : parsed.origin;
|
|
9
|
+
} catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function buildOriginMatcher(allowedOrigins) {
|
|
14
|
+
if (typeof allowedOrigins === "function")
|
|
15
|
+
return { match: allowedOrigins, allowsAny: !1 };
|
|
16
|
+
const list = allowedOrigins ?? [];
|
|
17
|
+
if (list.length === 1 && list[0] === WILDCARD_ORIGIN)
|
|
18
|
+
return { match: () => !0, allowsAny: !0 };
|
|
19
|
+
const canonical = new Set;
|
|
20
|
+
for (const entry of list) {
|
|
21
|
+
const normalized = canonicalizeOrigin(entry);
|
|
22
|
+
if (normalized !== null)
|
|
23
|
+
canonical.add(normalized);
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
match: (origin) => {
|
|
27
|
+
const normalized = canonicalizeOrigin(origin);
|
|
28
|
+
return normalized !== null && canonical.has(normalized);
|
|
29
|
+
},
|
|
30
|
+
allowsAny: !1
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function resolveCorsPolicy(options, requireAuthorizationHeader = !1) {
|
|
34
|
+
const { match, allowsAny } = buildOriginMatcher(options.allowedOrigins), methods = options.allowedMethods ?? DEFAULT_ALLOWED_METHODS, headerList = [...options.allowedHeaders ?? DEFAULT_ALLOWED_HEADERS];
|
|
35
|
+
if (requireAuthorizationHeader && !headerList.some((header) => header.toLowerCase() === "authorization"))
|
|
36
|
+
headerList.push("Authorization");
|
|
37
|
+
const allowedHeaderSet = new Set(headerList.map((header) => header.toLowerCase())), allowedMethodSet = new Set(methods.map((method) => method.toUpperCase())), exposed = options.exposedHeaders ?? [];
|
|
38
|
+
return {
|
|
39
|
+
matchOrigin: match,
|
|
40
|
+
allowsAnyOrigin: allowsAny,
|
|
41
|
+
allowedMethodsHeader: methods.join(", "),
|
|
42
|
+
allowedMethodSet,
|
|
43
|
+
allowedHeadersHeader: headerList.join(", "),
|
|
44
|
+
allowedHeaderSet,
|
|
45
|
+
exposedHeadersHeader: exposed.length > 0 ? exposed.join(", ") : null,
|
|
46
|
+
credentials: options.credentials === !0,
|
|
47
|
+
maxAgeSeconds: options.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function isOriginAllowed(policy, origin) {
|
|
51
|
+
if (origin === null || origin.trim() === "null" || origin.trim() === "")
|
|
52
|
+
return !1;
|
|
53
|
+
return policy.matchOrigin(origin);
|
|
54
|
+
}
|
|
55
|
+
function allowOriginValue(policy, requestOrigin) {
|
|
56
|
+
if (policy.allowsAnyOrigin && !policy.credentials)
|
|
57
|
+
return WILDCARD_ORIGIN;
|
|
58
|
+
return requestOrigin;
|
|
59
|
+
}
|
|
60
|
+
export function isPreflightRequest(request) {
|
|
61
|
+
return request.method === "OPTIONS" && request.headers.get("access-control-request-method") !== null;
|
|
62
|
+
}
|
|
63
|
+
export function buildPreflightResponse(policy, request) {
|
|
64
|
+
const baseHeaders = {
|
|
65
|
+
Vary: "Origin, Access-Control-Request-Method, Access-Control-Request-Headers",
|
|
66
|
+
"Cache-Control": "no-store"
|
|
67
|
+
}, denied = new Response(null, { status: 204, headers: baseHeaders }), origin = request.headers.get("origin");
|
|
68
|
+
if (origin === null || !isOriginAllowed(policy, origin))
|
|
69
|
+
return denied;
|
|
70
|
+
const requestedMethod = request.headers.get("access-control-request-method");
|
|
71
|
+
if (requestedMethod === null || !policy.allowedMethodSet.has(requestedMethod.toUpperCase()))
|
|
72
|
+
return denied;
|
|
73
|
+
if (!parseRequestedHeaders(request.headers.get("access-control-request-headers")).every((header) => policy.allowedHeaderSet.has(header)))
|
|
74
|
+
return denied;
|
|
75
|
+
const headers = {
|
|
76
|
+
...baseHeaders,
|
|
77
|
+
"Access-Control-Allow-Origin": allowOriginValue(policy, origin),
|
|
78
|
+
"Access-Control-Allow-Methods": policy.allowedMethodsHeader,
|
|
79
|
+
"Access-Control-Allow-Headers": policy.allowedHeadersHeader,
|
|
80
|
+
"Access-Control-Max-Age": String(policy.maxAgeSeconds)
|
|
81
|
+
};
|
|
82
|
+
if (policy.credentials)
|
|
83
|
+
headers["Access-Control-Allow-Credentials"] = "true";
|
|
84
|
+
return new Response(null, { status: 204, headers });
|
|
85
|
+
}
|
|
86
|
+
export function decorateResponseWithCors(policy, request, response) {
|
|
87
|
+
const origin = request.headers.get("origin");
|
|
88
|
+
if (origin === null || !isOriginAllowed(policy, origin))
|
|
89
|
+
return response;
|
|
90
|
+
appendVary(response.headers, "Origin");
|
|
91
|
+
response.headers.set("Access-Control-Allow-Origin", allowOriginValue(policy, origin));
|
|
92
|
+
if (policy.credentials)
|
|
93
|
+
response.headers.set("Access-Control-Allow-Credentials", "true");
|
|
94
|
+
if (policy.exposedHeadersHeader !== null)
|
|
95
|
+
response.headers.set("Access-Control-Expose-Headers", policy.exposedHeadersHeader);
|
|
96
|
+
return response;
|
|
97
|
+
}
|
|
98
|
+
function parseRequestedHeaders(value) {
|
|
99
|
+
if (value === null || value.trim() === "")
|
|
100
|
+
return [];
|
|
101
|
+
return value.split(",").map((header) => header.trim().toLowerCase()).filter((header) => header !== "");
|
|
102
|
+
}
|
|
103
|
+
function appendVary(headers, token) {
|
|
104
|
+
const existing = headers.get("Vary");
|
|
105
|
+
if (existing === null || existing.trim() === "") {
|
|
106
|
+
headers.set("Vary", token);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const tokens = existing.split(",").map((entry) => entry.trim().toLowerCase());
|
|
110
|
+
if (tokens.includes(token.toLowerCase()) || tokens.includes("*"))
|
|
111
|
+
return;
|
|
112
|
+
headers.set("Vary", `${existing}, ${token}`);
|
|
113
|
+
}
|
|
114
|
+
export function validateCorsOptions(options, authConfigured = !1) {
|
|
115
|
+
const allowed = options.allowedOrigins;
|
|
116
|
+
if (!(Array.isArray(allowed) && allowed.length === 1 && allowed[0] === WILDCARD_ORIGIN))
|
|
117
|
+
return;
|
|
118
|
+
if (options.credentials === !0)
|
|
119
|
+
throw Error('serve({ cors }): allowedOrigins ["*"] cannot be combined with credentials: true \u2014 ' + "a wildcard origin is illegal for credentialed CORS. List explicit origins instead.");
|
|
120
|
+
const headers = options.allowedHeaders ?? DEFAULT_ALLOWED_HEADERS;
|
|
121
|
+
if (authConfigured || headers.some((header) => header.toLowerCase() === "authorization"))
|
|
122
|
+
throw Error('serve({ cors }): allowedOrigins ["*"] combined with an Authorization allowed-header lets any web origin send bearer tokens and read the response. List explicit origins, or drop Authorization from allowedHeaders if the wildcard is truly intended for a public API. (When serve({ auth }) is configured, Authorization is always an allowed header, so a wildcard origin is rejected regardless of allowedHeaders.)');
|
|
123
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Engine } from '../../core/engine.ts';
|
|
2
|
+
import type { ServerContext } from './context.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Result of wiring up engine-to-WebSocket event broadcasting.
|
|
5
|
+
*
|
|
6
|
+
* - `dispose`: removes all listeners (abort signal). Called on server shutdown.
|
|
7
|
+
* - `cleanupWorkflow`: drops the per-workflow sequence state for the given
|
|
8
|
+
* workflow id. Should be invoked when a workflow reaches a terminal state
|
|
9
|
+
* so the bookkeeping maps do not grow unbounded over the server's lifetime.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { Engine, MemoryStorage } from '@lostgradient/weft';
|
|
14
|
+
* import { wireEventBroadcasting, type EventBroadcastingHandle } from '@lostgradient/weft/server';
|
|
15
|
+
*
|
|
16
|
+
* await using engine = new Engine({ storage: new MemoryStorage() });
|
|
17
|
+
* const bunServer = Bun.serve({ fetch: () => new Response('ok') });
|
|
18
|
+
* const handle: EventBroadcastingHandle = wireEventBroadcasting(engine, bunServer);
|
|
19
|
+
* // Later, on shutdown:
|
|
20
|
+
* handle.dispose();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export interface EventBroadcastingHandle {
|
|
24
|
+
dispose: () => void;
|
|
25
|
+
cleanupWorkflow: (workflowId: string) => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extract a `workflowId` from a DOM `Event` when the concrete event carries
|
|
29
|
+
* one. All workflow, activity, token, signal, attribute, and update events
|
|
30
|
+
* in `core/events.ts` expose a `workflowId: string` field, but the `Event`
|
|
31
|
+
* base type does not know about it — so a runtime structural check narrows
|
|
32
|
+
* the value before we use it to key bookkeeping maps. Returns `undefined`
|
|
33
|
+
* for events without a string `workflowId` property.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getWorkflowIdFromEvent(event: Event): string | undefined;
|
|
36
|
+
export declare function registerWorkflowEventLifecycle(engine: Engine, context: ServerContext, broadcastingHandle: EventBroadcastingHandle): () => void;
|
|
37
|
+
/**
|
|
38
|
+
* Attach event listeners to the engine that broadcast events via WebSocket
|
|
39
|
+
* and persist each event to storage so `GET /v1/workflows/:id/events` returns data.
|
|
40
|
+
* Returns a handle exposing a cleanup function and a per-workflow eviction hook.
|
|
41
|
+
*
|
|
42
|
+
* @param engine - The engine whose events will be listened to.
|
|
43
|
+
* @param server - The Bun server used to `server.publish()` WebSocket messages.
|
|
44
|
+
* @param options.publishTokenMessage - Optional override for token-event delivery.
|
|
45
|
+
* When provided, this callback is called instead of `server.publish()` for
|
|
46
|
+
* token messages, enabling per-workflow stream sockets to be used in
|
|
47
|
+
* place of the default pub/sub channel. Leave unset unless you manage stream
|
|
48
|
+
* sockets separately (as `serve()` does internally).
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* import { Engine, MemoryStorage } from '@lostgradient/weft';
|
|
53
|
+
* import { wireEventBroadcasting } from '@lostgradient/weft/server';
|
|
54
|
+
*
|
|
55
|
+
* await using engine = new Engine({ storage: new MemoryStorage() });
|
|
56
|
+
* const bunServer = Bun.serve({ fetch: () => new Response('ok') });
|
|
57
|
+
* const handle = wireEventBroadcasting(engine, bunServer);
|
|
58
|
+
*
|
|
59
|
+
* // Wire a terminal-event listener to clean up per-workflow bookkeeping.
|
|
60
|
+
* engine.addEventListener('workflow:completed', (e) => {
|
|
61
|
+
* const workflowId = (e as { workflowId?: string }).workflowId;
|
|
62
|
+
* if (workflowId) handle.cleanupWorkflow(workflowId);
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* // On server shutdown, remove all event listeners.
|
|
66
|
+
* handle.dispose();
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function wireEventBroadcasting(engine: Engine, server: ReturnType<typeof Bun.serve>, options?: {
|
|
70
|
+
publishTokenMessage?: (workflowId: string, sequence: number, message: string) => void;
|
|
71
|
+
}): EventBroadcastingHandle;
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { encode } from "../../core/codec.js";
|
|
2
|
+
import {
|
|
3
|
+
ActivityCompletedEvent,
|
|
4
|
+
ActivityFailedEvent,
|
|
5
|
+
ActivityStartedEvent,
|
|
6
|
+
AttributesChangedEvent,
|
|
7
|
+
SignalDeliveredEvent,
|
|
8
|
+
SignalReceivedEvent,
|
|
9
|
+
UpdateCompletedEvent,
|
|
10
|
+
UpdateReceivedEvent,
|
|
11
|
+
WorkflowCancelledEvent,
|
|
12
|
+
WorkflowCompletedEvent,
|
|
13
|
+
WorkflowFailedEvent,
|
|
14
|
+
WorkflowStartedEvent,
|
|
15
|
+
WorkflowTimedOutEvent
|
|
16
|
+
} from "../../core/events.js";
|
|
17
|
+
import { KEYS } from "../../storage/interface.js";
|
|
18
|
+
import { claimNextSequence } from "../runtime-helpers.js";
|
|
19
|
+
import { cancelTask } from "./task-dispatch.js";
|
|
20
|
+
import { withRetry } from "./websocket-worker.js";
|
|
21
|
+
const TOKEN_EVENT_TYPE = "stream:token";
|
|
22
|
+
function workflowChannelPath(workflowId, connectionType) {
|
|
23
|
+
return `/v1/workflows/${encodeURIComponent(workflowId)}/${connectionType}`;
|
|
24
|
+
}
|
|
25
|
+
function serializeEvent(event) {
|
|
26
|
+
const data = {};
|
|
27
|
+
for (const [key, value] of Object.entries(event)) {
|
|
28
|
+
if (key === "type")
|
|
29
|
+
continue;
|
|
30
|
+
if (value instanceof Error)
|
|
31
|
+
data[key] = value.message;
|
|
32
|
+
else
|
|
33
|
+
data[key] = value;
|
|
34
|
+
}
|
|
35
|
+
const message = {
|
|
36
|
+
type: event.type,
|
|
37
|
+
timestamp: Date.now(),
|
|
38
|
+
data
|
|
39
|
+
};
|
|
40
|
+
return JSON.stringify(message);
|
|
41
|
+
}
|
|
42
|
+
export function getWorkflowIdFromEvent(event) {
|
|
43
|
+
if (!("workflowId" in event))
|
|
44
|
+
return;
|
|
45
|
+
const candidate = event.workflowId;
|
|
46
|
+
return typeof candidate === "string" ? candidate : void 0;
|
|
47
|
+
}
|
|
48
|
+
export function registerWorkflowEventLifecycle(engine, context, broadcastingHandle) {
|
|
49
|
+
const affinityController = new AbortController, terminalEventTypes = [
|
|
50
|
+
WorkflowCompletedEvent.type,
|
|
51
|
+
WorkflowFailedEvent.type,
|
|
52
|
+
WorkflowCancelledEvent.type,
|
|
53
|
+
WorkflowTimedOutEvent.type
|
|
54
|
+
];
|
|
55
|
+
for (const eventType of terminalEventTypes)
|
|
56
|
+
engine.addEventListener(eventType, (event) => {
|
|
57
|
+
const workflowId = getWorkflowIdFromEvent(event);
|
|
58
|
+
if (workflowId) {
|
|
59
|
+
context.workerAffinity.delete(workflowId);
|
|
60
|
+
broadcastingHandle.cleanupWorkflow(workflowId);
|
|
61
|
+
}
|
|
62
|
+
}, { signal: affinityController.signal });
|
|
63
|
+
const cancelPropagationController = new AbortController;
|
|
64
|
+
engine.addEventListener(WorkflowCancelledEvent.type, (event) => {
|
|
65
|
+
const workflowId = getWorkflowIdFromEvent(event);
|
|
66
|
+
if (!workflowId)
|
|
67
|
+
return;
|
|
68
|
+
const operationIds = context.workflowOperations.get(workflowId);
|
|
69
|
+
if (!operationIds || operationIds.size === 0)
|
|
70
|
+
return;
|
|
71
|
+
for (const operationId of operationIds) {
|
|
72
|
+
cancelTask(context, operationId);
|
|
73
|
+
context.operationToWorkflow.delete(operationId);
|
|
74
|
+
}
|
|
75
|
+
context.workflowOperations.delete(workflowId);
|
|
76
|
+
}, { signal: cancelPropagationController.signal });
|
|
77
|
+
return () => {
|
|
78
|
+
affinityController.abort();
|
|
79
|
+
cancelPropagationController.abort();
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export function wireEventBroadcasting(engine, server, options) {
|
|
83
|
+
const controller = new AbortController, { signal } = controller, sequenceCounters = new Map, sequenceInitPromises = new Map, tokenSequenceCounters = new Map, tokenSequenceInitPromises = new Map, sequenceChains = new Map;
|
|
84
|
+
function ensureSequenceInitialized(workflowId) {
|
|
85
|
+
const existing = sequenceInitPromises.get(workflowId);
|
|
86
|
+
if (existing)
|
|
87
|
+
return existing;
|
|
88
|
+
const promise = (async () => {
|
|
89
|
+
const prefix = KEYS.eventPrefix(workflowId);
|
|
90
|
+
let highestSequence = -1;
|
|
91
|
+
for await (const [key] of engine.storage.scan(prefix, { reverse: !0, limit: 1 })) {
|
|
92
|
+
const parts = key.split(":"), sequencePart = parts[parts.length - 1];
|
|
93
|
+
if (sequencePart !== void 0)
|
|
94
|
+
highestSequence = parseInt(sequencePart, 10);
|
|
95
|
+
}
|
|
96
|
+
sequenceCounters.set(workflowId, highestSequence + 1);
|
|
97
|
+
})().catch((error) => {
|
|
98
|
+
sequenceInitPromises.delete(workflowId);
|
|
99
|
+
throw error;
|
|
100
|
+
});
|
|
101
|
+
sequenceInitPromises.set(workflowId, promise);
|
|
102
|
+
return promise;
|
|
103
|
+
}
|
|
104
|
+
function ensureTokenSequenceInitialized(workflowId) {
|
|
105
|
+
const existing = tokenSequenceInitPromises.get(workflowId);
|
|
106
|
+
if (existing)
|
|
107
|
+
return existing;
|
|
108
|
+
const promise = (async () => {
|
|
109
|
+
const prefix = KEYS.streamChunkPrefix(workflowId, "tokens");
|
|
110
|
+
let highestSequence = -1;
|
|
111
|
+
for await (const [key] of engine.storage.scan(prefix, { reverse: !0, limit: 1 })) {
|
|
112
|
+
const sequenceText = key.slice(prefix.length), parsedSequence = Number.parseInt(sequenceText, 10);
|
|
113
|
+
if (Number.isSafeInteger(parsedSequence))
|
|
114
|
+
highestSequence = parsedSequence;
|
|
115
|
+
}
|
|
116
|
+
tokenSequenceCounters.set(workflowId, highestSequence + 1);
|
|
117
|
+
})().catch((error) => {
|
|
118
|
+
tokenSequenceInitPromises.delete(workflowId);
|
|
119
|
+
throw error;
|
|
120
|
+
});
|
|
121
|
+
tokenSequenceInitPromises.set(workflowId, promise);
|
|
122
|
+
return promise;
|
|
123
|
+
}
|
|
124
|
+
async function persistAndPublishEvent(workflowId, eventType, message) {
|
|
125
|
+
await ensureSequenceInitialized(workflowId);
|
|
126
|
+
const parsed = JSON.parse(message), sequence = claimNextSequence(sequenceCounters, workflowId), storageKey = KEYS.event(workflowId, sequence), encoded = encode(parsed);
|
|
127
|
+
await withRetry(async () => engine.storage.put(storageKey, encoded), `persist event "${eventType}" for workflow "${workflowId}"`);
|
|
128
|
+
const watchChannel = workflowChannelPath(workflowId, "watch");
|
|
129
|
+
server.publish(watchChannel, message);
|
|
130
|
+
if (eventType === TOKEN_EVENT_TYPE) {
|
|
131
|
+
const tokenPayload = {
|
|
132
|
+
workflowId: typeof parsed.data.workflowId === "string" ? parsed.data.workflowId : workflowId,
|
|
133
|
+
token: typeof parsed.data.token === "string" ? parsed.data.token : "",
|
|
134
|
+
model: typeof parsed.data.model === "string" ? parsed.data.model : ""
|
|
135
|
+
};
|
|
136
|
+
await ensureTokenSequenceInitialized(workflowId);
|
|
137
|
+
const tokenSequence = claimNextSequence(tokenSequenceCounters, workflowId);
|
|
138
|
+
await withRetry(async () => engine.storage.put(KEYS.streamChunk(workflowId, "tokens", tokenSequence), encode(tokenPayload)), `persist token stream chunk for workflow "${workflowId}"`);
|
|
139
|
+
const streamMessage = JSON.stringify({
|
|
140
|
+
...parsed,
|
|
141
|
+
sequence: tokenSequence,
|
|
142
|
+
data: tokenPayload
|
|
143
|
+
});
|
|
144
|
+
if (options?.publishTokenMessage)
|
|
145
|
+
options.publishTokenMessage(workflowId, tokenSequence, streamMessage);
|
|
146
|
+
else {
|
|
147
|
+
const streamChannel = workflowChannelPath(workflowId, "stream");
|
|
148
|
+
server.publish(streamChannel, streamMessage);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const eventTypes = [
|
|
153
|
+
WorkflowStartedEvent.type,
|
|
154
|
+
WorkflowCompletedEvent.type,
|
|
155
|
+
WorkflowFailedEvent.type,
|
|
156
|
+
WorkflowCancelledEvent.type,
|
|
157
|
+
WorkflowTimedOutEvent.type,
|
|
158
|
+
ActivityStartedEvent.type,
|
|
159
|
+
ActivityCompletedEvent.type,
|
|
160
|
+
ActivityFailedEvent.type,
|
|
161
|
+
TOKEN_EVENT_TYPE,
|
|
162
|
+
SignalReceivedEvent.type,
|
|
163
|
+
SignalDeliveredEvent.type,
|
|
164
|
+
AttributesChangedEvent.type,
|
|
165
|
+
UpdateReceivedEvent.type,
|
|
166
|
+
UpdateCompletedEvent.type
|
|
167
|
+
];
|
|
168
|
+
for (const eventType of eventTypes)
|
|
169
|
+
engine.addEventListener(eventType, (event) => {
|
|
170
|
+
const workflowId = getWorkflowIdFromEvent(event);
|
|
171
|
+
if (workflowId === void 0)
|
|
172
|
+
return;
|
|
173
|
+
const message = serializeEvent(event);
|
|
174
|
+
if (message === null)
|
|
175
|
+
return;
|
|
176
|
+
const nextChain = (sequenceChains.get(workflowId) ?? Promise.resolve()).then(() => persistAndPublishEvent(workflowId, eventType, message)).catch((error) => {
|
|
177
|
+
console.error(`[weft] Failed to persist event "${eventType}" for workflow "${workflowId}":`, error);
|
|
178
|
+
});
|
|
179
|
+
sequenceChains.set(workflowId, nextChain);
|
|
180
|
+
}, { signal });
|
|
181
|
+
function cleanupWorkflow(workflowId) {
|
|
182
|
+
const pendingChain = sequenceChains.get(workflowId), drop = () => {
|
|
183
|
+
sequenceCounters.delete(workflowId);
|
|
184
|
+
sequenceInitPromises.delete(workflowId);
|
|
185
|
+
tokenSequenceCounters.delete(workflowId);
|
|
186
|
+
tokenSequenceInitPromises.delete(workflowId);
|
|
187
|
+
sequenceChains.delete(workflowId);
|
|
188
|
+
};
|
|
189
|
+
if (!pendingChain) {
|
|
190
|
+
drop();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
pendingChain.finally(() => {
|
|
194
|
+
if (sequenceChains.get(workflowId) !== pendingChain) {
|
|
195
|
+
cleanupWorkflow(workflowId);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
drop();
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
dispose: () => controller.abort(),
|
|
203
|
+
cleanupWorkflow
|
|
204
|
+
};
|
|
205
|
+
}
|