@temelj/workflow 0.0.0-alpha.3 → 0.0.0-alpha.5
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 +119 -280
- 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/create.mjs
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
|
+
import { WorkflowErrorCode } from "../errors/codes.mjs";
|
|
1
2
|
import { WorkflowOptionsError } from "../errors/base.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import { defineFromTarget } from "../definition.mjs";
|
|
4
|
+
import { createDefaultRecordedIdFactory, createDefaultRunIdFactory } from "../ids.mjs";
|
|
5
|
+
import { getWorkflowRunSummary } from "./inspection.mjs";
|
|
6
|
+
import { readRunResult } from "./run-utils.mjs";
|
|
7
|
+
import { rerunRun } from "./run-service.mjs";
|
|
8
|
+
import { acquireLock, releaseLock } from "./lock.mjs";
|
|
9
|
+
import { resolveScheduleRecord, tickSchedules } from "./schedule.mjs";
|
|
10
|
+
import { getRunRef, resolveScheduleNextOptions, startRun } from "./start.mjs";
|
|
7
11
|
import { createWorkflowStore } from "../store/create.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { disposeHook, disposeWebhook, getHookByToken, resumeHook, resumeWebhook } from "./hooks.mjs";
|
|
11
|
-
import { acquireLock, releaseLock, releaseStaleLock } from "./lock.mjs";
|
|
12
|
-
import { followStreamForRun, getStreamInfoForRun, readStreamForRun, readStreamPageForRun, waitForStreamChunkForRun, waitForStreamForRun, waitForStreamTerminalForRun } from "./stream.mjs";
|
|
13
|
-
import { createWorkflowEngineExecutionApi } from "./execution-api.mjs";
|
|
14
|
-
import { createWorkflowEngineInspectionApi } from "./inspection-api.mjs";
|
|
15
|
-
import { createWorkflowLifecycleEmitter } from "./lifecycle.mjs";
|
|
12
|
+
import { instrumentStorage } from "../store/instrumentation.mjs";
|
|
13
|
+
import { createLifecycleEmitter } from "./lifecycle.mjs";
|
|
16
14
|
import { createObservationEmitter } from "./observation.mjs";
|
|
17
|
-
import {
|
|
15
|
+
import { resumeRun } from "./resume.mjs";
|
|
18
16
|
import { createStorage } from "@temelj/storage";
|
|
19
17
|
import { createNoopLogger } from "@temelj/log";
|
|
20
18
|
//#region src/engine/create.ts
|
|
@@ -33,11 +31,10 @@ function defaultDeterministicBytes(context) {
|
|
|
33
31
|
}
|
|
34
32
|
return bytes;
|
|
35
33
|
}
|
|
36
|
-
/** Creates workflow engine. */
|
|
37
34
|
function createWorkflowEngine(options = {}) {
|
|
38
35
|
return new WorkflowEngine(options);
|
|
39
36
|
}
|
|
40
|
-
/**
|
|
37
|
+
/** Executes workflows against a store; the client and workers build on it. */
|
|
41
38
|
var WorkflowEngine = class {
|
|
42
39
|
storage;
|
|
43
40
|
store;
|
|
@@ -45,25 +42,21 @@ var WorkflowEngine = class {
|
|
|
45
42
|
#limits;
|
|
46
43
|
#logger;
|
|
47
44
|
#telemetry;
|
|
48
|
-
|
|
49
|
-
#
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
#messageService;
|
|
54
|
-
#streamService;
|
|
55
|
-
#runService;
|
|
56
|
-
#runLifecycle;
|
|
45
|
+
observation;
|
|
46
|
+
#resumeServices;
|
|
47
|
+
/** Shared by the engine's services and the client facades. */
|
|
48
|
+
context;
|
|
49
|
+
lifecycle;
|
|
57
50
|
constructor(options = {}) {
|
|
58
|
-
if (options.store !== void 0 && options.storage !== void 0) WorkflowOptionsError.
|
|
51
|
+
if (options.store !== void 0 && options.storage !== void 0) throw new WorkflowOptionsError("Workflow engine options cannot include both store and storage", { code: WorkflowErrorCode.OPTIONS_ENGINE_STORE_STORAGE_CONFLICT });
|
|
59
52
|
const telemetry = options.telemetry === false ? void 0 : options.telemetry;
|
|
60
|
-
const storage = options.store === void 0 ?
|
|
53
|
+
const storage = options.store === void 0 ? instrumentStorage(options.storage ?? createStorage(), telemetry) : void 0;
|
|
61
54
|
this.store = options.store ?? createWorkflowStore({ storage });
|
|
62
55
|
this.storage = this.store.storage;
|
|
63
56
|
const now = options.now ?? Temporal.Now.instant;
|
|
64
57
|
this.#now = now;
|
|
65
58
|
const createRunId = options.createRunId ?? createDefaultRunIdFactory(now);
|
|
66
|
-
const createRecordedId = options.createRecordedId ??
|
|
59
|
+
const createRecordedId = options.createRecordedId ?? createDefaultRecordedIdFactory(createRunId);
|
|
67
60
|
const createDeterministicRandom = options.createDeterministicRandom ?? defaultDeterministicRandom;
|
|
68
61
|
const createDeterministicUuid = options.createDeterministicUuid ?? defaultDeterministicUuid;
|
|
69
62
|
const createDeterministicBytes = options.createDeterministicBytes ?? defaultDeterministicBytes;
|
|
@@ -74,40 +67,26 @@ var WorkflowEngine = class {
|
|
|
74
67
|
maximumStreamChunks: options.maximumStreamChunks
|
|
75
68
|
};
|
|
76
69
|
this.#limits = limits;
|
|
77
|
-
const readCurrentRunResult = async (runId) => await readRunResult(this.store, runId, now());
|
|
70
|
+
const readCurrentRunResult = async (definition, runId) => await readRunResult(this.store, definition, runId, now());
|
|
78
71
|
const logger = options.logger === false ? createNoopLogger() : options.logger ?? createNoopLogger();
|
|
79
72
|
this.#telemetry = telemetry;
|
|
80
73
|
this.#logger = logger;
|
|
81
74
|
const observation = createObservationEmitter(telemetry);
|
|
82
|
-
this
|
|
83
|
-
this
|
|
75
|
+
this.observation = observation;
|
|
76
|
+
this.context = {
|
|
84
77
|
store: this.store,
|
|
85
78
|
now,
|
|
86
79
|
limits,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
};
|
|
92
|
-
this.#messageService = {
|
|
93
|
-
store: this.store,
|
|
94
|
-
now,
|
|
95
|
-
limits,
|
|
96
|
-
observeMessageSent: observation.emitMessageSent,
|
|
97
|
-
telemetry
|
|
98
|
-
};
|
|
99
|
-
this.#streamService = { store: this.store };
|
|
100
|
-
this.#runService = {
|
|
101
|
-
store: this.store,
|
|
102
|
-
now,
|
|
103
|
-
limits
|
|
80
|
+
observation,
|
|
81
|
+
telemetry,
|
|
82
|
+
logger,
|
|
83
|
+
createRunId
|
|
104
84
|
};
|
|
105
|
-
const { emitLifecycleEvent, emitResultLifecycleEvent } =
|
|
106
|
-
this
|
|
85
|
+
const { emitLifecycleEvent, emitResultLifecycleEvent } = createLifecycleEmitter(options, observation);
|
|
86
|
+
this.lifecycle = {
|
|
107
87
|
emitLifecycleEvent,
|
|
108
88
|
emitRunMetadataUpdated: observation.emitRunMetadataUpdated
|
|
109
89
|
};
|
|
110
|
-
this.#inspectionApi = createWorkflowEngineInspectionApi(this.store, now);
|
|
111
90
|
const executionService = {
|
|
112
91
|
store: this.store,
|
|
113
92
|
now,
|
|
@@ -130,51 +109,15 @@ var WorkflowEngine = class {
|
|
|
130
109
|
event
|
|
131
110
|
})
|
|
132
111
|
};
|
|
133
|
-
this.#
|
|
134
|
-
|
|
135
|
-
now,
|
|
112
|
+
this.#resumeServices = {
|
|
113
|
+
context: this.context,
|
|
136
114
|
executionService,
|
|
137
|
-
emitResultLifecycleEvent
|
|
138
|
-
|
|
139
|
-
resumer: this
|
|
140
|
-
});
|
|
141
|
-
this.#startApi = createWorkflowEngineStartApi({
|
|
142
|
-
store: this.store,
|
|
143
|
-
now,
|
|
144
|
-
limits,
|
|
145
|
-
createRunId,
|
|
146
|
-
telemetry,
|
|
147
|
-
emitRunEvent: observation.emitRunEvent,
|
|
148
|
-
starter: this,
|
|
149
|
-
handleOperations: {
|
|
150
|
-
getTimeline: async (runId) => await this.getTimeline(runId),
|
|
151
|
-
setMetadata: async (runId, metadata) => await this.updateRunMetadata(runId, metadata),
|
|
152
|
-
setAttributes: async (runId, attributes) => await this.setRunAttributes(runId, attributes),
|
|
153
|
-
cancel: async (runId) => await this.cancelRun(runId)
|
|
154
|
-
}
|
|
155
|
-
});
|
|
115
|
+
emitResultLifecycleEvent
|
|
116
|
+
};
|
|
156
117
|
try {
|
|
157
118
|
telemetry?.bindEngine?.(this);
|
|
158
119
|
} catch {}
|
|
159
120
|
}
|
|
160
|
-
on(pattern, handler) {
|
|
161
|
-
return this.#observation.on(pattern, handler);
|
|
162
|
-
}
|
|
163
|
-
once(pattern, handler) {
|
|
164
|
-
return this.#observation.once(pattern, handler);
|
|
165
|
-
}
|
|
166
|
-
off(pattern, handler) {
|
|
167
|
-
return this.#observation.off(pattern, handler);
|
|
168
|
-
}
|
|
169
|
-
listeners(pattern) {
|
|
170
|
-
return pattern === void 0 ? this.#observation.listeners() : this.#observation.listeners(pattern);
|
|
171
|
-
}
|
|
172
|
-
clearListeners(pattern) {
|
|
173
|
-
return this.#observation.clearListeners(pattern);
|
|
174
|
-
}
|
|
175
|
-
listenerCount(pattern) {
|
|
176
|
-
return this.#observation.listenerCount(pattern);
|
|
177
|
-
}
|
|
178
121
|
async close() {
|
|
179
122
|
const errors = [];
|
|
180
123
|
try {
|
|
@@ -189,50 +132,25 @@ var WorkflowEngine = class {
|
|
|
189
132
|
}
|
|
190
133
|
if (errors.length > 0) throw errors[0];
|
|
191
134
|
}
|
|
192
|
-
observeWorkerOperation(event) {
|
|
193
|
-
this.#observation.emitWorkerOperation(event);
|
|
194
|
-
}
|
|
195
|
-
observeScheduleRunCreated(event) {
|
|
196
|
-
this.#observation.emitScheduleRunCreated(event);
|
|
197
|
-
}
|
|
198
135
|
async startWorkflow(workflow, input, options) {
|
|
199
|
-
return this
|
|
136
|
+
return await startRun(this, workflow, input, options);
|
|
200
137
|
}
|
|
201
138
|
async startWorkflows(workflow, items) {
|
|
202
|
-
|
|
139
|
+
const handles = [];
|
|
140
|
+
for (const item of items) handles.push(await this.startWorkflow(workflow, item.input, item.options));
|
|
141
|
+
return handles;
|
|
142
|
+
}
|
|
143
|
+
async getRunRef(runId) {
|
|
144
|
+
return await getRunRef(this, runId);
|
|
203
145
|
}
|
|
204
146
|
async scheduleNextWorkflow(workflow, input, options) {
|
|
205
|
-
return this
|
|
147
|
+
return await this.startWorkflow(workflow, input, resolveScheduleNextOptions(options, this.context.now).start);
|
|
206
148
|
}
|
|
207
149
|
async createSchedule(workflow, scheduleOptions) {
|
|
208
|
-
const definition =
|
|
209
|
-
const schedule = resolveScheduleRecord(this.store.namespace, definition, scheduleOptions, this.#now(), this.#limits);
|
|
150
|
+
const definition = defineFromTarget(workflow);
|
|
151
|
+
const schedule = await resolveScheduleRecord(this.store.namespace, definition, scheduleOptions, this.#now(), this.#limits);
|
|
210
152
|
return this.store.createSchedule(schedule);
|
|
211
153
|
}
|
|
212
|
-
async upsertSchedule(workflow, scheduleOptions) {
|
|
213
|
-
return upsertSchedule(this.store, defineWorkflowFromTarget(workflow), scheduleOptions, this.#now(), this.#limits);
|
|
214
|
-
}
|
|
215
|
-
async getSchedule(scheduleId) {
|
|
216
|
-
return this.store.getSchedule(scheduleId);
|
|
217
|
-
}
|
|
218
|
-
async listSchedules(options) {
|
|
219
|
-
return this.store.listSchedules(options);
|
|
220
|
-
}
|
|
221
|
-
async listSchedulesPage(options) {
|
|
222
|
-
return this.store.listSchedulesPage(options);
|
|
223
|
-
}
|
|
224
|
-
async pauseSchedule(scheduleId) {
|
|
225
|
-
return updateScheduleStatus(this.store, scheduleId, "paused", this.#now());
|
|
226
|
-
}
|
|
227
|
-
async resumeSchedule(scheduleId) {
|
|
228
|
-
return updateScheduleStatus(this.store, scheduleId, "active", this.#now());
|
|
229
|
-
}
|
|
230
|
-
async archiveSchedule(scheduleId) {
|
|
231
|
-
return updateScheduleStatus(this.store, scheduleId, "archived", this.#now());
|
|
232
|
-
}
|
|
233
|
-
async deleteSchedule(scheduleId) {
|
|
234
|
-
return updateScheduleStatus(this.store, scheduleId, "deleted", this.#now());
|
|
235
|
-
}
|
|
236
154
|
async tickSchedules(options) {
|
|
237
155
|
const timestamp = options?.now ?? this.#now();
|
|
238
156
|
const tickOptions = options === void 0 ? { now: timestamp } : {
|
|
@@ -240,7 +158,7 @@ var WorkflowEngine = class {
|
|
|
240
158
|
now: timestamp
|
|
241
159
|
};
|
|
242
160
|
const result = await tickSchedules(this.store, this, this.#now, tickOptions);
|
|
243
|
-
this
|
|
161
|
+
this.observation.emitScheduleTicked({
|
|
244
162
|
result,
|
|
245
163
|
timestamp
|
|
246
164
|
});
|
|
@@ -250,152 +168,29 @@ var WorkflowEngine = class {
|
|
|
250
168
|
const acquiredAt = options.now === void 0 ? this.#now() : options.now;
|
|
251
169
|
return acquireLock(this.store, key, options, acquiredAt);
|
|
252
170
|
}
|
|
253
|
-
async getLock(key) {
|
|
254
|
-
return this.store.getLock(key);
|
|
255
|
-
}
|
|
256
|
-
async listLocks() {
|
|
257
|
-
return this.store.listLocks();
|
|
258
|
-
}
|
|
259
171
|
async releaseLock(key, options) {
|
|
260
172
|
const releasedAt = options.now === void 0 ? this.#now() : options.now;
|
|
261
173
|
return releaseLock(this.store, key, options, releasedAt);
|
|
262
174
|
}
|
|
263
|
-
async releaseStaleLock(key, options) {
|
|
264
|
-
const releasedAt = options?.now === void 0 ? this.#now() : options.now;
|
|
265
|
-
return releaseStaleLock(this.store, key, releasedAt);
|
|
266
|
-
}
|
|
267
175
|
async runWorkflow(implementation, input, options) {
|
|
268
|
-
return this
|
|
176
|
+
return await this.startWorkflow(implementation.definition, input, options?.start);
|
|
269
177
|
}
|
|
270
178
|
async runWorkflowNow(implementation, input, options) {
|
|
271
|
-
|
|
179
|
+
const handle = await this.startWorkflow(implementation.definition, input, options?.start);
|
|
180
|
+
return await this.resumeWorkflow(implementation, handle.runId, { signal: options?.signal });
|
|
272
181
|
}
|
|
273
182
|
async resumeWorkflow(implementation, runId, options) {
|
|
274
|
-
return this.#
|
|
275
|
-
}
|
|
276
|
-
async getRun(runId) {
|
|
277
|
-
return this.#inspectionApi.getRun(runId);
|
|
278
|
-
}
|
|
279
|
-
async getEvents(runId) {
|
|
280
|
-
return this.#inspectionApi.getEvents(runId);
|
|
281
|
-
}
|
|
282
|
-
async listEventsPage(runId, options) {
|
|
283
|
-
return this.#inspectionApi.listEventsPage(runId, options);
|
|
284
|
-
}
|
|
285
|
-
async listRuns(options) {
|
|
286
|
-
return this.#inspectionApi.listRuns(options);
|
|
287
|
-
}
|
|
288
|
-
async listRunsPage(options) {
|
|
289
|
-
return this.#inspectionApi.listRunsPage(options);
|
|
290
|
-
}
|
|
291
|
-
async countRuns(options) {
|
|
292
|
-
return this.#inspectionApi.countRuns(options);
|
|
183
|
+
return await resumeRun(this.#resumeServices, implementation, runId, options);
|
|
293
184
|
}
|
|
294
185
|
async getRunSummary(options) {
|
|
295
|
-
return
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
async getTimeline(runId) {
|
|
301
|
-
return this.#inspectionApi.getTimeline(runId);
|
|
302
|
-
}
|
|
303
|
-
async listStepAttempts(runId, options) {
|
|
304
|
-
return this.#inspectionApi.listStepAttempts(runId, options);
|
|
305
|
-
}
|
|
306
|
-
async listStepAttemptsPage(runId, options) {
|
|
307
|
-
return this.#inspectionApi.listStepAttemptsPage(runId, options);
|
|
308
|
-
}
|
|
309
|
-
async countStepAttempts(runId, options) {
|
|
310
|
-
return this.#inspectionApi.countStepAttempts(runId, options);
|
|
311
|
-
}
|
|
312
|
-
async repairStepAttempts(runId) {
|
|
313
|
-
return this.#inspectionApi.repairStepAttempts(runId);
|
|
314
|
-
}
|
|
315
|
-
async repairMessageIdempotencyIndexes(runId) {
|
|
316
|
-
return this.#inspectionApi.repairMessageIdempotencyIndexes(runId);
|
|
317
|
-
}
|
|
318
|
-
async getStepAttemptSummary(runId, options) {
|
|
319
|
-
return this.#inspectionApi.getStepAttemptSummary(runId, options);
|
|
320
|
-
}
|
|
321
|
-
async cleanupRuns(options) {
|
|
322
|
-
const result = await this.store.cleanupRuns(options);
|
|
323
|
-
this.#observation.emitCleanupCompleted(result);
|
|
324
|
-
return result;
|
|
325
|
-
}
|
|
326
|
-
async listCleanupMarkers() {
|
|
327
|
-
return this.store.listCleanupMarkers();
|
|
328
|
-
}
|
|
329
|
-
async applyRetentionPolicy(retentionOptions) {
|
|
330
|
-
const result = await this.store.cleanupRuns(retentionCleanupOptions(retentionOptions, this.#now));
|
|
331
|
-
this.#observation.emitRetentionApplied(result);
|
|
332
|
-
return result;
|
|
186
|
+
return await getWorkflowRunSummary({
|
|
187
|
+
store: this.store,
|
|
188
|
+
now: this.#now(),
|
|
189
|
+
filters: options
|
|
190
|
+
});
|
|
333
191
|
}
|
|
334
192
|
async rerunWorkflow(runId, options) {
|
|
335
|
-
return
|
|
336
|
-
}
|
|
337
|
-
async rescheduleRun(runId, options) {
|
|
338
|
-
return rescheduleWorkflowRun(this.#runService, this.#runLifecycle, runId, options);
|
|
339
|
-
}
|
|
340
|
-
async releaseStaleRunLease(runId, options) {
|
|
341
|
-
return releaseStaleWorkflowRunLease(this.#runService, this.#runLifecycle, runId, options);
|
|
342
|
-
}
|
|
343
|
-
async retryFailedRun(runId, options) {
|
|
344
|
-
return retryFailedWorkflowRun(this.#runService, this.#runLifecycle, runId, options);
|
|
345
|
-
}
|
|
346
|
-
async markRunPermanentlyFailed(runId, options) {
|
|
347
|
-
return markWorkflowRunPermanentlyFailed(this.#runService, this.#runLifecycle, runId, options);
|
|
348
|
-
}
|
|
349
|
-
async updateRunMetadata(runId, metadata) {
|
|
350
|
-
return updateWorkflowRunMetadata(this.#runService, this.#runLifecycle, runId, metadata);
|
|
351
|
-
}
|
|
352
|
-
async setRunAttributes(runId, attributes) {
|
|
353
|
-
return setWorkflowRunAttributes(this.#runService, runId, attributes);
|
|
354
|
-
}
|
|
355
|
-
async cancelRun(runId) {
|
|
356
|
-
return cancelWorkflowRun(this.#runService, this.#runLifecycle, runId);
|
|
357
|
-
}
|
|
358
|
-
async resumeHook(token, options) {
|
|
359
|
-
await resumeHook(token, options, this.#hookService);
|
|
360
|
-
}
|
|
361
|
-
async resumeWebhook(token, options) {
|
|
362
|
-
await resumeWebhook(token, options, this.#hookService);
|
|
363
|
-
}
|
|
364
|
-
async disposeHook(token) {
|
|
365
|
-
return disposeHook(token, this.#hookService);
|
|
366
|
-
}
|
|
367
|
-
async disposeWebhook(token) {
|
|
368
|
-
return disposeWebhook(token, this.#hookService);
|
|
369
|
-
}
|
|
370
|
-
async getHookByToken(token) {
|
|
371
|
-
return getHookByToken(token, this.store, this.#now());
|
|
372
|
-
}
|
|
373
|
-
async getStreamInfo(runId, streamIdOrName) {
|
|
374
|
-
return getStreamInfoForRun(this.#streamService, runId, streamIdOrName);
|
|
375
|
-
}
|
|
376
|
-
followStream(runId, streamIdOrName, followOptions) {
|
|
377
|
-
return followStreamForRun(this.#streamService, runId, streamIdOrName, followOptions);
|
|
378
|
-
}
|
|
379
|
-
async waitForStream(runId, streamIdOrName, waitOptions) {
|
|
380
|
-
return waitForStreamForRun(this.#streamService, runId, streamIdOrName, waitOptions);
|
|
381
|
-
}
|
|
382
|
-
async waitForStreamChunk(runId, streamIdOrName, afterIndex, waitOptions) {
|
|
383
|
-
return waitForStreamChunkForRun(this.#streamService, runId, streamIdOrName, afterIndex, waitOptions);
|
|
384
|
-
}
|
|
385
|
-
async waitForStreamTerminal(runId, streamIdOrName, waitOptions) {
|
|
386
|
-
return waitForStreamTerminalForRun(this.#streamService, runId, streamIdOrName, waitOptions);
|
|
387
|
-
}
|
|
388
|
-
async readStream(runId, streamIdOrName, readOptions) {
|
|
389
|
-
return readStreamForRun(this.#streamService, runId, streamIdOrName, readOptions);
|
|
390
|
-
}
|
|
391
|
-
async readStreamPage(runId, streamIdOrName, readOptions) {
|
|
392
|
-
return readStreamPageForRun(this.#streamService, runId, streamIdOrName, readOptions);
|
|
393
|
-
}
|
|
394
|
-
async sendMessage(runId, messageInput, channelOptions) {
|
|
395
|
-
await sendWorkflowMessageInput(this.#messageService, runId, messageInput, channelOptions);
|
|
396
|
-
}
|
|
397
|
-
async broadcastMessage(messageInput, channelOptions) {
|
|
398
|
-
return broadcastWorkflowMessageInput(this.#messageService, messageInput, channelOptions);
|
|
193
|
+
return rerunRun(this.context, (definition, input, startOptions) => this.startWorkflow(definition, input, startOptions), runId, options);
|
|
399
194
|
}
|
|
400
195
|
};
|
|
401
196
|
//#endregion
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { DeterministicApi, StepMetadata } from "../types/step.mjs";
|
|
2
|
+
import { DeterministicValueRecordedEvent } from "../types/events.mjs";
|
|
3
|
+
import { ExecutionEnvironment } from "../types/engine.mjs";
|
|
4
4
|
//#region src/engine/deterministic.d.ts
|
|
5
|
-
declare function
|
|
6
|
-
declare function
|
|
7
|
-
|
|
8
|
-
readonly timestamp: Temporal.Instant;
|
|
9
|
-
readonly value: unknown;
|
|
10
|
-
}) => void): Promise<TValue>;
|
|
11
|
-
//#endregion
|
|
12
|
-
export { createWorkflowDeterministicApi, recordWorkflowDeterministicValue };
|
|
5
|
+
export declare function createDeterministicApi(environment: ExecutionEnvironment): DeterministicApi;
|
|
6
|
+
export declare function recordDeterministicValue<TValue>(environment: ExecutionEnvironment, name: string, createValue: (identity: StepMetadata) => TValue, readRecorded: (recorded: DeterministicValueRecordedEvent) => NoInfer<TValue>): Promise<TValue>;
|
|
7
|
+
//#endregion
|
|
@@ -1,102 +1,81 @@
|
|
|
1
|
+
import { WorkflowErrorCode } from "../errors/codes.mjs";
|
|
1
2
|
import { WorkflowOptionsError } from "../errors/base.mjs";
|
|
2
3
|
import { WorkflowReplayDivergenceError } from "../errors/failures.mjs";
|
|
3
|
-
import { isNonNegativeSafeInteger } from "../utility.mjs";
|
|
4
4
|
import "../errors/mod.mjs";
|
|
5
|
+
import { isNonNegativeSafeInteger } from "../values.mjs";
|
|
5
6
|
import { toPersistedValue } from "./serialization.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
7
|
+
import { resolveCommandIdentity } from "./command-identity.mjs";
|
|
8
|
+
import { appendDurableEvent } from "./durable-command.mjs";
|
|
9
|
+
import { isNumber, isString } from "@temelj/value";
|
|
8
10
|
//#region src/engine/deterministic.ts
|
|
9
11
|
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
|
|
10
|
-
function
|
|
11
|
-
const {
|
|
12
|
+
function createDeterministicApi(environment) {
|
|
13
|
+
const { runId } = environment;
|
|
14
|
+
/** Records a generated value, checking it both when it is created and when it is replayed. */
|
|
15
|
+
const checked = async (commandId, expected, isValid, create) => await recordDeterministicValue(environment, commandId, (identity) => {
|
|
16
|
+
const value = create({
|
|
17
|
+
runId,
|
|
18
|
+
commandId: identity.id,
|
|
19
|
+
commandName: identity.name,
|
|
20
|
+
commandCount: identity.count
|
|
21
|
+
});
|
|
22
|
+
if (!isValid(value)) invalidDeterministicValue(identity.id, expected);
|
|
23
|
+
return value;
|
|
24
|
+
}, (recorded) => {
|
|
25
|
+
if (!isValid(recorded.value)) invalidDeterministicValue(recorded.stepId, expected);
|
|
26
|
+
return recorded.value;
|
|
27
|
+
});
|
|
12
28
|
const api = {
|
|
13
|
-
async
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
async
|
|
17
|
-
|
|
18
|
-
const value = environment.createDeterministicRandom(deterministicValueContext(runId, identity));
|
|
19
|
-
if (!isDeterministicRandomValue(value)) invalidDeterministicValue(identity.id, "a finite number in [0, 1)");
|
|
20
|
-
return value;
|
|
21
|
-
}, (recorded) => {
|
|
22
|
-
if (!isDeterministicRandomValue(recorded.value)) invalidDeterministicValue(recorded.stepId, "a finite number in [0, 1)");
|
|
23
|
-
});
|
|
24
|
-
},
|
|
25
|
-
async recordedId(commandId = "recorded-id") {
|
|
26
|
-
return await recordWorkflowDeterministicValue(environment, commandId, (identity) => environment.createRecordedId(deterministicValueContext(runId, identity)));
|
|
27
|
-
},
|
|
28
|
-
async id(commandId = "id") {
|
|
29
|
-
return await api.recordedId(commandId);
|
|
30
|
-
},
|
|
31
|
-
async uuid(commandId = "uuid") {
|
|
32
|
-
return await recordWorkflowDeterministicValue(environment, commandId, (identity) => {
|
|
33
|
-
const value = environment.createDeterministicUuid(deterministicValueContext(runId, identity));
|
|
34
|
-
if (!isDeterministicUuidValue(value)) invalidDeterministicValue(identity.id, "a UUID string");
|
|
35
|
-
return value;
|
|
36
|
-
}, (recorded) => {
|
|
37
|
-
if (!isDeterministicUuidValue(recorded.value)) invalidDeterministicValue(recorded.stepId, "a UUID string");
|
|
38
|
-
});
|
|
39
|
-
},
|
|
29
|
+
now: async (commandId = "now") => await checked(commandId, "a Temporal.Instant", isInstant, () => environment.now()),
|
|
30
|
+
random: async (commandId = "random") => await checked(commandId, "a finite number in [0, 1)", isDeterministicRandomValue, environment.createDeterministicRandom),
|
|
31
|
+
recordedId: async (commandId = "recorded-id") => await checked(commandId, "a recorded ID string", isString, environment.createRecordedId),
|
|
32
|
+
id: async (commandId = "id") => await api.recordedId(commandId),
|
|
33
|
+
uuid: async (commandId = "uuid") => await checked(commandId, "a UUID string", isDeterministicUuidValue, environment.createDeterministicUuid),
|
|
40
34
|
async bytes(commandId, length) {
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const bytes = await recordWorkflowDeterministicValue(environment, commandId, (identity) => {
|
|
45
|
-
const value = environment.createDeterministicBytes({
|
|
46
|
-
...deterministicValueContext(runId, identity),
|
|
47
|
-
length
|
|
48
|
-
});
|
|
49
|
-
if (!isDeterministicBytesValue(value, length)) invalidDeterministicValue(identity.id, `a Uint8Array with length ${length}`);
|
|
50
|
-
return new Uint8Array(value);
|
|
51
|
-
}, (recorded) => {
|
|
52
|
-
if (!isDeterministicBytesValue(recorded.value, length)) invalidDeterministicValue(recorded.stepId, `a Uint8Array with length ${length}`);
|
|
35
|
+
if (commandId.trim() === "") throw new WorkflowOptionsError("Workflow deterministic bytes commandId must not be blank", {
|
|
36
|
+
code: WorkflowErrorCode.OPTIONS_EXPECTED_NON_BLANK,
|
|
37
|
+
details: { label: "Workflow deterministic bytes commandId" }
|
|
53
38
|
});
|
|
39
|
+
if (!isNonNegativeSafeInteger(length)) WorkflowOptionsError.nonNegativeSafeInteger("Workflow deterministic bytes length");
|
|
40
|
+
const bytes = await checked(commandId, `a Uint8Array with length ${length}`, (value) => isDeterministicBytesValue(value, length), (context) => environment.createDeterministicBytes({
|
|
41
|
+
...context,
|
|
42
|
+
length
|
|
43
|
+
}));
|
|
54
44
|
return new Uint8Array(bytes);
|
|
55
45
|
}
|
|
56
46
|
};
|
|
57
47
|
return api;
|
|
58
48
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
49
|
+
function isInstant(value) {
|
|
50
|
+
return value instanceof Temporal.Instant;
|
|
51
|
+
}
|
|
52
|
+
async function recordDeterministicValue(environment, name, createValue, readRecorded) {
|
|
53
|
+
const { history, now, limits } = environment;
|
|
54
|
+
const identity = resolveCommandIdentity(history, "deterministic", name);
|
|
62
55
|
const recorded = history.deterministicValue(identity.id);
|
|
63
|
-
if (recorded !== void 0)
|
|
64
|
-
checkRecorded?.(recorded);
|
|
65
|
-
return recorded.value;
|
|
66
|
-
}
|
|
56
|
+
if (recorded !== void 0) return readRecorded(recorded);
|
|
67
57
|
const value = createValue(identity);
|
|
68
|
-
await
|
|
58
|
+
await appendDurableEvent(environment, {
|
|
69
59
|
kind: "deterministic_value_recorded",
|
|
70
60
|
timestamp: now(),
|
|
71
61
|
stepId: identity.id,
|
|
72
62
|
stepName: identity.name,
|
|
73
63
|
count: identity.count,
|
|
74
64
|
value: toPersistedValue(value, "deterministic value", limits)
|
|
75
|
-
}
|
|
65
|
+
});
|
|
76
66
|
return value;
|
|
77
67
|
}
|
|
78
|
-
function deterministicValueContext(runId, identity) {
|
|
79
|
-
return {
|
|
80
|
-
runId,
|
|
81
|
-
commandId: identity.id,
|
|
82
|
-
commandName: identity.name,
|
|
83
|
-
commandCount: identity.count
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
68
|
function isDeterministicRandomValue(value) {
|
|
87
|
-
return
|
|
69
|
+
return isNumber(value) && Number.isFinite(value) && value >= 0 && value < 1;
|
|
88
70
|
}
|
|
89
71
|
function isDeterministicUuidValue(value) {
|
|
90
|
-
return
|
|
72
|
+
return isString(value) && UUID_PATTERN.test(value);
|
|
91
73
|
}
|
|
92
74
|
function isDeterministicBytesValue(value, length) {
|
|
93
75
|
return value instanceof Uint8Array && value.byteLength === length;
|
|
94
76
|
}
|
|
95
77
|
function invalidDeterministicValue(stepId, expected) {
|
|
96
|
-
WorkflowReplayDivergenceError.
|
|
97
|
-
expectedStepId: stepId,
|
|
98
|
-
actualStepId: stepId
|
|
99
|
-
});
|
|
78
|
+
WorkflowReplayDivergenceError.atStep(stepId, `recorded deterministic value for ${stepId} must be ${expected}`);
|
|
100
79
|
}
|
|
101
80
|
//#endregion
|
|
102
|
-
export {
|
|
81
|
+
export { createDeterministicApi, recordDeterministicValue };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { EventRecord } from "../types/events.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { ExecutionEnvironment } from "../types/engine.mjs";
|
|
3
3
|
//#region src/engine/durable-command.d.ts
|
|
4
|
-
type
|
|
4
|
+
type DurableStepStartedEvent = Extract<EventRecord, {
|
|
5
5
|
readonly kind: "step_started" | "sleep_started" | "child_workflow_started" | "message_send_started" | "message_wait_started" | "stream_started";
|
|
6
6
|
}>;
|
|
7
|
-
declare function appendDurableStepStartedEvent(environment:
|
|
8
|
-
declare function
|
|
7
|
+
export declare function appendDurableStepStartedEvent(environment: ExecutionEnvironment, event: DurableStepStartedEvent): Promise<void>;
|
|
8
|
+
export declare function appendDurableEvent(environment: ExecutionEnvironment, event: EventRecord): Promise<void>;
|
|
9
9
|
//#endregion
|
|
10
|
-
export {
|
|
10
|
+
export {};
|
|
@@ -4,7 +4,7 @@ import { appendEventIfCurrentExecution } from "./state.mjs";
|
|
|
4
4
|
async function appendDurableStepStartedEvent(environment, event) {
|
|
5
5
|
await appendDurableStepEvent(environment, event, { enforceAttemptBudget: true });
|
|
6
6
|
}
|
|
7
|
-
async function
|
|
7
|
+
async function appendDurableEvent(environment, event) {
|
|
8
8
|
await appendDurableStepEvent(environment, event);
|
|
9
9
|
}
|
|
10
10
|
async function appendDurableStepEvent(environment, event, options = {}) {
|
|
@@ -14,4 +14,4 @@ async function appendDurableStepEvent(environment, event, options = {}) {
|
|
|
14
14
|
} : void 0, (appendedEvent, events) => environment.observeDurableEventAppended?.(runId, appendedEvent, events));
|
|
15
15
|
}
|
|
16
16
|
//#endregion
|
|
17
|
-
export {
|
|
17
|
+
export { appendDurableEvent, appendDurableStepStartedEvent };
|