@workflow/core 4.0.1-beta.8 → 4.1.0-beta.51
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/dist/builtins.js +1 -1
- package/dist/class-serialization.d.ts +26 -0
- package/dist/class-serialization.d.ts.map +1 -0
- package/dist/class-serialization.js +66 -0
- package/dist/create-hook.js +1 -1
- package/dist/define-hook.d.ts +40 -25
- package/dist/define-hook.d.ts.map +1 -1
- package/dist/define-hook.js +22 -27
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +5 -1
- package/dist/flushable-stream.d.ts +82 -0
- package/dist/flushable-stream.d.ts.map +1 -0
- package/dist/flushable-stream.js +214 -0
- package/dist/global.d.ts +4 -1
- package/dist/global.d.ts.map +1 -1
- package/dist/global.js +21 -9
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/logger.js +1 -1
- package/dist/observability.d.ts +60 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +265 -32
- package/dist/private.d.ts +10 -1
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +6 -1
- package/dist/runtime/helpers.d.ts +52 -0
- package/dist/runtime/helpers.d.ts.map +1 -0
- package/dist/runtime/helpers.js +264 -0
- package/dist/runtime/resume-hook.d.ts +17 -12
- package/dist/runtime/resume-hook.d.ts.map +1 -1
- package/dist/runtime/resume-hook.js +79 -64
- package/dist/runtime/start.d.ts +14 -0
- package/dist/runtime/start.d.ts.map +1 -1
- package/dist/runtime/start.js +71 -45
- package/dist/runtime/step-handler.d.ts +7 -0
- package/dist/runtime/step-handler.d.ts.map +1 -0
- package/dist/runtime/step-handler.js +337 -0
- package/dist/runtime/suspension-handler.d.ts +25 -0
- package/dist/runtime/suspension-handler.d.ts.map +1 -0
- package/dist/runtime/suspension-handler.js +182 -0
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +20 -21
- package/dist/runtime.d.ts +3 -7
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +103 -410
- package/dist/schemas.d.ts +1 -15
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +2 -15
- package/dist/serialization.d.ts +112 -21
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +469 -85
- package/dist/sleep.d.ts +10 -0
- package/dist/sleep.d.ts.map +1 -1
- package/dist/sleep.js +1 -1
- package/dist/source-map.d.ts +10 -0
- package/dist/source-map.d.ts.map +1 -0
- package/dist/source-map.js +56 -0
- package/dist/step/context-storage.d.ts +2 -0
- package/dist/step/context-storage.d.ts.map +1 -1
- package/dist/step/context-storage.js +1 -1
- package/dist/step/get-closure-vars.d.ts +9 -0
- package/dist/step/get-closure-vars.d.ts.map +1 -0
- package/dist/step/get-closure-vars.js +16 -0
- package/dist/step/get-step-metadata.js +1 -1
- package/dist/step/get-workflow-metadata.js +1 -1
- package/dist/{writable-stream.d.ts → step/writable-stream.d.ts} +5 -5
- package/dist/step/writable-stream.d.ts.map +1 -0
- package/dist/step/writable-stream.js +30 -0
- package/dist/step.d.ts +1 -1
- package/dist/step.d.ts.map +1 -1
- package/dist/step.js +93 -47
- package/dist/symbols.d.ts +6 -0
- package/dist/symbols.d.ts.map +1 -1
- package/dist/symbols.js +7 -1
- package/dist/telemetry/semantic-conventions.d.ts +66 -38
- package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
- package/dist/telemetry/semantic-conventions.js +16 -3
- package/dist/telemetry.d.ts +8 -4
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +39 -6
- package/dist/types.js +1 -1
- package/dist/util.d.ts +5 -24
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +19 -38
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/vm/index.js +2 -2
- package/dist/vm/uuid.js +1 -1
- package/dist/workflow/create-hook.js +1 -1
- package/dist/workflow/define-hook.d.ts +3 -3
- package/dist/workflow/define-hook.d.ts.map +1 -1
- package/dist/workflow/define-hook.js +1 -1
- package/dist/workflow/get-workflow-metadata.js +1 -1
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +49 -14
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/sleep.d.ts +1 -1
- package/dist/workflow/sleep.d.ts.map +1 -1
- package/dist/workflow/sleep.js +26 -39
- package/dist/workflow/writable-stream.d.ts +1 -1
- package/dist/workflow/writable-stream.d.ts.map +1 -1
- package/dist/workflow/writable-stream.js +1 -1
- package/dist/workflow.d.ts +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +72 -9
- package/docs/api-reference/create-hook.mdx +133 -0
- package/docs/api-reference/create-webhook.mdx +225 -0
- package/docs/api-reference/define-hook.mdx +206 -0
- package/docs/api-reference/fatal-error.mdx +37 -0
- package/docs/api-reference/fetch.mdx +139 -0
- package/docs/api-reference/get-step-metadata.mdx +76 -0
- package/docs/api-reference/get-workflow-metadata.mdx +44 -0
- package/docs/api-reference/get-writable.mdx +292 -0
- package/docs/api-reference/index.mdx +55 -0
- package/docs/api-reference/meta.json +3 -0
- package/docs/api-reference/retryable-error.mdx +106 -0
- package/docs/api-reference/sleep.mdx +59 -0
- package/docs/foundations/common-patterns.mdx +253 -0
- package/docs/foundations/errors-and-retries.mdx +190 -0
- package/docs/foundations/hooks.mdx +455 -0
- package/docs/foundations/idempotency.mdx +55 -0
- package/docs/foundations/index.mdx +32 -0
- package/docs/foundations/meta.json +14 -0
- package/docs/foundations/serialization.mdx +157 -0
- package/docs/foundations/starting-workflows.mdx +211 -0
- package/docs/foundations/streaming.mdx +569 -0
- package/docs/foundations/workflows-and-steps.mdx +197 -0
- package/docs/how-it-works/code-transform.mdx +334 -0
- package/docs/how-it-works/event-sourcing.mdx +254 -0
- package/docs/how-it-works/framework-integrations.mdx +437 -0
- package/docs/how-it-works/meta.json +10 -0
- package/docs/how-it-works/understanding-directives.mdx +611 -0
- package/package.json +31 -25
- package/dist/builtins.js.map +0 -1
- package/dist/create-hook.js.map +0 -1
- package/dist/define-hook.js.map +0 -1
- package/dist/events-consumer.js.map +0 -1
- package/dist/global.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/observability.js.map +0 -1
- package/dist/parse-name.d.ts +0 -25
- package/dist/parse-name.d.ts.map +0 -1
- package/dist/parse-name.js +0 -40
- package/dist/parse-name.js.map +0 -1
- package/dist/private.js.map +0 -1
- package/dist/runtime/resume-hook.js.map +0 -1
- package/dist/runtime/start.js.map +0 -1
- package/dist/runtime/world.js.map +0 -1
- package/dist/runtime.js.map +0 -1
- package/dist/schemas.js.map +0 -1
- package/dist/serialization.js.map +0 -1
- package/dist/sleep.js.map +0 -1
- package/dist/step/context-storage.js.map +0 -1
- package/dist/step/get-step-metadata.js.map +0 -1
- package/dist/step/get-workflow-metadata.js.map +0 -1
- package/dist/step.js.map +0 -1
- package/dist/symbols.js.map +0 -1
- package/dist/telemetry/semantic-conventions.js.map +0 -1
- package/dist/telemetry.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/util.js.map +0 -1
- package/dist/vm/index.js.map +0 -1
- package/dist/vm/uuid.js.map +0 -1
- package/dist/workflow/create-hook.js.map +0 -1
- package/dist/workflow/define-hook.js.map +0 -1
- package/dist/workflow/get-workflow-metadata.js.map +0 -1
- package/dist/workflow/hook.js.map +0 -1
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/sleep.js.map +0 -1
- package/dist/workflow/writable-stream.js.map +0 -1
- package/dist/workflow.js.map +0 -1
- package/dist/writable-stream.d.ts.map +0 -1
- package/dist/writable-stream.js +0 -16
- package/dist/writable-stream.js.map +0 -1
package/dist/global.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pluralize } from '@workflow/utils';
|
|
1
2
|
/**
|
|
2
3
|
* An error that is thrown when one or more operations (steps/hooks/etc.) are called but do
|
|
3
4
|
* not yet have corresponding entries in the event log. The workflow
|
|
@@ -10,24 +11,35 @@ export class WorkflowSuspension extends Error {
|
|
|
10
11
|
stepCount;
|
|
11
12
|
hookCount;
|
|
12
13
|
waitCount;
|
|
13
|
-
constructor(
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
14
|
+
constructor(stepsInput, global) {
|
|
15
|
+
// Convert Map to array for iteration and storage
|
|
16
|
+
const steps = [...stepsInput.values()];
|
|
17
|
+
// Single-pass counting for efficiency
|
|
18
|
+
let stepCount = 0;
|
|
19
|
+
let hookCount = 0;
|
|
20
|
+
let waitCount = 0;
|
|
21
|
+
for (const item of steps) {
|
|
22
|
+
if (item.type === 'step')
|
|
23
|
+
stepCount++;
|
|
24
|
+
else if (item.type === 'hook')
|
|
25
|
+
hookCount++;
|
|
26
|
+
else if (item.type === 'wait')
|
|
27
|
+
waitCount++;
|
|
28
|
+
}
|
|
17
29
|
// Build description parts
|
|
18
30
|
const parts = [];
|
|
19
31
|
if (stepCount > 0) {
|
|
20
|
-
parts.push(`${stepCount} ${
|
|
32
|
+
parts.push(`${stepCount} ${pluralize('step', 'steps', stepCount)}`);
|
|
21
33
|
}
|
|
22
34
|
if (hookCount > 0) {
|
|
23
|
-
parts.push(`${hookCount} ${
|
|
35
|
+
parts.push(`${hookCount} ${pluralize('hook', 'hooks', hookCount)}`);
|
|
24
36
|
}
|
|
25
37
|
if (waitCount > 0) {
|
|
26
|
-
parts.push(`${waitCount} ${
|
|
38
|
+
parts.push(`${waitCount} ${pluralize('wait', 'waits', waitCount)}`);
|
|
27
39
|
}
|
|
28
40
|
// Determine verb (has/have) and action (run/created/received)
|
|
29
41
|
const totalCount = stepCount + hookCount + waitCount;
|
|
30
|
-
const hasOrHave =
|
|
42
|
+
const hasOrHave = pluralize('has', 'have', totalCount);
|
|
31
43
|
let action;
|
|
32
44
|
if (stepCount > 0) {
|
|
33
45
|
action = 'run';
|
|
@@ -59,4 +71,4 @@ export class WorkflowSuspension extends Error {
|
|
|
59
71
|
export function ENOTSUP() {
|
|
60
72
|
throw new Error('Not supported in workflow functions');
|
|
61
73
|
}
|
|
62
|
-
//# sourceMappingURL=
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dsb2JhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsS0FBSyxDQUFjO0lBQ25CLFVBQVUsQ0FBb0I7SUFDOUIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsQ0FBUztJQUNsQixTQUFTLENBQVM7SUFFbEIsWUFBWSxVQUFrQyxFQUFFLE1BQXlCO1FBQ3ZFLGlEQUFpRDtRQUNqRCxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdkMsc0NBQXNDO1FBQ3RDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07Z0JBQUUsU0FBUyxFQUFFLENBQUM7aUJBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO2dCQUFFLFNBQVMsRUFBRSxDQUFDO2lCQUN0QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtnQkFBRSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCw4REFBOEQ7UUFDOUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDckQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdkQsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNqQixDQUFDO2FBQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNyQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDdEIsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUNmLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNkLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxhQUFhLE1BQU0sTUFBTTtZQUM5RCxDQUFDLENBQUMsK0JBQStCLENBQUMsQ0FBQywrQkFBK0I7UUFDdEUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYztRQUN0QixPQUFPLEtBQUssWUFBWSxrQkFBa0IsQ0FBQztJQUM3QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsT0FBTztJQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFDekQsQ0FBQyJ9
|
package/dist/index.d.ts
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export { FatalError, RetryableError, type RetryableErrorOptions, } from '@workflow/errors';
|
|
13
13
|
export { createHook, createWebhook, type Hook, type HookOptions, type RequestWithResponse, type Webhook, type WebhookOptions, } from './create-hook.js';
|
|
14
|
-
export { defineHook } from './define-hook.js';
|
|
14
|
+
export { defineHook, type TypedHook } from './define-hook.js';
|
|
15
|
+
export { sleep } from './sleep.js';
|
|
15
16
|
export { getStepMetadata, type StepMetadata, } from './step/get-step-metadata.js';
|
|
16
17
|
export { getWorkflowMetadata, type WorkflowMetadata, } from './step/get-workflow-metadata.js';
|
|
17
|
-
export {
|
|
18
|
-
export { getWritable } from './writable-stream.js';
|
|
18
|
+
export { getWritable, type WorkflowWritableStreamOptions, } from './step/writable-stream.js';
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,UAAU,EACV,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,UAAU,EACV,aAAa,EACb,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,cAAc,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,KAAK,gBAAgB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,WAAW,EACX,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
export { FatalError, RetryableError, } from '@workflow/errors';
|
|
13
13
|
export { createHook, createWebhook, } from './create-hook.js';
|
|
14
14
|
export { defineHook } from './define-hook.js';
|
|
15
|
+
export { sleep } from './sleep.js';
|
|
15
16
|
export { getStepMetadata, } from './step/get-step-metadata.js';
|
|
16
17
|
export { getWorkflowMetadata, } from './step/get-workflow-metadata.js';
|
|
17
|
-
export {
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=index.js.map
|
|
18
|
+
export { getWritable, } from './step/writable-stream.js';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLFVBQVUsRUFDVixhQUFhLEdBTWQsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsR0FFaEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsR0FFWixNQUFNLDJCQUEyQixDQUFDIn0=
|
package/dist/logger.js
CHANGED
|
@@ -29,4 +29,4 @@ export const runtimeLogger = createLogger('runtime');
|
|
|
29
29
|
export const webhookLogger = createLogger('webhook');
|
|
30
30
|
export const eventsLogger = createLogger('events');
|
|
31
31
|
export const adapterLogger = createLogger('adapter');
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLFNBQVMsWUFBWSxDQUFDLFNBQWlCO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFFakQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtRQUMvQixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsUUFBOEIsRUFBRSxFQUFFO1lBQ3pELFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFOUIsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3ZCLGFBQWEsRUFBRTtxQkFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxJQUFJLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsbUNBQW1DO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMifQ==
|
package/dist/observability.d.ts
CHANGED
|
@@ -2,7 +2,67 @@
|
|
|
2
2
|
* Observability utilities for workflow inspection.
|
|
3
3
|
* Shared between CLI and Web UI for consistent behavior.
|
|
4
4
|
*/
|
|
5
|
+
import { inspect } from 'node:util';
|
|
6
|
+
/**
|
|
7
|
+
* Marker for stream reference objects that can be rendered as links
|
|
8
|
+
*/
|
|
9
|
+
export declare const STREAM_REF_TYPE = "__workflow_stream_ref__";
|
|
10
|
+
/**
|
|
11
|
+
* A stream reference object that contains the stream ID and can be
|
|
12
|
+
* detected in the UI to render as a clickable link
|
|
13
|
+
*/
|
|
14
|
+
export interface StreamRef {
|
|
15
|
+
__type: typeof STREAM_REF_TYPE;
|
|
16
|
+
streamId: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Marker for custom class instance references.
|
|
20
|
+
* Used in observability to represent serialized class instances
|
|
21
|
+
* that cannot be fully deserialized (because the class is not registered).
|
|
22
|
+
*/
|
|
23
|
+
export declare const CLASS_INSTANCE_REF_TYPE = "__workflow_class_instance_ref__";
|
|
24
|
+
/**
|
|
25
|
+
* A class instance reference that contains the class name and serialized data.
|
|
26
|
+
* This is used during o11y hydration when a custom class instance is encountered
|
|
27
|
+
* but the class is not registered for deserialization.
|
|
28
|
+
*
|
|
29
|
+
* Provides a custom `util.inspect.custom` representation for nice CLI output:
|
|
30
|
+
* `Point { x: 1, y: 2 } [class//path/to/file.ts//Point]`
|
|
31
|
+
*/
|
|
32
|
+
export declare class ClassInstanceRef {
|
|
33
|
+
readonly className: string;
|
|
34
|
+
readonly classId: string;
|
|
35
|
+
readonly data: unknown;
|
|
36
|
+
readonly __type = "__workflow_class_instance_ref__";
|
|
37
|
+
constructor(className: string, classId: string, data: unknown);
|
|
38
|
+
/**
|
|
39
|
+
* Custom inspect for Node.js util.inspect (used by console.log, CLI, etc.)
|
|
40
|
+
* Renders as: ClassName@filename { ...data }
|
|
41
|
+
* The @filename portion is styled gray (like undefined in Node.js)
|
|
42
|
+
*/
|
|
43
|
+
[inspect.custom](_depth: number, options: import('node:util').InspectOptionsStylized): string;
|
|
44
|
+
/**
|
|
45
|
+
* For JSON.stringify - returns a plain object representation
|
|
46
|
+
*/
|
|
47
|
+
toJSON(): {
|
|
48
|
+
__type: string;
|
|
49
|
+
className: string;
|
|
50
|
+
classId: string;
|
|
51
|
+
data: unknown;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if a value is a ClassInstanceRef object
|
|
56
|
+
*/
|
|
57
|
+
export declare const isClassInstanceRef: (value: unknown) => value is ClassInstanceRef;
|
|
58
|
+
/**
|
|
59
|
+
* Check if a value is a stream ID string
|
|
60
|
+
*/
|
|
5
61
|
export declare const isStreamId: (value: unknown) => boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Check if a value is a StreamRef object
|
|
64
|
+
*/
|
|
65
|
+
export declare const isStreamRef: (value: unknown) => value is StreamRef;
|
|
6
66
|
export declare const hydrateResourceIO: <T extends {
|
|
7
67
|
stepId?: string;
|
|
8
68
|
hookId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC;;GAEG;AACH,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,eAAe,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;;;;;;GAOG;AACH,qBAAa,gBAAgB;aAIT,SAAS,EAAE,MAAM;aACjB,OAAO,EAAE,MAAM;aACf,IAAI,EAAE,OAAO;IAL/B,QAAQ,CAAC,MAAM,qCAA2B;gBAGxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO;IAG/B;;;;OAIG;IACH,CAAC,OAAO,CAAC,MAAM,CAAC,CACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,WAAW,EAAE,sBAAsB,GAClD,MAAM;IAaT;;OAEG;IACH,MAAM,IAAI;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,OAAO,CAAC;KACf;CAQF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,KACb,KAAK,IAAI,gBAUX,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OAE3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,SASrD,CAAC;AAyQF,eAAO,MAAM,iBAAiB,GAC5B,CAAC,SAAS;IACR,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,gBAAgB,CAAC,EAAE,GAAG,CAAC;CACxB,EAED,UAAU,CAAC,KACV,CA6BF,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAmBvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,SAAK,GAAG,MAAM,CAG7D"}
|
package/dist/observability.js
CHANGED
|
@@ -2,71 +2,295 @@
|
|
|
2
2
|
* Observability utilities for workflow inspection.
|
|
3
3
|
* Shared between CLI and Web UI for consistent behavior.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { inspect } from 'node:util';
|
|
6
|
+
import { parseClassName } from '@workflow/utils/parse-name';
|
|
7
|
+
import { unflatten } from 'devalue';
|
|
8
|
+
import { getCommonRevivers, hydrateStepArguments, hydrateStepReturnValue, hydrateWorkflowArguments, hydrateWorkflowReturnValue, } from './serialization.js';
|
|
6
9
|
const STREAM_ID_PREFIX = 'strm_';
|
|
7
|
-
|
|
8
|
-
*
|
|
10
|
+
/**
|
|
11
|
+
* Marker for stream reference objects that can be rendered as links
|
|
12
|
+
*/
|
|
13
|
+
export const STREAM_REF_TYPE = '__workflow_stream_ref__';
|
|
14
|
+
/**
|
|
15
|
+
* Marker for custom class instance references.
|
|
16
|
+
* Used in observability to represent serialized class instances
|
|
17
|
+
* that cannot be fully deserialized (because the class is not registered).
|
|
18
|
+
*/
|
|
19
|
+
export const CLASS_INSTANCE_REF_TYPE = '__workflow_class_instance_ref__';
|
|
20
|
+
/**
|
|
21
|
+
* A class instance reference that contains the class name and serialized data.
|
|
22
|
+
* This is used during o11y hydration when a custom class instance is encountered
|
|
23
|
+
* but the class is not registered for deserialization.
|
|
24
|
+
*
|
|
25
|
+
* Provides a custom `util.inspect.custom` representation for nice CLI output:
|
|
26
|
+
* `Point { x: 1, y: 2 } [class//path/to/file.ts//Point]`
|
|
27
|
+
*/
|
|
28
|
+
export class ClassInstanceRef {
|
|
29
|
+
className;
|
|
30
|
+
classId;
|
|
31
|
+
data;
|
|
32
|
+
__type = CLASS_INSTANCE_REF_TYPE;
|
|
33
|
+
constructor(className, classId, data) {
|
|
34
|
+
this.className = className;
|
|
35
|
+
this.classId = classId;
|
|
36
|
+
this.data = data;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Custom inspect for Node.js util.inspect (used by console.log, CLI, etc.)
|
|
40
|
+
* Renders as: ClassName@filename { ...data }
|
|
41
|
+
* The @filename portion is styled gray (like undefined in Node.js)
|
|
42
|
+
*/
|
|
43
|
+
[inspect.custom](_depth, options) {
|
|
44
|
+
const dataStr = inspect(this.data, { ...options, depth: options.depth });
|
|
45
|
+
const parsed = parseClassName(this.classId);
|
|
46
|
+
const filePath = parsed?.path ?? this.classId;
|
|
47
|
+
// Extract just the filename from the path
|
|
48
|
+
const fileName = filePath.split('/').pop() ?? filePath;
|
|
49
|
+
// Style the @filename portion gray using the 'undefined' style
|
|
50
|
+
const styledFileName = options.stylize
|
|
51
|
+
? options.stylize(`@${fileName}`, 'undefined')
|
|
52
|
+
: `@${fileName}`;
|
|
53
|
+
return `${this.className}${styledFileName} ${dataStr}`;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* For JSON.stringify - returns a plain object representation
|
|
57
|
+
*/
|
|
58
|
+
toJSON() {
|
|
59
|
+
return {
|
|
60
|
+
__type: this.__type,
|
|
61
|
+
className: this.className,
|
|
62
|
+
classId: this.classId,
|
|
63
|
+
data: this.data,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if a value is a ClassInstanceRef object
|
|
69
|
+
*/
|
|
70
|
+
export const isClassInstanceRef = (value) => {
|
|
71
|
+
return (value instanceof ClassInstanceRef ||
|
|
72
|
+
(value !== null &&
|
|
73
|
+
typeof value === 'object' &&
|
|
74
|
+
'__type' in value &&
|
|
75
|
+
value.__type === CLASS_INSTANCE_REF_TYPE &&
|
|
76
|
+
'className' in value &&
|
|
77
|
+
typeof value.className === 'string'));
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Check if a value is a stream ID string
|
|
9
81
|
*/
|
|
10
82
|
export const isStreamId = (value) => {
|
|
11
83
|
return typeof value === 'string' && value.startsWith(STREAM_ID_PREFIX);
|
|
12
84
|
};
|
|
13
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Check if a value is a StreamRef object
|
|
87
|
+
*/
|
|
88
|
+
export const isStreamRef = (value) => {
|
|
89
|
+
return (value !== null &&
|
|
90
|
+
typeof value === 'object' &&
|
|
91
|
+
'__type' in value &&
|
|
92
|
+
value.__type === STREAM_REF_TYPE &&
|
|
93
|
+
'streamId' in value &&
|
|
94
|
+
typeof value.streamId === 'string');
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Create a StreamRef object from a stream value.
|
|
98
|
+
* This is used during hydration to convert serialized streams into
|
|
99
|
+
* objects that can be rendered as links in the UI.
|
|
100
|
+
*/
|
|
101
|
+
const streamToStreamRef = (value) => {
|
|
102
|
+
let streamId;
|
|
14
103
|
if ('name' in value) {
|
|
15
|
-
|
|
16
|
-
|
|
104
|
+
const name = String(value.name);
|
|
105
|
+
if (!name.startsWith(STREAM_ID_PREFIX)) {
|
|
106
|
+
streamId = `${STREAM_ID_PREFIX}${name}`;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
streamId = name;
|
|
17
110
|
}
|
|
18
|
-
return value.name;
|
|
19
111
|
}
|
|
20
|
-
|
|
112
|
+
else {
|
|
113
|
+
streamId = `${STREAM_ID_PREFIX}null`;
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
__type: STREAM_REF_TYPE,
|
|
117
|
+
streamId,
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
const serializedStepFunctionToString = (value) => {
|
|
121
|
+
if (!value)
|
|
122
|
+
return 'null';
|
|
123
|
+
if (typeof value !== 'object')
|
|
124
|
+
return 'null';
|
|
125
|
+
if ('stepId' in value) {
|
|
126
|
+
const stepId = value.stepId;
|
|
127
|
+
// TODO: Add closure vars to the string representation.
|
|
128
|
+
// value.closureVars
|
|
129
|
+
return `<step:${stepId}>`;
|
|
130
|
+
}
|
|
131
|
+
return '<function>';
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Extract the class name from a classId.
|
|
135
|
+
* The classId format is typically "path/to/file/ClassName" so we extract the last segment.
|
|
136
|
+
*/
|
|
137
|
+
const extractClassName = (classId) => {
|
|
138
|
+
if (!classId)
|
|
139
|
+
return 'Unknown';
|
|
140
|
+
const parts = classId.split('/');
|
|
141
|
+
return parts[parts.length - 1] || classId;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Convert a serialized class instance to a ClassInstanceRef for o11y display.
|
|
145
|
+
* This allows viewing custom class instances in the UI without needing
|
|
146
|
+
* the class to be registered for deserialization.
|
|
147
|
+
*/
|
|
148
|
+
const serializedInstanceToRef = (value) => {
|
|
149
|
+
return new ClassInstanceRef(extractClassName(value.classId), value.classId, value.data);
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Convert a serialized class reference to a string representation.
|
|
153
|
+
* This is used for Class type (the constructor reference itself, not an instance).
|
|
154
|
+
*/
|
|
155
|
+
const serializedClassToString = (value) => {
|
|
156
|
+
const className = extractClassName(value.classId);
|
|
157
|
+
return `<class:${className}>`;
|
|
21
158
|
};
|
|
22
159
|
/**
|
|
23
160
|
* This is an extra reviver for devalue that takes any streams that would be converted,
|
|
24
|
-
* into actual streams, and instead formats them as
|
|
161
|
+
* into actual streams, and instead formats them as StreamRef objects for display in the UI.
|
|
25
162
|
*
|
|
26
163
|
* This is mainly because we don't want to open any streams that we aren't going to read from,
|
|
27
164
|
* and so we can get the string ID/name, which the serializer stream doesn't provide.
|
|
165
|
+
*
|
|
166
|
+
* Also handles custom class instances (Instance) and class references (Class) by converting
|
|
167
|
+
* them to opaque markers, since the custom classes are not registered for deserialization
|
|
168
|
+
* in the o11y context.
|
|
28
169
|
*/
|
|
29
170
|
const streamPrintRevivers = {
|
|
30
|
-
ReadableStream:
|
|
31
|
-
WritableStream:
|
|
32
|
-
TransformStream:
|
|
171
|
+
ReadableStream: streamToStreamRef,
|
|
172
|
+
WritableStream: streamToStreamRef,
|
|
173
|
+
TransformStream: streamToStreamRef,
|
|
174
|
+
StepFunction: serializedStepFunctionToString,
|
|
175
|
+
Instance: serializedInstanceToRef,
|
|
176
|
+
Class: serializedClassToString,
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Combined revivers for observability hydration.
|
|
180
|
+
* Merges common revivers with stream print revivers.
|
|
181
|
+
*/
|
|
182
|
+
const getObservabilityRevivers = () => ({
|
|
183
|
+
...getCommonRevivers(globalThis),
|
|
184
|
+
...streamPrintRevivers,
|
|
185
|
+
});
|
|
186
|
+
/**
|
|
187
|
+
* Check if data is in legacy format (devalue parsed array).
|
|
188
|
+
* Legacy specVersion 1 runs stored data as JSON arrays from devalue.
|
|
189
|
+
*/
|
|
190
|
+
const isLegacyFormat = (data) => {
|
|
191
|
+
return Array.isArray(data);
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* Check if data is in binary format (Uint8Array).
|
|
195
|
+
* specVersion 2+ runs store data as binary Uint8Array with a format prefix.
|
|
196
|
+
*/
|
|
197
|
+
const isBinaryFormat = (data) => {
|
|
198
|
+
return data instanceof Uint8Array;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Hydrate legacy format data (array) using unflatten.
|
|
202
|
+
*/
|
|
203
|
+
const hydrateLegacyData = (data) => {
|
|
204
|
+
return unflatten(data, getObservabilityRevivers());
|
|
33
205
|
};
|
|
34
206
|
const hydrateStepIO = (step) => {
|
|
207
|
+
let hydratedInput = step.input;
|
|
208
|
+
let hydratedOutput = step.output;
|
|
209
|
+
// Hydrate input - handle both binary (specVersion 2) and legacy (specVersion 1) formats
|
|
210
|
+
if (isBinaryFormat(step.input) && step.input.byteLength > 0) {
|
|
211
|
+
hydratedInput = hydrateStepArguments(step.input, [], step.runId, globalThis, streamPrintRevivers);
|
|
212
|
+
}
|
|
213
|
+
else if (isLegacyFormat(step.input) && step.input.length > 0) {
|
|
214
|
+
hydratedInput = hydrateLegacyData(step.input);
|
|
215
|
+
}
|
|
216
|
+
// Hydrate output - handle both binary (specVersion 2) and legacy (specVersion 1) formats
|
|
217
|
+
if (isBinaryFormat(step.output)) {
|
|
218
|
+
hydratedOutput = hydrateStepReturnValue(step.output, globalThis, streamPrintRevivers);
|
|
219
|
+
}
|
|
220
|
+
else if (isLegacyFormat(step.output) && step.output.length > 0) {
|
|
221
|
+
hydratedOutput = hydrateLegacyData(step.output);
|
|
222
|
+
}
|
|
35
223
|
return {
|
|
36
224
|
...step,
|
|
37
|
-
input:
|
|
38
|
-
|
|
39
|
-
: step.input,
|
|
40
|
-
output: step.output
|
|
41
|
-
? hydrateStepReturnValue(step.output, globalThis, streamPrintRevivers)
|
|
42
|
-
: step.output,
|
|
225
|
+
input: hydratedInput,
|
|
226
|
+
output: hydratedOutput,
|
|
43
227
|
};
|
|
44
228
|
};
|
|
45
229
|
const hydrateWorkflowIO = (workflow) => {
|
|
230
|
+
let hydratedInput = workflow.input;
|
|
231
|
+
let hydratedOutput = workflow.output;
|
|
232
|
+
// Hydrate input - handle both binary (specVersion 2) and legacy (specVersion 1) formats
|
|
233
|
+
if (isBinaryFormat(workflow.input) && workflow.input.byteLength > 0) {
|
|
234
|
+
hydratedInput = hydrateWorkflowArguments(workflow.input, globalThis, streamPrintRevivers);
|
|
235
|
+
}
|
|
236
|
+
else if (isLegacyFormat(workflow.input) && workflow.input.length > 0) {
|
|
237
|
+
hydratedInput = hydrateLegacyData(workflow.input);
|
|
238
|
+
}
|
|
239
|
+
// Hydrate output - handle both binary (specVersion 2) and legacy (specVersion 1) formats
|
|
240
|
+
if (isBinaryFormat(workflow.output)) {
|
|
241
|
+
hydratedOutput = hydrateWorkflowReturnValue(workflow.output, [], workflow.runId, globalThis, streamPrintRevivers);
|
|
242
|
+
}
|
|
243
|
+
else if (isLegacyFormat(workflow.output) && workflow.output.length > 0) {
|
|
244
|
+
hydratedOutput = hydrateLegacyData(workflow.output);
|
|
245
|
+
}
|
|
46
246
|
return {
|
|
47
247
|
...workflow,
|
|
48
|
-
input:
|
|
49
|
-
|
|
50
|
-
: workflow.input,
|
|
51
|
-
output: workflow.output
|
|
52
|
-
? hydrateWorkflowReturnValue(workflow.output, [], globalThis, streamPrintRevivers)
|
|
53
|
-
: workflow.output,
|
|
248
|
+
input: hydratedInput,
|
|
249
|
+
output: hydratedOutput,
|
|
54
250
|
};
|
|
55
251
|
};
|
|
56
252
|
const hydrateEventData = (event) => {
|
|
253
|
+
if (!event.eventData) {
|
|
254
|
+
return event;
|
|
255
|
+
}
|
|
256
|
+
const eventData = { ...event.eventData };
|
|
257
|
+
// Events can have various eventData with non-devalued keys.
|
|
258
|
+
// So far, only eventData.result is devalued (though this may change),
|
|
259
|
+
// so we need to hydrate it specifically.
|
|
260
|
+
try {
|
|
261
|
+
if ('result' in eventData && typeof eventData.result === 'object') {
|
|
262
|
+
// Handle both binary (specVersion 2) and legacy (specVersion 1) formats
|
|
263
|
+
if (isBinaryFormat(eventData.result)) {
|
|
264
|
+
eventData.result = hydrateStepReturnValue(eventData.result, globalThis, streamPrintRevivers);
|
|
265
|
+
}
|
|
266
|
+
else if (isLegacyFormat(eventData.result) &&
|
|
267
|
+
eventData.result.length > 0) {
|
|
268
|
+
eventData.result = hydrateLegacyData(eventData.result);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
console.error('Error hydrating event data', error);
|
|
274
|
+
}
|
|
57
275
|
return {
|
|
58
276
|
...event,
|
|
59
|
-
eventData
|
|
60
|
-
? hydrateStepArguments(event.eventData, [], globalThis)
|
|
61
|
-
: event.eventData,
|
|
277
|
+
eventData,
|
|
62
278
|
};
|
|
63
279
|
};
|
|
64
280
|
const hydrateHookMetadata = (hook) => {
|
|
281
|
+
let hydratedMetadata = hook.metadata;
|
|
282
|
+
if (hook.metadata && 'runId' in hook) {
|
|
283
|
+
// Handle both binary (specVersion 2) and legacy (specVersion 1) formats
|
|
284
|
+
if (isBinaryFormat(hook.metadata)) {
|
|
285
|
+
hydratedMetadata = hydrateStepArguments(hook.metadata, [], hook.runId, globalThis, streamPrintRevivers);
|
|
286
|
+
}
|
|
287
|
+
else if (isLegacyFormat(hook.metadata) && hook.metadata.length > 0) {
|
|
288
|
+
hydratedMetadata = hydrateLegacyData(hook.metadata);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
65
291
|
return {
|
|
66
292
|
...hook,
|
|
67
|
-
metadata:
|
|
68
|
-
? hydrateStepArguments(hook.metadata, [], globalThis)
|
|
69
|
-
: hook.metadata,
|
|
293
|
+
metadata: hydratedMetadata,
|
|
70
294
|
};
|
|
71
295
|
};
|
|
72
296
|
export const hydrateResourceIO = (resource) => {
|
|
@@ -87,7 +311,16 @@ export const hydrateResourceIO = (resource) => {
|
|
|
87
311
|
hydrated = hydrateWorkflowIO(resource);
|
|
88
312
|
}
|
|
89
313
|
if ('executionContext' in hydrated) {
|
|
90
|
-
const { executionContext
|
|
314
|
+
const { executionContext, ...rest } = hydrated;
|
|
315
|
+
// Preserve workflowCoreVersion from executionContext for observability
|
|
316
|
+
const workflowCoreVersion = executionContext &&
|
|
317
|
+
typeof executionContext === 'object' &&
|
|
318
|
+
'workflowCoreVersion' in executionContext
|
|
319
|
+
? executionContext.workflowCoreVersion
|
|
320
|
+
: undefined;
|
|
321
|
+
if (workflowCoreVersion) {
|
|
322
|
+
return { ...rest, workflowCoreVersion };
|
|
323
|
+
}
|
|
91
324
|
return rest;
|
|
92
325
|
}
|
|
93
326
|
return hydrated;
|
|
@@ -123,4 +356,4 @@ export function truncateId(id, maxLength = 12) {
|
|
|
123
356
|
return id;
|
|
124
357
|
return `${id.slice(0, maxLength)}...`;
|
|
125
358
|
}
|
|
126
|
-
//# sourceMappingURL=observability.js.map
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJpbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QiwwQkFBMEIsR0FDM0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztBQUVqQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztBQVd6RDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsaUNBQWlDLENBQUM7QUFFekU7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFJVDtJQUNBO0lBQ0E7SUFMVCxNQUFNLEdBQUcsdUJBQXVCLENBQUM7SUFFMUMsWUFDa0IsU0FBaUIsRUFDakIsT0FBZSxFQUNmLElBQWE7UUFGYixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFTO0lBQzVCLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQ2QsTUFBYyxFQUNkLE9BQW1EO1FBRW5ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLGNB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
|
package/dist/private.d.ts
CHANGED
|
@@ -15,10 +15,19 @@ export declare function registerStepFunction(stepId: string, stepFn: StepFunctio
|
|
|
15
15
|
* Find a registered step function by name
|
|
16
16
|
*/
|
|
17
17
|
export declare function getStepFunction(stepId: string): StepFunction | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Get closure variables for the current step function
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export { __private_getClosureVars } from './step/get-closure-vars.js';
|
|
18
23
|
export interface WorkflowOrchestratorContext {
|
|
19
24
|
globalThis: typeof globalThis;
|
|
20
25
|
eventsConsumer: EventsConsumer;
|
|
21
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Map of pending invocations keyed by correlationId.
|
|
28
|
+
* Using Map instead of Array for O(1) lookup/delete operations.
|
|
29
|
+
*/
|
|
30
|
+
invocationsQueue: Map<string, QueueItem>;
|
|
22
31
|
onWorkflowError: (error: Error) => void;
|
|
23
32
|
generateUlid: () => string;
|
|
24
33
|
generateNanoid: () => string;
|
package/dist/private.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../src/private.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,YAAY,EAAE,GAAG,GAAG,EAAE,EACnC,MAAM,SAAS,YAAY,GAAG,OAAO,GAAG,OAAO,IAC7C,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,QAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExE;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../src/private.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,MAAM,YAAY,CACtB,IAAI,SAAS,YAAY,EAAE,GAAG,GAAG,EAAE,EACnC,MAAM,SAAS,YAAY,GAAG,OAAO,GAAG,OAAO,IAC7C,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,QAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAExE;AAED;;;GAGG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B;;;OAGG;IACH,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,MAAM,CAAC;CAC9B"}
|
package/dist/private.js
CHANGED
|
@@ -14,4 +14,9 @@ export function registerStepFunction(stepId, stepFn) {
|
|
|
14
14
|
export function getStepFunction(stepId) {
|
|
15
15
|
return registeredSteps.get(stepId);
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Get closure variables for the current step function
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export { __private_getClosureVars } from './step/get-closure-vars.js';
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcml2YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBYUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBYyxFQUFFLE1BQW9CO0lBQ3ZFLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYztJQUM1QyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDIn0=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Event, HealthCheckPayload, World } from '@workflow/world';
|
|
2
|
+
/**
|
|
3
|
+
* Result of a health check operation.
|
|
4
|
+
*/
|
|
5
|
+
export interface HealthCheckResult {
|
|
6
|
+
healthy: boolean;
|
|
7
|
+
/** Error message if health check failed */
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Checks if the given message is a health check payload.
|
|
12
|
+
* If so, returns the parsed payload. Otherwise returns undefined.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseHealthCheckPayload(message: unknown): HealthCheckPayload | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Handles a health check message by writing the result to the world's stream.
|
|
17
|
+
* The caller can listen to this stream to get the health check response.
|
|
18
|
+
*
|
|
19
|
+
* @param healthCheck - The parsed health check payload
|
|
20
|
+
* @param endpoint - Which endpoint is responding ('workflow' or 'step')
|
|
21
|
+
*/
|
|
22
|
+
export declare function handleHealthCheckMessage(healthCheck: HealthCheckPayload, endpoint: 'workflow' | 'step'): Promise<void>;
|
|
23
|
+
export type HealthCheckEndpoint = 'workflow' | 'step';
|
|
24
|
+
export interface HealthCheckOptions {
|
|
25
|
+
/** Timeout in milliseconds to wait for health check response. Default: 30000 (30s) */
|
|
26
|
+
timeout?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function healthCheck(world: World, endpoint: HealthCheckEndpoint, options?: HealthCheckOptions): Promise<HealthCheckResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Loads all workflow run events by iterating through all pages of paginated results.
|
|
31
|
+
* This ensures that *all* events are loaded into memory before running the workflow.
|
|
32
|
+
* Events must be in chronological order (ascending) for proper workflow replay.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getAllWorkflowRunEvents(runId: string): Promise<Event[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Wraps a request/response handler and adds a health check "mode"
|
|
37
|
+
* based on the presence of a `__health` query parameter.
|
|
38
|
+
*/
|
|
39
|
+
export declare function withHealthCheck(handler: (req: Request) => Promise<Response>): (req: Request) => Promise<Response>;
|
|
40
|
+
/**
|
|
41
|
+
* Queues a message to the specified queue with tracing.
|
|
42
|
+
*/
|
|
43
|
+
export declare function queueMessage(world: World, ...args: Parameters<typeof world.queue>): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Calculates the queue overhead time in milliseconds for a given message.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getQueueOverhead(message: {
|
|
48
|
+
requestedAt?: Date;
|
|
49
|
+
}): {
|
|
50
|
+
[k: string]: number;
|
|
51
|
+
} | undefined;
|
|
52
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/runtime/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,kBAAkB,EAElB,KAAK,EACN,MAAM,iBAAiB,CAAC;AAmBzB;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,GACf,kBAAkB,GAAG,SAAS,CAMhC;AAWD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,EAAE,UAAU,GAAG,MAAM,GAC5B,OAAO,CAAC,IAAI,CAAC,CAef;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuFD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAgE5B;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAwB7E;AAYD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,GAC3C,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAyBrC;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,KAAK,EACZ,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,iBAcxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,IAAI,CAAA;CAAE;;cAS/D"}
|