@amqp-contract/worker 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +136 -2
- package/dist/index.d.cts +177 -27
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +177 -27
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +131 -2
- package/dist/index.mjs.map +1 -1
- package/docs/index.md +366 -83
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
let _amqp_contract_core = require("@amqp-contract/core");
|
|
2
|
+
let _amqp_contract_contract = require("@amqp-contract/contract");
|
|
2
3
|
let _swan_io_boxed = require("@swan-io/boxed");
|
|
3
4
|
let node_zlib = require("node:zlib");
|
|
4
5
|
let node_util = require("node:util");
|
|
@@ -49,6 +50,133 @@ var NonRetryableError = class extends Error {
|
|
|
49
50
|
if (typeof ErrorConstructor.captureStackTrace === "function") ErrorConstructor.captureStackTrace(this, this.constructor);
|
|
50
51
|
}
|
|
51
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Type guard to check if an error is a RetryableError.
|
|
55
|
+
*
|
|
56
|
+
* Use this to check error types in catch blocks or error handlers.
|
|
57
|
+
*
|
|
58
|
+
* @param error - The error to check
|
|
59
|
+
* @returns True if the error is a RetryableError
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* import { isRetryableError } from '@amqp-contract/worker';
|
|
64
|
+
*
|
|
65
|
+
* try {
|
|
66
|
+
* await processMessage();
|
|
67
|
+
* } catch (error) {
|
|
68
|
+
* if (isRetryableError(error)) {
|
|
69
|
+
* console.log('Will retry:', error.message);
|
|
70
|
+
* } else {
|
|
71
|
+
* console.log('Permanent failure:', error);
|
|
72
|
+
* }
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
function isRetryableError(error) {
|
|
77
|
+
return error instanceof RetryableError;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Type guard to check if an error is a NonRetryableError.
|
|
81
|
+
*
|
|
82
|
+
* Use this to check error types in catch blocks or error handlers.
|
|
83
|
+
*
|
|
84
|
+
* @param error - The error to check
|
|
85
|
+
* @returns True if the error is a NonRetryableError
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* import { isNonRetryableError } from '@amqp-contract/worker';
|
|
90
|
+
*
|
|
91
|
+
* try {
|
|
92
|
+
* await processMessage();
|
|
93
|
+
* } catch (error) {
|
|
94
|
+
* if (isNonRetryableError(error)) {
|
|
95
|
+
* console.log('Will not retry:', error.message);
|
|
96
|
+
* }
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
function isNonRetryableError(error) {
|
|
101
|
+
return error instanceof NonRetryableError;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Type guard to check if an error is any HandlerError (RetryableError or NonRetryableError).
|
|
105
|
+
*
|
|
106
|
+
* @param error - The error to check
|
|
107
|
+
* @returns True if the error is a HandlerError
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* import { isHandlerError } from '@amqp-contract/worker';
|
|
112
|
+
*
|
|
113
|
+
* function handleError(error: unknown) {
|
|
114
|
+
* if (isHandlerError(error)) {
|
|
115
|
+
* // error is RetryableError | NonRetryableError
|
|
116
|
+
* console.log('Handler error:', error.name, error.message);
|
|
117
|
+
* }
|
|
118
|
+
* }
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
function isHandlerError(error) {
|
|
122
|
+
return isRetryableError(error) || isNonRetryableError(error);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create a RetryableError with less verbosity.
|
|
126
|
+
*
|
|
127
|
+
* This is a shorthand factory function for creating RetryableError instances.
|
|
128
|
+
* Use it for cleaner error creation in handlers.
|
|
129
|
+
*
|
|
130
|
+
* @param message - Error message describing the failure
|
|
131
|
+
* @param cause - Optional underlying error that caused this failure
|
|
132
|
+
* @returns A new RetryableError instance
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* import { retryable } from '@amqp-contract/worker';
|
|
137
|
+
* import { Future, Result } from '@swan-io/boxed';
|
|
138
|
+
*
|
|
139
|
+
* const handler = ({ payload }) =>
|
|
140
|
+
* Future.fromPromise(processPayment(payload))
|
|
141
|
+
* .mapOk(() => undefined)
|
|
142
|
+
* .mapError((e) => retryable('Payment service unavailable', e));
|
|
143
|
+
*
|
|
144
|
+
* // Equivalent to:
|
|
145
|
+
* // .mapError((e) => new RetryableError('Payment service unavailable', e));
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
function retryable(message, cause) {
|
|
149
|
+
return new RetryableError(message, cause);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Create a NonRetryableError with less verbosity.
|
|
153
|
+
*
|
|
154
|
+
* This is a shorthand factory function for creating NonRetryableError instances.
|
|
155
|
+
* Use it for cleaner error creation in handlers.
|
|
156
|
+
*
|
|
157
|
+
* @param message - Error message describing the failure
|
|
158
|
+
* @param cause - Optional underlying error that caused this failure
|
|
159
|
+
* @returns A new NonRetryableError instance
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* import { nonRetryable } from '@amqp-contract/worker';
|
|
164
|
+
* import { Future, Result } from '@swan-io/boxed';
|
|
165
|
+
*
|
|
166
|
+
* const handler = ({ payload }) => {
|
|
167
|
+
* if (!isValidPayload(payload)) {
|
|
168
|
+
* return Future.value(Result.Error(nonRetryable('Invalid payload format')));
|
|
169
|
+
* }
|
|
170
|
+
* return Future.value(Result.Ok(undefined));
|
|
171
|
+
* };
|
|
172
|
+
*
|
|
173
|
+
* // Equivalent to:
|
|
174
|
+
* // return Future.value(Result.Error(new NonRetryableError('Invalid payload format')));
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
function nonRetryable(message, cause) {
|
|
178
|
+
return new NonRetryableError(message, cause);
|
|
179
|
+
}
|
|
52
180
|
|
|
53
181
|
//#endregion
|
|
54
182
|
//#region src/decompression.ts
|
|
@@ -247,7 +375,8 @@ var TypedAmqpWorker = class TypedAmqpWorker {
|
|
|
247
375
|
* TypeScript guarantees consumer and handler exist for valid consumer names.
|
|
248
376
|
*/
|
|
249
377
|
consume(consumerName) {
|
|
250
|
-
const
|
|
378
|
+
const consumerEntry = this.contract.consumers[consumerName];
|
|
379
|
+
const consumer = (0, _amqp_contract_contract.extractConsumer)(consumerEntry);
|
|
251
380
|
const handler = this.actualHandlers[consumerName];
|
|
252
381
|
return this.consumeSingle(consumerName, consumer, handler);
|
|
253
382
|
}
|
|
@@ -611,4 +740,9 @@ exports.NonRetryableError = NonRetryableError;
|
|
|
611
740
|
exports.RetryableError = RetryableError;
|
|
612
741
|
exports.TypedAmqpWorker = TypedAmqpWorker;
|
|
613
742
|
exports.defineHandler = defineHandler;
|
|
614
|
-
exports.defineHandlers = defineHandlers;
|
|
743
|
+
exports.defineHandlers = defineHandlers;
|
|
744
|
+
exports.isHandlerError = isHandlerError;
|
|
745
|
+
exports.isNonRetryableError = isNonRetryableError;
|
|
746
|
+
exports.isRetryableError = isRetryableError;
|
|
747
|
+
exports.nonRetryable = nonRetryable;
|
|
748
|
+
exports.retryable = retryable;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Logger, TechnicalError, TelemetryProvider } from "@amqp-contract/core";
|
|
2
2
|
import { AmqpConnectionManagerOptions, ConnectionUrl } from "amqp-connection-manager";
|
|
3
|
-
import { ConsumerDefinition,
|
|
3
|
+
import { ConsumerDefinition, ConsumerEntry, ContractDefinitionInput, InferConsumerNames, MessageDefinition } from "@amqp-contract/contract";
|
|
4
4
|
import { Future, Result } from "@swan-io/boxed";
|
|
5
5
|
import { ConsumeMessage } from "amqplib";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
@@ -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
|
/**
|
|
@@ -48,31 +165,39 @@ type HandlerError = RetryableError | NonRetryableError;
|
|
|
48
165
|
*/
|
|
49
166
|
type InferSchemaInput<TSchema extends StandardSchemaV1> = TSchema extends StandardSchemaV1<infer TInput> ? TInput : never;
|
|
50
167
|
/**
|
|
51
|
-
*
|
|
168
|
+
* Extract the ConsumerDefinition from any consumer entry type.
|
|
169
|
+
* Handles ConsumerDefinition, EventConsumerResult, and CommandConsumerConfig.
|
|
52
170
|
*/
|
|
53
|
-
type
|
|
171
|
+
type ExtractConsumerDefinition<T extends ConsumerEntry> = T extends ConsumerDefinition ? T : T extends {
|
|
172
|
+
consumer: ConsumerDefinition;
|
|
173
|
+
} ? T["consumer"] : never;
|
|
174
|
+
/**
|
|
175
|
+
* Infer consumer message payload input type.
|
|
176
|
+
* Works with any consumer entry type by first extracting the ConsumerDefinition.
|
|
177
|
+
*/
|
|
178
|
+
type ConsumerInferPayloadInput<TConsumer extends ConsumerEntry> = ExtractConsumerDefinition<TConsumer> extends ConsumerDefinition ? InferSchemaInput<ExtractConsumerDefinition<TConsumer>["message"]["payload"]> : never;
|
|
54
179
|
/**
|
|
55
180
|
* Infer consumer message headers input type
|
|
56
181
|
* Returns undefined if no headers schema is defined
|
|
57
182
|
*/
|
|
58
|
-
type ConsumerInferHeadersInput<TConsumer extends
|
|
183
|
+
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;
|
|
59
184
|
/**
|
|
60
185
|
* Infer all consumers from contract
|
|
61
186
|
*/
|
|
62
|
-
type InferConsumers<TContract extends
|
|
187
|
+
type InferConsumers<TContract extends ContractDefinitionInput> = NonNullable<TContract["consumers"]>;
|
|
63
188
|
/**
|
|
64
|
-
* Get specific consumer
|
|
189
|
+
* Get specific consumer entry from contract
|
|
65
190
|
*/
|
|
66
|
-
type InferConsumer<TContract extends
|
|
191
|
+
type InferConsumer<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = InferConsumers<TContract>[TName];
|
|
67
192
|
/**
|
|
68
193
|
* Infer the payload type for a specific consumer
|
|
69
194
|
*/
|
|
70
|
-
type WorkerInferConsumerPayload<TContract extends
|
|
195
|
+
type WorkerInferConsumerPayload<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = ConsumerInferPayloadInput<InferConsumer<TContract, TName>>;
|
|
71
196
|
/**
|
|
72
197
|
* Infer the headers type for a specific consumer
|
|
73
198
|
* Returns undefined if no headers schema is defined
|
|
74
199
|
*/
|
|
75
|
-
type WorkerInferConsumerHeaders<TContract extends
|
|
200
|
+
type WorkerInferConsumerHeaders<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = ConsumerInferHeadersInput<InferConsumer<TContract, TName>>;
|
|
76
201
|
/**
|
|
77
202
|
* A consumed message containing parsed payload and headers.
|
|
78
203
|
*
|
|
@@ -103,21 +228,24 @@ type WorkerConsumedMessage<TPayload, THeaders$1 = undefined> = {
|
|
|
103
228
|
* Infer the full consumed message type for a specific consumer.
|
|
104
229
|
* Includes both payload and headers (if defined).
|
|
105
230
|
*/
|
|
106
|
-
type WorkerInferConsumedMessage<TContract extends
|
|
231
|
+
type WorkerInferConsumedMessage<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = WorkerConsumedMessage<WorkerInferConsumerPayload<TContract, TName>, WorkerInferConsumerHeaders<TContract, TName>>;
|
|
107
232
|
/**
|
|
108
|
-
*
|
|
233
|
+
* Consumer handler type for a specific consumer.
|
|
109
234
|
* Returns a `Future<Result<void, HandlerError>>` for explicit error handling.
|
|
110
235
|
*
|
|
111
|
-
*
|
|
236
|
+
* Error handling:
|
|
112
237
|
* - RetryableError: Message will be retried with exponential backoff
|
|
113
238
|
* - NonRetryableError: Message will be immediately sent to DLQ
|
|
114
239
|
*
|
|
240
|
+
* The `WorkerInfer*` naming pattern indicates type inference helpers that extract
|
|
241
|
+
* types from a contract definition at compile time.
|
|
242
|
+
*
|
|
115
243
|
* @param message - The parsed message containing validated payload and headers
|
|
116
244
|
* @param rawMessage - The raw AMQP message with all metadata (fields, properties, content)
|
|
117
245
|
*
|
|
118
246
|
* @example
|
|
119
247
|
* ```typescript
|
|
120
|
-
* const handler:
|
|
248
|
+
* const handler: WorkerInferConsumerHandler<typeof contract, 'processOrder'> =
|
|
121
249
|
* ({ payload }, rawMessage) => {
|
|
122
250
|
* console.log(payload.orderId); // Typed payload
|
|
123
251
|
* console.log(rawMessage.fields.deliveryTag); // Raw AMQP message
|
|
@@ -125,9 +253,9 @@ type WorkerInferConsumedMessage<TContract extends ContractDefinition, TName exte
|
|
|
125
253
|
* };
|
|
126
254
|
* ```
|
|
127
255
|
*/
|
|
128
|
-
type
|
|
256
|
+
type WorkerInferConsumerHandler<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = (message: WorkerInferConsumedMessage<TContract, TName>, rawMessage: ConsumeMessage) => Future<Result<void, HandlerError>>;
|
|
129
257
|
/**
|
|
130
|
-
*
|
|
258
|
+
* Handler entry for a consumer - either a function or a tuple of [handler, options].
|
|
131
259
|
*
|
|
132
260
|
* Two patterns are supported:
|
|
133
261
|
* 1. Simple handler: `({ payload }, rawMessage) => Future.value(Result.Ok(undefined))`
|
|
@@ -136,14 +264,36 @@ type WorkerInferSafeConsumerHandler<TContract extends ContractDefinition, TName
|
|
|
136
264
|
* Note: Retry configuration is now defined at the queue level in the contract,
|
|
137
265
|
* not at the handler level. See `QueueDefinition.retry` for configuration options.
|
|
138
266
|
*/
|
|
139
|
-
type
|
|
267
|
+
type WorkerInferConsumerHandlerEntry<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName> | readonly [WorkerInferConsumerHandler<TContract, TName>, {
|
|
140
268
|
prefetch?: number;
|
|
141
269
|
}];
|
|
142
270
|
/**
|
|
143
|
-
*
|
|
271
|
+
* Consumer handlers for a contract.
|
|
144
272
|
* All handlers return `Future<Result<void, HandlerError>>` for explicit error control.
|
|
273
|
+
*
|
|
274
|
+
* @example
|
|
275
|
+
* ```typescript
|
|
276
|
+
* const handlers: WorkerInferConsumerHandlers<typeof contract> = {
|
|
277
|
+
* processOrder: ({ payload }) =>
|
|
278
|
+
* Future.fromPromise(processPayment(payload))
|
|
279
|
+
* .mapOk(() => undefined)
|
|
280
|
+
* .mapError((error) => new RetryableError('Payment failed', error)),
|
|
281
|
+
* };
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
type WorkerInferConsumerHandlers<TContract extends ContractDefinitionInput> = { [K in InferConsumerNames<TContract>]: WorkerInferConsumerHandlerEntry<TContract, K> };
|
|
285
|
+
/**
|
|
286
|
+
* @deprecated Use `WorkerInferConsumerHandler` instead. Will be removed in next major version.
|
|
287
|
+
*/
|
|
288
|
+
type WorkerInferSafeConsumerHandler<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandler<TContract, TName>;
|
|
289
|
+
/**
|
|
290
|
+
* @deprecated Use `WorkerInferConsumerHandlerEntry` instead. Will be removed in next major version.
|
|
291
|
+
*/
|
|
292
|
+
type WorkerInferSafeConsumerHandlerEntry<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>> = WorkerInferConsumerHandlerEntry<TContract, TName>;
|
|
293
|
+
/**
|
|
294
|
+
* @deprecated Use `WorkerInferConsumerHandlers` instead. Will be removed in next major version.
|
|
145
295
|
*/
|
|
146
|
-
type WorkerInferSafeConsumerHandlers<TContract extends
|
|
296
|
+
type WorkerInferSafeConsumerHandlers<TContract extends ContractDefinitionInput> = WorkerInferConsumerHandlers<TContract>;
|
|
147
297
|
//#endregion
|
|
148
298
|
//#region src/worker.d.ts
|
|
149
299
|
/**
|
|
@@ -181,7 +331,7 @@ type WorkerInferSafeConsumerHandlers<TContract extends ContractDefinition> = { [
|
|
|
181
331
|
* Note: Retry configuration is defined at the queue level in the contract,
|
|
182
332
|
* not at the handler level. See `QueueDefinition.retry` for configuration options.
|
|
183
333
|
*/
|
|
184
|
-
type CreateWorkerOptions<TContract extends
|
|
334
|
+
type CreateWorkerOptions<TContract extends ContractDefinitionInput> = {
|
|
185
335
|
/** The AMQP contract definition specifying consumers and their message schemas */
|
|
186
336
|
contract: TContract;
|
|
187
337
|
/**
|
|
@@ -189,7 +339,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
|
|
|
189
339
|
* Handlers must return `Future<Result<void, HandlerError>>` for explicit error handling.
|
|
190
340
|
* Use defineHandler() to create handlers.
|
|
191
341
|
*/
|
|
192
|
-
handlers:
|
|
342
|
+
handlers: WorkerInferConsumerHandlers<TContract>;
|
|
193
343
|
/** AMQP broker URL(s). Multiple URLs provide failover support */
|
|
194
344
|
urls: ConnectionUrl[];
|
|
195
345
|
/** Optional connection configuration (heartbeat, reconnect settings, etc.) */
|
|
@@ -243,7 +393,7 @@ type CreateWorkerOptions<TContract extends ContractDefinition> = {
|
|
|
243
393
|
* await worker.close().resultToPromise();
|
|
244
394
|
* ```
|
|
245
395
|
*/
|
|
246
|
-
declare class TypedAmqpWorker<TContract extends
|
|
396
|
+
declare class TypedAmqpWorker<TContract extends ContractDefinitionInput> {
|
|
247
397
|
private readonly contract;
|
|
248
398
|
private readonly amqpClient;
|
|
249
399
|
private readonly logger?;
|
|
@@ -280,7 +430,7 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
|
|
|
280
430
|
* }).resultToPromise();
|
|
281
431
|
* ```
|
|
282
432
|
*/
|
|
283
|
-
static create<TContract extends
|
|
433
|
+
static create<TContract extends ContractDefinitionInput>({
|
|
284
434
|
contract,
|
|
285
435
|
handlers,
|
|
286
436
|
urls,
|
|
@@ -457,10 +607,10 @@ declare class TypedAmqpWorker<TContract extends ContractDefinition> {
|
|
|
457
607
|
* );
|
|
458
608
|
* ```
|
|
459
609
|
*/
|
|
460
|
-
declare function defineHandler<TContract extends
|
|
461
|
-
declare function defineHandler<TContract extends
|
|
610
|
+
declare function defineHandler<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>): WorkerInferConsumerHandlerEntry<TContract, TName>;
|
|
611
|
+
declare function defineHandler<TContract extends ContractDefinitionInput, TName extends InferConsumerNames<TContract>>(contract: TContract, consumerName: TName, handler: WorkerInferConsumerHandler<TContract, TName>, options: {
|
|
462
612
|
prefetch?: number;
|
|
463
|
-
}):
|
|
613
|
+
}): WorkerInferConsumerHandlerEntry<TContract, TName>;
|
|
464
614
|
/**
|
|
465
615
|
* Define multiple type-safe handlers for consumers in a contract.
|
|
466
616
|
*
|
|
@@ -490,7 +640,7 @@ declare function defineHandler<TContract extends ContractDefinition, TName exten
|
|
|
490
640
|
* });
|
|
491
641
|
* ```
|
|
492
642
|
*/
|
|
493
|
-
declare function defineHandlers<TContract extends
|
|
643
|
+
declare function defineHandlers<TContract extends ContractDefinitionInput>(contract: TContract, handlers: WorkerInferConsumerHandlers<TContract>): WorkerInferConsumerHandlers<TContract>;
|
|
494
644
|
//#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 };
|
|
645
|
+
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
646
|
//# 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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"}
|