@globalart/nestjs-temporal 2.1.0 → 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 CHANGED
@@ -1,34 +1,28 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
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 _nestjs_common_constants = require("@nestjs/common/constants");
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.112.0/helpers/decorateMetadata.js
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.112.0/helpers/decorate.js
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,13 +239,15 @@ 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 result = handler(...args, _temporalio_activity.Context.current().info);
242
+ const ctx = _temporalio_activity.Context.current();
243
+ const result = handler(...args, ctx.info);
244
+ ctx.heartbeat(Date.now());
268
245
  const interval = setInterval(() => {
269
- _temporalio_activity.Context.current().heartbeat(Date.now());
246
+ ctx.heartbeat(Date.now());
270
247
  }, 5e3);
271
248
  try {
272
249
  return (0, rxjs.isObservable)(result) ? await (0, rxjs.lastValueFrom)(result) : await result;
273
- } catch {
250
+ } finally {
274
251
  clearInterval(interval);
275
252
  }
276
253
  };
@@ -287,7 +264,6 @@ TemporalExplorer = _TemporalExplorer = __decorate([(0, _nestjs_common.Injectable
287
264
  typeof (_ref3 = typeof _nestjs_core.MetadataScanner !== "undefined" && _nestjs_core.MetadataScanner) === "function" ? _ref3 : Object,
288
265
  typeof (_ref4 = typeof _nestjs_core.ExternalContextCreator !== "undefined" && _nestjs_core.ExternalContextCreator) === "function" ? _ref4 : Object
289
266
  ])], TemporalExplorer);
290
-
291
267
  //#endregion
292
268
  //#region src/utils/get-queue-token.util.ts
293
269
  function getQueueToken(name) {
@@ -296,7 +272,6 @@ function getQueueToken(name) {
296
272
  function getAsyncQueueToken(name) {
297
273
  return name ? `TemporalAsyncQueue_${name}` : "TemporalAsyncQueue_default";
298
274
  }
299
-
300
275
  //#endregion
301
276
  //#region src/utils/client.util.ts
302
277
  /**
@@ -326,7 +301,6 @@ function assignOnAppShutdownHook(client) {
326
301
  function getWorkflowClient(options) {
327
302
  return assignOnAppShutdownHook(new _temporalio_client.WorkflowClient(options));
328
303
  }
329
-
330
304
  //#endregion
331
305
  //#region src/utils/provider.util.ts
332
306
  function createAsyncProvider(provide, options) {
@@ -357,7 +331,6 @@ function createClientAsyncProvider(asyncOptions) {
357
331
  _nestjs_core.DiscoveryModule
358
332
  ];
359
333
  }
360
-
361
334
  //#endregion
362
335
  //#region src/temporal.module.ts
363
336
  var _TemporalModule;
@@ -397,23 +370,46 @@ let TemporalModule = _TemporalModule = class TemporalModule extends Configurable
397
370
  }
398
371
  };
399
372
  TemporalModule = _TemporalModule = __decorate([(0, _nestjs_common.Module)({})], TemporalModule);
400
-
401
373
  //#endregion
402
374
  //#region src/decorators/activities.decorator.ts
403
- function Activities(queueNameOrOptions) {
404
- const options = queueNameOrOptions && typeof queueNameOrOptions === "object" ? queueNameOrOptions : { name: queueNameOrOptions };
405
- return (target) => {
406
- (0, _nestjs_common.SetMetadata)(_nestjs_common_constants.SCOPE_OPTIONS_METADATA, options)(target);
407
- (0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_ACTIVITIES, options)(target);
408
- };
409
- }
410
-
411
- //#endregion
412
- //#region src/decorators/activity.decorator.ts
413
- function Activity(nameOrOptions) {
414
- return (0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_ACTIVITY, (nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions }) || {});
415
- }
416
-
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 || {});
417
413
  //#endregion
418
414
  //#region src/decorators/inject-temporal-client.decorator.ts
419
415
  /**
@@ -429,47 +425,32 @@ function Activity(nameOrOptions) {
429
425
  * ```
430
426
  */
431
427
  const InjectTemporalClient = (name) => (0, _nestjs_common.Inject)(getQueueToken(name));
432
-
433
- //#endregion
434
- //#region src/decorators/workflow.decorator.ts
435
- function WorkflowMethod(nameOrOptions) {
436
- return (0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_WORKFLOW_METHOD, (nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions }) || {});
437
- }
438
-
439
428
  //#endregion
440
- //#region src/decorators/workflows.decorator.ts
441
- function Workflows(nameOrOptions) {
442
- const options = nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions };
443
- return (target) => {
444
- (0, _nestjs_common.SetMetadata)(_nestjs_common_constants.SCOPE_OPTIONS_METADATA, options)(target);
445
- (0, _nestjs_common.SetMetadata)(TEMPORAL_MODULE_WORKFLOW, options)(target);
446
- };
447
- }
448
-
449
- //#endregion
450
- //#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
+ });
451
433
  const ActivityPayload = () => (0, _nestjs_common.createParamDecorator)((_, ctx) => {
452
434
  return ctx.getArgByIndex(0);
453
435
  });
