@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/engine/message.mjs
CHANGED
|
@@ -1,78 +1,64 @@
|
|
|
1
|
+
import { WorkflowErrorCode } from "../errors/codes.mjs";
|
|
1
2
|
import { WorkflowStateError } from "../errors/base.mjs";
|
|
2
3
|
import { WorkflowDurationError, WorkflowReplayDivergenceError } from "../errors/failures.mjs";
|
|
3
|
-
import { getRequiredRun, safeDuration } from "../utility.mjs";
|
|
4
4
|
import { WorkflowMessageDeliveryError, WorkflowMessageIdempotencyConflictError, WorkflowMessageWaitTimeoutError } from "../errors/message.mjs";
|
|
5
|
-
import { resolveBroadcastMessageInput, resolveSendMessageInput, resolveWaitForMessageInput } from "../message-options.mjs";
|
|
6
5
|
import { workflowErrorFromRecord } from "../errors/records.mjs";
|
|
7
|
-
import {
|
|
6
|
+
import { createMessageWait, resolveBroadcastMessageInput, resolveSendMessageInput } from "../message-options.mjs";
|
|
7
|
+
import { History } from "../history/replay.mjs";
|
|
8
|
+
import { safeDuration } from "../values.mjs";
|
|
9
|
+
import { getRequiredRun } from "../store/query.mjs";
|
|
8
10
|
import { serializeError, toOptionalPersistedValue } from "./serialization.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { requireMessageSendReplayMatches, requireRecordedDurableTerminalStarted } from "./replay.mjs";
|
|
11
|
+
import { enforceEventHistoryNextLimit } from "./retry.mjs";
|
|
12
|
+
import { Suspended } from "./signals.mjs";
|
|
13
|
+
import { resolveCommandIdentity, resolveCommandIdentityFromCandidates } from "./command-identity.mjs";
|
|
14
|
+
import { appendDurableEvent, appendDurableStepStartedEvent } from "./durable-command.mjs";
|
|
15
|
+
import { captureTelemetryContext } from "../telemetry.mjs";
|
|
16
|
+
import { recordedInstant, requireMessageSendReplayMatches, requireRecordedDurableTerminalStarted } from "./replay.mjs";
|
|
15
17
|
import { validateStandardSchema } from "@temelj/standard-schema";
|
|
16
18
|
import { deepEquals } from "@temelj/value";
|
|
17
19
|
//#region src/engine/message.ts
|
|
18
20
|
const MAX_MESSAGE_DELIVERY_APPEND_ATTEMPTS = 16;
|
|
19
|
-
function
|
|
21
|
+
function createStepMessageApi(environment) {
|
|
20
22
|
const { store, history, now, limits } = environment;
|
|
21
23
|
return {
|
|
22
24
|
async send(targetRunId, messageInput, channelOptions) {
|
|
23
25
|
const options = await resolveSendMessageInput(messageInput, channelOptions);
|
|
24
26
|
const idempotencyKey = options.idempotencyKey;
|
|
25
|
-
const identity =
|
|
27
|
+
const identity = resolveCommandIdentity(history, "message-send", options.messageId);
|
|
26
28
|
const started = history.startedMessageSend(identity.id);
|
|
27
29
|
const completed = history.completedMessageSend(identity.id);
|
|
30
|
+
const nextMessageSend = {
|
|
31
|
+
targetRunId,
|
|
32
|
+
messageId: options.messageId,
|
|
33
|
+
payload: toOptionalPersistedValue(options.payload, "message payload", limits),
|
|
34
|
+
idempotencyKey
|
|
35
|
+
};
|
|
28
36
|
if (completed !== void 0) {
|
|
29
37
|
requireRecordedDurableTerminalStarted(identity, history.hasStartedEventBeforeTerminalEvent(completed));
|
|
30
|
-
requireMessageSendReplayMatches(identity, started, completed,
|
|
31
|
-
|
|
32
|
-
messageId: options.messageId,
|
|
33
|
-
payload: toOptionalPersistedValue(options.payload, "message payload", limits),
|
|
34
|
-
idempotencyKey
|
|
35
|
-
});
|
|
36
|
-
if (!(completed.timestamp instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-send step ${identity.id} has invalid completion timestamp: ` + String(completed.timestamp), {
|
|
37
|
-
expectedStepId: identity.id,
|
|
38
|
-
actualStepId: identity.id
|
|
39
|
-
});
|
|
38
|
+
requireMessageSendReplayMatches(identity, started, completed, nextMessageSend);
|
|
39
|
+
recordedInstant("message-send", identity, "completion", completed.timestamp);
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
const failed = history.failedMessageSend(identity.id);
|
|
43
43
|
if (failed !== void 0) {
|
|
44
44
|
requireRecordedDurableTerminalStarted(identity, history.hasStartedEventBeforeTerminalEvent(failed));
|
|
45
|
-
requireMessageSendReplayMatches(identity, started, failed,
|
|
46
|
-
|
|
47
|
-
messageId: options.messageId,
|
|
48
|
-
payload: toOptionalPersistedValue(options.payload, "message payload", limits),
|
|
49
|
-
idempotencyKey
|
|
50
|
-
});
|
|
51
|
-
if (!(failed.timestamp instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-send step ${identity.id} has invalid failure timestamp: ` + String(failed.timestamp), {
|
|
52
|
-
expectedStepId: identity.id,
|
|
53
|
-
actualStepId: identity.id
|
|
54
|
-
});
|
|
45
|
+
requireMessageSendReplayMatches(identity, started, failed, nextMessageSend);
|
|
46
|
+
recordedInstant("message-send", identity, "failure", failed.timestamp);
|
|
55
47
|
throw workflowErrorFromRecord(failed.error);
|
|
56
48
|
}
|
|
57
|
-
const nextMessageSend = {
|
|
58
|
-
targetRunId,
|
|
59
|
-
messageId: options.messageId,
|
|
60
|
-
payload: toOptionalPersistedValue(options.payload, "message payload", limits),
|
|
61
|
-
idempotencyKey
|
|
62
|
-
};
|
|
63
49
|
if (started === void 0) {
|
|
64
|
-
const
|
|
65
|
-
await appendDurableStepStartedEvent(environment, {
|
|
50
|
+
const durableEvent = {
|
|
66
51
|
kind: "message_send_started",
|
|
67
|
-
timestamp,
|
|
52
|
+
timestamp: now(),
|
|
68
53
|
stepId: identity.id,
|
|
69
54
|
stepName: identity.name,
|
|
70
55
|
count: identity.count,
|
|
71
56
|
targetRunId: nextMessageSend.targetRunId,
|
|
72
57
|
messageId: nextMessageSend.messageId,
|
|
73
58
|
payload: nextMessageSend.payload,
|
|
74
|
-
|
|
75
|
-
}
|
|
59
|
+
idempotencyKey: nextMessageSend.idempotencyKey
|
|
60
|
+
};
|
|
61
|
+
await appendDurableStepStartedEvent(environment, durableEvent);
|
|
76
62
|
} else requireMessageSendReplayMatches(identity, started, started, nextMessageSend);
|
|
77
63
|
try {
|
|
78
64
|
await sendWorkflowMessage(store, targetRunId, {
|
|
@@ -80,7 +66,7 @@ function createWorkflowStepMessageApi(environment) {
|
|
|
80
66
|
idempotencyKey
|
|
81
67
|
}, now, limits, environment.observeMessageSent, environment.telemetry);
|
|
82
68
|
} catch (error) {
|
|
83
|
-
await
|
|
69
|
+
await appendDurableEvent(environment, {
|
|
84
70
|
kind: "message_send_failed",
|
|
85
71
|
timestamp: now(),
|
|
86
72
|
stepId: identity.id,
|
|
@@ -91,7 +77,7 @@ function createWorkflowStepMessageApi(environment) {
|
|
|
91
77
|
});
|
|
92
78
|
throw error;
|
|
93
79
|
}
|
|
94
|
-
await
|
|
80
|
+
await appendDurableEvent(environment, {
|
|
95
81
|
kind: "message_send_completed",
|
|
96
82
|
timestamp: now(),
|
|
97
83
|
stepId: identity.id,
|
|
@@ -100,22 +86,20 @@ function createWorkflowStepMessageApi(environment) {
|
|
|
100
86
|
messageId: options.messageId
|
|
101
87
|
});
|
|
102
88
|
},
|
|
103
|
-
|
|
104
|
-
return await waitForWorkflowMessage(environment, resolveWaitForMessageInput(messageInput, channelOptions));
|
|
105
|
-
}
|
|
89
|
+
wait: createMessageWait((options) => waitForMessage(environment, options))
|
|
106
90
|
};
|
|
107
91
|
}
|
|
108
|
-
async function
|
|
109
|
-
const telemetryContext = captureTelemetryContext(
|
|
92
|
+
async function sendMessageInput(context, runId, messageInput, channelOptions) {
|
|
93
|
+
const telemetryContext = captureTelemetryContext(context.telemetry);
|
|
110
94
|
const messageOptions = await resolveSendMessageInput(messageInput, channelOptions);
|
|
111
|
-
await sendWorkflowMessage(
|
|
95
|
+
await sendWorkflowMessage(context.store, runId, messageOptions, context.now, context.limits, context.observation.emitMessageSent, context.telemetry, telemetryContext);
|
|
112
96
|
}
|
|
113
|
-
async function
|
|
114
|
-
const telemetryContext = captureTelemetryContext(
|
|
97
|
+
async function broadcastMessageInput(context, messageInput, channelOptions) {
|
|
98
|
+
const telemetryContext = captureTelemetryContext(context.telemetry);
|
|
115
99
|
const messageOptions = await resolveBroadcastMessageInput(messageInput, channelOptions);
|
|
116
|
-
toOptionalPersistedValue(messageOptions.payload, "message payload",
|
|
117
|
-
const targets = await broadcastMessageTargets(
|
|
118
|
-
for (const target of targets) await sendWorkflowMessage(
|
|
100
|
+
toOptionalPersistedValue(messageOptions.payload, "message payload", context.limits);
|
|
101
|
+
const targets = await broadcastMessageTargets(context.store, messageOptions.target);
|
|
102
|
+
for (const target of targets) await sendWorkflowMessage(context.store, target.id, messageOptions, context.now, context.limits, context.observation.emitMessageSent, context.telemetry, telemetryContext);
|
|
119
103
|
return {
|
|
120
104
|
messageId: messageOptions.messageId,
|
|
121
105
|
runIds: targets.map((target) => target.id),
|
|
@@ -123,77 +107,81 @@ async function broadcastWorkflowMessageInput(service, messageInput, channelOptio
|
|
|
123
107
|
};
|
|
124
108
|
}
|
|
125
109
|
async function sendWorkflowMessage(store, runId, options, now, limits, observeMessageSent, telemetry, traceContext) {
|
|
126
|
-
const targetRunId = runId;
|
|
127
110
|
const idempotencyKey = options.idempotencyKey;
|
|
128
111
|
const telemetryContext = traceContext ?? captureTelemetryContext(telemetry);
|
|
129
|
-
const run = await getRequiredRun(store,
|
|
112
|
+
const run = await getRequiredRun(store, runId);
|
|
130
113
|
const payload = toOptionalPersistedValue(options.payload, "message payload", limits);
|
|
131
114
|
let timestamp;
|
|
132
115
|
let appendedEvents;
|
|
133
116
|
for (let attempt = 0; attempt < MAX_MESSAGE_DELIVERY_APPEND_ATTEMPTS && appendedEvents === void 0; attempt++) {
|
|
134
|
-
const currentRun = attempt === 0 ? run : await getRequiredRun(store,
|
|
135
|
-
const currentEvents = await store.getEvents(
|
|
136
|
-
const currentHistory = new
|
|
117
|
+
const currentRun = attempt === 0 ? run : await getRequiredRun(store, runId);
|
|
118
|
+
const currentEvents = await store.getEvents(runId);
|
|
119
|
+
const currentHistory = new History(currentEvents);
|
|
137
120
|
if (idempotencyKey !== void 0) {
|
|
138
121
|
const existingMessage = currentHistory.messageByIdempotencyKey(idempotencyKey);
|
|
139
122
|
if (existingMessage !== void 0) {
|
|
140
123
|
if (existingMessage.messageId === options.messageId && deepEquals(existingMessage.payload, payload)) {
|
|
141
|
-
await wakeRunForMessageEvent(store,
|
|
124
|
+
await wakeRunForMessageEvent(store, runId, existingMessage);
|
|
142
125
|
return;
|
|
143
126
|
}
|
|
144
127
|
WorkflowMessageIdempotencyConflictError.conflict({
|
|
145
|
-
runId
|
|
128
|
+
runId,
|
|
146
129
|
messageId: options.messageId,
|
|
147
130
|
idempotencyKey
|
|
148
131
|
});
|
|
149
132
|
}
|
|
150
|
-
await requireMessageIdempotencyIndexUnclaimed(store,
|
|
133
|
+
await requireMessageIdempotencyIndexUnclaimed(store, runId, options.messageId, idempotencyKey);
|
|
151
134
|
}
|
|
152
135
|
if (currentRun.status === "completed" || currentRun.status === "failed" || currentRun.status === "canceled") WorkflowMessageDeliveryError.cannotSend({
|
|
153
|
-
runId
|
|
136
|
+
runId,
|
|
154
137
|
status: currentRun.status,
|
|
155
138
|
messageId: options.messageId
|
|
156
139
|
});
|
|
157
140
|
const waiterStepIds = currentHistory.activeMessageWaitStepIds(options.messageId);
|
|
158
141
|
timestamp ??= now();
|
|
159
|
-
|
|
160
|
-
|
|
142
|
+
enforceEventHistoryNextLimit(currentEvents, limits);
|
|
143
|
+
const durableEvent1 = {
|
|
161
144
|
kind: "message_sent",
|
|
162
145
|
timestamp,
|
|
163
146
|
messageId: options.messageId,
|
|
164
147
|
payload,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
148
|
+
waiterStepIds: waiterStepIds.length !== 0 ? waiterStepIds : void 0,
|
|
149
|
+
idempotencyKey,
|
|
150
|
+
telemetryContext
|
|
151
|
+
};
|
|
152
|
+
appendedEvents = await store.appendEventIfRunCurrent(currentRun, durableEvent1);
|
|
169
153
|
}
|
|
170
154
|
if (appendedEvents === void 0) {
|
|
171
|
-
const currentRun = await getRequiredRun(store,
|
|
155
|
+
const currentRun = await getRequiredRun(store, runId);
|
|
172
156
|
if (currentRun.status === "completed" || currentRun.status === "failed" || currentRun.status === "canceled") WorkflowMessageDeliveryError.cannotSend({
|
|
173
|
-
runId
|
|
157
|
+
runId,
|
|
174
158
|
status: currentRun.status,
|
|
175
159
|
messageId: options.messageId
|
|
176
160
|
});
|
|
177
|
-
WorkflowStateError
|
|
161
|
+
throw new WorkflowStateError(`Failed to append workflow message for run ${runId}`, {
|
|
162
|
+
code: WorkflowErrorCode.STATE_MESSAGE_APPEND_FAILED,
|
|
163
|
+
details: { runId }
|
|
164
|
+
});
|
|
178
165
|
}
|
|
179
|
-
const appendedHistory = new
|
|
166
|
+
const appendedHistory = new History(appendedEvents);
|
|
180
167
|
if (idempotencyKey !== void 0) {
|
|
181
168
|
const existingMessage = appendedHistory.messageByIdempotencyKey(idempotencyKey);
|
|
182
169
|
if (existingMessage !== void 0 && !workflowMessageSendMatches(existingMessage, options, payload)) WorkflowMessageIdempotencyConflictError.conflict({
|
|
183
|
-
runId
|
|
170
|
+
runId,
|
|
184
171
|
messageId: options.messageId,
|
|
185
172
|
idempotencyKey
|
|
186
173
|
});
|
|
187
174
|
}
|
|
188
|
-
|
|
175
|
+
let messageEvent = appendedHistory.messageForSend(options.messageId, idempotencyKey);
|
|
176
|
+
if (messageEvent === void 0) messageEvent = {
|
|
189
177
|
kind: "message_sent",
|
|
190
178
|
timestamp: timestamp ?? now(),
|
|
191
179
|
messageId: options.messageId,
|
|
192
180
|
payload,
|
|
193
|
-
|
|
181
|
+
telemetryContext
|
|
194
182
|
};
|
|
195
|
-
observeMessageSent?.(
|
|
196
|
-
await wakeRunForMessageEvent(store,
|
|
183
|
+
observeMessageSent?.(runId, messageEvent);
|
|
184
|
+
await wakeRunForMessageEvent(store, runId, messageEvent);
|
|
197
185
|
}
|
|
198
186
|
async function broadcastMessageTargets(store, target) {
|
|
199
187
|
return (await store.listRuns(target)).filter((run) => !(run.status === "completed" || run.status === "failed" || run.status === "canceled"));
|
|
@@ -208,9 +196,9 @@ async function requireMessageIdempotencyIndexUnclaimed(store, runId, messageId,
|
|
|
208
196
|
function workflowMessageSendMatches(event, options, payload) {
|
|
209
197
|
return event.messageId === options.messageId && deepEquals(event.payload, payload);
|
|
210
198
|
}
|
|
211
|
-
async function
|
|
212
|
-
const { runId, history, now,
|
|
213
|
-
const identity =
|
|
199
|
+
async function waitForMessage(environment, options) {
|
|
200
|
+
const { runId, history, now, executionOwner } = environment;
|
|
201
|
+
const identity = resolveCommandIdentityFromCandidates(history, "message-wait", [
|
|
214
202
|
options.commandId,
|
|
215
203
|
options.name,
|
|
216
204
|
options.messageId
|
|
@@ -231,28 +219,23 @@ async function waitForWorkflowMessage(environment, options) {
|
|
|
231
219
|
if (started !== void 0) requireMessageWaitReplayMatches(identity, started, started, options);
|
|
232
220
|
const timeoutAt = started?.timeoutAt === void 0 ? options.timeout === void 0 ? void 0 : (() => {
|
|
233
221
|
const timeout = safeDuration(options.timeout.total({ unit: "millisecond" }), "Workflow messageId timeout");
|
|
234
|
-
if (timeout <= 0) WorkflowDurationError
|
|
222
|
+
if (timeout <= 0) throw new WorkflowDurationError("Workflow message timeout must be greater than zero");
|
|
235
223
|
return now().add(Temporal.Duration.from({ milliseconds: timeout }));
|
|
236
|
-
})() : (
|
|
237
|
-
if (!(started.timeoutAt instanceof Temporal.Instant)) WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} has invalid timeout timestamp: ` + String(started.timeoutAt), {
|
|
238
|
-
expectedStepId: identity.id,
|
|
239
|
-
actualStepId: identity.id
|
|
240
|
-
});
|
|
241
|
-
return started.timeoutAt;
|
|
242
|
-
})();
|
|
224
|
+
})() : recordedInstant("message-wait", identity, "timeout", started.timeoutAt);
|
|
243
225
|
let waitStartedAt;
|
|
244
226
|
if (started === void 0) {
|
|
245
227
|
waitStartedAt = now();
|
|
246
|
-
|
|
228
|
+
const durableEvent2 = {
|
|
247
229
|
kind: "message_wait_started",
|
|
248
230
|
timestamp: waitStartedAt,
|
|
249
231
|
stepId: identity.id,
|
|
250
232
|
stepName: identity.name,
|
|
251
233
|
count: identity.count,
|
|
252
234
|
messageId: options.messageId,
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
}
|
|
235
|
+
source: options.source,
|
|
236
|
+
timeoutAt
|
|
237
|
+
};
|
|
238
|
+
await appendDurableStepStartedEvent(environment, durableEvent2);
|
|
256
239
|
}
|
|
257
240
|
const messageId = history.messageForWait(options.messageId, identity.id, timeoutAt);
|
|
258
241
|
if (messageId !== void 0) {
|
|
@@ -260,7 +243,7 @@ async function waitForWorkflowMessage(environment, options) {
|
|
|
260
243
|
try {
|
|
261
244
|
payload = options.schema === void 0 ? messageId.payload : await validateStandardSchema(options.schema, messageId.payload, "Workflow message validation failed");
|
|
262
245
|
} catch (error) {
|
|
263
|
-
await
|
|
246
|
+
await appendDurableEvent(environment, {
|
|
264
247
|
kind: "message_wait_failed",
|
|
265
248
|
timestamp: now(),
|
|
266
249
|
stepId: identity.id,
|
|
@@ -270,28 +253,29 @@ async function waitForWorkflowMessage(environment, options) {
|
|
|
270
253
|
});
|
|
271
254
|
throw error;
|
|
272
255
|
}
|
|
273
|
-
const persistedPayload =
|
|
274
|
-
|
|
256
|
+
const persistedPayload = messageId.payload;
|
|
257
|
+
const durableEvent3 = {
|
|
275
258
|
kind: "message_wait_completed",
|
|
276
259
|
timestamp: now(),
|
|
277
260
|
stepId: identity.id,
|
|
278
261
|
stepName: identity.name,
|
|
279
262
|
messageId: options.messageId,
|
|
280
|
-
|
|
263
|
+
payload: persistedPayload,
|
|
281
264
|
messageTimestamp: messageId.timestamp,
|
|
282
|
-
|
|
283
|
-
}
|
|
265
|
+
telemetryContext: messageId.telemetryContext
|
|
266
|
+
};
|
|
267
|
+
await appendDurableEvent(environment, durableEvent3);
|
|
284
268
|
return payload;
|
|
285
269
|
}
|
|
286
270
|
if (timeoutAt !== void 0 && Temporal.Instant.compare(timeoutAt, now()) <= 0) {
|
|
287
|
-
const error = WorkflowMessageWaitTimeoutError
|
|
271
|
+
const error = new WorkflowMessageWaitTimeoutError({
|
|
288
272
|
runId,
|
|
289
273
|
stepId: identity.id,
|
|
290
274
|
stepName: identity.name,
|
|
291
275
|
messageId: options.messageId,
|
|
292
276
|
timeoutAt
|
|
293
277
|
});
|
|
294
|
-
await
|
|
278
|
+
await appendDurableEvent(environment, {
|
|
295
279
|
kind: "message_wait_failed",
|
|
296
280
|
timestamp: now(),
|
|
297
281
|
stepId: identity.id,
|
|
@@ -301,38 +285,23 @@ async function waitForWorkflowMessage(environment, options) {
|
|
|
301
285
|
});
|
|
302
286
|
throw error;
|
|
303
287
|
}
|
|
304
|
-
|
|
288
|
+
Suspended.until(messageWaitAvailableAt(now, timeoutAt, executionOwner.deadlineAt));
|
|
305
289
|
}
|
|
306
290
|
function requireMessageWaitReplayMatches(identity, started, event, options) {
|
|
307
291
|
const recordedMessage = started?.messageId ?? event.messageId;
|
|
308
|
-
if (started !== void 0
|
|
309
|
-
|
|
310
|
-
actualStepId: identity.id
|
|
311
|
-
});
|
|
312
|
-
if (recordedMessage !== options.messageId) WorkflowReplayDivergenceError.diverged(`recorded message-wait step ${identity.id} waited for ${recordedMessage}, but replay waited for ${options.messageId}`, {
|
|
313
|
-
expectedStepId: identity.id,
|
|
314
|
-
actualStepId: identity.id
|
|
315
|
-
});
|
|
292
|
+
if (started !== void 0) recordedInstant("message-wait", identity, "start", started.timestamp);
|
|
293
|
+
if (recordedMessage !== options.messageId) WorkflowReplayDivergenceError.atStep(identity.id, `recorded message-wait step ${identity.id} waited for ${recordedMessage}, but replay waited for ${options.messageId}`);
|
|
316
294
|
if (started !== void 0 && started.source !== options.source) {
|
|
317
295
|
const recordedSource = started.source ?? "message";
|
|
318
296
|
const replaySource = options.source ?? "message";
|
|
319
|
-
WorkflowReplayDivergenceError.
|
|
320
|
-
expectedStepId: identity.id,
|
|
321
|
-
actualStepId: identity.id
|
|
322
|
-
});
|
|
297
|
+
WorkflowReplayDivergenceError.atStep(identity.id, `recorded message-wait step ${identity.id} was created by ${recordedSource}, but replay used ${replaySource}`);
|
|
323
298
|
}
|
|
324
299
|
if (started !== void 0 && started.timeoutAt === void 0 !== (options.timeout === void 0)) {
|
|
325
300
|
const recordedTimeout = started.timeoutAt === void 0 ? "no timeout" : started.timeoutAt;
|
|
326
301
|
const replayTimeout = options.timeout === void 0 ? "no timeout" : "a timeout";
|
|
327
|
-
WorkflowReplayDivergenceError.
|
|
328
|
-
expectedStepId: identity.id,
|
|
329
|
-
actualStepId: identity.id
|
|
330
|
-
});
|
|
302
|
+
WorkflowReplayDivergenceError.atStep(identity.id, `recorded message-wait step ${identity.id} had ${String(recordedTimeout)}, but replay used ${replayTimeout}`);
|
|
331
303
|
}
|
|
332
|
-
if (event.kind === "message_wait_completed"
|
|
333
|
-
expectedStepId: identity.id,
|
|
334
|
-
actualStepId: identity.id
|
|
335
|
-
});
|
|
304
|
+
if (event.kind === "message_wait_completed") recordedInstant("message-wait", identity, "messageId", event.messageTimestamp);
|
|
336
305
|
}
|
|
337
306
|
function messageWaitAvailableAt(now, timeoutAt, deadlineAt) {
|
|
338
307
|
return [timeoutAt, deadlineAt].filter((value) => value !== void 0).sort((left, right) => Temporal.Instant.compare(left, right))[0] ?? now().add(Temporal.Duration.from({ milliseconds: 2 ** 31 - 1 }));
|
|
@@ -341,7 +310,7 @@ async function wakeRunForMessageEvent(store, runId, messageEvent) {
|
|
|
341
310
|
const run = await store.getRun(runId);
|
|
342
311
|
if (run === void 0 || run.status !== "waiting") return;
|
|
343
312
|
const events = await store.getEvents(runId);
|
|
344
|
-
const activeWaits = new
|
|
313
|
+
const activeWaits = new History(events).activeMessageWaitStepIds(messageEvent.messageId);
|
|
345
314
|
if (!(messageEvent.waiterStepIds === void 0 ? activeWaits.length > 0 : activeWaits.some((stepId) => messageEvent.waiterStepIds?.includes(stepId)))) return;
|
|
346
315
|
await store.updateRunIfCurrent(run, {
|
|
347
316
|
...run,
|
|
@@ -349,12 +318,10 @@ async function wakeRunForMessageEvent(store, runId, messageEvent) {
|
|
|
349
318
|
updatedAt: messageEvent.timestamp,
|
|
350
319
|
lastTransitionAt: messageEvent.timestamp,
|
|
351
320
|
lastTransitionReason: "waiting",
|
|
352
|
-
deadlineAt: run.deadlineAt,
|
|
353
|
-
retryAt: run.retryAt,
|
|
354
321
|
error: void 0,
|
|
355
322
|
output: void 0,
|
|
356
323
|
finishedAt: void 0
|
|
357
324
|
});
|
|
358
325
|
}
|
|
359
326
|
//#endregion
|
|
360
|
-
export {
|
|
327
|
+
export { broadcastMessageInput, createStepMessageApi, sendMessageInput, sendWorkflowMessage, waitForMessage };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { MessageId } from "../types/
|
|
2
|
-
import { RunId } from "../types/run-id.mjs";
|
|
1
|
+
import { MessageId, RunId } from "../types/ids.mjs";
|
|
3
2
|
import { CleanupRunsResult } from "../types/cleanup.mjs";
|
|
3
|
+
import { HookKind } from "../types/hook.mjs";
|
|
4
4
|
import { ChildWorkflowStartedObservationEvent, ObservationEmitter as ObservationEmitter$1, ObservationEventHandler, ObservationEventPattern, ScheduleRunCreatedObservationEvent, ScheduleTickObservationEvent, WorkerOperationObservationEvent } from "../types/observation.mjs";
|
|
5
5
|
import { Telemetry, TelemetryContext } from "../types/telemetry.mjs";
|
|
6
|
-
import {
|
|
6
|
+
import { RunRecord } from "../types/run.mjs";
|
|
7
7
|
import { EventRecord, MessageSentEvent } from "../types/events.mjs";
|
|
8
8
|
import { StorageValue } from "@temelj/storage";
|
|
9
9
|
//#region src/engine/observation.d.ts
|
|
10
|
-
declare function createObservationEmitter(telemetry?: Telemetry): ObservationEmitter$1;
|
|
11
|
-
declare class ObservationEmitter implements ObservationEmitter$1 {
|
|
10
|
+
export declare function createObservationEmitter(telemetry?: Telemetry): ObservationEmitter$1;
|
|
11
|
+
export declare class ObservationEmitter implements ObservationEmitter$1 {
|
|
12
12
|
#private;
|
|
13
13
|
constructor(telemetry?: Telemetry);
|
|
14
14
|
on<Pattern extends ObservationEventPattern>(pattern: Pattern, handler: ObservationEventHandler<Pattern>): () => void;
|
|
@@ -18,12 +18,11 @@ declare class ObservationEmitter implements ObservationEmitter$1 {
|
|
|
18
18
|
listenerCount(pattern?: ObservationEventPattern): number;
|
|
19
19
|
listeners(): readonly ObservationEventHandler[];
|
|
20
20
|
listeners<Pattern extends ObservationEventPattern>(pattern: Pattern): readonly ObservationEventHandler<Pattern>[];
|
|
21
|
-
emitRunEvent(run:
|
|
22
|
-
emitRunMetadataUpdated(run:
|
|
21
|
+
emitRunEvent(run: RunRecord, previousRun?: RunRecord): void;
|
|
22
|
+
emitRunMetadataUpdated(run: RunRecord, previousRun?: RunRecord): void;
|
|
23
23
|
emitDurableEventAppended(runId: RunId, event: EventRecord, appendedEvents: readonly EventRecord[]): void;
|
|
24
24
|
emitMessageSent(runId: RunId, event: MessageSentEvent): void;
|
|
25
|
-
emitHookResumed(runId: RunId, messageId: MessageId, payload: StorageValue | undefined, traceContext: TelemetryContext | undefined): void;
|
|
26
|
-
emitWebhookResumed(runId: RunId, messageId: MessageId, payload: StorageValue | undefined, traceContext: TelemetryContext | undefined): void;
|
|
25
|
+
emitHookResumed(kind: HookKind, runId: RunId, messageId: MessageId, payload: StorageValue | undefined, traceContext: TelemetryContext | undefined): void;
|
|
27
26
|
emitChildWorkflowStarted(event: ChildWorkflowStartedObservationEvent): void;
|
|
28
27
|
emitCleanupCompleted(result: CleanupRunsResult): void;
|
|
29
28
|
emitRetentionApplied(result: CleanupRunsResult): void;
|
|
@@ -31,5 +30,4 @@ declare class ObservationEmitter implements ObservationEmitter$1 {
|
|
|
31
30
|
emitScheduleTicked(event: ScheduleTickObservationEvent): void;
|
|
32
31
|
emitScheduleRunCreated(event: ScheduleRunCreatedObservationEvent): void;
|
|
33
32
|
}
|
|
34
|
-
//#endregion
|
|
35
|
-
export { ObservationEmitter, createObservationEmitter };
|
|
33
|
+
//#endregion
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { observeTelemetry } from "../telemetry.mjs";
|
|
1
|
+
import { stepAttemptKey } from "../store-keys.mjs";
|
|
3
2
|
import { getWorkflowEventStepAttemptKey } from "../events/descriptors.mjs";
|
|
4
|
-
import "../history/
|
|
5
|
-
import {
|
|
3
|
+
import { createStepAttempts } from "../history/step-attempts.mjs";
|
|
4
|
+
import { observeTelemetry } from "../telemetry.mjs";
|
|
6
5
|
import { createPubSub } from "@temelj/event";
|
|
7
6
|
//#region src/engine/observation.ts
|
|
8
7
|
function createObservationEmitter(telemetry) {
|
|
@@ -11,9 +10,9 @@ function createObservationEmitter(telemetry) {
|
|
|
11
10
|
var ObservationEmitter = class {
|
|
12
11
|
#events = createPubSub();
|
|
13
12
|
#telemetry;
|
|
14
|
-
#emit = (event
|
|
15
|
-
this.#events.emit(event,
|
|
16
|
-
observeTelemetry(this.#telemetry, event
|
|
13
|
+
#emit = (...event) => {
|
|
14
|
+
this.#events.emit(event[0], event[1]);
|
|
15
|
+
observeTelemetry(this.#telemetry, ...event);
|
|
17
16
|
};
|
|
18
17
|
constructor(telemetry) {
|
|
19
18
|
this.#telemetry = telemetry;
|
|
@@ -28,7 +27,6 @@ var ObservationEmitter = class {
|
|
|
28
27
|
this.emitDurableEventAppended = this.emitDurableEventAppended.bind(this);
|
|
29
28
|
this.emitMessageSent = this.emitMessageSent.bind(this);
|
|
30
29
|
this.emitHookResumed = this.emitHookResumed.bind(this);
|
|
31
|
-
this.emitWebhookResumed = this.emitWebhookResumed.bind(this);
|
|
32
30
|
this.emitChildWorkflowStarted = this.emitChildWorkflowStarted.bind(this);
|
|
33
31
|
this.emitCleanupCompleted = this.emitCleanupCompleted.bind(this);
|
|
34
32
|
this.emitRetentionApplied = this.emitRetentionApplied.bind(this);
|
|
@@ -70,28 +68,21 @@ var ObservationEmitter = class {
|
|
|
70
68
|
emitStreamUpdated(this.#emit, runId, event);
|
|
71
69
|
}
|
|
72
70
|
emitMessageSent(runId, event) {
|
|
73
|
-
|
|
71
|
+
const observation = {
|
|
74
72
|
runId,
|
|
75
73
|
messageId: event.messageId,
|
|
76
74
|
payload: event.payload,
|
|
77
75
|
timestamp: event.timestamp,
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
emitHookResumed(runId, messageId, payload, traceContext) {
|
|
82
|
-
this.#emit("workflow:hook-resumed", {
|
|
83
|
-
runId,
|
|
84
|
-
messageId,
|
|
85
|
-
...payload === void 0 ? {} : { payload },
|
|
86
|
-
...traceContext === void 0 ? {} : { traceContext }
|
|
87
|
-
});
|
|
76
|
+
traceContext: event.telemetryContext
|
|
77
|
+
};
|
|
78
|
+
this.#emit("workflow:message-sent", observation);
|
|
88
79
|
}
|
|
89
|
-
|
|
90
|
-
this.#emit(
|
|
80
|
+
emitHookResumed(kind, runId, messageId, payload, traceContext) {
|
|
81
|
+
this.#emit(`workflow:${kind}-resumed`, {
|
|
91
82
|
runId,
|
|
92
83
|
messageId,
|
|
93
|
-
|
|
94
|
-
|
|
84
|
+
payload,
|
|
85
|
+
traceContext
|
|
95
86
|
});
|
|
96
87
|
}
|
|
97
88
|
emitChildWorkflowStarted(event) {
|
|
@@ -121,7 +112,7 @@ function emitStepAttemptUpdated(emit, runId, event, events) {
|
|
|
121
112
|
return;
|
|
122
113
|
}
|
|
123
114
|
if (key === void 0) return;
|
|
124
|
-
const attempt =
|
|
115
|
+
const attempt = createStepAttempts(runId, events).find((current) => stepAttemptKey(current.stepId, current.attempt) === key);
|
|
125
116
|
if (attempt === void 0) return;
|
|
126
117
|
emit("workflow:step-attempt-updated", {
|
|
127
118
|
runId,
|
|
@@ -138,8 +129,8 @@ function emitStreamUpdated(emit, runId, event) {
|
|
|
138
129
|
timestamp: event.timestamp,
|
|
139
130
|
stepId: event.stepId,
|
|
140
131
|
stepName: event.stepName,
|
|
141
|
-
|
|
142
|
-
|
|
132
|
+
index: event.kind === "stream_chunk" ? event.index : void 0,
|
|
133
|
+
error: event.kind === "stream_failed" ? event.error : void 0
|
|
143
134
|
});
|
|
144
135
|
}
|
|
145
136
|
function emitRunEvent(emit, run, previousRun) {
|
|
@@ -192,7 +183,7 @@ function makeRunObservationEvent(run, previousRun) {
|
|
|
192
183
|
reason: run.lastTransitionReason,
|
|
193
184
|
timestamp: run.lastTransitionAt,
|
|
194
185
|
workflowName: run.workflowName,
|
|
195
|
-
|
|
186
|
+
workflowVersion: run.workflowVersion
|
|
196
187
|
};
|
|
197
188
|
}
|
|
198
189
|
//#endregion
|
package/dist/engine/replay.d.mts
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
import { MessageId } from "../types/
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { WorkflowAttributePatch, WorkflowStepIdentity } from "../types/run.mjs";
|
|
1
|
+
import { MessageId, RunId } from "../types/ids.mjs";
|
|
2
|
+
import { StepRunConfig } from "../types/step.mjs";
|
|
3
|
+
import { AttributePatch, StepIdentity } from "../types/run.mjs";
|
|
5
4
|
import { EventRecord } from "../types/events.mjs";
|
|
6
|
-
import "../history/
|
|
7
|
-
import {
|
|
5
|
+
import "../history/replay.mjs";
|
|
6
|
+
import { ExecutionEnvironment } from "../types/engine.mjs";
|
|
8
7
|
import { StorageValue } from "@temelj/storage";
|
|
9
8
|
//#region src/engine/replay.d.ts
|
|
10
|
-
declare function isRunStepTerminalForStartedAttempt(terminal: Extract<EventRecord, {
|
|
9
|
+
export declare function isRunStepTerminalForStartedAttempt(terminal: Extract<EventRecord, {
|
|
11
10
|
readonly kind: "step_completed" | "step_failed";
|
|
12
11
|
}>, started: Extract<EventRecord, {
|
|
13
12
|
readonly kind: "step_started";
|
|
14
13
|
}>): boolean;
|
|
15
|
-
declare function requireRecordedDurableStepStarted(identity:
|
|
16
|
-
declare function requireRecordedDurableTerminalStarted(identity:
|
|
17
|
-
declare function requireRunStepReplayTimeoutMatches(identity:
|
|
14
|
+
export declare function requireRecordedDurableStepStarted(identity: StepIdentity, started: boolean): void;
|
|
15
|
+
export declare function requireRecordedDurableTerminalStarted(identity: StepIdentity, hasStartedEventBeforeTerminal: boolean): void;
|
|
16
|
+
export declare function requireRunStepReplayTimeoutMatches(identity: StepIdentity, started: Extract<EventRecord, {
|
|
18
17
|
readonly kind: "step_started";
|
|
19
|
-
}> | undefined, config:
|
|
20
|
-
declare function requireMetadataReplayMatches(identity:
|
|
18
|
+
}> | undefined, config: StepRunConfig): void;
|
|
19
|
+
export declare function requireMetadataReplayMatches(identity: StepIdentity, recorded: Extract<EventRecord, {
|
|
21
20
|
readonly kind: "metadata_set";
|
|
22
21
|
}>, metadata: StorageValue): void;
|
|
23
|
-
declare function requireAttributesReplayMatches(identity:
|
|
22
|
+
export declare function requireAttributesReplayMatches(identity: StepIdentity, recorded: Extract<EventRecord, {
|
|
24
23
|
readonly kind: "attributes_set";
|
|
25
|
-
}>, attributes:
|
|
26
|
-
declare function requireMessageSendReplayMatches(identity:
|
|
24
|
+
}>, attributes: AttributePatch): void;
|
|
25
|
+
export declare function requireMessageSendReplayMatches(identity: StepIdentity, started: Extract<EventRecord, {
|
|
27
26
|
readonly kind: "message_send_started";
|
|
28
27
|
}> | undefined, terminal: Extract<EventRecord, {
|
|
29
28
|
readonly kind: "message_send_started" | "message_send_completed" | "message_send_failed";
|
|
@@ -33,9 +32,9 @@ declare function requireMessageSendReplayMatches(identity: WorkflowStepIdentity,
|
|
|
33
32
|
readonly payload?: StorageValue;
|
|
34
33
|
readonly idempotencyKey?: string;
|
|
35
34
|
}): void;
|
|
36
|
-
declare function sleepUntil(environment:
|
|
35
|
+
export declare function sleepUntil(environment: ExecutionEnvironment, name: string, initialUntil: Temporal.Instant, options: {
|
|
37
36
|
readonly duration?: Temporal.Duration;
|
|
38
37
|
}): Promise<void>;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
/** A timestamp read from history; anything else in its place is a replay divergence. */
|
|
39
|
+
export declare function recordedInstant(kind: string, identity: StepIdentity, label: string, value: Temporal.Instant): Temporal.Instant;
|
|
40
|
+
//#endregion
|