@amqp-contract/worker 0.20.0 → 0.21.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,13 +1,13 @@
1
- import { Logger, MessageValidationError, TechnicalError, TelemetryProvider } from "@amqp-contract/core";
1
+ import { ConsumerDefinition, ConsumerEntry, ContractDefinition, InferConsumerNames, MessageDefinition } from "@amqp-contract/contract";
2
+ import { ConsumerOptions as ConsumerOptions$1, Logger, MessageValidationError, TechnicalError, TelemetryProvider } from "@amqp-contract/core";
3
+ import { Future, Result } from "@swan-io/boxed";
2
4
  import * as amqp from "amqplib";
3
5
  import { ConsumeMessage } from "amqplib";
4
6
  import { TcpSocketConnectOpts } from "net";
5
7
  import { ConnectionOptions } from "tls";
6
- import { ConsumerDefinition, ConsumerEntry, ContractDefinition, InferConsumerNames, MessageDefinition } from "@amqp-contract/contract";
7
- import { Future, Result } from "@swan-io/boxed";
8
8
  import { StandardSchemaV1 } from "@standard-schema/spec";
9
9
 
10
- //#region ../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@0.10.9/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts
10
+ //#region ../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@1.0.3/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts
11
11
  type ConnectionUrl = string | amqp.Options.Connect | {
12
12
  url: string;
13
13
  connectionOptions?: AmqpConnectionOptions;
@@ -196,9 +196,9 @@ declare function nonRetryable(message: string, cause?: unknown): NonRetryableErr
196
196
  //#endregion
197
197
  //#region src/types.d.ts
198
198
  /**
199
- * Infer the TypeScript type from a schema
199
+ * Infer the output type from a schema (used by consumers after validation)
200
200
  */
201
- type InferSchemaInput<TSchema extends StandardSchemaV1> = TSchema extends StandardSchemaV1<infer TInput> ? TInput : never;
201
+ type InferSchemaOutput<TSchema extends StandardSchemaV1> = TSchema extends StandardSchemaV1<infer _TInput, infer TOutput> ? TOutput : never;
202
202
  /**
203
203
  * Extract the ConsumerDefinition from any consumer entry type.
204
204
  * Handles ConsumerDefinition, EventConsumerResult, and CommandConsumerConfig.
@@ -207,15 +207,15 @@ type ExtractConsumerDefinition<T extends ConsumerEntry> = T extends ConsumerDefi
207
207
  consumer: ConsumerDefinition;
208
208
  } ? T["consumer"] : never;
209
209
  /**
210
- * Infer consumer message payload input type.
210
+ * Infer consumer message payload output type.
211
211
  * Works with any consumer entry type by first extracting the ConsumerDefinition.
212
212
  */
213
- type ConsumerInferPayloadInput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? InferSchemaInput<ExtractConsumerDefinition<TConsumer>["message"]["payload"]> : never;
213
+ type ConsumerInferPayloadOutput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? InferSchemaOutput<ExtractConsumerDefinition<TConsumer>["message"]["payload"]> : never;
214
214
  /**
215
- * Infer consumer message headers input type
216
- * Returns undefined if no headers schema is defined
215
+ * Infer consumer message headers output type
216
+ * Returns undefined if no headers schema is defined.
217
217
  */
218
- type ConsumerInferHeadersInput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? ExtractConsumerDefinition<TConsumer>["message"] extends MessageDefinition<infer _TPayload, infer THeaders> ? THeaders extends StandardSchemaV1<Record<string, unknown>> ? InferSchemaInput<THeaders> : undefined : undefined : undefined;
218
+ type ConsumerInferHeadersOutput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? ExtractConsumerDefinition<TConsumer>["message"] extends MessageDefinition<infer _TPayload, infer THeaders> ? THeaders extends StandardSchemaV1<Record<string, unknown>> ? InferSchemaOutput<THeaders> : undefined : undefined : undefined;
219
219
  /**
220
220
  * Infer all consumers from contract
221
221
  */
@@ -227,12 +227,12 @@ type InferConsumer<TContract extends ContractDefinition, TName extends InferCons
227
227
  /**
228
228
  * Infer the payload type for a specific consumer
229
229
  */
230
- type WorkerInferConsumerPayload<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferPayloadInput<InferConsumer<TContract, TName>>;
230
+ type WorkerInferConsumerPayload<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferPayloadOutput<InferConsumer<TContract, TName>>;
231
231
  /**
232
232
  * Infer the headers type for a specific consumer
233
233
  * Returns undefined if no headers schema is defined
234
234
  */
235
- type WorkerInferConsumerHeaders<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferHeadersInput<InferConsumer<TContract, TName>>;
235
+ type WorkerInferConsumerHeaders<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferHeadersOutput<InferConsumer<TContract, TName>>;
236
236
  /**
237
237
  * A consumed message containing parsed payload and headers.
238
238
  *
@@ -297,9 +297,7 @@ type WorkerInferConsumerHandler<TContract extends ContractDefinition, TName exte
297
297
  * Note: Retry configuration is now defined at the queue level in the contract,
298
298
  * not at the handler level. See `QueueDefinition.retry` for configuration options.
299
299
  */
300
- type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, {
301
- prefetch?: number;
302
- }];
300
+ type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, ConsumerOptions];
303
301
  /**
304
302
  * Consumer handlers for a contract.
305
303
  * All handlers return `Future<Result<void, HandlerError>>` for explicit error control.
@@ -317,6 +315,7 @@ type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName
317
315
  type WorkerInferConsumerHandlers<TContract extends ContractDefinition> = { [K in InferConsumerNames<TContract>]: WorkerInferConsumerHandlerEntry<TContract, K> };
318
316
  //#endregion
319
317
  //#region src/worker.d.ts
318
+ type ConsumerOptions = ConsumerOptions$1;
320
319
  /**
321
320
  * Options for creating a type-safe AMQP worker.
322
321
  *
@@ -342,6 +341,9 @@ type WorkerInferConsumerHandlers<TContract extends ContractDefinition> = { [K in
342
341
  * ]
343
342
  * },
344
343
  * urls: ['amqp://localhost'],
344
+ * defaultConsumerOptions: {
345
+ * prefetch: 5,
346
+ * },
345
347
  * connectionOptions: {
346
348
  * heartbeatIntervalInSeconds: 30
347
349
  * },
@@ -369,6 +371,11 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
369
371
  * OpenTelemetry instrumentation is automatically enabled if @opentelemetry/api is installed.
370
372
  */
