@amqp-contract/worker 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -49,6 +49,133 @@ var NonRetryableError = class extends Error {
49
49
  if (typeof ErrorConstructor.captureStackTrace === "function") ErrorConstructor.captureStackTrace(this, this.constructor);
50
50
  }
51
51
  };
52
+ /**
53
+ * Type guard to check if an error is a RetryableError.
54
+ *
55
+ * Use this to check error types in catch blocks or error handlers.
56
+ *
57
+ * @param error - The error to check
58
+ * @returns True if the error is a RetryableError
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * import { isRetryableError } from '@amqp-contract/worker';
63
+ *
64
+ * try {
65
+ * await processMessage();
66
+ * } catch (error) {
67
+ * if (isRetryableError(error)) {
68
+ * console.log('Will retry:', error.message);
69
+ * } else {
70
+ * console.log('Permanent failure:', error);
71
+ * }
72
+ * }
73
+ * ```
74
+ */
75
+ function isRetryableError(error) {
76
+ return error instanceof RetryableError;
77
+ }
78
+ /**
79
+ * Type guard to check if an error is a NonRetryableError.
80
+ *
81
+ * Use this to check error types in catch blocks or error handlers.
82
+ *
83
+ * @param error - The error to check
84
+ * @returns True if the error is a NonRetryableError
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * import { isNonRetryableError } from '@amqp-contract/worker';
89
+ *
90
+ * try {
91
+ * await processMessage();
92
+ * } catch (error) {
93
+ * if (isNonRetryableError(error)) {
94
+ * console.log('Will not retry:', error.message);
95
+ * }
96
+ * }
97
+ * ```
98
+ */
99
+ function isNonRetryableError(error) {
100
+ return error instanceof NonRetryableError;
101
+ }
102
+ /**
103
+ * Type guard to check if an error is any HandlerError (RetryableError or NonRetryableError).
104
+ *
105
+ * @param error - The error to check
106
+ * @returns True if the error is a HandlerError
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * import { isHandlerError } from '@amqp-contract/worker';
111
+ *
112
+ * function handleError(error: unknown) {
113
+ * if (isHandlerError(error)) {
114
+ * // error is RetryableError | NonRetryableError
115
+ * console.log('Handler error:', error.name, error.message);
116
+ * }
117
+ * }
118
+ * ```
119
+ */
120
+ function isHandlerError(error) {
121
+ return isRetryableError(error) || isNonRetryableError(error);
122
+ }
123
+ /**
124
+ * Create a RetryableError with less verbosity.
125
+ *
126
+ * This is a shorthand factory function for creating RetryableError instances.
127
+ * Use it for cleaner error creation in handlers.
128
+ *
129
+ * @param message - Error message describing the failure
130
+ * @param cause - Optional underlying error that caused this failure
131
+ * @returns A new RetryableError instance
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * import { retryable } from '@amqp-contract/worker';
136
+ * import { Future, Result } from '@swan-io/boxed';
137
+ *
138
+ * const handler = ({ payload }) =>
139
+ * Future.fromPromise(processPayment(payload))
140
+ * .mapOk(() => undefined)
141
+ * .mapError((e) => retryable('Payment service unavailable', e));
142
+ *
143
+ * // Equivalent to:
144
+ * // .mapError((e) => new RetryableError('Payment service unavailable', e));
145
+ * ```
146
+ */
147
+ function retryable(message, cause) {
148
+ return new RetryableError(message, cause);
149
+ }
150
+ /**
151
+ * Create a NonRetryableError with less verbosity.
152
+ *
153
+ * This is a shorthand factory function for creating NonRetryableError instances.
154
+ * Use it for cleaner error creation in handlers.
155
+ *
156
+ * @param message - Error message describing the failure
157
+ * @param cause - Optional underlying error that caused this failure
158
+ * @returns A new NonRetryableError instance
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * import { nonRetryable } from '@amqp-contract/worker';
163
+ * import { Future, Result } from '@swan-io/boxed';
164
+ *
165
+ * const handler = ({ payload }) => {
166
+ * if (!isValidPayload(payload)) {
167
+ * return Future.value(Result.Error(nonRetryable('Invalid payload format')));
168
+ * }
169
+ * return Future.value(Result.Ok(undefined));
170
+ * };
171
+ *
172
+ * // Equivalent to:
173
+ * // return Future.value(Result.Error(new NonRetryableError('Invalid payload format')));
174
+ * ```
175
+ */
176
+ function nonRetryable(message, cause) {
177
+ return new NonRetryableError(message, cause);
178
+ }
52
179
 
