openworkflow 0.4.0 → 0.4.1

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.
Files changed (133) hide show
  1. package/README.md +17 -11
  2. package/dist/backend-sqlite/backend.d.ts +38 -0
  3. package/dist/backend-sqlite/backend.d.ts.map +1 -0
  4. package/dist/backend-sqlite/backend.js +628 -0
  5. package/dist/backend-sqlite/backend.js.map +1 -0
  6. package/dist/backend-sqlite/index.d.ts +2 -0
  7. package/dist/backend-sqlite/index.d.ts.map +1 -0
  8. package/dist/backend-sqlite/index.js +2 -0
  9. package/dist/backend-sqlite/index.js.map +1 -0
  10. package/dist/backend-sqlite/sqlite.d.ts +45 -0
  11. package/dist/backend-sqlite/sqlite.d.ts.map +1 -0
  12. package/dist/backend-sqlite/sqlite.js +229 -0
  13. package/dist/backend-sqlite/sqlite.js.map +1 -0
  14. package/dist/config/config.d.ts +102 -0
  15. package/dist/config/config.d.ts.map +1 -0
  16. package/dist/config/config.js +29 -0
  17. package/dist/config/config.js.map +1 -0
  18. package/dist/config/index.d.ts +3 -0
  19. package/dist/config/index.d.ts.map +1 -0
  20. package/dist/config/index.js +2 -0
  21. package/dist/config/index.js.map +1 -0
  22. package/dist/config.d.ts +28 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +41 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/core/backend-test-suite.d.ts +22 -0
  27. package/dist/core/backend-test-suite.d.ts.map +1 -0
  28. package/dist/core/backend-test-suite.js +960 -0
  29. package/dist/core/backend-test-suite.js.map +1 -0
  30. package/dist/core/backend.d.ts +103 -0
  31. package/dist/core/backend.d.ts.map +1 -0
  32. package/dist/core/backend.js +2 -0
  33. package/dist/core/backend.js.map +1 -0
  34. package/dist/core/backend.testsuite.d.ts +21 -0
  35. package/dist/core/backend.testsuite.d.ts.map +1 -0
  36. package/dist/core/backend.testsuite.js +958 -0
  37. package/dist/core/backend.testsuite.js.map +1 -0
  38. package/dist/{duration.d.ts → core/duration.d.ts} +2 -1
  39. package/dist/core/duration.d.ts.map +1 -0
  40. package/dist/{duration.js → core/duration.js} +6 -5
  41. package/dist/core/duration.js.map +1 -0
  42. package/dist/core/duration.test.d.ts +2 -0
  43. package/dist/core/duration.test.d.ts.map +1 -0
  44. package/dist/core/duration.test.js +264 -0
  45. package/dist/core/duration.test.js.map +1 -0
  46. package/dist/core/json.d.ts +5 -0
  47. package/dist/core/json.d.ts.map +1 -0
  48. package/dist/core/json.js +2 -0
  49. package/dist/core/json.js.map +1 -0
  50. package/dist/core/result.d.ts +12 -0
  51. package/dist/core/result.d.ts.map +1 -0
  52. package/dist/core/result.js +7 -0
  53. package/dist/core/result.js.map +1 -0
  54. package/dist/core/result.test.d.ts +2 -0
  55. package/dist/core/result.test.d.ts.map +1 -0
  56. package/dist/core/result.test.js +11 -0
  57. package/dist/core/result.test.js.map +1 -0
  58. package/dist/core/retry.d.ts +16 -0
  59. package/dist/core/retry.d.ts.map +1 -0
  60. package/dist/{backend.js → core/retry.js} +1 -3
  61. package/dist/core/retry.js.map +1 -0
  62. package/dist/core/retry.test.d.ts +2 -0
  63. package/dist/core/retry.test.d.ts.map +1 -0
  64. package/dist/core/retry.test.js +36 -0
  65. package/dist/core/retry.test.js.map +1 -0
  66. package/dist/core/schema.d.ts.map +1 -0
  67. package/dist/core/schema.js.map +1 -0
  68. package/dist/core/step.d.ts +120 -0
  69. package/dist/core/step.d.ts.map +1 -0
  70. package/dist/core/step.js +101 -0
  71. package/dist/core/step.js.map +1 -0
  72. package/dist/core/step.test.d.ts +2 -0
  73. package/dist/core/step.test.d.ts.map +1 -0
  74. package/dist/core/step.test.js +340 -0
  75. package/dist/core/step.test.js.map +1 -0
  76. package/dist/core/workflow.d.ts +108 -0
  77. package/dist/core/workflow.d.ts.map +1 -0
  78. package/dist/core/workflow.js +79 -0
  79. package/dist/core/workflow.js.map +1 -0
  80. package/dist/core/workflow.test.d.ts +2 -0
  81. package/dist/core/workflow.test.d.ts.map +1 -0
  82. package/dist/core/workflow.test.js +216 -0
  83. package/dist/core/workflow.test.js.map +1 -0
  84. package/dist/execution/execution.d.ts +91 -0
  85. package/dist/execution/execution.d.ts.map +1 -0
  86. package/dist/execution/execution.js +188 -0
  87. package/dist/execution/execution.js.map +1 -0
  88. package/dist/execution/execution.test.d.ts +2 -0
  89. package/dist/execution/execution.test.d.ts.map +1 -0
  90. package/dist/execution/execution.test.js +382 -0
  91. package/dist/execution/execution.test.js.map +1 -0
  92. package/dist/global.d.ts +62 -0
  93. package/dist/global.d.ts.map +1 -0
  94. package/dist/global.js +78 -0
  95. package/dist/global.js.map +1 -0
  96. package/dist/index.d.ts +9 -5
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +4 -3
  99. package/dist/index.js.map +1 -1
  100. package/dist/sdk/sdk.d.ts +182 -0
  101. package/dist/sdk/sdk.d.ts.map +1 -0
  102. package/dist/sdk/sdk.js +208 -0
  103. package/dist/sdk/sdk.js.map +1 -0
  104. package/dist/sdk/sdk.test.d.ts +2 -0
  105. package/dist/sdk/sdk.test.d.ts.map +1 -0
  106. package/dist/sdk/sdk.test.js +195 -0
  107. package/dist/sdk/sdk.test.js.map +1 -0
  108. package/dist/tsconfig.tsbuildinfo +1 -1
  109. package/dist/{worker.d.ts → worker/worker.d.ts} +3 -3
  110. package/dist/worker/worker.d.ts.map +1 -0
  111. package/dist/worker/worker.js +208 -0
  112. package/dist/worker/worker.js.map +1 -0
  113. package/dist/worker/worker.test.d.ts +2 -0
  114. package/dist/worker/worker.test.d.ts.map +1 -0
  115. package/dist/worker/worker.test.js +786 -0
  116. package/dist/worker/worker.test.js.map +1 -0
  117. package/package.json +6 -6
  118. package/dist/backend.d.ts +0 -173
  119. package/dist/backend.d.ts.map +0 -1
  120. package/dist/backend.js.map +0 -1
  121. package/dist/client.d.ts +0 -153
  122. package/dist/client.d.ts.map +0 -1
  123. package/dist/client.js +0 -151
  124. package/dist/client.js.map +0 -1
  125. package/dist/duration.d.ts.map +0 -1
  126. package/dist/duration.js.map +0 -1
  127. package/dist/schema.d.ts.map +0 -1
  128. package/dist/schema.js.map +0 -1
  129. package/dist/worker.d.ts.map +0 -1
  130. package/dist/worker.js +0 -384
  131. package/dist/worker.js.map +0 -1
  132. /package/dist/{schema.d.ts → core/schema.d.ts} +0 -0
  133. /package/dist/{schema.js → core/schema.js} +0 -0
