@amqp-contract/worker-nestjs 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AmqpConnectionManagerOptions, ConnectionUrl } from "amqp-connection-manager";
2
2
  import { DynamicModule, ModuleMetadata, OnModuleDestroy, OnModuleInit, Type } from "@nestjs/common";
3
3
  import { WorkerInferSafeConsumerHandlers, WorkerInferSafeConsumerHandlers as WorkerInferSafeConsumerHandlers$1, defineHandler, defineHandlers } from "@amqp-contract/worker";
4
- import { ContractDefinition } from "@amqp-contract/contract";
4
+ import { ContractDefinitionInput } from "@amqp-contract/contract";
5
5
 
6
6
  //#region src/worker.service.d.ts
7
7
 
@@ -27,7 +27,7 @@ import { ContractDefinition } from "@amqp-contract/contract";
27
27
  * };
28
28
  * ```
29
29
  */
30
- type AmqpWorkerModuleOptions<TContract extends ContractDefinition> = {
30
+ type AmqpWorkerModuleOptions<TContract extends ContractDefinitionInput> = {
31
31
  /** The AMQP contract definition specifying consumers and their message schemas */
32
32
  contract: TContract;
33
33
  /** Message handlers for each consumer defined in the contract. Use defineHandlers to create type-safe handlers. */
@@ -71,7 +71,7 @@ type AmqpWorkerModuleOptions<TContract extends ContractDefinition> = {
71
71
  * // and stops gracefully when the application shuts down
72
72
  * ```
73
73
  */
