@globalart/nestjs-temporal 2.5.0 → 4.0.1

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
@@ -11,12 +11,12 @@ const TEMPORAL_MODULE_ACTIVITIES = "_temporal_module_activities";
11
11
  const TEMPORAL_MODULE_ACTIVITY = "_temporal_module_activity";
12
12
  const TEMPORAL_ARGS_METADATA = "_temporal_module_args";
13
13
  //#endregion
14
- //#region \0@oxc-project+runtime@0.122.0/helpers/decorateMetadata.js
14
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/decorateMetadata.js
15
15
  function __decorateMetadata(k, v) {
16
16
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17
17
  }
18
18
  //#endregion
19
- //#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
19
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/decorate.js
20
20
  function __decorate(decorators, target, key, desc) {
21
21
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22
22
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -25,8 +25,8 @@ function __decorate(decorators, target, key, desc) {
25
25
  }
26
26
  //#endregion
27
27
  //#region src/temporal-metadata.accessors.ts
28
- var _ref$1;
29
28
  let TemporalMetadataAccessor = class TemporalMetadataAccessor {
29
+ reflector;
30
30
  constructor(reflector) {
31
31
  this.reflector = reflector;
32
32
  }
@@ -45,20 +45,16 @@ let TemporalMetadataAccessor = class TemporalMetadataAccessor {
45
45
  return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);
46
46
  }
47
47
  };
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);
48
+ TemporalMetadataAccessor = __decorate([(0, _nestjs_common.Injectable)(), __decorateMetadata("design:paramtypes", [typeof _nestjs_core.Reflector === "undefined" ? Object : _nestjs_core.Reflector])], TemporalMetadataAccessor);
49
49
  //#endregion
50
50
  //#region src/temporal.module-definition.ts
51
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();
52
52
  //#endregion
53
- //#region src/temporal-enums.ts
54
- let TemporalParamType = /* @__PURE__ */ function(TemporalParamType) {
55
- TemporalParamType[TemporalParamType["PAYLOAD"] = 3] = "PAYLOAD";
56
- TemporalParamType[TemporalParamType["CONTEXT"] = 4] = "CONTEXT";
57
- return TemporalParamType;
58
- }({});
59
- //#endregion
60
53
  //#region src/core/temporal-execution-context.ts