53
180
  //#endregion
54
181
  //#region src/decompression.ts
@@ -611,4 +738,9 @@ exports.NonRetryableError = NonRetryableError;
611
738
  exports.RetryableError = RetryableError;
612
739
  exports.TypedAmqpWorker = TypedAmqpWorker;
613
740
  exports.defineHandler = defineHandler;
614
- exports.defineHandlers = defineHandlers;
741
+ exports.defineHandlers = defineHandlers;
742
+ exports.isHandlerError = isHandlerError;
743
+ exports.isNonRetryableError = isNonRetryableError;
744
+ exports.isRetryableError = isRetryableError;
745
+ exports.nonRetryable = nonRetryable;
746
+ exports.retryable = retryable;
package/dist/index.d.cts CHANGED
@@ -41,6 +41,123 @@ declare class NonRetryableError extends Error {
41
41
  * Use this type when defining handlers that explicitly signal error outcomes.
42
42
  */
43
43
  type HandlerError = RetryableError | NonRetryableError;
44
+ /**
45
+ * Type guard to check if an error is a RetryableError.
46
+ *
47
+ * Use this to check error types in catch blocks or error handlers.
48
+ *
49
+ * @param error - The error to check
50
+ * @returns True if the error is a RetryableError
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import { isRetryableError } from '@amqp-contract/worker';
55
+ *
56
+ * try {
57
+ * await processMessage();
58
+ * } catch (error) {
59
+ * if (isRetryableError(error)) {
60
+ * console.log('Will retry:', error.message);
61
+ * } else {
62
+ * console.log('Permanent failure:', error);
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ declare function isRetryableError(error: unknown): error is RetryableError;
68
+ /**
69
+ * Type guard to check if an error is a NonRetryableError.
70
+ *
71
+ * Use this to check error types in catch blocks or error handlers.
72
+ *
73
+ * @param error - The error to check
74
+ * @returns True if the error is a NonRetryableError
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * import { isNonRetryableError } from '@amqp-contract/worker';
79
+ *
80
+ * try {
81
+ * await processMessage();
82
+ * } catch (error) {
83
+ * if (isNonRetryableError(error)) {
84
+ * console.log('Will not retry:', error.message);
85
+ * }
86
+ * }
87
+ * ```
88
+ */
89
+ declare function isNonRetryableError(error: unknown): error is NonRetryableError;
90
+ /**
91
+ * Type guard to check if an error is any HandlerError (RetryableError or NonRetryableError).
92
+ *
93
+ * @param error - The error to check
94
+ * @returns True if the error is a HandlerError
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * import { isHandlerError } from '@amqp-contract/worker';
99
+ *
100
+ * function handleError(error: unknown) {
101
+ * if (isHandlerError(error)) {
102
+ * // error is RetryableError | NonRetryableError
103
+ * console.log('Handler error:', error.name, error.message);
104
+ * }
105
+ * }
106
+ * ```
107
+ */
108
+ declare function isHandlerError(error: unknown): error is HandlerError;
109
+ /**
110
+ * Create a RetryableError with less verbosity.
111
+ *
112
+ * This is a shorthand factory function for creating RetryableError instances.
113
+ * Use it for cleaner error creation in handlers.
114
+ *
115
+ * @param message - Error message describing the failure
116
+ * @param cause - Optional underlying error that caused this failure
117
+ * @returns A new RetryableError instance
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * import { retryable } from '@amqp-contract/worker';
122
+ * import { Future, Result } from '@swan-io/boxed';
123
+ *
124
+ * const handler = ({ payload }) =>
125
+ * Future.fromPromise(processPayment(payload))
126
+ * .mapOk(() => undefined)
127
+ * .mapError((e) => retryable('Payment service unavailable', e));
128
+ *
129
+ * // Equivalent to:
130
+ * // .mapError((e) => new RetryableError('Payment service unavailable', e));
131
+ * ```
132
+ */
133
+ declare function retryable(message: string, cause?: unknown): RetryableError;
134
+ /**
135
+ * Create a NonRetryableError with less verbosity.
136
+ *
137
+ * This is a shorthand factory function for creating NonRetryableError instances.
138
+ * Use it for cleaner error creation in handlers.
139
+ *
140
+ * @param message - Error message describing the failure
141
+ * @param cause - Optional underlying error that caused this failure
142
+ * @returns A new NonRetryableError instance
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * import { nonRetryable } from '@amqp-contract/worker';
147
+ * import { Future, Result } from '@swan-io/boxed';
148
+ *
149
+ * const handler = ({ payload }) => {
150
+ * if (!isValidPayload(payload)) {
151
+ * return Future.value(Result.Error(nonRetryable('Invalid payload format')));
152
+ * }
153
+ * return Future.value(Result.Ok(undefined));
154
+ * };
155
+ *
156
+ * // Equivalent to:
157
+ * // return Future.value(Result.Error(new NonRetryableError('Invalid payload format')));
158
+ * ```
159
+ */
160
+ declare function nonRetryable(message: string, cause?: unknown): NonRetryableError;
44
161
  //#endregion
45
162
  //#region src/types.d.ts
46
163
  /**
@@ -105,19 +222,22 @@ type WorkerConsumedMessage<TPayload, THeaders$1 = undefined> = {
105
222
  */
106
223
  type WorkerInferConsumedMessage<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerConsumedMessage<WorkerInferConsumerPayload<TContract, TName>, WorkerInferConsumerHeaders<TContract, TName>>;
107
224
  /**
108
- * Safe consumer handler type for a specific consumer.
225
+ * Consumer handler type for a specific consumer.
109
226
  * Returns a `Future<Result<void, HandlerError>>` for explicit error handling.
110
227
  *
111
- * **Recommended over unsafe handlers** for better error control:
228
+ * Error handling:
112
229
  * - RetryableError: Message will be retried with exponential backoff
113
230
  * - NonRetryableError: Message will be immediately sent to DLQ
114
231
  *
232
+ * The `WorkerInfer*` naming pattern indicates type inference helpers that extract
233
+ * types from a contract definition at compile time.
234
+ *
115
235
  * @param message - The parsed message containing validated payload and headers
116
236
  * @param rawMessage - The raw AMQP message with all metadata (fields, properties, content)
117
237
  *
118
238
  * @example
119
239
  * ```typescript
120
- * const handler: WorkerInferSafeConsumerHandler<typeof contract, 'processOrder'> =
240
+ * const handler: WorkerInferConsumerHandler<typeof contract, 'processOrder'> =
121
241
  * ({ payload }, rawMessage) => {
122
242
  * console.log(payload.orderId); // Typed payload
123
243
  * console.log(rawMessage.fields.deliveryTag); // Raw AMQP message
@@ -125,9 +245,9 @@ type WorkerInferConsumedMessage<TContract extends ContractDefinition, TName exte
125
245
  * };
126
246
  * ```
127
247
  */
128
- type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
248
+ type WorkerInferConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
129
249
  /**
130
- * Safe handler entry for a consumer - either a function or a tuple of [handler, options].
250
+ * Handler entry for a consumer - either a function or a tuple of [handler, options].
131
251
  *
132
252
  * Two patterns are supported:
133
253
  * 1. Simple handler: `({ payload }, rawMessage) => Future.value(Result.Ok(undefined))`
@@ -136,14 +256,36 @@ type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName
136
256
  * Note: Retry configuration is now defined at the queue level in the contract,
137
257
  * not at the handler level. See `QueueDefinition.retry` for configuration options.
138
258
  */
139
- type WorkerInferSafeConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferSafeConsumerHandler<TContract, TName> | readonly [WorkerInferSafeConsumerHandler<TContract, TName>, {
259
+ type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, {
140
260
  prefetch?: number;
141
261
  }];
142
262
  /**
143
- * Safe consumer handlers for a contract.
263
+ * Consumer handlers for a contract.
144
264
  * All handlers return `Future<Result<void, HandlerError>>` for explicit error control.
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const handlers: WorkerInferConsumerHandlers<typeof contract> = {
269
+ * processOrder: ({ payload }) =>
270
+ * Future.fromPromise(processPayment(payload))
271
+ * .mapOk(() => undefined)
272
+ * .mapError((error) => new RetryableError('Payment failed', error)),
273
+ * };
274
+ * ```
275
+ */
276
+ type WorkerInferConsumerHandlers<TContract extends ContractDefinition> = { [K in InferConsumerNames<TContract>]: WorkerInferConsumerHandlerEntry<TContract, K> };
277
+ /**
278
+ * @deprecated Use `WorkerInferConsumerHandler` instead. Will be removed in next major version.
279
+ */
280
+ type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName>;
281
+ /**
282
+ * @deprecated Use `WorkerInferConsumerHandlerEntry` instead. Will be removed in next major version.
283
+ */
284
+ type WorkerInferSafeConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandlerEntry<TContract, TName>;
285
+ /**
286
+ * @deprecated Use `WorkerInferConsumerHandlers` instead. Will be removed in next major version.
145
287
  */
146
- type WorkerInferSafeConsumerHandlers<TContract extends ContractDefinition> = { [K in InferConsumerNames<TContract>]: WorkerInferSafeConsumerHandlerEntry<TContract, K> };
288
+ type WorkerInferSafeConsumerHandlers<TContract extends ContractDefinition> = WorkerInferConsumerHandlers<TContract>;
147
289
  //#endregion
148
290
  //#region src/worker.d.ts
149
291
  /**
@@ -189,7 +331,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
189
331
  * Handlers must return `Future<Result<void, HandlerError>>` for explicit error handling.
190
332
  * Use defineHandler() to create handlers.
191
333
  */
192
- handlers: WorkerInferSafeConsumerHandlers<TContract>;
334
+ handlers: WorkerInferConsumerHandlers<TContract>;
193
335
  /** AMQP broker URL(s). Multiple URLs provide failover support */
194
336
  urls: ConnectionUrl[];
195
337
  /** Optional connection configuration (heartbeat, reconnect settings, etc.) */
@@ -457,10 +599,10 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
457
599
  * );
458
600
  * ```
459
601
  */
460
- declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferSafeConsumerHandler<TContract, TName>): WorkerInferSafeConsumerHandlerEntry<TContract, TName>;
461
- declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferSafeConsumerHandler<TContract, TName>, options: {
602
+ declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>): WorkerInferConsumerHandlerEntry<TContract, TName>;
603
+ declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: {
462
604
  prefetch?: number;
463
- }): WorkerInferSafeConsumerHandlerEntry<TContract, TName>;
605
+ }): WorkerInferConsumerHandlerEntry<TContract, TName>;
464
606
  /**
465
607
  * Define multiple type-safe handlers for consumers in a contract.
466
608
  *
@@ -490,7 +632,7 @@ declare function defineHandler<TContract extends ContractDefinition, TName exten
490
632
  * });
491
633
  * ```
492
634
  */
493
- declare function defineHandlers<TContract extends ContractDefinition>(contract: TContract, handlers: WorkerInferSafeConsumerHandlers<TContract>): WorkerInferSafeConsumerHandlers<TContract>;
635
+ declare function defineHandlers<TContract extends ContractDefinition>(contract: TContract, handlers: WorkerInferConsumerHandlers<TContract>): WorkerInferConsumerHandlers<TContract>;
494
636
  //#endregion
495
- export { type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHeaders, type WorkerInferSafeConsumerHandler, type WorkerInferSafeConsumerHandlerEntry, type WorkerInferSafeConsumerHandlers, defineHandler, defineHandlers };
637
+ export { type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHandler, type WorkerInferConsumerHandlerEntry, type WorkerInferConsumerHandlers, type WorkerInferConsumerHeaders, type WorkerInferSafeConsumerHandler, type WorkerInferSafeConsumerHandlerEntry, type WorkerInferSafeConsumerHandlers, defineHandler, defineHandlers, isHandlerError, isNonRetryableError, isRetryableError, nonRetryable, retryable };
496
638
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors.ts","../src/types.ts","../src/worker.ts","../src/handlers.ts"],"sourcesContent":[],"mappings":"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FjDA,CAAA,kBEkDI,kBFlDJ,EAAA,cEmDA,kBFnDA,CEmDmB,SFnDnB,CAAA,CAAA,CAAA,QAAA,EEqDJ,SFrDI,EAAA,YAAA,EEsDA,KFtDA,EAAA,OAAA,EEuDL,8BFvDK,CEuD0B,SFvD1B,EEuDqC,KFvDrC,CAAA,CAAA,EEwDb,mCFxDa,CEwDuB,SFxDvB,EEwDkC,KFxDlC,CAAA;AAC4B,iBEwD5B,aFxD4B,CAAA,kBEyDxB,kBFzDwB,EAAA,cE0D5B,kBF1D4B,CE0DT,SF1DS,CAAA,CAAA,CAAA,QAAA,EE4DhC,SF5DgC,EAAA,YAAA,EE6D5B,KF7D4B,EAAA,OAAA,EE8DjC,8BF9DiC,CE8DF,SF9DE,EE8DS,KF9DT,CAAA,EAAA,OAAA,EAAA;EAAW,QAAA,CAAA,EAAA,MAAA;CAAzB,CAAA,EEgE3B,mCFhE2B,CEgES,SFhET,EEgEoB,KFhEpB,CAAA;;;AAM9B;;;;;;;;;AAyBA;;;;;AAWA;;;;;;;;;;;;AAoCA;AACoB,iBEgCJ,cFhCI,CAAA,kBEgC6B,kBFhC7B,CAAA,CAAA,QAAA,EEiCR,SFjCQ,EAAA,QAAA,EEkCR,+BFlCQ,CEkCwB,SFlCxB,CAAA,CAAA,EEmCjB,+BFnCiB,CEmCe,SFnCf,CAAA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/errors.ts","../src/types.ts","../src/worker.ts","../src/handlers.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -41,6 +41,123 @@ declare class NonRetryableError extends Error {
41
41
  * Use this type when defining handlers that explicitly signal error outcomes.
42
42
  */
43
43
  type HandlerError = RetryableError | NonRetryableError;
44
+ /**
45
+ * Type guard to check if an error is a RetryableError.
46
+ *
47
+ * Use this to check error types in catch blocks or error handlers.
48
+ *
49
+ * @param error - The error to check
50
+ * @returns True if the error is a RetryableError
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import { isRetryableError } from '@amqp-contract/worker';
55
+ *
56
+ * try {
57
+ * await processMessage();
58
+ * } catch (error) {
59
+ * if (isRetryableError(error)) {
60
+ * console.log('Will retry:', error.message);
61
+ * } else {
62
+ * console.log('Permanent failure:', error);
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ declare function isRetryableError(error: unknown): error is RetryableError;
68
+ /**
69
+ * Type guard to check if an error is a NonRetryableError.
70
+ *
71
+ * Use this to check error types in catch blocks or error handlers.
72
+ *
73
+ * @param error - The error to check
74
+ * @returns True if the error is a NonRetryableError
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * import { isNonRetryableError } from '@amqp-contract/worker';
79
+ *
80
+ * try {
81
+ * await processMessage();
82
+ * } catch (error) {
83
+ * if (isNonRetryableError(error)) {
84
+ * console.log('Will not retry:', error.message);
85
+ * }
86
+ * }
87
+ * ```
88
+ */
89
+ declare function isNonRetryableError(error: unknown): error is NonRetryableError;
90
+ /**
91
+ * Type guard to check if an error is any HandlerError (RetryableError or NonRetryableError).
92
+ *
93
+ * @param error - The error to check
94
+ * @returns True if the error is a HandlerError
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * import { isHandlerError } from '@amqp-contract/worker';
99
+ *
100
+ * function handleError(error: unknown) {
101
+ * if (isHandlerError(error)) {
102
+ * // error is RetryableError | NonRetryableError
103
+ * console.log('Handler error:', error.name, error.message);
104
+ * }
105
+ * }
106
+ * ```
107
+ */
108
+ declare function isHandlerError(error: unknown): error is HandlerError;
109
+ /**
110
+ * Create a RetryableError with less verbosity.
111
+ *
112
+ * This is a shorthand factory function for creating RetryableError instances.
113
+ * Use it for cleaner error creation in handlers.
114
+ *
115
+ * @param message - Error message describing the failure
116
+ * @param cause - Optional underlying error that caused this failure
117
+ * @returns A new RetryableError instance
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * import { retryable } from '@amqp-contract/worker';
122
+ * import { Future, Result } from '@swan-io/boxed';
123
+ *
124
+ * const handler = ({ payload }) =>
125
+ * Future.fromPromise(processPayment(payload))
126
+ * .mapOk(() => undefined)
127
+ * .mapError((e) => retryable('Payment service unavailable', e));
128
+ *
129
+ * // Equivalent to:
130
+ * // .mapError((e) => new RetryableError('Payment service unavailable', e));
131
+ * ```
132
+ */
133
+ declare function retryable(message: string, cause?: unknown): RetryableError;
134
+ /**
135
+ * Create a NonRetryableError with less verbosity.
136
+ *
137
+ * This is a shorthand factory function for creating NonRetryableError instances.
138
+ * Use it for cleaner error creation in handlers.
139
+ *
140
+ * @param message - Error message describing the failure
141
+ * @param cause - Optional underlying error that caused this failure
142
+ * @returns A new NonRetryableError instance
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * import { nonRetryable } from '@amqp-contract/worker';
147
+ * import { Future, Result } from '@swan-io/boxed';
148
+ *
149
+ * const handler = ({ payload }) => {
150
+ * if (!isValidPayload(payload)) {
151
+ * return Future.value(Result.Error(nonRetryable('Invalid payload format')));
152
+ * }
153
+ * return Future.value(Result.Ok(undefined));
154
+ * };
155
+ *
156
+ * // Equivalent to:
157
+ * // return Future.value(Result.Error(new NonRetryableError('Invalid payload format')));
158
+ * ```
159
+ */
160
+ declare function nonRetryable(message: string, cause?: unknown): NonRetryableError;
44
161
  //#endregion
45
162
  //#region src/types.d.ts
46
163
  /**
@@ -105,19 +222,22 @@ type WorkerConsumedMessage<TPayload, THeaders$1 = undefined> = {
105
222
  */
106
223
  type WorkerInferConsumedMessage<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerConsumedMessage<WorkerInferConsumerPayload<TContract, TName>, WorkerInferConsumerHeaders<TContract, TName>>;
107
224
  /**
108
- * Safe consumer handler type for a specific consumer.
225
+ * Consumer handler type for a specific consumer.
109
226
  * Returns a `Future<Result<void, HandlerError>>` for explicit error handling.
110
227
  *
111
- * **Recommended over unsafe handlers** for better error control:
228
+ * Error handling:
112
229
  * - RetryableError: Message will be retried with exponential backoff
113
230
  * - NonRetryableError: Message will be immediately sent to DLQ
114
231
  *
232
+ * The `WorkerInfer*` naming pattern indicates type inference helpers that extract
233
+ * types from a contract definition at compile time.
234
+ *
115
235
  * @param message - The parsed message containing validated payload and headers
116
236
  * @param rawMessage - The raw AMQP message with all metadata (fields, properties, content)
117
237
  *
118
238
  * @example
119
239
  * ```typescript
120
- * const handler: WorkerInferSafeConsumerHandler<typeof contract, 'processOrder'> =
240
+ * const handler: WorkerInferConsumerHandler<typeof contract, 'processOrder'> =
121
241
  * ({ payload }, rawMessage) => {
122
242
  * console.log(payload.orderId); // Typed payload
123
243
  * console.log(rawMessage.fields.deliveryTag); // Raw AMQP message
@@ -125,9 +245,9 @@ type WorkerInferConsumedMessage<TContract extends ContractDefinition, TName exte
125
245
  * };
126
246
  * ```
127
247
  */
128
- type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
248
+ type WorkerInferConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
129
249
  /**
130
- * Safe handler entry for a consumer - either a function or a tuple of [handler, options].
250
+ * Handler entry for a consumer - either a function or a tuple of [handler, options].
131
251
  *
132
252
  * Two patterns are supported:
133
253
  * 1. Simple handler: `({ payload }, rawMessage) => Future.value(Result.Ok(undefined))`
@@ -136,14 +256,36 @@ type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName
136
256
  * Note: Retry configuration is now defined at the queue level in the contract,
137
257
  * not at the handler level. See `QueueDefinition.retry` for configuration options.
138
258
  */
139
- type WorkerInferSafeConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferSafeConsumerHandler<TContract, TName> | readonly [WorkerInferSafeConsumerHandler<TContract, TName>, {
259
+ type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, {
140
260
  prefetch?: number;
141
261
  }];
142
262
  /**
143
- * Safe consumer handlers for a contract.
263
+ * Consumer handlers for a contract.
144
264
  * All handlers return `Future<Result<void, HandlerError>>` for explicit error control.
265
+ *
266
+ * @example
267
+ * ```typescript
268
+ * const handlers: WorkerInferConsumerHandlers<typeof contract> = {
269
+ * processOrder: ({ payload }) =>
270
+ * Future.fromPromise(processPayment(payload))
271
+ * .mapOk(() => undefined)
272
+ * .mapError((error) => new RetryableError('Payment failed', error)),
273
+ * };
274
+ * ```
275
+ */
276
+ type WorkerInferConsumerHandlers<TContract extends ContractDefinition> = { [K in InferConsumerNames<TContract>]: WorkerInferConsumerHandlerEntry<TContract, K> };
277
+ /**
278
+ * @deprecated Use `WorkerInferConsumerHandler` instead. Will be removed in next major version.
279
+ */
280
+ type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName>;
281
+ /**
282
+ * @deprecated Use `WorkerInferConsumerHandlerEntry` instead. Will be removed in next major version.
283
+ */
284
+ type WorkerInferSafeConsumerHandlerEntry<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandlerEntry<TContract, TName>;
285
+ /**
286
+ * @deprecated Use `WorkerInferConsumerHandlers` instead. Will be removed in next major version.
145
287
  */
146
- type WorkerInferSafeConsumerHandlers<TContract extends ContractDefinition> = { [K in InferConsumerNames<TContract>]: WorkerInferSafeConsumerHandlerEntry<TContract, K> };
288
+ type WorkerInferSafeConsumerHandlers<TContract extends ContractDefinition> = WorkerInferConsumerHandlers<TContract>;
147
289
  //#endregion
148
290
  //#region src/worker.d.ts
149
291
  /**
@@ -189,7 +331,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
189
331
  * Handlers must return `Future<Result<void, HandlerError>>` for explicit error handling.
190
332
  * Use defineHandler() to create handlers.
191
333
  */
192
- handlers: WorkerInferSafeConsumerHandlers<TContract>;
334
+ handlers: WorkerInferConsumerHandlers<TContract>;
193
335
  /** AMQP broker URL(s). Multiple URLs provide failover support */
194
336
  urls: ConnectionUrl[];
195
337
  /** Optional connection configuration (heartbeat, reconnect settings, etc.) */
@@ -457,10 +599,10 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
457
599
  * );
458
600
  * ```
459
601
  */
460
- declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferSafeConsumerHandler<TContract, TName>): WorkerInferSafeConsumerHandlerEntry<TContract, TName>;
461
- declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferSafeConsumerHandler<TContract, TName>, options: {
602
+ declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>): WorkerInferConsumerHandlerEntry<TContract, TName>;
603
+ declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: {
462
604
  prefetch?: number;
463
- }): WorkerInferSafeConsumerHandlerEntry<TContract, TName>;
605
+ }): WorkerInferConsumerHandlerEntry<TContract, TName>;
464
606
  /**
465
607
  * Define multiple type-safe handlers for consumers in a contract.
466
608
  *
@@ -490,7 +632,7 @@ declare function defineHandler<TContract extends ContractDefinition, TName exten
490
632
  * });
491
633
  * ```
492
634
  */
493
- declare function defineHandlers<TContract extends ContractDefinition>(contract: TContract, handlers: WorkerInferSafeConsumerHandlers<TContract>): WorkerInferSafeConsumerHandlers<TContract>;
635
+ declare function defineHandlers<TContract extends ContractDefinition>(contract: TContract, handlers: WorkerInferConsumerHandlers<TContract>): WorkerInferConsumerHandlers<TContract>;
494
636
  //#endregion
495
- export { type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHeaders, type WorkerInferSafeConsumerHandler, type WorkerInferSafeConsumerHandlerEntry, type WorkerInferSafeConsumerHandlers, defineHandler, defineHandlers };
637
+ export { type CreateWorkerOptions, type HandlerError, MessageValidationError, NonRetryableError, RetryableError, TypedAmqpWorker, type WorkerConsumedMessage, type WorkerInferConsumedMessage, type WorkerInferConsumerHandler, type WorkerInferConsumerHandlerEntry, type WorkerInferConsumerHandlers, type WorkerInferConsumerHeaders, type WorkerInferSafeConsumerHandler, type WorkerInferSafeConsumerHandlerEntry, type WorkerInferSafeConsumerHandlers, defineHandler, defineHandlers, isHandlerError, isNonRetryableError, isRetryableError, nonRetryable, retryable };
496
638
  //# sourceMappingURL=index.d.mts.map