454
-
455
436
  //#endregion
456
437
  exports.Activities = Activities;
457
438
  exports.Activity = Activity;
439
+ exports.ActivityContext = ActivityContext;
458
440
  exports.ActivityPayload = ActivityPayload;
459
441
  exports.InjectTemporalClient = InjectTemporalClient;
460
442
  exports.TemporalExecutionContext = TemporalExecutionContext;
461
- Object.defineProperty(exports, 'TemporalExplorer', {
462
- enumerable: true,
463
- get: function () {
464
- return TemporalExplorer;
465
- }
443
+ Object.defineProperty(exports, "TemporalExplorer", {
444
+ enumerable: true,
445
+ get: function() {
446
+ return TemporalExplorer;
447
+ }
466
448
  });
467
- Object.defineProperty(exports, 'TemporalModule', {
468
- enumerable: true,
469
- get: function () {
470
- return TemporalModule;
471
- }
449
+ Object.defineProperty(exports, "TemporalModule", {
450
+ enumerable: true,
451
+ get: function() {
452
+ return TemporalModule;
453
+ }
472
454
  });
473
- exports.WorkflowMethod = WorkflowMethod;
474
- exports.Workflows = Workflows;
455
+
475
456
  //# sourceMappingURL=index.cjs.map
@@ -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 const interval = setInterval(() => {\n Context.current().heartbeat(Date.now());\n }, 5000);\n\n try {\n return isObservable(result)\n ? await lastValueFrom(result)\n : await result;\n } catch {\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';\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(), @Activity(), @Workflows(), and @WorkflowMethod() decorators.
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$1 {
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 function Activities(): ClassDecorator;
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 function Activity(): MethodDecorator;
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/workflow.decorator.d.ts
237
- interface WorkflowMethodOptions {
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, WorkflowMethod, WorkflowMethodOptions, Workflows, WorkflowsOptions };
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(), @Activity(), @Workflows(), and @WorkflowMethod() decorators.
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$1 {
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 function Activities(): ClassDecorator;
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 function Activity(): MethodDecorator;
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/workflow.decorator.d.ts
237
- interface WorkflowMethodOptions {
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, WorkflowMethod, WorkflowMethodOptions, Workflows, WorkflowsOptions };
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.112.0/helpers/decorateMetadata.js
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.112.0/helpers/decorate.js
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,13 +238,15 @@ 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 result = handler(...args, Context.current().info);
241
+ const ctx = Context.current();
242
+ const result = handler(...args, ctx.info);
243
+ ctx.heartbeat(Date.now());
267
244
  const interval = setInterval(() => {
268
- Context.current().heartbeat(Date.now());
245
+ ctx.heartbeat(Date.now());
269
246
  }, 5e3);
270
247
  try {
271
248
  return isObservable(result) ? await lastValueFrom(result) : await result;
272
- } catch {
249
+ } finally {
273
250
  clearInterval(interval);
274
251
  }
275
252
  };
@@ -286,7 +263,6 @@ TemporalExplorer = _TemporalExplorer = __decorate([Injectable(), __decorateMetad
286
263
  typeof (_ref3 = typeof MetadataScanner !== "undefined" && MetadataScanner) === "function" ? _ref3 : Object,
287
264
  typeof (_ref4 = typeof ExternalContextCreator !== "undefined" && ExternalContextCreator) === "function" ? _ref4 : Object
288
265
  ])], TemporalExplorer);
289
-
290
266
  //#endregion
291
267
  //#region src/utils/get-queue-token.util.ts
292
268
  function getQueueToken(name) {
@@ -295,7 +271,6 @@ function getQueueToken(name) {
295
271
  function getAsyncQueueToken(name) {
296
272
  return name ? `TemporalAsyncQueue_${name}` : "TemporalAsyncQueue_default";
297
273
  }
298
-
299
274
  //#endregion
300
275
  //#region src/utils/client.util.ts
301
276
  /**
@@ -325,7 +300,6 @@ function assignOnAppShutdownHook(client) {
325
300
  function getWorkflowClient(options) {
326
301
  return assignOnAppShutdownHook(new WorkflowClient(options));
327
302
  }
328
-
329
303
  //#endregion
330
304
  //#region src/utils/provider.util.ts
331
305
  function createAsyncProvider(provide, options) {
@@ -356,7 +330,6 @@ function createClientAsyncProvider(asyncOptions) {
356
330
  DiscoveryModule
357
331
  ];
358
332
  }
359
-
360
333
  //#endregion
361
334
  //#region src/temporal.module.ts
362
335
  var _TemporalModule;
@@ -396,23 +369,46 @@ let TemporalModule = _TemporalModule = class TemporalModule extends Configurable
396
369
  }
397
370
  };
398
371
  TemporalModule = _TemporalModule = __decorate([Module({})], TemporalModule);
399
-
400
372
  //#endregion
401
373
  //#region src/decorators/activities.decorator.ts
402
- function Activities(queueNameOrOptions) {
403
- const options = queueNameOrOptions && typeof queueNameOrOptions === "object" ? queueNameOrOptions : { name: queueNameOrOptions };
404
- return (target) => {
405
- SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);
406
- SetMetadata(TEMPORAL_MODULE_ACTIVITIES, options)(target);
407
- };
408
- }
409
-
410
- //#endregion
411
- //#region src/decorators/activity.decorator.ts
412
- function Activity(nameOrOptions) {
413
- return SetMetadata(TEMPORAL_MODULE_ACTIVITY, (nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions }) || {});
414
- }
415
-
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 || {});
416
412
  //#endregion
417
413
  //#region src/decorators/inject-temporal-client.decorator.ts
418
414
  /**
@@ -428,29 +424,15 @@ function Activity(nameOrOptions) {
428
424
  * ```
429
425
  */
430
426
  const InjectTemporalClient = (name) => Inject(getQueueToken(name));
431
-
432
427
  //#endregion
433
- //#region src/decorators/workflow.decorator.ts
434
- function WorkflowMethod(nameOrOptions) {
435
- return SetMetadata(TEMPORAL_MODULE_WORKFLOW_METHOD, (nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions }) || {});
436
- }
437
-
438
- //#endregion
439
- //#region src/decorators/workflows.decorator.ts
440
- function Workflows(nameOrOptions) {
441
- const options = nameOrOptions && typeof nameOrOptions === "object" ? nameOrOptions : { name: nameOrOptions };
442
- return (target) => {
443
- SetMetadata(SCOPE_OPTIONS_METADATA, options)(target);
444
- SetMetadata(TEMPORAL_MODULE_WORKFLOW, options)(target);
445
- };
446
- }
447
-
448
- //#endregion
449
- //#region src/decorators/payload.decorator.ts
428
+ //#region src/decorators/context.decorator.ts
429
+ const ActivityContext = () => createParamDecorator((_, ctx) => {
430
+ return ctx.getArgByIndex(1);
431
+ });
450
432
  const ActivityPayload = () => createParamDecorator((_, ctx) => {
451
433
  return ctx.getArgByIndex(0);
452
434
  });
453
-
454
435
  //#endregion
455
- export { Activities, Activity, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, WorkflowMethod, Workflows };
436
+ export { Activities, Activity, ActivityContext, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule };
437
+
456
438
  //# sourceMappingURL=index.mjs.map
@@ -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 const interval = setInterval(() => {\n Context.current().heartbeat(Date.now());\n }, 5000);\n\n try {\n return isObservable(result)\n ? await lastValueFrom(result)\n : await result;\n } catch {\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';\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.1.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.4.0",
57
+ "@types/node": "25.5.0",
60
58
  "reflect-metadata": "^0.2.2",
61
59
  "release-it": "19.2.4",
62
- "tsdown": "0.21.2",
63
- "typescript": "^5.9.3"
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
  }