@5minds/processcube_engine_client 5.1.9 → 5.1.10-hotfix-02690d-m767lzkh
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/ExternalTaskExecution.d.ts +9 -10
- package/dist/ExternalTaskWorker.d.ts +1 -0
- package/dist/commonjs/ExternalTaskExecution.js +89 -56
- package/dist/commonjs/ExternalTaskExecution.js.map +1 -1
- package/dist/commonjs/ExternalTaskWorker.js +11 -1
- package/dist/commonjs/ExternalTaskWorker.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,23 +7,22 @@ export declare class ExternalTaskExecution<TExternalTaskPayload, TResultPayload
|
|
|
7
7
|
private externalTaskClient;
|
|
8
8
|
private config;
|
|
9
9
|
private topic;
|
|
10
|
-
private
|
|
10
|
+
private abortExecutionController;
|
|
11
11
|
private customErrorHandler?;
|
|
12
12
|
private interval;
|
|
13
|
-
private abortSignalSubscription;
|
|
14
|
-
private awaitAbortSignal;
|
|
15
|
-
private abortSignalResolver;
|
|
16
13
|
private identityAccessor;
|
|
17
14
|
private logger;
|
|
18
|
-
|
|
15
|
+
private isDisposed;
|
|
16
|
+
constructor(externalTask: ExternalTask<TExternalTaskPayload>, processingFunction: HandleExternalTaskAction<TExternalTaskPayload, TResultPayload>, externalTaskClient: ExternalTaskApiClient, config: IExternalTaskWorkerConfig, topic: string, customErrorHandler?: WorkerErrorHandler);
|
|
17
|
+
get disposed(): boolean;
|
|
19
18
|
execute(): Promise<void>;
|
|
19
|
+
abort(): void;
|
|
20
|
+
private dispose;
|
|
20
21
|
private processResult;
|
|
21
22
|
private handleExternalTaskExecutionError;
|
|
22
|
-
private dispose;
|
|
23
|
-
private stopLockingInterval;
|
|
24
|
-
private startAbortSignalSubscription;
|
|
25
|
-
private removeAbortSignalSubscription;
|
|
26
23
|
private startExtendLockInterval;
|
|
27
24
|
private extendLocks;
|
|
28
|
-
private
|
|
25
|
+
private stopExtendLockInterval;
|
|
26
|
+
private evaluateError;
|
|
27
|
+
private sleep;
|
|
29
28
|
}
|
|
@@ -15,6 +15,7 @@ export declare class ExternalTaskWorker<TExternalTaskPayload, TResultPayload ext
|
|
|
15
15
|
private onHeartbeatCallback;
|
|
16
16
|
private abortController;
|
|
17
17
|
private abortSignal;
|
|
18
|
+
private activelyProcessedExternalTasks;
|
|
18
19
|
constructor(engineUrl: string, topic: string, processingFunction: HandleExternalTaskAction<TExternalTaskPayload, TResultPayload>, config?: IExternalTaskWorkerConfig);
|
|
19
20
|
/**
|
|
20
21
|
* @deprecated Use getIdentity instead.
|
|
@@ -9,22 +9,19 @@ class ExternalTaskExecution {
|
|
|
9
9
|
externalTaskClient;
|
|
10
10
|
config;
|
|
11
11
|
topic;
|
|
12
|
-
|
|
12
|
+
abortExecutionController = new AbortController();
|
|
13
13
|
customErrorHandler;
|
|
14
14
|
interval;
|
|
15
|
-
abortSignalSubscription;
|
|
16
|
-
awaitAbortSignal;
|
|
17
|
-
abortSignalResolver;
|
|
18
15
|
identityAccessor;
|
|
19
16
|
logger;
|
|
20
|
-
|
|
17
|
+
isDisposed = false;
|
|
18
|
+
constructor(externalTask, processingFunction, externalTaskClient, config, topic, customErrorHandler) {
|
|
21
19
|
this.externalTask = externalTask;
|
|
22
20
|
this.processingFunction = processingFunction;
|
|
23
21
|
this.externalTaskClient = externalTaskClient;
|
|
24
22
|
this.config = config;
|
|
25
23
|
this.identityAccessor = IdentityAccessor_1.IdentityAccessor.wrap(config.identity, this.externalTaskClient.getEngineUrl());
|
|
26
24
|
this.topic = topic;
|
|
27
|
-
this.abortSignal = abortSignal;
|
|
28
25
|
this.customErrorHandler = customErrorHandler;
|
|
29
26
|
this.logger = new processcube_engine_sdk_1.Logger('external_task_execution', {
|
|
30
27
|
workerId: config.workerId,
|
|
@@ -32,100 +29,136 @@ class ExternalTaskExecution {
|
|
|
32
29
|
topic: topic,
|
|
33
30
|
});
|
|
34
31
|
}
|
|
32
|
+
get disposed() {
|
|
33
|
+
return this.isDisposed;
|
|
34
|
+
}
|
|
35
35
|
async execute() {
|
|
36
36
|
try {
|
|
37
|
-
this.abortSignal.throwIfAborted();
|
|
38
|
-
this.startAbortSignalSubscription();
|
|
39
37
|
this.startExtendLockInterval();
|
|
40
|
-
const result = await
|
|
41
|
-
this.
|
|
42
|
-
this.
|
|
38
|
+
const result = await this.processingFunction(this.externalTask.payload, this.externalTask, this.abortExecutionController.signal);
|
|
39
|
+
this.stopExtendLockInterval();
|
|
40
|
+
if (this.abortExecutionController.signal.aborted) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
43
|
if (result) {
|
|
44
44
|
await this.processResult(result);
|
|
45
45
|
}
|
|
46
|
+
this.dispose();
|
|
46
47
|
}
|
|
47
48
|
catch (error) {
|
|
48
|
-
this.
|
|
49
|
+
this.logger.error(`Error raised for external task '${this.externalTask.id}' with topic '${this.topic}': `, { err: error });
|
|
50
|
+
await this.evaluateError('processExternalTask', error);
|
|
49
51
|
await this.handleExternalTaskExecutionError(error);
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
52
|
this.dispose();
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
+
abort() {
|
|
56
|
+
this.logger.debug(`Abort Signal has been triggered for External Task Executor ${this.externalTask.id}`);
|
|
57
|
+
this.dispose();
|
|
58
|
+
}
|
|
59
|
+
async dispose() {
|
|
60
|
+
this.logger.debug(`Disposong Executor for External Task ${this.externalTask.id}`);
|
|
61
|
+
this.stopExtendLockInterval();
|
|
62
|
+
if (!this.abortExecutionController.signal.aborted) {
|
|
63
|
+
this.abortExecutionController.abort();
|
|
64
|
+
}
|
|
65
|
+
this.isDisposed = true;
|
|
66
|
+
// we explicitly do not dispose the identityAccessor here, since it is shared with the ExternalTaskWorker
|
|
67
|
+
}
|
|
55
68
|
async processResult(result) {
|
|
69
|
+
if (this.abortExecutionController.signal.aborted) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.logger.trace(`Processing External Task Result ${this.externalTask.id}`, { externalTask: this.externalTask, result: result });
|
|
56
73
|
try {
|
|
57
74
|
if (result instanceof processcube_engine_sdk_1.ExternalTaskError || result instanceof Error) {
|
|
75
|
+
this.logger.trace(`External Task Result ${this.externalTask.id} is an error. The task will be finished as failed.`, { externalTask: this.externalTask, result: result });
|
|
58
76
|
return await this.handleExternalTaskExecutionError(result);
|
|
59
77
|
}
|
|
60
|
-
|
|
78
|
+
this.logger.trace(`Finishing ${this.externalTask.id} regularly.`, { externalTask: this.externalTask, result: result });
|
|
79
|
+
return await this.externalTaskClient.finishExternalTask(this.config.workerId, this.externalTask.id, result, await this.identityAccessor.getIdentity(), this.abortExecutionController.signal);
|
|
61
80
|
}
|
|
62
81
|
catch (error) {
|
|
63
|
-
this.
|
|
82
|
+
const errorIsRetryable = await this.evaluateError('finishExternalTask', error);
|
|
83
|
+
if (errorIsRetryable && !this.abortExecutionController.signal.aborted) {
|
|
84
|
+
await this.sleep(1000);
|
|
85
|
+
return await this.processResult(result);
|
|
86
|
+
}
|
|
64
87
|
}
|
|
65
88
|
}
|
|
66
89
|
async handleExternalTaskExecutionError(error) {
|
|
67
|
-
if (this.
|
|
90
|
+
if (this.abortExecutionController.signal.aborted) {
|
|
68
91
|
return;
|
|
69
92
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
async dispose() {
|
|
75
|
-
this.removeAbortSignalSubscription();
|
|
76
|
-
this.stopLockingInterval();
|
|
77
|
-
// we explicitly do not dispose the identityAccessor here, since it is shared with the ExternalTaskWorker
|
|
78
|
-
}
|
|
79
|
-
stopLockingInterval() {
|
|
80
|
-
if (this.interval) {
|
|
81
|
-
clearInterval(this.interval);
|
|
82
|
-
this.interval = undefined;
|
|
93
|
+
try {
|
|
94
|
+
this.logger.trace(`Reporting Error for External Task ${this.externalTask.id} to Engine`);
|
|
95
|
+
const workerError = new processcube_engine_sdk_1.ExternalTaskError(error?.errorCode || error?.name || 'ExternalTaskExecutionError', error?.errorMessage || error?.message || 'An error occurred while processing the external task.', error?.errorDetails || error?.stack || 'No error details available.');
|
|
96
|
+
return await this.externalTaskClient.handleError(this.config.workerId, this.externalTask.id, workerError, await this.identityAccessor.getIdentity());
|
|
83
97
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
this.abortSignalResolver();
|
|
98
|
+
catch (error) {
|
|
99
|
+
const errorIsRetryable = await this.evaluateError('finishExternalTask', error);
|
|
100
|
+
if (errorIsRetryable && !this.abortExecutionController.signal.aborted) {
|
|
101
|
+
await this.sleep(1000);
|
|
102
|
+
return await this.handleExternalTaskExecutionError(error);
|
|
90
103
|
}
|
|
91
|
-
this.dispose();
|
|
92
|
-
};
|
|
93
|
-
this.abortSignal.addEventListener('abort', this.abortSignalSubscription);
|
|
94
|
-
}
|
|
95
|
-
removeAbortSignalSubscription() {
|
|
96
|
-
if (this.abortSignalSubscription) {
|
|
97
|
-
this.abortSignal.removeEventListener('abort', this.abortSignalSubscription);
|
|
98
|
-
}
|
|
99
|
-
if (this.abortSignalResolver) {
|
|
100
|
-
this.abortSignalResolver();
|
|
101
104
|
}
|
|
102
105
|
}
|
|
103
106
|
startExtendLockInterval() {
|
|
104
107
|
const lockExtensionBuffer = 5000;
|
|
108
|
+
this.logger.trace(`Starting automatic Lock extension for External Task ${this.externalTask.id}`);
|
|
105
109
|
this.interval = setInterval(async () => this.extendLocks(this.externalTask), this.config.lockDuration - lockExtensionBuffer);
|
|
106
110
|
}
|
|
107
111
|
async extendLocks(externalTask) {
|
|
112
|
+
if (this.abortExecutionController.signal.aborted) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
108
115
|
try {
|
|
109
|
-
|
|
116
|
+
this.logger.debug(`Extending Lock on External Task ${this.externalTask.id}`);
|
|
117
|
+
await this.externalTaskClient.extendLock(this.config.workerId, externalTask.id, this.config.lockDuration, await this.identityAccessor.getIdentity(), this.abortExecutionController.signal);
|
|
110
118
|
}
|
|
111
119
|
catch (error) {
|
|
112
|
-
this.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
const errorIsRetryable = await this.evaluateError('extendLock', error);
|
|
121
|
+
if (errorIsRetryable && !this.abortExecutionController.signal.aborted) {
|
|
122
|
+
await this.sleep(1000);
|
|
123
|
+
await this.extendLocks(externalTask);
|
|
124
|
+
}
|
|
116
125
|
}
|
|
117
126
|
}
|
|
118
|
-
|
|
127
|
+
stopExtendLockInterval() {
|
|
128
|
+
this.logger.debug(`Disposing automatic Lock Extension for External Task ${this.externalTask.id}`);
|
|
129
|
+
if (this.interval) {
|
|
130
|
+
clearInterval(this.interval);
|
|
131
|
+
this.interval = undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async evaluateError(errorType, error) {
|
|
135
|
+
if (this.abortExecutionController.signal.aborted) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
119
138
|
if (typeof this.customErrorHandler === 'function') {
|
|
139
|
+
this.logger.trace(`Posting error for external task ${this.externalTask.id} to subscribed custom error handlers`, { errorType: errorType, err: error });
|
|
120
140
|
this.customErrorHandler(errorType, error, this.externalTask);
|
|
121
141
|
}
|
|
142
|
+
if (error.code === 409) {
|
|
143
|
+
this.logger.warn(`Failed to run ${errorType} for External Task ${this.externalTask.id} because the task has already been finished. Aborting now, since there is nothing more to do here.`, { err: error });
|
|
144
|
+
this.abort();
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
this.logger.warn(`An error occured while executing ${errorType} for External Task ${this.externalTask.id}`, { err: error });
|
|
122
148
|
if (error.message?.match(/expired/i) && this.identityAccessor.canIdentityBeRefreshed()) {
|
|
123
149
|
this.logger.info('Identity has expired. Refreshing identity to get a new auth token...');
|
|
124
|
-
this.identityAccessor
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
.catch((refreshError) => this.logger.error('Identity refresh failed', { err: refreshError }));
|
|
150
|
+
await this.identityAccessor.forceImmediateIdentityRefresh();
|
|
151
|
+
this.logger.info('Identity refresh completed. Retrying to process External Task now.');
|
|
152
|
+
return true;
|
|
128
153
|
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
async sleep(milliseconds) {
|
|
157
|
+
return new Promise((resolve) => {
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
resolve();
|
|
160
|
+
}, milliseconds);
|
|
161
|
+
});
|
|
129
162
|
}
|
|
130
163
|
}
|
|
131
164
|
exports.ExternalTaskExecution = ExternalTaskExecution;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalTaskExecution.js","sourceRoot":"","sources":["../../src/ExternalTaskExecution.ts"],"names":[],"mappings":";;;AAAA,2EAAyF;AAGzF,yDAAsD;AAGtD,MAAa,qBAAqB;IACxB,YAAY,CAAqC;IACjD,kBAAkB,CAAiE;IACnF,kBAAkB,CAAwB;IAC1C,MAAM,CAA4B;IAClC,KAAK,CAAS;IACd,
|
|
1
|
+
{"version":3,"file":"ExternalTaskExecution.js","sourceRoot":"","sources":["../../src/ExternalTaskExecution.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,7 @@ class ExternalTaskWorker {
|
|
|
55
55
|
onHeartbeatCallback = null;
|
|
56
56
|
abortController;
|
|
57
57
|
abortSignal;
|
|
58
|
+
activelyProcessedExternalTasks = {};
|
|
58
59
|
constructor(engineUrl, topic, processingFunction, config) {
|
|
59
60
|
this._workerId = config?.workerId ?? uuid.v4();
|
|
60
61
|
this.topic = topic;
|
|
@@ -97,6 +98,10 @@ class ExternalTaskWorker {
|
|
|
97
98
|
this._pollingActive = true;
|
|
98
99
|
this.abortController = new AbortController();
|
|
99
100
|
this.abortSignal = this.abortController.signal;
|
|
101
|
+
this.abortSignal.onabort = () => {
|
|
102
|
+
Object.values(this.activelyProcessedExternalTasks).forEach((executor) => executor.abort());
|
|
103
|
+
this.activelyProcessedExternalTasks = {};
|
|
104
|
+
};
|
|
100
105
|
this.processExternalTasks();
|
|
101
106
|
}
|
|
102
107
|
stop() {
|
|
@@ -106,6 +111,7 @@ class ExternalTaskWorker {
|
|
|
106
111
|
}
|
|
107
112
|
}
|
|
108
113
|
dispose() {
|
|
114
|
+
this.stop();
|
|
109
115
|
this.externalTaskClient.dispose();
|
|
110
116
|
this.identityAccessor?.dispose();
|
|
111
117
|
}
|
|
@@ -162,7 +168,8 @@ class ExternalTaskWorker {
|
|
|
162
168
|
maxTasks: this.maxTasks,
|
|
163
169
|
payloadFilter: this.payloadFilter,
|
|
164
170
|
workerId: this.workerId,
|
|
165
|
-
}, this.topic, this.
|
|
171
|
+
}, this.topic, this.customErrorHandler);
|
|
172
|
+
this.activelyProcessedExternalTasks[externalTask.id] = externalTaskExecution;
|
|
166
173
|
await externalTaskExecution.execute();
|
|
167
174
|
}
|
|
168
175
|
catch (error) {
|
|
@@ -171,6 +178,9 @@ class ExternalTaskWorker {
|
|
|
171
178
|
}
|
|
172
179
|
logger.warn(`External Task ${externalTask.id} could not be processed.`, { err: error });
|
|
173
180
|
}
|
|
181
|
+
finally {
|
|
182
|
+
delete this.activelyProcessedExternalTasks[externalTask.id];
|
|
183
|
+
}
|
|
174
184
|
}
|
|
175
185
|
async sleep(milliseconds) {
|
|
176
186
|
return new Promise((resolve) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalTaskWorker.js","sourceRoot":"","sources":["../../src/ExternalTaskWorker.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B,2EAAgF;AAEhF,mFAA4E;AAC5E,mEAAgE;AAChE,yDAAsD;AAGtD,MAAM,MAAM,GAAG,IAAI,+BAAM,CAAC,sBAAsB,CAAC,CAAC;AAElD,MAAa,kBAAkB;IACZ,SAAS,CAAS;IAClB,YAAY,CAAS;IACrB,KAAK,CAAS;IACd,QAAQ,CAAS;IACjB,kBAAkB,CAAS;IAC3B,kBAAkB,CAAiE;IACnF,aAAa,CAAS;IAE/B,gBAAgB,CAAmB;IACnC,cAAc,GAAG,KAAK,CAAC;IACvB,kBAAkB,CAAwB;IAC1C,kBAAkB,GAAuB,IAAI,CAAC;IAC9C,mBAAmB,GAAe,IAAI,CAAC;IACvC,eAAe,CAAkB;IACjC,WAAW,CAAc;
|
|
1
|
+
{"version":3,"file":"ExternalTaskWorker.js","sourceRoot":"","sources":["../../src/ExternalTaskWorker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"utf-8-validate": "Not used by the client directly, but a requirement of the 'ws' sub-dependency. Since it is not available in the browser, the client would be unusable for the APP SDK, if we did not install it explicitly here"
|
|
5
5
|
},
|
|
6
6
|
"name": "@5minds/processcube_engine_client",
|
|
7
|
-
"version": "5.1.
|
|
7
|
+
"version": "5.1.10-hotfix-02690d-m767lzkh",
|
|
8
8
|
"description": "Contains a typescript based client for accessing the Engine.",
|
|
9
9
|
"main": "dist/commonjs/index.js",
|
|
10
10
|
"types": "dist/index.d.ts",
|