371
373
  telemetry?: TelemetryProvider | undefined;
374
+ /**
375
+ * Optional default consumer options applied to all consumer handlers.
376
+ * Handler-specific options provided in tuple form override these defaults.
377
+ */
378
+ defaultConsumerOptions?: ConsumerOptions | undefined;
372
379
  };
373
380
  /**
374
381
  * Type-safe AMQP worker for consuming messages from RabbitMQ.
@@ -384,7 +391,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
384
391
  * import { defineQueue, defineMessage, defineContract, defineConsumer } from '@amqp-contract/contract';
385
392
  * import { z } from 'zod';
386
393
  *
387
- * const orderQueue = defineQueue('order-processing', { durable: true });
394
+ * const orderQueue = defineQueue('order-processing');
388
395
  * const orderMessage = defineMessage(z.object({
389
396
  * orderId: z.string(),
390
397
  * amount: z.number()
@@ -414,6 +421,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
414
421
  declare class TypedAmqpWorker<TContract extends ContractDefinition> {
415
422
  private readonly contract;
416
423
  private readonly amqpClient;
424
+ private readonly defaultConsumerOptions;
417
425
  private readonly logger?;
418
426
  /**
419
427
  * Internal handler storage - handlers returning `Future<Result>`.
@@ -453,6 +461,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
453
461
  handlers,
454
462
  urls,
455
463
  connectionOptions,
464
+ defaultConsumerOptions,
456
465
  logger,
457
466
  telemetry
458
467
  }: CreateWorkerOptions<TContract>): Future<Result<TypedAmqpWorker<TContract>, TechnicalError>>;
@@ -507,31 +516,55 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
507
516
  *
508
517
  * Flow depends on retry mode:
509
518
  *
510
- * **quorum-native mode:**
519
+ * **immediate-requeue mode:**
511
520
  * 1. If NonRetryableError -> send directly to DLQ (no retry)
512
- * 2. Otherwise -> nack with requeue=true (RabbitMQ handles delivery count)
521
+ * 2. If max retries exceeded -> send to DLQ
522
+ * 3. Otherwise -> requeue immediately for retry
513
523
  *
514
524
  * **ttl-backoff mode:**
515
525
  * 1. If NonRetryableError -> send directly to DLQ (no retry)
516
526
  * 2. If max retries exceeded -> send to DLQ
517
527
  * 3. Otherwise -> publish to wait queue with TTL for retry
518
528
  *
519
- * **Legacy mode (no retry config):**
520
- * 1. nack with requeue=true (immediate requeue)
529
+ * **none mode (no retry config):**
530
+ * 1. send directly to DLQ (no retry)
521
531
  */
