@message-queue-toolkit/core 24.0.0 → 24.2.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/README.md +360 -0
- package/dist/events/DomainEventEmitter.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/queues/HandlerContainer.d.ts +12 -1
- package/dist/queues/HandlerContainer.js +24 -5
- package/dist/queues/HandlerContainer.js.map +1 -1
- package/dist/queues/HandlerSpy.d.ts +1 -0
- package/dist/queues/HandlerSpy.js +3 -0
- package/dist/queues/HandlerSpy.js.map +1 -1
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
# @message-queue-toolkit/core
|
|
2
|
+
|
|
3
|
+
Core library for message-queue-toolkit. Provides foundational abstractions, utilities, and base classes for building message queue publishers and consumers.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Installation](#installation)
|
|
8
|
+
- [Overview](#overview)
|
|
9
|
+
- [Core Concepts](#core-concepts)
|
|
10
|
+
- [Message Schemas](#message-schemas)
|
|
11
|
+
- [Handler Configuration](#handler-configuration)
|
|
12
|
+
- [Pre-handlers and Barriers](#pre-handlers-and-barriers)
|
|
13
|
+
- [Handler Spies](#handler-spies)
|
|
14
|
+
- [Key Classes](#key-classes)
|
|
15
|
+
- [AbstractQueueService](#abstractqueueservice)
|
|
16
|
+
- [MessageHandlerConfigBuilder](#messagehandlerconfigbuilder)
|
|
17
|
+
- [HandlerContainer](#handlercontainer)
|
|
18
|
+
- [MessageSchemaContainer](#messageschemacontainer)
|
|
19
|
+
- [AbstractPublisherManager](#abstractpublishermanager)
|
|
20
|
+
- [DomainEventEmitter](#domaineventemitter)
|
|
21
|
+
- [Utilities](#utilities)
|
|
22
|
+
- [NO_MESSAGE_TYPE_FIELD](#no_message_type_field)
|
|
23
|
+
- [Error Classes](#error-classes)
|
|
24
|
+
- [Message Deduplication](#message-deduplication)
|
|
25
|
+
- [Payload Offloading](#payload-offloading)
|
|
26
|
+
- [API Reference](#api-reference)
|
|
27
|
+
- [Links](#links)
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install @message-queue-toolkit/core zod
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Peer Dependencies:**
|
|
36
|
+
- `zod` - Schema validation
|
|
37
|
+
|
|
38
|
+
## Overview
|
|
39
|
+
|
|
40
|
+
The core package provides the foundational building blocks used by all protocol-specific implementations (SQS, SNS, AMQP, Kafka, GCP Pub/Sub). It includes:
|
|
41
|
+
|
|
42
|
+
- **Base Classes**: Abstract classes for publishers and consumers
|
|
43
|
+
- **Handler System**: Type-safe message routing and handling
|
|
44
|
+
- **Validation**: Zod schema validation and message parsing
|
|
45
|
+
- **Utilities**: Retry logic, date handling, environment utilities
|
|
46
|
+
- **Testing**: Handler spies for testing async message flows
|
|
47
|
+
- **Extensibility**: Interfaces for payload stores, deduplication stores, and metrics
|
|
48
|
+
|
|
49
|
+
## Core Concepts
|
|
50
|
+
|
|
51
|
+
### Message Schemas
|
|
52
|
+
|
|
53
|
+
Messages are validated using Zod schemas. The library uses configurable field names:
|
|
54
|
+
|
|
55
|
+
- **`messageTypeField`** (required): Field containing the message type discriminator (must be `z.literal()` for routing)
|
|
56
|
+
- **`messageIdField`** (default: `'id'`): Field containing the message ID
|
|
57
|
+
- **`messageTimestampField`** (default: `'timestamp'`): Field containing the timestamp
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { z } from 'zod'
|
|
61
|
+
|
|
62
|
+
const UserCreatedSchema = z.object({
|
|
63
|
+
id: z.string(),
|
|
64
|
+
type: z.literal('user.created'), // Used for routing
|
|
65
|
+
timestamp: z.string().datetime(),
|
|
66
|
+
userId: z.string(),
|
|
67
|
+
email: z.string().email(),
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
type UserCreated = z.infer<typeof UserCreatedSchema>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Handler Configuration
|
|
74
|
+
|
|
75
|
+
Use `MessageHandlerConfigBuilder` to configure handlers for different message types:
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
import { MessageHandlerConfigBuilder } from '@message-queue-toolkit/core'
|
|
79
|
+
|
|
80
|
+
const handlers = new MessageHandlerConfigBuilder<SupportedMessages, ExecutionContext>()
|
|
81
|
+
.addConfig(
|
|
82
|
+
UserCreatedSchema,
|
|
83
|
+
async (message, context, preHandlingOutputs) => {
|
|
84
|
+
await context.userService.createUser(message.userId)
|
|
85
|
+
return { result: 'success' }
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
.addConfig(
|
|
89
|
+
UserUpdatedSchema,
|
|
90
|
+
async (message, context, preHandlingOutputs) => {
|
|
91
|
+
await context.userService.updateUser(message.userId, message.changes)
|
|
92
|
+
return { result: 'success' }
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
.build()
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Pre-handlers and Barriers
|
|
99
|
+
|
|
100
|
+
**Pre-handlers** are middleware functions that run before the main handler:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
const preHandlers = [
|
|
104
|
+
(message, context, output, next) => {
|
|
105
|
+
// Enrich context, validate prerequisites, etc.
|
|
106
|
+
output.logger = context.logger.child({ messageId: message.id })
|
|
107
|
+
next({ result: 'success' })
|
|
108
|
+
},
|
|
109
|
+
]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Barriers** control whether a message should be processed or retried later:
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
const preHandlerBarrier = async (message, context, preHandlerOutput) => {
|
|
116
|
+
const prerequisiteMet = await checkPrerequisite(message)
|
|
117
|
+
return {
|
|
118
|
+
isPassing: prerequisiteMet,
|
|
119
|
+
output: { ready: true },
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Handler Spies
|
|
125
|
+
|
|
126
|
+
Handler spies enable testing of async message flows:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// Enable in consumer/publisher options
|
|
130
|
+
{ handlerSpy: true }
|
|
131
|
+
|
|
132
|
+
// Wait for specific messages in tests
|
|
133
|
+
const result = await consumer.handlerSpy.waitForMessageWithId('msg-123', 'consumed', 5000)
|
|
134
|
+
expect(result.userId).toBe('user-456')
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Key Classes
|
|
138
|
+
|
|
139
|
+
### AbstractQueueService
|
|
140
|
+
|
|
141
|
+
Base class for all queue services. Provides:
|
|
142
|
+
|
|
143
|
+
- Message serialization/deserialization
|
|
144
|
+
- Schema validation
|
|
145
|
+
- Retry logic with exponential backoff
|
|
146
|
+
- Payload offloading support
|
|
147
|
+
- Message deduplication primitives
|
|
148
|
+
|
|
149
|
+
### MessageHandlerConfigBuilder
|
|
150
|
+
|
|
151
|
+
Fluent builder for configuring message handlers:
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
import { MessageHandlerConfigBuilder } from '@message-queue-toolkit/core'
|
|
155
|
+
|
|
156
|
+
const handlers = new MessageHandlerConfigBuilder<
|
|
157
|
+
SupportedMessages,
|
|
158
|
+
ExecutionContext,
|
|
159
|
+
PrehandlerOutput
|
|
160
|
+
>()
|
|
161
|
+
.addConfig(Schema1, handler1)
|
|
162
|
+
.addConfig(Schema2, handler2, {
|
|
163
|
+
preHandlers: [preHandler1, preHandler2],
|
|
164
|
+
preHandlerBarrier: barrierFn,
|
|
165
|
+
messageLogFormatter: (msg) => ({ id: msg.id }),
|
|
166
|
+
})
|
|
167
|
+
.build()
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### HandlerContainer
|
|
171
|
+
|
|
172
|
+
Routes messages to appropriate handlers based on message type:
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { HandlerContainer } from '@message-queue-toolkit/core'
|
|
176
|
+
|
|
177
|
+
const container = new HandlerContainer({
|
|
178
|
+
messageHandlers: handlers,
|
|
179
|
+
messageTypeField: 'type',
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
const handler = container.resolveHandler(message.type)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### MessageSchemaContainer
|
|
186
|
+
|
|
187
|
+
Manages Zod schemas and validates messages:
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
import { MessageSchemaContainer } from '@message-queue-toolkit/core'
|
|
191
|
+
|
|
192
|
+
const container = new MessageSchemaContainer({
|
|
193
|
+
messageSchemas: [Schema1, Schema2],
|
|
194
|
+
messageTypeField: 'type',
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
const schema = container.resolveSchema(message.type)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### AbstractPublisherManager
|
|
201
|
+
|
|
202
|
+
Factory pattern for spawning publishers on demand:
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
import { AbstractPublisherManager } from '@message-queue-toolkit/core'
|
|
206
|
+
|
|
207
|
+
// Automatically spawns publishers and fills metadata
|
|
208
|
+
await publisherManager.publish('user-events-topic', {
|
|
209
|
+
type: 'user.created',
|
|
210
|
+
userId: 'user-123',
|
|
211
|
+
})
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### DomainEventEmitter
|
|
215
|
+
|
|
216
|
+
Event emitter for domain events:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
import { DomainEventEmitter } from '@message-queue-toolkit/core'
|
|
220
|
+
|
|
221
|
+
const emitter = new DomainEventEmitter()
|
|
222
|
+
|
|
223
|
+
emitter.on('user.created', async (event) => {
|
|
224
|
+
console.log('User created:', event.userId)
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
await emitter.emit('user.created', { userId: 'user-123' })
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## Utilities
|
|
231
|
+
|
|
232
|
+
### NO_MESSAGE_TYPE_FIELD
|
|
233
|
+
|
|
234
|
+
Use this constant when your consumer should accept all message types without routing:
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
import { NO_MESSAGE_TYPE_FIELD } from '@message-queue-toolkit/core'
|
|
238
|
+
|
|
239
|
+
// Consumer will use a single handler for all messages
|
|
240
|
+
{
|
|
241
|
+
messageTypeField: NO_MESSAGE_TYPE_FIELD,
|
|
242
|
+
handlers: new MessageHandlerConfigBuilder()
|
|
243
|
+
.addConfig(PassthroughSchema, async (message) => {
|
|
244
|
+
// Handles any message type
|
|
245
|
+
return { result: 'success' }
|
|
246
|
+
})
|
|
247
|
+
.build(),
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Error Classes
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
import {
|
|
255
|
+
MessageValidationError,
|
|
256
|
+
MessageInvalidFormatError,
|
|
257
|
+
DoNotProcessMessageError,
|
|
258
|
+
RetryMessageLaterError,
|
|
259
|
+
} from '@message-queue-toolkit/core'
|
|
260
|
+
|
|
261
|
+
// Validation failed
|
|
262
|
+
throw new MessageValidationError(zodError.issues)
|
|
263
|
+
|
|
264
|
+
// Message format is invalid (cannot parse)
|
|
265
|
+
throw new MessageInvalidFormatError({ message: 'Invalid JSON' })
|
|
266
|
+
|
|
267
|
+
// Do not process this message (skip without retry)
|
|
268
|
+
throw new DoNotProcessMessageError({ message: 'Duplicate message' })
|
|
269
|
+
|
|
270
|
+
// Retry this message later
|
|
271
|
+
throw new RetryMessageLaterError({ message: 'Dependency not ready' })
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Message Deduplication
|
|
275
|
+
|
|
276
|
+
Interfaces for implementing deduplication stores:
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
import type { MessageDeduplicationStore, ReleasableLock } from '@message-queue-toolkit/core'
|
|
280
|
+
|
|
281
|
+
// Implement custom deduplication store
|
|
282
|
+
class MyDeduplicationStore implements MessageDeduplicationStore {
|
|
283
|
+
async keyExists(key: string): Promise<boolean> { /* ... */ }
|
|
284
|
+
async setKey(key: string, ttlSeconds: number): Promise<void> { /* ... */ }
|
|
285
|
+
async acquireLock(key: string, options: AcquireLockOptions): Promise<ReleasableLock> { /* ... */ }
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Payload Offloading
|
|
290
|
+
|
|
291
|
+
Interfaces for implementing payload stores:
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
import type { PayloadStore, PayloadStoreConfig } from '@message-queue-toolkit/core'
|
|
295
|
+
|
|
296
|
+
// Implement custom payload store
|
|
297
|
+
class MyPayloadStore implements PayloadStore {
|
|
298
|
+
async storePayload(payload: Buffer, messageId: string): Promise<PayloadRef> { /* ... */ }
|
|
299
|
+
async retrievePayload(ref: PayloadRef): Promise<Buffer> { /* ... */ }
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## API Reference
|
|
304
|
+
|
|
305
|
+
### Types
|
|
306
|
+
|
|
307
|
+
```typescript
|
|
308
|
+
// Handler result type
|
|
309
|
+
type HandlerResult = Either<'retryLater', 'success'>
|
|
310
|
+
|
|
311
|
+
// Pre-handler signature
|
|
312
|
+
type Prehandler<Message, Context, Output> = (
|
|
313
|
+
message: Message,
|
|
314
|
+
context: Context,
|
|
315
|
+
output: Output,
|
|
316
|
+
next: (result: PrehandlerResult) => void
|
|
317
|
+
) => void
|
|
318
|
+
|
|
319
|
+
// Barrier signature
|
|
320
|
+
type BarrierCallback<Message, Context, PrehandlerOutput, BarrierOutput> = (
|
|
321
|
+
message: Message,
|
|
322
|
+
context: Context,
|
|
323
|
+
preHandlerOutput: PrehandlerOutput
|
|
324
|
+
) => Promise<BarrierResult<BarrierOutput>>
|
|
325
|
+
|
|
326
|
+
// Barrier result
|
|
327
|
+
type BarrierResult<Output> =
|
|
328
|
+
| { isPassing: true; output: Output }
|
|
329
|
+
| { isPassing: false; output?: never }
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Utility Functions
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
// Environment utilities
|
|
336
|
+
isProduction(): boolean
|
|
337
|
+
reloadConfig(): void
|
|
338
|
+
|
|
339
|
+
// Date utilities
|
|
340
|
+
isRetryDateExceeded(timestamp: string | Date, maxRetryDuration: number): boolean
|
|
341
|
+
|
|
342
|
+
// Message parsing
|
|
343
|
+
parseMessage<T>(data: unknown, schema: ZodSchema<T>): ParseMessageResult<T>
|
|
344
|
+
|
|
345
|
+
// Wait utilities
|
|
346
|
+
waitAndRetry<T>(fn: () => Promise<T>, options: WaitAndRetryOptions): Promise<T>
|
|
347
|
+
|
|
348
|
+
// Object utilities
|
|
349
|
+
objectMatches(obj: unknown, pattern: unknown): boolean
|
|
350
|
+
isShallowSubset(subset: object, superset: object): boolean
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Links
|
|
354
|
+
|
|
355
|
+
- [Main Repository](https://github.com/kibertoad/message-queue-toolkit)
|
|
356
|
+
- [SQS Package](https://www.npmjs.com/package/@message-queue-toolkit/sqs)
|
|
357
|
+
- [SNS Package](https://www.npmjs.com/package/@message-queue-toolkit/sns)
|
|
358
|
+
- [AMQP Package](https://www.npmjs.com/package/@message-queue-toolkit/amqp)
|
|
359
|
+
- [GCP Pub/Sub Package](https://www.npmjs.com/package/@message-queue-toolkit/gcp-pubsub)
|
|
360
|
+
- [Kafka Package](https://www.npmjs.com/package/@message-queue-toolkit/kafka)
|
|
@@ -23,7 +23,7 @@ export declare class DomainEventEmitter<SupportedEvents extends CommonEventDefin
|
|
|
23
23
|
constructor(deps: DomainEventEmitterDependencies<SupportedEvents>, options?: {
|
|
24
24
|
handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
|
|
25
25
|
});
|
|
26
|
-
get handlerSpy(): PublicHandlerSpy<
|
|
26
|
+
get handlerSpy(): PublicHandlerSpy<CommonEventDefinitionConsumerSchemaType<SupportedEvents[number]>>;
|
|
27
27
|
dispose(): Promise<void>;
|
|
28
28
|
emit<SupportedEvent extends SupportedEvents[number]>(supportedEvent: SupportedEvent, data: Omit<CommonEventDefinitionPublisherSchemaType<SupportedEvent>, 'type'>, precedingMessageMetadata?: Partial<ConsumerMessageMetadataType>): Promise<Omit<CommonEventDefinitionConsumerSchemaType<SupportedEvent>, 'type'>>;
|
|
29
29
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export { createMultiStoreConfig, isMultiPayloadStoreConfig, } from './payload-st
|
|
|
16
16
|
export * from './queues/AbstractPublisherManager.ts';
|
|
17
17
|
export { AbstractQueueService, type Deserializer, type ResolvedMessage, } from './queues/AbstractQueueService.ts';
|
|
18
18
|
export type { BarrierCallback, BarrierResult, BarrierResultNegative, BarrierResultPositive, Handler, HandlerContainerOptions, PreHandlingOutputs, Prehandler, } from './queues/HandlerContainer.ts';
|
|
19
|
-
export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, type PrehandlerResult, } from './queues/HandlerContainer.ts';
|
|
19
|
+
export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, NO_MESSAGE_TYPE_FIELD, type PrehandlerResult, } from './queues/HandlerContainer.ts';
|
|
20
20
|
export { HandlerSpy, type HandlerSpyParams, type PublicHandlerSpy, resolveHandlerSpy, type SpyResultInput, } from './queues/HandlerSpy.ts';
|
|
21
21
|
export type { MessageSchemaContainerOptions } from './queues/MessageSchemaContainer.ts';
|
|
22
22
|
export { MessageSchemaContainer } from './queues/MessageSchemaContainer.ts';
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ export { isOffloadedPayloadPointerPayload, OFFLOADED_PAYLOAD_POINTER_PAYLOAD_SCH
|
|
|
14
14
|
export { createMultiStoreConfig, isMultiPayloadStoreConfig, } from "./payload-store/payloadStoreTypes.js";
|
|
15
15
|
export * from "./queues/AbstractPublisherManager.js";
|
|
16
16
|
export { AbstractQueueService, } from "./queues/AbstractQueueService.js";
|
|
17
|
-
export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, } from "./queues/HandlerContainer.js";
|
|
17
|
+
export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, NO_MESSAGE_TYPE_FIELD, } from "./queues/HandlerContainer.js";
|
|
18
18
|
export { HandlerSpy, resolveHandlerSpy, } from "./queues/HandlerSpy.js";
|
|
19
19
|
export { MessageSchemaContainer } from "./queues/MessageSchemaContainer.js";
|
|
20
20
|
export * from "./types/queueOptionsTypes.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,oDAAoD,CAAA;AAClE,OAAO,EAGL,0BAA0B,EAG1B,kBAAkB,GAEnB,MAAM,sDAAsD,CAAA;AAC7D,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EACL,gCAAgC,EAChC,wCAAwC,EAExC,kBAAkB,GAEnB,MAAM,mDAAmD,CAAA;AAS1D,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,cAAc,sCAAsC,CAAA;AACpD,OAAO,EACL,oBAAoB,GAGrB,MAAM,kCAAkC,CAAA;AAWzC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,cAAc,wBAAwB,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,cAAc,oDAAoD,CAAA;AAClE,OAAO,EAGL,0BAA0B,EAG1B,kBAAkB,GAEnB,MAAM,sDAAsD,CAAA;AAC7D,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EACL,gCAAgC,EAChC,wCAAwC,EAExC,kBAAkB,GAEnB,MAAM,mDAAmD,CAAA;AAS1D,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AAC7C,cAAc,sCAAsC,CAAA;AACpD,OAAO,EACL,oBAAoB,GAGrB,MAAM,kCAAkC,CAAA;AAWzC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,qBAAqB,GAEtB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,UAAU,EAGV,iBAAiB,GAElB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAU3E,cAAc,8BAA8B,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAA2B,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -83,10 +83,21 @@ export type HandlerContainerOptions<MessagePayloadSchemas extends object, Execut
|
|
|
83
83
|
messageHandlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[];
|
|
84
84
|
messageTypeField: string;
|
|
85
85
|
};
|
|
86
|
+
/**
|
|
87
|
+
* Use this constant as `messageTypeField` value when your consumer should accept
|
|
88
|
+
* all message types without routing by type. When used, a single handler will
|
|
89
|
+
* process all incoming messages regardless of their type field value.
|
|
90
|
+
*/
|
|
91
|
+
export declare const NO_MESSAGE_TYPE_FIELD = "";
|
|
86
92
|
export declare class HandlerContainer<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined> {
|
|
87
93
|
private readonly messageHandlers;
|
|
88
94
|
private readonly messageTypeField;
|
|
89
95
|
constructor(options: HandlerContainerOptions<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>);
|
|
90
|
-
|
|
96
|
+
/**
|
|
97
|
+
* Resolves a handler for the given message type.
|
|
98
|
+
* When messageTypeField is NO_MESSAGE_TYPE_FIELD (empty string), pass undefined as messageType
|
|
99
|
+
* to get the default handler.
|
|
100
|
+
*/
|
|
101
|
+
resolveHandler<PrehandlerOutput = undefined, BarrierOutput = undefined>(messageType: string | undefined): MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, BarrierOutput>;
|
|
91
102
|
private resolveHandlerMap;
|
|
92
103
|
}
|
|
@@ -73,6 +73,13 @@ export class MessageHandlerConfigBuilder {
|
|
|
73
73
|
return this.configs;
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Use this constant as `messageTypeField` value when your consumer should accept
|
|
78
|
+
* all message types without routing by type. When used, a single handler will
|
|
79
|
+
* process all incoming messages regardless of their type field value.
|
|
80
|
+
*/
|
|
81
|
+
export const NO_MESSAGE_TYPE_FIELD = '';
|
|
82
|
+
const DEFAULT_HANDLER_KEY = 'NO_MESSAGE_TYPE';
|
|
76
83
|
export class HandlerContainer {
|
|
77
84
|
messageHandlers;
|
|
78
85
|
messageTypeField;
|
|
@@ -80,19 +87,31 @@ export class HandlerContainer {
|
|
|
80
87
|
this.messageTypeField = options.messageTypeField;
|
|
81
88
|
this.messageHandlers = this.resolveHandlerMap(options.messageHandlers);
|
|
82
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Resolves a handler for the given message type.
|
|
92
|
+
* When messageTypeField is NO_MESSAGE_TYPE_FIELD (empty string), pass undefined as messageType
|
|
93
|
+
* to get the default handler.
|
|
94
|
+
*/
|
|
83
95
|
resolveHandler(messageType) {
|
|
84
|
-
const
|
|
96
|
+
const handlerKey = messageType ?? DEFAULT_HANDLER_KEY;
|
|
97
|
+
const handler = this.messageHandlers[handlerKey];
|
|
85
98
|
if (!handler) {
|
|
86
|
-
throw new Error(`Unsupported message type: ${
|
|
99
|
+
throw new Error(`Unsupported message type: ${handlerKey}`);
|
|
87
100
|
}
|
|
88
101
|
// @ts-expect-error
|
|
89
102
|
return handler;
|
|
90
103
|
}
|
|
91
104
|
resolveHandlerMap(supportedHandlers) {
|
|
92
105
|
return supportedHandlers.reduce((acc, entry) => {
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
106
|
+
// When messageTypeField is empty (NO_MESSAGE_TYPE_FIELD), use DEFAULT_HANDLER_KEY
|
|
107
|
+
// This allows a single handler to process all message types
|
|
108
|
+
let messageType;
|
|
109
|
+
if (this.messageTypeField) {
|
|
110
|
+
// @ts-expect-error
|
|
111
|
+
messageType = entry.schema.shape[this.messageTypeField]?.value;
|
|
112
|
+
}
|
|
113
|
+
const handlerKey = messageType ?? DEFAULT_HANDLER_KEY;
|
|
114
|
+
acc[handlerKey] = entry;
|
|
96
115
|
return acc;
|
|
97
116
|
}, {});
|
|
98
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerContainer.js","sourceRoot":"","sources":["../../lib/queues/HandlerContainer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AA+CxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAuB,OAA6B,EAAE,EAAE,CAAC,OAAO,CAAA;AAkBnG,MAAM,OAAO,oBAAoB;IAMf,MAAM,CAAiC;IACvC,UAAU,CAAwB;IAClC,OAAO,CAKtB;IACe,mBAAmB,CAAoC;IACvD,iBAAiB,CAKhC;IACe,WAAW,CAIxB;IAEH,YACE,MAAuC,EACvC,OAAyF,EACzF,OAKC,EACD,eAAuC;QAEvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,eAAe,CAAA;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,mBAAmB,CAAA;QAC9E,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,CAAA;QACnD,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,EAAE,CAAA;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,2BAA2B;IAKrB,OAAO,CAMrB;IAEH;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;IACnB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,SAAS,CACP,MAA+D,EAC/D,OAAyF,EACzF,OAKC;QAED,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC;YACnD,CAAC,CAAC,aAAa;gBACZ,MAAM,CAAC,cAAkD;YAC5D,CAAC,CAAC,MAAM,CAAA;QACV,MAAM,UAAU,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;QAEvE,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,oBAAoB,CAMtB,aAAa;QACb,mBAAmB;QACnB,OAAO,EACP,OAAO,EACP,UAAU,CACX,CACF,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;AAuBD,MAAM,OAAO,gBAAgB;IAKV,eAAe,CAG/B;IACgB,gBAAgB,CAAQ;IAEzC,YACE,OAA2F;QAE3F,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAChD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IACxE,CAAC;
|
|
1
|
+
{"version":3,"file":"HandlerContainer.js","sourceRoot":"","sources":["../../lib/queues/HandlerContainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ export declare class HandlerSpy<MessagePayloadSchemas extends object> {
|
|
|
29
29
|
checkForMessage<T extends MessagePayloadSchemas>(expectedFields: DeepPartial<T>, status?: MessageProcessingResultStatus): SpyResultOutput<T> | undefined;
|
|
30
30
|
waitForMessage<T extends MessagePayloadSchemas>(expectedFields: DeepPartial<T>, status?: MessageProcessingResultStatus): Promise<SpyResultOutput<T>>;
|
|
31
31
|
clear(): void;
|
|
32
|
+
getAllReceivedMessages(): SpyResultOutput<MessagePayloadSchemas>[];
|
|
32
33
|
addProcessedMessage(processingResult: SpyResultInput<MessagePayloadSchemas>, messageId?: string): void;
|
|
33
34
|
}
|
|
34
35
|
export declare function resolveHandlerSpy<T extends object>(queueOptions: {
|
|
@@ -56,6 +56,9 @@ export class HandlerSpy {
|
|
|
56
56
|
clear() {
|
|
57
57
|
this.messageBuffer.clear();
|
|
58
58
|
}
|
|
59
|
+
getAllReceivedMessages() {
|
|
60
|
+
return Object.values(this.messageBuffer.items).map((item) => item.value);
|
|
61
|
+
}
|
|
59
62
|
addProcessedMessage(processingResult, messageId) {
|
|
60
63
|
const resolvedMessageId = processingResult.message?.[this.messageIdField] ?? messageId ?? randomUUID();
|
|
61
64
|
const resolvedMessageType = processingResult.message?.[this.messageTypeField] ?? 'FAILED_TO_RESOLVE';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerSpy.js","sourceRoot":"","sources":["../../lib/queues/HandlerSpy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HandlerSpy.js","sourceRoot":"","sources":["../../lib/queues/HandlerSpy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@message-queue-toolkit/core",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently",
|
|
6
6
|
"maintainers": [
|
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
"zod": ">=3.25.76 <5.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@biomejs/biome": "^2.3.
|
|
40
|
+
"@biomejs/biome": "^2.3.8",
|
|
41
41
|
"@lokalise/biome-config": "^3.1.0",
|
|
42
42
|
"@lokalise/tsconfig": "^3.0.0",
|
|
43
|
-
"@types/node": "^24.
|
|
43
|
+
"@types/node": "^24.10.1",
|
|
44
44
|
"@types/tmp": "^0.2.6",
|
|
45
45
|
"@vitest/coverage-v8": "^3.2.4",
|
|
46
46
|
"awilix": "^12.0.5",
|