@temelj/workflow 0.0.0-alpha.2 → 0.0.0-alpha.4
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 +394 -2
- package/dist/attributes.d.mts +11 -9
- package/dist/attributes.mjs +23 -5
- package/dist/bundle.d.mts +5 -23
- package/dist/bundle.mjs +2 -18
- package/dist/client/create.d.mts +26 -23
- package/dist/client/create.mjs +26 -32
- package/dist/client/facades.d.mts +12 -18
- package/dist/client/facades.mjs +102 -93
- package/dist/client/mod.mjs +1 -2
- package/dist/client/run-handle.d.mts +17 -54
- package/dist/client/run-handle.mjs +35 -105
- package/dist/client/worker-options.d.mts +8 -8
- package/dist/client/worker-options.mjs +11 -11
- package/dist/cloudflare/cloudflare.d.mts +4 -5
- package/dist/cloudflare/codec.d.mts +28 -13
- package/dist/cloudflare/codec.mjs +40 -17
- package/dist/cloudflare/entrypoint.d.mts +3 -4
- package/dist/cloudflare/entrypoint.mjs +4 -3
- package/dist/cloudflare/execution.d.mts +3 -4
- package/dist/cloudflare/execution.mjs +20 -13
- package/dist/cloudflare/host.d.mts +6 -7
- package/dist/cloudflare/host.mjs +7 -6
- package/dist/cloudflare/mod.d.mts +4 -4
- package/dist/cloudflare/mod.mjs +2 -2
- package/dist/cloudflare/name.d.mts +3 -4
- package/dist/cloudflare/name.mjs +3 -3
- package/dist/cloudflare/registry.d.mts +3 -23
- package/dist/cloudflare/registry.mjs +2 -20
- package/dist/cloudflare/runtime.d.mts +11 -18
- package/dist/cloudflare/runtime.mjs +52 -73
- package/dist/cloudflare/step.d.mts +6 -6
- package/dist/cloudflare/step.mjs +69 -57
- package/dist/cloudflare/types.d.mts +17 -36
- package/dist/collection.d.mts +8 -11
- package/dist/collection.mjs +10 -14
- package/dist/compiled-function.d.mts +14 -19
- package/dist/compiled-function.mjs +12 -24
- package/dist/compiled.d.mts +4 -0
- package/dist/compiled.mjs +4 -0
- package/dist/compiler/ast.d.mts +26 -0
- package/dist/{vite → compiler}/ast.mjs +24 -16
- package/dist/{vite → compiler}/error.d.mts +4 -6
- package/dist/{vite → compiler}/error.mjs +14 -16
- package/dist/compiler/manifest.d.mts +6 -0
- package/dist/{vite → compiler}/manifest.mjs +9 -7
- package/dist/compiler/plugin.d.mts +7 -0
- package/dist/{vite → compiler}/plugin.mjs +45 -46
- package/dist/compiler/safety.d.mts +12 -0
- package/dist/{vite → compiler}/safety.mjs +5 -11
- package/dist/{vite → compiler}/source-edit.d.mts +3 -4
- package/dist/{vite → compiler}/source-edit.mjs +1 -1
- package/dist/{vite → compiler}/source-map.d.mts +4 -3
- package/dist/{vite → compiler}/source-map.mjs +3 -3
- package/dist/compiler/source.d.mts +7 -0
- package/dist/{vite → compiler}/source.mjs +1 -1
- package/dist/compiler/transform.d.mts +12 -0
- package/dist/{vite → compiler}/transform.mjs +37 -38
- package/dist/definition.d.mts +17 -25
- package/dist/definition.mjs +19 -35
- package/dist/engine/child-workflow.d.mts +5 -9
- package/dist/engine/child-workflow.mjs +46 -67
- package/dist/engine/command-identity.d.mts +5 -6
- package/dist/engine/command-identity.mjs +9 -5
- package/dist/engine/context.d.mts +17 -0
- package/dist/engine/create.d.mts +36 -94
- package/dist/engine/create.mjs +55 -260
- package/dist/engine/deterministic.d.mts +6 -11
- package/dist/engine/deterministic.mjs +47 -68
- package/dist/engine/durable-command.d.mts +5 -5
- package/dist/engine/durable-command.mjs +2 -2
- package/dist/engine/execution-service.d.mts +20 -24
- package/dist/engine/execution-service.mjs +54 -52
- package/dist/engine/hooks.d.mts +17 -39
- package/dist/engine/hooks.mjs +73 -94
- package/dist/engine/inspection.d.mts +23 -15
- package/dist/engine/inspection.mjs +55 -29
- package/dist/engine/lifecycle.d.mts +6 -12
- package/dist/engine/lifecycle.mjs +5 -5
- package/dist/engine/lock-replay.d.mts +8 -15
- package/dist/engine/lock-replay.mjs +12 -25
- package/dist/engine/lock.d.mts +10 -15
- package/dist/engine/lock.mjs +65 -51
- package/dist/engine/message.d.mts +14 -34
- package/dist/engine/message.mjs +94 -127
- package/dist/engine/observation.d.mts +9 -11
- package/dist/engine/observation.mjs +18 -27
- package/dist/engine/replay.d.mts +18 -19
- package/dist/engine/replay.mjs +32 -56
- package/dist/engine/resume.d.mts +16 -0
- package/dist/engine/resume.mjs +24 -0
- package/dist/engine/retry.d.mts +15 -19
- package/dist/engine/retry.mjs +17 -17
- package/dist/engine/run-data.d.mts +4 -8
- package/dist/engine/run-data.mjs +24 -22
- package/dist/engine/run-service.d.mts +24 -33
- package/dist/engine/run-service.mjs +125 -93
- package/dist/engine/run-utils.d.mts +11 -13
- package/dist/engine/run-utils.mjs +23 -46
- package/dist/engine/schedule.d.mts +8 -22
- package/dist/engine/schedule.mjs +37 -34
- package/dist/engine/serialization.d.mts +9 -6
- package/dist/engine/serialization.mjs +30 -21
- package/dist/engine/signals.d.mts +23 -0
- package/dist/engine/signals.mjs +41 -0
- package/dist/engine/start.d.mts +18 -0
- package/dist/engine/start.mjs +88 -0
- package/dist/engine/state.d.mts +37 -67
- package/dist/engine/state.mjs +127 -282
- package/dist/engine/step-api.d.mts +5 -8
- package/dist/engine/step-api.mjs +16 -16
- package/dist/engine/stream-reader.d.mts +12 -0
- package/dist/engine/stream-reader.mjs +154 -0
- package/dist/engine/stream.d.mts +9 -54
- package/dist/engine/stream.mjs +54 -196
- package/dist/engine/summary/recovery.d.mts +35 -0
- package/dist/engine/summary/recovery.mjs +363 -0
- package/dist/engine/summary/runs.d.mts +43 -0
- package/dist/engine/summary/runs.mjs +294 -0
- package/dist/engine/summary/step-attempts.d.mts +5 -10
- package/dist/engine/summary/step-attempts.mjs +157 -36
- package/dist/engine/summary/tally.d.mts +44 -0
- package/dist/engine/summary/tally.mjs +142 -0
- package/dist/engine/task.d.mts +4 -5
- package/dist/engine/task.mjs +40 -48
- package/dist/errors/base.d.mts +17 -77
- package/dist/errors/base.mjs +26 -327
- package/dist/errors/capability.d.mts +3 -6
- package/dist/errors/capability.mjs +4 -8
- package/dist/errors/codes.d.mts +116 -0
- package/dist/{types/error-code.mjs → errors/codes.mjs} +2 -17
- package/dist/errors/definition.d.mts +3 -17
- package/dist/errors/definition.mjs +5 -42
- package/dist/errors/failures.d.mts +17 -51
- package/dist/errors/failures.mjs +35 -102
- package/dist/errors/hook.d.mts +5 -9
- package/dist/errors/hook.mjs +4 -16
- package/dist/errors/implementation.d.mts +3 -6
- package/dist/errors/implementation.mjs +7 -12
- package/dist/errors/lock.d.mts +7 -20
- package/dist/errors/lock.mjs +8 -44
- package/dist/errors/message.d.mts +14 -59
- package/dist/errors/message.mjs +13 -39
- package/dist/errors/mod.d.mts +4 -5
- package/dist/errors/mod.mjs +5 -7
- package/dist/errors/records.d.mts +10 -4
- package/dist/errors/records.mjs +256 -256
- package/dist/errors/run.d.mts +27 -68
- package/dist/errors/run.mjs +31 -85
- package/dist/errors/schedule.d.mts +7 -18
- package/dist/errors/schedule.mjs +7 -39
- package/dist/errors/step.d.mts +12 -45
- package/dist/errors/step.mjs +13 -34
- package/dist/errors/stream.d.mts +8 -16
- package/dist/errors/stream.mjs +7 -41
- package/dist/esbuild.d.mts +6 -4
- package/dist/esbuild.mjs +2 -1
- package/dist/events/descriptors.d.mts +12 -241
- package/dist/events/descriptors.mjs +12 -5
- package/dist/history/projection.d.mts +4 -6
- package/dist/history/projection.mjs +22 -26
- package/dist/history/replay-projection.d.mts +44 -48
- package/dist/history/replay-projection.mjs +41 -50
- package/dist/history/{mod.d.mts → replay.d.mts} +16 -21
- package/dist/history/{mod.mjs → replay.mjs} +21 -25
- package/dist/history/sequencer.d.mts +10 -11
- package/dist/history/sequencer.mjs +11 -7
- package/dist/history/step-attempts.d.mts +4 -7
- package/dist/history/step-attempts.mjs +8 -9
- package/dist/history/timeline.d.mts +4 -13
- package/dist/history/timeline.mjs +46 -265
- package/dist/history/validator.d.mts +5 -7
- package/dist/history/validator.mjs +9 -24
- package/dist/hook-token.d.mts +7 -0
- package/dist/hook-token.mjs +32 -0
- package/dist/ids.d.mts +8 -0
- package/dist/ids.mjs +21 -0
- package/dist/message-options.d.mts +11 -5
- package/dist/message-options.mjs +9 -7
- package/dist/mod.d.mts +32 -36
- package/dist/mod.mjs +9 -13
- package/dist/otel/metrics.d.mts +31 -0
- package/dist/otel/metrics.mjs +60 -0
- package/dist/otel/mod.d.mts +3 -0
- package/dist/otel/mod.mjs +3 -0
- package/dist/otel/spans.d.mts +24 -0
- package/dist/otel/spans.mjs +218 -0
- package/dist/otel/support.d.mts +15 -8
- package/dist/otel/support.mjs +18 -40
- package/dist/{otel.d.mts → otel/telemetry.d.mts} +5 -6
- package/dist/otel/telemetry.mjs +305 -0
- package/dist/pagination.d.mts +6 -12
- package/dist/pagination.mjs +10 -14
- package/dist/registry.d.mts +8 -5
- package/dist/registry.mjs +19 -10
- package/dist/rolldown.d.mts +6 -4
- package/dist/rolldown.mjs +2 -1
- package/dist/rollup.d.mts +6 -4
- package/dist/rollup.mjs +2 -1
- package/dist/rspack.d.mts +6 -4
- package/dist/rspack.mjs +2 -1
- package/dist/run-status.d.mts +29 -0
- package/dist/run-status.mjs +42 -0
- package/dist/schema/common.d.mts +22 -0
- package/dist/schema/common.mjs +54 -0
- package/dist/schema/error.d.mts +17 -0
- package/dist/schema/error.mjs +39 -0
- package/dist/schema/events.d.mts +446 -0
- package/dist/schema/events.mjs +235 -0
- package/dist/schema/pagination.d.mts +5 -0
- package/dist/schema/pagination.mjs +11 -0
- package/dist/schema/persisted-value.d.mts +8 -0
- package/dist/schema/persisted-value.mjs +94 -0
- package/dist/schema/run.d.mts +51 -0
- package/dist/schema/run.mjs +88 -0
- package/dist/schema/store.d.mts +94 -0
- package/dist/schema/store.mjs +116 -0
- package/dist/step-definition.d.mts +4 -9
- package/dist/step-definition.mjs +2 -2
- package/dist/store/capabilities.d.mts +8 -9
- package/dist/store/capabilities.mjs +7 -7
- package/dist/store/cleanup.d.mts +9 -14
- package/dist/store/cleanup.mjs +86 -85
- package/dist/store/create.d.mts +28 -29
- package/dist/store/create.mjs +10 -11
- package/dist/store/events.d.mts +48 -0
- package/dist/store/events.mjs +263 -0
- package/dist/store/indexes.d.mts +25 -0
- package/dist/store/indexes.mjs +282 -0
- package/dist/store/instrumentation.d.mts +2 -3
- package/dist/store/instrumentation.mjs +30 -30
- package/dist/store/lock.d.mts +4 -5
- package/dist/store/lock.mjs +5 -7
- package/dist/store/materialization.d.mts +10 -17
- package/dist/store/materialization.mjs +39 -33
- package/dist/store/mod.d.mts +3 -3
- package/dist/store/mod.mjs +2 -2
- package/dist/store/query.d.mts +13 -17
- package/dist/store/query.mjs +13 -13
- package/dist/store/run.d.mts +25 -34
- package/dist/store/run.mjs +67 -108
- package/dist/store/schedule.d.mts +6 -8
- package/dist/store/schedule.mjs +11 -11
- package/dist/store/step-attempt.d.mts +9 -12
- package/dist/store/step-attempt.mjs +9 -9
- package/dist/store/storage-value.d.mts +3 -3
- package/dist/store/storage-value.mjs +17 -1
- package/dist/store/validation.d.mts +17 -20
- package/dist/store/validation.mjs +30 -33
- package/dist/store-keys.d.mts +35 -47
- package/dist/store-keys.mjs +9 -17
- package/dist/telemetry.d.mts +16 -16
- package/dist/telemetry.mjs +3 -3
- package/dist/temporal.d.mts +11 -16
- package/dist/temporal.mjs +8 -9
- package/dist/timer.d.mts +12 -10
- package/dist/timer.mjs +11 -3
- package/dist/types/cleanup.d.mts +13 -50
- package/dist/types/cleanup.mjs +1 -22
- package/dist/types/client.d.mts +101 -162
- package/dist/types/{vite.d.mts → compiler.d.mts} +17 -24
- package/dist/types/compiler.mjs +1 -0
- package/dist/types/definition.d.mts +22 -34
- package/dist/types/engine-options.d.mts +10 -17
- package/dist/types/engine.d.mts +15 -274
- package/dist/types/error.d.mts +15 -217
- package/dist/types/error.mjs +1 -48
- package/dist/types/events.d.mts +59 -2730
- package/dist/types/events.mjs +1 -283
- package/dist/types/hook.d.mts +27 -85
- package/dist/types/hook.mjs +1 -66
- package/dist/types/ids.d.mts +9 -0
- package/dist/types/ids.mjs +1 -0
- package/dist/types/lock.d.mts +8 -26
- package/dist/types/lock.mjs +1 -18
- package/dist/types/message.d.mts +29 -43
- package/dist/types/observation.d.mts +43 -58
- package/dist/types/pagination.d.mts +6 -22
- package/dist/types/pagination.mjs +1 -13
- package/dist/types/result.d.mts +11 -43
- package/dist/types/retry.d.mts +7 -14
- package/dist/types/run-list.d.mts +9 -11
- package/dist/types/run-options.d.mts +25 -32
- package/dist/types/run.d.mts +35 -315
- package/dist/types/run.mjs +1 -207
- package/dist/types/runtime.d.mts +33 -145
- package/dist/types/runtime.mjs +1 -21
- package/dist/types/schedule.d.mts +13 -72
- package/dist/types/schedule.mjs +1 -48
- package/dist/types/step-attempts.d.mts +65 -261
- package/dist/types/step-attempts.mjs +1 -43
- package/dist/types/step.d.mts +66 -77
- package/dist/types/step.mjs +1 -5
- package/dist/types/store.d.mts +50 -182
- package/dist/types/stream.d.mts +19 -40
- package/dist/types/summary.d.mts +174 -278
- package/dist/types/telemetry.d.mts +23 -28
- package/dist/types/telemetry.mjs +1 -9
- package/dist/types/timeline.d.mts +46 -233
- package/dist/types/worker.d.mts +22 -29
- package/dist/values.d.mts +15 -0
- package/dist/values.mjs +57 -0
- package/dist/vite.d.mts +5 -6
- package/dist/vite.mjs +3 -4
- package/dist/webpack.d.mts +6 -4
- package/dist/webpack.mjs +2 -1
- package/dist/worker/error.d.mts +2 -9
- package/dist/worker/error.mjs +20 -32
- package/dist/worker/missing-implementation.d.mts +19 -0
- package/dist/worker/missing-implementation.mjs +62 -0
- package/dist/worker/worker.d.mts +18 -0
- package/dist/{worker.mjs → worker/worker.mjs} +64 -118
- package/package.json +28 -47
- package/dist/engine/execution-api.d.mts +0 -29
- package/dist/engine/execution-api.mjs +0 -33
- package/dist/engine/inspection-api.d.mts +0 -34
- package/dist/engine/inspection-api.mjs +0 -78
- package/dist/engine/mod.d.mts +0 -4
- package/dist/engine/mod.mjs +0 -2
- package/dist/engine/recovery.d.mts +0 -26
- package/dist/engine/recovery.mjs +0 -92
- package/dist/engine/retry-policy.d.mts +0 -4
- package/dist/engine/retry-policy.mjs +0 -4
- package/dist/engine/start-api.d.mts +0 -30
- package/dist/engine/start-api.mjs +0 -99
- package/dist/engine/summary/active-events.d.mts +0 -34
- package/dist/engine/summary/active-events.mjs +0 -69
- package/dist/engine/summary/child-workflow-runs.d.mts +0 -24
- package/dist/engine/summary/child-workflow-runs.mjs +0 -138
- package/dist/engine/summary/child-workflow-waits.d.mts +0 -21
- package/dist/engine/summary/child-workflow-waits.mjs +0 -67
- package/dist/engine/summary/recovery-child-workflow-waits.d.mts +0 -11
- package/dist/engine/summary/recovery-child-workflow-waits.mjs +0 -89
- package/dist/engine/summary/recovery-due-runs.d.mts +0 -16
- package/dist/engine/summary/recovery-due-runs.mjs +0 -52
- package/dist/engine/summary/recovery-failed-runs.d.mts +0 -14
- package/dist/engine/summary/recovery-failed-runs.mjs +0 -33
- package/dist/engine/summary/recovery-lease-runs.d.mts +0 -16
- package/dist/engine/summary/recovery-lease-runs.mjs +0 -69
- package/dist/engine/summary/recovery-locks.d.mts +0 -18
- package/dist/engine/summary/recovery-locks.mjs +0 -100
- package/dist/engine/summary/recovery-message-waits.d.mts +0 -11
- package/dist/engine/summary/recovery-message-waits.mjs +0 -74
- package/dist/engine/summary/recovery-retry-runs.d.mts +0 -17
- package/dist/engine/summary/recovery-retry-runs.mjs +0 -65
- package/dist/engine/summary/recovery-run-timestamps.d.mts +0 -13
- package/dist/engine/summary/recovery-run-timestamps.mjs +0 -18
- package/dist/engine/summary/recovery-runs.d.mts +0 -23
- package/dist/engine/summary/recovery-runs.mjs +0 -54
- package/dist/engine/summary/recovery-schedules.d.mts +0 -10
- package/dist/engine/summary/recovery-schedules.mjs +0 -46
- package/dist/engine/summary/recovery-sleep-waits.d.mts +0 -10
- package/dist/engine/summary/recovery-sleep-waits.mjs +0 -53
- package/dist/engine/summary/recovery-waits.d.mts +0 -21
- package/dist/engine/summary/recovery-waits.mjs +0 -29
- package/dist/engine/summary/run-availability.d.mts +0 -13
- package/dist/engine/summary/run-availability.mjs +0 -37
- package/dist/engine/summary/run-cleanup.d.mts +0 -14
- package/dist/engine/summary/run-cleanup.mjs +0 -44
- package/dist/engine/summary/run-failure.d.mts +0 -14
- package/dist/engine/summary/run-failure.mjs +0 -62
- package/dist/engine/summary/run-hooks.d.mts +0 -14
- package/dist/engine/summary/run-hooks.mjs +0 -63
- package/dist/engine/summary/run-lease.d.mts +0 -11
- package/dist/engine/summary/run-lease.mjs +0 -64
- package/dist/engine/summary/run-message-waits.d.mts +0 -15
- package/dist/engine/summary/run-message-waits.mjs +0 -62
- package/dist/engine/summary/run-metrics.d.mts +0 -31
- package/dist/engine/summary/run-metrics.mjs +0 -93
- package/dist/engine/summary/run-retry.d.mts +0 -9
- package/dist/engine/summary/run-retry.mjs +0 -69
- package/dist/engine/summary/run-sleeps.d.mts +0 -15
- package/dist/engine/summary/run-sleeps.mjs +0 -61
- package/dist/engine/summary/run-state.d.mts +0 -26
- package/dist/engine/summary/run-state.mjs +0 -48
- package/dist/engine/summary/run-status.d.mts +0 -16
- package/dist/engine/summary/run-status.mjs +0 -35
- package/dist/engine/summary/run-streams.d.mts +0 -14
- package/dist/engine/summary/run-streams.mjs +0 -46
- package/dist/engine/summary/run-transition.d.mts +0 -9
- package/dist/engine/summary/run-transition.mjs +0 -39
- package/dist/engine/summary/run-workflow.d.mts +0 -9
- package/dist/engine/summary/run-workflow.mjs +0 -47
- package/dist/engine/summary/step-attempt-active-child-workflows.d.mts +0 -13
- package/dist/engine/summary/step-attempt-active-child-workflows.mjs +0 -55
- package/dist/engine/summary/step-attempt-active-fields.d.mts +0 -23
- package/dist/engine/summary/step-attempt-active-fields.mjs +0 -14
- package/dist/engine/summary/step-attempt-active-message-waits.d.mts +0 -12
- package/dist/engine/summary/step-attempt-active-message-waits.mjs +0 -47
- package/dist/engine/summary/step-attempt-active-sleeps.d.mts +0 -19
- package/dist/engine/summary/step-attempt-active-sleeps.mjs +0 -44
- package/dist/engine/summary/step-attempt-buckets.d.mts +0 -22
- package/dist/engine/summary/step-attempt-buckets.mjs +0 -152
- package/dist/engine/summary/step-attempt-failure.d.mts +0 -12
- package/dist/engine/summary/step-attempt-failure.mjs +0 -61
- package/dist/engine/summary/step-attempt-lifecycle.d.mts +0 -13
- package/dist/engine/summary/step-attempt-lifecycle.mjs +0 -19
- package/dist/engine/summary.d.mts +0 -32
- package/dist/engine/summary.mjs +0 -37
- package/dist/errors/details.d.mts +0 -13
- package/dist/errors/details.mjs +0 -66
- package/dist/errors/record-view.d.mts +0 -11
- package/dist/errors/record-view.mjs +0 -24
- package/dist/errors/runtime.d.mts +0 -12
- package/dist/errors/runtime.mjs +0 -24
- package/dist/events/mod.d.mts +0 -3
- package/dist/events/mod.mjs +0 -2
- package/dist/history/attempt-key.d.mts +0 -6
- package/dist/history/attempt-key.mjs +0 -7
- package/dist/inspection/mod.d.mts +0 -5
- package/dist/inspection/mod.mjs +0 -3
- package/dist/otel.mjs +0 -590
- package/dist/runtime.d.mts +0 -35
- package/dist/runtime.mjs +0 -198
- package/dist/store/append-projection.d.mts +0 -15
- package/dist/store/append-projection.mjs +0 -26
- package/dist/store/compaction.d.mts +0 -5
- package/dist/store/compaction.mjs +0 -8
- package/dist/store/event-append-project.d.mts +0 -15
- package/dist/store/event-append-project.mjs +0 -77
- package/dist/store/event-append.d.mts +0 -37
- package/dist/store/event-append.mjs +0 -80
- package/dist/store/event-history.d.mts +0 -22
- package/dist/store/event-history.mjs +0 -75
- package/dist/store/event.d.mts +0 -10
- package/dist/store/event.mjs +0 -28
- package/dist/store/idempotency.d.mts +0 -10
- package/dist/store/idempotency.mjs +0 -167
- package/dist/store/message-index.d.mts +0 -21
- package/dist/store/message-index.mjs +0 -122
- package/dist/store/revision.d.mts +0 -4
- package/dist/store/revision.mjs +0 -7
- package/dist/store/schema.d.mts +0 -14
- package/dist/store/schema.mjs +0 -17
- package/dist/types/common.d.mts +0 -20
- package/dist/types/common.mjs +0 -16
- package/dist/types/error-code.d.mts +0 -256
- package/dist/types/message-id.d.mts +0 -7
- package/dist/types/message-id.mjs +0 -5
- package/dist/types/run-id.d.mts +0 -7
- package/dist/types/run-id.mjs +0 -5
- package/dist/types/step-id.d.mts +0 -7
- package/dist/types/step-id.mjs +0 -5
- package/dist/types/stream-id.d.mts +0 -7
- package/dist/types/stream-id.mjs +0 -5
- package/dist/types/worker-id.d.mts +0 -7
- package/dist/types/worker-id.mjs +0 -5
- package/dist/utility.d.mts +0 -49
- package/dist/utility.mjs +0 -122
- package/dist/vite/ast.d.mts +0 -23
- package/dist/vite/generated-name.d.mts +0 -7
- package/dist/vite/generated-name.mjs +0 -9
- package/dist/vite/manifest.d.mts +0 -7
- package/dist/vite/plugin.d.mts +0 -7
- package/dist/vite/safety.d.mts +0 -12
- package/dist/vite/source.d.mts +0 -7
- package/dist/vite/transform.d.mts +0 -7
- package/dist/webhook.d.mts +0 -16
- package/dist/webhook.mjs +0 -17
- package/dist/worker.d.mts +0 -19
- /package/dist/{types/vite.mjs → engine/context.mjs} +0 -0
package/dist/worker/error.d.mts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import { WorkflowResolvedMissingImplementationRetryConfig } from "../types/retry.mjs";
|
|
2
|
-
import { WorkflowRunRecord } from "../types/run.mjs";
|
|
3
1
|
import { WorkflowErrorRecord } from "../types/error.mjs";
|
|
4
2
|
import "temporal-polyfill/global";
|
|
5
3
|
//#region src/worker/error.d.ts
|
|
6
|
-
declare
|
|
7
|
-
|
|
8
|
-
declare function makeMissingImplementationDeadlineErrorRecord(run: WorkflowRunRecord, deadlineAt: Temporal.Instant): WorkflowErrorRecord;
|
|
9
|
-
declare function missingImplementationRetryDelay(retry: WorkflowResolvedMissingImplementationRetryConfig, retryAttempt: number): Temporal.Duration;
|
|
10
|
-
declare function toWorkflowWorkerErrorRecord(error: unknown): WorkflowErrorRecord;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { DEFAULT_MISSING_IMPLEMENTATION_RETRY_INTERVAL, makeMissingImplementationDeadlineErrorRecord, makeMissingImplementationNotFoundErrorRecord, missingImplementationRetryDelay, toWorkflowWorkerErrorRecord };
|
|
4
|
+
export declare function toWorkerErrorRecord(cause: unknown): WorkflowErrorRecord;
|
|
5
|
+
//#endregion
|
package/dist/worker/error.mjs
CHANGED
|
@@ -1,41 +1,29 @@
|
|
|
1
|
-
import { WorkflowOptionsError } from "../errors/base.mjs";
|
|
2
|
-
import { WorkflowRunDeadlineExceededError } from "../errors/run.mjs";
|
|
3
|
-
import { durationTotal, isPositiveSafeInteger, safeDuration } from "../utility.mjs";
|
|
4
1
|
import { WorkflowImplementationNotFoundError } from "../errors/implementation.mjs";
|
|
2
|
+
import { WorkflowRunDeadlineExceededError } from "../errors/run.mjs";
|
|
5
3
|
import "temporal-polyfill/global";
|
|
6
4
|
//#region src/worker/error.ts
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return toWorkflowWorkerErrorRecord(WorkflowImplementationNotFoundError.create(run.workflowName, run.workflowVersion));
|
|
10
|
-
}
|
|
11
|
-
function makeMissingImplementationDeadlineErrorRecord(run, deadlineAt) {
|
|
12
|
-
return toWorkflowWorkerErrorRecord(WorkflowRunDeadlineExceededError.create(run.id, deadlineAt));
|
|
13
|
-
}
|
|
14
|
-
function missingImplementationRetryDelay(retry, retryAttempt) {
|
|
15
|
-
if (!isPositiveSafeInteger(retryAttempt)) WorkflowOptionsError.missingImplementationRetryAttemptPositiveSafeInteger();
|
|
16
|
-
const exponentialDelay = durationTotal(retry.initialInterval) * retry.backoffCoefficient ** Math.max(0, retryAttempt - 1);
|
|
17
|
-
const delay = retry.maximumInterval === void 0 ? exponentialDelay : Math.min(exponentialDelay, durationTotal(retry.maximumInterval));
|
|
18
|
-
safeDuration(delay, "Workflow missing implementation retry delay");
|
|
19
|
-
return Temporal.Duration.from({ milliseconds: delay });
|
|
20
|
-
}
|
|
21
|
-
function toWorkflowWorkerErrorRecord(error) {
|
|
22
|
-
if (!(error instanceof Error)) return {
|
|
5
|
+
function toWorkerErrorRecord(cause) {
|
|
6
|
+
if (!(cause instanceof Error)) return {
|
|
23
7
|
name: "WorkflowNonErrorThrow",
|
|
24
|
-
message: String(
|
|
8
|
+
message: String(cause)
|
|
25
9
|
};
|
|
26
10
|
return {
|
|
27
|
-
name:
|
|
28
|
-
message:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
} } : {}
|
|
11
|
+
name: cause.name,
|
|
12
|
+
message: cause.message,
|
|
13
|
+
stack: cause.stack,
|
|
14
|
+
details: errorRecordDetails(cause)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function errorRecordDetails(cause) {
|
|
18
|
+
if (cause instanceof WorkflowRunDeadlineExceededError) return {
|
|
19
|
+
runId: cause.runId,
|
|
20
|
+
deadlineAt: cause.deadlineAt.toString()
|
|
38
21
|
};
|
|
22
|
+
if (cause instanceof WorkflowImplementationNotFoundError) {
|
|
23
|
+
const details = { workflowName: cause.workflowName };
|
|
24
|
+
if (cause.workflowVersion !== void 0) details.workflowVersion = cause.workflowVersion;
|
|
25
|
+
return details;
|
|
26
|
+
}
|
|
39
27
|
}
|
|
40
28
|
//#endregion
|
|
41
|
-
export {
|
|
29
|
+
export { toWorkerErrorRecord };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RunId } from "../types/ids.mjs";
|
|
2
|
+
import { ResolvedMissingImplementationRetryConfig } from "../types/retry.mjs";
|
|
3
|
+
import { ExecutionResult } from "../types/result.mjs";
|
|
4
|
+
import { RunRecord } from "../types/run.mjs";
|
|
5
|
+
import { WorkflowStore } from "../types/store.mjs";
|
|
6
|
+
import "temporal-polyfill/global";
|
|
7
|
+
//#region src/worker/missing-implementation.d.ts
|
|
8
|
+
interface MissingImplementationContext {
|
|
9
|
+
readonly store: WorkflowStore;
|
|
10
|
+
readonly now: () => Temporal.Instant;
|
|
11
|
+
readonly retry: ResolvedMissingImplementationRetryConfig;
|
|
12
|
+
readonly readResult: (runId: RunId) => Promise<ExecutionResult<unknown>>;
|
|
13
|
+
}
|
|
14
|
+
/** Retries a run whose implementation is not registered, or fails it once retries or its deadline run out. */
|
|
15
|
+
export declare function handleMissingImplementation(context: MissingImplementationContext, run: RunRecord): Promise<ExecutionResult<unknown>>;
|
|
16
|
+
export declare const DEFAULT_RETRY_INTERVAL: Temporal.Duration;
|
|
17
|
+
export declare function retryDelay(retry: ResolvedMissingImplementationRetryConfig, retryAttempt: number): Temporal.Duration;
|
|
18
|
+
//#endregion
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { durationTotal } from "../temporal.mjs";
|
|
2
|
+
import { WorkflowErrorCode } from "../errors/codes.mjs";
|
|
3
|
+
import { WorkflowOptionsError } from "../errors/base.mjs";
|
|
4
|
+
import { WorkflowImplementationNotFoundError } from "../errors/implementation.mjs";
|
|
5
|
+
import { WorkflowRunDeadlineExceededError } from "../errors/run.mjs";
|
|
6
|
+
import { isPositiveSafeInteger, safeDuration } from "../values.mjs";
|
|
7
|
+
import { patchRunIfCurrent, transitionRunToFailed, transitionRunToMissingImplementationWait, wakeParentRun } from "../engine/state.mjs";
|
|
8
|
+
import { nonNegativeTimerDelay } from "../timer.mjs";
|
|
9
|
+
import { toWorkerErrorRecord } from "./error.mjs";
|
|
10
|
+
import "temporal-polyfill/global";
|
|
11
|
+
//#region src/worker/missing-implementation.ts
|
|
12
|
+
/** Retries a run whose implementation is not registered, or fails it once retries or its deadline run out. */
|
|
13
|
+
async function handleMissingImplementation(context, run) {
|
|
14
|
+
const timestamp = context.now();
|
|
15
|
+
const retryAttempt = run.attempts ?? (run.retryAttempt ?? 0) + 1;
|
|
16
|
+
const errorRecord = toWorkerErrorRecord(new WorkflowImplementationNotFoundError(run.workflowName, run.workflowVersion));
|
|
17
|
+
const deadlineAt = run.deadlineAt;
|
|
18
|
+
if (deadlineAt !== void 0 && Temporal.Instant.compare(deadlineAt, timestamp) <= 0) return await fail(context, run, deadlineErrorRecord(run, deadlineAt), timestamp, "deadline", deadlineAt);
|
|
19
|
+
if (context.retry.maximumAttempts > 0 && retryAttempt >= context.retry.maximumAttempts) return await fail(context, run, errorRecord, timestamp, "failed");
|
|
20
|
+
let availableAt;
|
|
21
|
+
try {
|
|
22
|
+
availableAt = timestamp.add(Temporal.Duration.from({ milliseconds: nonNegativeTimerDelay(retryDelay(context.retry, retryAttempt), "Workflow missing implementation retry delay").clampedDelay }));
|
|
23
|
+
} catch (retryError) {
|
|
24
|
+
return await fail(context, run, toWorkerErrorRecord(retryError), timestamp, "failed");
|
|
25
|
+
}
|
|
26
|
+
if (deadlineAt !== void 0 && Temporal.Instant.compare(deadlineAt, availableAt) <= 0) return await fail(context, run, deadlineErrorRecord(run, deadlineAt), timestamp, "deadline", deadlineAt);
|
|
27
|
+
const waitingRun = await patchRunIfCurrent(context.store, run, transitionRunToMissingImplementationWait(run, errorRecord, timestamp, availableAt, retryAttempt));
|
|
28
|
+
if (waitingRun === void 0) return await context.readResult(run.id);
|
|
29
|
+
await wakeParentRun(context.store, waitingRun, availableAt);
|
|
30
|
+
return {
|
|
31
|
+
kind: "waiting",
|
|
32
|
+
run: waitingRun,
|
|
33
|
+
availableAt
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async function fail(context, run, errorRecord, timestamp, reason, deadlineAt) {
|
|
37
|
+
const failedRun = await patchRunIfCurrent(context.store, run, transitionRunToFailed(run, errorRecord, timestamp, reason, deadlineAt));
|
|
38
|
+
if (failedRun === void 0) return await context.readResult(run.id);
|
|
39
|
+
if (await context.store.appendEventIfRunCurrent(failedRun, {
|
|
40
|
+
kind: "workflow_failed",
|
|
41
|
+
timestamp
|
|
42
|
+
}) === void 0) return await context.readResult(run.id);
|
|
43
|
+
await wakeParentRun(context.store, failedRun, timestamp);
|
|
44
|
+
return {
|
|
45
|
+
kind: "failed",
|
|
46
|
+
run: failedRun,
|
|
47
|
+
error: errorRecord
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const DEFAULT_RETRY_INTERVAL = Temporal.Duration.from({ seconds: 30 });
|
|
51
|
+
function deadlineErrorRecord(run, deadlineAt) {
|
|
52
|
+
return toWorkerErrorRecord(new WorkflowRunDeadlineExceededError(run.id, deadlineAt));
|
|
53
|
+
}
|
|
54
|
+
function retryDelay(retry, retryAttempt) {
|
|
55
|
+
if (!isPositiveSafeInteger(retryAttempt)) throw new WorkflowOptionsError("Workflow missing implementation retry delay attempt must be a positive safe integer", { code: WorkflowErrorCode.OPTIONS_MISSING_IMPLEMENTATION_RETRY_ATTEMPT_INVALID });
|
|
56
|
+
const exponentialDelay = durationTotal(retry.initialInterval) * retry.backoffCoefficient ** Math.max(0, retryAttempt - 1);
|
|
57
|
+
const delay = retry.maximumInterval === void 0 ? exponentialDelay : Math.min(exponentialDelay, durationTotal(retry.maximumInterval));
|
|
58
|
+
safeDuration(delay, "Workflow missing implementation retry delay");
|
|
59
|
+
return Temporal.Duration.from({ milliseconds: delay });
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { DEFAULT_RETRY_INTERVAL, handleMissingImplementation, retryDelay };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RunId } from "../types/ids.mjs";
|
|
2
|
+
import { ExecutionResult } from "../types/result.mjs";
|
|
3
|
+
import { RunRecord } from "../types/run.mjs";
|
|
4
|
+
import { CreateWorkflowWorkerOptions, WorkerLeaseOptions, WorkerRunFilterOptions, WorkerRunOptions, WorkerRunResult, WorkflowWorker as WorkflowWorker$1 } from "../types/worker.mjs";
|
|
5
|
+
import "temporal-polyfill/global";
|
|
6
|
+
//#region src/worker/worker.d.ts
|
|
7
|
+
/** Storage-backed workflow worker implementation. */
|
|
8
|
+
export declare class WorkflowWorker implements WorkflowWorker$1 {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(options: CreateWorkflowWorkerOptions);
|
|
11
|
+
processRun(runId: RunId): Promise<ExecutionResult<unknown>>;
|
|
12
|
+
processNextRun(options?: WorkerRunFilterOptions): Promise<ExecutionResult<unknown> | undefined>;
|
|
13
|
+
extendLease(runId: RunId, options?: WorkerLeaseOptions): Promise<RunRecord | undefined>;
|
|
14
|
+
releaseLease(runId: RunId, options?: WorkerLeaseOptions): Promise<RunRecord | undefined>;
|
|
15
|
+
run(options?: WorkerRunOptions): Promise<WorkerRunResult>;
|
|
16
|
+
stop(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { WorkflowCapabilityError } from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
1
|
+
import { durationBetween, earliestOptionalTimestamp } from "../temporal.mjs";
|
|
2
|
+
import { WorkflowErrorCode } from "../errors/codes.mjs";
|
|
3
|
+
import { WorkflowStateError } from "../errors/base.mjs";
|
|
4
|
+
import { WorkflowCapabilityError } from "../errors/capability.mjs";
|
|
5
|
+
import { createDefaultWorkerId } from "../ids.mjs";
|
|
6
|
+
import { isPositiveSafeInteger, resolvePositiveSafeIntegerOption } from "../values.mjs";
|
|
7
|
+
import { requireStoreCapabilities } from "../store/capabilities.mjs";
|
|
8
|
+
import { getRequiredRun } from "../store/query.mjs";
|
|
9
|
+
import { resolveMissingImplementationRetryConfig } from "../engine/retry.mjs";
|
|
10
|
+
import { unfinishedRunResult } from "../engine/run-utils.mjs";
|
|
11
|
+
import { MAX_TIMER_DELAY, nonNegativeTimerDelay, positiveTimerDelay } from "../timer.mjs";
|
|
12
|
+
import { DEFAULT_RETRY_INTERVAL, handleMissingImplementation } from "./missing-implementation.mjs";
|
|
11
13
|
import "temporal-polyfill/global";
|
|
12
|
-
//#region src/worker.ts
|
|
14
|
+
//#region src/worker/worker.ts
|
|
13
15
|
const DEFAULT_WORKER_LEASE_DURATION = Temporal.Duration.from({ seconds: 30 });
|
|
14
16
|
const DEFAULT_WORKER_POLL_INTERVAL = Temporal.Duration.from({ milliseconds: 100 });
|
|
15
17
|
const DEFAULT_WORKER_STOP_DRAIN_TIMEOUT = Temporal.Duration.from({ seconds: 30 });
|
|
@@ -32,14 +34,14 @@ var WorkflowWorker = class {
|
|
|
32
34
|
#activeExecutionRuns = /* @__PURE__ */ new Map();
|
|
33
35
|
constructor(options) {
|
|
34
36
|
const store = options.engine.store;
|
|
35
|
-
|
|
36
|
-
conditionalRunClaims
|
|
37
|
-
conditionalRunUpdates
|
|
38
|
-
conditionalRunLeaseExtensions
|
|
39
|
-
conditionalRunLeaseReleases
|
|
40
|
-
conditionalEventAppends
|
|
41
|
-
reconcilesStepAttemptsFromEvents
|
|
42
|
-
|
|
37
|
+
requireStoreCapabilities(store, [
|
|
38
|
+
["conditionalRunClaims", "workflow worker conditional run claims"],
|
|
39
|
+
["conditionalRunUpdates", "workflow worker conditional run updates"],
|
|
40
|
+
["conditionalRunLeaseExtensions", "workflow worker conditional lease extensions"],
|
|
41
|
+
["conditionalRunLeaseReleases", "workflow worker conditional lease releases"],
|
|
42
|
+
["conditionalEventAppends", "workflow worker conditional event appends"],
|
|
43
|
+
["reconcilesStepAttemptsFromEvents", "workflow worker step-attempt reconciliation"]
|
|
44
|
+
]);
|
|
43
45
|
this.#engine = options.engine;
|
|
44
46
|
this.#store = store;
|
|
45
47
|
this.#registry = options.registry;
|
|
@@ -50,7 +52,7 @@ var WorkflowWorker = class {
|
|
|
50
52
|
this.#stopDrainTimeout = nonNegativeTimerDelay(options.stopDrainTimeout ?? DEFAULT_WORKER_STOP_DRAIN_TIMEOUT, "Workflow worker stopDrainTimeout").clampedDelay;
|
|
51
53
|
this.#defaultPollInterval = nonNegativeTimerDelay(options.pollInterval ?? DEFAULT_WORKER_POLL_INTERVAL, "Workflow worker pollInterval").clampedDelay;
|
|
52
54
|
this.#missingImplementationRetry = resolveMissingImplementationRetryConfig(options.missingImplementationRetry, {
|
|
53
|
-
initialInterval:
|
|
55
|
+
initialInterval: DEFAULT_RETRY_INTERVAL,
|
|
54
56
|
backoffCoefficient: 2,
|
|
55
57
|
maximumAttempts: 0
|
|
56
58
|
}, "Workflow missing implementation retry options");
|
|
@@ -59,10 +61,16 @@ var WorkflowWorker = class {
|
|
|
59
61
|
async processRun(runId) {
|
|
60
62
|
this.#stopRequested = false;
|
|
61
63
|
const run = await this.#claimRun({ runId });
|
|
62
|
-
if (run === void 0) WorkflowStateError
|
|
64
|
+
if (run === void 0) throw new WorkflowStateError(`Workflow run is not claimable: ${runId}`, {
|
|
65
|
+
code: WorkflowErrorCode.STATE_RUN_NOT_CLAIMABLE,
|
|
66
|
+
details: { runId }
|
|
67
|
+
});
|
|
63
68
|
if (this.#stopRequested) {
|
|
64
69
|
await this.#releaseLease(run.id, run.attempts);
|
|
65
|
-
WorkflowStateError
|
|
70
|
+
throw new WorkflowStateError(`Workflow worker stopped before executing run: ${runId}`, {
|
|
71
|
+
code: WorkflowErrorCode.STATE_WORKER_STOPPED_BEFORE_RUN,
|
|
72
|
+
details: { runId }
|
|
73
|
+
});
|
|
66
74
|
}
|
|
67
75
|
return await this.#executeClaimedRun(run);
|
|
68
76
|
}
|
|
@@ -92,8 +100,8 @@ var WorkflowWorker = class {
|
|
|
92
100
|
execution = this.#processNextRun(options ?? {}, options?.signal).then((result) => ({
|
|
93
101
|
execution,
|
|
94
102
|
result
|
|
95
|
-
}), (
|
|
96
|
-
error,
|
|
103
|
+
}), (cause) => ({
|
|
104
|
+
error: cause,
|
|
97
105
|
execution
|
|
98
106
|
}));
|
|
99
107
|
activeRuns.add(execution);
|
|
@@ -131,7 +139,7 @@ var WorkflowWorker = class {
|
|
|
131
139
|
for (const controller of this.#activeExecutionAborts) controller.abort();
|
|
132
140
|
for (const wakeup of this.#pollWakeups) wakeup();
|
|
133
141
|
if (!await this.#waitForActiveExecutions(activeExecutions)) return;
|
|
134
|
-
await Promise.all(releaseRuns.map(
|
|
142
|
+
await Promise.all(releaseRuns.map(([runId, attempts]) => this.#releaseLease(runId, attempts)));
|
|
135
143
|
}
|
|
136
144
|
async #waitForActiveExecutions(activeExecutions) {
|
|
137
145
|
if (activeExecutions.length === 0) return true;
|
|
@@ -170,15 +178,14 @@ var WorkflowWorker = class {
|
|
|
170
178
|
async #processNextRun(options, signal) {
|
|
171
179
|
const timestamp = this.#now();
|
|
172
180
|
const run = await this.#claimRun(options);
|
|
173
|
-
|
|
181
|
+
const observation = {
|
|
174
182
|
operation: "poll",
|
|
175
183
|
status: run === void 0 ? "empty" : "claimed",
|
|
176
184
|
timestamp,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
});
|
|
185
|
+
runId: run?.id,
|
|
186
|
+
run
|
|
187
|
+
};
|
|
188
|
+
this.#observeWorkerOperation(observation);
|
|
182
189
|
if (run === void 0) return;
|
|
183
190
|
if (this.#stopRequested || signal?.aborted === true) {
|
|
184
191
|
await this.#releaseLease(run.id, run.attempts);
|
|
@@ -192,82 +199,22 @@ var WorkflowWorker = class {
|
|
|
192
199
|
}
|
|
193
200
|
async #executeClaimedRun(run, signal) {
|
|
194
201
|
const definition = this.#registry.getByName(run.workflowName, run.workflowVersion);
|
|
195
|
-
if (definition === void 0) return await
|
|
202
|
+
if (definition === void 0) return await handleMissingImplementation({
|
|
203
|
+
store: this.#store,
|
|
204
|
+
now: this.#now,
|
|
205
|
+
retry: this.#missingImplementationRetry,
|
|
206
|
+
readResult: (runId) => this.#readRunExecutionResult(runId)
|
|
207
|
+
}, run);
|
|
196
208
|
const attempts = run.attempts !== void 0 && isPositiveSafeInteger(run.attempts) ? run.attempts : void 0;
|
|
197
|
-
return await this.#withHeartbeat(run.id, attempts, signal,
|
|
198
|
-
}
|
|
199
|
-
async #rescheduleMissingImplementation(run) {
|
|
200
|
-
const timestamp = this.#now();
|
|
201
|
-
const retryAttempt = run.attempts ?? (run.retryAttempt ?? 0) + 1;
|
|
202
|
-
const errorRecord = makeMissingImplementationNotFoundErrorRecord(run);
|
|
203
|
-
const deadlineAt = run.deadlineAt;
|
|
204
|
-
if (deadlineAt !== void 0 && Temporal.Instant.compare(deadlineAt, timestamp) <= 0) return await this.#failMissingImplementationForDeadline(run, deadlineAt, timestamp);
|
|
205
|
-
if (this.#missingImplementationRetry.maximumAttempts > 0 && retryAttempt >= this.#missingImplementationRetry.maximumAttempts) return await this.#failMissingImplementationRun(run, errorRecord, timestamp);
|
|
206
|
-
let availableAt;
|
|
207
|
-
try {
|
|
208
|
-
availableAt = timestamp.add(Temporal.Duration.from({ milliseconds: nonNegativeTimerDelay(missingImplementationRetryDelay(this.#missingImplementationRetry, retryAttempt), "Workflow missing implementation retry delay").clampedDelay }));
|
|
209
|
-
} catch (retryError) {
|
|
210
|
-
return await this.#failMissingImplementationRun(run, toWorkflowWorkerErrorRecord(retryError), timestamp);
|
|
211
|
-
}
|
|
212
|
-
if (deadlineAt !== void 0 && Temporal.Instant.compare(deadlineAt, availableAt) <= 0) return await this.#failMissingImplementationForDeadline(run, deadlineAt, timestamp);
|
|
213
|
-
const waitingRun = await patchRunIfCurrent(this.#store, run, transitionRunToMissingImplementationWait(run, errorRecord, timestamp, availableAt, retryAttempt));
|
|
214
|
-
if (waitingRun === void 0) return await this.#readRunExecutionResult(run.id);
|
|
215
|
-
await wakeParentRunForWaitingChild(this.#store, waitingRun, availableAt);
|
|
216
|
-
return {
|
|
217
|
-
kind: "waiting",
|
|
218
|
-
run: waitingRun,
|
|
219
|
-
availableAt
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
async #failMissingImplementationRun(run, errorRecord, timestamp) {
|
|
223
|
-
return await this.#failClaimedMissingImplementationRun(run, errorRecord, timestamp, "failed");
|
|
224
|
-
}
|
|
225
|
-
async #failMissingImplementationForDeadline(run, deadlineAt, timestamp) {
|
|
226
|
-
return await this.#failClaimedMissingImplementationRun(run, makeMissingImplementationDeadlineErrorRecord(run, deadlineAt), timestamp, "deadline", deadlineAt);
|
|
227
|
-
}
|
|
228
|
-
async #failClaimedMissingImplementationRun(run, errorRecord, timestamp, reason, deadlineAt) {
|
|
229
|
-
const failedRun = await patchRunIfCurrent(this.#store, run, transitionRunToFailed(run, errorRecord, timestamp, reason, deadlineAt));
|
|
230
|
-
if (failedRun === void 0) return await this.#readRunExecutionResult(run.id);
|
|
231
|
-
if (await this.#store.appendEventIfRunCurrent(failedRun, {
|
|
232
|
-
kind: "workflow_failed",
|
|
233
|
-
timestamp
|
|
234
|
-
}) === void 0) return await this.#readRunExecutionResult(run.id);
|
|
235
|
-
await wakeParentRunForTerminalChild(this.#store, failedRun, timestamp);
|
|
236
|
-
return {
|
|
237
|
-
kind: "failed",
|
|
238
|
-
run: failedRun,
|
|
239
|
-
error: errorRecord
|
|
240
|
-
};
|
|
209
|
+
return await this.#withHeartbeat(run.id, attempts, signal, (executionSignal) => this.#engine.resumeWorkflow(definition, run.id, { signal: executionSignal }));
|
|
241
210
|
}
|
|
242
211
|
async #readRunExecutionResult(runId) {
|
|
243
|
-
const current = await this.#engine.
|
|
244
|
-
|
|
245
|
-
if (current.status === "completed") return {
|
|
212
|
+
const current = await getRequiredRun(this.#engine.store, runId);
|
|
213
|
+
return current.status === "completed" ? {
|
|
246
214
|
kind: "completed",
|
|
247
215
|
run: current,
|
|
248
216
|
output: current.output
|
|
249
|
-
};
|
|
250
|
-
if (current.status === "failed") return {
|
|
251
|
-
kind: "failed",
|
|
252
|
-
run: current,
|
|
253
|
-
error: current.error ?? {
|
|
254
|
-
name: "WorkflowError",
|
|
255
|
-
message: `Workflow run failed: ${runId}`
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
if (current.status === "canceled") return {
|
|
259
|
-
kind: "failed",
|
|
260
|
-
run: current,
|
|
261
|
-
error: current.error ?? {
|
|
262
|
-
name: "WorkflowRunCanceledError",
|
|
263
|
-
message: `Workflow run was canceled: ${runId}`
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
return {
|
|
267
|
-
kind: "waiting",
|
|
268
|
-
run: current,
|
|
269
|
-
availableAt: current.availableAt ?? this.#now()
|
|
270
|
-
};
|
|
217
|
+
} : unfinishedRunResult(current, this.#now());
|
|
271
218
|
}
|
|
272
219
|
async #extendLease(runId, attempts) {
|
|
273
220
|
const timestamp = this.#now();
|
|
@@ -278,13 +225,14 @@ var WorkflowWorker = class {
|
|
|
278
225
|
leaseDuration: this.#leaseDuration,
|
|
279
226
|
now: timestamp
|
|
280
227
|
});
|
|
281
|
-
|
|
228
|
+
const observation = {
|
|
282
229
|
operation: "lease_extension",
|
|
283
230
|
status: run === void 0 ? "failure" : "success",
|
|
284
231
|
timestamp,
|
|
285
232
|
runId,
|
|
286
|
-
|
|
287
|
-
}
|
|
233
|
+
run
|
|
234
|
+
};
|
|
235
|
+
this.#observeWorkerOperation(observation);
|
|
288
236
|
return run;
|
|
289
237
|
}
|
|
290
238
|
async #releaseLease(runId, attempts) {
|
|
@@ -295,13 +243,14 @@ var WorkflowWorker = class {
|
|
|
295
243
|
attempts,
|
|
296
244
|
now: timestamp
|
|
297
245
|
});
|
|
298
|
-
|
|
246
|
+
const observation = {
|
|
299
247
|
operation: "lease_release",
|
|
300
248
|
status: run === void 0 ? "failure" : "success",
|
|
301
249
|
timestamp,
|
|
302
250
|
runId,
|
|
303
|
-
|
|
304
|
-
}
|
|
251
|
+
run
|
|
252
|
+
};
|
|
253
|
+
this.#observeWorkerOperation(observation);
|
|
305
254
|
return run;
|
|
306
255
|
}
|
|
307
256
|
async #withHeartbeat(runId, attempts, signal, callback) {
|
|
@@ -332,21 +281,21 @@ var WorkflowWorker = class {
|
|
|
332
281
|
});
|
|
333
282
|
executionAbort.abort();
|
|
334
283
|
}
|
|
335
|
-
}).catch((
|
|
284
|
+
}).catch((cause) => {
|
|
336
285
|
executionAbort.abort();
|
|
337
|
-
heartbeatError ??=
|
|
286
|
+
heartbeatError ??= cause;
|
|
338
287
|
this.#observeWorkerOperation({
|
|
339
288
|
operation: "heartbeat",
|
|
340
289
|
status: "failure",
|
|
341
290
|
timestamp: this.#now(),
|
|
342
291
|
runId,
|
|
343
|
-
error
|
|
292
|
+
error: cause
|
|
344
293
|
});
|
|
345
294
|
}).finally(() => {
|
|
346
295
|
heartbeatPending = false;
|
|
347
296
|
});
|
|
348
297
|
}, this.#heartbeatInterval);
|
|
349
|
-
const execution = (
|
|
298
|
+
const execution = (() => callback(executionAbort.signal))();
|
|
350
299
|
this.#activeExecutions.add(execution);
|
|
351
300
|
let executionOutcome;
|
|
352
301
|
try {
|
|
@@ -374,7 +323,7 @@ var WorkflowWorker = class {
|
|
|
374
323
|
}
|
|
375
324
|
#observeWorkerOperation(event) {
|
|
376
325
|
try {
|
|
377
|
-
this.#engine.
|
|
326
|
+
this.#engine.observation.emitWorkerOperation({
|
|
378
327
|
workerId: this.#workerId,
|
|
379
328
|
...event
|
|
380
329
|
});
|
|
@@ -410,8 +359,8 @@ var WorkflowWorker = class {
|
|
|
410
359
|
return Math.min(pollInterval, nonNegativeTimerDelay(durationBetween(timestamp, nextWakeAt), "Workflow idle poll delay").clampedDelay);
|
|
411
360
|
}
|
|
412
361
|
async #nextScheduleWakeAt() {
|
|
413
|
-
if (this.#engine.listSchedules === void 0) return;
|
|
414
|
-
return (await this.#engine.listSchedules({
|
|
362
|
+
if (this.#engine.store.listSchedules === void 0) return;
|
|
363
|
+
return (await this.#engine.store.listSchedules({
|
|
415
364
|
status: "active",
|
|
416
365
|
limit: 1
|
|
417
366
|
}))[0]?.nextFireAt;
|
|
@@ -419,10 +368,7 @@ var WorkflowWorker = class {
|
|
|
419
368
|
};
|
|
420
369
|
function earliestSummaryWakeAt(summary, timestamp) {
|
|
421
370
|
if (summary.lease.expired > 0) return timestamp;
|
|
422
|
-
|
|
423
|
-
if (nextAt === void 0) return summary.lease.nextExpiresAt;
|
|
424
|
-
if (summary.lease.nextExpiresAt === void 0) return nextAt;
|
|
425
|
-
return Temporal.Instant.compare(summary.lease.nextExpiresAt, nextAt) < 0 ? summary.lease.nextExpiresAt : nextAt;
|
|
371
|
+
return earliestOptionalTimestamp(earliestOptionalTimestamp(summary.nextAvailableAt, summary.retry.next?.at), summary.lease.next?.at);
|
|
426
372
|
}
|
|
427
373
|
//#endregion
|
|
428
374
|
export { WorkflowWorker };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@temelj/workflow",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.4",
|
|
4
4
|
"description": "Durable, vendor-agnostic, extendible workflows.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -17,29 +17,17 @@
|
|
|
17
17
|
"types": "./dist/mod.d.mts",
|
|
18
18
|
"import": "./dist/mod.mjs"
|
|
19
19
|
},
|
|
20
|
-
"./
|
|
21
|
-
"types": "./dist/
|
|
22
|
-
"import": "./dist/
|
|
20
|
+
"./compiled": {
|
|
21
|
+
"types": "./dist/compiled.d.mts",
|
|
22
|
+
"import": "./dist/compiled.mjs"
|
|
23
23
|
},
|
|
24
24
|
"./esbuild": {
|
|
25
25
|
"types": "./dist/esbuild.d.mts",
|
|
26
26
|
"import": "./dist/esbuild.mjs"
|
|
27
27
|
},
|
|
28
|
-
"./events": {
|
|
29
|
-
"types": "./dist/events/mod.d.mts",
|
|
30
|
-
"import": "./dist/events/mod.mjs"
|
|
31
|
-
},
|
|
32
|
-
"./inspection": {
|
|
33
|
-
"types": "./dist/inspection/mod.d.mts",
|
|
34
|
-
"import": "./dist/inspection/mod.mjs"
|
|
35
|
-
},
|
|
36
28
|
"./otel": {
|
|
37
|
-
"types": "./dist/otel.d.mts",
|
|
38
|
-
"import": "./dist/otel.mjs"
|
|
39
|
-
},
|
|
40
|
-
"./registry": {
|
|
41
|
-
"types": "./dist/registry.d.mts",
|
|
42
|
-
"import": "./dist/registry.mjs"
|
|
29
|
+
"types": "./dist/otel/mod.d.mts",
|
|
30
|
+
"import": "./dist/otel/mod.mjs"
|
|
43
31
|
},
|
|
44
32
|
"./rolldown": {
|
|
45
33
|
"types": "./dist/rolldown.d.mts",
|
|
@@ -53,10 +41,6 @@
|
|
|
53
41
|
"types": "./dist/rspack.d.mts",
|
|
54
42
|
"import": "./dist/rspack.mjs"
|
|
55
43
|
},
|
|
56
|
-
"./telemetry": {
|
|
57
|
-
"types": "./dist/telemetry.d.mts",
|
|
58
|
-
"import": "./dist/telemetry.mjs"
|
|
59
|
-
},
|
|
60
44
|
"./store": {
|
|
61
45
|
"types": "./dist/store/mod.d.mts",
|
|
62
46
|
"import": "./dist/store/mod.mjs"
|
|
@@ -69,10 +53,6 @@
|
|
|
69
53
|
"types": "./dist/webpack.d.mts",
|
|
70
54
|
"import": "./dist/webpack.mjs"
|
|
71
55
|
},
|
|
72
|
-
"./worker": {
|
|
73
|
-
"types": "./dist/worker.d.mts",
|
|
74
|
-
"import": "./dist/worker.mjs"
|
|
75
|
-
},
|
|
76
56
|
"./cloudflare": {
|
|
77
57
|
"types": "./dist/cloudflare/mod.d.mts",
|
|
78
58
|
"import": "./dist/cloudflare/mod.mjs"
|
|
@@ -80,43 +60,47 @@
|
|
|
80
60
|
},
|
|
81
61
|
"dependencies": {
|
|
82
62
|
"@opentelemetry/api": "^1.9.1",
|
|
83
|
-
"oxc-parser": "0.144.0",
|
|
84
|
-
"temporal-polyfill": "^1.0.4",
|
|
85
|
-
"unplugin": "^3.3.0",
|
|
86
|
-
"zod": "^4.4.3",
|
|
87
63
|
"@temelj/event": "0.1.0",
|
|
88
64
|
"@temelj/log": "0.1.0",
|
|
65
|
+
"@temelj/standard-schema": "0.1.0",
|
|
89
66
|
"@temelj/storage": "0.4.0",
|
|
90
|
-
"@temelj/string": "0.
|
|
91
|
-
"@temelj/value": "0.
|
|
92
|
-
"
|
|
67
|
+
"@temelj/string": "0.15.0",
|
|
68
|
+
"@temelj/value": "0.15.0",
|
|
69
|
+
"oxc-parser": "0.154.0",
|
|
70
|
+
"temporal-polyfill": "^1.0.6",
|
|
71
|
+
"unplugin": "^3.4.0"
|
|
93
72
|
},
|
|
94
73
|
"devDependencies": {
|
|
95
|
-
"@
|
|
96
|
-
"@opentelemetry/sdk-
|
|
97
|
-
"@
|
|
98
|
-
"@
|
|
74
|
+
"@cloudflare/workers-types": "5.20261014.1",
|
|
75
|
+
"@opentelemetry/sdk-metrics": "^2.12.0",
|
|
76
|
+
"@opentelemetry/sdk-trace-base": "^2.12.0",
|
|
77
|
+
"@rspack/core": "^2.2.9",
|
|
78
|
+
"@types/node": "26.6.5",
|
|
99
79
|
"esbuild": "^0.28.2",
|
|
100
|
-
"rolldown": "^1.2.
|
|
101
|
-
"rollup": "^4.
|
|
80
|
+
"rolldown": "^1.2.14",
|
|
81
|
+
"rollup": "^4.64.6",
|
|
102
82
|
"shx": "^0.4.0",
|
|
103
|
-
"tsdown": "^0.
|
|
83
|
+
"tsdown": "^0.23.1",
|
|
104
84
|
"typedoc": "^0.28.20",
|
|
105
85
|
"typescript": "^7.0.2",
|
|
106
|
-
"vite": "^8.
|
|
107
|
-
"vitest": "^
|
|
108
|
-
"webpack": "^5.
|
|
86
|
+
"vite": "^8.3.4",
|
|
87
|
+
"vitest": "^5.0.4",
|
|
88
|
+
"webpack": "^5.111.1",
|
|
89
|
+
"zod": "^4.6.7"
|
|
109
90
|
},
|
|
110
91
|
"peerDependencies": {
|
|
92
|
+
"@cloudflare/workers-types": "^4.0.0 || ^5.0.0",
|
|
111
93
|
"@rspack/core": "^2.0.0",
|
|
112
94
|
"esbuild": "^0.28.0",
|
|
113
95
|
"rolldown": "^1.0.0",
|
|
114
96
|
"rollup": "^4.0.0",
|
|
115
|
-
"typescript": "^6.0.0",
|
|
116
97
|
"vite": "^8.0.0",
|
|
117
98
|
"webpack": "^5.0.0"
|
|
118
99
|
},
|
|
119
100
|
"peerDependenciesMeta": {
|
|
101
|
+
"@cloudflare/workers-types": {
|
|
102
|
+
"optional": true
|
|
103
|
+
},
|
|
120
104
|
"@rspack/core": {
|
|
121
105
|
"optional": true
|
|
122
106
|
},
|
|
@@ -129,9 +113,6 @@
|
|
|
129
113
|
"rollup": {
|
|
130
114
|
"optional": true
|
|
131
115
|
},
|
|
132
|
-
"typescript": {
|
|
133
|
-
"optional": true
|
|
134
|
-
},
|
|
135
116
|
"vite": {
|
|
136
117
|
"optional": true
|
|
137
118
|
},
|