522
532
  private handleError;
523
533
  /**
524
- * Handle error using quorum queue's native delivery limit feature.
534
+ * Handle error by requeuing immediately.
525
535
  *
526
- * Simply requeues the message with nack(requeue=true). RabbitMQ automatically:
527
- * - Increments x-delivery-count header
528
- * - Dead-letters the message when count exceeds x-delivery-limit
536
+ * For quorum queues, messages are requeued with `nack(requeue=true)`, and the worker tracks delivery count via the native RabbitMQ `x-delivery-count` header.
537
+ * For classic queues, messages are re-published on the same queue, and the worker tracks delivery count via a custom `x-retry-count` header.
538
+ * When the count exceeds `maxRetries`, the message is automatically dead-lettered (if DLX is configured) or dropped.
529
539
  *
530
540
  * This is simpler than TTL-based retry but provides immediate retries only.
531
541
  */
532
- private handleErrorQuorumNative;
542
+ private handleErrorImmediateRequeue;
533
543
  /**
534
544
  * Handle error using TTL + wait queue pattern for exponential backoff.
545
+ *
546
+ * ┌─────────────────────────────────────────────────────────────────┐
547
+ * │ Retry Flow (Native RabbitMQ TTL + Wait queue pattern) │
548
+ * ├─────────────────────────────────────────────────────────────────┤
549
+ * │ │
550
+ * │ 1. Handler throws any Error │
551
+ * │ ↓ │
552
+ * │ 2. Worker publishes to wait exchange |
553
+ * | (with header `x-wait-queue` set to the wait queue name) │
554
+ * │ ↓ │
555
+ * │ 3. Wait exchange routes to wait queue │
556
+ * │ (with expiration: calculated backoff delay) │
557
+ * │ ↓ │
558
+ * │ 4. Message waits in queue until TTL expires │
559
+ * │ ↓ │
560
+ * │ 5. Expired message dead-lettered to retry exchange |
561
+ * | (with header `x-retry-queue` set to the main queue name) │
562
+ * │ ↓ │
563
+ * │ 6. Retry exchange routes back to main queue → RETRY │
564
+ * │ ↓ │
565
+ * │ 7. If retries exhausted: nack without requeue → DLQ │
566
+ * │ │
567
+ * └─────────────────────────────────────────────────────────────────┘
535
568
  */
536
569
  private handleErrorTtlBackoff;
537
570
  /**
@@ -544,29 +577,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
544
577
  */
545
578
  private parseMessageContentForRetry;
546
579
  /**
547
- * Publish message to wait queue for retry after TTL expires.
548
- *
549
- * ┌─────────────────────────────────────────────────────────────────┐
550
- * │ Retry Flow (Native RabbitMQ TTL + DLX Pattern) │
551
- * ├─────────────────────────────────────────────────────────────────┤
552
- * │ │
553
- * │ 1. Handler throws any Error │
554
- * │ ↓ │
555
- * │ 2. Worker publishes to DLX with routing key: {queue}-wait │
556
- * │ ↓ │
557
- * │ 3. DLX routes to wait queue: {queue}-wait │
558
- * │ (with expiration: calculated backoff delay) │
559
- * │ ↓ │
560
- * │ 4. Message waits in queue until TTL expires │
561
- * │ ↓ │
562
- * │ 5. Expired message dead-lettered to DLX │
563
- * │ (with routing key: {queue}) │
564
- * │ ↓ │
565
- * │ 6. DLX routes back to main queue → RETRY │
566
- * │ ↓ │
567
- * │ 7. If retries exhausted: nack without requeue → DLQ │
568
- * │ │
569
- * └─────────────────────────────────────────────────────────────────┘
580
+ * Publish message with an incremented x-retry-count header and optional TTL.
570
581
  */