61
54
  var TemporalExecutionContext = class {
55
+ instance;
56
+ handler;
57
+ args;
62
58
  constructor(instance, handler, args) {
63
59
  this.instance = instance;
64
60
  this.handler = handler;
@@ -95,22 +91,28 @@ var TemporalExecutionContext = class {
95
91
  //#endregion
96
92
  //#region src/temporal-params.factory.ts
97
93
  var TemporalParamsFactory = class {
94
+ instance;
95
+ handler;
98
96
  constructor(instance, handler) {
99
97
  this.instance = instance;
100
98
  this.handler = handler;
101
99
  }
102
100
  exchangeKeyForValue(type, data, args) {
103
101
  switch (type) {
104
- case TemporalParamType.PAYLOAD: return data && args[0] && typeof args[0] === "object" ? args[0][data] : args[0];
105
- case TemporalParamType.CONTEXT: return new TemporalExecutionContext(this.instance, this.handler, args);
102
+ case 3: return data && args[0] && typeof args[0] === "object" ? args[0][data] : args[0];
103
+ case 4: return new TemporalExecutionContext(this.instance, this.handler, args);
106
104
  default: return null;
107
105
  }
108
106
  }
109
107
  };
110
108
  //#endregion
111
109
  //#region src/temporal.explorer.ts
112
- var _ref, _ref2, _ref3, _ref4, _TemporalExplorer;
110
+ var _TemporalExplorer;
113
111
  let TemporalExplorer = _TemporalExplorer = class TemporalExplorer {
112
+ discoveryService;
113
+ metadataAccessor;
114
+ metadataScanner;
115
+ externalContextCreator;
114
116
  options;
115
117
  logger = new _nestjs_common.Logger(_TemporalExplorer.name);
116
118
  workers;
@@ -262,10 +264,10 @@ let TemporalExplorer = _TemporalExplorer = class TemporalExplorer {
262
264
  };
263
265
  __decorate([(0, _nestjs_common.Inject)(TEMPORAL_MODULE_OPTIONS_TOKEN), __decorateMetadata("design:type", Object)], TemporalExplorer.prototype, "options", void 0);
264
266
  TemporalExplorer = _TemporalExplorer = __decorate([(0, _nestjs_common.Injectable)(), __decorateMetadata("design:paramtypes", [
265
- typeof (_ref = typeof _nestjs_core.DiscoveryService !== "undefined" && _nestjs_core.DiscoveryService) === "function" ? _ref : Object,
266
- typeof (_ref2 = typeof TemporalMetadataAccessor !== "undefined" && TemporalMetadataAccessor) === "function" ? _ref2 : Object,
267
- typeof (_ref3 = typeof _nestjs_core.MetadataScanner !== "undefined" && _nestjs_core.MetadataScanner) === "function" ? _ref3 : Object,
268
- typeof (_ref4 = typeof _nestjs_core.ExternalContextCreator !== "undefined" && _nestjs_core.ExternalContextCreator) === "function" ? _ref4 : Object
267
+ typeof _nestjs_core.DiscoveryService === "undefined" ? Object : _nestjs_core.DiscoveryService,
268
+ typeof TemporalMetadataAccessor === "undefined" ? Object : TemporalMetadataAccessor,
269
+ typeof _nestjs_core.MetadataScanner === "undefined" ? Object : _nestjs_core.MetadataScanner,
270
+ typeof _nestjs_core.ExternalContextCreator === "undefined" ? Object : _nestjs_core.ExternalContextCreator
269
271
  ])], TemporalExplorer);
270
272
  //#endregion
271
273
  //#region src/utils/get-queue-token.util.ts
@@ -277,7 +279,7 @@ function getAsyncQueueToken(name) {
277
279
  }
278
280
  //#endregion
279
281
  //#region src/core/temporal-workflow.service.ts
280
- var TemporalWorkflowService = class extends _temporalio_client.WorkflowClient {
282
+ var TemporalWorkflowClient = class extends _temporalio_client.WorkflowClient {
281
283
  constructor(options) {
282
284
  super(options);
283
285
  }
@@ -321,7 +323,7 @@ function assignOnAppShutdownHook(client) {
321
323
  * @returns A WorkflowClient instance with shutdown hook
322
324
  */
323
325
  function getWorkflowClient(options) {
324
- return assignOnAppShutdownHook(new TemporalWorkflowService(options));
326
+ return assignOnAppShutdownHook(new TemporalWorkflowClient(options));
325
327
  }
326
328
  //#endregion
327
329
  //#region src/utils/provider.util.ts
@@ -474,6 +476,6 @@ Object.defineProperty(exports, "TemporalModule", {
474
476
  return TemporalModule;
475
477
  }
476
478
  });
477
- exports.TemporalWorkflowService = TemporalWorkflowService;
479
+ exports.TemporalWorkflowClient = TemporalWorkflowClient;
478
480
 
479
481
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["ConfigurableModuleBuilder","Logger","NativeConnection","Worker","Context","WorkflowClient","WorkflowNotFoundError","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/core/temporal-workflow.service.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(({ activities: configActivities, ...config }) =>\n Worker.create({\n ...sharedWorkerOptions,\n ...config,\n activities: { ...(configActivities as Record<string, Function>), ...activitiesFunc },\n }),\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 const interval = setInterval(() => {\n ctx.heartbeat(crypto.randomUUID());\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 { Injectable } from \"@nestjs/common\";\nimport { WorkflowClient, WorkflowClientOptions, WorkflowExecutionDescription, WorkflowHandle, WorkflowNotFoundError } from \"@temporalio/client\";\n\nexport class TemporalWorkflowService extends WorkflowClient {\n constructor(options?: WorkflowClientOptions) {\n super(options);\n }\n\n public async describeWorkflow(workflowId: string): Promise<{ info: WorkflowExecutionDescription, handle: WorkflowHandle } | null> {\n const handle = this.getHandle(workflowId);\n\n try {\n return {\n info: await handle.describe(),\n handle,\n };\n } catch (error) {\n if (error instanceof WorkflowNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n}","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\nimport { TemporalWorkflowService } from '../core';\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 TemporalWorkflowService(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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"}
1
+ {"version":3,"file":"index.cjs","names":["ConfigurableModuleBuilder","Logger","NativeConnection","Worker","Context","WorkflowClient","WorkflowNotFoundError","DiscoveryModule","DiscoveryModule","SCOPE_OPTIONS_METADATA"],"sources":["../src/constants/temporal.constants.ts","../src/temporal-metadata.accessors.ts","../src/temporal.module-definition.ts","../src/core/temporal-execution-context.ts","../src/temporal-params.factory.ts","../src/temporal.explorer.ts","../src/utils/get-queue-token.util.ts","../src/core/temporal-workflow.service.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","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(({ activities: configActivities, ...config }) =>\n Worker.create({\n ...sharedWorkerOptions,\n ...config,\n activities: { ...(configActivities as Record<string, Function>), ...activitiesFunc },\n }),\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 const interval = setInterval(() => {\n ctx.heartbeat(crypto.randomUUID());\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 { WorkflowClient, WorkflowClientOptions, WorkflowExecutionDescription, WorkflowHandle, WorkflowNotFoundError } from \"@temporalio/client\";\n\nexport class TemporalWorkflowClient extends WorkflowClient {\n constructor(options?: WorkflowClientOptions) {\n super(options);\n }\n\n public async describeWorkflow(workflowId: string): Promise<{ info: WorkflowExecutionDescription, handle: WorkflowHandle } | null> {\n const handle = this.getHandle(workflowId);\n\n try {\n return {\n info: await handle.describe(),\n handle,\n };\n } catch (error) {\n if (error instanceof WorkflowNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n}","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\nimport { TemporalWorkflowClient } from '../core';\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 TemporalWorkflowClient(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,4 +1,3 @@
1
- import * as _$_nestjs_common0 from "@nestjs/common";
2
1
  import { DynamicModule, ExecutionContext, FactoryProvider, ModuleMetadata, OnApplicationBootstrap, OnModuleDestroy, OnModuleInit, Scope, Type } from "@nestjs/common";
3
2
  import { WorkflowClient, WorkflowClientOptions, WorkflowExecutionDescription, WorkflowHandle } from "@temporalio/client";
4
3
  import { NativeConnectionOptions, RuntimeOptions, WorkerOptions } from "@temporalio/worker";
@@ -41,7 +40,7 @@ interface TemporalModuleOptions {
41
40
  activityClasses?: object[];
42
41
  errorOnDuplicateActivities?: boolean;
43
42
  }
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<{}>;
43
+ declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<TemporalModuleOptions, "registerWorker", "create", {}>, TEMPORAL_MODULE_OPTIONS_TOKEN: string | symbol, TEMPORAL_MODULE_OPTIONS_TYPE: TemporalModuleOptions & Partial<{}>, TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE: import("@nestjs/common").ConfigurableModuleAsyncOptions<TemporalModuleOptions, "create"> & Partial<{}>;
45
44
  //#endregion
46
45
  //#region src/temporal.module.d.ts
47
46
  /**
@@ -245,7 +244,7 @@ declare class TemporalExecutionContext implements ExecutionContext {
245
244
  type Type$1<T = unknown> = new (...args: unknown[]) => T;
246
245
  //#endregion
247
246
  //#region src/core/temporal-workflow.service.d.ts
248
- declare class TemporalWorkflowService extends WorkflowClient {
247
+ declare class TemporalWorkflowClient extends WorkflowClient {
249
248
  constructor(options?: WorkflowClientOptions);
250
249
  describeWorkflow(workflowId: string): Promise<{
251
250
  info: WorkflowExecutionDescription;
@@ -253,5 +252,5 @@ declare class TemporalWorkflowService extends WorkflowClient {
253
252
  } | null>;
254
253
  }
255
254
  //#endregion
256
- export { Activities, ActivitiesOptions, Activity, ActivityContext, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, TemporalWorkflowService };
255
+ export { Activities, ActivitiesOptions, Activity, ActivityContext, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, TemporalWorkflowClient };
257
256
  //# sourceMappingURL=index.d.cts.map
package/dist/index.d.mts CHANGED
@@ -1,4 +1,3 @@
1
- import * as _$_nestjs_common0 from "@nestjs/common";
2
1
  import { DynamicModule, ExecutionContext, FactoryProvider, ModuleMetadata, OnApplicationBootstrap, OnModuleDestroy, OnModuleInit, Scope, Type } from "@nestjs/common";
3
2
  import { DiscoveryService, ExternalContextCreator, MetadataScanner, Reflector } from "@nestjs/core";
4
3
  import { NativeConnectionOptions, RuntimeOptions, WorkerOptions } from "@temporalio/worker";
@@ -41,7 +40,7 @@ interface TemporalModuleOptions {
41
40
  activityClasses?: object[];
42
41
  errorOnDuplicateActivities?: boolean;
43
42
  }
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<{}>;
43
+ declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<TemporalModuleOptions, "registerWorker", "create", {}>, TEMPORAL_MODULE_OPTIONS_TOKEN: string | symbol, TEMPORAL_MODULE_OPTIONS_TYPE: TemporalModuleOptions & Partial<{}>, TEMPORAL_MODULE_ASYNC_OPTIONS_TYPE: import("@nestjs/common").ConfigurableModuleAsyncOptions<TemporalModuleOptions, "create"> & Partial<{}>;
45
44
  //#endregion
46
45
  //#region src/temporal.module.d.ts
47
46
  /**
@@ -245,7 +244,7 @@ declare class TemporalExecutionContext implements ExecutionContext {
245
244
  type Type$1<T = unknown> = new (...args: unknown[]) => T;
246
245
  //#endregion
247
246
  //#region src/core/temporal-workflow.service.d.ts
248
- declare class TemporalWorkflowService extends WorkflowClient {
247
+ declare class TemporalWorkflowClient extends WorkflowClient {
249
248
  constructor(options?: WorkflowClientOptions);
250
249
  describeWorkflow(workflowId: string): Promise<{
251
250
  info: WorkflowExecutionDescription;
@@ -253,5 +252,5 @@ declare class TemporalWorkflowService extends WorkflowClient {
253
252
  } | null>;
254
253
  }
255
254
  //#endregion
256
- export { Activities, ActivitiesOptions, Activity, ActivityContext, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, TemporalWorkflowService };
255
+ export { Activities, ActivitiesOptions, Activity, ActivityContext, ActivityOptions, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, TemporalWorkflowClient };
257
256
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -10,12 +10,12 @@ const TEMPORAL_MODULE_ACTIVITIES = "_temporal_module_activities";
10
10
  const TEMPORAL_MODULE_ACTIVITY = "_temporal_module_activity";
11
11
  const TEMPORAL_ARGS_METADATA = "_temporal_module_args";
12
12
  //#endregion
13
- //#region \0@oxc-project+runtime@0.122.0/helpers/decorateMetadata.js
13
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/decorateMetadata.js
14
14
  function __decorateMetadata(k, v) {
15
15
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
16
  }
17
17
  //#endregion
18
- //#region \0@oxc-project+runtime@0.122.0/helpers/decorate.js
18
+ //#region \0@oxc-project+runtime@0.134.0/helpers/esm/decorate.js
19
19
  function __decorate(decorators, target, key, desc) {
20
20
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
21
21
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -24,8 +24,8 @@ function __decorate(decorators, target, key, desc) {
24
24
  }
25
25
  //#endregion
26
26
  //#region src/temporal-metadata.accessors.ts
27
- var _ref$1;
28
27
  let TemporalMetadataAccessor = class TemporalMetadataAccessor {
28
+ reflector;
29
29
  constructor(reflector) {
30
30
  this.reflector = reflector;
31
31
  }
@@ -44,20 +44,16 @@ let TemporalMetadataAccessor = class TemporalMetadataAccessor {
44
44
  return this.reflector.get(TEMPORAL_MODULE_ACTIVITY, target);
45
45
  }
46
46
  };
47
- TemporalMetadataAccessor = __decorate([Injectable(), __decorateMetadata("design:paramtypes", [typeof (_ref$1 = typeof Reflector !== "undefined" && Reflector) === "function" ? _ref$1 : Object])], TemporalMetadataAccessor);
47
+ TemporalMetadataAccessor = __decorate([Injectable(), __decorateMetadata("design:paramtypes", [typeof Reflector === "undefined" ? Object : Reflector])], TemporalMetadataAccessor);
48
48
  //#endregion
49
49
  //#region src/temporal.module-definition.ts
50
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();
51
51
  //#endregion
52
- //#region src/temporal-enums.ts
53
- let TemporalParamType = /* @__PURE__ */ function(TemporalParamType) {
54
- TemporalParamType[TemporalParamType["PAYLOAD"] = 3] = "PAYLOAD";
55
- TemporalParamType[TemporalParamType["CONTEXT"] = 4] = "CONTEXT";
56
- return TemporalParamType;
57
- }({});
58
- //#endregion
59
52
  //#region src/core/temporal-execution-context.ts
60
53
  var TemporalExecutionContext = class {
54
+ instance;
55
+ handler;
56
+ args;
61
57
  constructor(instance, handler, args) {
62
58
  this.instance = instance;
63
59
  this.handler = handler;
@@ -94,22 +90,28 @@ var TemporalExecutionContext = class {
94
90
  //#endregion
95
91
  //#region src/temporal-params.factory.ts
96
92
  var TemporalParamsFactory = class {
93
+ instance;
94
+ handler;
97
95
  constructor(instance, handler) {
98
96
  this.instance = instance;
99
97
  this.handler = handler;
100
98
  }
101
99
  exchangeKeyForValue(type, data, args) {
102
100
  switch (type) {
103
- case TemporalParamType.PAYLOAD: return data && args[0] && typeof args[0] === "object" ? args[0][data] : args[0];
104
- case TemporalParamType.CONTEXT: return new TemporalExecutionContext(this.instance, this.handler, args);
101
+ case 3: return data && args[0] && typeof args[0] === "object" ? args[0][data] : args[0];
102
+ case 4: return new TemporalExecutionContext(this.instance, this.handler, args);
105
103
  default: return null;
106
104
  }
107
105
  }
108
106
  };
109
107
  //#endregion
110
108
  //#region src/temporal.explorer.ts
111
- var _ref, _ref2, _ref3, _ref4, _TemporalExplorer;
109
+ var _TemporalExplorer;
112
110
  let TemporalExplorer = _TemporalExplorer = class TemporalExplorer {
111
+ discoveryService;
112
+ metadataAccessor;
113
+ metadataScanner;
114
+ externalContextCreator;
113
115
  options;
114
116
  logger = new Logger(_TemporalExplorer.name);
115
117
  workers;
@@ -261,10 +263,10 @@ let TemporalExplorer = _TemporalExplorer = class TemporalExplorer {
261
263
  };
262
264
  __decorate([Inject(TEMPORAL_MODULE_OPTIONS_TOKEN), __decorateMetadata("design:type", Object)], TemporalExplorer.prototype, "options", void 0);
263
265
  TemporalExplorer = _TemporalExplorer = __decorate([Injectable(), __decorateMetadata("design:paramtypes", [
264
- typeof (_ref = typeof DiscoveryService !== "undefined" && DiscoveryService) === "function" ? _ref : Object,
265
- typeof (_ref2 = typeof TemporalMetadataAccessor !== "undefined" && TemporalMetadataAccessor) === "function" ? _ref2 : Object,
266
- typeof (_ref3 = typeof MetadataScanner !== "undefined" && MetadataScanner) === "function" ? _ref3 : Object,
267
- typeof (_ref4 = typeof ExternalContextCreator !== "undefined" && ExternalContextCreator) === "function" ? _ref4 : Object
266
+ typeof DiscoveryService === "undefined" ? Object : DiscoveryService,
267
+ typeof TemporalMetadataAccessor === "undefined" ? Object : TemporalMetadataAccessor,
268
+ typeof MetadataScanner === "undefined" ? Object : MetadataScanner,
269
+ typeof ExternalContextCreator === "undefined" ? Object : ExternalContextCreator
268
270
  ])], TemporalExplorer);
269
271
  //#endregion
270
272
  //#region src/utils/get-queue-token.util.ts
@@ -276,7 +278,7 @@ function getAsyncQueueToken(name) {
276
278
  }
277
279
  //#endregion
278
280
  //#region src/core/temporal-workflow.service.ts
279
- var TemporalWorkflowService = class extends WorkflowClient {
281
+ var TemporalWorkflowClient = class extends WorkflowClient {
280
282
  constructor(options) {
281
283
  super(options);
282
284
  }
@@ -320,7 +322,7 @@ function assignOnAppShutdownHook(client) {
320
322
  * @returns A WorkflowClient instance with shutdown hook
321
323
  */
322
324
  function getWorkflowClient(options) {
323
- return assignOnAppShutdownHook(new TemporalWorkflowService(options));
325
+ return assignOnAppShutdownHook(new TemporalWorkflowClient(options));
324
326
  }
325
327
  //#endregion
326
328
  //#region src/utils/provider.util.ts
@@ -455,6 +457,6 @@ const ActivityPayload = () => createParamDecorator((_, ctx) => {
455
457
  return ctx.getArgByIndex(0);
456
458
  });
457
459
  //#endregion
458
- export { Activities, Activity, ActivityContext, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, TemporalWorkflowService };
460
+ export { Activities, Activity, ActivityContext, ActivityPayload, InjectTemporalClient, TemporalExecutionContext, TemporalExplorer, TemporalModule, TemporalWorkflowClient };
459
461
 
460
462
  //# 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/core/temporal-workflow.service.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(({ activities: configActivities, ...config }) =>\n Worker.create({\n ...sharedWorkerOptions,\n ...config,\n activities: { ...(configActivities as Record<string, Function>), ...activitiesFunc },\n }),\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 const interval = setInterval(() => {\n ctx.heartbeat(crypto.randomUUID());\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 { Injectable } from \"@nestjs/common\";\nimport { WorkflowClient, WorkflowClientOptions, WorkflowExecutionDescription, WorkflowHandle, WorkflowNotFoundError } from \"@temporalio/client\";\n\nexport class TemporalWorkflowService extends WorkflowClient {\n constructor(options?: WorkflowClientOptions) {\n super(options);\n }\n\n public async describeWorkflow(workflowId: string): Promise<{ info: WorkflowExecutionDescription, handle: WorkflowHandle } | null> {\n const handle = this.getHandle(workflowId);\n\n try {\n return {\n info: await handle.describe(),\n handle,\n };\n } catch (error) {\n if (error instanceof WorkflowNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n}","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\nimport { TemporalWorkflowService } from '../core';\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 TemporalWorkflowService(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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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/constants/temporal.constants.ts","../src/temporal-metadata.accessors.ts","../src/temporal.module-definition.ts","../src/core/temporal-execution-context.ts","../src/temporal-params.factory.ts","../src/temporal.explorer.ts","../src/utils/get-queue-token.util.ts","../src/core/temporal-workflow.service.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","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(({ activities: configActivities, ...config }) =>\n Worker.create({\n ...sharedWorkerOptions,\n ...config,\n activities: { ...(configActivities as Record<string, Function>), ...activitiesFunc },\n }),\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 const interval = setInterval(() => {\n ctx.heartbeat(crypto.randomUUID());\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 { WorkflowClient, WorkflowClientOptions, WorkflowExecutionDescription, WorkflowHandle, WorkflowNotFoundError } from \"@temporalio/client\";\n\nexport class TemporalWorkflowClient extends WorkflowClient {\n constructor(options?: WorkflowClientOptions) {\n super(options);\n }\n\n public async describeWorkflow(workflowId: string): Promise<{ info: WorkflowExecutionDescription, handle: WorkflowHandle } | null> {\n const handle = this.getHandle(workflowId);\n\n try {\n return {\n info: await handle.describe(),\n handle,\n };\n } catch (error) {\n if (error instanceof WorkflowNotFoundError) {\n return null;\n }\n throw error;\n }\n }\n}","import { OnApplicationShutdown } from '@nestjs/common';\nimport { WorkflowClient, WorkflowClientOptions } from '@temporalio/client';\nimport { TemporalWorkflowClient } from '../core';\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 TemporalWorkflowClient(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.5.0",
4
+ "version": "4.0.1",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
7
7
  "module": "dist/index.mjs",
@@ -40,25 +40,22 @@
40
40
  "format": "prettier --write \"**/*.ts\"",
41
41
  "build": "tsdown",
42
42
  "build:watch": "tsdown --watch",
43
- "prepublishOnly": "npm run build",
44
- "publish:dev": "npm publish --access public --tag dev",
45
- "publish:npm": "release-it --config ../../.release-it.json"
43
+ "prepublishOnly": "npm run build"
46
44
  },
47
45
  "dependencies": {
48
- "@temporalio/activity": "^1.15.0",
49
- "@temporalio/client": "^1.15.0",
50
- "@temporalio/common": "^1.15.0",
51
- "@temporalio/worker": "^1.15.0",
52
- "@temporalio/workflow": "^1.15.0",
53
- "lodash": "^4.17.23",
46
+ "@temporalio/activity": "^1.17.2",
47
+ "@temporalio/client": "^1.17.2",
48
+ "@temporalio/common": "^1.17.2",
49
+ "@temporalio/worker": "^1.17.2",
50
+ "@temporalio/workflow": "^1.17.2",
51
+ "lodash": "^4.18.1",
54
52
  "rxjs": "^7.8.2"
55
53
  },
56
54
  "devDependencies": {
57
- "@types/node": "25.5.2",
55
+ "@types/node": "25.9.2",
58
56
  "reflect-metadata": "^0.2.2",
59
- "release-it": "19.2.4",
60
- "tsdown": "0.21.7",
61
- "typescript": "^6.0.2"
57
+ "tsdown": "0.22.2",
58
+ "typescript": "^6.0.3"
62
59
  },
63
60
  "peerDependencies": {
64
61
  "@nestjs/common": "^10.0.0 || ^11.0.0",