@amqp-contract/client-nestjs 0.2.0 → 0.2.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/README.md CHANGED
@@ -1,6 +1,14 @@
1
1
  # @amqp-contract/client-nestjs
2
2
 
3
- NestJS integration for [@amqp-contract/client](../client). Type-safe AMQP message publishing with automatic lifecycle management.
3
+ **NestJS integration for [@amqp-contract/client](../client). Type-safe AMQP message publishing with automatic lifecycle management.**
4
+
5
+ [![CI](https://github.com/btravers/amqp-contract/actions/workflows/ci.yml/badge.svg)](https://github.com/btravers/amqp-contract/actions/workflows/ci.yml)
6
+ [![npm version](https://img.shields.io/npm/v/@amqp-contract/client-nestjs.svg?logo=npm)](https://www.npmjs.com/package/@amqp-contract/client-nestjs)
7
+ [![npm downloads](https://img.shields.io/npm/dm/@amqp-contract/client-nestjs.svg)](https://www.npmjs.com/package/@amqp-contract/client-nestjs)
8
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue?logo=typescript)](https://www.typescriptlang.org/)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
+
11
+ 📖 **[Full documentation →](https://btravers.github.io/amqp-contract/guide/client-nestjs-usage)**
4
12
 
5
13
  ## Installation
6
14
 
@@ -39,6 +47,10 @@ export class OrderService {
39
47
 
40
48
  The client automatically connects when the module initializes and cleans up on shutdown.
41
49
 
50
+ ## Documentation
51
+
52
+ 📖 **[Read the full documentation →](https://btravers.github.io/amqp-contract)**
53
+
42
54
  ## License
43
55
 
44
56
  MIT
package/dist/index.cjs CHANGED
@@ -785,30 +785,53 @@ let AmqpClientService = class AmqpClientService$1 {
785
785
  this.options = options;
786
786
  }
787
787
  /**
788
- * Initialize the client when the NestJS module starts
788
+ * Initialize the AMQP client when the NestJS module starts.
789
+ *
790
+ * This lifecycle hook automatically creates and initializes the client
791
+ * when the NestJS application starts up. The connection will be established
792
+ * in the background with automatic reconnection handling.
789
793
  */
790
794
  async onModuleInit() {
791
- this.client = await _amqp_contract_client.TypedAmqpClient.create({
792
- contract: this.options.contract,
793
- connection: this.options.connection
794
- });
795
+ this.client = _amqp_contract_client.TypedAmqpClient.create(this.options);
795
796
  }
796
797
  /**
797
- * Close the client when the NestJS module is destroyed
798
+ * Close the AMQP client when the NestJS module is destroyed.
799
+ *
800
+ * This lifecycle hook ensures proper cleanup of resources when the
801
+ * NestJS application shuts down, gracefully closing the connection
802
+ * and cleaning up all consumers.
798
803
  */
799
804
  async onModuleDestroy() {
800
805
  if (this.client) {
801
- await this.client.close();
806
+ await this.client.close().resultToPromise();
802
807
  this.client = null;
803
808
  }
804
809
  }
805
810
  /**
806
- * Publish a message using a defined publisher
807
- * This method provides type-safe message publishing with explicit error handling
808
- * Returns Result<boolean, ClientError> for runtime errors
811
+ * Publish a message using a contract-defined publisher.
812
+ *
813
+ * This method provides type-safe message publishing with automatic validation
814
+ * and explicit error handling through the Result type.
815
+ *
816
+ * @param publisherName - The name of the publisher from the contract
817
+ * @param message - The message payload (type-checked against the contract)
818
+ * @param options - Optional AMQP publish options (e.g., persistence, headers)
819
+ * @returns A Future that resolves to a Result indicating success or failure
820
+ *
821
+ * @example
822
+ * ```typescript
823
+ * const result = await this.amqpClient.publish('orderCreated', {
824
+ * orderId: '123',
825
+ * amount: 99.99
826
+ * }).resultToPromise();
827
+ *
828
+ * if (result.isError()) {
829
+ * console.error('Publish failed:', result.error);
830
+ * }
831
+ * ```
809
832
  */
810
833
  publish(publisherName, message, options) {
811
- if (!this.client) return import_Boxed.Result.Error(new _amqp_contract_client.TechnicalError("Client not initialized. Ensure the module has been initialized before publishing."));
834
+ if (!this.client) return import_Boxed.Future.value(import_Boxed.Result.Error(new _amqp_contract_client.TechnicalError("Client not initialized. Ensure the module has been initialized before publishing.")));
812
835
  return this.client.publish(publisherName, message, options);
813
836
  }
814
837
  };
package/dist/index.d.cts CHANGED
@@ -1,40 +1,127 @@
1
1
  import * as _nestjs_common0 from "@nestjs/common";
2
2
  import { OnModuleDestroy, OnModuleInit } from "@nestjs/common";
3
+ import { ContractDefinition, InferPublisherNames } from "@amqp-contract/contract";
3
4
  import { Options } from "amqplib";
4
- import { Result } from "@swan-io/boxed";
5
- import { ClientInferPublisherInput, ContractDefinition, InferPublisherNames } from "@amqp-contract/contract";
6
- import { MessageValidationError, PublishOptions, TechnicalError } from "@amqp-contract/client";
5
+ import { Future, Result } from "@swan-io/boxed";
6
+ import { AmqpConnectionManagerOptions, ConnectionUrl } from "amqp-connection-manager";
7
+ import { ClientInferPublisherInput, MessageValidationError, TechnicalError } from "@amqp-contract/client";
7
8
 
8
9
  //#region src/client.service.d.ts
10
+
9
11
  /**
10
- * Options for creating a NestJS client service
12
+ * Configuration options for the AMQP client NestJS module.
13
+ *
14
+ * @typeParam TContract - The contract definition type
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const options: AmqpClientModuleOptions<typeof contract> = {
19
+ * contract: myContract,
20
+ * urls: ['amqp://localhost'],
21
+ * connectionOptions: {
22
+ * heartbeatIntervalInSeconds: 30
23
+ * }
24
+ * };
25
+ * ```
11
26
  */
12
27
  interface AmqpClientModuleOptions<TContract extends ContractDefinition> {
28
+ /** The AMQP contract definition specifying publishers and their message schemas */
13
29
  contract: TContract;
14
- connection: string | Options.Connect;
30
+ /** AMQP broker URL(s). Multiple URLs provide failover support */
31
+ urls: ConnectionUrl[];
32
+ /** Optional connection configuration (heartbeat, reconnect settings, etc.) */
33
+ connectionOptions?: AmqpConnectionManagerOptions | undefined;
15
34
  }
16
35
  /**
17
- * Type-safe AMQP client service for NestJS
18
- * This service integrates @amqp-contract/client with NestJS lifecycle
36
+ * Type-safe AMQP client service for NestJS applications.
37
+ *
38
+ * This service wraps {@link TypedAmqpClient} and integrates it with the NestJS
39
+ * lifecycle, automatically initializing the connection on module init and
40
+ * cleaning up resources on module destroy.
41
+ *
42
+ * @typeParam TContract - The contract definition type
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // In your module
47
+ * import { AmqpClientModule } from '@amqp-contract/client-nestjs';
48
+ *
49
+ * @Module({
50
+ * imports: [
51
+ * AmqpClientModule.forRoot({
52
+ * contract: myContract,
53
+ * urls: ['amqp://localhost']
54
+ * })
55
+ * ]
56
+ * })
57
+ * export class AppModule {}
58
+ *
59
+ * // In your service
60
+ * import { AmqpClientService } from '@amqp-contract/client-nestjs';
61
+ *
62
+ * @Injectable()
63
+ * export class OrderService {
64
+ * constructor(
65
+ * private readonly amqpClient: AmqpClientService<typeof myContract>
66
+ * ) {}
67
+ *
68
+ * async createOrder(order: Order) {
69
+ * const result = await this.amqpClient.publish('orderCreated', {
70
+ * orderId: order.id,
71
+ * amount: order.total
72
+ * }).resultToPromise();
73
+ *
74
+ * if (result.isError()) {
75
+ * throw new Error('Failed to publish order event');
76
+ * }
77
+ * }
78
+ * }
79
+ * ```
19
80
  */
20
81
  declare class AmqpClientService<TContract extends ContractDefinition> implements OnModuleInit, OnModuleDestroy {
21
82
  private readonly options;
22
83
  private client;
23
84
  constructor(options: AmqpClientModuleOptions<TContract>);
24
85
  /**
25
- * Initialize the client when the NestJS module starts
86
+ * Initialize the AMQP client when the NestJS module starts.
87
+ *
88
+ * This lifecycle hook automatically creates and initializes the client
89
+ * when the NestJS application starts up. The connection will be established
90
+ * in the background with automatic reconnection handling.
26
91
  */
27
92
  onModuleInit(): Promise<void>;
28
93
  /**
29
- * Close the client when the NestJS module is destroyed
94
+ * Close the AMQP client when the NestJS module is destroyed.
95
+ *
96
+ * This lifecycle hook ensures proper cleanup of resources when the
97
+ * NestJS application shuts down, gracefully closing the connection
98
+ * and cleaning up all consumers.
30
99
  */
31
100
  onModuleDestroy(): Promise<void>;
32
101
  /**
33
- * Publish a message using a defined publisher
34
- * This method provides type-safe message publishing with explicit error handling
35
- * Returns Result<boolean, ClientError> for runtime errors
102
+ * Publish a message using a contract-defined publisher.
103
+ *
104
+ * This method provides type-safe message publishing with automatic validation
105
+ * and explicit error handling through the Result type.
106
+ *
107
+ * @param publisherName - The name of the publisher from the contract
108
+ * @param message - The message payload (type-checked against the contract)
109
+ * @param options - Optional AMQP publish options (e.g., persistence, headers)
110
+ * @returns A Future that resolves to a Result indicating success or failure
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const result = await this.amqpClient.publish('orderCreated', {
115
+ * orderId: '123',
116
+ * amount: 99.99
117
+ * }).resultToPromise();
118
+ *
119
+ * if (result.isError()) {
120
+ * console.error('Publish failed:', result.error);
121
+ * }
122
+ * ```
36
123
  */
37
- publish<TName extends InferPublisherNames<TContract>>(publisherName: TName, message: ClientInferPublisherInput<TContract, TName>, options?: PublishOptions): Result<boolean, TechnicalError | MessageValidationError>;
124
+ publish<TName extends InferPublisherNames<TContract>>(publisherName: TName, message: ClientInferPublisherInput<TContract, TName>, options?: Options.Publish): Future<Result<boolean, TechnicalError | MessageValidationError>>;
38
125
  }
39
126
  //#endregion
40
127
  //#region src/client.module-definition.d.ts
@@ -42,7 +129,7 @@ declare class AmqpClientService<TContract extends ContractDefinition> implements
42
129
  * ConfigurableModuleBuilder for AMQP client module
43
130
  * This creates forRoot and forRootAsync methods automatically
44
131
  */
45
- declare const ConfigurableModuleClass: _nestjs_common0.ConfigurableModuleCls<AmqpClientModuleOptions<any>, "forRoot", "create", {}>, MODULE_OPTIONS_TOKEN: string | symbol;
132
+ declare const ConfigurableModuleClass: _nestjs_common0.ConfigurableModuleCls<AmqpClientModuleOptions<ContractDefinition>, "forRoot", "create", {}>, MODULE_OPTIONS_TOKEN: string | symbol;
46
133
  //#endregion
47
134
  //#region src/client.module.d.ts
48
135
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/client.service.ts","../src/client.module-definition.ts","../src/client.module.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AAmBiB,UAAA,uBAAuB,CAAA,kBAAmB,kBAAnB,CAAA,CAAA;EAAmB,QAAA,EAC/C,SAD+C;EAC/C,UAAA,EAAA,MAAA,GACW,OAAA,CAAQ,OADnB;;;AAQZ;;;AAQ8B,cAPjB,iBAOiB,CAAA,kBAPmB,kBAOnB,CAAA,YANjB,YAMiB,EANH,eAMG,CAAA;EAMN,iBAAA,OAAA;EAUG,QAAA,MAAA;EAYiB,WAAA,CAAA,OAAA,EA5Bd,uBA4Bc,CA5BU,SA4BV,CAAA;EAApB;;;EAE0B,YAAA,CAAA,CAAA,EAxB1B,OAwB0B,CAAA,IAAA,CAAA;EAArC;;;EAEyB,eAAA,CAAA,CAAA,EAhBX,OAgBW,CAAA,IAAA,CAAA;EAAjC;;;;;wBAJmB,oBAAoB,2BACzB,gBACN,0BAA0B,WAAW,kBACpC,iBACT,gBAAgB,iBAAiB;;;;;;;;cC7DvB,yBAAuB,eAAA,CAAA,sBAAA;;;;;;;;cCMzB,gBAAA,SAAyB,uBAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/client.service.ts","../src/client.module-definition.ts","../src/client.module.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA6BA;;;;;;AAuDA;;;;;;;AA2DwB,UAlHP,uBAkHO,CAAA,kBAlHmC,kBAkHnC,CAAA,CAAA;EACL;EACoB,QAAA,EAlH3B,SAkH2B;EAAW;EAArC,IAAA,EAhHL,aAgHK,EAAA;EACC;EACc,iBAAA,CAAA,EAhHN,4BAgHM,GAAA,SAAA;;;;;;;;;;AC3I5B;;;;;;;;;ACCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cF4Ea,oCAAoC,+BACpC,cAAc;;;uBAMG,wBAAwB;;;;;;;;kBAU9B;;;;;;;;qBAWG;;;;;;;;;;;;;;;;;;;;;;;;wBA8BH,oBAAoB,2BACzB,gBACN,0BAA0B,WAAW,kBACpC,OAAA,CAAQ,UACjB,OAAO,gBAAgB,iBAAiB;;;;;;;;cC3I9B,yBAAuB,eAAA,CAAA,sBAAA,wBAAA;;;;;;;;cCKzB,gBAAA,SAAyB,uBAAA"}
package/dist/index.d.mts CHANGED
@@ -1,40 +1,127 @@
1
1
  import * as _nestjs_common0 from "@nestjs/common";
2
2
  import { OnModuleDestroy, OnModuleInit } from "@nestjs/common";
3
- import { MessageValidationError, PublishOptions, TechnicalError } from "@amqp-contract/client";
3
+ import { ClientInferPublisherInput, MessageValidationError, TechnicalError } from "@amqp-contract/client";
4
+ import { ContractDefinition, InferPublisherNames } from "@amqp-contract/contract";
4
5
  import { Options } from "amqplib";
5
- import { Result } from "@swan-io/boxed";
6
- import { ClientInferPublisherInput, ContractDefinition, InferPublisherNames } from "@amqp-contract/contract";
6
+ import { Future, Result } from "@swan-io/boxed";
7
+ import { AmqpConnectionManagerOptions, ConnectionUrl } from "amqp-connection-manager";
7
8
 
8
9
  //#region src/client.service.d.ts
10
+
9
11
  /**
10
- * Options for creating a NestJS client service
12
+ * Configuration options for the AMQP client NestJS module.
13
+ *
14
+ * @typeParam TContract - The contract definition type
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const options: AmqpClientModuleOptions<typeof contract> = {
19
+ * contract: myContract,
20
+ * urls: ['amqp://localhost'],
21
+ * connectionOptions: {
22
+ * heartbeatIntervalInSeconds: 30
23
+ * }
24
+ * };
25
+ * ```
11
26
  */
12
27
  interface AmqpClientModuleOptions<TContract extends ContractDefinition> {
28
+ /** The AMQP contract definition specifying publishers and their message schemas */
13
29
  contract: TContract;
14
- connection: string | Options.Connect;
30
+ /** AMQP broker URL(s). Multiple URLs provide failover support */
31
+ urls: ConnectionUrl[];
32
+ /** Optional connection configuration (heartbeat, reconnect settings, etc.) */
33
+ connectionOptions?: AmqpConnectionManagerOptions | undefined;
15
34
  }
16
35
  /**
17
- * Type-safe AMQP client service for NestJS
18
- * This service integrates @amqp-contract/client with NestJS lifecycle
36
+ * Type-safe AMQP client service for NestJS applications.
37
+ *
38
+ * This service wraps {@link TypedAmqpClient} and integrates it with the NestJS
39
+ * lifecycle, automatically initializing the connection on module init and
40
+ * cleaning up resources on module destroy.
41
+ *
42
+ * @typeParam TContract - The contract definition type
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // In your module
47
+ * import { AmqpClientModule } from '@amqp-contract/client-nestjs';
48
+ *
49
+ * @Module({
50
+ * imports: [
51
+ * AmqpClientModule.forRoot({
52
+ * contract: myContract,
53
+ * urls: ['amqp://localhost']
54
+ * })
55
+ * ]
56
+ * })
57
+ * export class AppModule {}
58
+ *
59
+ * // In your service
60
+ * import { AmqpClientService } from '@amqp-contract/client-nestjs';
61
+ *
62
+ * @Injectable()
63
+ * export class OrderService {
64
+ * constructor(
65
+ * private readonly amqpClient: AmqpClientService<typeof myContract>
66
+ * ) {}
67
+ *
68
+ * async createOrder(order: Order) {
69
+ * const result = await this.amqpClient.publish('orderCreated', {
70
+ * orderId: order.id,
71
+ * amount: order.total
72
+ * }).resultToPromise();
73
+ *
74
+ * if (result.isError()) {
75
+ * throw new Error('Failed to publish order event');
76
+ * }
77
+ * }
78
+ * }
79
+ * ```
19
80
  */
20
81
  declare class AmqpClientService<TContract extends ContractDefinition> implements OnModuleInit, OnModuleDestroy {
21
82
  private readonly options;
22
83
  private client;
23
84
  constructor(options: AmqpClientModuleOptions<TContract>);
24
85
  /**
25
- * Initialize the client when the NestJS module starts
86
+ * Initialize the AMQP client when the NestJS module starts.
87
+ *
88
+ * This lifecycle hook automatically creates and initializes the client
89
+ * when the NestJS application starts up. The connection will be established
90
+ * in the background with automatic reconnection handling.
26
91
  */
27
92
  onModuleInit(): Promise<void>;
28
93
  /**
29
- * Close the client when the NestJS module is destroyed
94
+ * Close the AMQP client when the NestJS module is destroyed.
95
+ *
96
+ * This lifecycle hook ensures proper cleanup of resources when the
97
+ * NestJS application shuts down, gracefully closing the connection
98
+ * and cleaning up all consumers.
30
99
  */
31
100
  onModuleDestroy(): Promise<void>;
32
101
  /**
33
- * Publish a message using a defined publisher
34
- * This method provides type-safe message publishing with explicit error handling
35
- * Returns Result<boolean, ClientError> for runtime errors
102
+ * Publish a message using a contract-defined publisher.
103
+ *
104
+ * This method provides type-safe message publishing with automatic validation
105
+ * and explicit error handling through the Result type.
106
+ *
107
+ * @param publisherName - The name of the publisher from the contract
108
+ * @param message - The message payload (type-checked against the contract)
109
+ * @param options - Optional AMQP publish options (e.g., persistence, headers)
110
+ * @returns A Future that resolves to a Result indicating success or failure
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const result = await this.amqpClient.publish('orderCreated', {
115
+ * orderId: '123',
116
+ * amount: 99.99
117
+ * }).resultToPromise();
118
+ *
119
+ * if (result.isError()) {
120
+ * console.error('Publish failed:', result.error);
121
+ * }
122
+ * ```
36
123
  */
37
- publish<TName extends InferPublisherNames<TContract>>(publisherName: TName, message: ClientInferPublisherInput<TContract, TName>, options?: PublishOptions): Result<boolean, TechnicalError | MessageValidationError>;
124
+ publish<TName extends InferPublisherNames<TContract>>(publisherName: TName, message: ClientInferPublisherInput<TContract, TName>, options?: Options.Publish): Future<Result<boolean, TechnicalError | MessageValidationError>>;
38
125
  }
39
126
  //#endregion
40
127
  //#region src/client.module-definition.d.ts
@@ -42,7 +129,7 @@ declare class AmqpClientService<TContract extends ContractDefinition> implements
42
129
  * ConfigurableModuleBuilder for AMQP client module
43
130
  * This creates forRoot and forRootAsync methods automatically
44
131
  */
45
- declare const ConfigurableModuleClass: _nestjs_common0.ConfigurableModuleCls<AmqpClientModuleOptions<any>, "forRoot", "create", {}>, MODULE_OPTIONS_TOKEN: string | symbol;
132
+ declare const ConfigurableModuleClass: _nestjs_common0.ConfigurableModuleCls<AmqpClientModuleOptions<ContractDefinition>, "forRoot", "create", {}>, MODULE_OPTIONS_TOKEN: string | symbol;
46
133
  //#endregion
47
134
  //#region src/client.module.d.ts
48
135
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.service.ts","../src/client.module-definition.ts","../src/client.module.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;AAmBiB,UAAA,uBAAuB,CAAA,kBAAmB,kBAAnB,CAAA,CAAA;EAAmB,QAAA,EAC/C,SAD+C;EAC/C,UAAA,EAAA,MAAA,GACW,OAAA,CAAQ,OADnB;;;AAQZ;;;AAQ8B,cAPjB,iBAOiB,CAAA,kBAPmB,kBAOnB,CAAA,YANjB,YAMiB,EANH,eAMG,CAAA;EAMN,iBAAA,OAAA;EAUG,QAAA,MAAA;EAYiB,WAAA,CAAA,OAAA,EA5Bd,uBA4Bc,CA5BU,SA4BV,CAAA;EAApB;;;EAE0B,YAAA,CAAA,CAAA,EAxB1B,OAwB0B,CAAA,IAAA,CAAA;EAArC;;;EAEyB,eAAA,CAAA,CAAA,EAhBX,OAgBW,CAAA,IAAA,CAAA;EAAjC;;;;;wBAJmB,oBAAoB,2BACzB,gBACN,0BAA0B,WAAW,kBACpC,iBACT,gBAAgB,iBAAiB;;;;;;;;cC7DvB,yBAAuB,eAAA,CAAA,sBAAA;;;;;;;;cCMzB,gBAAA,SAAyB,uBAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/client.service.ts","../src/client.module-definition.ts","../src/client.module.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;AA6BA;;;;;;AAuDA;;;;;;;AA2DwB,UAlHP,uBAkHO,CAAA,kBAlHmC,kBAkHnC,CAAA,CAAA;EACL;EACoB,QAAA,EAlH3B,SAkH2B;EAAW;EAArC,IAAA,EAhHL,aAgHK,EAAA;EACC;EACc,iBAAA,CAAA,EAhHN,4BAgHM,GAAA,SAAA;;;;;;;;;;AC3I5B;;;;;;;;;ACCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cF4Ea,oCAAoC,+BACpC,cAAc;;;uBAMG,wBAAwB;;;;;;;;kBAU9B;;;;;;;;qBAWG;;;;;;;;;;;;;;;;;;;;;;;;wBA8BH,oBAAoB,2BACzB,gBACN,0BAA0B,WAAW,kBACpC,OAAA,CAAQ,UACjB,OAAO,gBAAgB,iBAAiB;;;;;;;;cC3I9B,yBAAuB,eAAA,CAAA,sBAAA,wBAAA;;;;;;;;cCKzB,gBAAA,SAAyB,uBAAA"}
package/dist/index.mjs CHANGED
@@ -785,30 +785,53 @@ let AmqpClientService = class AmqpClientService$1 {
785
785
  this.options = options;
786
786
  }
787
787
  /**
788
- * Initialize the client when the NestJS module starts
788
+ * Initialize the AMQP client when the NestJS module starts.
789
+ *
790
+ * This lifecycle hook automatically creates and initializes the client
791
+ * when the NestJS application starts up. The connection will be established
792
+ * in the background with automatic reconnection handling.
789
793
  */
790
794
  async onModuleInit() {
791
- this.client = await TypedAmqpClient.create({
792
- contract: this.options.contract,
793
- connection: this.options.connection
794
- });
795
+ this.client = TypedAmqpClient.create(this.options);
795
796
  }
796
797
  /**
797
- * Close the client when the NestJS module is destroyed
798
+ * Close the AMQP client when the NestJS module is destroyed.
799
+ *
800
+ * This lifecycle hook ensures proper cleanup of resources when the
801
+ * NestJS application shuts down, gracefully closing the connection
802
+ * and cleaning up all consumers.
798
803
  */
799
804
  async onModuleDestroy() {
800
805
  if (this.client) {
801
- await this.client.close();
806
+ await this.client.close().resultToPromise();
802
807
  this.client = null;
803
808
  }
804
809
  }
805
810
  /**
806
- * Publish a message using a defined publisher
807
- * This method provides type-safe message publishing with explicit error handling
808
- * Returns Result<boolean, ClientError> for runtime errors
811
+ * Publish a message using a contract-defined publisher.
812
+ *
813
+ * This method provides type-safe message publishing with automatic validation
814
+ * and explicit error handling through the Result type.
815
+ *
816
+ * @param publisherName - The name of the publisher from the contract
817
+ * @param message - The message payload (type-checked against the contract)
818
+ * @param options - Optional AMQP publish options (e.g., persistence, headers)
819
+ * @returns A Future that resolves to a Result indicating success or failure
820
+ *
821
+ * @example
822
+ * ```typescript
823
+ * const result = await this.amqpClient.publish('orderCreated', {
824
+ * orderId: '123',
825
+ * amount: 99.99
826
+ * }).resultToPromise();
827
+ *
828
+ * if (result.isError()) {
829
+ * console.error('Publish failed:', result.error);
830
+ * }
831
+ * ```
809
832
  */
810
833
  publish(publisherName, message, options) {
811
- if (!this.client) return import_Boxed.Result.Error(new TechnicalError("Client not initialized. Ensure the module has been initialized before publishing."));
834
+ if (!this.client) return import_Boxed.Future.value(import_Boxed.Result.Error(new TechnicalError("Client not initialized. Ensure the module has been initialized before publishing.")));
812
835
  return this.client.publish(publisherName, message, options);
813
836
  }
814
837
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["t","n","r","i","AmqpClientService","options: AmqpClientModuleOptions<TContract>","Result","AmqpClientModule"],"sources":["../src/client.module-definition.ts","../../../node_modules/.pnpm/@swan-io+boxed@3.2.1_typescript@5.9.3/node_modules/@swan-io/boxed/dist/Boxed.js","../src/client.service.ts","../src/client.module.ts"],"sourcesContent":["import { ConfigurableModuleBuilder } from \"@nestjs/common\";\nimport type { AmqpClientModuleOptions } from \"./client.service.js\";\n\n/**\n * ConfigurableModuleBuilder for AMQP client module\n * This creates forRoot and forRootAsync methods automatically\n */\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n AmqpClientModuleOptions<any>\n>()\n .setClassMethodName(\"forRoot\")\n .build();\n","var t=function(t){return Object.keys(t)},n=function(t){return Object.values(t)},r=Object.prototype.hasOwnProperty,e={__proto__:null,fromEntries:Object.fromEntries,entries:function(t){return Object.entries(t)},keys:t,values:n,fromOptional:function(t){var n={};for(var e in t)if(r.call(t,e)){var u=t[e];if(void 0===u)continue;u.isSome()&&(n[e]=u.get())}return n}},u=new WeakMap,o=\"function\"==typeof WeakRef?WeakRef:/*#__PURE__*/function(){function t(t){u.set(this,t)}return t.prototype.deref=function(){return u.get(this)},t}(),i=function(){var t=new Map,n=\"function\"==typeof FinalizationRegistry?new FinalizationRegistry(function(n){t.delete(n)}):void 0;return{set:function(r,e){t.set(r,new o(e)),void 0!==n&&n.register(e,r)},get:function(n){var r=t.get(n);if(void 0!==r)return r.deref()}}},a=Symbol.for(\"__boxed_type__\"),c=function(t,n){for(var r=Math.min(t.length,n.length),e=Array(r),u=-1;++u<r;)e[u]=[t[u],n[u]];return e},f=i(),s=/*#__PURE__*/function(){function t(){}t.fromPredicate=function(t,n){return n(t)?p.Some(t):v};var n=t.prototype;return n.map=function(t){return this===v?this:p.Some(t(this.value))},n.flatMap=function(t){return this===v?this:t(this.value)},n.filter=function(t){return this===v||t(this.value)?this:v},n.get=function(){return this.value},n.getWithDefault=function(t){return this===v?t:this.value},n.getOr=function(t){return this===v?t:this.value},n.orElse=function(t){return this===v?t:this},n.mapOr=function(t,n){return this===v?t:n(this.value)},n.match=function(t){return this===v?t.None():t.Some(this.value)},n.tap=function(t){return t(this),this},n.tapSome=function(t){return this===v||t(this.value),this},n.toUndefined=function(){if(this!==v)return this.value},n.toNull=function(){return this===v?null:this.value},n.toResult=function(t){return this.match({Some:function(t){return k.Ok(t)},None:function(){return k.Error(t)}})},n.isSome=function(){return this!==v},n.isNone=function(){return this===v},n.toJSON=function(){return this.match({None:function(){var t;return(t={})[a]=\"Option\",t.tag=\"None\",t},Some:function(t){var n;return(n={})[a]=\"Option\",n.tag=\"Some\",n.value=t,n}})},t}();s.P={Some:function(t){return{tag:\"Some\",value:t}},None:{tag:\"None\"}},s.Some=function(t){var n=f.get(t);if(null==n){var r=Object.create(h);return r.tag=\"Some\",r.value=t,Object.freeze(r),f.set(t,r),r}return n},s.None=function(){return v},s.isOption=function(t){return null!=t&&\"Option\"===t.__boxed_type__},s.fromNullable=function(t){return null==t?v:p.Some(t)},s.fromNull=function(t){return null===t?v:p.Some(t)},s.fromUndefined=function(t){return void 0===t?v:p.Some(t)},s.all=function(t){for(var n,r=t.length,e=p.Some([]),u=0,o=function(){if(u>=r)return{v:e};var n=t[u];null!=n&&(e=e.flatMap(function(t){return n.map(function(n){return t.push(n),t})})),u++};;)if(n=o())return n.v},s.allFromDict=function(r){var e=t(r);return p.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},s.equals=function(t,n,r){return t.isSome()&&n.isSome()?r(t.get(),n.get()):t.tag===n.tag},s.fromJSON=function(t){return\"None\"===t.tag?p.None():p.Some(t.value)},s.prototype.__boxed_type__=\"Option\";var l,h=s.prototype,v=((l=Object.create(h)).tag=\"None\",Object.freeze(l),l),p=s,m=i(),g=i(),O=/*#__PURE__*/function(){function t(){}var n=t.prototype;return n.map=function(t){return\"Ok\"===this.tag?k.Ok(t(this.value)):this},n.mapError=function(t){return\"Ok\"===this.tag?this:k.Error(t(this.error))},n.flatMap=function(t){return\"Ok\"===this.tag?t(this.value):this},n.flatMapError=function(t){return\"Ok\"===this.tag?this:t(this.error)},n.get=function(){return this.value},n.getError=function(){return this.error},n.getWithDefault=function(t){return\"Ok\"===this.tag?this.value:t},n.getOr=function(t){return\"Ok\"===this.tag?this.value:t},n.mapOr=function(t,n){return\"Error\"===this.tag?t:n(this.value)},n.match=function(t){return\"Ok\"===this.tag?t.Ok(this.value):t.Error(this.error)},n.tap=function(t){return t(this),this},n.tapOk=function(t){return\"Ok\"===this.tag&&t(this.value),this},n.tapError=function(t){return\"Error\"===this.tag&&t(this.error),this},n.toOption=function(){return\"Ok\"===this.tag?p.Some(this.value):v},n.isOk=function(){return\"Ok\"===this.tag},n.isError=function(){return\"Error\"===this.tag},n.toJSON=function(){return this.match({Ok:function(t){var n;return(n={})[a]=\"Result\",n.tag=\"Ok\",n.value=t,n},Error:function(t){var n;return(n={})[a]=\"Result\",n.tag=\"Error\",n.error=t,n}})},t}();O.P={Ok:function(t){return{tag:\"Ok\",value:t}},Error:function(t){return{tag:\"Error\",error:t}}},O.Ok=function(t){var n=m.get(t);if(null==n){var r=Object.create(_);return r.tag=\"Ok\",r.value=t,Object.freeze(r),m.set(t,r),r}return n},O.Error=function(t){var n=g.get(t);if(null==n){var r=Object.create(_);return r.tag=\"Error\",r.error=t,Object.freeze(r),g.set(t,r),r}return n},O.isResult=function(t){return null!=t&&\"Result\"===t.__boxed_type__},O.fromExecution=function(t){try{return k.Ok(t())}catch(t){return k.Error(t)}},O.fromPromise=function(t){try{return Promise.resolve(function(n,r){try{var e=Promise.resolve(t).then(function(t){return k.Ok(t)})}catch(t){return r(t)}return e&&e.then?e.then(void 0,r):e}(0,function(t){return k.Error(t)}))}catch(t){return Promise.reject(t)}},O.fromOption=function(t,n){return t.toResult(n)},O.all=function(t){for(var n,r=t.length,e=k.Ok([]),u=0,o=function(){if(u>=r)return{v:e};var n=t[u];null!=n&&(e=e.flatMap(function(t){return n.map(function(n){return t.push(n),t})})),u++};;)if(n=o())return n.v},O.allFromDict=function(r){var e=t(r);return k.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},O.equals=function(t,n,r){return t.tag===n.tag&&(!(!t.isError()||!n.isError())||!(!t.isOk()||!n.isOk())&&r(t.get(),n.get()))},O.fromJSON=function(t){return\"Ok\"===t.tag?k.Ok(t.value):k.Error(t.error)},O.prototype.__boxed_type__=\"Result\";var _=O.prototype,k=O,d=function(t,n){return t===n?0:t>n?1:-1},y={__proto__:null,from:Array.from,of:Array.of,isArray:Array.isArray,findMap:function(t,n){for(var r=-1;++r<t.length;){var e=n(t[r]);if(e.isSome())return e}return p.None()},filterMap:function(t,n){var r=[];return t.forEach(function(t){var e=n(t);e.isSome()&&r.push(e.get())}),r},find:function(t,n){for(var r=-1;++r<t.length;){var e=t[r];if(n(e))return p.Some(e)}return p.None()},findIndex:function(t,n){for(var r=-1;++r<t.length;)if(n(t[r]))return p.Some(r);return p.None()},binarySearchBy:function(t,n,r){if(void 0===r&&(r=d),0===t.length)return-1;for(var e=0,u=t.length-1;;){var o=e+(u-e)/2|0;if(o===e||o===u)return u;var i=r(n,t[o]);if(0===i)return o;i>0?e=o:i<0&&(u=o)}},unzip:function(t){for(var n=t.length,r=Array(n),e=Array(n),u=-1;++u<n;){var o=t[u];void 0!==o&&(r[u]=o[0],e[u]=o[1])}return[r,e]},zip:c},E=i(),b=/*#__PURE__*/function(){function t(){}var n=t.prototype;return n.map=function(t){return this===j||this===D?this:R.Done(t(this.value))},n.flatMap=function(t){return this===j||this===D?this:t(this.value)},n.mapOkToResult=function(t){return this.map(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return n}})})},n.mapErrorToResult=function(t){return this.map(function(n){return n.match({Error:function(n){return t(n)},Ok:function(){return n}})})},n.mapOk=function(t){return this.map(function(n){return n.match({Ok:function(n){return k.Ok(t(n))},Error:function(){return n}})})},n.mapError=function(t){return this.map(function(n){return n.match({Ok:function(){return n},Error:function(n){return k.Error(t(n))}})})},n.flatMapOk=function(t){return this.flatMap(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return R.Done(n)}})})},n.flatMapError=function(t){return this.flatMap(function(n){return n.match({Ok:function(){return R.Done(n)},Error:function(n){return t(n)}})})},n.get=function(){return this.value},n.getWithDefault=function(t){return this===j||this===D?t:this.value},n.getOr=function(t){return this===j||this===D?t:this.value},n.mapOr=function(t,n){return this===j||this===D?t:n(this.value)},n.match=function(t){return this===j?t.NotAsked():this===D?t.Loading():t.Done(this.value)},n.tap=function(t){return t(this),this},n.toOption=function(){return this===j||this===D?p.None():p.Some(this.value)},n.isDone=function(){return this!==j&&this!==D},n.isLoading=function(){return this===D},n.isNotAsked=function(){return this===j},n.toJSON=function(){return this.match({NotAsked:function(){var t;return(t={})[a]=\"AsyncData\",t.tag=\"NotAsked\",t},Loading:function(){var t;return(t={})[a]=\"AsyncData\",t.tag=\"Loading\",t},Done:function(t){var n;return(n={})[a]=\"AsyncData\",n.tag=\"Done\",n.value=t,n}})},t}();b.P={Done:function(t){return{tag:\"Done\",value:t}},NotAsked:{tag:\"NotAsked\"},Loading:{tag:\"Loading\"}},b.Done=function(t){var n=E.get(t);if(null==n){var r=Object.create(N);return r.tag=\"Done\",r.value=t,Object.freeze(r),E.set(t,r),r}return n},b.Loading=function(){return D},b.NotAsked=function(){return j},b.all=function(t){for(var n,r=t.length,e=R.Done([]),u=0,o=function(){if(u>=r)return{v:e};var n=t[u];null!=n&&(e=e.flatMap(function(t){return n.map(function(n){return t.push(n),t})})),u++};;)if(n=o())return n.v},b.allFromDict=function(r){var e=t(r);return R.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},b.equals=function(t,n,r){return\"Done\"===t.tag&&\"Done\"===n.tag?r(t.value,n.value):t.tag===n.tag},b.isAsyncData=function(t){return null!=t&&\"AsyncData\"===t.__boxed_type__},b.fromJSON=function(t){return\"NotAsked\"===t.tag?R.NotAsked():\"Loading\"===t.tag?R.Loading():R.Done(t.value)},b.prototype.__boxed_type__=\"AsyncData\";var S,N=b.prototype,D=((S=Object.create(N)).tag=\"Loading\",Object.freeze(S),S),j=function(){var t=Object.create(N);return t.tag=\"NotAsked\",Object.freeze(t),t}(),R=b,A=/*#__PURE__*/function(){function t(){this._state=void 0,this._state={tag:\"Pending\"}}t.fromPromise=function(t){return P.make(function(n){t.then(function(t){return n(k.Ok(t))},function(t){return n(k.Error(t))})})};var n=t.prototype;return n.onResolve=function(t){var n;\"Pending\"===this._state.tag?(this._state.resolveCallbacks=null!=(n=this._state.resolveCallbacks)?n:[],this._state.resolveCallbacks.push(t)):\"Resolved\"===this._state.tag&&t(this._state.value)},n.onCancel=function(t){var n;\"Pending\"===this._state.tag?(this._state.cancelCallbacks=null!=(n=this._state.cancelCallbacks)?n:[],this._state.cancelCallbacks.push(t)):\"Cancelled\"===this._state.tag&&t()},n.cancel=function(){if(\"Pending\"===this._state.tag){var t=this._state,n=t.cancel,r=t.cancelCallbacks;this._state={tag:\"Cancelled\"},null!=n&&n(),null==r||r.forEach(function(t){return t()})}},n.map=function(t,n){var r=this;void 0===n&&(n=!1);var e=P.make(function(e){if(r.onResolve(function(n){e(t(n))}),n)return function(){r.cancel()}});return this.onCancel(function(){e.cancel()}),e},n.then=function(t){return this.onResolve(t),this},n.flatMap=function(t,n){var r=this;void 0===n&&(n=!1);var e=P.make(function(u){if(r.onResolve(function(n){var r=t(n);r.onResolve(u),r.onCancel(function(){return e.cancel()})}),n)return function(){r.cancel()}});return this.onCancel(function(){e.cancel()}),e},n.tap=function(t){return this.onResolve(t),this},n.tapOk=function(t){return this.onResolve(function(n){n.match({Ok:function(n){return t(n)},Error:function(){}})}),this},n.tapError=function(t){return this.onResolve(function(n){n.match({Ok:function(){},Error:function(n){return t(n)}})}),this},n.mapOkToResult=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return n}})},n)},n.mapErrorToResult=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Error:function(n){return t(n)},Ok:function(){return n}})},n)},n.mapOk=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Ok:function(n){return k.Ok(t(n))},Error:function(){return n}})},n)},n.mapError=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Ok:function(){return n},Error:function(n){return k.Error(t(n))}})},n)},n.flatMapOk=function(t,n){return void 0===n&&(n=!1),this.flatMap(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return P.value(n)}})},n)},n.flatMapError=function(t,n){return void 0===n&&(n=!1),this.flatMap(function(n){return n.match({Ok:function(){return P.value(n)},Error:function(n){return t(n)}})},n)},n.toPromise=function(){var t=this;return new Promise(function(n){t.onResolve(n)})},n.resultToPromise=function(){var t=this;return new Promise(function(n,r){t.onResolve(function(t){t.match({Ok:n,Error:r})})})},t}();A.make=function(t){var n=Object.create(M);return n._state={tag:\"Pending\"},n._state.cancel=t(function(t){if(\"Pending\"===n._state.tag){var r=n._state.resolveCallbacks;n._state={tag:\"Resolved\",value:t},null==r||r.forEach(function(n){return n(t)})}}),n},A.isFuture=function(t){return null!=t&&Object.prototype.isPrototypeOf.call(M,t)},A.value=function(t){var n=Object.create(M);return n._state={tag:\"Resolved\",value:t},n},A.all=function(t,n){void 0===n&&(n=!1);for(var r,e=t.length,u=P.value([]),o=0,i=function(){if(o>=e)return{v:u};var r=t[o];null!=r&&(u=u.flatMap(function(t){return r.map(function(n){return t.push(n),t},n)},n)),o++};;)if(r=i())return r.v},A.allFromDict=function(r){var e=t(r);return P.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},A.wait=function(t){return P.make(function(n){var r=setTimeout(function(){return n()},t);return function(){return clearTimeout(r)}})},A.retry=function(t,n){var r=n.max;return function n(e){return t(e).flatMapError(function(t){return e+1<r?n(e+1):P.value(k.Error(t))})}(0)},A.concurrent=function(t,n){var r=n.concurrency;return P.make(function(n){var e=Array(t.length),u=r-1,o=0;0!==t.length?t.slice(0,r).forEach(function r(i,a){return i().tap(function(i){if(e[a]=i,++o<t.length){var c=t[++u];null!=c&&r(c,u)}else n(e)})}):n([])})};var M=Object.create(null,Object.getOwnPropertyDescriptors(A.prototype)),P=A,x={make:function(){var t;return[P.make(function(n){t=n}),t]}},C=Symbol(\"NOT_COMPUTED\");function z(){return z=Object.assign?Object.assign.bind():function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},z.apply(this,arguments)}var J={__proto__:null,encode:function(t,n){return JSON.stringify(t,function(t,n){return null==n?n:\"string\"==typeof n[a]?z({},n,{__boxed_type__:n[a]}):n},n)},decode:function(t){return JSON.parse(t,function(t,n){return null==n?n:\"Option\"===n.__boxed_type__?p.fromJSON(n):\"Result\"===n.__boxed_type__?k.fromJSON(n):\"AsyncData\"===n.__boxed_type__?R.fromJSON(n):n})}};exports.Array=y,exports.AsyncData=R,exports.Deferred=x,exports.Dict=e,exports.Future=P,exports.Lazy=function(t){var n={contents:C};return{get:function(){return n.contents===C&&(n.contents=t()),n.contents}}},exports.Option=p,exports.Result=k,exports.Serializer=J;\n//# sourceMappingURL=Boxed.js.map\n","import { Inject, Injectable, type OnModuleDestroy, type OnModuleInit } from \"@nestjs/common\";\nimport type { Options } from \"amqplib\";\nimport { Result } from \"@swan-io/boxed\";\nimport type {\n ClientInferPublisherInput,\n ContractDefinition,\n InferPublisherNames,\n} from \"@amqp-contract/contract\";\nimport {\n MessageValidationError,\n TechnicalError,\n TypedAmqpClient,\n type PublishOptions,\n} from \"@amqp-contract/client\";\nimport { MODULE_OPTIONS_TOKEN } from \"./client.module-definition.js\";\n\n/**\n * Options for creating a NestJS client service\n */\nexport interface AmqpClientModuleOptions<TContract extends ContractDefinition> {\n contract: TContract;\n connection: string | Options.Connect;\n}\n\n/**\n * Type-safe AMQP client service for NestJS\n * This service integrates @amqp-contract/client with NestJS lifecycle\n */\n@Injectable()\nexport class AmqpClientService<TContract extends ContractDefinition>\n implements OnModuleInit, OnModuleDestroy\n{\n private client: TypedAmqpClient<TContract> | null = null;\n\n constructor(\n @Inject(MODULE_OPTIONS_TOKEN)\n private readonly options: AmqpClientModuleOptions<TContract>,\n ) {}\n\n /**\n * Initialize the client when the NestJS module starts\n */\n async onModuleInit(): Promise<void> {\n this.client = await TypedAmqpClient.create({\n contract: this.options.contract,\n connection: this.options.connection,\n });\n }\n\n /**\n * Close the client when the NestJS module is destroyed\n */\n async onModuleDestroy(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n }\n }\n\n /**\n * Publish a message using a defined publisher\n * This method provides type-safe message publishing with explicit error handling\n * Returns Result<boolean, ClientError> for runtime errors\n */\n publish<TName extends InferPublisherNames<TContract>>(\n publisherName: TName,\n message: ClientInferPublisherInput<TContract, TName>,\n options?: PublishOptions,\n ): Result<boolean, TechnicalError | MessageValidationError> {\n if (!this.client) {\n return Result.Error(\n new TechnicalError(\n \"Client not initialized. Ensure the module has been initialized before publishing.\",\n ),\n );\n }\n\n return this.client.publish(publisherName, message, options);\n }\n}\n","import { Module } from \"@nestjs/common\";\nimport { ConfigurableModuleClass } from \"./client.module-definition.js\";\nimport { AmqpClientService } from \"./client.service.js\";\n\n/**\n * NestJS module for AMQP client integration\n * This module provides type-safe AMQP client functionality using @amqp-contract/client\n * without relying on NestJS decorators (except for dependency injection)\n */\n@Module({\n providers: [AmqpClientService],\n exports: [AmqpClientService],\n})\nexport class AmqpClientModule extends ConfigurableModuleClass {}\n"],"x_google_ignoreList":[1],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["t","n","r","i","AmqpClientService","options: AmqpClientModuleOptions<TContract>","Future","Result","AmqpClientModule"],"sources":["../src/client.module-definition.ts","../../../node_modules/.pnpm/@swan-io+boxed@3.2.1_typescript@5.9.3/node_modules/@swan-io/boxed/dist/Boxed.js","../src/client.service.ts","../src/client.module.ts"],"sourcesContent":["import { ConfigurableModuleBuilder } from \"@nestjs/common\";\nimport type { ContractDefinition } from \"@amqp-contract/contract\";\nimport type { AmqpClientModuleOptions } from \"./client.service.js\";\n\n/**\n * ConfigurableModuleBuilder for AMQP client module\n * This creates forRoot and forRootAsync methods automatically\n */\nexport const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = new ConfigurableModuleBuilder<\n AmqpClientModuleOptions<ContractDefinition>\n>()\n .setClassMethodName(\"forRoot\")\n .build();\n","var t=function(t){return Object.keys(t)},n=function(t){return Object.values(t)},r=Object.prototype.hasOwnProperty,e={__proto__:null,fromEntries:Object.fromEntries,entries:function(t){return Object.entries(t)},keys:t,values:n,fromOptional:function(t){var n={};for(var e in t)if(r.call(t,e)){var u=t[e];if(void 0===u)continue;u.isSome()&&(n[e]=u.get())}return n}},u=new WeakMap,o=\"function\"==typeof WeakRef?WeakRef:/*#__PURE__*/function(){function t(t){u.set(this,t)}return t.prototype.deref=function(){return u.get(this)},t}(),i=function(){var t=new Map,n=\"function\"==typeof FinalizationRegistry?new FinalizationRegistry(function(n){t.delete(n)}):void 0;return{set:function(r,e){t.set(r,new o(e)),void 0!==n&&n.register(e,r)},get:function(n){var r=t.get(n);if(void 0!==r)return r.deref()}}},a=Symbol.for(\"__boxed_type__\"),c=function(t,n){for(var r=Math.min(t.length,n.length),e=Array(r),u=-1;++u<r;)e[u]=[t[u],n[u]];return e},f=i(),s=/*#__PURE__*/function(){function t(){}t.fromPredicate=function(t,n){return n(t)?p.Some(t):v};var n=t.prototype;return n.map=function(t){return this===v?this:p.Some(t(this.value))},n.flatMap=function(t){return this===v?this:t(this.value)},n.filter=function(t){return this===v||t(this.value)?this:v},n.get=function(){return this.value},n.getWithDefault=function(t){return this===v?t:this.value},n.getOr=function(t){return this===v?t:this.value},n.orElse=function(t){return this===v?t:this},n.mapOr=function(t,n){return this===v?t:n(this.value)},n.match=function(t){return this===v?t.None():t.Some(this.value)},n.tap=function(t){return t(this),this},n.tapSome=function(t){return this===v||t(this.value),this},n.toUndefined=function(){if(this!==v)return this.value},n.toNull=function(){return this===v?null:this.value},n.toResult=function(t){return this.match({Some:function(t){return k.Ok(t)},None:function(){return k.Error(t)}})},n.isSome=function(){return this!==v},n.isNone=function(){return this===v},n.toJSON=function(){return this.match({None:function(){var t;return(t={})[a]=\"Option\",t.tag=\"None\",t},Some:function(t){var n;return(n={})[a]=\"Option\",n.tag=\"Some\",n.value=t,n}})},t}();s.P={Some:function(t){return{tag:\"Some\",value:t}},None:{tag:\"None\"}},s.Some=function(t){var n=f.get(t);if(null==n){var r=Object.create(h);return r.tag=\"Some\",r.value=t,Object.freeze(r),f.set(t,r),r}return n},s.None=function(){return v},s.isOption=function(t){return null!=t&&\"Option\"===t.__boxed_type__},s.fromNullable=function(t){return null==t?v:p.Some(t)},s.fromNull=function(t){return null===t?v:p.Some(t)},s.fromUndefined=function(t){return void 0===t?v:p.Some(t)},s.all=function(t){for(var n,r=t.length,e=p.Some([]),u=0,o=function(){if(u>=r)return{v:e};var n=t[u];null!=n&&(e=e.flatMap(function(t){return n.map(function(n){return t.push(n),t})})),u++};;)if(n=o())return n.v},s.allFromDict=function(r){var e=t(r);return p.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},s.equals=function(t,n,r){return t.isSome()&&n.isSome()?r(t.get(),n.get()):t.tag===n.tag},s.fromJSON=function(t){return\"None\"===t.tag?p.None():p.Some(t.value)},s.prototype.__boxed_type__=\"Option\";var l,h=s.prototype,v=((l=Object.create(h)).tag=\"None\",Object.freeze(l),l),p=s,m=i(),g=i(),O=/*#__PURE__*/function(){function t(){}var n=t.prototype;return n.map=function(t){return\"Ok\"===this.tag?k.Ok(t(this.value)):this},n.mapError=function(t){return\"Ok\"===this.tag?this:k.Error(t(this.error))},n.flatMap=function(t){return\"Ok\"===this.tag?t(this.value):this},n.flatMapError=function(t){return\"Ok\"===this.tag?this:t(this.error)},n.get=function(){return this.value},n.getError=function(){return this.error},n.getWithDefault=function(t){return\"Ok\"===this.tag?this.value:t},n.getOr=function(t){return\"Ok\"===this.tag?this.value:t},n.mapOr=function(t,n){return\"Error\"===this.tag?t:n(this.value)},n.match=function(t){return\"Ok\"===this.tag?t.Ok(this.value):t.Error(this.error)},n.tap=function(t){return t(this),this},n.tapOk=function(t){return\"Ok\"===this.tag&&t(this.value),this},n.tapError=function(t){return\"Error\"===this.tag&&t(this.error),this},n.toOption=function(){return\"Ok\"===this.tag?p.Some(this.value):v},n.isOk=function(){return\"Ok\"===this.tag},n.isError=function(){return\"Error\"===this.tag},n.toJSON=function(){return this.match({Ok:function(t){var n;return(n={})[a]=\"Result\",n.tag=\"Ok\",n.value=t,n},Error:function(t){var n;return(n={})[a]=\"Result\",n.tag=\"Error\",n.error=t,n}})},t}();O.P={Ok:function(t){return{tag:\"Ok\",value:t}},Error:function(t){return{tag:\"Error\",error:t}}},O.Ok=function(t){var n=m.get(t);if(null==n){var r=Object.create(_);return r.tag=\"Ok\",r.value=t,Object.freeze(r),m.set(t,r),r}return n},O.Error=function(t){var n=g.get(t);if(null==n){var r=Object.create(_);return r.tag=\"Error\",r.error=t,Object.freeze(r),g.set(t,r),r}return n},O.isResult=function(t){return null!=t&&\"Result\"===t.__boxed_type__},O.fromExecution=function(t){try{return k.Ok(t())}catch(t){return k.Error(t)}},O.fromPromise=function(t){try{return Promise.resolve(function(n,r){try{var e=Promise.resolve(t).then(function(t){return k.Ok(t)})}catch(t){return r(t)}return e&&e.then?e.then(void 0,r):e}(0,function(t){return k.Error(t)}))}catch(t){return Promise.reject(t)}},O.fromOption=function(t,n){return t.toResult(n)},O.all=function(t){for(var n,r=t.length,e=k.Ok([]),u=0,o=function(){if(u>=r)return{v:e};var n=t[u];null!=n&&(e=e.flatMap(function(t){return n.map(function(n){return t.push(n),t})})),u++};;)if(n=o())return n.v},O.allFromDict=function(r){var e=t(r);return k.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},O.equals=function(t,n,r){return t.tag===n.tag&&(!(!t.isError()||!n.isError())||!(!t.isOk()||!n.isOk())&&r(t.get(),n.get()))},O.fromJSON=function(t){return\"Ok\"===t.tag?k.Ok(t.value):k.Error(t.error)},O.prototype.__boxed_type__=\"Result\";var _=O.prototype,k=O,d=function(t,n){return t===n?0:t>n?1:-1},y={__proto__:null,from:Array.from,of:Array.of,isArray:Array.isArray,findMap:function(t,n){for(var r=-1;++r<t.length;){var e=n(t[r]);if(e.isSome())return e}return p.None()},filterMap:function(t,n){var r=[];return t.forEach(function(t){var e=n(t);e.isSome()&&r.push(e.get())}),r},find:function(t,n){for(var r=-1;++r<t.length;){var e=t[r];if(n(e))return p.Some(e)}return p.None()},findIndex:function(t,n){for(var r=-1;++r<t.length;)if(n(t[r]))return p.Some(r);return p.None()},binarySearchBy:function(t,n,r){if(void 0===r&&(r=d),0===t.length)return-1;for(var e=0,u=t.length-1;;){var o=e+(u-e)/2|0;if(o===e||o===u)return u;var i=r(n,t[o]);if(0===i)return o;i>0?e=o:i<0&&(u=o)}},unzip:function(t){for(var n=t.length,r=Array(n),e=Array(n),u=-1;++u<n;){var o=t[u];void 0!==o&&(r[u]=o[0],e[u]=o[1])}return[r,e]},zip:c},E=i(),b=/*#__PURE__*/function(){function t(){}var n=t.prototype;return n.map=function(t){return this===j||this===D?this:R.Done(t(this.value))},n.flatMap=function(t){return this===j||this===D?this:t(this.value)},n.mapOkToResult=function(t){return this.map(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return n}})})},n.mapErrorToResult=function(t){return this.map(function(n){return n.match({Error:function(n){return t(n)},Ok:function(){return n}})})},n.mapOk=function(t){return this.map(function(n){return n.match({Ok:function(n){return k.Ok(t(n))},Error:function(){return n}})})},n.mapError=function(t){return this.map(function(n){return n.match({Ok:function(){return n},Error:function(n){return k.Error(t(n))}})})},n.flatMapOk=function(t){return this.flatMap(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return R.Done(n)}})})},n.flatMapError=function(t){return this.flatMap(function(n){return n.match({Ok:function(){return R.Done(n)},Error:function(n){return t(n)}})})},n.get=function(){return this.value},n.getWithDefault=function(t){return this===j||this===D?t:this.value},n.getOr=function(t){return this===j||this===D?t:this.value},n.mapOr=function(t,n){return this===j||this===D?t:n(this.value)},n.match=function(t){return this===j?t.NotAsked():this===D?t.Loading():t.Done(this.value)},n.tap=function(t){return t(this),this},n.toOption=function(){return this===j||this===D?p.None():p.Some(this.value)},n.isDone=function(){return this!==j&&this!==D},n.isLoading=function(){return this===D},n.isNotAsked=function(){return this===j},n.toJSON=function(){return this.match({NotAsked:function(){var t;return(t={})[a]=\"AsyncData\",t.tag=\"NotAsked\",t},Loading:function(){var t;return(t={})[a]=\"AsyncData\",t.tag=\"Loading\",t},Done:function(t){var n;return(n={})[a]=\"AsyncData\",n.tag=\"Done\",n.value=t,n}})},t}();b.P={Done:function(t){return{tag:\"Done\",value:t}},NotAsked:{tag:\"NotAsked\"},Loading:{tag:\"Loading\"}},b.Done=function(t){var n=E.get(t);if(null==n){var r=Object.create(N);return r.tag=\"Done\",r.value=t,Object.freeze(r),E.set(t,r),r}return n},b.Loading=function(){return D},b.NotAsked=function(){return j},b.all=function(t){for(var n,r=t.length,e=R.Done([]),u=0,o=function(){if(u>=r)return{v:e};var n=t[u];null!=n&&(e=e.flatMap(function(t){return n.map(function(n){return t.push(n),t})})),u++};;)if(n=o())return n.v},b.allFromDict=function(r){var e=t(r);return R.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},b.equals=function(t,n,r){return\"Done\"===t.tag&&\"Done\"===n.tag?r(t.value,n.value):t.tag===n.tag},b.isAsyncData=function(t){return null!=t&&\"AsyncData\"===t.__boxed_type__},b.fromJSON=function(t){return\"NotAsked\"===t.tag?R.NotAsked():\"Loading\"===t.tag?R.Loading():R.Done(t.value)},b.prototype.__boxed_type__=\"AsyncData\";var S,N=b.prototype,D=((S=Object.create(N)).tag=\"Loading\",Object.freeze(S),S),j=function(){var t=Object.create(N);return t.tag=\"NotAsked\",Object.freeze(t),t}(),R=b,A=/*#__PURE__*/function(){function t(){this._state=void 0,this._state={tag:\"Pending\"}}t.fromPromise=function(t){return P.make(function(n){t.then(function(t){return n(k.Ok(t))},function(t){return n(k.Error(t))})})};var n=t.prototype;return n.onResolve=function(t){var n;\"Pending\"===this._state.tag?(this._state.resolveCallbacks=null!=(n=this._state.resolveCallbacks)?n:[],this._state.resolveCallbacks.push(t)):\"Resolved\"===this._state.tag&&t(this._state.value)},n.onCancel=function(t){var n;\"Pending\"===this._state.tag?(this._state.cancelCallbacks=null!=(n=this._state.cancelCallbacks)?n:[],this._state.cancelCallbacks.push(t)):\"Cancelled\"===this._state.tag&&t()},n.cancel=function(){if(\"Pending\"===this._state.tag){var t=this._state,n=t.cancel,r=t.cancelCallbacks;this._state={tag:\"Cancelled\"},null!=n&&n(),null==r||r.forEach(function(t){return t()})}},n.map=function(t,n){var r=this;void 0===n&&(n=!1);var e=P.make(function(e){if(r.onResolve(function(n){e(t(n))}),n)return function(){r.cancel()}});return this.onCancel(function(){e.cancel()}),e},n.then=function(t){return this.onResolve(t),this},n.flatMap=function(t,n){var r=this;void 0===n&&(n=!1);var e=P.make(function(u){if(r.onResolve(function(n){var r=t(n);r.onResolve(u),r.onCancel(function(){return e.cancel()})}),n)return function(){r.cancel()}});return this.onCancel(function(){e.cancel()}),e},n.tap=function(t){return this.onResolve(t),this},n.tapOk=function(t){return this.onResolve(function(n){n.match({Ok:function(n){return t(n)},Error:function(){}})}),this},n.tapError=function(t){return this.onResolve(function(n){n.match({Ok:function(){},Error:function(n){return t(n)}})}),this},n.mapOkToResult=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return n}})},n)},n.mapErrorToResult=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Error:function(n){return t(n)},Ok:function(){return n}})},n)},n.mapOk=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Ok:function(n){return k.Ok(t(n))},Error:function(){return n}})},n)},n.mapError=function(t,n){return void 0===n&&(n=!1),this.map(function(n){return n.match({Ok:function(){return n},Error:function(n){return k.Error(t(n))}})},n)},n.flatMapOk=function(t,n){return void 0===n&&(n=!1),this.flatMap(function(n){return n.match({Ok:function(n){return t(n)},Error:function(){return P.value(n)}})},n)},n.flatMapError=function(t,n){return void 0===n&&(n=!1),this.flatMap(function(n){return n.match({Ok:function(){return P.value(n)},Error:function(n){return t(n)}})},n)},n.toPromise=function(){var t=this;return new Promise(function(n){t.onResolve(n)})},n.resultToPromise=function(){var t=this;return new Promise(function(n,r){t.onResolve(function(t){t.match({Ok:n,Error:r})})})},t}();A.make=function(t){var n=Object.create(M);return n._state={tag:\"Pending\"},n._state.cancel=t(function(t){if(\"Pending\"===n._state.tag){var r=n._state.resolveCallbacks;n._state={tag:\"Resolved\",value:t},null==r||r.forEach(function(n){return n(t)})}}),n},A.isFuture=function(t){return null!=t&&Object.prototype.isPrototypeOf.call(M,t)},A.value=function(t){var n=Object.create(M);return n._state={tag:\"Resolved\",value:t},n},A.all=function(t,n){void 0===n&&(n=!1);for(var r,e=t.length,u=P.value([]),o=0,i=function(){if(o>=e)return{v:u};var r=t[o];null!=r&&(u=u.flatMap(function(t){return r.map(function(n){return t.push(n),t},n)},n)),o++};;)if(r=i())return r.v},A.allFromDict=function(r){var e=t(r);return P.all(n(r)).map(function(t){return Object.fromEntries(c(e,t))})},A.wait=function(t){return P.make(function(n){var r=setTimeout(function(){return n()},t);return function(){return clearTimeout(r)}})},A.retry=function(t,n){var r=n.max;return function n(e){return t(e).flatMapError(function(t){return e+1<r?n(e+1):P.value(k.Error(t))})}(0)},A.concurrent=function(t,n){var r=n.concurrency;return P.make(function(n){var e=Array(t.length),u=r-1,o=0;0!==t.length?t.slice(0,r).forEach(function r(i,a){return i().tap(function(i){if(e[a]=i,++o<t.length){var c=t[++u];null!=c&&r(c,u)}else n(e)})}):n([])})};var M=Object.create(null,Object.getOwnPropertyDescriptors(A.prototype)),P=A,x={make:function(){var t;return[P.make(function(n){t=n}),t]}},C=Symbol(\"NOT_COMPUTED\");function z(){return z=Object.assign?Object.assign.bind():function(t){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var e in r)Object.prototype.hasOwnProperty.call(r,e)&&(t[e]=r[e])}return t},z.apply(this,arguments)}var J={__proto__:null,encode:function(t,n){return JSON.stringify(t,function(t,n){return null==n?n:\"string\"==typeof n[a]?z({},n,{__boxed_type__:n[a]}):n},n)},decode:function(t){return JSON.parse(t,function(t,n){return null==n?n:\"Option\"===n.__boxed_type__?p.fromJSON(n):\"Result\"===n.__boxed_type__?k.fromJSON(n):\"AsyncData\"===n.__boxed_type__?R.fromJSON(n):n})}};exports.Array=y,exports.AsyncData=R,exports.Deferred=x,exports.Dict=e,exports.Future=P,exports.Lazy=function(t){var n={contents:C};return{get:function(){return n.contents===C&&(n.contents=t()),n.contents}}},exports.Option=p,exports.Result=k,exports.Serializer=J;\n//# sourceMappingURL=Boxed.js.map\n","import { Inject, Injectable, type OnModuleDestroy, type OnModuleInit } from \"@nestjs/common\";\nimport type { Options } from \"amqplib\";\nimport { Future, Result } from \"@swan-io/boxed\";\nimport type { ContractDefinition, InferPublisherNames } from \"@amqp-contract/contract\";\nimport type { AmqpConnectionManagerOptions, ConnectionUrl } from \"amqp-connection-manager\";\nimport {\n MessageValidationError,\n TechnicalError,\n TypedAmqpClient,\n type ClientInferPublisherInput,\n} from \"@amqp-contract/client\";\nimport { MODULE_OPTIONS_TOKEN } from \"./client.module-definition.js\";\n\n/**\n * Configuration options for the AMQP client NestJS module.\n *\n * @typeParam TContract - The contract definition type\n *\n * @example\n * ```typescript\n * const options: AmqpClientModuleOptions<typeof contract> = {\n * contract: myContract,\n * urls: ['amqp://localhost'],\n * connectionOptions: {\n * heartbeatIntervalInSeconds: 30\n * }\n * };\n * ```\n */\nexport interface AmqpClientModuleOptions<TContract extends ContractDefinition> {\n /** The AMQP contract definition specifying publishers and their message schemas */\n contract: 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 client service for NestJS applications.\n *\n * This service wraps {@link TypedAmqpClient} and integrates it with the NestJS\n * lifecycle, automatically initializing the connection 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 { AmqpClientModule } from '@amqp-contract/client-nestjs';\n *\n * @Module({\n * imports: [\n * AmqpClientModule.forRoot({\n * contract: myContract,\n * urls: ['amqp://localhost']\n * })\n * ]\n * })\n * export class AppModule {}\n *\n * // In your service\n * import { AmqpClientService } from '@amqp-contract/client-nestjs';\n *\n * @Injectable()\n * export class OrderService {\n * constructor(\n * private readonly amqpClient: AmqpClientService<typeof myContract>\n * ) {}\n *\n * async createOrder(order: Order) {\n * const result = await this.amqpClient.publish('orderCreated', {\n * orderId: order.id,\n * amount: order.total\n * }).resultToPromise();\n *\n * if (result.isError()) {\n * throw new Error('Failed to publish order event');\n * }\n * }\n * }\n * ```\n */\n@Injectable()\nexport class AmqpClientService<TContract extends ContractDefinition>\n implements OnModuleInit, OnModuleDestroy\n{\n private client: TypedAmqpClient<TContract> | null = null;\n\n constructor(\n @Inject(MODULE_OPTIONS_TOKEN)\n private readonly options: AmqpClientModuleOptions<TContract>,\n ) {}\n\n /**\n * Initialize the AMQP client when the NestJS module starts.\n *\n * This lifecycle hook automatically creates and initializes the client\n * when the NestJS application starts up. The connection will be established\n * in the background with automatic reconnection handling.\n */\n async onModuleInit(): Promise<void> {\n this.client = TypedAmqpClient.create(this.options);\n }\n\n /**\n * Close the AMQP client when the NestJS module is destroyed.\n *\n * This lifecycle hook ensures proper cleanup of resources when the\n * NestJS application shuts down, gracefully closing the connection\n * and cleaning up all consumers.\n */\n async onModuleDestroy(): Promise<void> {\n if (this.client) {\n await this.client.close().resultToPromise();\n this.client = null;\n }\n }\n\n /**\n * Publish a message using a contract-defined publisher.\n *\n * This method provides type-safe message publishing with automatic validation\n * and explicit error handling through the Result type.\n *\n * @param publisherName - The name of the publisher from the contract\n * @param message - The message payload (type-checked against the contract)\n * @param options - Optional AMQP publish options (e.g., persistence, headers)\n * @returns A Future that resolves to a Result indicating success or failure\n *\n * @example\n * ```typescript\n * const result = await this.amqpClient.publish('orderCreated', {\n * orderId: '123',\n * amount: 99.99\n * }).resultToPromise();\n *\n * if (result.isError()) {\n * console.error('Publish failed:', result.error);\n * }\n * ```\n */\n publish<TName extends InferPublisherNames<TContract>>(\n publisherName: TName,\n message: ClientInferPublisherInput<TContract, TName>,\n options?: Options.Publish,\n ): Future<Result<boolean, TechnicalError | MessageValidationError>> {\n if (!this.client) {\n return Future.value(\n Result.Error(\n new TechnicalError(\n \"Client not initialized. Ensure the module has been initialized before publishing.\",\n ),\n ),\n );\n }\n\n return this.client.publish(publisherName, message, options);\n }\n}\n","import { Module } from \"@nestjs/common\";\nimport { ConfigurableModuleClass } from \"./client.module-definition.js\";\nimport { AmqpClientService } from \"./client.service.js\";\n\n/**\n * NestJS module for AMQP client integration\n * This module provides type-safe AMQP client functionality using @amqp-contract/client\n * without relying on NestJS decorators (except for dependency injection)\n */\n@Module({\n providers: [AmqpClientService],\n exports: [AmqpClientService],\n})\nexport class AmqpClientModule extends ConfigurableModuleClass {}\n"],"x_google_ignoreList":[1],"mappings":"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"}
package/docs/index.md ADDED
@@ -0,0 +1,276 @@
1
+ **@amqp-contract/client-nestjs**
2
+
3
+ ***
4
+
5
+ # @amqp-contract/client-nestjs
6
+
7
+ ## Classes
8
+
9
+ ### AmqpClientModule
10
+
11
+ Defined in: [packages/client-nestjs/src/client.module.ts:14](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.module.ts#L14)
12
+
13
+ NestJS module for AMQP client integration
14
+ This module provides type-safe AMQP client functionality using @amqp-contract/client
15
+ without relying on NestJS decorators (except for dependency injection)
16
+
17
+ #### Extends
18
+
19
+ - `ConfigurableModuleClass`
20
+
21
+ #### Indexable
22
+
23
+ ```ts
24
+ [key: string]: any
25
+ ```
26
+
27
+ #### Constructors
28
+
29
+ ##### Constructor
30
+
31
+ ```ts
32
+ new AmqpClientModule(): AmqpClientModule;
33
+ ```
34
+
35
+ Defined in: node\_modules/.pnpm/@nestjs+common@11.1.10\_reflect-metadata@0.2.2\_rxjs@7.8.2/node\_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts:12
36
+
37
+ ###### Returns
38
+
39
+ [`AmqpClientModule`](#amqpclientmodule)
40
+
41
+ ###### Inherited from
42
+
43
+ ```ts
44
+ ConfigurableModuleClass.constructor
45
+ ```
46
+
47
+ #### Properties
48
+
49
+ | Property | Modifier | Type | Inherited from | Defined in |
50
+ | ------ | ------ | ------ | ------ | ------ |
51
+ | <a id="forroot"></a> `forRoot` | `static` | (`options`) => `DynamicModule` | `ConfigurableModuleClass.forRoot` | |
52
+ | <a id="forrootasync"></a> `forRootAsync` | `static` | (`options`) => `DynamicModule` | `ConfigurableModuleClass.forRootAsync` | |
53
+
54
+ ***
55
+
56
+ ### AmqpClientService
57
+
58
+ Defined in: [packages/client-nestjs/src/client.service.ts:86](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L86)
59
+
60
+ Type-safe AMQP client service for NestJS applications.
61
+
62
+ This service wraps TypedAmqpClient and integrates it with the NestJS
63
+ lifecycle, automatically initializing the connection on module init and
64
+ cleaning up resources on module destroy.
65
+
66
+ #### Example
67
+
68
+ ```typescript
69
+ // In your module
70
+ import { AmqpClientModule } from '@amqp-contract/client-nestjs';
71
+
72
+ @Module({
73
+ imports: [
74
+ AmqpClientModule.forRoot({
75
+ contract: myContract,
76
+ urls: ['amqp://localhost']
77
+ })
78
+ ]
79
+ })
80
+ export class AppModule {}
81
+
82
+ // In your service
83
+ import { AmqpClientService } from '@amqp-contract/client-nestjs';
84
+
85
+ @Injectable()
86
+ export class OrderService {
87
+ constructor(
88
+ private readonly amqpClient: AmqpClientService<typeof myContract>
89
+ ) {}
90
+
91
+ async createOrder(order: Order) {
92
+ const result = await this.amqpClient.publish('orderCreated', {
93
+ orderId: order.id,
94
+ amount: order.total
95
+ }).resultToPromise();
96
+
97
+ if (result.isError()) {
98
+ throw new Error('Failed to publish order event');
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ #### Type Parameters
105
+
106
+ | Type Parameter | Description |
107
+ | ------ | ------ |
108
+ | `TContract` *extends* `ContractDefinition` | The contract definition type |
109
+
110
+ #### Implements
111
+
112
+ - `OnModuleInit`
113
+ - `OnModuleDestroy`
114
+
115
+ #### Constructors
116
+
117
+ ##### Constructor
118
+
119
+ ```ts
120
+ new AmqpClientService<TContract>(options): AmqpClientService<TContract>;
121
+ ```
122
+
123
+ Defined in: [packages/client-nestjs/src/client.service.ts:91](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L91)
124
+
125
+ ###### Parameters
126
+
127
+ | Parameter | Type |
128
+ | ------ | ------ |
129
+ | `options` | [`AmqpClientModuleOptions`](#amqpclientmoduleoptions)\<`TContract`\> |
130
+
131
+ ###### Returns
132
+
133
+ [`AmqpClientService`](#amqpclientservice)\<`TContract`\>
134
+
135
+ #### Methods
136
+
137
+ ##### onModuleDestroy()
138
+
139
+ ```ts
140
+ onModuleDestroy(): Promise<void>;
141
+ ```
142
+
143
+ Defined in: [packages/client-nestjs/src/client.service.ts:114](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L114)
144
+
145
+ Close the AMQP client when the NestJS module is destroyed.
146
+
147
+ This lifecycle hook ensures proper cleanup of resources when the
148
+ NestJS application shuts down, gracefully closing the connection
149
+ and cleaning up all consumers.
150
+
151
+ ###### Returns
152
+
153
+ `Promise`\<`void`\>
154
+
155
+ ###### Implementation of
156
+
157
+ ```ts
158
+ OnModuleDestroy.onModuleDestroy
159
+ ```
160
+
161
+ ##### onModuleInit()
162
+
163
+ ```ts
164
+ onModuleInit(): Promise<void>;
165
+ ```
166
+
167
+ Defined in: [packages/client-nestjs/src/client.service.ts:103](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L103)
168
+
169
+ Initialize the AMQP client when the NestJS module starts.
170
+
171
+ This lifecycle hook automatically creates and initializes the client
172
+ when the NestJS application starts up. The connection will be established
173
+ in the background with automatic reconnection handling.
174
+
175
+ ###### Returns
176
+
177
+ `Promise`\<`void`\>
178
+
179
+ ###### Implementation of
180
+
181
+ ```ts
182
+ OnModuleInit.onModuleInit
183
+ ```
184
+
185
+ ##### publish()
186
+
187
+ ```ts
188
+ publish<TName>(
189
+ publisherName,
190
+ message,
191
+ options?): Future<Result<boolean, TechnicalError | MessageValidationError>>;
192
+ ```
193
+
194
+ Defined in: [packages/client-nestjs/src/client.service.ts:144](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L144)
195
+
196
+ Publish a message using a contract-defined publisher.
197
+
198
+ This method provides type-safe message publishing with automatic validation
199
+ and explicit error handling through the Result type.
200
+
201
+ ###### Type Parameters
202
+
203
+ | Type Parameter |
204
+ | ------ |
205
+ | `TName` *extends* `string` \| `number` \| `symbol` |
206
+
207
+ ###### Parameters
208
+
209
+ | Parameter | Type | Description |
210
+ | ------ | ------ | ------ |
211
+ | `publisherName` | `TName` | The name of the publisher from the contract |
212
+ | `message` | `ClientInferPublisherInput`\<`TContract`, `TName`\> | The message payload (type-checked against the contract) |
213
+ | `options?` | `Publish` | Optional AMQP publish options (e.g., persistence, headers) |
214
+
215
+ ###### Returns
216
+
217
+ `Future`\<`Result`\<`boolean`, `TechnicalError` \| `MessageValidationError`\>\>
218
+
219
+ A Future that resolves to a Result indicating success or failure
220
+
221
+ ###### Example
222
+
223
+ ```typescript
224
+ const result = await this.amqpClient.publish('orderCreated', {
225
+ orderId: '123',
226
+ amount: 99.99
227
+ }).resultToPromise();
228
+
229
+ if (result.isError()) {
230
+ console.error('Publish failed:', result.error);
231
+ }
232
+ ```
233
+
234
+ ## Interfaces
235
+
236
+ ### AmqpClientModuleOptions
237
+
238
+ Defined in: [packages/client-nestjs/src/client.service.ts:30](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L30)
239
+
240
+ Configuration options for the AMQP client NestJS module.
241
+
242
+ #### Example
243
+
244
+ ```typescript
245
+ const options: AmqpClientModuleOptions<typeof contract> = {
246
+ contract: myContract,
247
+ urls: ['amqp://localhost'],
248
+ connectionOptions: {
249
+ heartbeatIntervalInSeconds: 30
250
+ }
251
+ };
252
+ ```
253
+
254
+ #### Type Parameters
255
+
256
+ | Type Parameter | Description |
257
+ | ------ | ------ |
258
+ | `TContract` *extends* `ContractDefinition` | The contract definition type |
259
+
260
+ #### Properties
261
+
262
+ | Property | Type | Description | Defined in |
263
+ | ------ | ------ | ------ | ------ |
264
+ | <a id="connectionoptions"></a> `connectionOptions?` | `AmqpConnectionManagerOptions` | Optional connection configuration (heartbeat, reconnect settings, etc.) | [packages/client-nestjs/src/client.service.ts:36](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L36) |
265
+ | <a id="contract"></a> `contract` | `TContract` | The AMQP contract definition specifying publishers and their message schemas | [packages/client-nestjs/src/client.service.ts:32](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L32) |
266
+ | <a id="urls"></a> `urls` | `ConnectionUrl`[] | AMQP broker URL(s). Multiple URLs provide failover support | [packages/client-nestjs/src/client.service.ts:34](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.service.ts#L34) |
267
+
268
+ ## Variables
269
+
270
+ ### MODULE\_OPTIONS\_TOKEN
271
+
272
+ ```ts
273
+ MODULE_OPTIONS_TOKEN: string | symbol;
274
+ ```
275
+
276
+ Defined in: [packages/client-nestjs/src/client.module-definition.ts:9](https://github.com/btravers/amqp-contract/blob/f0945f098387fd3a6a40beac8cbe2ed7a4de210a/packages/client-nestjs/src/client.module-definition.ts#L9)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amqp-contract/client-nestjs",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "NestJS integration for @amqp-contract/client",
5
5
  "keywords": [
6
6
  "amqp",
@@ -39,11 +39,12 @@
39
39
  "module": "./dist/index.mjs",
40
40
  "types": "./dist/index.d.mts",
41
41
  "files": [
42
- "dist"
42
+ "dist",
43
+ "docs"
43
44
  ],
44
45
  "dependencies": {
45
- "@amqp-contract/client": "0.2.0",
46
- "@amqp-contract/contract": "0.2.0"
46
+ "@amqp-contract/client": "0.2.1",
47
+ "@amqp-contract/contract": "0.2.1"
47
48
  },
48
49
  "devDependencies": {
49
50
  "@nestjs/common": "11.1.10",
@@ -51,24 +52,28 @@
51
52
  "@types/amqplib": "0.10.8",
52
53
  "@types/node": "25.0.3",
53
54
  "@vitest/coverage-v8": "4.0.16",
55
+ "amqp-connection-manager": "5.0.0",
54
56
  "amqplib": "0.10.9",
55
57
  "reflect-metadata": "0.2.2",
56
58
  "rxjs": "7.8.2",
57
59
  "tsdown": "0.18.2",
60
+ "typedoc": "0.28.3",
61
+ "typedoc-plugin-markdown": "4.9.0",
58
62
  "typescript": "5.9.3",
59
63
  "vitest": "4.0.16",
60
64
  "zod": "4.2.1",
61
- "@amqp-contract/tsconfig": "0.0.0"
65
+ "@amqp-contract/tsconfig": "0.0.0",
66
+ "@amqp-contract/typedoc": "0.0.1"
62
67
  },
63
68
  "peerDependencies": {
64
69
  "@nestjs/common": ">=11.0.0",
65
70
  "@nestjs/core": ">=11.0.0",
66
- "amqplib": ">=0.10.0",
67
71
  "reflect-metadata": ">=0.1.13",
68
72
  "rxjs": ">=7.0.0"
69
73
  },
70
74
  "scripts": {
71
75
  "build": "tsdown src/index.ts --format cjs,esm --dts --clean",
76
+ "build:docs": "typedoc",
72
77
  "dev": "tsdown src/index.ts --format cjs,esm --dts --watch",
73
78
  "test": "vitest run --project unit",
74
79
  "test:watch": "vitest --project unit",