571
582
  private publishForRetry;
572
583
  /**
@@ -626,9 +637,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
626
637
  * ```
627
638
  */
628
639
  declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>): WorkerInferConsumerHandlerEntry<TContract, TName>;
629
- declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: {
630
- prefetch?: number;
631
- }): WorkerInferConsumerHandlerEntry<TContract, TName>;
640
+ declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: ConsumerOptions): WorkerInferConsumerHandlerEntry<TContract, TName>;
632
641
  /**
633
642
  * Define multiple type-safe handlers for consumers in a contract.
634
643
  *
@@ -660,5 +669,5 @@ declare function defineHandler<TContract extends ContractDefinition, TName exten
660
669
  */
661
670
  declare function defineHandlers<TContract extends ContractDefinition>(contract: TContract, handlers: WorkerInferConsumerHandlers<TContract>): WorkerInferConsumerHandlers<TContract>;
662
671
  //#endregion
663
- export { type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHandler, type WorkerInferConsumerHandlerEntry, type WorkerInferConsumerHandlers, type WorkerInferConsumerHeaders, defineHandler, defineHandlers, isHandlerError, isNonRetryableError, isRetryableError, nonRetryable, retryable };
672
+ export { type ConsumerOptions, type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHandler, type WorkerInferConsumerHandlerEntry, type WorkerInferConsumerHandlers, type WorkerInferConsumerHeaders, defineHandler, defineHandlers, isHandlerError, isNonRetryableError, isRetryableError, nonRetryable, retryable };
664
673
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":["amqp","EventEmitter","TcpSocketConnectOpts","ConnectionOptions","ChannelWrapper","CreateChannelOpts","ConnectionUrl","Options","Connect","AmqpConnectionOptions","url","connectionOptions","ConnectListener","Connection","connection","arg","ConnectFailedListener","Error","err","Buffer","noDelay","timeout","keepAlive","keepAliveDelay","clientProperties","credentials","mechanism","username","password","response","AmqpConnectionManagerOptions","Promise","heartbeatIntervalInSeconds","reconnectTimeInSeconds","findServers","urls","callback","IAmqpConnectionManager","Function","ChannelModel","addListener","event","args","listener","reason","listeners","eventName","on","once","prependListener","prependOnceListener","removeListener","connect","options","reconnect","createChannel","close","isConnected","channelCount","AmqpConnectionManager","_channels","_currentUrl","_closed","_cancelRetriesHandler","_connectPromise","_currentConnection","_findServers","_urls","constructor","_connect","default"],"sources":["../../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@0.10.9/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts","../src/errors.ts","../src/types.ts","../src/worker.ts","../src/handlers.ts"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":["amqp","EventEmitter","TcpSocketConnectOpts","ConnectionOptions","ChannelWrapper","CreateChannelOpts","ConnectionUrl","Options","Connect","AmqpConnectionOptions","url","connectionOptions","ConnectListener","Connection","connection","arg","ConnectFailedListener","Error","err","Buffer","noDelay","timeout","keepAlive","keepAliveDelay","clientProperties","credentials","mechanism","username","password","response","AmqpConnectionManagerOptions","Promise","heartbeatIntervalInSeconds","reconnectTimeInSeconds","findServers","urls","callback","IAmqpConnectionManager","Function","ChannelModel","addListener","event","args","listener","reason","listeners","eventName","on","once","prependListener","prependOnceListener","removeListener","connect","options","reconnect","createChannel","close","isConnected","channelCount","AmqpConnectionManager","_channels","_currentUrl","_closed","_cancelRetriesHandler","_connectPromise","_currentConnection","_findServers","_urls","constructor","_connect","default"],"sources":["../../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@1.0.3/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts","../src/errors.ts","../src/types.ts","../src/worker.ts","../src/handlers.ts"],"x_google_ignoreList":[0],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { Logger, MessageValidationError, TechnicalError, TelemetryProvider } from "@amqp-contract/core";
2
1
  import { ConsumerDefinition, ConsumerEntry, ContractDefinition, InferConsumerNames, MessageDefinition } from "@amqp-contract/contract";
