@message-queue-toolkit/sqs 22.3.0 → 22.5.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 +2615 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/sqs/AbstractSqsConsumer.d.ts +66 -2
- package/dist/sqs/AbstractSqsConsumer.js +274 -21
- package/dist/sqs/AbstractSqsConsumer.js.map +1 -1
- package/dist/sqs/AbstractSqsPublisher.d.ts +38 -2
- package/dist/sqs/AbstractSqsPublisher.js +44 -1
- package/dist/sqs/AbstractSqsPublisher.js.map +1 -1
- package/dist/sqs/AbstractSqsService.d.ts +10 -0
- package/dist/sqs/AbstractSqsService.js +3 -1
- package/dist/sqs/AbstractSqsService.js.map +1 -1
- package/dist/utils/eventBridgeSchemaBuilder.d.ts +85 -0
- package/dist/utils/eventBridgeSchemaBuilder.js +81 -0
- package/dist/utils/eventBridgeSchemaBuilder.js.map +1 -0
- package/dist/utils/sqsAttributeUtils.d.ts +1 -1
- package/dist/utils/sqsAttributeUtils.js +1 -1
- package/dist/utils/sqsInitter.d.ts +1 -1
- package/dist/utils/sqsInitter.js +7 -3
- package/dist/utils/sqsInitter.js.map +1 -1
- package/dist/utils/sqsUtils.d.ts +19 -1
- package/dist/utils/sqsUtils.js +62 -2
- package/dist/utils/sqsUtils.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,19 +2,50 @@ import type { Either } from '@lokalise/node-core';
|
|
|
2
2
|
import { type AsyncPublisher, type BarrierResult, type MessageInvalidFormatError, type MessageValidationError, type OffloadedPayloadPointerPayload, type QueuePublisherOptions, type ResolvedMessage } from '@message-queue-toolkit/core';
|
|
3
3
|
import type { ZodSchema } from 'zod/v4';
|
|
4
4
|
import type { SQSMessage } from '../types/MessageTypes.ts';
|
|
5
|
-
import type { SQSCreationConfig, SQSDependencies, SQSQueueLocatorType } from './AbstractSqsService.ts';
|
|
5
|
+
import type { SQSCreationConfig, SQSDependencies, SQSOptions, SQSQueueLocatorType } from './AbstractSqsService.ts';
|
|
6
6
|
import { AbstractSqsService } from './AbstractSqsService.ts';
|
|
7
7
|
export type SQSMessageOptions = {
|
|
8
8
|
MessageGroupId?: string;
|
|
9
9
|
MessageDeduplicationId?: string;
|
|
10
10
|
};
|
|
11
|
+
type BaseSQSPublisherOptions<MessagePayloadType extends object, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends SQSQueueLocatorType = SQSQueueLocatorType> = QueuePublisherOptions<CreationConfigType, QueueLocatorType, MessagePayloadType> & Omit<SQSOptions<CreationConfigType, QueueLocatorType>, 'fifoQueue'>;
|
|
12
|
+
/**
|
|
13
|
+
* SQS Publisher options with type-safe FIFO queue configuration.
|
|
14
|
+
* When fifoQueue is true, messageGroupIdField and defaultMessageGroupId are available.
|
|
15
|
+
* When fifoQueue is false or omitted, these fields are not allowed.
|
|
16
|
+
*/
|
|
17
|
+
export type SQSPublisherOptions<MessagePayloadType extends object, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends SQSQueueLocatorType = SQSQueueLocatorType> = BaseSQSPublisherOptions<MessagePayloadType, CreationConfigType, QueueLocatorType> & ({
|
|
18
|
+
/**
|
|
19
|
+
* Set to true for FIFO queues. Enables messageGroupIdField and defaultMessageGroupId options.
|
|
20
|
+
*/
|
|
21
|
+
fifoQueue: true;
|
|
22
|
+
/**
|
|
23
|
+
* Field name in the message payload to use as MessageGroupId for FIFO queues.
|
|
24
|
+
* If not provided, MessageGroupId must be specified in publish options.
|
|
25
|
+
*/
|
|
26
|
+
messageGroupIdField?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Default MessageGroupId to use when messageGroupIdField is not present in the message.
|
|
29
|
+
* If not provided and messageGroupIdField is not found, MessageGroupId must be specified in publish options.
|
|
30
|
+
*/
|
|
31
|
+
defaultMessageGroupId?: string;
|
|
32
|
+
} | {
|
|
33
|
+
/**
|
|
34
|
+
* Set to false or omit for standard (non-FIFO) queues.
|
|
35
|
+
*/
|
|
36
|
+
fifoQueue?: false;
|
|
37
|
+
messageGroupIdField?: never;
|
|
38
|
+
defaultMessageGroupId?: never;
|
|
39
|
+
});
|
|
11
40
|
export declare const PAYLOAD_OFFLOADING_ATTRIBUTE_PREFIX = "payloadOffloading.";
|
|
12
41
|
export declare const OFFLOADED_PAYLOAD_SIZE_ATTRIBUTE = "payloadOffloading.size";
|
|
13
42
|
export declare abstract class AbstractSqsPublisher<MessagePayloadType extends object> extends AbstractSqsService<MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SQSMessageOptions> {
|
|
14
43
|
private readonly messageSchemaContainer;
|
|
15
44
|
private readonly isDeduplicationEnabled;
|
|
45
|
+
private readonly messageGroupIdField?;
|
|
46
|
+
private readonly defaultMessageGroupId?;
|
|
16
47
|
private initPromise?;
|
|
17
|
-
constructor(dependencies: SQSDependencies, options:
|
|
48
|
+
constructor(dependencies: SQSDependencies, options: SQSPublisherOptions<MessagePayloadType>);
|
|
18
49
|
publish(message: MessagePayloadType, options?: SQSMessageOptions): Promise<void>;
|
|
19
50
|
protected resolveNextFunction(): () => void;
|
|
20
51
|
protected resolveMessage(_message: SQSMessage): Either<MessageInvalidFormatError | MessageValidationError, ResolvedMessage>;
|
|
@@ -24,4 +55,9 @@ export declare abstract class AbstractSqsPublisher<MessagePayloadType extends ob
|
|
|
24
55
|
protected isDeduplicationEnabledForMessage(message: MessagePayloadType): boolean;
|
|
25
56
|
protected resolveSchema(message: MessagePayloadType): Either<Error, ZodSchema<MessagePayloadType>>;
|
|
26
57
|
protected sendMessage(payload: MessagePayloadType | OffloadedPayloadPointerPayload, options: SQSMessageOptions): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Resolves FIFO-specific options (MessageGroupId, MessageDeduplicationId)
|
|
60
|
+
*/
|
|
61
|
+
private resolveFifoOptions;
|
|
27
62
|
}
|
|
63
|
+
export {};
|
|
@@ -9,11 +9,15 @@ export const OFFLOADED_PAYLOAD_SIZE_ATTRIBUTE = `${PAYLOAD_OFFLOADING_ATTRIBUTE_
|
|
|
9
9
|
export class AbstractSqsPublisher extends AbstractSqsService {
|
|
10
10
|
messageSchemaContainer;
|
|
11
11
|
isDeduplicationEnabled;
|
|
12
|
+
messageGroupIdField;
|
|
13
|
+
defaultMessageGroupId;
|
|
12
14
|
initPromise;
|
|
13
15
|
constructor(dependencies, options) {
|
|
14
16
|
super(dependencies, options);
|
|
15
17
|
this.messageSchemaContainer = this.resolvePublisherMessageSchemaContainer(options);
|
|
16
18
|
this.isDeduplicationEnabled = !!options.enablePublisherDeduplication;
|
|
19
|
+
this.messageGroupIdField = options.messageGroupIdField;
|
|
20
|
+
this.defaultMessageGroupId = options.defaultMessageGroupId;
|
|
17
21
|
}
|
|
18
22
|
async publish(message, options = {}) {
|
|
19
23
|
const messageSchemaResult = this.resolveSchema(message);
|
|
@@ -38,6 +42,9 @@ export class AbstractSqsPublisher extends AbstractSqsService {
|
|
|
38
42
|
this.logMessage(resolvedLogMessage);
|
|
39
43
|
}
|
|
40
44
|
message = this.updateInternalProperties(message);
|
|
45
|
+
// Resolve FIFO options from original message BEFORE offloading
|
|
46
|
+
// (offloaded payload won't have user fields needed for messageGroupIdField)
|
|
47
|
+
const resolvedOptions = this.resolveFifoOptions(message, options);
|
|
41
48
|
const maybeOffloadedPayloadMessage = await this.offloadMessagePayloadIfNeeded(message, () => calculateOutgoingMessageSize(message));
|
|
42
49
|
if (this.isDeduplicationEnabledForMessage(parsedMessage) &&
|
|
43
50
|
(await this.deduplicateMessage(parsedMessage, DeduplicationRequesterEnum.Publisher))
|
|
@@ -50,7 +57,7 @@ export class AbstractSqsPublisher extends AbstractSqsService {
|
|
|
50
57
|
});
|
|
51
58
|
return;
|
|
52
59
|
}
|
|
53
|
-
await this.sendMessage(maybeOffloadedPayloadMessage,
|
|
60
|
+
await this.sendMessage(maybeOffloadedPayloadMessage, resolvedOptions);
|
|
54
61
|
this.handleMessageProcessed({
|
|
55
62
|
message: parsedMessage,
|
|
56
63
|
processingResult: { status: 'published' },
|
|
@@ -100,6 +107,7 @@ export class AbstractSqsPublisher extends AbstractSqsService {
|
|
|
100
107
|
}
|
|
101
108
|
async sendMessage(payload, options) {
|
|
102
109
|
const attributes = resolveOutgoingMessageAttributes(payload);
|
|
110
|
+
// Options are already resolved in publish() before offloading
|
|
103
111
|
const command = new SendMessageCommand({
|
|
104
112
|
QueueUrl: this.queueUrl,
|
|
105
113
|
MessageBody: JSON.stringify(payload),
|
|
@@ -108,5 +116,40 @@ export class AbstractSqsPublisher extends AbstractSqsService {
|
|
|
108
116
|
});
|
|
109
117
|
await this.sqsClient.send(command);
|
|
110
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Resolves FIFO-specific options (MessageGroupId, MessageDeduplicationId)
|
|
121
|
+
*/
|
|
122
|
+
resolveFifoOptions(payload, options) {
|
|
123
|
+
if (!this.isFifoQueue) {
|
|
124
|
+
return options;
|
|
125
|
+
}
|
|
126
|
+
const resolvedOptions = { ...options };
|
|
127
|
+
// Resolve MessageGroupId if not provided
|
|
128
|
+
if (!resolvedOptions.MessageGroupId) {
|
|
129
|
+
if (this.messageGroupIdField) {
|
|
130
|
+
const messageGroupId = payload[this.messageGroupIdField];
|
|
131
|
+
if (typeof messageGroupId === 'string') {
|
|
132
|
+
resolvedOptions.MessageGroupId = messageGroupId;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Fallback to default if still not set
|
|
136
|
+
if (!resolvedOptions.MessageGroupId && this.defaultMessageGroupId) {
|
|
137
|
+
resolvedOptions.MessageGroupId = this.defaultMessageGroupId;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Validate that MessageGroupId is present for FIFO queues
|
|
141
|
+
if (!resolvedOptions.MessageGroupId) {
|
|
142
|
+
throw new InternalError({
|
|
143
|
+
message: 'MessageGroupId is required for FIFO queues. Provide it in publish options, configure messageGroupIdField, or set defaultMessageGroupId.',
|
|
144
|
+
errorCode: 'FIFO_MESSAGE_GROUP_ID_REQUIRED',
|
|
145
|
+
details: {
|
|
146
|
+
queueName: this.queueName,
|
|
147
|
+
queueUrl: this.queueUrl,
|
|
148
|
+
isFifoQueue: this.isFifoQueue,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return resolvedOptions;
|
|
153
|
+
}
|
|
111
154
|
}
|
|
112
155
|
//# sourceMappingURL=AbstractSqsPublisher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSqsPublisher.js","sourceRoot":"","sources":["../../lib/sqs/AbstractSqsPublisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAGL,0BAA0B,GAO3B,MAAM,6BAA6B,CAAA;AAIpC,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"AbstractSqsPublisher.js","sourceRoot":"","sources":["../../lib/sqs/AbstractSqsPublisher.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,11 +36,21 @@ export type SQSQueueLocatorType = {
|
|
|
36
36
|
queueName: string;
|
|
37
37
|
queueUrl?: never;
|
|
38
38
|
};
|
|
39
|
+
export type SQSQueueConfig = {
|
|
40
|
+
/**
|
|
41
|
+
* Indicates whether this is a FIFO queue.
|
|
42
|
+
* FIFO queues must have names ending with .fifo suffix.
|
|
43
|
+
* When true, MessageGroupId is required for all messages.
|
|
44
|
+
*/
|
|
45
|
+
fifoQueue?: boolean;
|
|
46
|
+
};
|
|
47
|
+
export type SQSOptions<CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends object = SQSQueueLocatorType> = QueueOptions<CreationConfigType, QueueLocatorType> & SQSQueueConfig;
|
|
39
48
|
export declare abstract class AbstractSqsService<MessagePayloadType extends object, QueueLocatorType extends object = SQSQueueLocatorType, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, SQSOptionsType extends QueueOptions<CreationConfigType, QueueLocatorType> = QueueOptions<CreationConfigType, QueueLocatorType>, DependenciesType extends SQSDependencies = SQSDependencies, PrehandlerOutput = unknown, ExecutionContext = unknown> extends AbstractQueueService<MessagePayloadType, SQSMessage, DependenciesType, CreationConfigType, QueueLocatorType, SQSOptionsType, PrehandlerOutput, ExecutionContext> {
|
|
40
49
|
protected readonly sqsClient: SQSClient;
|
|
41
50
|
protected queueName: string;
|
|
42
51
|
protected queueUrl: string;
|
|
43
52
|
protected queueArn: string;
|
|
53
|
+
protected readonly isFifoQueue: boolean;
|
|
44
54
|
constructor(dependencies: DependenciesType, options: SQSOptionsType);
|
|
45
55
|
init(): Promise<void>;
|
|
46
56
|
close(): Promise<void>;
|
|
@@ -12,15 +12,17 @@ export class AbstractSqsService extends AbstractQueueService {
|
|
|
12
12
|
queueUrl;
|
|
13
13
|
// @ts-expect-error
|
|
14
14
|
queueArn;
|
|
15
|
+
isFifoQueue;
|
|
15
16
|
constructor(dependencies, options) {
|
|
16
17
|
super(dependencies, options);
|
|
17
18
|
this.sqsClient = dependencies.sqsClient;
|
|
19
|
+
this.isFifoQueue = options.fifoQueue ?? false;
|
|
18
20
|
}
|
|
19
21
|
async init() {
|
|
20
22
|
if (this.deletionConfig && this.creationConfig) {
|
|
21
23
|
await deleteSqs(this.sqsClient, this.deletionConfig, this.creationConfig);
|
|
22
24
|
}
|
|
23
|
-
const { queueName, queueUrl, queueArn } = await initSqs(this.sqsClient, this.locatorConfig, this.creationConfig);
|
|
25
|
+
const { queueName, queueUrl, queueArn } = await initSqs(this.sqsClient, this.locatorConfig, this.creationConfig, this.isFifoQueue);
|
|
24
26
|
this.queueName = queueName;
|
|
25
27
|
this.queueUrl = queueUrl;
|
|
26
28
|
this.queueArn = queueArn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractSqsService.js","sourceRoot":"","sources":["../../lib/sqs/AbstractSqsService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAE3D,kGAAkG;AAClG,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAA,CAAC,QAAQ;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"AbstractSqsService.js","sourceRoot":"","sources":["../../lib/sqs/AbstractSqsService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAE3D,kGAAkG;AAClG,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAA,CAAC,QAAQ;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AAuDjE,MAAM,OAAgB,kBAWpB,SAAQ,oBAST;IACoB,SAAS,CAAW;IAEvC,mBAAmB;IACT,SAAS,CAAQ;IAC3B,mBAAmB;IACT,QAAQ,CAAQ;IAC1B,mBAAmB;IACT,QAAQ,CAAQ;IACP,WAAW,CAAS;IAEvC,YAAY,YAA8B,EAAE,OAAuB;QACjE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;QACvC,IAAI,CAAC,WAAW,GAAI,OAA0B,CAAC,SAAS,IAAI,KAAK,CAAA;IACnE,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC3E,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,CACrD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,WAAW,CACjB,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;IAEe,KAAK;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ZodType } from 'zod/v4';
|
|
2
|
+
import z from 'zod/v4';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a typed EventBridge event schema with a custom detail payload.
|
|
5
|
+
*
|
|
6
|
+
* @template T - The Zod schema type for the detail payload
|
|
7
|
+
* @param detailSchema - Zod schema for the 'detail' field
|
|
8
|
+
* @param detailType - Optional literal value for 'detail-type' field (for routing)
|
|
9
|
+
* @returns A Zod schema for the complete EventBridge event with typed detail
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const USER_CREATED_DETAIL = z.object({
|
|
14
|
+
* userId: z.string(),
|
|
15
|
+
* email: z.string().email(),
|
|
16
|
+
* timestamp: z.string(),
|
|
17
|
+
* })
|
|
18
|
+
*
|
|
19
|
+
* // With generic detail-type (for test schemas)
|
|
20
|
+
* const USER_CREATED_EVENT = createEventBridgeSchema(USER_CREATED_DETAIL)
|
|
21
|
+
*
|
|
22
|
+
* // With literal detail-type (for routing in consumers)
|
|
23
|
+
* const USER_CREATED_ENVELOPE = createEventBridgeSchema(
|
|
24
|
+
* USER_CREATED_DETAIL,
|
|
25
|
+
* 'app.user.created'
|
|
26
|
+
* )
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function createEventBridgeSchema<T extends ZodType>(detailSchema: T, detailType?: string): z.ZodObject<{
|
|
30
|
+
version: z.ZodString;
|
|
31
|
+
id: z.ZodString;
|
|
32
|
+
'detail-type': z.ZodString;
|
|
33
|
+
source: z.ZodString;
|
|
34
|
+
account: z.ZodString;
|
|
35
|
+
time: z.ZodString;
|
|
36
|
+
region: z.ZodString;
|
|
37
|
+
resources: z.ZodArray<z.ZodString>;
|
|
38
|
+
detail: T;
|
|
39
|
+
}, z.core.$strip> | z.ZodObject<{
|
|
40
|
+
version: z.ZodString;
|
|
41
|
+
id: z.ZodString;
|
|
42
|
+
source: z.ZodString;
|
|
43
|
+
account: z.ZodString;
|
|
44
|
+
time: z.ZodString;
|
|
45
|
+
region: z.ZodString;
|
|
46
|
+
resources: z.ZodArray<z.ZodString>;
|
|
47
|
+
detail: T;
|
|
48
|
+
'detail-type': z.ZodLiteral<string>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
/**
|
|
51
|
+
* Helper to extract just the detail type from an EventBridge schema.
|
|
52
|
+
* Useful when you need the payload type for handlers.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const USER_CREATED_EVENT = createEventBridgeSchema(USER_CREATED_DETAIL)
|
|
57
|
+
* type UserCreatedDetail = EventBridgeDetail<typeof USER_CREATED_EVENT>
|
|
58
|
+
* // Same as: z.infer<typeof USER_CREATED_DETAIL>
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export type EventBridgeDetail<T> = T extends z.ZodObject<infer U> ? U extends {
|
|
62
|
+
detail: infer D;
|
|
63
|
+
} ? D extends ZodType ? z.infer<D> : never : never : never;
|
|
64
|
+
/**
|
|
65
|
+
* Creates multiple EventBridge event schemas for different detail types.
|
|
66
|
+
* Useful when you have multiple event types from the same source.
|
|
67
|
+
*
|
|
68
|
+
* @param detailSchemas - Record of event names to detail schemas
|
|
69
|
+
* @returns Record of event names to complete EventBridge schemas
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const EVENTS = createEventBridgeSchemas({
|
|
74
|
+
* userCreated: z.object({ userId: z.string(), email: z.string() }),
|
|
75
|
+
* userUpdated: z.object({ userId: z.string(), changes: z.record(z.any()) }),
|
|
76
|
+
* userDeleted: z.object({ userId: z.string() }),
|
|
77
|
+
* })
|
|
78
|
+
*
|
|
79
|
+
* type UserCreatedEvent = z.infer<typeof EVENTS.userCreated>
|
|
80
|
+
* type UserUpdatedEvent = z.infer<typeof EVENTS.userUpdated>
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function createEventBridgeSchemas<T extends Record<string, ZodType>>(detailSchemas: T): {
|
|
84
|
+
[K in keyof T]: ReturnType<typeof createEventBridgeSchema<T[K]>>;
|
|
85
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import z from 'zod/v4';
|
|
2
|
+
/**
|
|
3
|
+
* Base EventBridge envelope schema (without detail typing)
|
|
4
|
+
*/
|
|
5
|
+
const EVENT_BRIDGE_BASE_SCHEMA = z.object({
|
|
6
|
+
version: z.string(),
|
|
7
|
+
id: z.string(),
|
|
8
|
+
'detail-type': z.string(),
|
|
9
|
+
source: z.string(),
|
|
10
|
+
account: z.string(),
|
|
11
|
+
time: z.string(),
|
|
12
|
+
region: z.string(),
|
|
13
|
+
resources: z.array(z.string()),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Creates a typed EventBridge event schema with a custom detail payload.
|
|
17
|
+
*
|
|
18
|
+
* @template T - The Zod schema type for the detail payload
|
|
19
|
+
* @param detailSchema - Zod schema for the 'detail' field
|
|
20
|
+
* @param detailType - Optional literal value for 'detail-type' field (for routing)
|
|
21
|
+
* @returns A Zod schema for the complete EventBridge event with typed detail
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const USER_CREATED_DETAIL = z.object({
|
|
26
|
+
* userId: z.string(),
|
|
27
|
+
* email: z.string().email(),
|
|
28
|
+
* timestamp: z.string(),
|
|
29
|
+
* })
|
|
30
|
+
*
|
|
31
|
+
* // With generic detail-type (for test schemas)
|
|
32
|
+
* const USER_CREATED_EVENT = createEventBridgeSchema(USER_CREATED_DETAIL)
|
|
33
|
+
*
|
|
34
|
+
* // With literal detail-type (for routing in consumers)
|
|
35
|
+
* const USER_CREATED_ENVELOPE = createEventBridgeSchema(
|
|
36
|
+
* USER_CREATED_DETAIL,
|
|
37
|
+
* 'app.user.created'
|
|
38
|
+
* )
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function createEventBridgeSchema(detailSchema, detailType) {
|
|
42
|
+
const baseSchema = EVENT_BRIDGE_BASE_SCHEMA.extend({
|
|
43
|
+
detail: detailSchema,
|
|
44
|
+
});
|
|
45
|
+
if (detailType) {
|
|
46
|
+
return baseSchema.extend({
|
|
47
|
+
'detail-type': z.literal(detailType),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return baseSchema;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates multiple EventBridge event schemas for different detail types.
|
|
54
|
+
* Useful when you have multiple event types from the same source.
|
|
55
|
+
*
|
|
56
|
+
* @param detailSchemas - Record of event names to detail schemas
|
|
57
|
+
* @returns Record of event names to complete EventBridge schemas
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const EVENTS = createEventBridgeSchemas({
|
|
62
|
+
* userCreated: z.object({ userId: z.string(), email: z.string() }),
|
|
63
|
+
* userUpdated: z.object({ userId: z.string(), changes: z.record(z.any()) }),
|
|
64
|
+
* userDeleted: z.object({ userId: z.string() }),
|
|
65
|
+
* })
|
|
66
|
+
*
|
|
67
|
+
* type UserCreatedEvent = z.infer<typeof EVENTS.userCreated>
|
|
68
|
+
* type UserUpdatedEvent = z.infer<typeof EVENTS.userUpdated>
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export function createEventBridgeSchemas(detailSchemas) {
|
|
72
|
+
const result = {};
|
|
73
|
+
for (const key in detailSchemas) {
|
|
74
|
+
const schema = detailSchemas[key];
|
|
75
|
+
if (schema) {
|
|
76
|
+
result[key] = createEventBridgeSchema(schema);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=eventBridgeSchemaBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventBridgeSchemaBuilder.js","sourceRoot":"","sources":["../../lib/utils/eventBridgeSchemaBuilder.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,QAAQ,CAAA;AAEtB;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC/B,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,uBAAuB,CAAoB,YAAe,EAAE,UAAmB;IAC7F,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,CAAC;QACjD,MAAM,EAAE,YAAY;KACrB,CAAC,CAAA;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,MAAM,CAAC;YACvB,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;SACrC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC;AAqBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAgB;IAEhB,MAAM,MAAM,GAAG,EAA0E,CAAA;IAEzF,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAE3C,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SQSPolicyConfig } from '../sqs/AbstractSqsService.
|
|
1
|
+
import { type SQSPolicyConfig } from '../sqs/AbstractSqsService.ts';
|
|
2
2
|
export declare function generateQueuePublishForTopicPolicy(queueArn: string, supportedSnsTopicArnPrefix: string): string;
|
|
3
3
|
export declare function generateQueuePolicyFromPolicyConfig(queueArn: string, policyConfig: SQSPolicyConfig): string;
|
|
4
4
|
export declare function generateWildcardSqsArn(sqsQueueArnPrefix: string): string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// See https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_version.html
|
|
2
|
-
import { SQS_RESOURCE_ANY, SQS_RESOURCE_CURRENT_QUEUE, } from
|
|
2
|
+
import { SQS_RESOURCE_ANY, SQS_RESOURCE_CURRENT_QUEUE, } from "../sqs/AbstractSqsService.js";
|
|
3
3
|
const POLICY_VERSION = '2012-10-17';
|
|
4
4
|
export function generateQueuePublishForTopicPolicy(queueArn, supportedSnsTopicArnPrefix) {
|
|
5
5
|
return `{"Version":"${POLICY_VERSION}","Id":"__default_policy_ID","Statement":[{"Sid":"AllowSNSPublish","Effect":"Allow","Principal":{"AWS":"*"},"Action":"sqs:SendMessage","Resource":"${queueArn}","Condition":{"ArnLike":{"aws:SourceArn":"${supportedSnsTopicArnPrefix}"}}}]}`;
|
|
@@ -4,7 +4,7 @@ import type { SQSCreationConfig, SQSQueueLocatorType } from '../sqs/AbstractSqsS
|
|
|
4
4
|
export declare function deleteSqs(sqsClient: SQSClient, deletionConfig: DeletionConfig, creationConfig: SQSCreationConfig): Promise<void>;
|
|
5
5
|
export declare function updateQueueAttributes(sqsClient: SQSClient, queueUrl: string, attributes?: Partial<Record<QueueAttributeName, string>>): Promise<void>;
|
|
6
6
|
export declare function updateQueueTags(sqsClient: SQSClient, queueUrl: string, tags?: Record<string, string> | undefined): Promise<void>;
|
|
7
|
-
export declare function initSqs(sqsClient: SQSClient, locatorConfig?: Partial<SQSQueueLocatorType>, creationConfig?: SQSCreationConfig): Promise<{
|
|
7
|
+
export declare function initSqs(sqsClient: SQSClient, locatorConfig?: Partial<SQSQueueLocatorType>, creationConfig?: SQSCreationConfig, isFifoQueue?: boolean): Promise<{
|
|
8
8
|
queueArn: string;
|
|
9
9
|
queueUrl: string;
|
|
10
10
|
queueName: string;
|
package/dist/utils/sqsInitter.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SetQueueAttributesCommand, TagQueueCommand } from '@aws-sdk/client-sqs';
|
|
2
2
|
import { isProduction } from '@message-queue-toolkit/core';
|
|
3
|
-
import { assertQueue, deleteQueue, getQueueAttributes, resolveQueueUrlFromLocatorConfig, } from "./sqsUtils.js";
|
|
3
|
+
import { assertQueue, deleteQueue, getQueueAttributes, resolveQueueUrlFromLocatorConfig, validateFifoQueueName, } from "./sqsUtils.js";
|
|
4
4
|
export async function deleteSqs(sqsClient, deletionConfig, creationConfig) {
|
|
5
5
|
if (!deletionConfig.deleteIfExists) {
|
|
6
6
|
return;
|
|
@@ -27,7 +27,7 @@ export async function updateQueueTags(sqsClient, queueUrl, tags = {}) {
|
|
|
27
27
|
});
|
|
28
28
|
await sqsClient.send(command);
|
|
29
29
|
}
|
|
30
|
-
export async function initSqs(sqsClient, locatorConfig, creationConfig) {
|
|
30
|
+
export async function initSqs(sqsClient, locatorConfig, creationConfig, isFifoQueue) {
|
|
31
31
|
// reuse existing queue only
|
|
32
32
|
if (locatorConfig) {
|
|
33
33
|
const queueUrl = await resolveQueueUrlFromLocatorConfig(sqsClient, locatorConfig);
|
|
@@ -42,6 +42,10 @@ export async function initSqs(sqsClient, locatorConfig, creationConfig) {
|
|
|
42
42
|
const splitUrl = queueUrl.split('/');
|
|
43
43
|
// biome-ignore lint/style/noNonNullAssertion: It's ok
|
|
44
44
|
const queueName = splitUrl[splitUrl.length - 1];
|
|
45
|
+
// Validate FIFO queue name consistency
|
|
46
|
+
if (isFifoQueue !== undefined) {
|
|
47
|
+
validateFifoQueueName(queueName, isFifoQueue);
|
|
48
|
+
}
|
|
45
49
|
return { queueArn, queueUrl, queueName };
|
|
46
50
|
}
|
|
47
51
|
// create new queue if does not exist
|
|
@@ -54,7 +58,7 @@ export async function initSqs(sqsClient, locatorConfig, creationConfig) {
|
|
|
54
58
|
updateAttributesIfExists: creationConfig.updateAttributesIfExists,
|
|
55
59
|
forceTagUpdate: creationConfig.forceTagUpdate,
|
|
56
60
|
policyConfig: creationConfig.policyConfig,
|
|
57
|
-
});
|
|
61
|
+
}, isFifoQueue);
|
|
58
62
|
const queueName = creationConfig.queue.QueueName;
|
|
59
63
|
return { queueUrl, queueArn, queueName };
|
|
60
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqsInitter.js","sourceRoot":"","sources":["../../lib/utils/sqsInitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAI1D,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,gCAAgC,
|
|
1
|
+
{"version":3,"file":"sqsInitter.js","sourceRoot":"","sources":["../../lib/utils/sqsInitter.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/sqsUtils.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ type QueueAttributesResult = {
|
|
|
7
7
|
export declare function getQueueUrl(sqsClient: SQSClient, queueName: string): Promise<Either<'not_found', string>>;
|
|
8
8
|
export declare function getQueueAttributes(sqsClient: SQSClient, queueUrl: string, attributeNames?: QueueAttributeName[]): Promise<Either<'not_found', QueueAttributesResult>>;
|
|
9
9
|
export declare function resolveQueueUrlFromLocatorConfig(sqsClient: SQSClient, locatorConfig: Partial<SQSQueueLocatorType>): Promise<string>;
|
|
10
|
-
export declare function assertQueue(sqsClient: SQSClient, queueConfig: CreateQueueCommandInput, extraParams?: ExtraSQSCreationParams): Promise<{
|
|
10
|
+
export declare function assertQueue(sqsClient: SQSClient, queueConfig: CreateQueueCommandInput, extraParams?: ExtraSQSCreationParams, isFifoQueue?: boolean): Promise<{
|
|
11
11
|
queueUrl: string;
|
|
12
12
|
queueArn: string;
|
|
13
13
|
queueName: string | undefined;
|
|
@@ -24,4 +24,22 @@ export declare function deleteQueue(client: SQSClient, queueName: string, waitFo
|
|
|
24
24
|
*/
|
|
25
25
|
export declare function calculateOutgoingMessageSize(message: unknown): number;
|
|
26
26
|
export declare function calculateSqsMessageBodySize(messageBody: SendMessageCommandInput['MessageBody']): number;
|
|
27
|
+
/**
|
|
28
|
+
* Checks if a queue name indicates a FIFO queue (ends with .fifo)
|
|
29
|
+
*/
|
|
30
|
+
export declare function isFifoQueueName(queueName: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Validates that queue name matches the FIFO configuration flag
|
|
33
|
+
*/
|
|
34
|
+
export declare function validateFifoQueueName(queueName: string, isFifoQueue: boolean): void;
|
|
35
|
+
/**
|
|
36
|
+
* Validates FIFO queue configuration for creation
|
|
37
|
+
* - FIFO queues must have names ending with .fifo
|
|
38
|
+
* - If FifoQueue attribute is 'true', name must end with .fifo
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateFifoQueueConfiguration(queueName: string, attributes?: Partial<Record<QueueAttributeName, string>>, isFifoQueue?: boolean): void;
|
|
41
|
+
/**
|
|
42
|
+
* Detects if a queue is FIFO based on its attributes
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectFifoQueue(sqsClient: SQSClient, queueUrl: string, queueName?: string): Promise<boolean>;
|
|
27
45
|
export {};
|
package/dist/utils/sqsUtils.js
CHANGED
|
@@ -98,9 +98,12 @@ async function updateExistingQueue(sqsClient, queueUrl, queueConfig, extraParams
|
|
|
98
98
|
queueName: queueConfig.QueueName,
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
-
export async function assertQueue(sqsClient, queueConfig, extraParams) {
|
|
101
|
+
export async function assertQueue(sqsClient, queueConfig, extraParams, isFifoQueue) {
|
|
102
102
|
// biome-ignore lint/style/noNonNullAssertion: It's ok
|
|
103
|
-
const
|
|
103
|
+
const queueName = queueConfig.QueueName;
|
|
104
|
+
// Validate FIFO queue configuration before creating/updating
|
|
105
|
+
validateFifoQueueConfiguration(queueName, queueConfig.Attributes, isFifoQueue);
|
|
106
|
+
const queueUrlResult = await getQueueUrl(sqsClient, queueName);
|
|
104
107
|
const queueExists = !!queueUrlResult.result;
|
|
105
108
|
if (queueExists) {
|
|
106
109
|
return updateExistingQueue(sqsClient, queueUrlResult.result, queueConfig, extraParams);
|
|
@@ -190,4 +193,61 @@ export function calculateOutgoingMessageSize(message) {
|
|
|
190
193
|
export function calculateSqsMessageBodySize(messageBody) {
|
|
191
194
|
return messageBody ? Buffer.byteLength(messageBody, 'utf8') : 0;
|
|
192
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Checks if a queue name indicates a FIFO queue (ends with .fifo)
|
|
198
|
+
*/
|
|
199
|
+
export function isFifoQueueName(queueName) {
|
|
200
|
+
return queueName.endsWith('.fifo');
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Validates that queue name matches the FIFO configuration flag
|
|
204
|
+
*/
|
|
205
|
+
export function validateFifoQueueName(queueName, isFifoQueue) {
|
|
206
|
+
const hasFifoName = isFifoQueueName(queueName);
|
|
207
|
+
if (isFifoQueue && !hasFifoName) {
|
|
208
|
+
throw new Error(`FIFO queue names must end with .fifo suffix. Queue name: ${queueName}`);
|
|
209
|
+
}
|
|
210
|
+
if (!isFifoQueue && hasFifoName) {
|
|
211
|
+
throw new Error(`Queue name ends with .fifo but fifoQueue option is not set to true. Queue name: ${queueName}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Validates FIFO queue configuration for creation
|
|
216
|
+
* - FIFO queues must have names ending with .fifo
|
|
217
|
+
* - If FifoQueue attribute is 'true', name must end with .fifo
|
|
218
|
+
*/
|
|
219
|
+
export function validateFifoQueueConfiguration(queueName, attributes, isFifoQueue) {
|
|
220
|
+
const hasFifoAttribute = attributes?.FifoQueue === 'true';
|
|
221
|
+
const hasFifoName = isFifoQueueName(queueName);
|
|
222
|
+
// If explicit FIFO flag is provided, validate against it
|
|
223
|
+
if (isFifoQueue !== undefined) {
|
|
224
|
+
validateFifoQueueName(queueName, isFifoQueue);
|
|
225
|
+
// Also validate that attributes match if provided
|
|
226
|
+
if (attributes && hasFifoAttribute !== isFifoQueue) {
|
|
227
|
+
throw new Error(`FifoQueue attribute (${hasFifoAttribute}) does not match fifoQueue option (${isFifoQueue})`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Validate consistency between name and attributes
|
|
231
|
+
if (hasFifoAttribute && !hasFifoName) {
|
|
232
|
+
throw new Error(`FIFO queue names must end with .fifo suffix. Queue name: ${queueName}`);
|
|
233
|
+
}
|
|
234
|
+
if (hasFifoName && attributes && !hasFifoAttribute) {
|
|
235
|
+
throw new Error(`Queue name ends with .fifo but FifoQueue attribute is not set to 'true'. Queue name: ${queueName}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Detects if a queue is FIFO based on its attributes
|
|
240
|
+
*/
|
|
241
|
+
export async function detectFifoQueue(sqsClient, queueUrl, queueName) {
|
|
242
|
+
// First check the queue name if provided
|
|
243
|
+
if (queueName && isFifoQueueName(queueName)) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
// Fallback to checking queue attributes
|
|
247
|
+
const attributesResult = await getQueueAttributes(sqsClient, queueUrl, ['FifoQueue']);
|
|
248
|
+
if (attributesResult.error) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
return attributesResult.result?.attributes?.FifoQueue === 'true';
|
|
252
|
+
}
|
|
193
253
|
//# sourceMappingURL=sqsUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqsUtils.js","sourceRoot":"","sources":["../../lib/utils/sqsUtils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sqsUtils.js","sourceRoot":"","sources":["../../lib/utils/sqsUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@message-queue-toolkit/sqs",
|
|
3
|
-
"version": "22.
|
|
3
|
+
"version": "22.5.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "SQS adapter for message-queue-toolkit",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@aws-sdk/client-s3": "^3.812.0",
|
|
41
41
|
"@aws-sdk/client-sqs": "^3.812.0",
|
|
42
|
-
"@biomejs/biome": "^2.2
|
|
42
|
+
"@biomejs/biome": "^2.3.2",
|
|
43
43
|
"@lokalise/biome-config": "^3.1.0",
|
|
44
44
|
"@lokalise/tsconfig": "^3.0.0",
|
|
45
45
|
"@message-queue-toolkit/core": "*",
|