nestjs-temporal-core 2.0.2 → 2.0.3
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/README.md +135 -21
- package/dist/client/temporal-client.module.js +41 -14
- package/dist/client/temporal-client.module.js.map +1 -1
- package/dist/client/temporal-client.service.d.ts +4 -7
- package/dist/client/temporal-client.service.js +14 -5
- package/dist/client/temporal-client.service.js.map +1 -1
- package/dist/constants.d.ts +34 -1
- package/dist/constants.js +35 -2
- package/dist/constants.js.map +1 -1
- package/dist/decorators/activity-method.decorator.d.ts +8 -1
- package/dist/decorators/activity-method.decorator.js +21 -3
- package/dist/decorators/activity-method.decorator.js.map +1 -1
- package/dist/decorators/activity.decorator.d.ts +5 -1
- package/dist/decorators/activity.decorator.js +3 -3
- package/dist/decorators/activity.decorator.js.map +1 -1
- package/dist/decorators/workflow.decorator.d.ts +16 -2
- package/dist/decorators/workflow.decorator.js +11 -4
- package/dist/decorators/workflow.decorator.js.map +1 -1
- package/dist/interfaces/base.interface.d.ts +4 -2
- package/dist/interfaces/client.interface.d.ts +27 -1
- package/dist/interfaces/worker.interface.d.ts +17 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/worker/temporal-metadata.accessor.d.ts +11 -0
- package/dist/worker/temporal-metadata.accessor.js +78 -1
- package/dist/worker/temporal-metadata.accessor.js.map +1 -1
- package/dist/worker/temporal-worker.module.d.ts +2 -1
- package/dist/worker/temporal-worker.module.js +17 -10
- package/dist/worker/temporal-worker.module.js.map +1 -1
- package/dist/worker/worker-manager.service.d.ts +8 -7
- package/dist/worker/worker-manager.service.js +116 -54
- package/dist/worker/worker-manager.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
export declare class TemporalMetadataAccessor {
|
|
2
2
|
isActivity(target: Function): boolean;
|
|
3
|
+
getActivityOptions(target: Function): Record<string, any> | undefined;
|
|
3
4
|
isActivityMethod(target: Function): boolean;
|
|
4
5
|
getActivityMethodName(target: Function): string | undefined;
|
|
6
|
+
getActivityMethodOptions(target: Function): Record<string, any> | undefined;
|
|
7
|
+
isWorkflow(target: Function): boolean;
|
|
8
|
+
getWorkflowOptions(target: Function): Record<string, any> | undefined;
|
|
9
|
+
isWorkflowMethod(target: Function): boolean;
|
|
10
|
+
getWorkflowMethodName(target: Function): string | undefined;
|
|
11
|
+
isQueryMethod(target: Function): boolean;
|
|
12
|
+
getQueryMethodName(target: Function): string | undefined;
|
|
13
|
+
isSignalMethod(target: Function): boolean;
|
|
14
|
+
getSignalMethodName(target: Function): string | undefined;
|
|
15
|
+
extractActivityMethods(instance: any): Map<string, Function>;
|
|
5
16
|
}
|
|
@@ -9,13 +9,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.TemporalMetadataAccessor = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
const constants_1 = require("../constants");
|
|
12
|
-
let TemporalMetadataAccessor =
|
|
12
|
+
let TemporalMetadataAccessor = class TemporalMetadataAccessor {
|
|
13
13
|
isActivity(target) {
|
|
14
14
|
if (!target) {
|
|
15
15
|
return false;
|
|
16
16
|
}
|
|
17
17
|
return !!Reflect.getMetadata(constants_1.TEMPORAL_ACTIVITY, target);
|
|
18
18
|
}
|
|
19
|
+
getActivityOptions(target) {
|
|
20
|
+
if (!target) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
return Reflect.getMetadata(constants_1.TEMPORAL_ACTIVITY, target);
|
|
24
|
+
}
|
|
19
25
|
isActivityMethod(target) {
|
|
20
26
|
if (!target) {
|
|
21
27
|
return false;
|
|
@@ -28,7 +34,78 @@ let TemporalMetadataAccessor = exports.TemporalMetadataAccessor = class Temporal
|
|
|
28
34
|
}
|
|
29
35
|
return Reflect.getMetadata(constants_1.TEMPORAL_ACTIVITY_METHOD_NAME, target);
|
|
30
36
|
}
|
|
37
|
+
getActivityMethodOptions(target) {
|
|
38
|
+
if (!target) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return Reflect.getMetadata(constants_1.TEMPORAL_ACTIVITY_METHOD_OPTIONS, target);
|
|
42
|
+
}
|
|
43
|
+
isWorkflow(target) {
|
|
44
|
+
if (!target) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return !!Reflect.getMetadata(constants_1.TEMPORAL_WORKFLOW, target);
|
|
48
|
+
}
|
|
49
|
+
getWorkflowOptions(target) {
|
|
50
|
+
if (!target) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return Reflect.getMetadata(constants_1.TEMPORAL_WORKFLOW_OPTIONS, target);
|
|
54
|
+
}
|
|
55
|
+
isWorkflowMethod(target) {
|
|
56
|
+
if (!target) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return !!Reflect.getMetadata(constants_1.TEMPORAL_WORKFLOW_METHOD, target);
|
|
60
|
+
}
|
|
61
|
+
getWorkflowMethodName(target) {
|
|
62
|
+
if (!target) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return Reflect.getMetadata(constants_1.TEMPORAL_WORKFLOW_METHOD_NAME, target);
|
|
66
|
+
}
|
|
67
|
+
isQueryMethod(target) {
|
|
68
|
+
if (!target) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return !!Reflect.getMetadata(constants_1.TEMPORAL_QUERY_METHOD, target);
|
|
72
|
+
}
|
|
73
|
+
getQueryMethodName(target) {
|
|
74
|
+
if (!target) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
return Reflect.getMetadata(constants_1.TEMPORAL_QUERY_NAME, target);
|
|
78
|
+
}
|
|
79
|
+
isSignalMethod(target) {
|
|
80
|
+
if (!target) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
return !!Reflect.getMetadata(constants_1.TEMPORAL_SIGNAL_METHOD, target);
|
|
84
|
+
}
|
|
85
|
+
getSignalMethodName(target) {
|
|
86
|
+
if (!target) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
return Reflect.getMetadata(constants_1.TEMPORAL_SIGNAL_NAME, target);
|
|
90
|
+
}
|
|
91
|
+
extractActivityMethods(instance) {
|
|
92
|
+
if (!instance) {
|
|
93
|
+
return new Map();
|
|
94
|
+
}
|
|
95
|
+
const methods = new Map();
|
|
96
|
+
const prototype = Object.getPrototypeOf(instance);
|
|
97
|
+
const methodNames = Object.getOwnPropertyNames(prototype).filter((prop) => prop !== 'constructor');
|
|
98
|
+
for (const methodName of methodNames) {
|
|
99
|
+
const method = prototype[methodName];
|
|
100
|
+
if (this.isActivityMethod(method)) {
|
|
101
|
+
const activityName = this.getActivityMethodName(method) || methodName;
|
|
102
|
+
methods.set(activityName, method.bind(instance));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return methods;
|
|
106
|
+
}
|
|
31
107
|
};
|
|
108
|
+
exports.TemporalMetadataAccessor = TemporalMetadataAccessor;
|
|
32
109
|
exports.TemporalMetadataAccessor = TemporalMetadataAccessor = __decorate([
|
|
33
110
|
(0, common_1.Injectable)()
|
|
34
111
|
], TemporalMetadataAccessor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporal-metadata.accessor.js","sourceRoot":"","sources":["../../src/worker/temporal-metadata.accessor.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"temporal-metadata.accessor.js","sourceRoot":"","sources":["../../src/worker/temporal-metadata.accessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { DynamicModule } from '@nestjs/common';
|
|
2
|
-
import { TemporalWorkerAsyncOptions, TemporalWorkerOptions } from '
|
|
2
|
+
import { TemporalWorkerAsyncOptions, TemporalWorkerOptions } from '../interfaces';
|
|
3
3
|
export declare class TemporalWorkerModule {
|
|
4
4
|
static register(options: TemporalWorkerOptions): DynamicModule;
|
|
5
5
|
static registerAsync(options: TemporalWorkerAsyncOptions): DynamicModule;
|
|
6
|
+
private static createActivityProviders;
|
|
6
7
|
private static createAsyncProviders;
|
|
7
8
|
}
|
|
@@ -13,8 +13,9 @@ const core_1 = require("@nestjs/core");
|
|
|
13
13
|
const constants_1 = require("../constants");
|
|
14
14
|
const temporal_metadata_accessor_1 = require("./temporal-metadata.accessor");
|
|
15
15
|
const worker_manager_service_1 = require("./worker-manager.service");
|
|
16
|
-
let TemporalWorkerModule =
|
|
16
|
+
let TemporalWorkerModule = TemporalWorkerModule_1 = class TemporalWorkerModule {
|
|
17
17
|
static register(options) {
|
|
18
|
+
const activityProviders = this.createActivityProviders(options.activityClasses || []);
|
|
18
19
|
return {
|
|
19
20
|
module: TemporalWorkerModule_1,
|
|
20
21
|
global: true,
|
|
@@ -23,15 +24,12 @@ let TemporalWorkerModule = exports.TemporalWorkerModule = TemporalWorkerModule_1
|
|
|
23
24
|
provide: constants_1.TEMPORAL_WORKER_MODULE_OPTIONS,
|
|
24
25
|
useValue: options,
|
|
25
26
|
},
|
|
26
|
-
...
|
|
27
|
-
provide: activity,
|
|
28
|
-
useClass: activity,
|
|
29
|
-
})),
|
|
27
|
+
...activityProviders,
|
|
30
28
|
temporal_metadata_accessor_1.TemporalMetadataAccessor,
|
|
31
29
|
core_1.DiscoveryService,
|
|
32
30
|
worker_manager_service_1.WorkerManager,
|
|
33
31
|
],
|
|
34
|
-
exports: [worker_manager_service_1.WorkerManager],
|
|
32
|
+
exports: [worker_manager_service_1.WorkerManager, constants_1.TEMPORAL_WORKER_MODULE_OPTIONS],
|
|
35
33
|
};
|
|
36
34
|
}
|
|
37
35
|
static registerAsync(options) {
|
|
@@ -45,16 +43,24 @@ let TemporalWorkerModule = exports.TemporalWorkerModule = TemporalWorkerModule_1
|
|
|
45
43
|
core_1.DiscoveryService,
|
|
46
44
|
worker_manager_service_1.WorkerManager,
|
|
47
45
|
],
|
|
48
|
-
exports: [worker_manager_service_1.WorkerManager],
|
|
46
|
+
exports: [worker_manager_service_1.WorkerManager, constants_1.TEMPORAL_WORKER_MODULE_OPTIONS],
|
|
49
47
|
};
|
|
50
48
|
}
|
|
49
|
+
static createActivityProviders(activityClasses) {
|
|
50
|
+
return activityClasses.map((activity) => ({
|
|
51
|
+
provide: activity,
|
|
52
|
+
useClass: activity,
|
|
53
|
+
}));
|
|
54
|
+
}
|
|
51
55
|
static createAsyncProviders(options) {
|
|
52
56
|
if (options.useFactory) {
|
|
57
|
+
const factory = options.useFactory;
|
|
58
|
+
const inject = options.inject || [];
|
|
53
59
|
return [
|
|
54
60
|
{
|
|
55
61
|
provide: constants_1.TEMPORAL_WORKER_MODULE_OPTIONS,
|
|
56
|
-
useFactory:
|
|
57
|
-
inject
|
|
62
|
+
useFactory: factory,
|
|
63
|
+
inject,
|
|
58
64
|
},
|
|
59
65
|
];
|
|
60
66
|
}
|
|
@@ -80,9 +86,10 @@ let TemporalWorkerModule = exports.TemporalWorkerModule = TemporalWorkerModule_1
|
|
|
80
86
|
},
|
|
81
87
|
];
|
|
82
88
|
}
|
|
83
|
-
throw new Error(
|
|
89
|
+
throw new Error(constants_1.ERRORS.INVALID_OPTIONS);
|
|
84
90
|
}
|
|
85
91
|
};
|
|
92
|
+
exports.TemporalWorkerModule = TemporalWorkerModule;
|
|
86
93
|
exports.TemporalWorkerModule = TemporalWorkerModule = TemporalWorkerModule_1 = __decorate([
|
|
87
94
|
(0, common_1.Module)({})
|
|
88
95
|
], TemporalWorkerModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporal-worker.module.js","sourceRoot":"","sources":["../../src/worker/temporal-worker.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"temporal-worker.module.js","sourceRoot":"","sources":["../../src/worker/temporal-worker.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuE;AACvE,uCAAgD;AAChD,4CAAsE;AAMtE,6EAAwE;AACxE,qEAAyD;AAOlD,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAuB7B,MAAM,CAAC,QAAQ,CAAC,OAA8B;QAC1C,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAEtF,OAAO;YACH,MAAM,EAAE,sBAAoB;YAC5B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACP;oBACI,OAAO,EAAE,0CAA8B;oBACvC,QAAQ,EAAE,OAAO;iBACpB;gBACD,GAAG,iBAAiB;gBACpB,qDAAwB;gBACxB,uBAAgB;gBAChB,sCAAa;aAChB;YACD,OAAO,EAAE,CAAC,sCAAa,EAAE,0CAA8B,CAAC;SAC3D,CAAC;IACN,CAAC;IA+BD,MAAM,CAAC,aAAa,CAAC,OAAmC;QACpD,OAAO;YACH,MAAM,EAAE,sBAAoB;YAC5B,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE;gBACP,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBACrC,qDAAwB;gBACxB,uBAAgB;gBAChB,sCAAa;aAChB;YACD,OAAO,EAAE,CAAC,sCAAa,EAAE,0CAA8B,CAAC;SAC3D,CAAC;IACN,CAAC;IAMO,MAAM,CAAC,uBAAuB,CAAC,eAAiC;QACpE,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtC,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,QAAQ;SACrB,CAAC,CAAC,CAAC;IACR,CAAC;IAMO,MAAM,CAAC,oBAAoB,CAAC,OAAmC;QACnE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YAEpC,OAAO;gBACH;oBACI,OAAO,EAAE,0CAA8B;oBACvC,UAAU,EAAE,OAAO;oBACnB,MAAM;iBACT;aACJ,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;gBACH;oBACI,OAAO,EAAE,0CAA8B;oBACvC,UAAU,EAAE,KAAK,EAAE,cAA4C,EAAE,EAAE,CAC/D,MAAM,cAAc,CAAC,mBAAmB,EAAE;oBAC9C,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;iBAC7B;gBACD;oBACI,OAAO,EAAE,OAAO,CAAC,QAAQ;oBACzB,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC7B;aACJ,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO;gBACH;oBACI,OAAO,EAAE,0CAA8B;oBACvC,UAAU,EAAE,KAAK,EAAE,cAA4C,EAAE,EAAE,CAC/D,MAAM,cAAc,CAAC,mBAAmB,EAAE;oBAC9C,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;iBAChC;aACJ,CAAC;QACN,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kBAAM,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC;CACJ,CAAA;AAhJY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,oBAAoB,CAgJhC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OnApplicationBootstrap, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService } from '@nestjs/core';
|
|
3
|
+
import { Worker } from '@temporalio/worker';
|
|
3
4
|
import { TemporalWorkerOptions } from '../interfaces';
|
|
4
5
|
import { TemporalMetadataAccessor } from './temporal-metadata.accessor';
|
|
5
6
|
export declare class WorkerManager implements OnModuleInit, OnModuleDestroy, OnApplicationBootstrap {
|
|
@@ -8,17 +9,17 @@ export declare class WorkerManager implements OnModuleInit, OnModuleDestroy, OnA
|
|
|
8
9
|
private readonly metadataAccessor;
|
|
9
10
|
private readonly logger;
|
|
10
11
|
private worker;
|
|
12
|
+
private connection;
|
|
11
13
|
private timerId;
|
|
14
|
+
private isRunning;
|
|
12
15
|
constructor(options: TemporalWorkerOptions, discoveryService: DiscoveryService, metadataAccessor: TemporalMetadataAccessor);
|
|
13
16
|
onModuleInit(): Promise<void>;
|
|
14
|
-
onModuleDestroy(): void
|
|
17
|
+
onModuleDestroy(): Promise<void>;
|
|
15
18
|
onApplicationBootstrap(): void;
|
|
16
|
-
|
|
19
|
+
startWorker(): Promise<void>;
|
|
20
|
+
shutdown(): Promise<void>;
|
|
21
|
+
private clearTimeout;
|
|
17
22
|
private explore;
|
|
18
23
|
private handleActivities;
|
|
19
|
-
|
|
20
|
-
isRunning: boolean;
|
|
21
|
-
taskQueue: string;
|
|
22
|
-
namespace: string;
|
|
23
|
-
}>;
|
|
24
|
+
getWorker(): Worker | null;
|
|
24
25
|
}
|
|
@@ -19,64 +19,126 @@ const core_1 = require("@nestjs/core");
|
|
|
19
19
|
const worker_1 = require("@temporalio/worker");
|
|
20
20
|
const constants_1 = require("../constants");
|
|
21
21
|
const temporal_metadata_accessor_1 = require("./temporal-metadata.accessor");
|
|
22
|
-
let WorkerManager =
|
|
22
|
+
let WorkerManager = WorkerManager_1 = class WorkerManager {
|
|
23
23
|
constructor(options, discoveryService, metadataAccessor) {
|
|
24
24
|
this.options = options;
|
|
25
25
|
this.discoveryService = discoveryService;
|
|
26
26
|
this.metadataAccessor = metadataAccessor;
|
|
27
27
|
this.logger = new common_1.Logger(WorkerManager_1.name);
|
|
28
|
+
this.worker = null;
|
|
29
|
+
this.connection = null;
|
|
28
30
|
this.timerId = null;
|
|
31
|
+
this.isRunning = false;
|
|
29
32
|
}
|
|
30
33
|
async onModuleInit() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
try {
|
|
35
|
+
this.logger.log('Initializing Temporal worker...');
|
|
36
|
+
await this.explore();
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
this.logger.error('Error during worker initialization', error);
|
|
40
|
+
if (this.options.allowWorkerFailure !== false) {
|
|
41
|
+
this.logger.warn('Continuing application startup without Temporal worker');
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
36
46
|
}
|
|
37
|
-
|
|
47
|
+
}
|
|
48
|
+
async onModuleDestroy() {
|
|
49
|
+
await this.shutdown();
|
|
38
50
|
}
|
|
39
51
|
onApplicationBootstrap() {
|
|
40
|
-
this.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
if (this.options.autoStart?.enabled === false || !this.worker) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const delayMs = this.options.autoStart?.delayMs || 0;
|
|
56
|
+
if (delayMs > 0) {
|
|
57
|
+
this.logger.log(`Worker will start in ${delayMs}ms`);
|
|
58
|
+
}
|
|
59
|
+
this.timerId = setTimeout(() => {
|
|
60
|
+
this.startWorker();
|
|
61
|
+
}, delayMs);
|
|
62
|
+
}
|
|
63
|
+
async startWorker() {
|
|
64
|
+
if (!this.worker) {
|
|
65
|
+
this.logger.warn('Cannot start worker: Worker not initialized');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (this.isRunning) {
|
|
69
|
+
this.logger.warn('Worker is already running');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
this.logger.log(`Starting worker for task queue: ${this.options.taskQueue}`);
|
|
74
|
+
this.isRunning = true;
|
|
75
|
+
await this.worker.run();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
this.isRunning = false;
|
|
79
|
+
this.logger.error('Error running worker', error);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async shutdown() {
|
|
84
|
+
this.clearTimeout();
|
|
85
|
+
if (this.worker) {
|
|
86
|
+
try {
|
|
87
|
+
this.logger.log('Shutting down Temporal worker...');
|
|
88
|
+
await this.worker.shutdown();
|
|
89
|
+
this.isRunning = false;
|
|
90
|
+
this.logger.log('Temporal worker shut down successfully');
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
this.logger.error('Error during worker shutdown', error);
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
this.worker = null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (this.connection) {
|
|
100
|
+
try {
|
|
101
|
+
this.logger.log('Closing Temporal worker connection...');
|
|
102
|
+
await this.connection.close();
|
|
103
|
+
this.logger.log('Temporal worker connection closed successfully');
|
|
46
104
|
}
|
|
47
|
-
|
|
105
|
+
catch (error) {
|
|
106
|
+
this.logger.error('Error during connection close', error);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
this.connection = null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
48
112
|
}
|
|
49
|
-
|
|
113
|
+
clearTimeout() {
|
|
50
114
|
if (this.timerId) {
|
|
51
|
-
|
|
115
|
+
clearTimeout(this.timerId);
|
|
52
116
|
this.timerId = null;
|
|
53
117
|
}
|
|
54
118
|
}
|
|
55
119
|
async explore() {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
this.logger.warn('No taskQueue configured, skipping worker initialization');
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const activities = await this.handleActivities();
|
|
62
|
-
if (this.options.runtimeOptions) {
|
|
63
|
-
worker_1.Runtime.install(this.options.runtimeOptions);
|
|
64
|
-
}
|
|
65
|
-
const connection = await worker_1.NativeConnection.connect(this.options.connection);
|
|
66
|
-
this.worker = await worker_1.Worker.create({
|
|
67
|
-
connection,
|
|
68
|
-
namespace: this.options.namespace,
|
|
69
|
-
taskQueue: this.options.taskQueue,
|
|
70
|
-
workflowsPath: this.options.workflowsPath,
|
|
71
|
-
activities,
|
|
72
|
-
...this.options.workerOptions,
|
|
73
|
-
});
|
|
74
|
-
this.logger.log(`Worker created for queue: ${this.options.taskQueue}`);
|
|
120
|
+
if (!this.options.taskQueue) {
|
|
121
|
+
throw new Error(constants_1.ERRORS.MISSING_TASK_QUEUE);
|
|
75
122
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
123
|
+
const activities = await this.handleActivities();
|
|
124
|
+
if (this.options.runtimeOptions) {
|
|
125
|
+
this.logger.debug('Installing custom runtime options');
|
|
126
|
+
worker_1.Runtime.install(this.options.runtimeOptions);
|
|
79
127
|
}
|
|
128
|
+
const workerOptions = {
|
|
129
|
+
taskQueue: this.options.taskQueue,
|
|
130
|
+
workflowsPath: this.options.workflowsPath,
|
|
131
|
+
activities,
|
|
132
|
+
...this.options.workerOptions,
|
|
133
|
+
};
|
|
134
|
+
this.logger.debug(`Connecting to Temporal server at ${this.options.connection.address}`);
|
|
135
|
+
this.connection = await worker_1.NativeConnection.connect(this.options.connection);
|
|
136
|
+
this.worker = await worker_1.Worker.create({
|
|
137
|
+
connection: this.connection,
|
|
138
|
+
namespace: this.options.namespace || 'default',
|
|
139
|
+
...workerOptions,
|
|
140
|
+
});
|
|
141
|
+
this.logger.log(`Worker created for queue: ${this.options.taskQueue} in namespace: ${this.options.namespace || 'default'}`);
|
|
80
142
|
}
|
|
81
143
|
async handleActivities() {
|
|
82
144
|
const activities = {};
|
|
@@ -84,35 +146,35 @@ let WorkerManager = exports.WorkerManager = WorkerManager_1 = class WorkerManage
|
|
|
84
146
|
const activityProviders = providers.filter((wrapper) => {
|
|
85
147
|
const { instance, metatype } = wrapper;
|
|
86
148
|
const targetClass = instance?.constructor || metatype;
|
|
149
|
+
if (!this.options.activityClasses?.length) {
|
|
150
|
+
return targetClass && this.metadataAccessor.isActivity(targetClass);
|
|
151
|
+
}
|
|
87
152
|
return (targetClass &&
|
|
88
|
-
this.options.activityClasses
|
|
153
|
+
this.options.activityClasses.includes(targetClass) &&
|
|
89
154
|
this.metadataAccessor.isActivity(targetClass));
|
|
90
155
|
});
|
|
156
|
+
this.logger.log(`Found ${activityProviders.length} activity providers`);
|
|
91
157
|
for (const wrapper of activityProviders) {
|
|
92
158
|
const { instance } = wrapper;
|
|
93
159
|
if (!instance)
|
|
94
160
|
continue;
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
activities[activityName] = method.bind(instance);
|
|
102
|
-
this.logger.debug(`Registered activity method: ${activityName}`);
|
|
103
|
-
}
|
|
161
|
+
const className = instance.constructor.name;
|
|
162
|
+
this.logger.debug(`Processing activity class: ${className}`);
|
|
163
|
+
const activityMethods = this.metadataAccessor.extractActivityMethods(instance);
|
|
164
|
+
for (const [activityName, method] of activityMethods.entries()) {
|
|
165
|
+
activities[activityName] = method;
|
|
166
|
+
this.logger.debug(`Registered activity method: ${className}.${activityName}`);
|
|
104
167
|
}
|
|
105
168
|
}
|
|
169
|
+
const activityCount = Object.keys(activities).length;
|
|
170
|
+
this.logger.log(`Registered ${activityCount} activity methods in total`);
|
|
106
171
|
return activities;
|
|
107
172
|
}
|
|
108
|
-
|
|
109
|
-
return
|
|
110
|
-
isRunning: !!this.worker,
|
|
111
|
-
taskQueue: this.options.taskQueue,
|
|
112
|
-
namespace: this.options.namespace,
|
|
113
|
-
};
|
|
173
|
+
getWorker() {
|
|
174
|
+
return this.worker;
|
|
114
175
|
}
|
|
115
176
|
};
|
|
177
|
+
exports.WorkerManager = WorkerManager;
|
|
116
178
|
exports.WorkerManager = WorkerManager = WorkerManager_1 = __decorate([
|
|
117
179
|
(0, common_1.Injectable)(),
|
|
118
180
|
__param(0, (0, common_1.Inject)(constants_1.TEMPORAL_WORKER_MODULE_OPTIONS)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-manager.service.js","sourceRoot":"","sources":["../../src/worker/worker-manager.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAOwB;AACxB,uCAAgD;AAChD,+
|
|
1
|
+
{"version":3,"file":"worker-manager.service.js","sourceRoot":"","sources":["../../src/worker/worker-manager.service.ts"],"names":[],"mappings":"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"}
|