2
+ import { ConsumerOptions as ConsumerOptions$1, Logger, MessageValidationError, TechnicalError, TelemetryProvider } from "@amqp-contract/core";
3
3
  import { Future, Result } from "@swan-io/boxed";
4
4
  import * as amqp from "amqplib";
5
5
  import { ConsumeMessage } from "amqplib";
@@ -7,7 +7,7 @@ import { TcpSocketConnectOpts } from "net";
7
7
  import { ConnectionOptions } from "tls";
8
8
  import { StandardSchemaV1 } from "@standard-schema/spec";
9
9
 
10
- //#region ../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@0.10.9/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts
10
+ //#region ../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@1.0.3/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts
11
11
  type ConnectionUrl = string | amqp.Options.Connect | {
12
12
  url: string;
13
13
  connectionOptions?: AmqpConnectionOptions;
@@ -196,9 +196,9 @@ declare function nonRetryable(message: string, cause?: unknown): NonRetryableErr
196
196
  //#endregion
197
197
  //#region src/types.d.ts
198
198
  /**
199
- * Infer the TypeScript type from a schema
199
+ * Infer the output type from a schema (used by consumers after validation)
200
200
  */
201
- type InferSchemaInput<TSchema extends StandardSchemaV1> = TSchema extends StandardSchemaV1<infer TInput> ? TInput : never;
201
+ type InferSchemaOutput<TSchema extends StandardSchemaV1> = TSchema extends StandardSchemaV1<infer _TInput, infer TOutput> ? TOutput : never;
202
202
  /**
203
203
  * Extract the ConsumerDefinition from any consumer entry type.
204
204
  * Handles ConsumerDefinition, EventConsumerResult, and CommandConsumerConfig.
@@ -207,15 +207,15 @@ type ExtractConsumerDefinition<T extends ConsumerEntry> = T extends ConsumerDefi
207
207
  consumer: ConsumerDefinition;
208
208
  } ? T["consumer"] : never;
209
209
  /**
210
- * Infer consumer message payload input type.
210
+ * Infer consumer message payload output type.
211
211
  * Works with any consumer entry type by first extracting the ConsumerDefinition.
212
212
  */
213
- type ConsumerInferPayloadInput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? InferSchemaInput<ExtractConsumerDefinition<TConsumer>["message"]["payload"]> : never;
213
+ type ConsumerInferPayloadOutput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? InferSchemaOutput<ExtractConsumerDefinition<TConsumer>["message"]["payload"]> : never;
214
214
  /**
215
- * Infer consumer message headers input type
216
- * Returns undefined if no headers schema is defined
215
+ * Infer consumer message headers output type
216
+ * Returns undefined if no headers schema is defined.
217
217
  */
218
- type ConsumerInferHeadersInput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? ExtractConsumerDefinition<TConsumer>["message"] extends MessageDefinition<infer _TPayload, infer THeaders> ? THeaders extends StandardSchemaV1<Record<string, unknown>> ? InferSchemaInput<THeaders> : undefined : undefined : undefined;
218
+ type ConsumerInferHeadersOutput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? ExtractConsumerDefinition<TConsumer>["message"] extends MessageDefinition<infer _TPayload, infer THeaders> ? THeaders extends StandardSchemaV1<Record<string, unknown>> ? InferSchemaOutput<THeaders> : undefined : undefined : undefined;
219
219
  /**
220
220
  * Infer all consumers from contract
221
221
  */
@@ -227,12 +227,12 @@ type InferConsumer<TContract extends ContractDefinition, TName extends InferCons
227
227
  /**
228
228
  * Infer the payload type for a specific consumer
229
229
  */
230
- type WorkerInferConsumerPayload<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferPayloadInput<InferConsumer<TContract, TName>>;
230
+ type WorkerInferConsumerPayload<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferPayloadOutput<InferConsumer<TContract, TName>>;
231
231
  /**
232
232
  * Infer the headers type for a specific consumer
233
233
  * Returns undefined if no headers schema is defined
234
234
  */
235
- type WorkerInferConsumerHeaders<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferHeadersInput<InferConsumer<TContract, TName>>;
235
+ type WorkerInferConsumerHeaders<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = ConsumerInferHeadersOutput<InferConsumer<TContract, TName>>;
236
236
  /**
237
237
  * A consumed message containing parsed payload and headers.
238
238
  *
@@ -297,9 +297,7 @@ type WorkerInferConsumerHandler<TContract extends ContractDefinition, TName exte
297
297
  * Note: Retry configuration is now defined at the queue level in the contract,
298
298
  * not at the handler level. See `QueueDefinition.retry` for configuration options.
299
299
  */
300
- type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, {
301
- prefetch?: number;
302
- }];
300
+ type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, ConsumerOptions];
303
301
  /**
304
302
  * Consumer handlers for a contract.
305
303
  * All handlers return `Future<Result<void, HandlerError>>` for explicit error control.
@@ -317,6 +315,7 @@ type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName
317
315
  type WorkerInferConsumerHandlers<TContract extends ContractDefinition> = { [K in InferConsumerNames<TContract>]: WorkerInferConsumerHandlerEntry<TContract, K> };
318
316
  //#endregion
319
317
  //#region src/worker.d.ts
318
+ type ConsumerOptions = ConsumerOptions$1;
320
319
  /**
321
320
  * Options for creating a type-safe AMQP worker.
322
321
  *
@@ -342,6 +341,9 @@ type WorkerInferConsumerHandlers<TContract extends ContractDefinition> = { [K in
342
341
  * ]
343
342
  * },
344
343
  * urls: ['amqp://localhost'],
344
+ * defaultConsumerOptions: {
345
+ * prefetch: 5,
346
+ * },
345
347
  * connectionOptions: {
346
348
  * heartbeatIntervalInSeconds: 30
347
349
  * },
@@ -369,6 +371,11 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
369
371
  * OpenTelemetry instrumentation is automatically enabled if @opentelemetry/api is installed.
370
372
  */
