@medusajs/orchestration 3.0.0-preview-20250410180148 → 3.0.0-preview-20251201152819
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/joiner/remote-joiner.d.ts +3 -2
- package/dist/joiner/remote-joiner.d.ts.map +1 -1
- package/dist/joiner/remote-joiner.js +312 -141
- package/dist/joiner/remote-joiner.js.map +1 -1
- package/dist/transaction/datastore/abstract-storage.d.ts +7 -5
- package/dist/transaction/datastore/abstract-storage.d.ts.map +1 -1
- package/dist/transaction/datastore/abstract-storage.js +3 -3
- package/dist/transaction/datastore/abstract-storage.js.map +1 -1
- package/dist/transaction/datastore/base-in-memory-storage.d.ts +2 -1
- package/dist/transaction/datastore/base-in-memory-storage.d.ts.map +1 -1
- package/dist/transaction/datastore/base-in-memory-storage.js +2 -0
- package/dist/transaction/datastore/base-in-memory-storage.js.map +1 -1
- package/dist/transaction/distributed-transaction.d.ts +23 -6
- package/dist/transaction/distributed-transaction.d.ts.map +1 -1
- package/dist/transaction/distributed-transaction.js +284 -54
- package/dist/transaction/distributed-transaction.js.map +1 -1
- package/dist/transaction/errors.d.ts +11 -0
- package/dist/transaction/errors.d.ts.map +1 -1
- package/dist/transaction/errors.js +34 -2
- package/dist/transaction/errors.js.map +1 -1
- package/dist/transaction/transaction-orchestrator.d.ts +99 -10
- package/dist/transaction/transaction-orchestrator.d.ts.map +1 -1
- package/dist/transaction/transaction-orchestrator.js +599 -274
- package/dist/transaction/transaction-orchestrator.js.map +1 -1
- package/dist/transaction/transaction-step.d.ts +2 -0
- package/dist/transaction/transaction-step.d.ts.map +1 -1
- package/dist/transaction/transaction-step.js +10 -3
- package/dist/transaction/transaction-step.js.map +1 -1
- package/dist/transaction/types.d.ts +31 -1
- package/dist/transaction/types.d.ts.map +1 -1
- package/dist/transaction/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/workflow/global-workflow.d.ts.map +1 -1
- package/dist/workflow/global-workflow.js +16 -4
- package/dist/workflow/global-workflow.js.map +1 -1
- package/dist/workflow/local-workflow.d.ts +3 -1
- package/dist/workflow/local-workflow.d.ts.map +1 -1
- package/dist/workflow/local-workflow.js +71 -9
- package/dist/workflow/local-workflow.js.map +1 -1
- package/package.json +8 -26
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DistributedTransactionType } from "./distributed-transaction";
|
|
2
|
-
import { TransactionStepHandler } from "./transaction-step";
|
|
3
|
-
import { TransactionFlow, TransactionModelOptions, TransactionOptions, TransactionStepsDefinition } from "./types";
|
|
2
|
+
import { TransactionStep, TransactionStepHandler } from "./transaction-step";
|
|
3
|
+
import { StepFeatures, TransactionFlow, TransactionModelOptions, TransactionOptions, TransactionStepsDefinition } from "./types";
|
|
4
|
+
import { Context } from "@medusajs/types";
|
|
4
5
|
import { EventEmitter } from "events";
|
|
5
6
|
/**
|
|
6
7
|
* @class TransactionOrchestrator is responsible for managing and executing distributed transactions.
|
|
@@ -44,13 +45,15 @@ export declare class TransactionOrchestrator extends EventEmitter {
|
|
|
44
45
|
options?: TransactionModelOptions;
|
|
45
46
|
isClone?: boolean;
|
|
46
47
|
});
|
|
48
|
+
static isExpectedError(error: Error): boolean;
|
|
47
49
|
static clone(orchestrator: TransactionOrchestrator): TransactionOrchestrator;
|
|
48
50
|
private static SEPARATOR;
|
|
49
51
|
static getKeyName(...params: string[]): string;
|
|
50
|
-
private getPreviousStep;
|
|
52
|
+
private static getPreviousStep;
|
|
51
53
|
getOptions(): TransactionModelOptions;
|
|
52
54
|
private getInvokeSteps;
|
|
53
55
|
private getCompensationSteps;
|
|
56
|
+
private static countSiblings;
|
|
54
57
|
private canMoveForward;
|
|
55
58
|
private canMoveBackward;
|
|
56
59
|
private canContinue;
|
|
@@ -58,12 +61,54 @@ export declare class TransactionOrchestrator extends EventEmitter {
|
|
|
58
61
|
private checkTransactionTimeout;
|
|
59
62
|
private checkStepTimeout;
|
|
60
63
|
private checkAllSteps;
|
|
64
|
+
private computeCurrentTransactionState;
|
|
61
65
|
private flagStepsToRevert;
|
|
62
66
|
private static setStepSuccess;
|
|
67
|
+
private static retryStep;
|
|
63
68
|
private static skipStep;
|
|
64
69
|
private static setStepTimeout;
|
|
65
70
|
private static setStepFailure;
|
|
66
71
|
private executeNext;
|
|
72
|
+
/**
|
|
73
|
+
* Finalize the transaction when all steps are complete
|
|
74
|
+
*/
|
|
75
|
+
private finalizeTransaction;
|
|
76
|
+
/**
|
|
77
|
+
* Prepare a step for execution by setting state and incrementing attempts
|
|
78
|
+
*/
|
|
79
|
+
private prepareStepForExecution;
|
|
80
|
+
/**
|
|
81
|
+
* Create the payload for a step execution
|
|
82
|
+
*/
|
|
83
|
+
private createStepPayload;
|
|
84
|
+
/**
|
|
85
|
+
* Prepare handler arguments for step execution
|
|
86
|
+
*/
|
|
87
|
+
private prepareHandlerArgs;
|
|
88
|
+
/**
|
|
89
|
+
* Create the step execution promise with optional tracing
|
|
90
|
+
*/
|
|
91
|
+
private createStepExecutionPromise;
|
|
92
|
+
/**
|
|
93
|
+
* Execute a synchronous step and handle its result
|
|
94
|
+
*/
|
|
95
|
+
private executeSyncStep;
|
|
96
|
+
/**
|
|
97
|
+
* Execute an asynchronous step and handle its result
|
|
98
|
+
*/
|
|
99
|
+
private executeAsyncStep;
|
|
100
|
+
/**
|
|
101
|
+
* Check if step or transaction has expired and handle timeouts
|
|
102
|
+
*/
|
|
103
|
+
private handleStepExpiration;
|
|
104
|
+
/**
|
|
105
|
+
* Handle successful step completion
|
|
106
|
+
*/
|
|
107
|
+
private handleStepSuccess;
|
|
108
|
+
/**
|
|
109
|
+
* Handle step failure
|
|
110
|
+
*/
|
|
111
|
+
private handleStepFailure;
|
|
67
112
|
/**
|
|
68
113
|
* Start a new transaction or resume a transaction that has been previously started
|
|
69
114
|
* @param transaction - The transaction to resume
|
|
@@ -73,23 +118,38 @@ export declare class TransactionOrchestrator extends EventEmitter {
|
|
|
73
118
|
* Cancel and revert a transaction compensating all its executed steps. It can be an ongoing transaction or a completed one
|
|
74
119
|
* @param transaction - The transaction to be reverted
|
|
75
120
|
*/
|
|
76
|
-
cancelTransaction(transaction: DistributedTransactionType
|
|
121
|
+
cancelTransaction(transaction: DistributedTransactionType, options?: {
|
|
122
|
+
preventExecuteNext?: boolean;
|
|
123
|
+
}): Promise<void>;
|
|
77
124
|
private parseFlowOptions;
|
|
78
125
|
private createTransactionFlow;
|
|
79
126
|
private static loadTransactionById;
|
|
80
|
-
|
|
127
|
+
static buildSteps(flow: TransactionStepsDefinition, existingSteps?: {
|
|
128
|
+
[key: string]: TransactionStep;
|
|
129
|
+
}): [{
|
|
130
|
+
[key: string]: TransactionStep;
|
|
131
|
+
}, StepFeatures];
|
|
81
132
|
/** Create a new transaction
|
|
82
133
|
* @param transactionId - unique identifier of the transaction
|
|
83
134
|
* @param handler - function to handle action of the transaction
|
|
84
135
|
* @param payload - payload to be passed to all the transaction steps
|
|
85
136
|
* @param flowMetadata - flow metadata which can include event group id for example
|
|
86
137
|
*/
|
|
87
|
-
beginTransaction(transactionId
|
|
138
|
+
beginTransaction({ transactionId, handler, payload, flowMetadata, context, onLoad, }: {
|
|
139
|
+
transactionId: string;
|
|
140
|
+
handler: TransactionStepHandler;
|
|
141
|
+
payload?: unknown;
|
|
142
|
+
flowMetadata?: TransactionFlow["metadata"];
|
|
143
|
+
context?: Context;
|
|
144
|
+
onLoad?: (transaction: DistributedTransactionType) => Promise<void> | void;
|
|
145
|
+
}): Promise<DistributedTransactionType>;
|
|
88
146
|
/** Returns an existing transaction
|
|
89
147
|
* @param transactionId - unique identifier of the transaction
|
|
90
148
|
* @param handler - function to handle action of the transaction
|
|
91
149
|
*/
|
|
92
|
-
retrieveExistingTransaction(transactionId: string, handler: TransactionStepHandler
|
|
150
|
+
retrieveExistingTransaction(transactionId: string, handler: TransactionStepHandler, options?: {
|
|
151
|
+
isCancelling?: boolean;
|
|
152
|
+
}): Promise<DistributedTransactionType>;
|
|
93
153
|
private static getStepByAction;
|
|
94
154
|
private static getTransactionAndStepFromIdempotencyKey;
|
|
95
155
|
/** Skip the execution of a specific transaction and step
|
|
@@ -97,14 +157,36 @@ export declare class TransactionOrchestrator extends EventEmitter {
|
|
|
97
157
|
* @param handler - The handler function to execute the step
|
|
98
158
|
* @param transaction - The current transaction. If not provided it will be loaded based on the responseIdempotencyKey
|
|
99
159
|
*/
|
|
100
|
-
skipStep(responseIdempotencyKey
|
|
160
|
+
skipStep({ responseIdempotencyKey, handler, transaction, }: {
|
|
161
|
+
responseIdempotencyKey: string;
|
|
162
|
+
handler?: TransactionStepHandler;
|
|
163
|
+
transaction?: DistributedTransactionType;
|
|
164
|
+
}): Promise<DistributedTransactionType>;
|
|
165
|
+
/**
|
|
166
|
+
* Manually force a step to retry even if it is still in awaiting status
|
|
167
|
+
* @param responseIdempotencyKey - The idempotency key for the step
|
|
168
|
+
* @param handler - The handler function to execute the step
|
|
169
|
+
* @param transaction - The current transaction. If not provided it will be loaded based on the responseIdempotencyKey
|
|
170
|
+
*/
|
|
171
|
+
retryStep({ responseIdempotencyKey, handler, transaction, onLoad, }: {
|
|
172
|
+
responseIdempotencyKey: string;
|
|
173
|
+
handler?: TransactionStepHandler;
|
|
174
|
+
transaction?: DistributedTransactionType;
|
|
175
|
+
onLoad?: (transaction: DistributedTransactionType) => Promise<void> | void;
|
|
176
|
+
}): Promise<DistributedTransactionType>;
|
|
101
177
|
/** Register a step success for a specific transaction and step
|
|
102
178
|
* @param responseIdempotencyKey - The idempotency key for the step
|
|
103
179
|
* @param handler - The handler function to execute the step
|
|
104
180
|
* @param transaction - The current transaction. If not provided it will be loaded based on the responseIdempotencyKey
|
|
105
181
|
* @param response - The response of the step
|
|
106
182
|
*/
|
|
107
|
-
registerStepSuccess(responseIdempotencyKey
|
|
183
|
+
registerStepSuccess({ responseIdempotencyKey, handler, transaction, response, onLoad, }: {
|
|
184
|
+
responseIdempotencyKey: string;
|
|
185
|
+
handler?: TransactionStepHandler;
|
|
186
|
+
transaction?: DistributedTransactionType;
|
|
187
|
+
response?: unknown;
|
|
188
|
+
onLoad?: (transaction: DistributedTransactionType) => Promise<void> | void;
|
|
189
|
+
}): Promise<DistributedTransactionType>;
|
|
108
190
|
/**
|
|
109
191
|
* Register a step failure for a specific transaction and step
|
|
110
192
|
* @param responseIdempotencyKey - The idempotency key for the step
|
|
@@ -113,6 +195,13 @@ export declare class TransactionOrchestrator extends EventEmitter {
|
|
|
113
195
|
* @param transaction - The current transaction
|
|
114
196
|
* @param response - The response of the step
|
|
115
197
|
*/
|
|
116
|
-
registerStepFailure(responseIdempotencyKey
|
|
198
|
+
registerStepFailure({ responseIdempotencyKey, error, handler, transaction, onLoad, forcePermanentFailure, }: {
|
|
199
|
+
responseIdempotencyKey: string;
|
|
200
|
+
error?: Error | any;
|
|
201
|
+
handler?: TransactionStepHandler;
|
|
202
|
+
transaction?: DistributedTransactionType;
|
|
203
|
+
onLoad?: (transaction: DistributedTransactionType) => Promise<void> | void;
|
|
204
|
+
forcePermanentFailure?: boolean;
|
|
205
|
+
}): Promise<DistributedTransactionType>;
|
|
117
206
|
}
|
|
118
207
|
//# sourceMappingURL=transaction-orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-orchestrator.d.ts","sourceRoot":"","sources":["../../src/transaction/transaction-orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"transaction-orchestrator.d.ts","sourceRoot":"","sources":["../../src/transaction/transaction-orchestrator.ts"],"names":[],"mappings":"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"}
|