@acmekit/workflows-sdk 2.13.37 → 2.13.39
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/helper/type.d.ts +5 -0
- package/dist/helper/type.d.ts.map +1 -1
- package/dist/helper/workflow-export.d.ts +4 -1
- package/dist/helper/workflow-export.d.ts.map +1 -1
- package/dist/helper/workflow-export.js +44 -5
- package/dist/helper/workflow-export.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/composer/create-step.d.ts +14 -21
- package/dist/utils/composer/create-step.d.ts.map +1 -1
- package/dist/utils/composer/create-step.js +16 -70
- package/dist/utils/composer/create-step.js.map +1 -1
- package/dist/utils/composer/create-workflow.d.ts +17 -13
- package/dist/utils/composer/create-workflow.d.ts.map +1 -1
- package/dist/utils/composer/create-workflow.js +12 -65
- package/dist/utils/composer/create-workflow.js.map +1 -1
- package/dist/utils/composer/helpers/create-step-handler.d.ts +1 -1
- package/dist/utils/composer/helpers/create-step-handler.d.ts.map +1 -1
- package/dist/utils/composer/helpers/create-step-handler.js +97 -51
- package/dist/utils/composer/helpers/create-step-handler.js.map +1 -1
- package/dist/utils/composer/index.d.ts +4 -0
- package/dist/utils/composer/index.d.ts.map +1 -1
- package/dist/utils/composer/index.js +7 -0
- package/dist/utils/composer/index.js.map +1 -1
- package/dist/utils/composer/metadata.d.ts +37 -0
- package/dist/utils/composer/metadata.d.ts.map +1 -0
- package/dist/utils/composer/metadata.js +134 -0
- package/dist/utils/composer/metadata.js.map +1 -0
- package/dist/utils/composer/query.d.ts +38 -0
- package/dist/utils/composer/query.d.ts.map +1 -0
- package/dist/utils/composer/query.js +55 -0
- package/dist/utils/composer/query.js.map +1 -0
- package/dist/utils/composer/signal.d.ts +42 -0
- package/dist/utils/composer/signal.d.ts.map +1 -0
- package/dist/utils/composer/signal.js +117 -0
- package/dist/utils/composer/signal.js.map +1 -0
- package/dist/utils/composer/type.d.ts +35 -3
- package/dist/utils/composer/type.d.ts.map +1 -1
- package/dist/utils/composer/type.js +12 -0
- package/dist/utils/composer/type.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workflow.js","sourceRoot":"","sources":["../../../src/utils/composer/create-workflow.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"create-workflow.js","sourceRoot":"","sources":["../../../src/utils/composer/create-workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { CreateWorkflowComposerContext, WorkflowData } from "../type";
|
|
|
4
4
|
import { StepResponse } from "./step-response";
|
|
5
5
|
export declare function createStepHandler<TInvokeInput, TStepInput extends {
|
|
6
6
|
[K in keyof TInvokeInput]: WorkflowData<TInvokeInput[K]>;
|
|
7
|
-
}, TInvokeResultOutput, TInvokeResultCompensateInput>(this: CreateWorkflowComposerContext, { stepName, input, invokeFn, compensateFn, }: ApplyStepOptions<TStepInput, TInvokeInput, TInvokeResultOutput, TInvokeResultCompensateInput>): {
|
|
7
|
+
}, TInvokeResultOutput, TInvokeResultCompensateInput>(this: CreateWorkflowComposerContext, { stepName, input, invokeFn, compensateFn, inputSchema, outputSchema, }: ApplyStepOptions<TStepInput, TInvokeInput, TInvokeResultOutput, TInvokeResultCompensateInput>): {
|
|
8
8
|
invoke: (stepArguments: WorkflowStepHandlerArguments) => Promise<{
|
|
9
9
|
__type: string;
|
|
10
10
|
output: StepResponse<any, any> | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-step-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/composer/helpers/create-step-handler.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"create-step-handler.d.ts","sourceRoot":"","sources":["../../../../src/utils/composer/helpers/create-step-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAG7B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EACL,6BAA6B,EAE7B,YAAY,EAEb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAgD9C,wBAAgB,iBAAiB,CAC/B,YAAY,EACZ,UAAU,SAAS;KAChB,CAAC,IAAI,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CACzD,EACD,mBAAmB,EACnB,4BAA4B,EAE5B,IAAI,EAAE,6BAA6B,EACnC,EACE,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,GACb,EAAE,gBAAgB,CACjB,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,4BAA4B,CAC7B;4BAG+B,4BAA4B;;;;;;;;iCA6EhC,4BAA4B;;;EAwCzD"}
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createStepHandler = createStepHandler;
|
|
4
|
+
const orchestration_1 = require("@acmekit/orchestration");
|
|
4
5
|
const utils_1 = require("@acmekit/utils");
|
|
6
|
+
const type_1 = require("../type");
|
|
5
7
|
const resolve_value_1 = require("./resolve-value");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
8
|
+
const step_response_1 = require("./step-response");
|
|
9
|
+
function buildStepContext({ action, stepArguments, workflowMetadata, }) {
|
|
10
|
+
const transactionMetadata = stepArguments.metadata;
|
|
11
|
+
const idempotencyKey = transactionMetadata.idempotency_key;
|
|
9
12
|
stepArguments.context.idempotencyKey = idempotencyKey;
|
|
10
13
|
const flow = stepArguments.transaction.getFlow();
|
|
11
14
|
const flowMetadata = flow?.metadata;
|
|
12
15
|
const stepDefinition = stepArguments.step.definition;
|
|
13
16
|
const executionContext = {
|
|
14
|
-
workflowId:
|
|
15
|
-
stepName:
|
|
17
|
+
workflowId: transactionMetadata.model_id,
|
|
18
|
+
stepName: transactionMetadata.action,
|
|
16
19
|
action,
|
|
17
20
|
idempotencyKey,
|
|
18
|
-
attempt:
|
|
21
|
+
attempt: transactionMetadata.attempt,
|
|
19
22
|
container: stepArguments.container,
|
|
20
|
-
metadata,
|
|
23
|
+
metadata: workflowMetadata,
|
|
24
|
+
" transactionMetadata": transactionMetadata,
|
|
21
25
|
eventGroupId: flowMetadata?.eventGroupId ?? stepArguments.context.eventGroupId,
|
|
22
26
|
parentStepIdempotencyKey: flowMetadata?.parentStepIdempotencyKey,
|
|
23
27
|
preventReleaseEvents: flowMetadata?.preventReleaseEvents ?? false,
|
|
@@ -31,62 +35,104 @@ function buildStepContext({ action, stepArguments, }) {
|
|
|
31
35
|
};
|
|
32
36
|
return executionContext;
|
|
33
37
|
}
|
|
34
|
-
function createStepHandler({ stepName, input, invokeFn, compensateFn, }) {
|
|
38
|
+
function createStepHandler({ stepName, input, invokeFn, compensateFn, inputSchema, outputSchema, }) {
|
|
35
39
|
const handler = {
|
|
36
40
|
invoke: async (stepArguments) => {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
const flow = stepArguments.transaction.getFlow();
|
|
42
|
+
const workflowMetadata = new orchestration_1.WorkflowMetadata(flow);
|
|
43
|
+
return (0, orchestration_1.runWithMetadata)(workflowMetadata, async () => {
|
|
44
|
+
const executionContext = buildStepContext({
|
|
45
|
+
action: "invoke",
|
|
46
|
+
stepArguments,
|
|
47
|
+
workflowMetadata,
|
|
48
|
+
});
|
|
49
|
+
let argInput = {};
|
|
50
|
+
if (input) {
|
|
51
|
+
argInput = (0, resolve_value_1.resolveValue)(input, stepArguments);
|
|
52
|
+
if (argInput instanceof Promise) {
|
|
53
|
+
argInput = await argInput;
|
|
54
|
+
}
|
|
46
55
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
if (inputSchema) {
|
|
57
|
+
try {
|
|
58
|
+
argInput = (0, type_1.runSchema)(inputSchema, argInput);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
62
|
+
err.message = `Step "${stepName}" input validation failed: ${err.message}`;
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
let stepResponse = await invokeFn.apply(this, [
|
|
67
|
+
argInput,
|
|
68
|
+
executionContext,
|
|
69
|
+
]);
|
|
70
|
+
if (outputSchema && stepResponse) {
|
|
71
|
+
const isStepResp = stepResponse &&
|
|
72
|
+
typeof stepResponse === "object" &&
|
|
73
|
+
stepResponse.__type ===
|
|
74
|
+
utils_1.OrchestrationUtils.SymbolWorkflowStepResponse;
|
|
75
|
+
const raw = isStepResp ? stepResponse.output : stepResponse;
|
|
76
|
+
try {
|
|
77
|
+
const parsed = (0, type_1.runSchema)(outputSchema, raw);
|
|
78
|
+
if (isStepResp) {
|
|
79
|
+
stepResponse = new step_response_1.StepResponse(parsed, stepResponse.compensateInput);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
stepResponse = parsed;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
87
|
+
err.message = `Step "${stepName}" output validation failed: ${err.message}`;
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (!stepResponse || typeof stepResponse !== "object") {
|
|
92
|
+
return {
|
|
93
|
+
__type: utils_1.OrchestrationUtils.SymbolWorkflowWorkflowData,
|
|
94
|
+
output: stepResponse,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const stepResponseJSON = stepResponse.__type === utils_1.OrchestrationUtils.SymbolWorkflowStepResponse
|
|
98
|
+
? stepResponse.toJSON()
|
|
99
|
+
: stepResponse;
|
|
53
100
|
return {
|
|
54
101
|
__type: utils_1.OrchestrationUtils.SymbolWorkflowWorkflowData,
|
|
55
|
-
output:
|
|
102
|
+
output: stepResponseJSON,
|
|
56
103
|
};
|
|
57
|
-
}
|
|
58
|
-
const stepResponseJSON = stepResponse.__type === utils_1.OrchestrationUtils.SymbolWorkflowStepResponse
|
|
59
|
-
? stepResponse.toJSON()
|
|
60
|
-
: stepResponse;
|
|
61
|
-
return {
|
|
62
|
-
__type: utils_1.OrchestrationUtils.SymbolWorkflowWorkflowData,
|
|
63
|
-
output: stepResponseJSON,
|
|
64
|
-
};
|
|
104
|
+
});
|
|
65
105
|
},
|
|
66
106
|
compensate: compensateFn
|
|
67
107
|
? async (stepArguments) => {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
108
|
+
const flow = stepArguments.transaction.getFlow();
|
|
109
|
+
const workflowMetadata = new orchestration_1.WorkflowMetadata(flow);
|
|
110
|
+
return (0, orchestration_1.runWithMetadata)(workflowMetadata, async () => {
|
|
111
|
+
const executionContext = buildStepContext({
|
|
112
|
+
action: "compensate",
|
|
113
|
+
stepArguments,
|
|
114
|
+
workflowMetadata,
|
|
115
|
+
});
|
|
116
|
+
const stepOutput = stepArguments.invoke[stepName]?.output;
|
|
117
|
+
if (!stepOutput) {
|
|
118
|
+
const output = await compensateFn.apply(this, [
|
|
119
|
+
stepOutput,
|
|
120
|
+
executionContext,
|
|
121
|
+
]);
|
|
122
|
+
return { output };
|
|
123
|
+
}
|
|
124
|
+
const invokeResult = stepOutput.__type ===
|
|
125
|
+
utils_1.OrchestrationUtils.SymbolWorkflowStepResponse
|
|
126
|
+
? stepOutput.compensateInput
|
|
127
|
+
: stepOutput;
|
|
74
128
|
const output = await compensateFn.apply(this, [
|
|
75
|
-
|
|
129
|
+
invokeResult,
|
|
76
130
|
executionContext,
|
|
77
131
|
]);
|
|
78
|
-
return {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
: stepOutput;
|
|
83
|
-
const output = await compensateFn.apply(this, [
|
|
84
|
-
invokeResult,
|
|
85
|
-
executionContext,
|
|
86
|
-
]);
|
|
87
|
-
return {
|
|
88
|
-
output,
|
|
89
|
-
};
|
|
132
|
+
return {
|
|
133
|
+
output,
|
|
134
|
+
};
|
|
135
|
+
});
|
|
90
136
|
}
|
|
91
137
|
: undefined,
|
|
92
138
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-step-handler.js","sourceRoot":"","sources":["../../../../src/utils/composer/helpers/create-step-handler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"create-step-handler.js","sourceRoot":"","sources":["../../../../src/utils/composer/helpers/create-step-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,11 @@ export * from "./helpers/step-response";
|
|
|
5
5
|
export * from "./helpers/workflow-response";
|
|
6
6
|
export * from "./create-hook";
|
|
7
7
|
export * from "./parallelize";
|
|
8
|
+
export * from "./query";
|
|
9
|
+
export * from "./signal";
|
|
8
10
|
export * from "./transform";
|
|
9
11
|
export * from "./type";
|
|
10
12
|
export * from "./when";
|
|
13
|
+
export { metadata } from "./metadata";
|
|
14
|
+
export { WorkflowMetadata } from "@acmekit/orchestration";
|
|
11
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/composer/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/composer/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.WorkflowMetadata = exports.metadata = void 0;
|
|
17
18
|
__exportStar(require("./create-step"), exports);
|
|
18
19
|
__exportStar(require("./create-workflow"), exports);
|
|
19
20
|
__exportStar(require("./helpers/resolve-value"), exports);
|
|
@@ -21,7 +22,13 @@ __exportStar(require("./helpers/step-response"), exports);
|
|
|
21
22
|
__exportStar(require("./helpers/workflow-response"), exports);
|
|
22
23
|
__exportStar(require("./create-hook"), exports);
|
|
23
24
|
__exportStar(require("./parallelize"), exports);
|
|
25
|
+
__exportStar(require("./query"), exports);
|
|
26
|
+
__exportStar(require("./signal"), exports);
|
|
24
27
|
__exportStar(require("./transform"), exports);
|
|
25
28
|
__exportStar(require("./type"), exports);
|
|
26
29
|
__exportStar(require("./when"), exports);
|
|
30
|
+
var metadata_1 = require("./metadata");
|
|
31
|
+
Object.defineProperty(exports, "metadata", { enumerable: true, get: function () { return metadata_1.metadata; } });
|
|
32
|
+
var orchestration_1 = require("@acmekit/orchestration");
|
|
33
|
+
Object.defineProperty(exports, "WorkflowMetadata", { enumerable: true, get: function () { return orchestration_1.WorkflowMetadata; } });
|
|
27
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/composer/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/composer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,oDAAiC;AACjC,0DAAuC;AACvC,0DAAuC;AACvC,8DAA2C;AAC3C,gDAA6B;AAC7B,gDAA6B;AAC7B,0CAAuB;AACvB,2CAAwB;AACxB,8CAA2B;AAC3B,yCAAsB;AACtB,yCAAsB;AACtB,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA;AACjB,wDAAyD;AAAhD,iHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { WorkflowMetadata } from "@acmekit/orchestration";
|
|
2
|
+
/**
|
|
3
|
+
* Unified metadata accessor. Works in all contexts:
|
|
4
|
+
*
|
|
5
|
+
* 1. **Inside step functions / query handlers / transform callbacks** —
|
|
6
|
+
* Reads and writes go directly to the workflow's `flow.customMetadata`
|
|
7
|
+
* via `AsyncLocalStorage`.
|
|
8
|
+
*
|
|
9
|
+
* 2. **Inside the workflow definition body** (same level as `transform()`,
|
|
10
|
+
* `when()`) — Each write creates a lightweight internal step that
|
|
11
|
+
* executes at runtime. `metadata.get()` creates a transform that
|
|
12
|
+
* returns a `WorkflowData` proxy.
|
|
13
|
+
*
|
|
14
|
+
* 3. **Outside any context** — Safe no-op. Reads return `undefined`,
|
|
15
|
+
* writes are silent.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import { createStep, createWorkflow, metadata, StepResponse } from "@acmekit/framework/workflows-sdk"
|
|
19
|
+
*
|
|
20
|
+
* const step1 = createStep("step1", async () => {
|
|
21
|
+
* metadata.set("stage", "processing") // direct write
|
|
22
|
+
* return new StepResponse("ok")
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* const step2 = createStep("step2", async () => {
|
|
26
|
+
* return new StepResponse({ stage: metadata.get("stage") })
|
|
27
|
+
* })
|
|
28
|
+
*
|
|
29
|
+
* createWorkflow("my-wf", (input) => {
|
|
30
|
+
* step1()
|
|
31
|
+
* metadata.set("source", "workflow") // creates internal step
|
|
32
|
+
* const source = metadata.get("source") // creates transform → WorkflowData
|
|
33
|
+
* return step2()
|
|
34
|
+
* })
|
|
35
|
+
*/
|
|
36
|
+
export declare const metadata: WorkflowMetadata;
|
|
37
|
+
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/utils/composer/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEjB,MAAM,wBAAwB,CAAA;AA+G/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,QAAQ,EAAE,gBAcrB,CAAA"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.metadata = void 0;
|
|
4
|
+
const orchestration_1 = require("@acmekit/orchestration");
|
|
5
|
+
const utils_1 = require("@acmekit/utils");
|
|
6
|
+
const ulid_1 = require("ulid");
|
|
7
|
+
const create_step_1 = require("./create-step");
|
|
8
|
+
const step_response_1 = require("./helpers/step-response");
|
|
9
|
+
const transform_1 = require("./transform");
|
|
10
|
+
/**
|
|
11
|
+
* No-op metadata implementation used when called outside any context.
|
|
12
|
+
*/
|
|
13
|
+
const noopMetadata = {
|
|
14
|
+
get: () => undefined,
|
|
15
|
+
set: () => exports.metadata,
|
|
16
|
+
del: () => exports.metadata,
|
|
17
|
+
current: () => ({}),
|
|
18
|
+
append: () => exports.metadata,
|
|
19
|
+
remove: () => exports.metadata,
|
|
20
|
+
increment: () => exports.metadata,
|
|
21
|
+
decrement: () => exports.metadata,
|
|
22
|
+
};
|
|
23
|
+
function getComposerContext() {
|
|
24
|
+
return global[utils_1.OrchestrationUtils.SymbolAcmeKitWorkflowComposerContext];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Composer-level handlers — create internal steps / transforms
|
|
28
|
+
* so that metadata operations participate in the workflow DAG.
|
|
29
|
+
*/
|
|
30
|
+
const composerHandlers = {
|
|
31
|
+
set(key, value) {
|
|
32
|
+
const step = (0, create_step_1.createStep)(`set-metadata-${(0, ulid_1.ulid)()}`, async (input) => {
|
|
33
|
+
exports.metadata.set(input.key, input.value);
|
|
34
|
+
return new step_response_1.StepResponse(void 0);
|
|
35
|
+
});
|
|
36
|
+
step({ key, value });
|
|
37
|
+
return exports.metadata;
|
|
38
|
+
},
|
|
39
|
+
get(key) {
|
|
40
|
+
return (0, transform_1.transform)({}, () => exports.metadata.get(key));
|
|
41
|
+
},
|
|
42
|
+
del(key) {
|
|
43
|
+
const step = (0, create_step_1.createStep)(`del-metadata-${(0, ulid_1.ulid)()}`, async (input) => {
|
|
44
|
+
exports.metadata.del(input.key);
|
|
45
|
+
return new step_response_1.StepResponse(void 0);
|
|
46
|
+
});
|
|
47
|
+
step({ key });
|
|
48
|
+
return exports.metadata;
|
|
49
|
+
},
|
|
50
|
+
current() {
|
|
51
|
+
return (0, transform_1.transform)({}, () => exports.metadata.current());
|
|
52
|
+
},
|
|
53
|
+
append(key, value) {
|
|
54
|
+
const step = (0, create_step_1.createStep)(`append-metadata-${(0, ulid_1.ulid)()}`, async (input) => {
|
|
55
|
+
exports.metadata.append(input.key, input.value);
|
|
56
|
+
return new step_response_1.StepResponse(void 0);
|
|
57
|
+
});
|
|
58
|
+
step({ key, value });
|
|
59
|
+
return exports.metadata;
|
|
60
|
+
},
|
|
61
|
+
remove(key, value) {
|
|
62
|
+
const step = (0, create_step_1.createStep)(`remove-metadata-${(0, ulid_1.ulid)()}`, async (input) => {
|
|
63
|
+
exports.metadata.remove(input.key, input.value);
|
|
64
|
+
return new step_response_1.StepResponse(void 0);
|
|
65
|
+
});
|
|
66
|
+
step({ key, value });
|
|
67
|
+
return exports.metadata;
|
|
68
|
+
},
|
|
69
|
+
increment(key, amount) {
|
|
70
|
+
const step = (0, create_step_1.createStep)(`increment-metadata-${(0, ulid_1.ulid)()}`, async (input) => {
|
|
71
|
+
exports.metadata.increment(input.key, input.amount);
|
|
72
|
+
return new step_response_1.StepResponse(void 0);
|
|
73
|
+
});
|
|
74
|
+
step({ key, amount: amount ?? 1 });
|
|
75
|
+
return exports.metadata;
|
|
76
|
+
},
|
|
77
|
+
decrement(key, amount) {
|
|
78
|
+
const step = (0, create_step_1.createStep)(`decrement-metadata-${(0, ulid_1.ulid)()}`, async (input) => {
|
|
79
|
+
exports.metadata.decrement(input.key, input.amount);
|
|
80
|
+
return new step_response_1.StepResponse(void 0);
|
|
81
|
+
});
|
|
82
|
+
step({ key, amount: amount ?? 1 });
|
|
83
|
+
return exports.metadata;
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Unified metadata accessor. Works in all contexts:
|
|
88
|
+
*
|
|
89
|
+
* 1. **Inside step functions / query handlers / transform callbacks** —
|
|
90
|
+
* Reads and writes go directly to the workflow's `flow.customMetadata`
|
|
91
|
+
* via `AsyncLocalStorage`.
|
|
92
|
+
*
|
|
93
|
+
* 2. **Inside the workflow definition body** (same level as `transform()`,
|
|
94
|
+
* `when()`) — Each write creates a lightweight internal step that
|
|
95
|
+
* executes at runtime. `metadata.get()` creates a transform that
|
|
96
|
+
* returns a `WorkflowData` proxy.
|
|
97
|
+
*
|
|
98
|
+
* 3. **Outside any context** — Safe no-op. Reads return `undefined`,
|
|
99
|
+
* writes are silent.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* import { createStep, createWorkflow, metadata, StepResponse } from "@acmekit/framework/workflows-sdk"
|
|
103
|
+
*
|
|
104
|
+
* const step1 = createStep("step1", async () => {
|
|
105
|
+
* metadata.set("stage", "processing") // direct write
|
|
106
|
+
* return new StepResponse("ok")
|
|
107
|
+
* })
|
|
108
|
+
*
|
|
109
|
+
* const step2 = createStep("step2", async () => {
|
|
110
|
+
* return new StepResponse({ stage: metadata.get("stage") })
|
|
111
|
+
* })
|
|
112
|
+
*
|
|
113
|
+
* createWorkflow("my-wf", (input) => {
|
|
114
|
+
* step1()
|
|
115
|
+
* metadata.set("source", "workflow") // creates internal step
|
|
116
|
+
* const source = metadata.get("source") // creates transform → WorkflowData
|
|
117
|
+
* return step2()
|
|
118
|
+
* })
|
|
119
|
+
*/
|
|
120
|
+
exports.metadata = new Proxy(noopMetadata, {
|
|
121
|
+
get(_target, prop, _receiver) {
|
|
122
|
+
// 1. Inside step / query / transform execution (AsyncLocalStorage active)
|
|
123
|
+
const store = (0, orchestration_1.getActiveMetadataStore)();
|
|
124
|
+
if (store)
|
|
125
|
+
return store[prop];
|
|
126
|
+
// 2. Inside workflow composer body (definition time)
|
|
127
|
+
if (getComposerContext() && prop in composerHandlers) {
|
|
128
|
+
return composerHandlers[prop];
|
|
129
|
+
}
|
|
130
|
+
// 3. No-op fallback
|
|
131
|
+
return noopMetadata[prop];
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/utils/composer/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { QueryDefinition } from "@acmekit/orchestration";
|
|
2
|
+
export type { QueryDefinition };
|
|
3
|
+
/**
|
|
4
|
+
* Define a query that can be invoked on a running workflow instance.
|
|
5
|
+
*
|
|
6
|
+
* @typeParam TResult - The type of the query result.
|
|
7
|
+
* @param name - A unique query name.
|
|
8
|
+
* @returns A query definition to be used with `query()` inside workflows and `.query()` from outside.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const statusQuery = defineQuery<string>("status")
|
|
12
|
+
*/
|
|
13
|
+
export declare function defineQuery<TResult = unknown>(name: string): QueryDefinition<TResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Register a query handler in the current workflow.
|
|
16
|
+
*
|
|
17
|
+
* Creates no flow graph entry and no step. Queries allow external callers
|
|
18
|
+
* to read workflow state without advancing the state machine or writing a checkpoint.
|
|
19
|
+
*
|
|
20
|
+
* The `key` function is per-query — different queries in the same workflow
|
|
21
|
+
* can route by different keys.
|
|
22
|
+
*
|
|
23
|
+
* @param def - The query definition (from `defineQuery`).
|
|
24
|
+
* @param opts - Configuration for the query.
|
|
25
|
+
* @param opts.key - A function that extracts the routing key from the workflow input.
|
|
26
|
+
* @param opts.handler - The handler function that returns the query result.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* query(statusQuery, {
|
|
30
|
+
* key: (input) => input.orderId,
|
|
31
|
+
* handler: ({ context, flow }) => flow.state
|
|
32
|
+
* })
|
|
33
|
+
*/
|
|
34
|
+
export declare function query<TResult>(def: QueryDefinition<TResult>, opts: {
|
|
35
|
+
key?: (input: any) => string;
|
|
36
|
+
handler: (ctx: any) => TResult;
|
|
37
|
+
}): void;
|
|
38
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/utils/composer/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAMxD,YAAY,EAAE,eAAe,EAAE,CAAA;AAE/B;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAG,OAAO,EAC3C,IAAI,EAAE,MAAM,GACX,eAAe,CAAC,OAAO,CAAC,CAK1B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAC3B,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,EAC7B,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAA;IAC5B,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAA;CAC/B,GACA,IAAI,CAkBN"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineQuery = defineQuery;
|
|
4
|
+
exports.query = query;
|
|
5
|
+
const utils_1 = require("@acmekit/utils");
|
|
6
|
+
/**
|
|
7
|
+
* Define a query that can be invoked on a running workflow instance.
|
|
8
|
+
*
|
|
9
|
+
* @typeParam TResult - The type of the query result.
|
|
10
|
+
* @param name - A unique query name.
|
|
11
|
+
* @returns A query definition to be used with `query()` inside workflows and `.query()` from outside.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const statusQuery = defineQuery<string>("status")
|
|
15
|
+
*/
|
|
16
|
+
function defineQuery(name) {
|
|
17
|
+
return {
|
|
18
|
+
name,
|
|
19
|
+
__type: "query_definition",
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Register a query handler in the current workflow.
|
|
24
|
+
*
|
|
25
|
+
* Creates no flow graph entry and no step. Queries allow external callers
|
|
26
|
+
* to read workflow state without advancing the state machine or writing a checkpoint.
|
|
27
|
+
*
|
|
28
|
+
* The `key` function is per-query — different queries in the same workflow
|
|
29
|
+
* can route by different keys.
|
|
30
|
+
*
|
|
31
|
+
* @param def - The query definition (from `defineQuery`).
|
|
32
|
+
* @param opts - Configuration for the query.
|
|
33
|
+
* @param opts.key - A function that extracts the routing key from the workflow input.
|
|
34
|
+
* @param opts.handler - The handler function that returns the query result.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* query(statusQuery, {
|
|
38
|
+
* key: (input) => input.orderId,
|
|
39
|
+
* handler: ({ context, flow }) => flow.state
|
|
40
|
+
* })
|
|
41
|
+
*/
|
|
42
|
+
function query(def, opts) {
|
|
43
|
+
const context = global[utils_1.OrchestrationUtils.SymbolAcmeKitWorkflowComposerContext];
|
|
44
|
+
if (!context) {
|
|
45
|
+
throw new Error("query() must be used inside a createWorkflow definition");
|
|
46
|
+
}
|
|
47
|
+
// Store the query registration for runtime wiring
|
|
48
|
+
context.queryRegistrations_ ??= [];
|
|
49
|
+
context.queryRegistrations_.push({
|
|
50
|
+
name: def.name,
|
|
51
|
+
keyFn: opts.key,
|
|
52
|
+
handler: opts.handler,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/utils/composer/query.ts"],"names":[],"mappings":";;AAkBA,kCAOC;AAsBD,sBAwBC;AAtED,0CAAmD;AAOnD;;;;;;;;;GASG;AACH,SAAgB,WAAW,CACzB,IAAY;IAEZ,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,kBAAkB;KACC,CAAA;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,KAAK,CACnB,GAA6B,EAC7B,IAGC;IAED,MAAM,OAAO,GAAG,MAAM,CACpB,0BAAkB,CAAC,oCAAoC,CACvB,CAAA;IAElC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAA;IACH,CAAC;IAED,kDAAkD;IAClD,OAAO,CAAC,mBAAmB,KAAK,EAAE,CAAA;IAClC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC/B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,IAAI,CAAC,GAAG;QACf,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SignalDefinition } from "@acmekit/orchestration";
|
|
2
|
+
import { WorkflowData } from "./type";
|
|
3
|
+
export type { SignalDefinition };
|
|
4
|
+
/**
|
|
5
|
+
* Define a signal that can be sent to a running workflow instance.
|
|
6
|
+
*
|
|
7
|
+
* @typeParam TPayload - The type of the payload the signal carries.
|
|
8
|
+
* @param name - A unique signal name.
|
|
9
|
+
* @returns A signal definition to be used with `signal()` inside workflows and `.signal()` from outside.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const approvalSignal = defineSignal<{ approvedBy: string }>("approval")
|
|
13
|
+
*/
|
|
14
|
+
export declare function defineSignal<TPayload = unknown>(name: string): SignalDefinition<TPayload>;
|
|
15
|
+
/**
|
|
16
|
+
* Register a signal step in the current workflow.
|
|
17
|
+
*
|
|
18
|
+
* Sets `definition.signal = { name, key, timeout }` on the step.
|
|
19
|
+
* Does not wrap createStep — adds the action directly to the flow graph
|
|
20
|
+
* with a no-op handler that returns void (so the orchestrator treats it
|
|
21
|
+
* as an awaiting async step).
|
|
22
|
+
*
|
|
23
|
+
* The `key` function is called at composition time with the workflow `input`
|
|
24
|
+
* proxy, producing a `WorkflowData` reference. At runtime, the handler resolves
|
|
25
|
+
* the key from the transaction context, sets it on `step.definition.signal.key`,
|
|
26
|
+
* and registers the signal in the signal index for O(1) routing.
|
|
27
|
+
*
|
|
28
|
+
* @param def - The signal definition (from `defineSignal`).
|
|
29
|
+
* @param opts - Configuration for the signal step.
|
|
30
|
+
* @param opts.key - A function that extracts the routing key from the workflow input.
|
|
31
|
+
* @param opts.timeout - Optional timeout as a number (seconds) or duration string (e.g. "7d").
|
|
32
|
+
* @returns WorkflowData containing the signal payload when delivered.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* const byOrderId = (input: { orderId: string }) => input.orderId
|
|
36
|
+
* const approval = signal(approvalSignal, { key: byOrderId, timeout: "7d" })
|
|
37
|
+
*/
|
|
38
|
+
export declare function signal<TPayload>(def: SignalDefinition<TPayload>, opts?: {
|
|
39
|
+
key?: (input: any) => string;
|
|
40
|
+
timeout?: number | string;
|
|
41
|
+
}): WorkflowData<TPayload>;
|
|
42
|
+
//# sourceMappingURL=signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/utils/composer/signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAEjB,MAAM,wBAAwB,CAAA;AAK/B,OAAO,EAEL,YAAY,EACb,MAAM,QAAQ,CAAA;AAEf,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAEhC;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,GAAG,OAAO,EAC7C,IAAI,EAAE,MAAM,GACX,gBAAgB,CAAC,QAAQ,CAAC,CAK5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAC7B,GAAG,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAC/B,IAAI,GAAE;IACJ,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACrB,GACL,YAAY,CAAC,QAAQ,CAAC,CA0FxB"}
|