371
373
  telemetry?: TelemetryProvider | undefined;
374
+ /**
375
+ * Optional default consumer options applied to all consumer handlers.
376
+ * Handler-specific options provided in tuple form override these defaults.
377
+ */
378
+ defaultConsumerOptions?: ConsumerOptions | undefined;
372
379
  };
373
380
  /**
374
381
  * Type-safe AMQP worker for consuming messages from RabbitMQ.
@@ -384,7 +391,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
384
391
  * import { defineQueue, defineMessage, defineContract, defineConsumer } from '@amqp-contract/contract';
385
392
  * import { z } from 'zod';
386
393
  *
387
- * const orderQueue = defineQueue('order-processing', { durable: true });
394
+ * const orderQueue = defineQueue('order-processing');
388
395
  * const orderMessage = defineMessage(z.object({
389
396
  * orderId: z.string(),
390
397
  * amount: z.number()
@@ -414,6 +421,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
414
421
  declare class TypedAmqpWorker<TContract extends ContractDefinition> {
415
422
  private readonly contract;
416
423
  private readonly amqpClient;
424
+ private readonly defaultConsumerOptions;
417
425
  private readonly logger?;
418
426
  /**
419
427
  * Internal handler storage - handlers returning `Future<Result>`.
@@ -453,6 +461,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
453
461
  handlers,
454
462
  urls,
455
463
  connectionOptions,
464
+ defaultConsumerOptions,
456
465
  logger,
457
466
  telemetry
458
467
  }: CreateWorkerOptions<TContract>): Future<Result<TypedAmqpWorker<TContract>, TechnicalError>>;
@@ -507,31 +516,55 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
507
516
  *
508
517
  * Flow depends on retry mode:
509
518
  *
510
- * **quorum-native mode:**
519
+ * **immediate-requeue mode:**
511
520
  * 1. If NonRetryableError -> send directly to DLQ (no retry)
512
- * 2. Otherwise -> nack with requeue=true (RabbitMQ handles delivery count)
521
+ * 2. If max retries exceeded -> send to DLQ
522
+ * 3. Otherwise -> requeue immediately for retry
513
523
  *
514
524
  * **ttl-backoff mode:**
515
525
  * 1. If NonRetryableError -> send directly to DLQ (no retry)
516
526
  * 2. If max retries exceeded -> send to DLQ
517
527
  * 3. Otherwise -> publish to wait queue with TTL for retry
518
528
  *
519
- * **Legacy mode (no retry config):**
520
- * 1. nack with requeue=true (immediate requeue)
529
+ * **none mode (no retry config):**
530
+ * 1. send directly to DLQ (no retry)
521
531
  */
