@globalart/nestjs-temporal 2.0.3 → 2.2.0
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/index.cjs +69 -81
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -51
- package/dist/index.d.mts +18 -51
- package/dist/index.mjs +58 -69
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -6
package/dist/index.cjs
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value:
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
let _nestjs_common = require("@nestjs/common");
|
|
3
3
|
let _nestjs_core = require("@nestjs/core");
|
|
4
4
|
let rxjs = require("rxjs");
|
|
5
5
|
let _temporalio_worker = require("@temporalio/worker");
|
|
6
6
|
let _temporalio_activity = require("@temporalio/activity");
|
|
7
7
|
let _temporalio_client = require("@temporalio/client");
|
|
8
|
-
let
|
|
9
|
-
|
|
8
|
+
let _nestjs_common_constants_js = require("@nestjs/common/constants.js");
|
|
10
9
|
//#region src/constants/temporal.constants.ts
|
|
11
10
|
const TEMPORAL_MODULE_ACTIVITIES = "_temporal_module_activities";
|
|
12
11
|
const TEMPORAL_MODULE_ACTIVITY = "_temporal_module_activity";
|
|
13
|
-
const TEMPORAL_MODULE_WORKFLOW = "_temporal_module_workFlow";
|
|
14
|
-
const TEMPORAL_MODULE_WORKFLOW_METHOD = "_temporal_module_workflow_method";
|
|
15
12
|
const TEMPORAL_ARGS_METADATA = "_temporal_module_args";
|
|
16
|
-
|
|
17
13
|
//#endregion
|
|
18
|
-
//#region \0@oxc-project+runtime@0.
|
|
14
|
+
//#region \0@oxc-project+runtime@0.122.0/helpers/decorateMetadata.js
|
|
19
15
|
function __decorateMetadata(k, v) {
|
|
20
16
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
21
17
|
}
|
|
22
|
-
|
|
23
18
|
//#endregion
|
|
24
|
-
//#region \0@oxc-project+runtime@0.
|
|
19
|
+
//#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
|
|
25
20
|
function __decorate(decorators, target, key, desc) {
|
|
26
21
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
27
22
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
28
23
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
29
24
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
30
25
|
}
|
|
31
|
-
|
|
32
26
|
//#endregion
|
|
33
27
|
//#region src/temporal-metadata.accessors.ts
|
|
34
28
|
var _ref$1;
|
|
@@ -50,27 +44,11 @@ let TemporalMetadataAccessor = class TemporalMetadataAccessor {
|
|
|
50
44
|
getActivity(target) {
|
|
51
45
|
return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);
|
|
52
46
|
}
|
|
53
|
-
isWorkflows(target) {
|
|
54
|
-
if (!target) return false;
|
|
55
|
-
return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);
|
|
56
|
-
}
|
|
57
|
-
getWorkflows(target) {
|
|
58
|
-
return this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);
|
|
59
|
-
}
|
|
60
|
-
isWorkflowMethod(target) {
|
|
61
|
-
if (!target) return false;
|
|
62
|
-
return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);
|
|
63
|
-
}
|
|
64
|
-
getWorkflowMethod(target) {
|
|
65
|
-
return this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);
|
|
66
|
-
}
|
|
67
47
|
};
|
|
68
48
|
TemporalMetadataAccessor = __decorate([(0, _nestjs_common.Injectable)(), __decorateMetadata("design:paramtypes", [typeof (_ref$1 = typeof _nestjs_core.Reflector !== "undefined" && _nestjs_core.Reflector) === "function" ? _ref$1 : Object])], TemporalMetadataAccessor);
|
|
69
|
-
|
|
70
49
|
//#endregion
|
|
71
50
|
//#region src/temporal.module-definition.ts
|
|
72
51
|
const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN: TEMPORAL_MODULE_OPTIONS_TOKEN, OPTIONS_TYPE: TEMPORAL_MODULE_OPTIONS_TYPE, ASYNC_OPTIONS_TYPE: TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE } = new _nestjs_common.ConfigurableModuleBuilder().setClassMethodName("registerWorker").build();
|
|
73
|
-
|
|
74
52
|
//#endregion
|
|
75
53
|
//#region src/temporal-enums.ts
|
|
76
54
|
let TemporalParamType = /* @__PURE__ */ function(TemporalParamType) {
|
|
@@ -78,7 +56,6 @@ let TemporalParamType = /* @__PURE__ */ function(TemporalParamType) {
|
|
|
78
56
|
TemporalParamType[TemporalParamType["CONTEXT"] = 4] = "CONTEXT";
|
|
79
57
|
return TemporalParamType;
|
|
80
58
|
}({});
|
|
81
|
-
|
|
82
59
|
//#endregion
|
|
83
60
|
//#region src/core/temporal-execution-context.ts
|
|
84
61
|
var TemporalExecutionContext = class {
|
|
@@ -115,7 +92,6 @@ var TemporalExecutionContext = class {
|
|
|
115
92
|
return "temporal";
|
|
116
93
|
}
|
|
117
94
|
};
|
|
118
|
-
|
|
119
95
|
//#endregion
|
|
120
96
|
//#region src/temporal-params.factory.ts
|
|
121
97
|
var TemporalParamsFactory = class {
|
|
@@ -131,7 +107,6 @@ var TemporalParamsFactory = class {
|
|
|
131
107
|
}
|
|
132
108
|
}
|
|
133
109
|
};
|
|
134
|
-
|
|
135
110
|
//#endregion
|
|
136
111
|
//#region src/temporal.explorer.ts
|
|
137
112
|
var _ref, _ref2, _ref3, _ref4, _TemporalExplorer;
|
|
@@ -264,8 +239,17 @@ let TemporalExplorer = _TemporalExplorer = class TemporalExplorer {
|
|
|
264
239
|
const paramsFactory = new TemporalParamsFactory(instance, instance[key]);
|
|
265
240
|
const handler = this.externalContextCreator.create(instance, instance[key], key, TEMPORAL_ARGS_METADATA, paramsFactory, void 0, void 0, void 0, "temporal");
|
|
266
241
|
activitiesMethod[key] = async (...args) => {
|
|
267
|
-
const
|
|
268
|
-
|
|
242
|
+
const ctx = _temporalio_activity.Context.current();
|
|
243
|
+
const result = handler(...args, ctx.info);
|
|
244
|
+
ctx.heartbeat(Date.now());
|
|
245
|
+
const interval = setInterval(() => {
|
|
246
|
+
ctx.heartbeat(Date.now());
|
|
247
|
+
}, 5e3);
|
|
248
|
+
try {
|
|
249
|
+
return (0, rxjs.isObservable)(result) ? await (0, rxjs.lastValueFrom)(result) : await result;
|
|
250
|
+
} finally {
|
|
251
|
+
clearInterval(interval);
|
|
252
|
+
}
|
|
269
253
|
};
|
|
270
254
|
}
|
|
271
255
|
});
|
|
@@ -280,7 +264,6 @@ TemporalExplorer = _TemporalExplorer = __decorate([(0, _nestjs_common.Injectable
|
|
|
280
264
|
typeof (_ref3 = typeof _nestjs_core.MetadataScanner !== "undefined" && _nestjs_core.MetadataScanner) === "function" ? _ref3 : Object,
|
|
281
265
|
typeof (_ref4 = typeof _nestjs_core.ExternalContextCreator !== "undefined" && _nestjs_core.ExternalContextCreator) === "function" ? _ref4 : Object
|
|
282
266
|
])], TemporalExplorer);
|
|
283
|
-
|
|
284
267
|
//#endregion
|
|
285
268
|
//#region src/utils/get-queue-token.util.ts
|
|
286
269
|
function getQueueToken(name) {
|
|
@@ -289,7 +272,6 @@ function getQueueToken(name) {
|
|
|
289
272
|
function getAsyncQueueToken(name) {
|
|
290
273
|
return name ? `TemporalAsyncQueue_${name}` : "TemporalAsyncQueue_default";
|
|
291
274
|
}
|
|
292
|
-
|
|
293
275
|
//#endregion
|
|
294
276
|
//#region src/utils/client.util.ts
|
|
295
277
|
/**
|
|
@@ -319,7 +301,6 @@ function assignOnAppShutdownHook(client) {
|
|
|
319
301
|
function getWorkflowClient(options) {
|
|
320
302
|
return assignOnAppShutdownHook(new _temporalio_client.WorkflowClient(options));
|
|
321
303
|
}
|
|
322
|
-
|
|
323
304
|
//#endregion
|
|
324
305
|
//#region src/utils/provider.util.ts
|
|
325
306
|
function createAsyncProvider(provide, options) {
|
|
@@ -350,7 +331,6 @@ function createClientAsyncProvider(asyncOptions) {
|
|
|
350
331
|
_nestjs_core.DiscoveryModule
|
|
351
332
|
];
|
|
352
333
|
}
|
|
353
|
-
|
|
354
334
|
//#endregion
|
|
355
335
|
//#region src/temporal.module.ts
|
|
356
336
|
var _TemporalModule;
|
|
@@ -390,23 +370,46 @@ let TemporalModule = _TemporalModule = class TemporalModule extends Configurable
|
|
|
390
370
|
}
|
|
391
371
|
};
|
|
392
372
|
TemporalModule = _TemporalModule = __decorate([(0, _nestjs_common.Module)({})], TemporalModule);
|
|
393
|
-
|
|
394
373
|
//#endregion
|
|
395
374
|
//#region src/decorators/activities.decorator.ts
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
375
|
+
/**
|
|
376
|
+
* Marks a class as containing Temporal activities.
|
|
377
|
+
* Methods within this class decorated with @Activity() will be registered as Temporal activities.
|
|
378
|
+
*
|
|
379
|
+
* @param queueNameOrOptions - Optional queue name (string) or options object
|
|
380
|
+
* @returns Class decorator
|
|
381
|
+
*
|
|
382
|
+
* @example
|
|
383
|
+
* ```typescript
|
|
384
|
+
* @Injectable()
|
|
385
|
+
* @Activities()
|
|
386
|
+
* export class MyActivities {
|
|
387
|
+
* @Activity()
|
|
388
|
+
* async doSomething() { }
|
|
389
|
+
* }
|
|
390
|
+
* ```
|
|
391
|
+
*/
|
|
392
|
+
const Activities = (options) => (target) => {
|
|
393
|
+
(0, _nestjs_common.SetMetadata)(_nestjs_common_constants_js.SCOPE_OPTIONS_METADATA, options)(target);
|
|
394
|
+
(0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_ACTIVITIES, options)(target);
|
|
395
|
+
};
|
|
396
|
+
/**
|
|
397
|
+
* Marks a method as a Temporal activity.
|
|
398
|
+
* The method must be within a class decorated with @Activities().
|
|
399
|
+
*
|
|
400
|
+
* @param nameOrOptions - Optional activity name (string) or options object
|
|
401
|
+
* @returns Method decorator
|
|
402
|
+
*
|
|
403
|
+
* @example
|
|
404
|
+
* ```typescript
|
|
405
|
+
* @Activity()
|
|
406
|
+
* async processOrder(orderId: string) { }
|
|
407
|
+
*
|
|
408
|
+
* @Activity('custom-activity-name')
|
|
409
|
+
* async anotherActivity() { }
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
const Activity = (options) => (0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_ACTIVITY, options || {});
|
|
410
413
|
//#endregion
|
|
411
414
|
//#region src/decorators/inject-temporal-client.decorator.ts
|
|
412
415
|
/**
|
|
@@ -422,47 +425,32 @@ function Activity(nameOrOptions) {
|
|
|
422
425
|
* ```
|
|
423
426
|
*/
|
|
424
427
|
const InjectTemporalClient = (name) => (0, _nestjs_common.Inject)(getQueueToken(name));
|
|
425
|
-
|
|
426
|
-
//#endregion
|
|
427
|
-
//#region src/decorators/workflow.decorator.ts
|
|
428
|
-
function WorkflowMethod(nameOrOptions) {
|
|
429
|
-
return (0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_WORKFLOW_METHOD, (nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions }) || {});
|
|
430
|
-
}
|
|
431
|
-
|
|
432
428
|
//#endregion
|
|
433
|
-
//#region src/decorators/
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
(0, _nestjs_common.SetMetadata)(_nestjs_common_constants.SCOPE_OPTIONS_METADATA, options)(target);
|
|
438
|
-
(0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_WORKFLOW, options)(target);
|
|
439
|
-
};
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
//#endregion
|
|
443
|
-
//#region src/decorators/payload.decorator.ts
|
|
429
|
+
//#region src/decorators/context.decorator.ts
|
|
430
|
+
const ActivityContext = () => (0, _nestjs_common.createParamDecorator)((_, ctx) => {
|
|
431
|
+
return ctx.getArgByIndex(1);
|
|
432
|
+
});
|
|
444
433
|
const ActivityPayload = () => (0, _nestjs_common.createParamDecorator)((_, ctx) => {
|
|
445
434
|
return ctx.getArgByIndex(0);
|
|
446
435
|
});
|
|
447
|
-
|
|
448
436
|
//#endregion
|
|
449
437
|
exports.Activities = Activities;
|
|
450
438
|
exports.Activity = Activity;
|
|
439
|
+
exports.ActivityContext = ActivityContext;
|
|
451
440
|
exports.ActivityPayload = ActivityPayload;
|
|
452
441
|
exports.InjectTemporalClient = InjectTemporalClient;
|
|
453
442
|
exports.TemporalExecutionContext = TemporalExecutionContext;
|
|
454
|
-
Object.defineProperty(exports,
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
443
|
+
Object.defineProperty(exports, "TemporalExplorer", {
|
|
444
|
+
enumerable: true,
|
|
445
|
+
get: function() {
|
|
446
|
+
return TemporalExplorer;
|
|
447
|
+
}
|
|
459
448
|
});
|
|
460
|
-
Object.defineProperty(exports,
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
449
|
+
Object.defineProperty(exports, "TemporalModule", {
|
|
450
|
+
enumerable: true,
|
|
451
|
+
get: function() {
|
|
452
|
+
return TemporalModule;
|
|
453
|
+
}
|
|
465
454
|
});
|
|
466
|
-
|
|
467
|
-
exports.Workflows = Workflows;
|
|
455
|
+
|
|
468
456
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["ConfigurableModuleBuilder","Logger","NativeConnection","Worker","Context","WorkflowClient","DiscoveryModule","DiscoveryModule","SCOPE_OPTIONS_METADATA","SCOPE_OPTIONS_METADATA"],"sources":["../src/constants/temporal.constants.ts","../src/temporal-metadata.accessors.ts","../src/temporal.module-definition.ts","../src/temporal-enums.ts","../src/core/temporal-execution-context.ts","../src/temporal-params.factory.ts","../src/temporal.explorer.ts","../src/utils/get-queue-token.util.ts","../src/utils/client.util.ts","../src/utils/provider.util.ts","../src/temporal.module.ts","../src/decorators/activities.decorator.ts","../src/decorators/activity.decorator.ts","../src/decorators/inject-temporal-client.decorator.ts","../src/decorators/workflow.decorator.ts","../src/decorators/workflows.decorator.ts","../src/decorators/payload.decorator.ts"],"sourcesContent":["export const TEMPORAL_MODULE_ACTIVITIES = '_temporal_module_activities';\nexport const TEMPORAL_MODULE_ACTIVITY = '_temporal_module_activity';\nexport const TEMPORAL_MODULE_WORKFLOW = '_temporal_module_workFlow';\nexport const TEMPORAL_MODULE_WORKFLOW_METHOD =\n '_temporal_module_workflow_method';\nexport const TEMPORAL_ARGS_METADATA = '_temporal_module_args';\nexport const TEMPORAL_CONTEXT_METADATA = '_temporal_module_context';","import { Injectable, Type } from '@nestjs/common';\nimport { Reflector } from '@nestjs/core';\n\nimport {\n TEMPORAL_MODULE_ACTIVITIES,\n TEMPORAL_MODULE_ACTIVITY,\n TEMPORAL_MODULE_WORKFLOW,\n TEMPORAL_MODULE_WORKFLOW_METHOD,\n} from './constants/temporal.constants';\n\n/**\n * TemporalMetadataAccessor provides methods to check and retrieve Temporal decorator metadata.\n * It uses NestJS Reflector to access metadata set by @Activities(), @Activity(), @Workflows(), and @WorkflowMethod() decorators.\n */\n@Injectable()\nexport class TemporalMetadataAccessor {\n constructor(private readonly reflector: Reflector) {}\n\n isActivities(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n getActivities(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n isActivity(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n getActivity(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n isWorkflows(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);\n }\n\n getWorkflows(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);\n }\n\n isWorkflowMethod(\n target: Type<unknown> | Function | null | undefined,\n ): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);\n }\n\n getWorkflowMethod(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);\n }\n}\n","import {\n NativeConnectionOptions,\n RuntimeOptions,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { ConfigurableModuleBuilder } from \"@nestjs/common\";\n\nexport interface TemporalModuleOptions {\n workerOptions: WorkerOptions[];\n connectionOptions?: NativeConnectionOptions;\n runtimeOptions?: RuntimeOptions;\n activityClasses?: object[];\n errorOnDuplicateActivities?: boolean;\n}\n\nexport const {\n ConfigurableModuleClass,\n MODULE_OPTIONS_TOKEN: TEMPORAL_MODULE_OPTIONS_TOKEN,\n OPTIONS_TYPE: TEMPORAL_MODULE_OPTIONS_TYPE,\n ASYNC_OPTIONS_TYPE: TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} = new ConfigurableModuleBuilder<TemporalModuleOptions>()\n .setClassMethodName(\"registerWorker\")\n .build();\n","export enum TemporalParamType {\n PAYLOAD = 3,\n CONTEXT = 4,\n}\n\n","import { ExecutionContext } from '@nestjs/common';\nimport { Info } from '@temporalio/activity';\n\nexport class TemporalExecutionContext implements ExecutionContext {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n private readonly args: unknown[]\n ) {}\n\n getClass<T = unknown>(): Type<T> {\n return this.instance.constructor as Type<T>;\n }\n\n getHandler(): Function {\n return this.handler;\n }\n\n getArgs<T extends Array<unknown> = unknown[]>(): T {\n return this.args as T;\n }\n\n getWorkflowInfo(): Info {\n return this.args[0] as Info;\n }\n\n getArgByIndex<T = unknown>(index: number): T {\n return this.args[index] as T;\n }\n\n switchToRpc(): ReturnType<ExecutionContext['switchToRpc']> {\n throw new Error('Context does not support RPC context');\n }\n\n switchToHttp(): ReturnType<ExecutionContext['switchToHttp']> {\n throw new Error('Context does not support HTTP context');\n }\n\n switchToWs(): ReturnType<ExecutionContext['switchToWs']> {\n throw new Error('Context does not support WebSocket context');\n }\n\n getType<TContext extends string = string>(): TContext {\n return 'temporal' as TContext;\n }\n}\n\ntype Type<T = unknown> = new (...args: unknown[]) => T;\n\n","import { ParamData } from '@nestjs/common';\nimport { ParamsFactory } from '@nestjs/core/helpers/external-context-creator';\nimport { TemporalParamType } from './temporal-enums';\nimport { TemporalExecutionContext } from './core/temporal-execution-context';\n\nexport class TemporalParamsFactory implements ParamsFactory {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n ) {}\n\n exchangeKeyForValue(\n type: number,\n data: ParamData,\n args: unknown[],\n ): unknown {\n switch (type) {\n case TemporalParamType.PAYLOAD:\n return data && args[0] && typeof args[0] === 'object'\n ? (args[0] as Record<string, unknown>)[data as string]\n : args[0];\n\n case TemporalParamType.CONTEXT:\n return new TemporalExecutionContext(this.instance, this.handler, args);\n\n default:\n return null;\n }\n }\n}\n\n","import {\n Inject,\n Injectable,\n Logger,\n OnApplicationBootstrap,\n OnModuleDestroy,\n OnModuleInit,\n} from \"@nestjs/common\";\nimport {\n DiscoveryService,\n MetadataScanner,\n ExternalContextCreator,\n} from \"@nestjs/core\";\nimport { InstanceWrapper } from \"@nestjs/core/injector/instance-wrapper\";\nimport { lastValueFrom, isObservable } from \"rxjs\";\nimport {\n NativeConnection,\n NativeConnectionOptions,\n Runtime,\n RuntimeOptions,\n Worker,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport {\n TEMPORAL_MODULE_OPTIONS_TOKEN,\n type TemporalModuleOptions,\n} from \"./temporal.module-definition\";\nimport {\n TEMPORAL_ARGS_METADATA,\n TEMPORAL_CONTEXT_METADATA,\n} from \"./constants/temporal.constants\";\nimport { TemporalParamsFactory } from \"./temporal-params.factory\";\nimport { Context } from \"@temporalio/activity\";\n\n/**\n * TemporalExplorer is responsible for discovering and registering Temporal activities\n * and creating the Temporal worker instance.\n *\n * It scans the NestJS application for classes decorated with @Activities() and methods\n * decorated with @Activity(), then registers them with the Temporal worker.\n */\n@Injectable()\nexport class TemporalExplorer\n implements OnModuleInit, OnModuleDestroy, OnApplicationBootstrap\n{\n @Inject(TEMPORAL_MODULE_OPTIONS_TOKEN)\n private readonly options!: TemporalModuleOptions;\n private readonly logger = new Logger(TemporalExplorer.name);\n private workers?: Worker[];\n private workerRunPromises?: Promise<void>[];\n\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly metadataAccessor: TemporalMetadataAccessor,\n private readonly metadataScanner: MetadataScanner,\n private readonly externalContextCreator: ExternalContextCreator,\n ) {}\n\n /**\n * Initializes the module by exploring and setting up the Temporal worker.\n */\n async onModuleInit(): Promise<void> {\n await this.explore();\n }\n\n /**\n * Shuts down the Temporal worker when the module is destroyed.\n */\n async onModuleDestroy(): Promise<void> {\n if (!this.workers) {\n return;\n }\n\n try {\n this.workers.forEach((worker) => worker.shutdown());\n if (this.workerRunPromises) {\n await Promise.all(this.workerRunPromises);\n }\n } catch (err: unknown) {\n this.logger.warn(\"Temporal workers were not cleanly shutdown.\", {\n err: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n /**\n * Starts the Temporal worker when the application is fully bootstrapped.\n */\n onApplicationBootstrap(): void {\n if (this.workers) {\n this.workerRunPromises = this.workers.map((worker) => worker.run());\n }\n }\n\n /**\n * Explores the application for Temporal activities and creates the worker.\n * This method is called during module initialization.\n */\n async explore(): Promise<void> {\n const workerConfig = this.getWorkerConfigOptions();\n const runTimeOptions = this.getRuntimeOptions();\n const connectionOptions = this.getNativeConnectionOptions();\n\n // Worker must have a taskQueue configured\n if (!workerConfig.some((config) => config.taskQueue)) {\n this.logger.warn(\n \"Temporal worker configuration missing taskQueue. Worker will not be created.\",\n );\n return;\n }\n\n this.findDuplicateActivityMethods();\n\n const activitiesFunc = await this.handleActivities();\n\n if (runTimeOptions) {\n this.logger.verbose(\"Instantiating a new Runtime object\");\n Runtime.install(runTimeOptions);\n }\n\n const sharedWorkerOptions: Partial<WorkerOptions> = {\n activities: activitiesFunc,\n };\n\n if (connectionOptions) {\n this.logger.verbose(\"Connecting to the Temporal server\");\n sharedWorkerOptions.connection =\n await NativeConnection.connect(connectionOptions);\n }\n\n this.logger.verbose(\"Creating a new Worker\");\n this.workers = await Promise.all(\n workerConfig.map((config) =>\n Worker.create({ ...sharedWorkerOptions, ...config }),\n ),\n );\n }\n\n /**\n * Gets the worker configuration options.\n */\n getWorkerConfigOptions(): WorkerOptions[] {\n return this.options.workerOptions;\n }\n\n /**\n * Gets the native connection options for the Temporal server.\n */\n getNativeConnectionOptions(): NativeConnectionOptions | undefined {\n return this.options.connectionOptions;\n }\n\n /**\n * Gets the runtime options for the Temporal worker.\n */\n getRuntimeOptions(): RuntimeOptions | undefined {\n return this.options.runtimeOptions;\n }\n\n /**\n * Gets the activity classes to register with this worker.\n * If undefined, all discovered activities will be registered.\n * Can be either class constructors or InstanceWrappers.\n */\n private getActivityClasses(): (InstanceWrapper | Function)[] | undefined {\n return this.options.activityClasses as\n | (InstanceWrapper | Function)[]\n | undefined;\n }\n\n /**\n * Validates that activity method names are unique across all activity classes.\n * Throws an error if duplicates are found and errorOnDuplicateActivities is enabled.\n */\n findDuplicateActivityMethods(): void {\n if (!this.options.errorOnDuplicateActivities) {\n return;\n }\n\n const activityClasses = this.getActivityClasses();\n if (!activityClasses || activityClasses.length === 0) {\n return;\n }\n\n const activityMethods: Record<string, string[]> = {};\n\n activityClasses.forEach((classOrWrapper: InstanceWrapper | Function) => {\n // Handle both InstanceWrapper and class constructor\n const wrapper = classOrWrapper as InstanceWrapper;\n const instance =\n \"instance\" in wrapper && wrapper.instance\n ? wrapper.instance\n : new (classOrWrapper as new () => unknown)();\n\n this.metadataScanner\n .getAllMethodNames(Object.getPrototypeOf(instance))\n .forEach((key) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n activityMethods[key] = (activityMethods[key] || []).concat(\n instance.constructor.name,\n );\n }\n });\n });\n\n const violations = Object.entries(activityMethods).filter(\n ([, classes]) => classes.length > 1,\n );\n\n if (violations.length > 0) {\n const message = `Activity names must be unique across all Activity classes. Identified activities with conflicting names: ${JSON.stringify(\n Object.fromEntries(violations),\n )}`;\n this.logger.error(message);\n throw new Error(message);\n }\n }\n\n /**\n * Discovers and binds all activity methods from classes decorated with @Activities().\n * Returns an object mapping activity method names to their bound implementations.\n */\n async handleActivities(): Promise<Record<string, Function>> {\n const activitiesMethod: Record<string, Function> = {};\n\n const activityClasses = this.getActivityClasses();\n const activities: InstanceWrapper[] = this.discoveryService\n .getProviders()\n .filter(\n (wrapper: InstanceWrapper) =>\n this.metadataAccessor.isActivities(\n !wrapper.metatype || wrapper.inject\n ? wrapper.instance?.constructor\n : wrapper.metatype,\n ) &&\n (!activityClasses ||\n activityClasses.some(\n (cls) =>\n cls === wrapper.metatype ||\n (cls instanceof Object &&\n \"metatype\" in cls &&\n (cls as InstanceWrapper).metatype === wrapper.metatype),\n )),\n );\n\n activities.forEach((wrapper: InstanceWrapper) => {\n const { instance } = wrapper;\n const isRequestScoped = !wrapper.isDependencyTreeStatic();\n\n this.metadataScanner.scanFromPrototype(\n instance,\n Object.getPrototypeOf(instance),\n (key: string) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n if (isRequestScoped) {\n this.logger.warn(\n `Request-scoped activities are not yet fully supported. Activity \"${key}\" from class \"${instance.constructor.name}\" may not work correctly.`,\n );\n }\n const paramsFactory = new TemporalParamsFactory(\n instance,\n instance[key],\n );\n\n const handler = this.externalContextCreator.create(\n instance,\n instance[key],\n key,\n TEMPORAL_ARGS_METADATA,\n paramsFactory,\n undefined,\n undefined,\n undefined,\n \"temporal\",\n );\n\n activitiesMethod[key] = async (...args: unknown[]) => {\n const result = handler(...args, Context.current().info);\n\n return isObservable(result)\n ? await lastValueFrom(result)\n : await result;\n };\n }\n },\n );\n });\n return activitiesMethod;\n }\n}\n","export function getQueueToken(name?: string): string {\n return name ? `TemporalQueue_${name}` : 'TemporalQueue_default';\n}\n\nexport function getAsyncQueueToken(name?: string): string {\n return name ? `TemporalAsyncQueue_${name}` : 'TemporalAsyncQueue_default';\n}\n","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\n\n/**\n * Assigns an application shutdown hook to a WorkflowClient to ensure\n * the connection is properly closed when the application shuts down.\n *\n * @param client - The WorkflowClient instance\n * @returns The client with shutdown hook assigned\n */\nexport function assignOnAppShutdownHook(\n client: WorkflowClient,\n): WorkflowClient {\n (client as unknown as OnApplicationShutdown).onApplicationShutdown =\n async () => {\n try {\n await client.connection?.close();\n } catch (reason: unknown) {\n const errorMessage =\n reason instanceof Error ? reason.message : String(reason);\n console.error(\n `Temporal client connection was not cleanly closed: ${errorMessage}`,\n );\n }\n };\n return client;\n}\n\n/**\n * Creates a new WorkflowClient instance with application shutdown hook.\n *\n * @param options - Optional WorkflowClient configuration options\n * @returns A WorkflowClient instance with shutdown hook\n */\nexport function getWorkflowClient(\n options?: WorkflowClientOptions,\n): WorkflowClient {\n const client = new WorkflowClient(options);\n return assignOnAppShutdownHook(client);\n}\n","import { Provider } from '@nestjs/common';\nimport { WorkflowClientOptions } from '@temporalio/client';\n\nimport { SharedWorkflowClientOptions } from '../interfaces/shared-workflow-client-options.interface';\nimport {\n SharedConnectionAsyncConfiguration,\n SharedRuntimeAsyncConfiguration,\n SharedWorkerAsyncConfiguration,\n} from '../interfaces';\nimport { getWorkflowClient } from './client.util';\nimport { getAsyncQueueToken, getQueueToken } from './get-queue-token.util';\nimport { DiscoveryModule } from '@nestjs/core';\n\nexport function createAsyncProvider(\n provide: string,\n options?:\n | SharedWorkerAsyncConfiguration\n | SharedRuntimeAsyncConfiguration\n | SharedConnectionAsyncConfiguration\n | SharedWorkflowClientOptions,\n): Provider {\n if (options?.useFactory) {\n const { useFactory, inject } = options;\n return {\n provide,\n useFactory,\n inject: inject || [],\n };\n }\n return {\n provide,\n useValue: options?.useValue || null,\n };\n}\n\nexport function createClientAsyncProvider(\n asyncOptions: SharedWorkflowClientOptions,\n): Provider[] {\n const name = asyncOptions.name ? asyncOptions.name : undefined;\n const optionsProvide = getAsyncQueueToken(name);\n const clientProvide = getQueueToken(name);\n return [\n createAsyncProvider(optionsProvide, asyncOptions),\n {\n provide: clientProvide,\n useFactory: (options?: WorkflowClientOptions) =>\n getWorkflowClient(options),\n inject: [optionsProvide],\n },\n DiscoveryModule,\n ];\n}\n","import { DynamicModule, Module } from \"@nestjs/common\";\nimport { DiscoveryModule } from \"@nestjs/core\";\n\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport { TemporalExplorer } from \"./temporal.explorer\";\nimport {\n SharedWorkflowClientOptions,\n TemporalModuleOptions,\n} from \"./interfaces\";\nimport { createClientProviders } from \"./temporal.providers\";\nimport { createClientAsyncProvider } from \"./utils\";\nimport {\n ConfigurableModuleClass,\n TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} from \"./temporal.module-definition\";\n\n/**\n * TemporalModule provides integration between NestJS and Temporal workflow orchestration.\n *\n * Use registerWorker() or registerWorkerAsync() to register Temporal workers that execute activities.\n * Use registerClient() or registerClientAsync() to register Temporal clients for starting workflows.\n */\n@Module({})\nexport class TemporalModule extends ConfigurableModuleClass {\n /**\n * Registers a Temporal worker asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param options - Async worker configuration options\n * @returns Dynamic module configuration\n */\n static registerWorkerAsync(\n options: typeof TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n ): DynamicModule {\n const superDynamicModule = super.registerWorkerAsync(options);\n superDynamicModule.imports?.push(DiscoveryModule);\n superDynamicModule.providers?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n );\n superDynamicModule.exports?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n DiscoveryModule,\n );\n\n return {\n ...superDynamicModule,\n exports: [DiscoveryModule],\n };\n }\n\n /**\n * Registers a Temporal WorkflowClient asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param asyncSharedWorkflowClientOptions - Async client configuration options\n * @returns Dynamic module configuration\n */\n static registerClientAsync(\n asyncSharedWorkflowClientOptions: SharedWorkflowClientOptions,\n ): DynamicModule {\n const providers = createClientAsyncProvider(\n asyncSharedWorkflowClientOptions,\n );\n\n return {\n global: true,\n module: TemporalModule,\n providers,\n exports: providers,\n };\n }\n}\n","import { Scope, SetMetadata } from '@nestjs/common';\nimport { SCOPE_OPTIONS_METADATA } from '@nestjs/common/constants';\nimport { ActivityOptions } from '@temporalio/workflow';\n\nimport { TEMPORAL_MODULE_ACTIVITIES } from '../constants/temporal.constants';\n\n/**\n * Options for the @Activities() decorator.\n */\nexport interface ActivitiesOptions extends ActivityOptions {\n /**\n * Specifies the name of the queue to subscribe to.\n */\n name?: string;\n /**\n * Specifies the lifetime of an injected Activities class.\n */\n scope?: Scope;\n}\n\n/**\n * Marks a class as containing Temporal activities.\n * Methods within this class decorated with @Activity() will be registered as Temporal activities.\n *\n * @param queueNameOrOptions - Optional queue name (string) or options object\n * @returns Class decorator\n *\n * @example\n * ```typescript\n * @Injectable()\n * @Activities()\n * export class MyActivities {\n * @Activity()\n * async doSomething() { }\n * }\n * ```\n */\nexport function Activities(): ClassDecorator;\nexport function Activities(queueName: string): ClassDecorator;\nexport function Activities(\n activitiesOptions: ActivitiesOptions,\n): ClassDecorator;\nexport function Activities(\n queueNameOrOptions?: string | ActivitiesOptions,\n): ClassDecorator {\n const options =\n queueNameOrOptions && typeof queueNameOrOptions === 'object'\n ? queueNameOrOptions\n : { name: queueNameOrOptions };\n return (target: Function) => {\n SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);\n SetMetadata(TEMPORAL_MODULE_ACTIVITIES, options)(target);\n };\n}\n","import { SetMetadata } from '@nestjs/common';\n\nimport { TEMPORAL_MODULE_ACTIVITY } from '../constants/temporal.constants';\n\n/**\n * Options for the @Activity() decorator.\n */\nexport interface ActivityOptions {\n /**\n * Custom name for the activity. If not provided, the method name is used.\n */\n name?: string;\n}\n\n/**\n * Marks a method as a Temporal activity.\n * The method must be within a class decorated with @Activities().\n *\n * @param nameOrOptions - Optional activity name (string) or options object\n * @returns Method decorator\n *\n * @example\n * ```typescript\n * @Activity()\n * async processOrder(orderId: string) { }\n *\n * @Activity('custom-activity-name')\n * async anotherActivity() { }\n * ```\n */\nexport function Activity(): MethodDecorator;\nexport function Activity(name: string): MethodDecorator;\nexport function Activity(options: ActivityOptions): MethodDecorator;\nexport function Activity(\n nameOrOptions?: string | ActivityOptions,\n): MethodDecorator {\n const options =\n nameOrOptions && typeof nameOrOptions === 'object'\n ? nameOrOptions\n : { name: nameOrOptions };\n\n return SetMetadata(TEMPORAL_MODULE_ACTIVITY, options || {});\n}\n","import { Inject } from '@nestjs/common';\n\nimport { getQueueToken } from '../utils';\n\n/**\n * Injects a Temporal WorkflowClient instance.\n * Use this decorator to inject the client registered via TemporalModule.registerClient().\n *\n * @param name - Optional name of the client instance (for named clients)\n * @returns Parameter decorator for dependency injection\n *\n * @example\n * ```typescript\n * constructor(@InjectTemporalClient() private client: WorkflowClient) {}\n * ```\n */\nexport const InjectTemporalClient = (name?: string): ParameterDecorator =>\n Inject(getQueueToken(name));\n","import { SetMetadata } from '@nestjs/common';\n\nimport { TEMPORAL_MODULE_WORKFLOW_METHOD } from '../constants/temporal.constants';\n\nexport interface WorkflowMethodOptions {\n name?: string;\n}\n\nexport function WorkflowMethod(): MethodDecorator;\nexport function WorkflowMethod(name: string): MethodDecorator;\nexport function WorkflowMethod(options: WorkflowMethodOptions): MethodDecorator;\nexport function WorkflowMethod(\n nameOrOptions?: string | WorkflowMethodOptions,\n): MethodDecorator {\n const options =\n nameOrOptions && typeof nameOrOptions === 'object'\n ? nameOrOptions\n : { name: nameOrOptions };\n\n return SetMetadata(TEMPORAL_MODULE_WORKFLOW_METHOD, options || {});\n}\n","import { Scope, SetMetadata } from '@nestjs/common';\nimport { SCOPE_OPTIONS_METADATA } from '@nestjs/common/constants';\n\nimport { TEMPORAL_MODULE_WORKFLOW } from '../constants/temporal.constants';\n\nexport interface WorkflowsOptions {\n /**\n * Specifies the name of the queue to subscribe to.\n */\n name?: string;\n /**\n * Specifies the lifetime of an injected Processor.\n */\n scope?: Scope;\n}\n\nexport function Workflows(): ClassDecorator;\nexport function Workflows(name: string): ClassDecorator;\nexport function Workflows(options: WorkflowsOptions): ClassDecorator;\nexport function Workflows(\n nameOrOptions?: string | WorkflowsOptions,\n): ClassDecorator {\n const options =\n nameOrOptions && typeof nameOrOptions === 'object'\n ? nameOrOptions\n : { name: nameOrOptions };\n return (target: Function) => {\n SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);\n SetMetadata(TEMPORAL_MODULE_WORKFLOW, options)(target);\n };\n}\n","import { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\nexport const ActivityPayload = () => createParamDecorator((_, ctx: ExecutionContext) => {\n return ctx.getArgByIndex(0);\n});"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["ConfigurableModuleBuilder","Logger","NativeConnection","Worker","Context","WorkflowClient","DiscoveryModule","DiscoveryModule","SCOPE_OPTIONS_METADATA"],"sources":["../src/constants/temporal.constants.ts","../src/temporal-metadata.accessors.ts","../src/temporal.module-definition.ts","../src/temporal-enums.ts","../src/core/temporal-execution-context.ts","../src/temporal-params.factory.ts","../src/temporal.explorer.ts","../src/utils/get-queue-token.util.ts","../src/utils/client.util.ts","../src/utils/provider.util.ts","../src/temporal.module.ts","../src/decorators/activities.decorator.ts","../src/decorators/inject-temporal-client.decorator.ts","../src/decorators/context.decorator.ts"],"sourcesContent":["export const TEMPORAL_MODULE_ACTIVITIES = \"_temporal_module_activities\";\nexport const TEMPORAL_MODULE_ACTIVITY = \"_temporal_module_activity\";\n\nexport const TEMPORAL_ARGS_METADATA = \"_temporal_module_args\";\nexport const TEMPORAL_CONTEXT_METADATA = \"_temporal_module_context\";\n","import { Injectable, Type } from \"@nestjs/common\";\nimport { Reflector } from \"@nestjs/core\";\n\nimport {\n TEMPORAL_MODULE_ACTIVITIES,\n TEMPORAL_MODULE_ACTIVITY,\n} from \"./constants/temporal.constants\";\n\n/**\n * TemporalMetadataAccessor provides methods to check and retrieve Temporal decorator metadata.\n * It uses NestJS Reflector to access metadata set by @Activities() and @Activity() decorators.\n */\n@Injectable()\nexport class TemporalMetadataAccessor {\n constructor(private readonly reflector: Reflector) {}\n\n isActivities(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n getActivities(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n isActivity(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n getActivity(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n}\n","import {\n NativeConnectionOptions,\n RuntimeOptions,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { ConfigurableModuleBuilder } from \"@nestjs/common\";\n\nexport interface TemporalModuleOptions {\n workerOptions: WorkerOptions[];\n connectionOptions?: NativeConnectionOptions;\n runtimeOptions?: RuntimeOptions;\n activityClasses?: object[];\n errorOnDuplicateActivities?: boolean;\n}\n\nexport const {\n ConfigurableModuleClass,\n MODULE_OPTIONS_TOKEN: TEMPORAL_MODULE_OPTIONS_TOKEN,\n OPTIONS_TYPE: TEMPORAL_MODULE_OPTIONS_TYPE,\n ASYNC_OPTIONS_TYPE: TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} = new ConfigurableModuleBuilder<TemporalModuleOptions>()\n .setClassMethodName(\"registerWorker\")\n .build();\n","export enum TemporalParamType {\n PAYLOAD = 3,\n CONTEXT = 4,\n}\n\n","import { ExecutionContext } from '@nestjs/common';\nimport { Info } from '@temporalio/activity';\n\nexport class TemporalExecutionContext implements ExecutionContext {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n private readonly args: unknown[]\n ) {}\n\n getClass<T = unknown>(): Type<T> {\n return this.instance.constructor as Type<T>;\n }\n\n getHandler(): Function {\n return this.handler;\n }\n\n getArgs<T extends Array<unknown> = unknown[]>(): T {\n return this.args as T;\n }\n\n getWorkflowInfo(): Info {\n return this.args[0] as Info;\n }\n\n getArgByIndex<T = unknown>(index: number): T {\n return this.args[index] as T;\n }\n\n switchToRpc(): ReturnType<ExecutionContext['switchToRpc']> {\n throw new Error('Context does not support RPC context');\n }\n\n switchToHttp(): ReturnType<ExecutionContext['switchToHttp']> {\n throw new Error('Context does not support HTTP context');\n }\n\n switchToWs(): ReturnType<ExecutionContext['switchToWs']> {\n throw new Error('Context does not support WebSocket context');\n }\n\n getType<TContext extends string = string>(): TContext {\n return 'temporal' as TContext;\n }\n}\n\ntype Type<T = unknown> = new (...args: unknown[]) => T;\n\n","import { ParamData } from '@nestjs/common';\nimport { ParamsFactory } from '@nestjs/core/helpers/external-context-creator';\nimport { TemporalParamType } from './temporal-enums';\nimport { TemporalExecutionContext } from './core/temporal-execution-context';\n\nexport class TemporalParamsFactory implements ParamsFactory {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n ) {}\n\n exchangeKeyForValue(\n type: number,\n data: ParamData,\n args: unknown[],\n ): unknown {\n switch (type) {\n case TemporalParamType.PAYLOAD:\n return data && args[0] && typeof args[0] === 'object'\n ? (args[0] as Record<string, unknown>)[data as string]\n : args[0];\n\n case TemporalParamType.CONTEXT:\n return new TemporalExecutionContext(this.instance, this.handler, args);\n\n default:\n return null;\n }\n }\n}\n\n","import {\n Inject,\n Injectable,\n Logger,\n OnApplicationBootstrap,\n OnModuleDestroy,\n OnModuleInit,\n} from \"@nestjs/common\";\nimport {\n DiscoveryService,\n MetadataScanner,\n ExternalContextCreator,\n} from \"@nestjs/core\";\nimport { InstanceWrapper } from \"@nestjs/core/injector/instance-wrapper\";\nimport { lastValueFrom, isObservable } from \"rxjs\";\nimport {\n NativeConnection,\n NativeConnectionOptions,\n Runtime,\n RuntimeOptions,\n Worker,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport {\n TEMPORAL_MODULE_OPTIONS_TOKEN,\n type TemporalModuleOptions,\n} from \"./temporal.module-definition\";\nimport {\n TEMPORAL_ARGS_METADATA,\n TEMPORAL_CONTEXT_METADATA,\n} from \"./constants/temporal.constants\";\nimport { TemporalParamsFactory } from \"./temporal-params.factory\";\nimport { Context } from \"@temporalio/activity\";\n\n/**\n * TemporalExplorer is responsible for discovering and registering Temporal activities\n * and creating the Temporal worker instance.\n *\n * It scans the NestJS application for classes decorated with @Activities() and methods\n * decorated with @Activity(), then registers them with the Temporal worker.\n */\n@Injectable()\nexport class TemporalExplorer\n implements OnModuleInit, OnModuleDestroy, OnApplicationBootstrap\n{\n @Inject(TEMPORAL_MODULE_OPTIONS_TOKEN)\n private readonly options!: TemporalModuleOptions;\n private readonly logger = new Logger(TemporalExplorer.name);\n private workers?: Worker[];\n private workerRunPromises?: Promise<void>[];\n\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly metadataAccessor: TemporalMetadataAccessor,\n private readonly metadataScanner: MetadataScanner,\n private readonly externalContextCreator: ExternalContextCreator,\n ) {}\n\n /**\n * Initializes the module by exploring and setting up the Temporal worker.\n */\n async onModuleInit(): Promise<void> {\n await this.explore();\n }\n\n /**\n * Shuts down the Temporal worker when the module is destroyed.\n */\n async onModuleDestroy(): Promise<void> {\n if (!this.workers) {\n return;\n }\n\n try {\n this.workers.forEach((worker) => worker.shutdown());\n if (this.workerRunPromises) {\n await Promise.all(this.workerRunPromises);\n }\n } catch (err: unknown) {\n this.logger.warn(\"Temporal workers were not cleanly shutdown.\", {\n err: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n /**\n * Starts the Temporal worker when the application is fully bootstrapped.\n */\n onApplicationBootstrap(): void {\n if (this.workers) {\n this.workerRunPromises = this.workers.map((worker) => worker.run());\n }\n }\n\n /**\n * Explores the application for Temporal activities and creates the worker.\n * This method is called during module initialization.\n */\n async explore(): Promise<void> {\n const workerConfig = this.getWorkerConfigOptions();\n const runTimeOptions = this.getRuntimeOptions();\n const connectionOptions = this.getNativeConnectionOptions();\n\n // Worker must have a taskQueue configured\n if (!workerConfig.some((config) => config.taskQueue)) {\n this.logger.warn(\n \"Temporal worker configuration missing taskQueue. Worker will not be created.\",\n );\n return;\n }\n\n this.findDuplicateActivityMethods();\n\n const activitiesFunc = await this.handleActivities();\n\n if (runTimeOptions) {\n this.logger.verbose(\"Instantiating a new Runtime object\");\n Runtime.install(runTimeOptions);\n }\n\n const sharedWorkerOptions: Partial<WorkerOptions> = {\n activities: activitiesFunc,\n };\n\n if (connectionOptions) {\n this.logger.verbose(\"Connecting to the Temporal server\");\n sharedWorkerOptions.connection =\n await NativeConnection.connect(connectionOptions);\n }\n\n this.logger.verbose(\"Creating a new Worker\");\n this.workers = await Promise.all(\n workerConfig.map((config) =>\n Worker.create({ ...sharedWorkerOptions, ...config }),\n ),\n );\n }\n\n /**\n * Gets the worker configuration options.\n */\n getWorkerConfigOptions(): WorkerOptions[] {\n return this.options.workerOptions;\n }\n\n /**\n * Gets the native connection options for the Temporal server.\n */\n getNativeConnectionOptions(): NativeConnectionOptions | undefined {\n return this.options.connectionOptions;\n }\n\n /**\n * Gets the runtime options for the Temporal worker.\n */\n getRuntimeOptions(): RuntimeOptions | undefined {\n return this.options.runtimeOptions;\n }\n\n /**\n * Gets the activity classes to register with this worker.\n * If undefined, all discovered activities will be registered.\n * Can be either class constructors or InstanceWrappers.\n */\n private getActivityClasses(): (InstanceWrapper | Function)[] | undefined {\n return this.options.activityClasses as\n | (InstanceWrapper | Function)[]\n | undefined;\n }\n\n /**\n * Validates that activity method names are unique across all activity classes.\n * Throws an error if duplicates are found and errorOnDuplicateActivities is enabled.\n */\n findDuplicateActivityMethods(): void {\n if (!this.options.errorOnDuplicateActivities) {\n return;\n }\n\n const activityClasses = this.getActivityClasses();\n if (!activityClasses || activityClasses.length === 0) {\n return;\n }\n\n const activityMethods: Record<string, string[]> = {};\n\n activityClasses.forEach((classOrWrapper: InstanceWrapper | Function) => {\n // Handle both InstanceWrapper and class constructor\n const wrapper = classOrWrapper as InstanceWrapper;\n const instance =\n \"instance\" in wrapper && wrapper.instance\n ? wrapper.instance\n : new (classOrWrapper as new () => unknown)();\n\n this.metadataScanner\n .getAllMethodNames(Object.getPrototypeOf(instance))\n .forEach((key) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n activityMethods[key] = (activityMethods[key] || []).concat(\n instance.constructor.name,\n );\n }\n });\n });\n\n const violations = Object.entries(activityMethods).filter(\n ([, classes]) => classes.length > 1,\n );\n\n if (violations.length > 0) {\n const message = `Activity names must be unique across all Activity classes. Identified activities with conflicting names: ${JSON.stringify(\n Object.fromEntries(violations),\n )}`;\n this.logger.error(message);\n throw new Error(message);\n }\n }\n\n /**\n * Discovers and binds all activity methods from classes decorated with @Activities().\n * Returns an object mapping activity method names to their bound implementations.\n */\n async handleActivities(): Promise<Record<string, Function>> {\n const activitiesMethod: Record<string, Function> = {};\n\n const activityClasses = this.getActivityClasses();\n const activities: InstanceWrapper[] = this.discoveryService\n .getProviders()\n .filter(\n (wrapper: InstanceWrapper) =>\n this.metadataAccessor.isActivities(\n !wrapper.metatype || wrapper.inject\n ? wrapper.instance?.constructor\n : wrapper.metatype,\n ) &&\n (!activityClasses ||\n activityClasses.some(\n (cls) =>\n cls === wrapper.metatype ||\n (cls instanceof Object &&\n \"metatype\" in cls &&\n (cls as InstanceWrapper).metatype === wrapper.metatype),\n )),\n );\n\n activities.forEach((wrapper: InstanceWrapper) => {\n const { instance } = wrapper;\n const isRequestScoped = !wrapper.isDependencyTreeStatic();\n\n this.metadataScanner.scanFromPrototype(\n instance,\n Object.getPrototypeOf(instance),\n (key: string) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n if (isRequestScoped) {\n this.logger.warn(\n `Request-scoped activities are not yet fully supported. Activity \"${key}\" from class \"${instance.constructor.name}\" may not work correctly.`,\n );\n }\n const paramsFactory = new TemporalParamsFactory(\n instance,\n instance[key],\n );\n\n const handler = this.externalContextCreator.create(\n instance,\n instance[key],\n key,\n TEMPORAL_ARGS_METADATA,\n paramsFactory,\n undefined,\n undefined,\n undefined,\n \"temporal\",\n );\n\n activitiesMethod[key] = async (...args: unknown[]) => {\n const ctx = Context.current();\n const result = handler(...args, ctx.info);\n\n ctx.heartbeat(Date.now());\n\n const interval = setInterval(() => {\n ctx.heartbeat(Date.now());\n }, 5000);\n\n try {\n return isObservable(result)\n ? await lastValueFrom(result)\n : await result;\n } finally {\n clearInterval(interval);\n }\n };\n }\n },\n );\n });\n return activitiesMethod;\n }\n}\n","export function getQueueToken(name?: string): string {\n return name ? `TemporalQueue_${name}` : 'TemporalQueue_default';\n}\n\nexport function getAsyncQueueToken(name?: string): string {\n return name ? `TemporalAsyncQueue_${name}` : 'TemporalAsyncQueue_default';\n}\n","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\n\n/**\n * Assigns an application shutdown hook to a WorkflowClient to ensure\n * the connection is properly closed when the application shuts down.\n *\n * @param client - The WorkflowClient instance\n * @returns The client with shutdown hook assigned\n */\nexport function assignOnAppShutdownHook(\n client: WorkflowClient,\n): WorkflowClient {\n (client as unknown as OnApplicationShutdown).onApplicationShutdown =\n async () => {\n try {\n await client.connection?.close();\n } catch (reason: unknown) {\n const errorMessage =\n reason instanceof Error ? reason.message : String(reason);\n console.error(\n `Temporal client connection was not cleanly closed: ${errorMessage}`,\n );\n }\n };\n return client;\n}\n\n/**\n * Creates a new WorkflowClient instance with application shutdown hook.\n *\n * @param options - Optional WorkflowClient configuration options\n * @returns A WorkflowClient instance with shutdown hook\n */\nexport function getWorkflowClient(\n options?: WorkflowClientOptions,\n): WorkflowClient {\n const client = new WorkflowClient(options);\n return assignOnAppShutdownHook(client);\n}\n","import { Provider } from '@nestjs/common';\nimport { WorkflowClientOptions } from '@temporalio/client';\n\nimport { SharedWorkflowClientOptions } from '../interfaces/shared-workflow-client-options.interface';\nimport {\n SharedConnectionAsyncConfiguration,\n SharedRuntimeAsyncConfiguration,\n SharedWorkerAsyncConfiguration,\n} from '../interfaces';\nimport { getWorkflowClient } from './client.util';\nimport { getAsyncQueueToken, getQueueToken } from './get-queue-token.util';\nimport { DiscoveryModule } from '@nestjs/core';\n\nexport function createAsyncProvider(\n provide: string,\n options?:\n | SharedWorkerAsyncConfiguration\n | SharedRuntimeAsyncConfiguration\n | SharedConnectionAsyncConfiguration\n | SharedWorkflowClientOptions,\n): Provider {\n if (options?.useFactory) {\n const { useFactory, inject } = options;\n return {\n provide,\n useFactory,\n inject: inject || [],\n };\n }\n return {\n provide,\n useValue: options?.useValue || null,\n };\n}\n\nexport function createClientAsyncProvider(\n asyncOptions: SharedWorkflowClientOptions,\n): Provider[] {\n const name = asyncOptions.name ? asyncOptions.name : undefined;\n const optionsProvide = getAsyncQueueToken(name);\n const clientProvide = getQueueToken(name);\n return [\n createAsyncProvider(optionsProvide, asyncOptions),\n {\n provide: clientProvide,\n useFactory: (options?: WorkflowClientOptions) =>\n getWorkflowClient(options),\n inject: [optionsProvide],\n },\n DiscoveryModule,\n ];\n}\n","import { DynamicModule, Module } from \"@nestjs/common\";\nimport { DiscoveryModule } from \"@nestjs/core\";\n\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport { TemporalExplorer } from \"./temporal.explorer\";\nimport {\n SharedWorkflowClientOptions,\n TemporalModuleOptions,\n} from \"./interfaces\";\nimport { createClientProviders } from \"./temporal.providers\";\nimport { createClientAsyncProvider } from \"./utils\";\nimport {\n ConfigurableModuleClass,\n TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} from \"./temporal.module-definition\";\n\n/**\n * TemporalModule provides integration between NestJS and Temporal workflow orchestration.\n *\n * Use registerWorker() or registerWorkerAsync() to register Temporal workers that execute activities.\n * Use registerClient() or registerClientAsync() to register Temporal clients for starting workflows.\n */\n@Module({})\nexport class TemporalModule extends ConfigurableModuleClass {\n /**\n * Registers a Temporal worker asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param options - Async worker configuration options\n * @returns Dynamic module configuration\n */\n static registerWorkerAsync(\n options: typeof TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n ): DynamicModule {\n const superDynamicModule = super.registerWorkerAsync(options);\n superDynamicModule.imports?.push(DiscoveryModule);\n superDynamicModule.providers?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n );\n superDynamicModule.exports?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n DiscoveryModule,\n );\n\n return {\n ...superDynamicModule,\n exports: [DiscoveryModule],\n };\n }\n\n /**\n * Registers a Temporal WorkflowClient asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param asyncSharedWorkflowClientOptions - Async client configuration options\n * @returns Dynamic module configuration\n */\n static registerClientAsync(\n asyncSharedWorkflowClientOptions: SharedWorkflowClientOptions,\n ): DynamicModule {\n const providers = createClientAsyncProvider(\n asyncSharedWorkflowClientOptions,\n );\n\n return {\n global: true,\n module: TemporalModule,\n providers,\n exports: providers,\n };\n }\n}\n","import { Scope, SetMetadata } from \"@nestjs/common\";\nimport { SCOPE_OPTIONS_METADATA } from \"@nestjs/common/constants\";\n\nimport {\n TEMPORAL_MODULE_ACTIVITIES,\n TEMPORAL_MODULE_ACTIVITY,\n} from \"../constants/temporal.constants\";\n\n/**\n * Options for the @Activities() decorator.\n */\nexport interface ActivitiesOptions extends ActivityOptions {\n /**\n * Specifies the name of the queue to subscribe to.\n */\n name?: string;\n /**\n * Specifies the lifetime of an injected Activities class.\n */\n scope?: Scope;\n}\n\n/**\n * Options for the @Activity() decorator.\n */\nexport interface ActivityOptions {\n /**\n * Custom name for the activity. If not provided, the method name is used.\n */\n name?: string;\n}\n\n/**\n * Marks a class as containing Temporal activities.\n * Methods within this class decorated with @Activity() will be registered as Temporal activities.\n *\n * @param queueNameOrOptions - Optional queue name (string) or options object\n * @returns Class decorator\n *\n * @example\n * ```typescript\n * @Injectable()\n * @Activities()\n * export class MyActivities {\n * @Activity()\n * async doSomething() { }\n * }\n * ```\n */\nexport const Activities =\n (options?: ActivitiesOptions): ClassDecorator =>\n (target: Function) => {\n SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);\n SetMetadata(TEMPORAL_MODULE_ACTIVITIES, options)(target);\n };\n\n/**\n * Marks a method as a Temporal activity.\n * The method must be within a class decorated with @Activities().\n *\n * @param nameOrOptions - Optional activity name (string) or options object\n * @returns Method decorator\n *\n * @example\n * ```typescript\n * @Activity()\n * async processOrder(orderId: string) { }\n *\n * @Activity('custom-activity-name')\n * async anotherActivity() { }\n * ```\n */\nexport const Activity = (options?: ActivityOptions): MethodDecorator =>\n SetMetadata(TEMPORAL_MODULE_ACTIVITY, options || {});\n","import { Inject } from '@nestjs/common';\n\nimport { getQueueToken } from '../utils';\n\n/**\n * Injects a Temporal WorkflowClient instance.\n * Use this decorator to inject the client registered via TemporalModule.registerClient().\n *\n * @param name - Optional name of the client instance (for named clients)\n * @returns Parameter decorator for dependency injection\n *\n * @example\n * ```typescript\n * constructor(@InjectTemporalClient() private client: WorkflowClient) {}\n * ```\n */\nexport const InjectTemporalClient = (name?: string): ParameterDecorator =>\n Inject(getQueueToken(name));\n","import { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\nexport const ActivityContext = () =>\n createParamDecorator((_, ctx: ExecutionContext) => {\n return ctx.getArgByIndex(1);\n });\n\nexport const ActivityPayload = () =>\n createParamDecorator((_, ctx: ExecutionContext) => {\n return ctx.getArgByIndex(0);\n });\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import * as _nestjs_common0 from "@nestjs/common";
|
|
1
|
+
import * as _$_nestjs_common0 from "@nestjs/common";
|
|
2
2
|
import { DynamicModule, ExecutionContext, FactoryProvider, ModuleMetadata, OnApplicationBootstrap, OnModuleDestroy, OnModuleInit, Scope, Type } from "@nestjs/common";
|
|
3
3
|
import { WorkflowClientOptions } from "@temporalio/client";
|
|
4
4
|
import { NativeConnectionOptions, RuntimeOptions, WorkerOptions } from "@temporalio/worker";
|
|
5
5
|
import { DiscoveryService, ExternalContextCreator, MetadataScanner, Reflector } from "@nestjs/core";
|
|
6
|
-
import { ActivityOptions as ActivityOptions$1 } from "@temporalio/workflow";
|
|
7
6
|
import { Info } from "@temporalio/activity";
|
|
8
7
|
|
|
9
8
|
//#region src/interfaces/shared-workflow-client-options.interface.d.ts
|
|
@@ -42,7 +41,7 @@ interface TemporalModuleOptions {
|
|
|
42
41
|
activityClasses?: object[];
|
|
43
42
|
errorOnDuplicateActivities?: boolean;
|
|
44
43
|
}
|
|
45
|
-
declare const ConfigurableModuleClass: _nestjs_common0.ConfigurableModuleCls<TemporalModuleOptions, "registerWorker", "create", {}>, TEMPORAL_MODULE_OPTIONS_TOKEN: string | symbol, TEMPORAL_MODULE_OPTIONS_TYPE: TemporalModuleOptions & Partial<{}>, TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE: _nestjs_common0.ConfigurableModuleAsyncOptions<TemporalModuleOptions, "create"> & Partial<{}>;
|
|
44
|
+
declare const ConfigurableModuleClass: _$_nestjs_common0.ConfigurableModuleCls<TemporalModuleOptions, "registerWorker", "create", {}>, TEMPORAL_MODULE_OPTIONS_TOKEN: string | symbol, TEMPORAL_MODULE_OPTIONS_TYPE: TemporalModuleOptions & Partial<{}>, TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE: _$_nestjs_common0.ConfigurableModuleAsyncOptions<TemporalModuleOptions, "create"> & Partial<{}>;
|
|
46
45
|
//#endregion
|
|
47
46
|
//#region src/temporal.module.d.ts
|
|
48
47
|
/**
|
|
@@ -73,7 +72,7 @@ declare class TemporalModule extends ConfigurableModuleClass {
|
|
|
73
72
|
//#region src/temporal-metadata.accessors.d.ts
|
|
74
73
|
/**
|
|
75
74
|
* TemporalMetadataAccessor provides methods to check and retrieve Temporal decorator metadata.
|
|
76
|
-
* It uses NestJS Reflector to access metadata set by @Activities()
|
|
75
|
+
* It uses NestJS Reflector to access metadata set by @Activities() and @Activity() decorators.
|
|
77
76
|
*/
|
|
78
77
|
declare class TemporalMetadataAccessor {
|
|
79
78
|
private readonly reflector;
|
|
@@ -82,10 +81,6 @@ declare class TemporalMetadataAccessor {
|
|
|
82
81
|
getActivities(target: Type<unknown> | Function): unknown;
|
|
83
82
|
isActivity(target: Type<unknown> | Function | null | undefined): boolean;
|
|
84
83
|
getActivity(target: Type<unknown> | Function): unknown;
|
|
85
|
-
isWorkflows(target: Type<unknown> | Function | null | undefined): boolean;
|
|
86
|
-
getWorkflows(target: Type<unknown> | Function): unknown;
|
|
87
|
-
isWorkflowMethod(target: Type<unknown> | Function | null | undefined): boolean;
|
|
88
|
-
getWorkflowMethod(target: Type<unknown> | Function): unknown;
|
|
89
84
|
}
|
|
90
85
|
//#endregion
|
|
91
86
|
//#region src/temporal.explorer.d.ts
|
|
@@ -157,7 +152,7 @@ declare class TemporalExplorer implements OnModuleInit, OnModuleDestroy, OnAppli
|
|
|
157
152
|
/**
|
|
158
153
|
* Options for the @Activities() decorator.
|
|
159
154
|
*/
|
|
160
|
-
interface ActivitiesOptions extends ActivityOptions
|
|
155
|
+
interface ActivitiesOptions extends ActivityOptions {
|
|
161
156
|
/**
|
|
162
157
|
* Specifies the name of the queue to subscribe to.
|
|
163
158
|
*/
|
|
@@ -167,6 +162,15 @@ interface ActivitiesOptions extends ActivityOptions$1 {
|
|
|
167
162
|
*/
|
|
168
163
|
scope?: Scope;
|
|
169
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Options for the @Activity() decorator.
|
|
167
|
+
*/
|
|
168
|
+
interface ActivityOptions {
|
|
169
|
+
/**
|
|
170
|
+
* Custom name for the activity. If not provided, the method name is used.
|
|
171
|
+
*/
|
|
172
|
+
name?: string;
|
|
173
|
+
}
|
|
170
174
|
/**
|
|
171
175
|
* Marks a class as containing Temporal activities.
|
|
172
176
|
* Methods within this class decorated with @Activity() will be registered as Temporal activities.
|
|
@@ -184,20 +188,7 @@ interface ActivitiesOptions extends ActivityOptions$1 {
|
|
|
184
188
|
* }
|
|
185
189
|
* ```
|
|
186
190
|
*/
|
|
187
|
-
declare
|
|
188
|
-
declare function Activities(queueName: string): ClassDecorator;
|
|
189
|
-
declare function Activities(activitiesOptions: ActivitiesOptions): ClassDecorator;
|
|
190
|
-
//#endregion
|
|
191
|
-
//#region src/decorators/activity.decorator.d.ts
|
|
192
|
-
/**
|
|
193
|
-
* Options for the @Activity() decorator.
|
|
194
|
-
*/
|
|
195
|
-
interface ActivityOptions {
|
|
196
|
-
/**
|
|
197
|
-
* Custom name for the activity. If not provided, the method name is used.
|
|
198
|
-
*/
|
|
199
|
-
name?: string;
|
|
200
|
-
}
|
|
191
|
+
declare const Activities: (options?: ActivitiesOptions) => ClassDecorator;
|
|
201
192
|
/**
|
|
202
193
|
* Marks a method as a Temporal activity.
|
|
203
194
|
* The method must be within a class decorated with @Activities().
|
|
@@ -214,9 +205,7 @@ interface ActivityOptions {
|
|
|
214
205
|
* async anotherActivity() { }
|
|
215
206
|
* ```
|
|
216
207
|
*/
|
|
217
|
-
declare
|
|
218
|
-
declare function Activity(name: string): MethodDecorator;
|
|
219
|
-
declare function Activity(options: ActivityOptions): MethodDecorator;
|
|
208
|
+
declare const Activity: (options?: ActivityOptions) => MethodDecorator;
|
|
220
209
|
//#endregion
|
|
221
210
|
//#region src/decorators/inject-temporal-client.decorator.d.ts
|
|
222
211
|
/**
|
|
@@ -233,30 +222,8 @@ declare function Activity(options: ActivityOptions): MethodDecorator;
|
|
|
233
222
|
*/
|
|
234
223
|
declare const InjectTemporalClient: (name?: string) => ParameterDecorator;
|
|
235
224
|
//#endregion
|
|
236
|
-
//#region src/decorators/
|
|
237
|
-
|
|
238
|
-
name?: string;
|
|
239
|
-
}
|
|
240
|
-
declare function WorkflowMethod(): MethodDecorator;
|
|
241
|
-
declare function WorkflowMethod(name: string): MethodDecorator;
|
|
242
|
-
declare function WorkflowMethod(options: WorkflowMethodOptions): MethodDecorator;
|
|
243
|
-
//#endregion
|
|
244
|
-
//#region src/decorators/workflows.decorator.d.ts
|
|
245
|
-
interface WorkflowsOptions {
|
|
246
|
-
/**
|
|
247
|
-
* Specifies the name of the queue to subscribe to.
|
|
248
|
-
*/
|
|
249
|
-
name?: string;
|
|
250
|
-
/**
|
|
251
|
-
* Specifies the lifetime of an injected Processor.
|
|
252
|
-
*/
|
|
253
|
-
scope?: Scope;
|
|
254
|
-
}
|
|
255
|
-
declare function Workflows(): ClassDecorator;
|
|
256
|
-
declare function Workflows(name: string): ClassDecorator;
|
|
257
|
-
declare function Workflows(options: WorkflowsOptions): ClassDecorator;
|
|
258
|
-
//#endregion
|
|
259
|
-
//#region src/decorators/payload.decorator.d.ts
|
|
225
|
+
//#region src/decorators/context.decorator.d.ts
|
|
226
|
+
declare const ActivityContext: () => (...dataOrPipes: any[]) => ParameterDecorator;
|
|
260
227
|
declare const ActivityPayload: () => (...dataOrPipes: any[]) => ParameterDecorator;
|
|
261
228
|
//#endregion
|
|
262
229
|
//#region src/core/temporal-execution-context.d.ts
|
|
@@ -277,5 +244,5 @@ declare class TemporalExecutionContext implements ExecutionContext {
|
|
|
277
244
|
}
|
|
278
245
|
type Type$1<T = unknown> = new (...args: unknown[]) => T;
|
|
279
246
|
//#endregion
|
|
280
|
-
export { Activities, ActivitiesOptions, Activity, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule
|
|
247
|
+
export { Activities, ActivitiesOptions, Activity, ActivityContext, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule };
|
|
281
248
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import * as _nestjs_common0 from "@nestjs/common";
|
|
1
|
+
import * as _$_nestjs_common0 from "@nestjs/common";
|
|
2
2
|
import { DynamicModule, ExecutionContext, FactoryProvider, ModuleMetadata, OnApplicationBootstrap, OnModuleDestroy, OnModuleInit, Scope, Type } from "@nestjs/common";
|
|
3
3
|
import { DiscoveryService, ExternalContextCreator, MetadataScanner, Reflector } from "@nestjs/core";
|
|
4
4
|
import { NativeConnectionOptions, RuntimeOptions, WorkerOptions } from "@temporalio/worker";
|
|
5
5
|
import { Info } from "@temporalio/activity";
|
|
6
6
|
import { WorkflowClientOptions } from "@temporalio/client";
|
|
7
|
-
import { ActivityOptions as ActivityOptions$1 } from "@temporalio/workflow";
|
|
8
7
|
|
|
9
8
|
//#region src/interfaces/shared-workflow-client-options.interface.d.ts
|
|
10
9
|
interface SharedWorkflowClientOptionsFactory {
|
|
@@ -42,7 +41,7 @@ interface TemporalModuleOptions {
|
|
|
42
41
|
activityClasses?: object[];
|
|
43
42
|
errorOnDuplicateActivities?: boolean;
|
|
44
43
|
}
|
|
45
|
-
declare const ConfigurableModuleClass: _nestjs_common0.ConfigurableModuleCls<TemporalModuleOptions, "registerWorker", "create", {}>, TEMPORAL_MODULE_OPTIONS_TOKEN: string | symbol, TEMPORAL_MODULE_OPTIONS_TYPE: TemporalModuleOptions & Partial<{}>, TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE: _nestjs_common0.ConfigurableModuleAsyncOptions<TemporalModuleOptions, "create"> & Partial<{}>;
|
|
44
|
+
declare const ConfigurableModuleClass: _$_nestjs_common0.ConfigurableModuleCls<TemporalModuleOptions, "registerWorker", "create", {}>, TEMPORAL_MODULE_OPTIONS_TOKEN: string | symbol, TEMPORAL_MODULE_OPTIONS_TYPE: TemporalModuleOptions & Partial<{}>, TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE: _$_nestjs_common0.ConfigurableModuleAsyncOptions<TemporalModuleOptions, "create"> & Partial<{}>;
|
|
46
45
|
//#endregion
|
|
47
46
|
//#region src/temporal.module.d.ts
|
|
48
47
|
/**
|
|
@@ -73,7 +72,7 @@ declare class TemporalModule extends ConfigurableModuleClass {
|
|
|
73
72
|
//#region src/temporal-metadata.accessors.d.ts
|
|
74
73
|
/**
|
|
75
74
|
* TemporalMetadataAccessor provides methods to check and retrieve Temporal decorator metadata.
|
|
76
|
-
* It uses NestJS Reflector to access metadata set by @Activities()
|
|
75
|
+
* It uses NestJS Reflector to access metadata set by @Activities() and @Activity() decorators.
|
|
77
76
|
*/
|
|
78
77
|
declare class TemporalMetadataAccessor {
|
|
79
78
|
private readonly reflector;
|
|
@@ -82,10 +81,6 @@ declare class TemporalMetadataAccessor {
|
|
|
82
81
|
getActivities(target: Type<unknown> | Function): unknown;
|
|
83
82
|
isActivity(target: Type<unknown> | Function | null | undefined): boolean;
|
|
84
83
|
getActivity(target: Type<unknown> | Function): unknown;
|
|
85
|
-
isWorkflows(target: Type<unknown> | Function | null | undefined): boolean;
|
|
86
|
-
getWorkflows(target: Type<unknown> | Function): unknown;
|
|
87
|
-
isWorkflowMethod(target: Type<unknown> | Function | null | undefined): boolean;
|
|
88
|
-
getWorkflowMethod(target: Type<unknown> | Function): unknown;
|
|
89
84
|
}
|
|
90
85
|
//#endregion
|
|
91
86
|
//#region src/temporal.explorer.d.ts
|
|
@@ -157,7 +152,7 @@ declare class TemporalExplorer implements OnModuleInit, OnModuleDestroy, OnAppli
|
|
|
157
152
|
/**
|
|
158
153
|
* Options for the @Activities() decorator.
|
|
159
154
|
*/
|
|
160
|
-
interface ActivitiesOptions extends ActivityOptions
|
|
155
|
+
interface ActivitiesOptions extends ActivityOptions {
|
|
161
156
|
/**
|
|
162
157
|
* Specifies the name of the queue to subscribe to.
|
|
163
158
|
*/
|
|
@@ -167,6 +162,15 @@ interface ActivitiesOptions extends ActivityOptions$1 {
|
|
|
167
162
|
*/
|
|
168
163
|
scope?: Scope;
|
|
169
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Options for the @Activity() decorator.
|
|
167
|
+
*/
|
|
168
|
+
interface ActivityOptions {
|
|
169
|
+
/**
|
|
170
|
+
* Custom name for the activity. If not provided, the method name is used.
|
|
171
|
+
*/
|
|
172
|
+
name?: string;
|
|
173
|
+
}
|
|
170
174
|
/**
|
|
171
175
|
* Marks a class as containing Temporal activities.
|
|
172
176
|
* Methods within this class decorated with @Activity() will be registered as Temporal activities.
|
|
@@ -184,20 +188,7 @@ interface ActivitiesOptions extends ActivityOptions$1 {
|
|
|
184
188
|
* }
|
|
185
189
|
* ```
|
|
186
190
|
*/
|
|
187
|
-
declare
|
|
188
|
-
declare function Activities(queueName: string): ClassDecorator;
|
|
189
|
-
declare function Activities(activitiesOptions: ActivitiesOptions): ClassDecorator;
|
|
190
|
-
//#endregion
|
|
191
|
-
//#region src/decorators/activity.decorator.d.ts
|
|
192
|
-
/**
|
|
193
|
-
* Options for the @Activity() decorator.
|
|
194
|
-
*/
|
|
195
|
-
interface ActivityOptions {
|
|
196
|
-
/**
|
|
197
|
-
* Custom name for the activity. If not provided, the method name is used.
|
|
198
|
-
*/
|
|
199
|
-
name?: string;
|
|
200
|
-
}
|
|
191
|
+
declare const Activities: (options?: ActivitiesOptions) => ClassDecorator;
|
|
201
192
|
/**
|
|
202
193
|
* Marks a method as a Temporal activity.
|
|
203
194
|
* The method must be within a class decorated with @Activities().
|
|
@@ -214,9 +205,7 @@ interface ActivityOptions {
|
|
|
214
205
|
* async anotherActivity() { }
|
|
215
206
|
* ```
|
|
216
207
|
*/
|
|
217
|
-
declare
|
|
218
|
-
declare function Activity(name: string): MethodDecorator;
|
|
219
|
-
declare function Activity(options: ActivityOptions): MethodDecorator;
|
|
208
|
+
declare const Activity: (options?: ActivityOptions) => MethodDecorator;
|
|
220
209
|
//#endregion
|
|
221
210
|
//#region src/decorators/inject-temporal-client.decorator.d.ts
|
|
222
211
|
/**
|
|
@@ -233,30 +222,8 @@ declare function Activity(options: ActivityOptions): MethodDecorator;
|
|
|
233
222
|
*/
|
|
234
223
|
declare const InjectTemporalClient: (name?: string) => ParameterDecorator;
|
|
235
224
|
//#endregion
|
|
236
|
-
//#region src/decorators/
|
|
237
|
-
|
|
238
|
-
name?: string;
|
|
239
|
-
}
|
|
240
|
-
declare function WorkflowMethod(): MethodDecorator;
|
|
241
|
-
declare function WorkflowMethod(name: string): MethodDecorator;
|
|
242
|
-
declare function WorkflowMethod(options: WorkflowMethodOptions): MethodDecorator;
|
|
243
|
-
//#endregion
|
|
244
|
-
//#region src/decorators/workflows.decorator.d.ts
|
|
245
|
-
interface WorkflowsOptions {
|
|
246
|
-
/**
|
|
247
|
-
* Specifies the name of the queue to subscribe to.
|
|
248
|
-
*/
|
|
249
|
-
name?: string;
|
|
250
|
-
/**
|
|
251
|
-
* Specifies the lifetime of an injected Processor.
|
|
252
|
-
*/
|
|
253
|
-
scope?: Scope;
|
|
254
|
-
}
|
|
255
|
-
declare function Workflows(): ClassDecorator;
|
|
256
|
-
declare function Workflows(name: string): ClassDecorator;
|
|
257
|
-
declare function Workflows(options: WorkflowsOptions): ClassDecorator;
|
|
258
|
-
//#endregion
|
|
259
|
-
//#region src/decorators/payload.decorator.d.ts
|
|
225
|
+
//#region src/decorators/context.decorator.d.ts
|
|
226
|
+
declare const ActivityContext: () => (...dataOrPipes: any[]) => ParameterDecorator;
|
|
260
227
|
declare const ActivityPayload: () => (...dataOrPipes: any[]) => ParameterDecorator;
|
|
261
228
|
//#endregion
|
|
262
229
|
//#region src/core/temporal-execution-context.d.ts
|
|
@@ -277,5 +244,5 @@ declare class TemporalExecutionContext implements ExecutionContext {
|
|
|
277
244
|
}
|
|
278
245
|
type Type$1<T = unknown> = new (...args: unknown[]) => T;
|
|
279
246
|
//#endregion
|
|
280
|
-
export { Activities, ActivitiesOptions, Activity, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule
|
|
247
|
+
export { Activities, ActivitiesOptions, Activity, ActivityContext, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule };
|
|
281
248
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -4,30 +4,24 @@ import { isObservable, lastValueFrom } from "rxjs";
|
|
|
4
4
|
import { NativeConnection, Runtime, Worker } from "@temporalio/worker";
|
|
5
5
|
import { Context } from "@temporalio/activity";
|
|
6
6
|
import { WorkflowClient } from "@temporalio/client";
|
|
7
|
-
import { SCOPE_OPTIONS_METADATA } from "@nestjs/common/constants";
|
|
8
|
-
|
|
7
|
+
import { SCOPE_OPTIONS_METADATA } from "@nestjs/common/constants.js";
|
|
9
8
|
//#region src/constants/temporal.constants.ts
|
|
10
9
|
const TEMPORAL_MODULE_ACTIVITIES = "_temporal_module_activities";
|
|
11
10
|
const TEMPORAL_MODULE_ACTIVITY = "_temporal_module_activity";
|
|
12
|
-
const TEMPORAL_MODULE_WORKFLOW = "_temporal_module_workFlow";
|
|
13
|
-
const TEMPORAL_MODULE_WORKFLOW_METHOD = "_temporal_module_workflow_method";
|
|
14
11
|
const TEMPORAL_ARGS_METADATA = "_temporal_module_args";
|
|
15
|
-
|
|
16
12
|
//#endregion
|
|
17
|
-
//#region \0@oxc-project+runtime@0.
|
|
13
|
+
//#region \0@oxc-project+runtime@0.122.0/helpers/decorateMetadata.js
|
|
18
14
|
function __decorateMetadata(k, v) {
|
|
19
15
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
20
16
|
}
|
|
21
|
-
|
|
22
17
|
//#endregion
|
|
23
|
-
//#region \0@oxc-project+runtime@0.
|
|
18
|
+
//#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
|
|
24
19
|
function __decorate(decorators, target, key, desc) {
|
|
25
20
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
26
21
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
27
22
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
28
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
29
24
|
}
|
|
30
|
-
|
|
31
25
|
//#endregion
|
|
32
26
|
//#region src/temporal-metadata.accessors.ts
|
|
33
27
|
var _ref$1;
|
|
@@ -49,27 +43,11 @@ let TemporalMetadataAccessor = class TemporalMetadataAccessor {
|
|
|
49
43
|
getActivity(target) {
|
|
50
44
|
return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);
|
|
51
45
|
}
|
|
52
|
-
isWorkflows(target) {
|
|
53
|
-
if (!target) return false;
|
|
54
|
-
return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);
|
|
55
|
-
}
|
|
56
|
-
getWorkflows(target) {
|
|
57
|
-
return this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);
|
|
58
|
-
}
|
|
59
|
-
isWorkflowMethod(target) {
|
|
60
|
-
if (!target) return false;
|
|
61
|
-
return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);
|
|
62
|
-
}
|
|
63
|
-
getWorkflowMethod(target) {
|
|
64
|
-
return this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);
|
|
65
|
-
}
|
|
66
46
|
};
|
|
67
47
|
TemporalMetadataAccessor = __decorate([Injectable(), __decorateMetadata("design:paramtypes", [typeof (_ref$1 = typeof Reflector !== "undefined" && Reflector) === "function" ? _ref$1 : Object])], TemporalMetadataAccessor);
|
|
68
|
-
|
|
69
48
|
//#endregion
|
|
70
49
|
//#region src/temporal.module-definition.ts
|
|
71
50
|
const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN: TEMPORAL_MODULE_OPTIONS_TOKEN, OPTIONS_TYPE: TEMPORAL_MODULE_OPTIONS_TYPE, ASYNC_OPTIONS_TYPE: TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE } = new ConfigurableModuleBuilder().setClassMethodName("registerWorker").build();
|
|
72
|
-
|
|
73
51
|
//#endregion
|
|
74
52
|
//#region src/temporal-enums.ts
|
|
75
53
|
let TemporalParamType = /* @__PURE__ */ function(TemporalParamType) {
|
|
@@ -77,7 +55,6 @@ let TemporalParamType = /* @__PURE__ */ function(TemporalParamType) {
|
|
|
77
55
|
TemporalParamType[TemporalParamType["CONTEXT"] = 4] = "CONTEXT";
|
|
78
56
|
return TemporalParamType;
|
|
79
57
|
}({});
|
|
80
|
-
|
|
81
58
|
//#endregion
|
|
82
59
|
//#region src/core/temporal-execution-context.ts
|
|
83
60
|
var TemporalExecutionContext = class {
|
|
@@ -114,7 +91,6 @@ var TemporalExecutionContext = class {
|
|
|
114
91
|
return "temporal";
|
|
115
92
|
}
|
|
116
93
|
};
|
|
117
|
-
|
|
118
94
|
//#endregion
|
|
119
95
|
//#region src/temporal-params.factory.ts
|
|
120
96
|
var TemporalParamsFactory = class {
|
|
@@ -130,7 +106,6 @@ var TemporalParamsFactory = class {
|
|
|
130
106
|
}
|
|
131
107
|
}
|
|
132
108
|
};
|
|
133
|
-
|
|
134
109
|
//#endregion
|
|
135
110
|
//#region src/temporal.explorer.ts
|
|
136
111
|
var _ref, _ref2, _ref3, _ref4, _TemporalExplorer;
|
|
@@ -263,8 +238,17 @@ let TemporalExplorer = _TemporalExplorer = class TemporalExplorer {
|
|
|
263
238
|
const paramsFactory = new TemporalParamsFactory(instance, instance[key]);
|
|
264
239
|
const handler = this.externalContextCreator.create(instance, instance[key], key, TEMPORAL_ARGS_METADATA, paramsFactory, void 0, void 0, void 0, "temporal");
|
|
265
240
|
activitiesMethod[key] = async (...args) => {
|
|
266
|
-
const
|
|
267
|
-
|
|
241
|
+
const ctx = Context.current();
|
|
242
|
+
const result = handler(...args, ctx.info);
|
|
243
|
+
ctx.heartbeat(Date.now());
|
|
244
|
+
const interval = setInterval(() => {
|
|
245
|
+
ctx.heartbeat(Date.now());
|
|
246
|
+
}, 5e3);
|
|
247
|
+
try {
|
|
248
|
+
return isObservable(result) ? await lastValueFrom(result) : await result;
|
|
249
|
+
} finally {
|
|
250
|
+
clearInterval(interval);
|
|
251
|
+
}
|
|
268
252
|
};
|
|
269
253
|
}
|
|
270
254
|
});
|
|
@@ -279,7 +263,6 @@ TemporalExplorer = _TemporalExplorer = __decorate([Injectable(), __decorateMetad
|
|
|
279
263
|
typeof (_ref3 = typeof MetadataScanner !== "undefined" && MetadataScanner) === "function" ? _ref3 : Object,
|
|
280
264
|
typeof (_ref4 = typeof ExternalContextCreator !== "undefined" && ExternalContextCreator) === "function" ? _ref4 : Object
|
|
281
265
|
])], TemporalExplorer);
|
|
282
|
-
|
|
283
266
|
//#endregion
|
|
284
267
|
//#region src/utils/get-queue-token.util.ts
|
|
285
268
|
function getQueueToken(name) {
|
|
@@ -288,7 +271,6 @@ function getQueueToken(name) {
|
|
|
288
271
|
function getAsyncQueueToken(name) {
|
|
289
272
|
return name ? `TemporalAsyncQueue_${name}` : "TemporalAsyncQueue_default";
|
|
290
273
|
}
|
|
291
|
-
|
|
292
274
|
//#endregion
|
|
293
275
|
//#region src/utils/client.util.ts
|
|
294
276
|
/**
|
|
@@ -318,7 +300,6 @@ function assignOnAppShutdownHook(client) {
|
|
|
318
300
|
function getWorkflowClient(options) {
|
|
319
301
|
return assignOnAppShutdownHook(new WorkflowClient(options));
|
|
320
302
|
}
|
|
321
|
-
|
|
322
303
|
//#endregion
|
|
323
304
|
//#region src/utils/provider.util.ts
|
|
324
305
|
function createAsyncProvider(provide, options) {
|
|
@@ -349,7 +330,6 @@ function createClientAsyncProvider(asyncOptions) {
|
|
|
349
330
|
DiscoveryModule
|
|
350
331
|
];
|
|
351
332
|
}
|
|
352
|
-
|
|
353
333
|
//#endregion
|
|
354
334
|
//#region src/temporal.module.ts
|
|
355
335
|
var _TemporalModule;
|
|
@@ -389,23 +369,46 @@ let TemporalModule = _TemporalModule = class TemporalModule extends Configurable
|
|
|
389
369
|
}
|
|
390
370
|
};
|
|
391
371
|
TemporalModule = _TemporalModule = __decorate([Module({})], TemporalModule);
|
|
392
|
-
|
|
393
372
|
//#endregion
|
|
394
373
|
//#region src/decorators/activities.decorator.ts
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
374
|
+
/**
|
|
375
|
+
* Marks a class as containing Temporal activities.
|
|
376
|
+
* Methods within this class decorated with @Activity() will be registered as Temporal activities.
|
|
377
|
+
*
|
|
378
|
+
* @param queueNameOrOptions - Optional queue name (string) or options object
|
|
379
|
+
* @returns Class decorator
|
|
380
|
+
*
|
|
381
|
+
* @example
|
|
382
|
+
* ```typescript
|
|
383
|
+
* @Injectable()
|
|
384
|
+
* @Activities()
|
|
385
|
+
* export class MyActivities {
|
|
386
|
+
* @Activity()
|
|
387
|
+
* async doSomething() { }
|
|
388
|
+
* }
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
const Activities = (options) => (target) => {
|
|
392
|
+
SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);
|
|
393
|
+
SetMetadata(TEMPORAL_MODULE_ACTIVITIES, options)(target);
|
|
394
|
+
};
|
|
395
|
+
/**
|
|
396
|
+
* Marks a method as a Temporal activity.
|
|
397
|
+
* The method must be within a class decorated with @Activities().
|
|
398
|
+
*
|
|
399
|
+
* @param nameOrOptions - Optional activity name (string) or options object
|
|
400
|
+
* @returns Method decorator
|
|
401
|
+
*
|
|
402
|
+
* @example
|
|
403
|
+
* ```typescript
|
|
404
|
+
* @Activity()
|
|
405
|
+
* async processOrder(orderId: string) { }
|
|
406
|
+
*
|
|
407
|
+
* @Activity('custom-activity-name')
|
|
408
|
+
* async anotherActivity() { }
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
411
|
+
const Activity = (options) => SetMetadata(TEMPORAL_MODULE_ACTIVITY, options || {});
|
|
409
412
|
//#endregion
|
|
410
413
|
//#region src/decorators/inject-temporal-client.decorator.ts
|
|
411
414
|
/**
|
|
@@ -421,29 +424,15 @@ function Activity(nameOrOptions) {
|
|
|
421
424
|
* ```
|
|
422
425
|
*/
|
|
423
426
|
const InjectTemporalClient = (name) => Inject(getQueueToken(name));
|
|
424
|
-
|
|
425
427
|
//#endregion
|
|
426
|
-
//#region src/decorators/
|
|
427
|
-
|
|
428
|
-
return
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
//#endregion
|
|
432
|
-
//#region src/decorators/workflows.decorator.ts
|
|
433
|
-
function Workflows(nameOrOptions) {
|
|
434
|
-
const options = nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions };
|
|
435
|
-
return (target) => {
|
|
436
|
-
SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);
|
|
437
|
-
SetMetadata(TEMPORAL_MODULE_WORKFLOW, options)(target);
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
//#endregion
|
|
442
|
-
//#region src/decorators/payload.decorator.ts
|
|
428
|
+
//#region src/decorators/context.decorator.ts
|
|
429
|
+
const ActivityContext = () => createParamDecorator((_, ctx) => {
|
|
430
|
+
return ctx.getArgByIndex(1);
|
|
431
|
+
});
|
|
443
432
|
const ActivityPayload = () => createParamDecorator((_, ctx) => {
|
|
444
433
|
return ctx.getArgByIndex(0);
|
|
445
434
|
});
|
|
446
|
-
|
|
447
435
|
//#endregion
|
|
448
|
-
export { Activities, Activity, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule
|
|
436
|
+
export { Activities, Activity, ActivityContext, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule };
|
|
437
|
+
|
|
449
438
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/constants/temporal.constants.ts","../src/temporal-metadata.accessors.ts","../src/temporal.module-definition.ts","../src/temporal-enums.ts","../src/core/temporal-execution-context.ts","../src/temporal-params.factory.ts","../src/temporal.explorer.ts","../src/utils/get-queue-token.util.ts","../src/utils/client.util.ts","../src/utils/provider.util.ts","../src/temporal.module.ts","../src/decorators/activities.decorator.ts","../src/decorators/activity.decorator.ts","../src/decorators/inject-temporal-client.decorator.ts","../src/decorators/workflow.decorator.ts","../src/decorators/workflows.decorator.ts","../src/decorators/payload.decorator.ts"],"sourcesContent":["export const TEMPORAL_MODULE_ACTIVITIES = '_temporal_module_activities';\nexport const TEMPORAL_MODULE_ACTIVITY = '_temporal_module_activity';\nexport const TEMPORAL_MODULE_WORKFLOW = '_temporal_module_workFlow';\nexport const TEMPORAL_MODULE_WORKFLOW_METHOD =\n '_temporal_module_workflow_method';\nexport const TEMPORAL_ARGS_METADATA = '_temporal_module_args';\nexport const TEMPORAL_CONTEXT_METADATA = '_temporal_module_context';","import { Injectable, Type } from '@nestjs/common';\nimport { Reflector } from '@nestjs/core';\n\nimport {\n TEMPORAL_MODULE_ACTIVITIES,\n TEMPORAL_MODULE_ACTIVITY,\n TEMPORAL_MODULE_WORKFLOW,\n TEMPORAL_MODULE_WORKFLOW_METHOD,\n} from './constants/temporal.constants';\n\n/**\n * TemporalMetadataAccessor provides methods to check and retrieve Temporal decorator metadata.\n * It uses NestJS Reflector to access metadata set by @Activities(), @Activity(), @Workflows(), and @WorkflowMethod() decorators.\n */\n@Injectable()\nexport class TemporalMetadataAccessor {\n constructor(private readonly reflector: Reflector) {}\n\n isActivities(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n getActivities(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n isActivity(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n getActivity(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n isWorkflows(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);\n }\n\n getWorkflows(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_WORKFLOW, target);\n }\n\n isWorkflowMethod(\n target: Type<unknown> | Function | null | undefined,\n ): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);\n }\n\n getWorkflowMethod(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_WORKFLOW_METHOD, target);\n }\n}\n","import {\n NativeConnectionOptions,\n RuntimeOptions,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { ConfigurableModuleBuilder } from \"@nestjs/common\";\n\nexport interface TemporalModuleOptions {\n workerOptions: WorkerOptions[];\n connectionOptions?: NativeConnectionOptions;\n runtimeOptions?: RuntimeOptions;\n activityClasses?: object[];\n errorOnDuplicateActivities?: boolean;\n}\n\nexport const {\n ConfigurableModuleClass,\n MODULE_OPTIONS_TOKEN: TEMPORAL_MODULE_OPTIONS_TOKEN,\n OPTIONS_TYPE: TEMPORAL_MODULE_OPTIONS_TYPE,\n ASYNC_OPTIONS_TYPE: TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} = new ConfigurableModuleBuilder<TemporalModuleOptions>()\n .setClassMethodName(\"registerWorker\")\n .build();\n","export enum TemporalParamType {\n PAYLOAD = 3,\n CONTEXT = 4,\n}\n\n","import { ExecutionContext } from '@nestjs/common';\nimport { Info } from '@temporalio/activity';\n\nexport class TemporalExecutionContext implements ExecutionContext {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n private readonly args: unknown[]\n ) {}\n\n getClass<T = unknown>(): Type<T> {\n return this.instance.constructor as Type<T>;\n }\n\n getHandler(): Function {\n return this.handler;\n }\n\n getArgs<T extends Array<unknown> = unknown[]>(): T {\n return this.args as T;\n }\n\n getWorkflowInfo(): Info {\n return this.args[0] as Info;\n }\n\n getArgByIndex<T = unknown>(index: number): T {\n return this.args[index] as T;\n }\n\n switchToRpc(): ReturnType<ExecutionContext['switchToRpc']> {\n throw new Error('Context does not support RPC context');\n }\n\n switchToHttp(): ReturnType<ExecutionContext['switchToHttp']> {\n throw new Error('Context does not support HTTP context');\n }\n\n switchToWs(): ReturnType<ExecutionContext['switchToWs']> {\n throw new Error('Context does not support WebSocket context');\n }\n\n getType<TContext extends string = string>(): TContext {\n return 'temporal' as TContext;\n }\n}\n\ntype Type<T = unknown> = new (...args: unknown[]) => T;\n\n","import { ParamData } from '@nestjs/common';\nimport { ParamsFactory } from '@nestjs/core/helpers/external-context-creator';\nimport { TemporalParamType } from './temporal-enums';\nimport { TemporalExecutionContext } from './core/temporal-execution-context';\n\nexport class TemporalParamsFactory implements ParamsFactory {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n ) {}\n\n exchangeKeyForValue(\n type: number,\n data: ParamData,\n args: unknown[],\n ): unknown {\n switch (type) {\n case TemporalParamType.PAYLOAD:\n return data && args[0] && typeof args[0] === 'object'\n ? (args[0] as Record<string, unknown>)[data as string]\n : args[0];\n\n case TemporalParamType.CONTEXT:\n return new TemporalExecutionContext(this.instance, this.handler, args);\n\n default:\n return null;\n }\n }\n}\n\n","import {\n Inject,\n Injectable,\n Logger,\n OnApplicationBootstrap,\n OnModuleDestroy,\n OnModuleInit,\n} from \"@nestjs/common\";\nimport {\n DiscoveryService,\n MetadataScanner,\n ExternalContextCreator,\n} from \"@nestjs/core\";\nimport { InstanceWrapper } from \"@nestjs/core/injector/instance-wrapper\";\nimport { lastValueFrom, isObservable } from \"rxjs\";\nimport {\n NativeConnection,\n NativeConnectionOptions,\n Runtime,\n RuntimeOptions,\n Worker,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport {\n TEMPORAL_MODULE_OPTIONS_TOKEN,\n type TemporalModuleOptions,\n} from \"./temporal.module-definition\";\nimport {\n TEMPORAL_ARGS_METADATA,\n TEMPORAL_CONTEXT_METADATA,\n} from \"./constants/temporal.constants\";\nimport { TemporalParamsFactory } from \"./temporal-params.factory\";\nimport { Context } from \"@temporalio/activity\";\n\n/**\n * TemporalExplorer is responsible for discovering and registering Temporal activities\n * and creating the Temporal worker instance.\n *\n * It scans the NestJS application for classes decorated with @Activities() and methods\n * decorated with @Activity(), then registers them with the Temporal worker.\n */\n@Injectable()\nexport class TemporalExplorer\n implements OnModuleInit, OnModuleDestroy, OnApplicationBootstrap\n{\n @Inject(TEMPORAL_MODULE_OPTIONS_TOKEN)\n private readonly options!: TemporalModuleOptions;\n private readonly logger = new Logger(TemporalExplorer.name);\n private workers?: Worker[];\n private workerRunPromises?: Promise<void>[];\n\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly metadataAccessor: TemporalMetadataAccessor,\n private readonly metadataScanner: MetadataScanner,\n private readonly externalContextCreator: ExternalContextCreator,\n ) {}\n\n /**\n * Initializes the module by exploring and setting up the Temporal worker.\n */\n async onModuleInit(): Promise<void> {\n await this.explore();\n }\n\n /**\n * Shuts down the Temporal worker when the module is destroyed.\n */\n async onModuleDestroy(): Promise<void> {\n if (!this.workers) {\n return;\n }\n\n try {\n this.workers.forEach((worker) => worker.shutdown());\n if (this.workerRunPromises) {\n await Promise.all(this.workerRunPromises);\n }\n } catch (err: unknown) {\n this.logger.warn(\"Temporal workers were not cleanly shutdown.\", {\n err: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n /**\n * Starts the Temporal worker when the application is fully bootstrapped.\n */\n onApplicationBootstrap(): void {\n if (this.workers) {\n this.workerRunPromises = this.workers.map((worker) => worker.run());\n }\n }\n\n /**\n * Explores the application for Temporal activities and creates the worker.\n * This method is called during module initialization.\n */\n async explore(): Promise<void> {\n const workerConfig = this.getWorkerConfigOptions();\n const runTimeOptions = this.getRuntimeOptions();\n const connectionOptions = this.getNativeConnectionOptions();\n\n // Worker must have a taskQueue configured\n if (!workerConfig.some((config) => config.taskQueue)) {\n this.logger.warn(\n \"Temporal worker configuration missing taskQueue. Worker will not be created.\",\n );\n return;\n }\n\n this.findDuplicateActivityMethods();\n\n const activitiesFunc = await this.handleActivities();\n\n if (runTimeOptions) {\n this.logger.verbose(\"Instantiating a new Runtime object\");\n Runtime.install(runTimeOptions);\n }\n\n const sharedWorkerOptions: Partial<WorkerOptions> = {\n activities: activitiesFunc,\n };\n\n if (connectionOptions) {\n this.logger.verbose(\"Connecting to the Temporal server\");\n sharedWorkerOptions.connection =\n await NativeConnection.connect(connectionOptions);\n }\n\n this.logger.verbose(\"Creating a new Worker\");\n this.workers = await Promise.all(\n workerConfig.map((config) =>\n Worker.create({ ...sharedWorkerOptions, ...config }),\n ),\n );\n }\n\n /**\n * Gets the worker configuration options.\n */\n getWorkerConfigOptions(): WorkerOptions[] {\n return this.options.workerOptions;\n }\n\n /**\n * Gets the native connection options for the Temporal server.\n */\n getNativeConnectionOptions(): NativeConnectionOptions | undefined {\n return this.options.connectionOptions;\n }\n\n /**\n * Gets the runtime options for the Temporal worker.\n */\n getRuntimeOptions(): RuntimeOptions | undefined {\n return this.options.runtimeOptions;\n }\n\n /**\n * Gets the activity classes to register with this worker.\n * If undefined, all discovered activities will be registered.\n * Can be either class constructors or InstanceWrappers.\n */\n private getActivityClasses(): (InstanceWrapper | Function)[] | undefined {\n return this.options.activityClasses as\n | (InstanceWrapper | Function)[]\n | undefined;\n }\n\n /**\n * Validates that activity method names are unique across all activity classes.\n * Throws an error if duplicates are found and errorOnDuplicateActivities is enabled.\n */\n findDuplicateActivityMethods(): void {\n if (!this.options.errorOnDuplicateActivities) {\n return;\n }\n\n const activityClasses = this.getActivityClasses();\n if (!activityClasses || activityClasses.length === 0) {\n return;\n }\n\n const activityMethods: Record<string, string[]> = {};\n\n activityClasses.forEach((classOrWrapper: InstanceWrapper | Function) => {\n // Handle both InstanceWrapper and class constructor\n const wrapper = classOrWrapper as InstanceWrapper;\n const instance =\n \"instance\" in wrapper && wrapper.instance\n ? wrapper.instance\n : new (classOrWrapper as new () => unknown)();\n\n this.metadataScanner\n .getAllMethodNames(Object.getPrototypeOf(instance))\n .forEach((key) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n activityMethods[key] = (activityMethods[key] || []).concat(\n instance.constructor.name,\n );\n }\n });\n });\n\n const violations = Object.entries(activityMethods).filter(\n ([, classes]) => classes.length > 1,\n );\n\n if (violations.length > 0) {\n const message = `Activity names must be unique across all Activity classes. Identified activities with conflicting names: ${JSON.stringify(\n Object.fromEntries(violations),\n )}`;\n this.logger.error(message);\n throw new Error(message);\n }\n }\n\n /**\n * Discovers and binds all activity methods from classes decorated with @Activities().\n * Returns an object mapping activity method names to their bound implementations.\n */\n async handleActivities(): Promise<Record<string, Function>> {\n const activitiesMethod: Record<string, Function> = {};\n\n const activityClasses = this.getActivityClasses();\n const activities: InstanceWrapper[] = this.discoveryService\n .getProviders()\n .filter(\n (wrapper: InstanceWrapper) =>\n this.metadataAccessor.isActivities(\n !wrapper.metatype || wrapper.inject\n ? wrapper.instance?.constructor\n : wrapper.metatype,\n ) &&\n (!activityClasses ||\n activityClasses.some(\n (cls) =>\n cls === wrapper.metatype ||\n (cls instanceof Object &&\n \"metatype\" in cls &&\n (cls as InstanceWrapper).metatype === wrapper.metatype),\n )),\n );\n\n activities.forEach((wrapper: InstanceWrapper) => {\n const { instance } = wrapper;\n const isRequestScoped = !wrapper.isDependencyTreeStatic();\n\n this.metadataScanner.scanFromPrototype(\n instance,\n Object.getPrototypeOf(instance),\n (key: string) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n if (isRequestScoped) {\n this.logger.warn(\n `Request-scoped activities are not yet fully supported. Activity \"${key}\" from class \"${instance.constructor.name}\" may not work correctly.`,\n );\n }\n const paramsFactory = new TemporalParamsFactory(\n instance,\n instance[key],\n );\n\n const handler = this.externalContextCreator.create(\n instance,\n instance[key],\n key,\n TEMPORAL_ARGS_METADATA,\n paramsFactory,\n undefined,\n undefined,\n undefined,\n \"temporal\",\n );\n\n activitiesMethod[key] = async (...args: unknown[]) => {\n const result = handler(...args, Context.current().info);\n\n return isObservable(result)\n ? await lastValueFrom(result)\n : await result;\n };\n }\n },\n );\n });\n return activitiesMethod;\n }\n}\n","export function getQueueToken(name?: string): string {\n return name ? `TemporalQueue_${name}` : 'TemporalQueue_default';\n}\n\nexport function getAsyncQueueToken(name?: string): string {\n return name ? `TemporalAsyncQueue_${name}` : 'TemporalAsyncQueue_default';\n}\n","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\n\n/**\n * Assigns an application shutdown hook to a WorkflowClient to ensure\n * the connection is properly closed when the application shuts down.\n *\n * @param client - The WorkflowClient instance\n * @returns The client with shutdown hook assigned\n */\nexport function assignOnAppShutdownHook(\n client: WorkflowClient,\n): WorkflowClient {\n (client as unknown as OnApplicationShutdown).onApplicationShutdown =\n async () => {\n try {\n await client.connection?.close();\n } catch (reason: unknown) {\n const errorMessage =\n reason instanceof Error ? reason.message : String(reason);\n console.error(\n `Temporal client connection was not cleanly closed: ${errorMessage}`,\n );\n }\n };\n return client;\n}\n\n/**\n * Creates a new WorkflowClient instance with application shutdown hook.\n *\n * @param options - Optional WorkflowClient configuration options\n * @returns A WorkflowClient instance with shutdown hook\n */\nexport function getWorkflowClient(\n options?: WorkflowClientOptions,\n): WorkflowClient {\n const client = new WorkflowClient(options);\n return assignOnAppShutdownHook(client);\n}\n","import { Provider } from '@nestjs/common';\nimport { WorkflowClientOptions } from '@temporalio/client';\n\nimport { SharedWorkflowClientOptions } from '../interfaces/shared-workflow-client-options.interface';\nimport {\n SharedConnectionAsyncConfiguration,\n SharedRuntimeAsyncConfiguration,\n SharedWorkerAsyncConfiguration,\n} from '../interfaces';\nimport { getWorkflowClient } from './client.util';\nimport { getAsyncQueueToken, getQueueToken } from './get-queue-token.util';\nimport { DiscoveryModule } from '@nestjs/core';\n\nexport function createAsyncProvider(\n provide: string,\n options?:\n | SharedWorkerAsyncConfiguration\n | SharedRuntimeAsyncConfiguration\n | SharedConnectionAsyncConfiguration\n | SharedWorkflowClientOptions,\n): Provider {\n if (options?.useFactory) {\n const { useFactory, inject } = options;\n return {\n provide,\n useFactory,\n inject: inject || [],\n };\n }\n return {\n provide,\n useValue: options?.useValue || null,\n };\n}\n\nexport function createClientAsyncProvider(\n asyncOptions: SharedWorkflowClientOptions,\n): Provider[] {\n const name = asyncOptions.name ? asyncOptions.name : undefined;\n const optionsProvide = getAsyncQueueToken(name);\n const clientProvide = getQueueToken(name);\n return [\n createAsyncProvider(optionsProvide, asyncOptions),\n {\n provide: clientProvide,\n useFactory: (options?: WorkflowClientOptions) =>\n getWorkflowClient(options),\n inject: [optionsProvide],\n },\n DiscoveryModule,\n ];\n}\n","import { DynamicModule, Module } from \"@nestjs/common\";\nimport { DiscoveryModule } from \"@nestjs/core\";\n\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport { TemporalExplorer } from \"./temporal.explorer\";\nimport {\n SharedWorkflowClientOptions,\n TemporalModuleOptions,\n} from \"./interfaces\";\nimport { createClientProviders } from \"./temporal.providers\";\nimport { createClientAsyncProvider } from \"./utils\";\nimport {\n ConfigurableModuleClass,\n TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} from \"./temporal.module-definition\";\n\n/**\n * TemporalModule provides integration between NestJS and Temporal workflow orchestration.\n *\n * Use registerWorker() or registerWorkerAsync() to register Temporal workers that execute activities.\n * Use registerClient() or registerClientAsync() to register Temporal clients for starting workflows.\n */\n@Module({})\nexport class TemporalModule extends ConfigurableModuleClass {\n /**\n * Registers a Temporal worker asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param options - Async worker configuration options\n * @returns Dynamic module configuration\n */\n static registerWorkerAsync(\n options: typeof TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n ): DynamicModule {\n const superDynamicModule = super.registerWorkerAsync(options);\n superDynamicModule.imports?.push(DiscoveryModule);\n superDynamicModule.providers?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n );\n superDynamicModule.exports?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n DiscoveryModule,\n );\n\n return {\n ...superDynamicModule,\n exports: [DiscoveryModule],\n };\n }\n\n /**\n * Registers a Temporal WorkflowClient asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param asyncSharedWorkflowClientOptions - Async client configuration options\n * @returns Dynamic module configuration\n */\n static registerClientAsync(\n asyncSharedWorkflowClientOptions: SharedWorkflowClientOptions,\n ): DynamicModule {\n const providers = createClientAsyncProvider(\n asyncSharedWorkflowClientOptions,\n );\n\n return {\n global: true,\n module: TemporalModule,\n providers,\n exports: providers,\n };\n }\n}\n","import { Scope, SetMetadata } from '@nestjs/common';\nimport { SCOPE_OPTIONS_METADATA } from '@nestjs/common/constants';\nimport { ActivityOptions } from '@temporalio/workflow';\n\nimport { TEMPORAL_MODULE_ACTIVITIES } from '../constants/temporal.constants';\n\n/**\n * Options for the @Activities() decorator.\n */\nexport interface ActivitiesOptions extends ActivityOptions {\n /**\n * Specifies the name of the queue to subscribe to.\n */\n name?: string;\n /**\n * Specifies the lifetime of an injected Activities class.\n */\n scope?: Scope;\n}\n\n/**\n * Marks a class as containing Temporal activities.\n * Methods within this class decorated with @Activity() will be registered as Temporal activities.\n *\n * @param queueNameOrOptions - Optional queue name (string) or options object\n * @returns Class decorator\n *\n * @example\n * ```typescript\n * @Injectable()\n * @Activities()\n * export class MyActivities {\n * @Activity()\n * async doSomething() { }\n * }\n * ```\n */\nexport function Activities(): ClassDecorator;\nexport function Activities(queueName: string): ClassDecorator;\nexport function Activities(\n activitiesOptions: ActivitiesOptions,\n): ClassDecorator;\nexport function Activities(\n queueNameOrOptions?: string | ActivitiesOptions,\n): ClassDecorator {\n const options =\n queueNameOrOptions && typeof queueNameOrOptions === 'object'\n ? queueNameOrOptions\n : { name: queueNameOrOptions };\n return (target: Function) => {\n SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);\n SetMetadata(TEMPORAL_MODULE_ACTIVITIES, options)(target);\n };\n}\n","import { SetMetadata } from '@nestjs/common';\n\nimport { TEMPORAL_MODULE_ACTIVITY } from '../constants/temporal.constants';\n\n/**\n * Options for the @Activity() decorator.\n */\nexport interface ActivityOptions {\n /**\n * Custom name for the activity. If not provided, the method name is used.\n */\n name?: string;\n}\n\n/**\n * Marks a method as a Temporal activity.\n * The method must be within a class decorated with @Activities().\n *\n * @param nameOrOptions - Optional activity name (string) or options object\n * @returns Method decorator\n *\n * @example\n * ```typescript\n * @Activity()\n * async processOrder(orderId: string) { }\n *\n * @Activity('custom-activity-name')\n * async anotherActivity() { }\n * ```\n */\nexport function Activity(): MethodDecorator;\nexport function Activity(name: string): MethodDecorator;\nexport function Activity(options: ActivityOptions): MethodDecorator;\nexport function Activity(\n nameOrOptions?: string | ActivityOptions,\n): MethodDecorator {\n const options =\n nameOrOptions && typeof nameOrOptions === 'object'\n ? nameOrOptions\n : { name: nameOrOptions };\n\n return SetMetadata(TEMPORAL_MODULE_ACTIVITY, options || {});\n}\n","import { Inject } from '@nestjs/common';\n\nimport { getQueueToken } from '../utils';\n\n/**\n * Injects a Temporal WorkflowClient instance.\n * Use this decorator to inject the client registered via TemporalModule.registerClient().\n *\n * @param name - Optional name of the client instance (for named clients)\n * @returns Parameter decorator for dependency injection\n *\n * @example\n * ```typescript\n * constructor(@InjectTemporalClient() private client: WorkflowClient) {}\n * ```\n */\nexport const InjectTemporalClient = (name?: string): ParameterDecorator =>\n Inject(getQueueToken(name));\n","import { SetMetadata } from '@nestjs/common';\n\nimport { TEMPORAL_MODULE_WORKFLOW_METHOD } from '../constants/temporal.constants';\n\nexport interface WorkflowMethodOptions {\n name?: string;\n}\n\nexport function WorkflowMethod(): MethodDecorator;\nexport function WorkflowMethod(name: string): MethodDecorator;\nexport function WorkflowMethod(options: WorkflowMethodOptions): MethodDecorator;\nexport function WorkflowMethod(\n nameOrOptions?: string | WorkflowMethodOptions,\n): MethodDecorator {\n const options =\n nameOrOptions && typeof nameOrOptions === 'object'\n ? nameOrOptions\n : { name: nameOrOptions };\n\n return SetMetadata(TEMPORAL_MODULE_WORKFLOW_METHOD, options || {});\n}\n","import { Scope, SetMetadata } from '@nestjs/common';\nimport { SCOPE_OPTIONS_METADATA } from '@nestjs/common/constants';\n\nimport { TEMPORAL_MODULE_WORKFLOW } from '../constants/temporal.constants';\n\nexport interface WorkflowsOptions {\n /**\n * Specifies the name of the queue to subscribe to.\n */\n name?: string;\n /**\n * Specifies the lifetime of an injected Processor.\n */\n scope?: Scope;\n}\n\nexport function Workflows(): ClassDecorator;\nexport function Workflows(name: string): ClassDecorator;\nexport function Workflows(options: WorkflowsOptions): ClassDecorator;\nexport function Workflows(\n nameOrOptions?: string | WorkflowsOptions,\n): ClassDecorator {\n const options =\n nameOrOptions && typeof nameOrOptions === 'object'\n ? nameOrOptions\n : { name: nameOrOptions };\n return (target: Function) => {\n SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);\n SetMetadata(TEMPORAL_MODULE_WORKFLOW, options)(target);\n };\n}\n","import { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\nexport const ActivityPayload = () => createParamDecorator((_, ctx: ExecutionContext) => {\n return ctx.getArgByIndex(0);\n});"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/constants/temporal.constants.ts","../src/temporal-metadata.accessors.ts","../src/temporal.module-definition.ts","../src/temporal-enums.ts","../src/core/temporal-execution-context.ts","../src/temporal-params.factory.ts","../src/temporal.explorer.ts","../src/utils/get-queue-token.util.ts","../src/utils/client.util.ts","../src/utils/provider.util.ts","../src/temporal.module.ts","../src/decorators/activities.decorator.ts","../src/decorators/inject-temporal-client.decorator.ts","../src/decorators/context.decorator.ts"],"sourcesContent":["export const TEMPORAL_MODULE_ACTIVITIES = \"_temporal_module_activities\";\nexport const TEMPORAL_MODULE_ACTIVITY = \"_temporal_module_activity\";\n\nexport const TEMPORAL_ARGS_METADATA = \"_temporal_module_args\";\nexport const TEMPORAL_CONTEXT_METADATA = \"_temporal_module_context\";\n","import { Injectable, Type } from \"@nestjs/common\";\nimport { Reflector } from \"@nestjs/core\";\n\nimport {\n TEMPORAL_MODULE_ACTIVITIES,\n TEMPORAL_MODULE_ACTIVITY,\n} from \"./constants/temporal.constants\";\n\n/**\n * TemporalMetadataAccessor provides methods to check and retrieve Temporal decorator metadata.\n * It uses NestJS Reflector to access metadata set by @Activities() and @Activity() decorators.\n */\n@Injectable()\nexport class TemporalMetadataAccessor {\n constructor(private readonly reflector: Reflector) {}\n\n isActivities(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n getActivities(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITIES, target);\n }\n\n isActivity(target: Type<unknown> | Function | null | undefined): boolean {\n if (!target) return false;\n return !!this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n getActivity(target: Type<unknown> | Function): unknown {\n return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);\n }\n\n}\n","import {\n NativeConnectionOptions,\n RuntimeOptions,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { ConfigurableModuleBuilder } from \"@nestjs/common\";\n\nexport interface TemporalModuleOptions {\n workerOptions: WorkerOptions[];\n connectionOptions?: NativeConnectionOptions;\n runtimeOptions?: RuntimeOptions;\n activityClasses?: object[];\n errorOnDuplicateActivities?: boolean;\n}\n\nexport const {\n ConfigurableModuleClass,\n MODULE_OPTIONS_TOKEN: TEMPORAL_MODULE_OPTIONS_TOKEN,\n OPTIONS_TYPE: TEMPORAL_MODULE_OPTIONS_TYPE,\n ASYNC_OPTIONS_TYPE: TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} = new ConfigurableModuleBuilder<TemporalModuleOptions>()\n .setClassMethodName(\"registerWorker\")\n .build();\n","export enum TemporalParamType {\n PAYLOAD = 3,\n CONTEXT = 4,\n}\n\n","import { ExecutionContext } from '@nestjs/common';\nimport { Info } from '@temporalio/activity';\n\nexport class TemporalExecutionContext implements ExecutionContext {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n private readonly args: unknown[]\n ) {}\n\n getClass<T = unknown>(): Type<T> {\n return this.instance.constructor as Type<T>;\n }\n\n getHandler(): Function {\n return this.handler;\n }\n\n getArgs<T extends Array<unknown> = unknown[]>(): T {\n return this.args as T;\n }\n\n getWorkflowInfo(): Info {\n return this.args[0] as Info;\n }\n\n getArgByIndex<T = unknown>(index: number): T {\n return this.args[index] as T;\n }\n\n switchToRpc(): ReturnType<ExecutionContext['switchToRpc']> {\n throw new Error('Context does not support RPC context');\n }\n\n switchToHttp(): ReturnType<ExecutionContext['switchToHttp']> {\n throw new Error('Context does not support HTTP context');\n }\n\n switchToWs(): ReturnType<ExecutionContext['switchToWs']> {\n throw new Error('Context does not support WebSocket context');\n }\n\n getType<TContext extends string = string>(): TContext {\n return 'temporal' as TContext;\n }\n}\n\ntype Type<T = unknown> = new (...args: unknown[]) => T;\n\n","import { ParamData } from '@nestjs/common';\nimport { ParamsFactory } from '@nestjs/core/helpers/external-context-creator';\nimport { TemporalParamType } from './temporal-enums';\nimport { TemporalExecutionContext } from './core/temporal-execution-context';\n\nexport class TemporalParamsFactory implements ParamsFactory {\n constructor(\n private readonly instance: object,\n private readonly handler: Function,\n ) {}\n\n exchangeKeyForValue(\n type: number,\n data: ParamData,\n args: unknown[],\n ): unknown {\n switch (type) {\n case TemporalParamType.PAYLOAD:\n return data && args[0] && typeof args[0] === 'object'\n ? (args[0] as Record<string, unknown>)[data as string]\n : args[0];\n\n case TemporalParamType.CONTEXT:\n return new TemporalExecutionContext(this.instance, this.handler, args);\n\n default:\n return null;\n }\n }\n}\n\n","import {\n Inject,\n Injectable,\n Logger,\n OnApplicationBootstrap,\n OnModuleDestroy,\n OnModuleInit,\n} from \"@nestjs/common\";\nimport {\n DiscoveryService,\n MetadataScanner,\n ExternalContextCreator,\n} from \"@nestjs/core\";\nimport { InstanceWrapper } from \"@nestjs/core/injector/instance-wrapper\";\nimport { lastValueFrom, isObservable } from \"rxjs\";\nimport {\n NativeConnection,\n NativeConnectionOptions,\n Runtime,\n RuntimeOptions,\n Worker,\n WorkerOptions,\n} from \"@temporalio/worker\";\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport {\n TEMPORAL_MODULE_OPTIONS_TOKEN,\n type TemporalModuleOptions,\n} from \"./temporal.module-definition\";\nimport {\n TEMPORAL_ARGS_METADATA,\n TEMPORAL_CONTEXT_METADATA,\n} from \"./constants/temporal.constants\";\nimport { TemporalParamsFactory } from \"./temporal-params.factory\";\nimport { Context } from \"@temporalio/activity\";\n\n/**\n * TemporalExplorer is responsible for discovering and registering Temporal activities\n * and creating the Temporal worker instance.\n *\n * It scans the NestJS application for classes decorated with @Activities() and methods\n * decorated with @Activity(), then registers them with the Temporal worker.\n */\n@Injectable()\nexport class TemporalExplorer\n implements OnModuleInit, OnModuleDestroy, OnApplicationBootstrap\n{\n @Inject(TEMPORAL_MODULE_OPTIONS_TOKEN)\n private readonly options!: TemporalModuleOptions;\n private readonly logger = new Logger(TemporalExplorer.name);\n private workers?: Worker[];\n private workerRunPromises?: Promise<void>[];\n\n constructor(\n private readonly discoveryService: DiscoveryService,\n private readonly metadataAccessor: TemporalMetadataAccessor,\n private readonly metadataScanner: MetadataScanner,\n private readonly externalContextCreator: ExternalContextCreator,\n ) {}\n\n /**\n * Initializes the module by exploring and setting up the Temporal worker.\n */\n async onModuleInit(): Promise<void> {\n await this.explore();\n }\n\n /**\n * Shuts down the Temporal worker when the module is destroyed.\n */\n async onModuleDestroy(): Promise<void> {\n if (!this.workers) {\n return;\n }\n\n try {\n this.workers.forEach((worker) => worker.shutdown());\n if (this.workerRunPromises) {\n await Promise.all(this.workerRunPromises);\n }\n } catch (err: unknown) {\n this.logger.warn(\"Temporal workers were not cleanly shutdown.\", {\n err: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n /**\n * Starts the Temporal worker when the application is fully bootstrapped.\n */\n onApplicationBootstrap(): void {\n if (this.workers) {\n this.workerRunPromises = this.workers.map((worker) => worker.run());\n }\n }\n\n /**\n * Explores the application for Temporal activities and creates the worker.\n * This method is called during module initialization.\n */\n async explore(): Promise<void> {\n const workerConfig = this.getWorkerConfigOptions();\n const runTimeOptions = this.getRuntimeOptions();\n const connectionOptions = this.getNativeConnectionOptions();\n\n // Worker must have a taskQueue configured\n if (!workerConfig.some((config) => config.taskQueue)) {\n this.logger.warn(\n \"Temporal worker configuration missing taskQueue. Worker will not be created.\",\n );\n return;\n }\n\n this.findDuplicateActivityMethods();\n\n const activitiesFunc = await this.handleActivities();\n\n if (runTimeOptions) {\n this.logger.verbose(\"Instantiating a new Runtime object\");\n Runtime.install(runTimeOptions);\n }\n\n const sharedWorkerOptions: Partial<WorkerOptions> = {\n activities: activitiesFunc,\n };\n\n if (connectionOptions) {\n this.logger.verbose(\"Connecting to the Temporal server\");\n sharedWorkerOptions.connection =\n await NativeConnection.connect(connectionOptions);\n }\n\n this.logger.verbose(\"Creating a new Worker\");\n this.workers = await Promise.all(\n workerConfig.map((config) =>\n Worker.create({ ...sharedWorkerOptions, ...config }),\n ),\n );\n }\n\n /**\n * Gets the worker configuration options.\n */\n getWorkerConfigOptions(): WorkerOptions[] {\n return this.options.workerOptions;\n }\n\n /**\n * Gets the native connection options for the Temporal server.\n */\n getNativeConnectionOptions(): NativeConnectionOptions | undefined {\n return this.options.connectionOptions;\n }\n\n /**\n * Gets the runtime options for the Temporal worker.\n */\n getRuntimeOptions(): RuntimeOptions | undefined {\n return this.options.runtimeOptions;\n }\n\n /**\n * Gets the activity classes to register with this worker.\n * If undefined, all discovered activities will be registered.\n * Can be either class constructors or InstanceWrappers.\n */\n private getActivityClasses(): (InstanceWrapper | Function)[] | undefined {\n return this.options.activityClasses as\n | (InstanceWrapper | Function)[]\n | undefined;\n }\n\n /**\n * Validates that activity method names are unique across all activity classes.\n * Throws an error if duplicates are found and errorOnDuplicateActivities is enabled.\n */\n findDuplicateActivityMethods(): void {\n if (!this.options.errorOnDuplicateActivities) {\n return;\n }\n\n const activityClasses = this.getActivityClasses();\n if (!activityClasses || activityClasses.length === 0) {\n return;\n }\n\n const activityMethods: Record<string, string[]> = {};\n\n activityClasses.forEach((classOrWrapper: InstanceWrapper | Function) => {\n // Handle both InstanceWrapper and class constructor\n const wrapper = classOrWrapper as InstanceWrapper;\n const instance =\n \"instance\" in wrapper && wrapper.instance\n ? wrapper.instance\n : new (classOrWrapper as new () => unknown)();\n\n this.metadataScanner\n .getAllMethodNames(Object.getPrototypeOf(instance))\n .forEach((key) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n activityMethods[key] = (activityMethods[key] || []).concat(\n instance.constructor.name,\n );\n }\n });\n });\n\n const violations = Object.entries(activityMethods).filter(\n ([, classes]) => classes.length > 1,\n );\n\n if (violations.length > 0) {\n const message = `Activity names must be unique across all Activity classes. Identified activities with conflicting names: ${JSON.stringify(\n Object.fromEntries(violations),\n )}`;\n this.logger.error(message);\n throw new Error(message);\n }\n }\n\n /**\n * Discovers and binds all activity methods from classes decorated with @Activities().\n * Returns an object mapping activity method names to their bound implementations.\n */\n async handleActivities(): Promise<Record<string, Function>> {\n const activitiesMethod: Record<string, Function> = {};\n\n const activityClasses = this.getActivityClasses();\n const activities: InstanceWrapper[] = this.discoveryService\n .getProviders()\n .filter(\n (wrapper: InstanceWrapper) =>\n this.metadataAccessor.isActivities(\n !wrapper.metatype || wrapper.inject\n ? wrapper.instance?.constructor\n : wrapper.metatype,\n ) &&\n (!activityClasses ||\n activityClasses.some(\n (cls) =>\n cls === wrapper.metatype ||\n (cls instanceof Object &&\n \"metatype\" in cls &&\n (cls as InstanceWrapper).metatype === wrapper.metatype),\n )),\n );\n\n activities.forEach((wrapper: InstanceWrapper) => {\n const { instance } = wrapper;\n const isRequestScoped = !wrapper.isDependencyTreeStatic();\n\n this.metadataScanner.scanFromPrototype(\n instance,\n Object.getPrototypeOf(instance),\n (key: string) => {\n if (this.metadataAccessor.isActivity(instance[key])) {\n if (isRequestScoped) {\n this.logger.warn(\n `Request-scoped activities are not yet fully supported. Activity \"${key}\" from class \"${instance.constructor.name}\" may not work correctly.`,\n );\n }\n const paramsFactory = new TemporalParamsFactory(\n instance,\n instance[key],\n );\n\n const handler = this.externalContextCreator.create(\n instance,\n instance[key],\n key,\n TEMPORAL_ARGS_METADATA,\n paramsFactory,\n undefined,\n undefined,\n undefined,\n \"temporal\",\n );\n\n activitiesMethod[key] = async (...args: unknown[]) => {\n const ctx = Context.current();\n const result = handler(...args, ctx.info);\n\n ctx.heartbeat(Date.now());\n\n const interval = setInterval(() => {\n ctx.heartbeat(Date.now());\n }, 5000);\n\n try {\n return isObservable(result)\n ? await lastValueFrom(result)\n : await result;\n } finally {\n clearInterval(interval);\n }\n };\n }\n },\n );\n });\n return activitiesMethod;\n }\n}\n","export function getQueueToken(name?: string): string {\n return name ? `TemporalQueue_${name}` : 'TemporalQueue_default';\n}\n\nexport function getAsyncQueueToken(name?: string): string {\n return name ? `TemporalAsyncQueue_${name}` : 'TemporalAsyncQueue_default';\n}\n","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\n\n/**\n * Assigns an application shutdown hook to a WorkflowClient to ensure\n * the connection is properly closed when the application shuts down.\n *\n * @param client - The WorkflowClient instance\n * @returns The client with shutdown hook assigned\n */\nexport function assignOnAppShutdownHook(\n client: WorkflowClient,\n): WorkflowClient {\n (client as unknown as OnApplicationShutdown).onApplicationShutdown =\n async () => {\n try {\n await client.connection?.close();\n } catch (reason: unknown) {\n const errorMessage =\n reason instanceof Error ? reason.message : String(reason);\n console.error(\n `Temporal client connection was not cleanly closed: ${errorMessage}`,\n );\n }\n };\n return client;\n}\n\n/**\n * Creates a new WorkflowClient instance with application shutdown hook.\n *\n * @param options - Optional WorkflowClient configuration options\n * @returns A WorkflowClient instance with shutdown hook\n */\nexport function getWorkflowClient(\n options?: WorkflowClientOptions,\n): WorkflowClient {\n const client = new WorkflowClient(options);\n return assignOnAppShutdownHook(client);\n}\n","import { Provider } from '@nestjs/common';\nimport { WorkflowClientOptions } from '@temporalio/client';\n\nimport { SharedWorkflowClientOptions } from '../interfaces/shared-workflow-client-options.interface';\nimport {\n SharedConnectionAsyncConfiguration,\n SharedRuntimeAsyncConfiguration,\n SharedWorkerAsyncConfiguration,\n} from '../interfaces';\nimport { getWorkflowClient } from './client.util';\nimport { getAsyncQueueToken, getQueueToken } from './get-queue-token.util';\nimport { DiscoveryModule } from '@nestjs/core';\n\nexport function createAsyncProvider(\n provide: string,\n options?:\n | SharedWorkerAsyncConfiguration\n | SharedRuntimeAsyncConfiguration\n | SharedConnectionAsyncConfiguration\n | SharedWorkflowClientOptions,\n): Provider {\n if (options?.useFactory) {\n const { useFactory, inject } = options;\n return {\n provide,\n useFactory,\n inject: inject || [],\n };\n }\n return {\n provide,\n useValue: options?.useValue || null,\n };\n}\n\nexport function createClientAsyncProvider(\n asyncOptions: SharedWorkflowClientOptions,\n): Provider[] {\n const name = asyncOptions.name ? asyncOptions.name : undefined;\n const optionsProvide = getAsyncQueueToken(name);\n const clientProvide = getQueueToken(name);\n return [\n createAsyncProvider(optionsProvide, asyncOptions),\n {\n provide: clientProvide,\n useFactory: (options?: WorkflowClientOptions) =>\n getWorkflowClient(options),\n inject: [optionsProvide],\n },\n DiscoveryModule,\n ];\n}\n","import { DynamicModule, Module } from \"@nestjs/common\";\nimport { DiscoveryModule } from \"@nestjs/core\";\n\nimport { TemporalMetadataAccessor } from \"./temporal-metadata.accessors\";\nimport { TemporalExplorer } from \"./temporal.explorer\";\nimport {\n SharedWorkflowClientOptions,\n TemporalModuleOptions,\n} from \"./interfaces\";\nimport { createClientProviders } from \"./temporal.providers\";\nimport { createClientAsyncProvider } from \"./utils\";\nimport {\n ConfigurableModuleClass,\n TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n} from \"./temporal.module-definition\";\n\n/**\n * TemporalModule provides integration between NestJS and Temporal workflow orchestration.\n *\n * Use registerWorker() or registerWorkerAsync() to register Temporal workers that execute activities.\n * Use registerClient() or registerClientAsync() to register Temporal clients for starting workflows.\n */\n@Module({})\nexport class TemporalModule extends ConfigurableModuleClass {\n /**\n * Registers a Temporal worker asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param options - Async worker configuration options\n * @returns Dynamic module configuration\n */\n static registerWorkerAsync(\n options: typeof TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE,\n ): DynamicModule {\n const superDynamicModule = super.registerWorkerAsync(options);\n superDynamicModule.imports?.push(DiscoveryModule);\n superDynamicModule.providers?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n );\n superDynamicModule.exports?.push(\n TemporalExplorer,\n TemporalMetadataAccessor,\n DiscoveryModule,\n );\n\n return {\n ...superDynamicModule,\n exports: [DiscoveryModule],\n };\n }\n\n /**\n * Registers a Temporal WorkflowClient asynchronously.\n * Useful when configuration depends on other async providers (e.g., ConfigService).\n *\n * @param asyncSharedWorkflowClientOptions - Async client configuration options\n * @returns Dynamic module configuration\n */\n static registerClientAsync(\n asyncSharedWorkflowClientOptions: SharedWorkflowClientOptions,\n ): DynamicModule {\n const providers = createClientAsyncProvider(\n asyncSharedWorkflowClientOptions,\n );\n\n return {\n global: true,\n module: TemporalModule,\n providers,\n exports: providers,\n };\n }\n}\n","import { Scope, SetMetadata } from \"@nestjs/common\";\nimport { SCOPE_OPTIONS_METADATA } from \"@nestjs/common/constants\";\n\nimport {\n TEMPORAL_MODULE_ACTIVITIES,\n TEMPORAL_MODULE_ACTIVITY,\n} from \"../constants/temporal.constants\";\n\n/**\n * Options for the @Activities() decorator.\n */\nexport interface ActivitiesOptions extends ActivityOptions {\n /**\n * Specifies the name of the queue to subscribe to.\n */\n name?: string;\n /**\n * Specifies the lifetime of an injected Activities class.\n */\n scope?: Scope;\n}\n\n/**\n * Options for the @Activity() decorator.\n */\nexport interface ActivityOptions {\n /**\n * Custom name for the activity. If not provided, the method name is used.\n */\n name?: string;\n}\n\n/**\n * Marks a class as containing Temporal activities.\n * Methods within this class decorated with @Activity() will be registered as Temporal activities.\n *\n * @param queueNameOrOptions - Optional queue name (string) or options object\n * @returns Class decorator\n *\n * @example\n * ```typescript\n * @Injectable()\n * @Activities()\n * export class MyActivities {\n * @Activity()\n * async doSomething() { }\n * }\n * ```\n */\nexport const Activities =\n (options?: ActivitiesOptions): ClassDecorator =>\n (target: Function) => {\n SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);\n SetMetadata(TEMPORAL_MODULE_ACTIVITIES, options)(target);\n };\n\n/**\n * Marks a method as a Temporal activity.\n * The method must be within a class decorated with @Activities().\n *\n * @param nameOrOptions - Optional activity name (string) or options object\n * @returns Method decorator\n *\n * @example\n * ```typescript\n * @Activity()\n * async processOrder(orderId: string) { }\n *\n * @Activity('custom-activity-name')\n * async anotherActivity() { }\n * ```\n */\nexport const Activity = (options?: ActivityOptions): MethodDecorator =>\n SetMetadata(TEMPORAL_MODULE_ACTIVITY, options || {});\n","import { Inject } from '@nestjs/common';\n\nimport { getQueueToken } from '../utils';\n\n/**\n * Injects a Temporal WorkflowClient instance.\n * Use this decorator to inject the client registered via TemporalModule.registerClient().\n *\n * @param name - Optional name of the client instance (for named clients)\n * @returns Parameter decorator for dependency injection\n *\n * @example\n * ```typescript\n * constructor(@InjectTemporalClient() private client: WorkflowClient) {}\n * ```\n */\nexport const InjectTemporalClient = (name?: string): ParameterDecorator =>\n Inject(getQueueToken(name));\n","import { createParamDecorator, ExecutionContext } from \"@nestjs/common\";\n\nexport const ActivityContext = () =>\n createParamDecorator((_, ctx: ExecutionContext) => {\n return ctx.getArgByIndex(1);\n });\n\nexport const ActivityPayload = () =>\n createParamDecorator((_, ctx: ExecutionContext) => {\n return ctx.getArgByIndex(0);\n });\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@globalart/nestjs-temporal",
|
|
3
3
|
"description": "Temporal integration for NestJS",
|
|
4
|
-
"version": "2.0
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
7
7
|
"module": "dist/index.mjs",
|
|
@@ -45,8 +45,6 @@
|
|
|
45
45
|
"publish:npm": "release-it --config ../../.release-it.json"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@nestjs/common": "11.1.14",
|
|
49
|
-
"@nestjs/core": "11.1.14",
|
|
50
48
|
"@temporalio/activity": "^1.15.0",
|
|
51
49
|
"@temporalio/client": "^1.15.0",
|
|
52
50
|
"@temporalio/common": "^1.15.0",
|
|
@@ -56,10 +54,14 @@
|
|
|
56
54
|
"rxjs": "^7.8.2"
|
|
57
55
|
},
|
|
58
56
|
"devDependencies": {
|
|
59
|
-
"@types/node": "25.
|
|
57
|
+
"@types/node": "25.5.0",
|
|
60
58
|
"reflect-metadata": "^0.2.2",
|
|
61
59
|
"release-it": "19.2.4",
|
|
62
|
-
"tsdown": "0.
|
|
63
|
-
"typescript": "^
|
|
60
|
+
"tsdown": "0.21.7",
|
|
61
|
+
"typescript": "^6.0.2"
|
|
62
|
+
},
|
|
63
|
+
"peerDependencies": {
|
|
64
|
+
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
65
|
+
"@nestjs/core": "^10.0.0 || ^11.0.0"
|
|
64
66
|
}
|
|
65
67
|
}
|