74
- declare class AmqpWorkerService<TContract extends ContractDefinition> implements OnModuleInit, OnModuleDestroy {
74
+ declare class AmqpWorkerService<TContract extends ContractDefinitionInput> implements OnModuleInit, OnModuleDestroy {
75
75
  private readonly options;
76
76
  private worker;
77
77
  constructor(options: AmqpWorkerModuleOptions<TContract>);
@@ -100,11 +100,11 @@ declare class AmqpWorkerService<TContract extends ContractDefinition> implements
100
100
  /**
101
101
  * Factory function return type for async module configuration
102
102
  */
103
- type AmqpWorkerModuleOptionsFactory<TContract extends ContractDefinition> = AmqpWorkerModuleOptions<TContract> | Promise<AmqpWorkerModuleOptions<TContract>>;
103
+ type AmqpWorkerModuleOptionsFactory<TContract extends ContractDefinitionInput> = AmqpWorkerModuleOptions<TContract> | Promise<AmqpWorkerModuleOptions<TContract>>;
104
104
  /**
105
105
  * Options for async module configuration using factory pattern
106
106
  */
107
- type AmqpWorkerModuleAsyncOptions<TContract extends ContractDefinition> = {
107
+ type AmqpWorkerModuleAsyncOptions<TContract extends ContractDefinitionInput> = {
108
108
  /**
109
109
  * Factory function that returns the module options.
110
110
  * Can use injected dependencies to create configuration.
@@ -174,14 +174,14 @@ declare class AmqpWorkerModule {
174
174
  * @param options - The worker configuration options with contract and handlers
175
175
  * @returns A dynamic module for NestJS
176
176
  */
177
- static forRoot<TContract extends ContractDefinition>(options: AmqpWorkerModuleOptions<TContract>): DynamicModule;
177
+ static forRoot<TContract extends ContractDefinitionInput>(options: AmqpWorkerModuleOptions<TContract>): DynamicModule;
178
178
  /**
179
179
  * Register the AMQP worker module with asynchronous configuration
180
180
  *
181
181
  * @param options - Async configuration options with factory function
182
182
  * @returns A dynamic module for NestJS
183
183
  */
184
- static forRootAsync<TContract extends ContractDefinition>(options: AmqpWorkerModuleAsyncOptions<TContract>): DynamicModule;
184
+ static forRootAsync<TContract extends ContractDefinitionInput>(options: AmqpWorkerModuleAsyncOptions<TContract>): DynamicModule;
185
185
  }
186
186
  //#endregion
187
187
  //#region src/worker.module-definition.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/worker.service.ts","../src/worker.module.ts","../src/worker.module-definition.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AA4BA;;;;;;;;AA6CA;;;;;;;;;;;;AC3DK,KDcO,uBCdP,CAAA,kBDciD,kBCdnB,CAAA,GAAA;EAAmB;EAC1B,QAAA,EDehB,SCfgB;EAAxB;EACgC,QAAA,EDgBxB,iCChBwB,CDgBQ,SChBR,CAAA;EAAxB;EAAR,IAAA,EDkBI,aClBJ,EAAA;EAAO;EAKC,iBAAA,CAAA,EDeU,4BCfkB,GAAA,SAAA;CAAmB;;;;;;AAiE3D;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;cFsEa,oCAAoC,+BACpC,cAAc;;;uBAMG,wBAAwB;;;;;;;;;;;kBAa9B;;;;;;;;qBAWG;;;;;;;AA7E3B,KCdK,8BDc8B,CAAA,kBCdmB,kBDcnB,CAAA,GCb/B,uBDa+B,CCbP,SDaO,CAAA,GCZ/B,ODY+B,CCZvB,uBDYuB,CCZC,SDYD,CAAA,CAAA;;;;AAIvB,KCXA,4BDWA,CAAA,kBCX+C,kBDW/C,CAAA,GAAA;EAEJ;;;AAuCR;EACiD,UAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GC/Cf,8BD+Ce,CC/CgB,SD+ChB,CAAA;EAOK;;;;EANzC,MAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GC3CiB,ID2CjB,CAAA,OAAA,CAAA,CAAA,EAAA;EAAc;;;YCvCf;;AA5BsD;;;;;;;;AAalE;;;;;;;AAiEA;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;;;;cDmFa,gBAAA;;;;;;;mCAOsB,6BACtB,wBAAwB,aAChC;;;;;;;wCAoBmC,6BAC3B,6BAA6B,aACrC;;;;;;;;cClHQ"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/worker.service.ts","../src/worker.module.ts","../src/worker.module-definition.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AA4BA;;;;;;;;AA6CA;;;;;;;;;;;;AC3DK,KDcO,uBCdP,CAAA,kBDciD,uBCdnB,CAAA,GAAA;EAAmB;EAC1B,QAAA,EDehB,SCfgB;EAAxB;EACgC,QAAA,EDgBxB,iCChBwB,CDgBQ,SChBR,CAAA;EAAxB;EAAR,IAAA,EDkBI,aClBJ,EAAA;EAAO;EAKC,iBAAA,CAAA,EDeU,4BCfkB,GAAA,SAAA;CAAmB;;;;;;AAiE3D;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;cFsEa,oCAAoC,oCACpC,cAAc;;;uBAMG,wBAAwB;;;;;;;;;;;kBAa9B;;;;;;;;qBAWG;;;;;;;AA7E3B,KCdK,8BDc8B,CAAA,kBCdmB,uBDcnB,CAAA,GCb/B,uBDa+B,CCbP,SDaO,CAAA,GCZ/B,ODY+B,CCZvB,uBDYuB,CCZC,SDYD,CAAA,CAAA;;;;AAIvB,KCXA,4BDWA,CAAA,kBCX+C,uBDW/C,CAAA,GAAA;EAEJ;;;AAuCR;EACiD,UAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GC/Cf,8BD+Ce,CC/CgB,SD+ChB,CAAA;EAOK;;;;EANzC,MAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GC3CiB,ID2CjB,CAAA,OAAA,CAAA,CAAA,EAAA;EAAc;;;YCvCf;;AA5B2D;;;;;;;;AAavE;;;;;;;AAiEA;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;;;;cDmFa,gBAAA;;;;;;;mCAOsB,kCACtB,wBAAwB,aAChC;;;;;;;wCAoBmC,kCAC3B,6BAA6B,aACrC;;;;;;;;cClHQ"}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { DynamicModule, ModuleMetadata, OnModuleDestroy, OnModuleInit, Type } from "@nestjs/common";
2
2
  import { WorkerInferSafeConsumerHandlers, WorkerInferSafeConsumerHandlers as WorkerInferSafeConsumerHandlers$1, defineHandler, defineHandlers } from "@amqp-contract/worker";
3
3
  import { AmqpConnectionManagerOptions, ConnectionUrl } from "amqp-connection-manager";
4
- import { ContractDefinition } from "@amqp-contract/contract";
4
+ import { ContractDefinitionInput } from "@amqp-contract/contract";
5
5
 
6
6
  //#region src/worker.service.d.ts
7
7
 
@@ -27,7 +27,7 @@ import { ContractDefinition } from "@amqp-contract/contract";
27
27
  * };
28
28
  * ```
29
29
  */
30
- type AmqpWorkerModuleOptions<TContract extends ContractDefinition> = {
30
+ type AmqpWorkerModuleOptions<TContract extends ContractDefinitionInput> = {
31
31
  /** The AMQP contract definition specifying consumers and their message schemas */
32
32
  contract: TContract;
33
33
  /** Message handlers for each consumer defined in the contract. Use defineHandlers to create type-safe handlers. */
@@ -71,7 +71,7 @@ type AmqpWorkerModuleOptions<TContract extends ContractDefinition> = {
71
71
  * // and stops gracefully when the application shuts down
72
72
  * ```
73
73
  */
74
- declare class AmqpWorkerService<TContract extends ContractDefinition> implements OnModuleInit, OnModuleDestroy {
74
+ declare class AmqpWorkerService<TContract extends ContractDefinitionInput> implements OnModuleInit, OnModuleDestroy {
75
75
  private readonly options;
76
76
  private worker;
77
77
  constructor(options: AmqpWorkerModuleOptions<TContract>);
@@ -100,11 +100,11 @@ declare class AmqpWorkerService<TContract extends ContractDefinition> implements
100
100
  /**
101
101
  * Factory function return type for async module configuration
102
102
  */
103
- type AmqpWorkerModuleOptionsFactory<TContract extends ContractDefinition> = AmqpWorkerModuleOptions<TContract> | Promise<AmqpWorkerModuleOptions<TContract>>;
103
+ type AmqpWorkerModuleOptionsFactory<TContract extends ContractDefinitionInput> = AmqpWorkerModuleOptions<TContract> | Promise<AmqpWorkerModuleOptions<TContract>>;
104
104
  /**
105
105
  * Options for async module configuration using factory pattern
106
106
  */
107
- type AmqpWorkerModuleAsyncOptions<TContract extends ContractDefinition> = {
107
+ type AmqpWorkerModuleAsyncOptions<TContract extends ContractDefinitionInput> = {
108
108
  /**
109
109
  * Factory function that returns the module options.
110
110
  * Can use injected dependencies to create configuration.
@@ -174,14 +174,14 @@ declare class AmqpWorkerModule {
174
174
  * @param options - The worker configuration options with contract and handlers
175
175
  * @returns A dynamic module for NestJS
176
176
  */
177
- static forRoot<TContract extends ContractDefinition>(options: AmqpWorkerModuleOptions<TContract>): DynamicModule;
177
+ static forRoot<TContract extends ContractDefinitionInput>(options: AmqpWorkerModuleOptions<TContract>): DynamicModule;
178
178
  /**
179
179
  * Register the AMQP worker module with asynchronous configuration
180
180
  *
181
181
  * @param options - Async configuration options with factory function
182
182
  * @returns A dynamic module for NestJS
183
183
  */
184
- static forRootAsync<TContract extends ContractDefinition>(options: AmqpWorkerModuleAsyncOptions<TContract>): DynamicModule;
184
+ static forRootAsync<TContract extends ContractDefinitionInput>(options: AmqpWorkerModuleAsyncOptions<TContract>): DynamicModule;
185
185
  }
186
186
  //#endregion
187
187
  //#region src/worker.module-definition.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/worker.service.ts","../src/worker.module.ts","../src/worker.module-definition.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AA4BA;;;;;;;;AA6CA;;;;;;;;;;;;AC3DK,KDcO,uBCdP,CAAA,kBDciD,kBCdnB,CAAA,GAAA;EAAmB;EAC1B,QAAA,EDehB,SCfgB;EAAxB;EACgC,QAAA,EDgBxB,iCChBwB,CDgBQ,SChBR,CAAA;EAAxB;EAAR,IAAA,EDkBI,aClBJ,EAAA;EAAO;EAKC,iBAAA,CAAA,EDeU,4BCfkB,GAAA,SAAA;CAAmB;;;;;;AAiE3D;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;cFsEa,oCAAoC,+BACpC,cAAc;;;uBAMG,wBAAwB;;;;;;;;;;;kBAa9B;;;;;;;;qBAWG;;;;;;;AA7E3B,KCdK,8BDc8B,CAAA,kBCdmB,kBDcnB,CAAA,GCb/B,uBDa+B,CCbP,SDaO,CAAA,GCZ/B,ODY+B,CCZvB,uBDYuB,CCZC,SDYD,CAAA,CAAA;;;;AAIvB,KCXA,4BDWA,CAAA,kBCX+C,kBDW/C,CAAA,GAAA;EAEJ;;;AAuCR;EACiD,UAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GC/Cf,8BD+Ce,CC/CgB,SD+ChB,CAAA;EAOK;;;;EANzC,MAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GC3CiB,ID2CjB,CAAA,OAAA,CAAA,CAAA,EAAA;EAAc;;;YCvCf;;AA5BsD;;;;;;;;AAalE;;;;;;;AAiEA;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;;;;cDmFa,gBAAA;;;;;;;mCAOsB,6BACtB,wBAAwB,aAChC;;;;;;;wCAoBmC,6BAC3B,6BAA6B,aACrC;;;;;;;;cClHQ"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/worker.service.ts","../src/worker.module.ts","../src/worker.module-definition.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AA4BA;;;;;;;;AA6CA;;;;;;;;;;;;AC3DK,KDcO,uBCdP,CAAA,kBDciD,uBCdnB,CAAA,GAAA;EAAmB;EAC1B,QAAA,EDehB,SCfgB;EAAxB;EACgC,QAAA,EDgBxB,iCChBwB,CDgBQ,SChBR,CAAA;EAAxB;EAAR,IAAA,EDkBI,aClBJ,EAAA;EAAO;EAKC,iBAAA,CAAA,EDeU,4BCfkB,GAAA,SAAA;CAAmB;;;;;;AAiE3D;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;cFsEa,oCAAoC,oCACpC,cAAc;;;uBAMG,wBAAwB;;;;;;;;;;;kBAa9B;;;;;;;;qBAWG;;;;;;;AA7E3B,KCdK,8BDc8B,CAAA,kBCdmB,uBDcnB,CAAA,GCb/B,uBDa+B,CCbP,SDaO,CAAA,GCZ/B,ODY+B,CCZvB,uBDYuB,CCZC,SDYD,CAAA,CAAA;;;;AAIvB,KCXA,4BDWA,CAAA,kBCX+C,uBDW/C,CAAA,GAAA;EAEJ;;;AAuCR;EACiD,UAAA,EAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GC/Cf,8BD+Ce,CC/CgB,SD+ChB,CAAA;EAOK;;;;EANzC,MAAA,CAAA,EAAA,CAAA,MAAA,GAAA,MAAA,GC3CiB,ID2CjB,CAAA,OAAA,CAAA,CAAA,EAAA;EAAc;;;YCvCf;;AA5B2D;;;;;;;;AAavE;;;;;;;AAiEA;;;;;;;;;;;;;AClFA;;;;;;;;;;;;;;;;;;;cDmFa,gBAAA;;;;;;;mCAOsB,kCACtB,wBAAwB,aAChC;;;;;;;wCAoBmC,kCAC3B,6BAA6B,aACrC;;;;;;;;cClHQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["AmqpWorkerService","AmqpWorkerModule"],"sources":["../src/worker.module-definition.ts","../src/worker.service.ts","../src/worker.module.ts"],"sourcesContent":["/**\n * Injection token for AMQP worker module options\n * Used by NestJS DI system to inject configuration into AmqpWorkerService\n */\nexport const MODULE_OPTIONS_TOKEN = Symbol(\"AMQP_WORKER_MODULE_OPTIONS\");\n","import type { AmqpConnectionManagerOptions, ConnectionUrl } from \"amqp-connection-manager\";\nimport { Inject, Injectable, type OnModuleDestroy, type OnModuleInit } from \"@nestjs/common\";\nimport { TypedAmqpWorker, type WorkerInferSafeConsumerHandlers } from \"@amqp-contract/worker\";\nimport type { ContractDefinition } from \"@amqp-contract/contract\";\nimport { MODULE_OPTIONS_TOKEN } from \"./worker.module-definition.js\";\n\n/**\n * Configuration options for the AMQP worker NestJS module.\n *\n * @typeParam TContract - The contract definition type\n *\n * @example\n * ```typescript\n * import { defineHandlers, RetryableError } from '@amqp-contract/worker';\n * import { Future } from '@swan-io/boxed';\n *\n * const options: AmqpWorkerModuleOptions<typeof contract> = {\n * contract: myContract,\n * handlers: defineHandlers(myContract, {\n * processOrder: ({ payload }) =>\n * Future.fromPromise(processPayment(payload))\n * .mapOk(() => undefined)\n * .mapError((error) => new RetryableError('Payment failed', error))\n * }),\n * urls: ['amqp://localhost'],\n * };\n * ```\n */\nexport type AmqpWorkerModuleOptions<TContract extends ContractDefinition> = {\n /** The AMQP contract definition specifying consumers and their message schemas */\n contract: TContract;\n /** Message handlers for each consumer defined in the contract. Use defineHandlers to create type-safe handlers. */\n handlers: WorkerInferSafeConsumerHandlers<TContract>;\n /** AMQP broker URL(s). Multiple URLs provide failover support */\n urls: ConnectionUrl[];\n /** Optional connection configuration (heartbeat, reconnect settings, etc.) */\n connectionOptions?: AmqpConnectionManagerOptions | undefined;\n};\n\n/**\n * Type-safe AMQP worker service for NestJS applications.\n *\n * This service wraps {@link TypedAmqpWorker} and integrates it with the NestJS\n * lifecycle, automatically starting message consumption on module init and\n * cleaning up resources on module destroy.\n *\n * @typeParam TContract - The contract definition type\n *\n * @example\n * ```typescript\n * // In your module\n * import { AmqpWorkerModule } from '@amqp-contract/worker-nestjs';\n *\n * @Module({\n * imports: [\n * AmqpWorkerModule.forRoot({\n * contract: myContract,\n * handlers: {\n * processOrder: async (message) => {\n * console.log('Received order:', message.orderId);\n * // Process the order...\n * }\n * },\n * urls: ['amqp://localhost']\n * })\n * ]\n * })\n * export class AppModule {}\n *\n * // The worker automatically starts consuming messages when the module initializes\n * // and stops gracefully when the application shuts down\n * ```\n */\n@Injectable()\nexport class AmqpWorkerService<TContract extends ContractDefinition>\n implements OnModuleInit, OnModuleDestroy\n{\n private worker: TypedAmqpWorker<TContract> | null = null;\n\n constructor(\n @Inject(MODULE_OPTIONS_TOKEN)\n private readonly options: AmqpWorkerModuleOptions<TContract>,\n ) {}\n\n /**\n * Initialize the AMQP worker when the NestJS module starts.\n *\n * This lifecycle hook automatically creates and starts the worker,\n * beginning message consumption from all configured consumers.\n * The connection will be established in the background with\n * automatic reconnection handling.\n *\n * @throws Error if the worker fails to start\n */\n async onModuleInit(): Promise<void> {\n this.worker = await TypedAmqpWorker.create(this.options).resultToPromise();\n }\n\n /**\n * Close the AMQP worker when the NestJS module is destroyed.\n *\n * This lifecycle hook ensures proper cleanup of resources when the\n * NestJS application shuts down, gracefully stopping message consumption\n * and closing the connection.\n */\n async onModuleDestroy(): Promise<void> {\n if (this.worker) {\n await this.worker.close().resultToPromise();\n this.worker = null;\n }\n }\n}\n","import { type AmqpWorkerModuleOptions, AmqpWorkerService } from \"./worker.service.js\";\nimport {\n type DynamicModule,\n Module,\n type ModuleMetadata,\n type Provider,\n type Type,\n} from \"@nestjs/common\";\nimport type { ContractDefinition } from \"@amqp-contract/contract\";\nimport { MODULE_OPTIONS_TOKEN } from \"./worker.module-definition.js\";\n\n/**\n * Factory function return type for async module configuration\n */\ntype AmqpWorkerModuleOptionsFactory<TContract extends ContractDefinition> =\n | AmqpWorkerModuleOptions<TContract>\n | Promise<AmqpWorkerModuleOptions<TContract>>;\n\n/**\n * Options for async module configuration using factory pattern\n */\nexport type AmqpWorkerModuleAsyncOptions<TContract extends ContractDefinition> = {\n /**\n * Factory function that returns the module options.\n * Can use injected dependencies to create configuration.\n */\n // oxlint-disable-next-line no-explicit-any\n useFactory: (...args: any[]) => AmqpWorkerModuleOptionsFactory<TContract>;\n /**\n * Optional dependencies to inject into the factory function.\n * Can be a token (string/symbol) a class or a reference to a provider.\n */\n inject?: (string | symbol | Type<unknown>)[];\n /**\n * Optional list of imported modules that export providers needed by the factory\n */\n imports?: ModuleMetadata[\"imports\"];\n};\n\n/**\n * NestJS module for AMQP worker integration\n * This module provides type-safe AMQP worker functionality using @amqp-contract/worker\n * without relying on NestJS decorators (except for dependency injection)\n *\n * @typeParam TContract - The contract definition type for type-safe handlers\n *\n * @example\n * ```typescript\n * // Synchronous configuration\n * @Module({\n * imports: [\n * AmqpWorkerModule.forRoot({\n * contract: myContract,\n * handlers: {\n * processOrder: async (message) => {\n * // message is fully typed based on the contract\n * console.log('Order:', message.orderId);\n * }\n * },\n * urls: ['amqp://localhost']\n * })\n * ]\n * })\n * export class AppModule {}\n *\n * // Asynchronous configuration\n * @Module({\n * imports: [\n * AmqpWorkerModule.forRootAsync({\n * imports: [ConfigModule],\n * useFactory: (configService: ConfigService) => ({\n * contract: myContract,\n * handlers: {\n * processOrder: async (message) => {\n * console.log('Order:', message.orderId);\n * }\n * },\n * urls: configService.get('AMQP_URLS')\n * }),\n * inject: [ConfigService]\n * })\n * ]\n * })\n * export class AppModule {}\n * ```\n */\n@Module({})\nexport class AmqpWorkerModule {\n /**\n * Register the AMQP worker module with synchronous configuration\n *\n * @param options - The worker configuration options with contract and handlers\n * @returns A dynamic module for NestJS\n */\n static forRoot<TContract extends ContractDefinition>(\n options: AmqpWorkerModuleOptions<TContract>,\n ): DynamicModule {\n return {\n module: AmqpWorkerModule,\n providers: [\n {\n provide: MODULE_OPTIONS_TOKEN,\n useValue: options,\n },\n AmqpWorkerService,\n ],\n exports: [AmqpWorkerService],\n };\n }\n\n /**\n * Register the AMQP worker module with asynchronous configuration\n *\n * @param options - Async configuration options with factory function\n * @returns A dynamic module for NestJS\n */\n static forRootAsync<TContract extends ContractDefinition>(\n options: AmqpWorkerModuleAsyncOptions<TContract>,\n ): DynamicModule {\n const providers: Provider[] = [\n {\n provide: MODULE_OPTIONS_TOKEN,\n useFactory: options.useFactory,\n inject: options.inject ?? [],\n },\n AmqpWorkerService,\n ];\n\n return {\n module: AmqpWorkerModule,\n imports: options.imports ?? [],\n providers,\n exports: [AmqpWorkerService],\n };\n }\n}\n"],"mappings":";;;;;;;;AAIA,MAAa,uBAAuB,OAAO,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;ACsEjE,8BAAMA,oBAEb;CACE,AAAQ,SAA4C;CAEpD,YACE,AACiB,SACjB;EADiB;;;;;;;;;;;;CAanB,MAAM,eAA8B;AAClC,OAAK,SAAS,MAAM,gBAAgB,OAAO,KAAK,QAAQ,CAAC,iBAAiB;;;;;;;;;CAU5E,MAAM,kBAAiC;AACrC,MAAI,KAAK,QAAQ;AACf,SAAM,KAAK,OAAO,OAAO,CAAC,iBAAiB;AAC3C,QAAK,SAAS;;;;;CAnCnB,YAAY;oBAOR,OAAO,qBAAqB;;;;;;;ACO1B,iDAAMC,mBAAiB;;;;;;;CAO5B,OAAO,QACL,SACe;AACf,SAAO;GACL;GACA,WAAW,CACT;IACE,SAAS;IACT,UAAU;IACX,EACD,kBACD;GACD,SAAS,CAAC,kBAAkB;GAC7B;;;;;;;;CASH,OAAO,aACL,SACe;EACf,MAAM,YAAwB,CAC5B;GACE,SAAS;GACT,YAAY,QAAQ;GACpB,QAAQ,QAAQ,UAAU,EAAE;GAC7B,EACD,kBACD;AAED,SAAO;GACL;GACA,SAAS,QAAQ,WAAW,EAAE;GAC9B;GACA,SAAS,CAAC,kBAAkB;GAC7B;;;mDA/CJ,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.mjs","names":["AmqpWorkerService","AmqpWorkerModule"],"sources":["../src/worker.module-definition.ts","../src/worker.service.ts","../src/worker.module.ts"],"sourcesContent":["/**\n * Injection token for AMQP worker module options\n * Used by NestJS DI system to inject configuration into AmqpWorkerService\n */\nexport const MODULE_OPTIONS_TOKEN = Symbol(\"AMQP_WORKER_MODULE_OPTIONS\");\n","import type { AmqpConnectionManagerOptions, ConnectionUrl } from \"amqp-connection-manager\";\nimport { Inject, Injectable, type OnModuleDestroy, type OnModuleInit } from \"@nestjs/common\";\nimport { TypedAmqpWorker, type WorkerInferSafeConsumerHandlers } from \"@amqp-contract/worker\";\nimport type { ContractDefinitionInput } from \"@amqp-contract/contract\";\nimport { MODULE_OPTIONS_TOKEN } from \"./worker.module-definition.js\";\n\n/**\n * Configuration options for the AMQP worker NestJS module.\n *\n * @typeParam TContract - The contract definition type\n *\n * @example\n * ```typescript\n * import { defineHandlers, RetryableError } from '@amqp-contract/worker';\n * import { Future } from '@swan-io/boxed';\n *\n * const options: AmqpWorkerModuleOptions<typeof contract> = {\n * contract: myContract,\n * handlers: defineHandlers(myContract, {\n * processOrder: ({ payload }) =>\n * Future.fromPromise(processPayment(payload))\n * .mapOk(() => undefined)\n * .mapError((error) => new RetryableError('Payment failed', error))\n * }),\n * urls: ['amqp://localhost'],\n * };\n * ```\n */\nexport type AmqpWorkerModuleOptions<TContract extends ContractDefinitionInput> = {\n /** The AMQP contract definition specifying consumers and their message schemas */\n contract: TContract;\n /** Message handlers for each consumer defined in the contract. Use defineHandlers to create type-safe handlers. */\n handlers: WorkerInferSafeConsumerHandlers<TContract>;\n /** AMQP broker URL(s). Multiple URLs provide failover support */\n urls: ConnectionUrl[];\n /** Optional connection configuration (heartbeat, reconnect settings, etc.) */\n connectionOptions?: AmqpConnectionManagerOptions | undefined;\n};\n\n/**\n * Type-safe AMQP worker service for NestJS applications.\n *\n * This service wraps {@link TypedAmqpWorker} and integrates it with the NestJS\n * lifecycle, automatically starting message consumption on module init and\n * cleaning up resources on module destroy.\n *\n * @typeParam TContract - The contract definition type\n *\n * @example\n * ```typescript\n * // In your module\n * import { AmqpWorkerModule } from '@amqp-contract/worker-nestjs';\n *\n * @Module({\n * imports: [\n * AmqpWorkerModule.forRoot({\n * contract: myContract,\n * handlers: {\n * processOrder: async (message) => {\n * console.log('Received order:', message.orderId);\n * // Process the order...\n * }\n * },\n * urls: ['amqp://localhost']\n * })\n * ]\n * })\n * export class AppModule {}\n *\n * // The worker automatically starts consuming messages when the module initializes\n * // and stops gracefully when the application shuts down\n * ```\n */\n@Injectable()\nexport class AmqpWorkerService<TContract extends ContractDefinitionInput>\n implements OnModuleInit, OnModuleDestroy\n{\n private worker: TypedAmqpWorker<TContract> | null = null;\n\n constructor(\n @Inject(MODULE_OPTIONS_TOKEN)\n private readonly options: AmqpWorkerModuleOptions<TContract>,\n ) {}\n\n /**\n * Initialize the AMQP worker when the NestJS module starts.\n *\n * This lifecycle hook automatically creates and starts the worker,\n * beginning message consumption from all configured consumers.\n * The connection will be established in the background with\n * automatic reconnection handling.\n *\n * @throws Error if the worker fails to start\n */\n async onModuleInit(): Promise<void> {\n this.worker = await TypedAmqpWorker.create(this.options).resultToPromise();\n }\n\n /**\n * Close the AMQP worker when the NestJS module is destroyed.\n *\n * This lifecycle hook ensures proper cleanup of resources when the\n * NestJS application shuts down, gracefully stopping message consumption\n * and closing the connection.\n */\n async onModuleDestroy(): Promise<void> {\n if (this.worker) {\n await this.worker.close().resultToPromise();\n this.worker = null;\n }\n }\n}\n","import { type AmqpWorkerModuleOptions, AmqpWorkerService } from \"./worker.service.js\";\nimport {\n type DynamicModule,\n Module,\n type ModuleMetadata,\n type Provider,\n type Type,\n} from \"@nestjs/common\";\nimport type { ContractDefinitionInput } from \"@amqp-contract/contract\";\nimport { MODULE_OPTIONS_TOKEN } from \"./worker.module-definition.js\";\n\n/**\n * Factory function return type for async module configuration\n */\ntype AmqpWorkerModuleOptionsFactory<TContract extends ContractDefinitionInput> =\n | AmqpWorkerModuleOptions<TContract>\n | Promise<AmqpWorkerModuleOptions<TContract>>;\n\n/**\n * Options for async module configuration using factory pattern\n */\nexport type AmqpWorkerModuleAsyncOptions<TContract extends ContractDefinitionInput> = {\n /**\n * Factory function that returns the module options.\n * Can use injected dependencies to create configuration.\n */\n // oxlint-disable-next-line no-explicit-any\n useFactory: (...args: any[]) => AmqpWorkerModuleOptionsFactory<TContract>;\n /**\n * Optional dependencies to inject into the factory function.\n * Can be a token (string/symbol) a class or a reference to a provider.\n */\n inject?: (string | symbol | Type<unknown>)[];\n /**\n * Optional list of imported modules that export providers needed by the factory\n */\n imports?: ModuleMetadata[\"imports\"];\n};\n\n/**\n * NestJS module for AMQP worker integration\n * This module provides type-safe AMQP worker functionality using @amqp-contract/worker\n * without relying on NestJS decorators (except for dependency injection)\n *\n * @typeParam TContract - The contract definition type for type-safe handlers\n *\n * @example\n * ```typescript\n * // Synchronous configuration\n * @Module({\n * imports: [\n * AmqpWorkerModule.forRoot({\n * contract: myContract,\n * handlers: {\n * processOrder: async (message) => {\n * // message is fully typed based on the contract\n * console.log('Order:', message.orderId);\n * }\n * },\n * urls: ['amqp://localhost']\n * })\n * ]\n * })\n * export class AppModule {}\n *\n * // Asynchronous configuration\n * @Module({\n * imports: [\n * AmqpWorkerModule.forRootAsync({\n * imports: [ConfigModule],\n * useFactory: (configService: ConfigService) => ({\n * contract: myContract,\n * handlers: {\n * processOrder: async (message) => {\n * console.log('Order:', message.orderId);\n * }\n * },\n * urls: configService.get('AMQP_URLS')\n * }),\n * inject: [ConfigService]\n * })\n * ]\n * })\n * export class AppModule {}\n * ```\n */\n@Module({})\nexport class AmqpWorkerModule {\n /**\n * Register the AMQP worker module with synchronous configuration\n *\n * @param options - The worker configuration options with contract and handlers\n * @returns A dynamic module for NestJS\n */\n static forRoot<TContract extends ContractDefinitionInput>(\n options: AmqpWorkerModuleOptions<TContract>,\n ): DynamicModule {\n return {\n module: AmqpWorkerModule,\n providers: [\n {\n provide: MODULE_OPTIONS_TOKEN,\n useValue: options,\n },\n AmqpWorkerService,\n ],\n exports: [AmqpWorkerService],\n };\n }\n\n /**\n * Register the AMQP worker module with asynchronous configuration\n *\n * @param options - Async configuration options with factory function\n * @returns A dynamic module for NestJS\n */\n static forRootAsync<TContract extends ContractDefinitionInput>(\n options: AmqpWorkerModuleAsyncOptions<TContract>,\n ): DynamicModule {\n const providers: Provider[] = [\n {\n provide: MODULE_OPTIONS_TOKEN,\n useFactory: options.useFactory,\n inject: options.inject ?? [],\n },\n AmqpWorkerService,\n ];\n\n return {\n module: AmqpWorkerModule,\n imports: options.imports ?? [],\n providers,\n exports: [AmqpWorkerService],\n };\n }\n}\n"],"mappings":";;;;;;;;AAIA,MAAa,uBAAuB,OAAO,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;ACsEjE,8BAAMA,oBAEb;CACE,AAAQ,SAA4C;CAEpD,YACE,AACiB,SACjB;EADiB;;;;;;;;;;;;CAanB,MAAM,eAA8B;AAClC,OAAK,SAAS,MAAM,gBAAgB,OAAO,KAAK,QAAQ,CAAC,iBAAiB;;;;;;;;;CAU5E,MAAM,kBAAiC;AACrC,MAAI,KAAK,QAAQ;AACf,SAAM,KAAK,OAAO,OAAO,CAAC,iBAAiB;AAC3C,QAAK,SAAS;;;;;CAnCnB,YAAY;oBAOR,OAAO,qBAAqB;;;;;;;ACO1B,iDAAMC,mBAAiB;;;;;;;CAO5B,OAAO,QACL,SACe;AACf,SAAO;GACL;GACA,WAAW,CACT;IACE,SAAS;IACT,UAAU;IACX,EACD,kBACD;GACD,SAAS,CAAC,kBAAkB;GAC7B;;;;;;;;CASH,OAAO,aACL,SACe;EACf,MAAM,YAAwB,CAC5B;GACE,SAAS;GACT,YAAY,QAAQ;GACpB,QAAQ,QAAQ,UAAU,EAAE;GAC7B,EACD,kBACD;AAED,SAAO;GACL;GACA,SAAS,QAAQ,WAAW,EAAE;GAC9B;GACA,SAAS,CAAC,kBAAkB;GAC7B;;;mDA/CJ,OAAO,EAAE,CAAC"}
package/docs/index.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ### AmqpWorkerModule
10
10
 
11
- Defined in: [worker-nestjs/src/worker.module.ts:88](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L88)
11
+ Defined in: [worker-nestjs/src/worker.module.ts:88](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L88)
12
12
 
13
13
  NestJS module for AMQP worker integration
14
14
  This module provides type-safe AMQP worker functionality using @amqp-contract/worker
@@ -79,7 +79,7 @@ new AmqpWorkerModule(): AmqpWorkerModule;
79
79
  static forRoot<TContract>(options): DynamicModule;
80
80
  ```
81
81
 
82
- Defined in: [worker-nestjs/src/worker.module.ts:95](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L95)
82
+ Defined in: [worker-nestjs/src/worker.module.ts:95](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L95)
83
83
 
84
84
  Register the AMQP worker module with synchronous configuration
85
85
 
@@ -87,7 +87,7 @@ Register the AMQP worker module with synchronous configuration
87
87
 
88
88
  | Type Parameter |
89
89
  | ------ |
90
- | `TContract` *extends* `ContractDefinition` |
90
+ | `TContract` *extends* `ContractDefinitionInput` |
91
91
 
92
92
  ###### Parameters
93
93
 
@@ -107,7 +107,7 @@ A dynamic module for NestJS
107
107
  static forRootAsync<TContract>(options): DynamicModule;
108
108
  ```
109
109
 
110
- Defined in: [worker-nestjs/src/worker.module.ts:117](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L117)
110
+ Defined in: [worker-nestjs/src/worker.module.ts:117](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L117)
111
111
 
112
112
  Register the AMQP worker module with asynchronous configuration
113
113
 
@@ -115,7 +115,7 @@ Register the AMQP worker module with asynchronous configuration
115
115
 
116
116
  | Type Parameter |
117
117
  | ------ |
118
- | `TContract` *extends* `ContractDefinition` |
118
+ | `TContract` *extends* `ContractDefinitionInput` |
119
119
 
120
120
  ###### Parameters
121
121
 
@@ -133,7 +133,7 @@ A dynamic module for NestJS
133
133
 
134
134
  ### AmqpWorkerService
135
135
 
136
- Defined in: [worker-nestjs/src/worker.service.ts:75](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L75)
136
+ Defined in: [worker-nestjs/src/worker.service.ts:75](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L75)
137
137
 
138
138
  Type-safe AMQP worker service for NestJS applications.
139
139
 
@@ -171,7 +171,7 @@ export class AppModule {}
171
171
 
172
172
  | Type Parameter | Description |
173
173
  | ------ | ------ |
174
- | `TContract` *extends* `ContractDefinition` | The contract definition type |
174
+ | `TContract` *extends* `ContractDefinitionInput` | The contract definition type |
175
175
 
176
176
  #### Implements
177
177
 
@@ -186,7 +186,7 @@ export class AppModule {}
186
186
  new AmqpWorkerService<TContract>(options): AmqpWorkerService<TContract>;
187
187
  ```
188
188
 
189
- Defined in: [worker-nestjs/src/worker.service.ts:80](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L80)
189
+ Defined in: [worker-nestjs/src/worker.service.ts:80](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L80)
190
190
 
191
191
  ###### Parameters
192
192
 
@@ -206,7 +206,7 @@ Defined in: [worker-nestjs/src/worker.service.ts:80](https://github.com/btravers
206
206
  onModuleDestroy(): Promise<void>;
207
207
  ```
208
208
 
209
- Defined in: [worker-nestjs/src/worker.service.ts:106](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L106)
209
+ Defined in: [worker-nestjs/src/worker.service.ts:106](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L106)
210
210
 
211
211
  Close the AMQP worker when the NestJS module is destroyed.
212
212
 
@@ -230,7 +230,7 @@ OnModuleDestroy.onModuleDestroy
230
230
  onModuleInit(): Promise<void>;
231
231
  ```
232
232
 
233
- Defined in: [worker-nestjs/src/worker.service.ts:95](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L95)
233
+ Defined in: [worker-nestjs/src/worker.service.ts:95](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L95)
234
234
 
235
235
  Initialize the AMQP worker when the NestJS module starts.
236
236
 
@@ -261,7 +261,7 @@ OnModuleInit.onModuleInit
261
261
  type AmqpWorkerModuleAsyncOptions<TContract> = object;
262
262
  ```
263
263
 
264
- Defined in: [worker-nestjs/src/worker.module.ts:22](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L22)
264
+ Defined in: [worker-nestjs/src/worker.module.ts:22](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L22)
265
265
 
266
266
  Options for async module configuration using factory pattern
267
267
 
@@ -269,15 +269,15 @@ Options for async module configuration using factory pattern
269
269
 
270
270
  | Type Parameter |
271
271
  | ------ |
272
- | `TContract` *extends* `ContractDefinition` |
272
+ | `TContract` *extends* `ContractDefinitionInput` |
273
273
 
274
274
  #### Properties
275
275
 
276
276
  | Property | Type | Description | Defined in |
277
277
  | ------ | ------ | ------ | ------ |
278
- | <a id="imports"></a> `imports?` | `ModuleMetadata`\[`"imports"`\] | Optional list of imported modules that export providers needed by the factory | [worker-nestjs/src/worker.module.ts:37](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L37) |
279
- | <a id="inject"></a> `inject?` | (`string` \| `symbol` \| `Type`&lt;`unknown`&gt;)[] | Optional dependencies to inject into the factory function. Can be a token (string/symbol) a class or a reference to a provider. | [worker-nestjs/src/worker.module.ts:33](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L33) |
280
- | <a id="usefactory"></a> `useFactory` | (...`args`) => `AmqpWorkerModuleOptionsFactory`&lt;`TContract`&gt; | Factory function that returns the module options. Can use injected dependencies to create configuration. | [worker-nestjs/src/worker.module.ts:28](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module.ts#L28) |
278
+ | <a id="imports"></a> `imports?` | `ModuleMetadata`\[`"imports"`\] | Optional list of imported modules that export providers needed by the factory | [worker-nestjs/src/worker.module.ts:37](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L37) |
279
+ | <a id="inject"></a> `inject?` | (`string` \| `symbol` \| `Type`&lt;`unknown`&gt;)[] | Optional dependencies to inject into the factory function. Can be a token (string/symbol) a class or a reference to a provider. | [worker-nestjs/src/worker.module.ts:33](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L33) |
280
+ | <a id="usefactory"></a> `useFactory` | (...`args`) => `AmqpWorkerModuleOptionsFactory`&lt;`TContract`&gt; | Factory function that returns the module options. Can use injected dependencies to create configuration. | [worker-nestjs/src/worker.module.ts:28](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module.ts#L28) |
281
281
 
282
282
  ***
283
283
 
@@ -287,7 +287,7 @@ Options for async module configuration using factory pattern
287
287
  type AmqpWorkerModuleOptions<TContract> = object;
288
288
  ```
289
289
 
290
- Defined in: [worker-nestjs/src/worker.service.ts:29](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L29)
290
+ Defined in: [worker-nestjs/src/worker.service.ts:29](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L29)
291
291
 
292
292
  Configuration options for the AMQP worker NestJS module.
293
293
 
@@ -313,35 +313,36 @@ const options: AmqpWorkerModuleOptions<typeof contract> = {
313
313
 
314
314
  | Type Parameter | Description |
315
315
  | ------ | ------ |
316
- | `TContract` *extends* `ContractDefinition` | The contract definition type |
316
+ | `TContract` *extends* `ContractDefinitionInput` | The contract definition type |
317
317
 
318
318
  #### Properties
319
319
 
320
320
  | Property | Type | Description | Defined in |
321
321
  | ------ | ------ | ------ | ------ |
322
- | <a id="connectionoptions"></a> `connectionOptions?` | `AmqpConnectionManagerOptions` | Optional connection configuration (heartbeat, reconnect settings, etc.) | [worker-nestjs/src/worker.service.ts:37](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L37) |
323
- | <a id="contract"></a> `contract` | `TContract` | The AMQP contract definition specifying consumers and their message schemas | [worker-nestjs/src/worker.service.ts:31](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L31) |
324
- | <a id="handlers"></a> `handlers` | [`WorkerInferSafeConsumerHandlers`](#workerinfersafeconsumerhandlers)&lt;`TContract`&gt; | Message handlers for each consumer defined in the contract. Use defineHandlers to create type-safe handlers. | [worker-nestjs/src/worker.service.ts:33](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L33) |
325
- | <a id="urls"></a> `urls` | `ConnectionUrl`[] | AMQP broker URL(s). Multiple URLs provide failover support | [worker-nestjs/src/worker.service.ts:35](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.service.ts#L35) |
322
+ | <a id="connectionoptions"></a> `connectionOptions?` | `AmqpConnectionManagerOptions` | Optional connection configuration (heartbeat, reconnect settings, etc.) | [worker-nestjs/src/worker.service.ts:37](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L37) |
323
+ | <a id="contract"></a> `contract` | `TContract` | The AMQP contract definition specifying consumers and their message schemas | [worker-nestjs/src/worker.service.ts:31](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L31) |
324
+ | <a id="handlers"></a> `handlers` | [`WorkerInferSafeConsumerHandlers`](#workerinfersafeconsumerhandlers)&lt;`TContract`&gt; | Message handlers for each consumer defined in the contract. Use defineHandlers to create type-safe handlers. | [worker-nestjs/src/worker.service.ts:33](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L33) |
325
+ | <a id="urls"></a> `urls` | `ConnectionUrl`[] | AMQP broker URL(s). Multiple URLs provide failover support | [worker-nestjs/src/worker.service.ts:35](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.service.ts#L35) |
326
326
 
327
327
  ***
328
328
 
329
- ### WorkerInferSafeConsumerHandlers
329
+ ### ~~WorkerInferSafeConsumerHandlers~~
330
330
 
331
331
  ```ts
332
- type WorkerInferSafeConsumerHandlers<TContract> = { [K in InferConsumerNames<TContract>]: WorkerInferSafeConsumerHandlerEntry<TContract, K> };
332
+ type WorkerInferSafeConsumerHandlers<TContract> = WorkerInferConsumerHandlers<TContract>;
333
333
  ```
334
334
 
335
- Defined in: worker/dist/index.d.mts:146
336
-
337
- Safe consumer handlers for a contract.
338
- All handlers return `Future<Result<void, HandlerError>>` for explicit error control.
335
+ Defined in: worker/dist/index.d.mts:296
339
336
 
340
337
  #### Type Parameters
341
338
 
342
339
  | Type Parameter |
343
340
  | ------ |
344
- | `TContract` *extends* `ContractDefinition` |
341
+ | `TContract` *extends* `ContractDefinitionInput` |
342
+
343
+ #### Deprecated
344
+
345
+ Use `WorkerInferConsumerHandlers` instead. Will be removed in next major version.
345
346
 
346
347
  ## Variables
347
348
 
@@ -351,7 +352,7 @@ All handlers return `Future<Result<void, HandlerError>>` for explicit error cont
351
352
  const MODULE_OPTIONS_TOKEN: typeof MODULE_OPTIONS_TOKEN;
352
353
  ```
353
354
 
354
- Defined in: [worker-nestjs/src/worker.module-definition.ts:5](https://github.com/btravers/amqp-contract/blob/c50b9d5f661ce899d34d7eebcfafa47844bd1087/packages/worker-nestjs/src/worker.module-definition.ts#L5)
355
+ Defined in: [worker-nestjs/src/worker.module-definition.ts:5](https://github.com/btravers/amqp-contract/blob/d132d062ebeaa9cc84db5471805355a29e3a50dc/packages/worker-nestjs/src/worker.module-definition.ts#L5)
355
356
 
356
357
  Injection token for AMQP worker module options
357
358
  Used by NestJS DI system to inject configuration into AmqpWorkerService
@@ -366,10 +367,10 @@ Used by NestJS DI system to inject configuration into AmqpWorkerService
366
367
  function defineHandler<TContract, TName>(
367
368
  contract,
368
369
  consumerName,
369
- handler): WorkerInferSafeConsumerHandlerEntry<TContract, TName>;
370
+ handler): WorkerInferConsumerHandlerEntry<TContract, TName>;
370
371
  ```
371
372
 
372
- Defined in: worker/dist/index.d.mts:460
373
+ Defined in: worker/dist/index.d.mts:610
373
374
 
374
375
  Define a type-safe handler for a specific consumer in a contract.
375
376
 
@@ -384,7 +385,7 @@ Supports two patterns:
384
385
 
385
386
  | Type Parameter | Description |
386
387
  | ------ | ------ |
387
- | `TContract` *extends* `ContractDefinition` | The contract definition type |
388
+ | `TContract` *extends* `ContractDefinitionInput` | The contract definition type |
388
389
  | `TName` *extends* `string` \| `number` \| `symbol` | The consumer name from the contract |
389
390
 
390
391
  ##### Parameters
@@ -393,11 +394,11 @@ Supports two patterns:
393
394
  | ------ | ------ | ------ |
394
395
  | `contract` | `TContract` | The contract definition containing the consumer |
395
396
  | `consumerName` | `TName` | The name of the consumer from the contract |
396
- | `handler` | `WorkerInferSafeConsumerHandler`&lt;`TContract`, `TName`&gt; | The handler function that returns `Future<Result<void, HandlerError>>` |
397
+ | `handler` | `WorkerInferConsumerHandler`&lt;`TContract`, `TName`&gt; | The handler function that returns `Future<Result<void, HandlerError>>` |
397
398
 
398
399
  ##### Returns
399
400
 
400
- `WorkerInferSafeConsumerHandlerEntry`&lt;`TContract`, `TName`&gt;
401
+ `WorkerInferConsumerHandlerEntry`&lt;`TContract`, `TName`&gt;
401
402
 
402
403
  A type-safe handler that can be used with TypedAmqpWorker
403
404
 
@@ -439,10 +440,10 @@ function defineHandler<TContract, TName>(
439
440
  contract,
440
441
  consumerName,
441
442
  handler,
442
- options): WorkerInferSafeConsumerHandlerEntry<TContract, TName>;
443
+ options): WorkerInferConsumerHandlerEntry<TContract, TName>;
443
444
  ```
444
445
 
445
- Defined in: worker/dist/index.d.mts:461
446
+ Defined in: worker/dist/index.d.mts:611
446
447
 
447
448
  Define a type-safe handler for a specific consumer in a contract.
448
449
 
@@ -457,7 +458,7 @@ Supports two patterns:
457
458
 
458
459
  | Type Parameter | Description |
459
460
  | ------ | ------ |
460
- | `TContract` *extends* `ContractDefinition` | The contract definition type |
461
+ | `TContract` *extends* `ContractDefinitionInput` | The contract definition type |
461
462
  | `TName` *extends* `string` \| `number` \| `symbol` | The consumer name from the contract |
462
463
 
463
464
  ##### Parameters
@@ -466,13 +467,13 @@ Supports two patterns:
466
467
  | ------ | ------ | ------ |
467
468
  | `contract` | `TContract` | The contract definition containing the consumer |
468
469
  | `consumerName` | `TName` | The name of the consumer from the contract |
469
- | `handler` | `WorkerInferSafeConsumerHandler`&lt;`TContract`, `TName`&gt; | The handler function that returns `Future<Result<void, HandlerError>>` |
470
+ | `handler` | `WorkerInferConsumerHandler`&lt;`TContract`, `TName`&gt; | The handler function that returns `Future<Result<void, HandlerError>>` |
470
471
  | `options` | \{ `prefetch?`: `number`; \} | Optional consumer options (prefetch) |
471
472
  | `options.prefetch?` | `number` | - |
472
473
 
473
474
  ##### Returns
474
475
 
475
- `WorkerInferSafeConsumerHandlerEntry`&lt;`TContract`, `TName`&gt;
476
+ `WorkerInferConsumerHandlerEntry`&lt;`TContract`, `TName`&gt;
476
477
 
477
478
  A type-safe handler that can be used with TypedAmqpWorker
478
479
 
@@ -512,10 +513,10 @@ const validateOrderHandler = defineHandler(
512
513
  ### defineHandlers()
513
514
 
514
515
  ```ts
515
- function defineHandlers<TContract>(contract, handlers): WorkerInferSafeConsumerHandlers<TContract>;
516
+ function defineHandlers<TContract>(contract, handlers): WorkerInferConsumerHandlers<TContract>;
516
517
  ```
517
518
 
518
- Defined in: worker/dist/index.d.mts:493
519
+ Defined in: worker/dist/index.d.mts:643
519
520
 
520
521
  Define multiple type-safe handlers for consumers in a contract.
521
522
 
@@ -526,18 +527,18 @@ providing explicit error handling and better control over retry behavior.
526
527
 
527
528
  | Type Parameter | Description |
528
529
  | ------ | ------ |
529
- | `TContract` *extends* `ContractDefinition` | The contract definition type |
530
+ | `TContract` *extends* `ContractDefinitionInput` | The contract definition type |
530
531
 
531
532
  #### Parameters
532
533
 
533
534
  | Parameter | Type | Description |
534
535
  | ------ | ------ | ------ |
535
536
  | `contract` | `TContract` | The contract definition containing the consumers |
536
- | `handlers` | [`WorkerInferSafeConsumerHandlers`](#workerinfersafeconsumerhandlers)&lt;`TContract`&gt; | An object with handler functions for each consumer |
537
+ | `handlers` | `WorkerInferConsumerHandlers`&lt;`TContract`&gt; | An object with handler functions for each consumer |
537
538
 
538
539
  #### Returns
539
540
 
540
- [`WorkerInferSafeConsumerHandlers`](#workerinfersafeconsumerhandlers)&lt;`TContract`&gt;
541
+ `WorkerInferConsumerHandlers`&lt;`TContract`&gt;
541
542
 
542
543
  A type-safe handlers object that can be used with TypedAmqpWorker
543
544
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amqp-contract/worker-nestjs",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "NestJS integration for @amqp-contract/worker",
5
5
  "keywords": [
6
6
  "amqp",
@@ -52,8 +52,8 @@
52
52
  "docs"
53
53
  ],
54
54
  "dependencies": {
55
- "@amqp-contract/contract": "0.12.0",
56
- "@amqp-contract/worker": "0.12.0"
55
+ "@amqp-contract/contract": "0.14.0",
56
+ "@amqp-contract/worker": "0.14.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@nestjs/common": "11.1.12",
@@ -72,7 +72,7 @@
72
72
  "typescript": "5.9.3",
73
73
  "vitest": "4.0.17",
74
74
  "zod": "4.3.5",
75
- "@amqp-contract/testing": "0.12.0",
75
+ "@amqp-contract/testing": "0.14.0",
76
76
  "@amqp-contract/tsconfig": "0.1.0",
77
77
  "@amqp-contract/typedoc": "0.1.0"
78
78
  },