@@ -0,0 +1,108 @@
1
+ import { JsonValue } from "./json.js";
2
+ import type { StandardSchemaV1 } from "./schema.js";
3
+ /**
4
+ * Status of a workflow run through its lifecycle.
5
+ */
6
+ export type WorkflowRunStatus = "pending" | "running" | "sleeping" | "succeeded" | "completed" | "failed" | "canceled";
7
+ /**
8
+ * WorkflowRun represents a single execution instance of a workflow.
9
+ */
10
+ export interface WorkflowRun {
11
+ namespaceId: string;
12
+ id: string;
13
+ workflowName: string;
14
+ version: string | null;
15
+ status: WorkflowRunStatus;
16
+ idempotencyKey: string | null;
17
+ config: JsonValue;
18
+ context: JsonValue | null;
19
+ input: JsonValue | null;
20
+ output: JsonValue | null;
21
+ error: JsonValue | null;
22
+ attempts: number;
23
+ parentStepAttemptNamespaceId: string | null;
24
+ parentStepAttemptId: string | null;
25
+ workerId: string | null;
26
+ availableAt: Date | null;
27
+ deadlineAt: Date | null;
28
+ startedAt: Date | null;
29
+ finishedAt: Date | null;
30
+ createdAt: Date;
31
+ updatedAt: Date;
32
+ }
33
+ /**
34
+ * Infers the input type from a Standard Schema.
35
+ */
36
+ export type SchemaInput<TSchema, Fallback> = TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferInput<TSchema> : Fallback;
37
+ /**
38
+ * Infers the output type from a Standard Schema.
39
+ */
40
+ export type SchemaOutput<TSchema, Fallback> = TSchema extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<TSchema> : Fallback;
41
+ /**
42
+ * Result of input validation - either success with a value or failure with an
43
+ * error message.
44
+ */
45
+ export type ValidationResult<T> = {
46
+ success: true;
47
+ value: T;
48
+ } | {
49
+ success: false;
50
+ error: string;
51
+ };
52
+ /**
53
+ * Configuration options for a workflow definition.
54
+ */
55
+ export interface WorkflowConfig<TSchema extends StandardSchemaV1 | undefined = undefined> {
56
+ /** The unique name of the workflow. */
57
+ name: string;
58
+ /** Optional version string for zero-downtime deployments. */
59
+ version?: string;
60
+ /** Optional schema for input validation (Standard Schema v1). */
61
+ schema?: TSchema;
62
+ }
63
+ /**
64
+ * Default configuration for result polling when awaiting workflow completion.
65
+ */
66
+ export declare const DEFAULT_WORKFLOW_RESULT_CONFIG: {
67
+ /** Polling interval in milliseconds (1 second) */
68
+ readonly pollIntervalMs: 1000;
69
+ /** Timeout in milliseconds (5 minutes) */
70
+ readonly timeoutMs: number;
71
+ };
72
+ /**
73
+ * Validate input against a Standard Schema. Pure async function that validates
74
+ * input and returns a ValidationResult.
75
+ *
76
+ * @param schema - The Standard Schema to validate against (or null/undefined
77
+ * for no validation)
78
+ * @param input - The input value to validate
79
+ * @returns A ValidationResult containing either the validated value or an error
80
+ * message
81
+ */
82
+ export declare function validateInput<RunInput, Input>(schema: StandardSchemaV1<RunInput, Input> | null | undefined, input: RunInput | undefined): Promise<ValidationResult<Input>>;
83
+ /**
84
+ * Create a workflow configuration object with defaults applied.
85
+ *
86
+ * @param config - The user-provided workflow configuration
87
+ * @returns A normalized workflow configuration
88
+ */
89
+ export declare function createWorkflowConfig<TSchema extends StandardSchemaV1 | undefined = undefined>(config: Readonly<WorkflowConfig<TSchema>>): Readonly<{
90
+ name: string;
91
+ version: string | null;
92
+ schema: TSchema | null;
93
+ }>;
94
+ /**
95
+ * Check if a workflow definition has a schema for validation.
96
+ *
97
+ * @param config - The workflow configuration
98
+ * @returns True if the workflow has a schema configured
99
+ */
100
+ export declare function hasSchema<TSchema extends StandardSchemaV1 | undefined>(config: Readonly<WorkflowConfig<TSchema>>): boolean;
101
+ /**
102
+ * Check if a workflow run status represents a terminal state.
103
+ *
104
+ * @param status - The workflow run status
105
+ * @returns True if the status is terminal (completed, failed, or canceled)
106
+ */
107
+ export declare function isTerminalStatus(status: string): status is "succeeded" | "completed" | "failed" | "canceled";
108
+ //# sourceMappingURL=workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../core/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Default configuration for result polling when awaiting workflow completion.
3
+ */
4
+ export const DEFAULT_WORKFLOW_RESULT_CONFIG = {
5
+ /** Polling interval in milliseconds (1 second) */
6
+ pollIntervalMs: 1000,
7
+ /** Timeout in milliseconds (5 minutes) */
8
+ timeoutMs: 5 * 60 * 1000,
9
+ };
10
+ /**
11
+ * Validate input against a Standard Schema. Pure async function that validates
12
+ * input and returns a ValidationResult.
13
+ *
14
+ * @param schema - The Standard Schema to validate against (or null/undefined
15
+ * for no validation)
16
+ * @param input - The input value to validate
17
+ * @returns A ValidationResult containing either the validated value or an error
18
+ * message
19
+ */
20
+ export async function validateInput(schema, input) {
21
+ // No schema means no validation - pass through as-is
22
+ if (!schema) {
23
+ return {
24
+ success: true,
25
+ value: input,
26
+ };
27
+ }
28
+ // Validate using Standard Schema v1 protocol https://standardschema.dev
29
+ const result = schema["~standard"].validate(input);
30
+ const resolved = await Promise.resolve(result);
31
+ if (resolved.issues) {
32
+ const messages = resolved.issues.length > 0
33
+ ? resolved.issues.map((issue) => issue.message).join("; ")
34
+ : "Validation failed";
35
+ return {
36
+ success: false,
37
+ error: messages,
38
+ };
39
+ }
40
+ return {
41
+ success: true,
42
+ value: resolved.value,
43
+ };
44
+ }
45
+ /**
46
+ * Create a workflow configuration object with defaults applied.
47
+ *
48
+ * @param config - The user-provided workflow configuration
49
+ * @returns A normalized workflow configuration
50
+ */
51
+ export function createWorkflowConfig(config) {
52
+ return {
53
+ name: config.name,
54
+ version: config.version ?? null,
55
+ schema: config.schema ?? null,
56
+ };
57
+ }
58
+ /**
59
+ * Check if a workflow definition has a schema for validation.
60
+ *
61
+ * @param config - The workflow configuration
62
+ * @returns True if the workflow has a schema configured
63
+ */
64
+ export function hasSchema(config) {
65
+ return Boolean(config.schema);
66
+ }
67
+ /**
68
+ * Check if a workflow run status represents a terminal state.
69
+ *
70
+ * @param status - The workflow run status
71
+ * @returns True if the status is terminal (completed, failed, or canceled)
72
+ */
73
+ export function isTerminalStatus(status) {
74
+ return (status === "succeeded" ||
75
+ status === "completed" ||
76
+ status === "failed" ||
77
+ status === "canceled");
78
+ }
79
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../core/workflow.ts"],"names":[],"mappings":"AA8EA;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,kDAAkD;IAClD,cAAc,EAAE,IAAI;IACpB,0CAA0C;IAC1C,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;CAChB,CAAC;AAEX;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA4D,EAC5D,KAA2B;IAE3B,qDAAqD;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,KAAyB;SACjC,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,CAAC,CAAC,mBAAmB,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAGlC,MAAyC;IAMzC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,MAAyC;IAEzC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAc;IAEd,OAAO,CACL,MAAM,KAAK,WAAW;QACtB,MAAM,KAAK,WAAW;QACtB,MAAM,KAAK,QAAQ;QACnB,MAAM,KAAK,UAAU,CACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=workflow.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.d.ts","sourceRoot":"","sources":["../../core/workflow.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,216 @@
1
+ import { validateInput, createWorkflowConfig, hasSchema, isTerminalStatus, DEFAULT_WORKFLOW_RESULT_CONFIG, } from "./workflow.js";
2
+ import { describe, expect, test } from "vitest";
3
+ describe("validateInput", () => {
4
+ test("returns success with input when no schema provided (null)", async () => {
5
+ const input = { name: "test", value: 42 };
6
+ const result = await validateInput(null, input);
7
+ expect(result.success).toBe(true);
8
+ if (result.success) {
9
+ expect(result.value).toBe(input);
10
+ }
11
+ });
12
+ test("returns success with input when no schema provided (undefined)", async () => {
13
+ const input = "string input";
14
+ const result = await validateInput(undefined, input);
15
+ expect(result.success).toBe(true);
16
+ if (result.success) {
17
+ expect(result.value).toBe(input);
18
+ }
19
+ });
20
+ test("validates input successfully against schema", async () => {
21
+ const schema = createMockSchema({
22
+ validate: (input) => ({ value: input }),
23
+ });
24
+ const input = { name: "test" };
25
+ const result = await validateInput(schema, input);
26
+ expect(result.success).toBe(true);
27
+ if (result.success) {
28
+ expect(result.value).toEqual({ name: "test" });
29
+ }
30
+ });
31
+ test("transforms input using schema", async () => {
32
+ const schema = createMockSchema({
33
+ validate: (input) => ({ value: Number.parseInt(input, 10) }),
34
+ });
35
+ const result = await validateInput(schema, "42");
36
+ expect(result.success).toBe(true);
37
+ if (result.success) {
38
+ expect(result.value).toBe(42);
39
+ }
40
+ });
41
+ test("returns failure with error message when validation fails", async () => {
42
+ const schema = createMockSchema({
43
+ validate: () => ({
44
+ issues: [{ message: "Invalid input" }],
45
+ }),
46
+ });
47
+ const result = await validateInput(schema, "bad input");
48
+ expect(result.success).toBe(false);
49
+ if (!result.success) {
50
+ expect(result.error).toBe("Invalid input");
51
+ }
52
+ });
53
+ test("combines multiple validation error messages", async () => {
54
+ const schema = createMockSchema({
55
+ validate: () => ({
56
+ issues: [
57
+ { message: "Invalid email format" },
58
+ { message: "Age must be positive" },
59
+ ],
60
+ }),
61
+ });
62
+ const result = await validateInput(schema, {
63
+ email: "invalid",
64
+ age: -5,
65
+ });
66
+ expect(result.success).toBe(false);
67
+ if (!result.success) {
68
+ expect(result.error).toBe("Invalid email format; Age must be positive");
69
+ }
70
+ });
71
+ test("returns generic message when issues array is empty", async () => {
72
+ const schema = createMockSchema({
73
+ validate: () => ({
74
+ issues: [],
75
+ }),
76
+ });
77
+ const result = await validateInput(schema, "test");
78
+ expect(result.success).toBe(false);
79
+ if (!result.success) {
80
+ expect(result.error).toBe("Validation failed");
81
+ }
82
+ });
83
+ test("handles async schema validation", async () => {
84
+ const schema = createMockSchema({
85
+ validate: async (input) => {
86
+ await new Promise((resolve) => setTimeout(resolve, 1));
87
+ return { value: input.toUpperCase() };
88
+ },
89
+ });
90
+ const result = await validateInput(schema, "hello");
91
+ expect(result.success).toBe(true);
92
+ if (result.success) {
93
+ expect(result.value).toBe("HELLO");
94
+ }
95
+ });
96
+ test("handles undefined input when no schema", async () => {
97
+ // eslint-disable-next-line unicorn/no-useless-undefined
98
+ const result = await validateInput(null, undefined);
99
+ expect(result.success).toBe(true);
100
+ if (result.success) {
101
+ expect(result.value).toBeUndefined();
102
+ }
103
+ });
104
+ });
105
+ describe("createWorkflowConfig", () => {
106
+ test("creates config with required name", () => {
107
+ const config = createWorkflowConfig({ name: "my-workflow" });
108
+ expect(config.name).toBe("my-workflow");
109
+ expect(config.version).toBeNull();
110
+ expect(config.schema).toBeNull();
111
+ });
112
+ test("preserves provided version", () => {
113
+ const config = createWorkflowConfig({
114
+ name: "versioned-workflow",
115
+ version: "1.0.0",
116
+ });
117
+ expect(config.name).toBe("versioned-workflow");
118
+ expect(config.version).toBe("1.0.0");
119
+ });
120
+ test("preserves provided schema", () => {
121
+ const schema = createMockSchema({
122
+ validate: (input) => ({ value: input }),
123
+ });
124
+ const config = createWorkflowConfig({
125
+ name: "validated-workflow",
126
+ schema,
127
+ });
128
+ expect(config.name).toBe("validated-workflow");
129
+ expect(config.schema).toBe(schema);
130
+ });
131
+ test("creates config with all options", () => {
132
+ const schema = createMockSchema({
133
+ validate: (input) => ({ value: input }),
134
+ });
135
+ const config = createWorkflowConfig({
136
+ name: "full-workflow",
137
+ version: "2.5.0",
138
+ schema,
139
+ });
140
+ expect(config.name).toBe("full-workflow");
141
+ expect(config.version).toBe("2.5.0");
142
+ expect(config.schema).toBe(schema);
143
+ });
144
+ test("returns frozen/readonly config object", () => {
145
+ const config = createWorkflowConfig({ name: "readonly-workflow" });
146
+ expect(config.name).toBe("readonly-workflow");
147
+ // The function signature specifies Readonly<>, so we trust type safety
148
+ });
149
+ });
150
+ describe("hasSchema", () => {
151
+ test("returns false when no schema provided", () => {
152
+ const config = { name: "no-schema-workflow" };
153
+ expect(hasSchema(config)).toBe(false);
154
+ });
155
+ test("returns false when schema is undefined", () => {
156
+ const config = { name: "undefined-schema", schema: undefined };
157
+ expect(hasSchema(config)).toBe(false);
158
+ });
159
+ test("returns true when schema is provided", () => {
160
+ const schema = createMockSchema({
161
+ validate: (input) => ({ value: input }),
162
+ });
163
+ const config = { name: "with-schema", schema };
164
+ expect(hasSchema(config)).toBe(true);
165
+ });
166
+ test("returns true for any truthy schema value", () => {
167
+ const config = { name: "truthy-schema", schema: {} };
168
+ expect(hasSchema(config)).toBe(true);
169
+ });
170
+ });
171
+ describe("isTerminalStatus", () => {
172
+ test("returns true for 'completed' status", () => {
173
+ expect(isTerminalStatus("completed")).toBe(true);
174
+ });
175
+ test("returns true for 'succeeded' status (deprecated)", () => {
176
+ expect(isTerminalStatus("succeeded")).toBe(true);
177
+ });
178
+ test("returns true for 'failed' status", () => {
179
+ expect(isTerminalStatus("failed")).toBe(true);
180
+ });
181
+ test("returns true for 'canceled' status", () => {
182
+ expect(isTerminalStatus("canceled")).toBe(true);
183
+ });
184
+ test("returns false for 'pending' status", () => {
185
+ expect(isTerminalStatus("pending")).toBe(false);
186
+ });
187
+ test("returns false for 'running' status", () => {
188
+ expect(isTerminalStatus("running")).toBe(false);
189
+ });
190
+ test("returns false for 'sleeping' status", () => {
191
+ expect(isTerminalStatus("sleeping")).toBe(false);
192
+ });
193
+ test("returns false for unknown status strings", () => {
194
+ expect(isTerminalStatus("unknown")).toBe(false);
195
+ expect(isTerminalStatus("")).toBe(false);
196
+ expect(isTerminalStatus("COMPLETED")).toBe(false);
197
+ });
198
+ });
199
+ describe("DEFAULT_WORKFLOW_RESULT_CONFIG", () => {
200
+ test("has expected poll interval", () => {
201
+ expect(DEFAULT_WORKFLOW_RESULT_CONFIG.pollIntervalMs).toBe(1000);
202
+ });
203
+ test("has expected timeout (5 minutes)", () => {
204
+ expect(DEFAULT_WORKFLOW_RESULT_CONFIG.timeoutMs).toBe(5 * 60 * 1000);
205
+ });
206
+ });
207
+ function createMockSchema(options) {
208
+ return {
209
+ "~standard": {
210
+ version: 1,
211
+ vendor: "test",
212
+ validate: options.validate,
213
+ },
214
+ };
215
+ }
216
+ //# sourceMappingURL=workflow.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.test.js","sourceRoot":"","sources":["../../core/workflow.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { Backend } from "../core/backend.js";
2
+ import type { DurationString } from "../core/duration.js";
3
+ import type { StepAttempt } from "../core/step.js";
4
+ import type { WorkflowRun } from "../core/workflow.js";
5
+ /**
6
+ * Config for an individual step defined with `step.run()`.
7
+ */
8
+ export interface StepFunctionConfig {
9
+ /**
10
+ * The name of the step.
11
+ */
12
+ name: string;
13
+ }
14
+ /**
15
+ * Represents the API for defining steps within a workflow. Used within a
16
+ * workflow handler to define steps by calling `step.run()`.
17
+ */
18
+ export interface StepApi {
19
+ run<Output>(config: Readonly<StepFunctionConfig>, fn: StepFunction<Output>): Promise<Output>;
20
+ sleep(name: string, duration: DurationString): Promise<void>;
21
+ }
22
+ /**
23
+ * The step definition (defined by the user) that executes user code. Can return
24
+ * undefined (e.g., when using `return;`) which will be converted to null.
25
+ */
26
+ export type StepFunction<Output> = () => Promise<Output | undefined> | Output | undefined;
27
+ /**
28
+ * Params passed to a workflow function for the user to use when defining steps.
29
+ */
30
+ export interface WorkflowFunctionParams<Input> {
31
+ input: Input;
32
+ step: StepApi;
33
+ version: string | null;
34
+ }
35
+ /**
36
+ * The workflow definition's function (defined by the user) that the user uses
37
+ * to define the workflow's steps.
38
+ */
39
+ export type WorkflowFunction<Input, Output> = (params: Readonly<WorkflowFunctionParams<Input>>) => Promise<Output> | Output;
40
+ /**
41
+ * Signal thrown when a workflow needs to sleep. Contains the time when the
42
+ * workflow should resume.
43
+ */
44
+ export declare class SleepSignal extends Error {
45
+ readonly resumeAt: Date;
46
+ constructor(resumeAt: Readonly<Date>);
47
+ }
48
+ /**
49
+ * Configures the options for a StepExecutor.
50
+ */
51
+ export interface StepExecutorOptions {
52
+ backend: Backend;
53
+ workflowRunId: string;
54
+ workerId: string;
55
+ attempts: StepAttempt[];
56
+ }
57
+ /**
58
+ * Replays prior step attempts and persists new ones while memoizing
59
+ * deterministic step outputs.
60
+ */
61
+ export declare class StepExecutor implements StepApi {
62
+ private readonly backend;
63
+ private readonly workflowRunId;
64
+ private readonly workerId;
65
+ private cache;
66
+ constructor(options: Readonly<StepExecutorOptions>);
67
+ run<Output>(config: Readonly<StepFunctionConfig>, fn: StepFunction<Output>): Promise<Output>;
68
+ sleep(name: string, duration: DurationString): Promise<void>;
69
+ }
70
+ /**
71
+ * Parameters for the workflow execution use case.
72
+ */
73
+ export interface ExecuteWorkflowParams {
74
+ backend: Backend;
75
+ workflowRun: WorkflowRun;
76
+ workflowFn: WorkflowFunction<unknown, unknown>;
77
+ workflowVersion: string | null;
78
+ workerId: string;
79
+ }
80
+ /**
81
+ * Execute a workflow run. This is the core application use case that handles:
82
+ * - Loading step history
83
+ * - Handling sleeping steps
84
+ * - Creating the step executor
85
+ * - Executing the workflow function
86
+ * - Completing, failing, or sleeping the workflow run based on the outcome
87
+ *
88
+ * @param params - The execution parameters
89
+ */
90
+ export declare function executeWorkflow(params: Readonly<ExecuteWorkflowParams>): Promise<void>;
91
+ //# sourceMappingURL=execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../execution/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,iBAAiB,CAAC;AAUrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,CAAC,MAAM,EACR,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9D;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,MAAM,IAAI,MAC/B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAC3B,MAAM,GACN,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,KAAK;IAC3C,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,KAAK,EAAE,MAAM,IAAI,CAC5C,MAAM,EAAE,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,KAC5C,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAE9B;;;GAGG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;gBAEZ,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;CAKrC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,OAAO;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,KAAK,CAAmB;gBAEpB,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAC;IAQ5C,GAAG,CAAC,MAAM,EACd,MAAM,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EACpC,EAAE,EAAE,YAAY,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,MAAM,CAAC;IAgDZ,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BnE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CA4Ff"}