522
532
  private handleError;
523
533
  /**
524
- * Handle error using quorum queue's native delivery limit feature.
534
+ * Handle error by requeuing immediately.
525
535
  *
526
- * Simply requeues the message with nack(requeue=true). RabbitMQ automatically:
527
- * - Increments x-delivery-count header
528
- * - Dead-letters the message when count exceeds x-delivery-limit
536
+ * For quorum queues, messages are requeued with `nack(requeue=true)`, and the worker tracks delivery count via the native RabbitMQ `x-delivery-count` header.
537
+ * For classic queues, messages are re-published on the same queue, and the worker tracks delivery count via a custom `x-retry-count` header.
538
+ * When the count exceeds `maxRetries`, the message is automatically dead-lettered (if DLX is configured) or dropped.
529
539
  *
530
540
  * This is simpler than TTL-based retry but provides immediate retries only.
531
541
  */
532
- private handleErrorQuorumNative;
542
+ private handleErrorImmediateRequeue;
533
543
  /**
534
544
  * Handle error using TTL + wait queue pattern for exponential backoff.
545
+ *
546
+ * ┌─────────────────────────────────────────────────────────────────┐
547
+ * │ Retry Flow (Native RabbitMQ TTL + Wait queue pattern) │
548
+ * ├─────────────────────────────────────────────────────────────────┤
549
+ * │ │
550
+ * │ 1. Handler throws any Error │
551
+ * │ ↓ │
552
+ * │ 2. Worker publishes to wait exchange |
553
+ * | (with header `x-wait-queue` set to the wait queue name) │
554
+ * │ ↓ │
555
+ * │ 3. Wait exchange routes to wait queue │
556
+ * │ (with expiration: calculated backoff delay) │
557
+ * │ ↓ │
558
+ * │ 4. Message waits in queue until TTL expires │
559
+ * │ ↓ │
560
+ * │ 5. Expired message dead-lettered to retry exchange |
561
+ * | (with header `x-retry-queue` set to the main queue name) │
562
+ * │ ↓ │
563
+ * │ 6. Retry exchange routes back to main queue → RETRY │
564
+ * │ ↓ │
565
+ * │ 7. If retries exhausted: nack without requeue → DLQ │
566
+ * │ │
567
+ * └─────────────────────────────────────────────────────────────────┘
535
568
  */
536
569
  private handleErrorTtlBackoff;
537
570
  /**
@@ -544,29 +577,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
544
577
  */
545
578
  private parseMessageContentForRetry;
546
579
  /**
547
- * Publish message to wait queue for retry after TTL expires.
548
- *
549
- * ┌─────────────────────────────────────────────────────────────────┐
550
- * │ Retry Flow (Native RabbitMQ TTL + DLX Pattern) │
551
- * ├─────────────────────────────────────────────────────────────────┤
552
- * │ │
553
- * │ 1. Handler throws any Error │
554
- * │ ↓ │
555
- * │ 2. Worker publishes to DLX with routing key: {queue}-wait │
556
- * │ ↓ │
557
- * │ 3. DLX routes to wait queue: {queue}-wait │
558
- * │ (with expiration: calculated backoff delay) │
559
- * │ ↓ │
560
- * │ 4. Message waits in queue until TTL expires │
561
- * │ ↓ │
562
- * │ 5. Expired message dead-lettered to DLX │
563
- * │ (with routing key: {queue}) │
564
- * │ ↓ │
565
- * │ 6. DLX routes back to main queue → RETRY │
566
- * │ ↓ │
567
- * │ 7. If retries exhausted: nack without requeue → DLQ │
568
- * │ │
569
- * └─────────────────────────────────────────────────────────────────┘
580
+ * Publish message with an incremented x-retry-count header and optional TTL.
570
581
  */
