@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 +133 -1
- package/dist/index.d.cts +156 -14
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +156 -14
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +128 -1
- package/dist/index.mjs.map +1 -1
- package/docs/index.md +356 -73
- package/package.json +4 -4
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
|
-
*
|
|
225
|
+
* Consumer handler type for a specific consumer.
|
|
109
226
|
* Returns a `Future<Result<void, HandlerError>>` for explicit error handling.
|
|
110
227
|
*
|
|
111
|
-
*
|
|
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:
|
|
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
|
|
248
|
+
type WorkerInferConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
|
|
129
249
|
/**
|
|
130
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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> =
|
|
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:
|
|
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:
|
|
461
|
-
declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler:
|
|
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
|
-
}):
|
|
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:
|
|
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
|
package/dist/index.d.cts.map
CHANGED
|
@@ -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":";;;;;;;;;;;cAGa,sBAAA,SAA+B,KAAA;;;;;AAA5C;AAwBA;AAwBA;AAqBA
|
|
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
|
-
*
|
|
225
|
+
* Consumer handler type for a specific consumer.
|
|
109
226
|
* Returns a `Future<Result<void, HandlerError>>` for explicit error handling.
|
|
110
227
|
*
|
|
111
|
-
*
|
|
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:
|
|
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
|
|
248
|
+
type WorkerInferConsumerHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
|
|
129
249
|
/**
|
|
130
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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> =
|
|
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:
|
|
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:
|
|
461
|
-
declare function defineHandler<TContract extends ContractDefinition, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler:
|
|
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
|
-
}):
|
|
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:
|
|
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
|