571
582
  private publishForRetry;
572
583
  /**
@@ -626,9 +637,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
626
637
  * ```
627
638
  */
628
639
  declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>): WorkerInferConsumerHandlerEntry<TContract, TName>;
629
- declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: {
630
- prefetch?: number;
631
- }): WorkerInferConsumerHandlerEntry<TContract, TName>;
640
+ declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: ConsumerOptions): WorkerInferConsumerHandlerEntry<TContract, TName>;
632
641
  /**
633
642
  * Define multiple type-safe handlers for consumers in a contract.
634
643
  *
@@ -660,5 +669,5 @@ declare function defineHandler<TContract extends ContractDefinition, TName exten
660
669
  */
661
670
  declare function defineHandlers<TContract extends ContractDefinition>(contract: TContract, handlers: WorkerInferConsumerHandlers<TContract>): WorkerInferConsumerHandlers<TContract>;
662
671
  //#endregion
663
- export { type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHandler, type WorkerInferConsumerHandlerEntry, type WorkerInferConsumerHandlers, type WorkerInferConsumerHeaders, defineHandler, defineHandlers, isHandlerError, isNonRetryableError, isRetryableError, nonRetryable, retryable };
672
+ export { type ConsumerOptions, type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHandler, type WorkerInferConsumerHandlerEntry, type WorkerInferConsumerHandlers, type WorkerInferConsumerHeaders, defineHandler, defineHandlers, isHandlerError, isNonRetryableError, isRetryableError, nonRetryable, retryable };
664
673
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":["amqp","EventEmitter","TcpSocketConnectOpts","ConnectionOptions","ChannelWrapper","CreateChannelOpts","ConnectionUrl","Options","Connect","AmqpConnectionOptions","url","connectionOptions","ConnectListener","Connection","connection","arg","ConnectFailedListener","Error","err","Buffer","noDelay","timeout","keepAlive","keepAliveDelay","clientProperties","credentials","mechanism","username","password","response","AmqpConnectionManagerOptions","Promise","heartbeatIntervalInSeconds","reconnectTimeInSeconds","findServers","urls","callback","IAmqpConnectionManager","Function","ChannelModel","addListener","event","args","listener","reason","listeners","eventName","on","once","prependListener","prependOnceListener","removeListener","connect","options","reconnect","createChannel","close","isConnected","channelCount","AmqpConnectionManager","_channels","_currentUrl","_closed","_cancelRetriesHandler","_connectPromise","_currentConnection","_findServers","_urls","constructor","_connect","default"],"sources":["../../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@0.10.9/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts","../src/errors.ts","../src/types.ts","../src/worker.ts","../src/handlers.ts"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":["amqp","EventEmitter","TcpSocketConnectOpts","ConnectionOptions","ChannelWrapper","CreateChannelOpts","ConnectionUrl","Options","Connect","AmqpConnectionOptions","url","connectionOptions","ConnectListener","Connection","connection","arg","ConnectFailedListener","Error","err","Buffer","noDelay","timeout","keepAlive","keepAliveDelay","clientProperties","credentials","mechanism","username","password","response","AmqpConnectionManagerOptions","Promise","heartbeatIntervalInSeconds","reconnectTimeInSeconds","findServers","urls","callback","IAmqpConnectionManager","Function","ChannelModel","addListener","event","args","listener","reason","listeners","eventName","on","once","prependListener","prependOnceListener","removeListener","connect","options","reconnect","createChannel","close","isConnected","channelCount","AmqpConnectionManager","_channels","_currentUrl","_closed","_cancelRetriesHandler","_connectPromise","_currentConnection","_findServers","_urls","constructor","_connect","default"],"sources":["../../../node_modules/.pnpm/amqp-connection-manager@5.0.0_amqplib@1.0.3/node_modules/amqp-connection-manager/dist/types/AmqpConnectionManager.d.ts","../src/errors.ts","../src/types.ts","../src/worker.ts","../src/handlers.ts"],"x_google_ignoreList":[0],"mappings":"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"}