@message-queue-toolkit/sqs 22.4.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 CHANGED
@@ -26,6 +26,9 @@ AWS SQS (Simple Queue Service) implementation for the message-queue-toolkit. Pro
26
26
  - [Message Handlers](#message-handlers)
27
27
  - [Pre-handlers and Barriers](#pre-handlers-and-barriers)
28
28
  - [Handler Spies](#handler-spies)
29
+ - [Non-Standard Message Formats](#non-standard-message-formats)
30
+ - [EventBridge Events](#eventbridge-events)
31
+ - [Custom Message Structures](#custom-message-structures)
29
32
  - [FIFO Queues](#fifo-queues)
30
33
  - [FIFO Queue Requirements](#fifo-queue-requirements)
31
34
  - [Message Ordering](#message-ordering)
@@ -1670,6 +1673,308 @@ interface HandlerSpy<Message> {
1670
1673
  4. **Use in integration tests** - Handler spies are most valuable for integration tests, not unit tests
1671
1674
  5. **Don't use in production** - Handler spies add memory overhead (circular buffer of messages)
1672
1675
 
1676
+ ## Non-Standard Message Formats
1677
+
1678
+ The toolkit supports consuming messages that don't follow the standard message structure (with `type`, `id`, and `timestamp` fields at the root level). This is particularly useful for consuming events from external systems like AWS EventBridge, CloudWatch Events, or custom event sources.
1679
+
1680
+ ### EventBridge Events
1681
+
1682
+ AWS EventBridge events have a different structure than standard toolkit messages. They use:
1683
+ - `detail-type` instead of `type` (routing field at root level)
1684
+ - `time` instead of `timestamp`
1685
+ - `detail` for the actual payload (nested)
1686
+ - `id` for the message ID (same as default)
1687
+
1688
+ Handlers receive the full EventBridge envelope and can access the nested `detail` field directly.
1689
+
1690
+ #### Using the EventBridge Schema Builder
1691
+
1692
+ The toolkit provides helper functions to create properly typed EventBridge schemas:
1693
+
1694
+ ```typescript
1695
+ import {
1696
+ AbstractSqsConsumer, createEventBridgeSchema,
1697
+ } from '@message-queue-toolkit/sqs'
1698
+ import { MessageHandlerConfigBuilder } from '@message-queue-toolkit/core'
1699
+ import z from 'zod'
1700
+
1701
+ // Step 1: Define your detail (payload) schema
1702
+ const USER_PRESENCE_DETAIL = z.object({
1703
+ userId: z.string(),
1704
+ status: z.enum(['AVAILABLE', 'AWAY', 'BUSY', 'OFFLINE']),
1705
+ timestamp: z.string(),
1706
+ })
1707
+
1708
+ // Step 2: Create envelope schema with literal detail-type for routing
1709
+ const USER_PRESENCE_ENVELOPE = createEventBridgeSchema(
1710
+ USER_PRESENCE_DETAIL,
1711
+ 'user.presence.changed' // Literal value for routing
1712
+ )
1713
+
1714
+ // Step 3: Infer the envelope type (what handlers receive)
1715
+ type UserPresenceEvent = z.infer<typeof USER_PRESENCE_ENVELOPE>
1716
+ // {
1717
+ // version: string
1718
+ // id: string
1719
+ // 'detail-type': 'user.presence.changed' // Literal type for routing
1720
+ // source: string
1721
+ // account: string
1722
+ // time: string
1723
+ // region: string
1724
+ // resources: string[]
1725
+ // detail: {
1726
+ // userId: string
1727
+ // status: 'AVAILABLE' | 'AWAY' | 'BUSY' | 'OFFLINE'
1728
+ // timestamp: string
1729
+ // }
1730
+ // }
1731
+ ```
1732
+
1733
+ #### Creating an EventBridge Consumer
1734
+
1735
+ ```typescript
1736
+ class EventBridgeConsumer extends AbstractSqsConsumer<UserPresenceEvent, ExecutionContext> {
1737
+ constructor(dependencies: SQSConsumerDependencies) {
1738
+ super(dependencies, {
1739
+ creationConfig: {
1740
+ queue: { QueueName: 'eventbridge-events' },
1741
+ },
1742
+
1743
+ // Configure field mappings for EventBridge
1744
+ messageTypeField: 'detail-type', // EventBridge uses 'detail-type'
1745
+ messageIdField: 'id', // Standard, same as default
1746
+ messageTimestampField: 'time', // EventBridge uses 'time'
1747
+
1748
+ // Handlers receive the full EventBridge envelope
1749
+ handlers: new MessageHandlerConfigBuilder<UserPresenceEvent, ExecutionContext>()
1750
+ .addConfig(
1751
+ USER_PRESENCE_ENVELOPE, // Schema validates full envelope
1752
+ async (message, context) => {
1753
+ // message is the full EventBridge envelope
1754
+ // Access the detail field directly
1755
+ console.log('User status changed:', message.detail.userId, message.detail.status)
1756
+ return { result: 'success' as const }
1757
+ },
1758
+ )
1759
+ .build(),
1760
+ })
1761
+ }
1762
+ }
1763
+ ```
1764
+
1765
+ **Key Points:**
1766
+ - The envelope schema validates the full EventBridge message structure
1767
+ - The literal `detail-type` value in the schema is used for routing
1768
+ - Handlers receive the complete validated envelope
1769
+ - Access nested payload via `message.detail`
1770
+
1771
+ #### Multiple EventBridge Event Types
1772
+
1773
+ Handle multiple EventBridge event types with distinct detail-type values:
1774
+
1775
+ ```typescript
1776
+ import { createEventBridgeSchema } from '@message-queue-toolkit/sqs'
1777
+
1778
+ // Step 1: Define detail (payload) schemas
1779
+ const USER_PRESENCE_DETAIL = z.object({
1780
+ userId: z.string(),
1781
+ status: z.string(),
1782
+ timestamp: z.string(),
1783
+ })
1784
+
1785
+ const USER_ROUTING_STATUS_DETAIL = z.object({
1786
+ userId: z.string(),
1787
+ routingStatus: z.object({
1788
+ id: z.string(),
1789
+ status: z.string(),
1790
+ }),
1791
+ timestamp: z.string(),
1792
+ })
1793
+
1794
+ // Step 2: Create envelope schemas with literal detail-type values
1795
+ const USER_PRESENCE_ENVELOPE = createEventBridgeSchema(
1796
+ USER_PRESENCE_DETAIL,
1797
+ 'v2.users.{id}.presence' // Literal routing value
1798
+ )
1799
+
1800
+ const USER_ROUTING_STATUS_ENVELOPE = createEventBridgeSchema(
1801
+ USER_ROUTING_STATUS_DETAIL,
1802
+ 'v2.users.{id}.routing.status' // Literal routing value
1803
+ )
1804
+
1805
+ // Step 3: Union type for all event envelopes
1806
+ type SupportedEventBridgeEvents =
1807
+ | z.infer<typeof USER_PRESENCE_ENVELOPE>
1808
+ | z.infer<typeof USER_ROUTING_STATUS_ENVELOPE>
1809
+
1810
+ // Step 4: Consumer with multiple handlers
1811
+ class MultiEventConsumer extends AbstractSqsConsumer<SupportedEventBridgeEvents, ExecutionContext> {
1812
+ constructor(dependencies: SQSConsumerDependencies) {
1813
+ super(dependencies, {
1814
+ creationConfig: { queue: { QueueName: 'multi-event-queue' } },
1815
+
1816
+ messageTypeField: 'detail-type',
1817
+ messageTimestampField: 'time',
1818
+
1819
+ handlers: new MessageHandlerConfigBuilder<SupportedEventBridgeEvents, ExecutionContext>()
1820
+ .addConfig(
1821
+ USER_PRESENCE_ENVELOPE,
1822
+ async (message, context) => {
1823
+ // message.detail is typed as UserPresenceDetail
1824
+ console.log(`User ${message.detail.userId} status: ${message.detail.status}`)
1825
+ return { result: 'success' as const }
1826
+ }
1827
+ )
1828
+ .addConfig(
1829
+ USER_ROUTING_STATUS_ENVELOPE,
1830
+ async (message, context) => {
1831
+ // message.detail is typed as UserRoutingStatusDetail
1832
+ console.log(`User ${message.detail.userId} routing: ${message.detail.routingStatus.status}`)
1833
+ return { result: 'success' as const }
1834
+ }
1835
+ )
1836
+ .build(),
1837
+ })
1838
+ }
1839
+ }
1840
+ ```
1841
+
1842
+ #### Complete EventBridge Example
1843
+
1844
+ ```typescript
1845
+ import { SQSClient } from '@aws-sdk/client-sqs'
1846
+ import {
1847
+ AbstractSqsConsumer,
1848
+ createEventBridgeSchema,
1849
+ SqsConsumerErrorResolver,
1850
+ type SQSConsumerDependencies
1851
+ } from '@message-queue-toolkit/sqs'
1852
+ import { MessageHandlerConfigBuilder } from '@message-queue-toolkit/core'
1853
+ import z from 'zod'
1854
+
1855
+ // 1. Define the detail payload schema
1856
+ const USER_CREATED_DETAIL = z.object({
1857
+ userId: z.string(),
1858
+ email: z.string().email(),
1859
+ name: z.string(),
1860
+ createdAt: z.string(),
1861
+ })
1862
+
1863
+ // 2. Create envelope schema with literal detail-type for routing
1864
+ const USER_CREATED_ENVELOPE = createEventBridgeSchema(
1865
+ USER_CREATED_DETAIL,
1866
+ 'user.created' // Literal value for routing
1867
+ )
1868
+
1869
+ // 3. Type for the event envelope (what handlers receive)
1870
+ type UserCreatedEvent = z.infer<typeof USER_CREATED_ENVELOPE>
1871
+
1872
+ // 4. Create consumer
1873
+ class UserEventConsumer extends AbstractSqsConsumer<UserCreatedEvent> {
1874
+ constructor(dependencies: SQSConsumerDependencies) {
1875
+ super(dependencies, {
1876
+ creationConfig: {
1877
+ queue: { QueueName: 'user-events' },
1878
+ },
1879
+
1880
+ // EventBridge field mappings
1881
+ messageTypeField: 'detail-type',
1882
+ messageTimestampField: 'time',
1883
+
1884
+ handlers: new MessageHandlerConfigBuilder<UserCreatedEvent>()
1885
+ .addConfig(
1886
+ USER_CREATED_ENVELOPE,
1887
+ async (message) => {
1888
+ // message is the full EventBridge envelope
1889
+ // Access the detail field directly
1890
+ console.log(`New user created: ${message.detail.name} (${message.detail.email})`)
1891
+ await saveUserToDatabase(message.detail)
1892
+ return { result: 'success' as const }
1893
+ },
1894
+ )
1895
+ .build(),
1896
+ })
1897
+ }
1898
+ }
1899
+
1900
+ // 5. Use the consumer
1901
+ const sqsClient = new SQSClient({ region: 'us-east-1' })
1902
+ const consumer = new UserEventConsumer({
1903
+ sqsClient,
1904
+ consumerErrorResolver: new SqsConsumerErrorResolver(),
1905
+ errorReporter: { report: (error) => console.error(error) },
1906
+ logger: console,
1907
+ transactionObservabilityManager: undefined,
1908
+ })
1909
+
1910
+ await consumer.start()
1911
+
1912
+ // Example EventBridge event structure (for testing):
1913
+ const exampleEvent = {
1914
+ version: '0',
1915
+ id: '12345678-1234-1234-1234-123456789012',
1916
+ 'detail-type': 'user.created',
1917
+ source: 'my.application',
1918
+ account: '123456789012',
1919
+ time: '2025-01-15T12:00:00Z',
1920
+ region: 'us-east-1',
1921
+ resources: [],
1922
+ detail: {
1923
+ userId: 'user-123',
1924
+ email: 'user@example.com',
1925
+ name: 'John Doe',
1926
+ createdAt: '2025-01-15T12:00:00Z',
1927
+ },
1928
+ } satisfies UserCreatedEvent
1929
+ ```
1930
+
1931
+ ### Custom Message Structures
1932
+
1933
+ For other non-standard message formats, you can configure the field mappings:
1934
+
1935
+ ```typescript
1936
+ // Define your custom message schema
1937
+ const CUSTOM_MESSAGE_SCHEMA = z.object({
1938
+ eventType: z.literal('order.created'), // Routing field
1939
+ correlationId: z.string(),
1940
+ occurredAt: z.string(),
1941
+ data: z.object({
1942
+ orderId: z.string(),
1943
+ amount: z.number(),
1944
+ }),
1945
+ })
1946
+
1947
+ type CustomMessage = z.infer<typeof CUSTOM_MESSAGE_SCHEMA>
1948
+
1949
+ class CustomConsumer extends AbstractSqsConsumer<CustomMessage> {
1950
+ constructor(dependencies: SQSConsumerDependencies) {
1951
+ super(dependencies, {
1952
+ creationConfig: { queue: { QueueName: 'custom-queue' } },
1953
+
1954
+ // Map your custom field names
1955
+ messageTypeField: 'eventType', // Instead of 'type'
1956
+ messageIdField: 'correlationId', // Instead of 'id'
1957
+ messageTimestampField: 'occurredAt', // Instead of 'timestamp'
1958
+
1959
+ handlers: new MessageHandlerConfigBuilder<CustomMessage>()
1960
+ .addConfig(CUSTOM_MESSAGE_SCHEMA, async (message) => {
1961
+ // Handler receives the full validated message
1962
+ // Access nested data via message.data
1963
+ console.log(`Order ${message.data.orderId}: $${message.data.amount}`)
1964
+ return { result: 'success' as const }
1965
+ })
1966
+ .build(),
1967
+ })
1968
+ }
1969
+ }
1970
+ ```
1971
+
1972
+ **Configuration Options:**
1973
+
1974
+ - `messageTypeField` (required) - Field name containing the message type for routing
1975
+ - `messageIdField` (optional, default: `'id'`) - Field name containing the message ID
1976
+ - `messageTimestampField` (optional, default: `'timestamp'`) - Field name containing the timestamp
1977
+
1673
1978
  ## FIFO Queues
1674
1979
 
1675
1980
  FIFO (First-In-First-Out) queues provide message ordering and exactly-once processing.
@@ -1742,6 +2047,170 @@ Message 1 (user-123) → Message 2 (user-123) → Message 3 (user-123)
1742
2047
  Message 4 (user-456) can process in parallel with above
1743
2048
  ```
1744
2049
 
2050
+ ### FIFO Retry Behavior
2051
+
2052
+ **IMPORTANT**: FIFO queues have special retry behavior to preserve message ordering.
2053
+
2054
+ When a handler returns `{ error: 'retryLater' }` for a FIFO queue:
2055
+
2056
+ 1. **The consumer throws an error** instead of republishing the message
2057
+ 2. **AWS SQS handles the retry** using its native retry mechanism
2058
+ 3. **Message order is preserved** within the MessageGroupId
2059
+ 4. The message returns to the **same position** in the queue after visibility timeout
2060
+
2061
+ **Why this matters:**
2062
+
2063
+ ```typescript
2064
+ // ❌ Standard queue: Republishes message to back of queue (breaks order)
2065
+ // Message 1 → Message 2 → Message 3
2066
+ // If Message 1 retries: Message 2 → Message 3 → Message 1 (wrong!)
2067
+
2068
+ // ✅ FIFO queue: Throws error, AWS retries in place (preserves order)
2069
+ // Message 1 → Message 2 → Message 3
2070
+ // If Message 1 retries: Message 1 (retry) → Message 2 → Message 3 (correct!)
2071
+ ```
2072
+
2073
+ **Configuration:**
2074
+
2075
+ ```typescript
2076
+ class MyFifoConsumer extends AbstractSqsConsumer<MessageType, Context> {
2077
+ constructor(dependencies: SQSConsumerDependencies) {
2078
+ super(dependencies, {
2079
+ creationConfig: {
2080
+ queue: {
2081
+ QueueName: 'my-queue.fifo',
2082
+ Attributes: {
2083
+ FifoQueue: 'true',
2084
+ VisibilityTimeout: '30', // Retry delay
2085
+ },
2086
+ },
2087
+ },
2088
+ handlers: new MessageHandlerConfigBuilder()
2089
+ .addConfig(SCHEMA, async (message) => {
2090
+ // Return retryLater to trigger AWS SQS native retry
2091
+ if (shouldRetry) {
2092
+ return { error: 'retryLater' }
2093
+ }
2094
+ return { result: 'success' }
2095
+ })
2096
+ .build(),
2097
+ })
2098
+ }
2099
+ }
2100
+ ```
2101
+
2102
+ **Barrier Sleep Mechanism (FIFO Queues):**
2103
+
2104
+ When using barriers with FIFO queues, the consumer implements a smart sleep-and-check mechanism to avoid unnecessary AWS retries:
2105
+
2106
+ 1. **Handler or barrier returns `{ error: 'retryLater' }`**
2107
+ 2. **Consumer enters sleep loop** instead of immediately throwing error
2108
+ 3. **Periodically re-checks barrier** (every `barrierSleepCheckIntervalInMsecs`, default: 5 seconds)
2109
+ 4. **If barrier passes**: Process message successfully and exit
2110
+ 5. **If max retry duration exceeded** (`maxRetryDuration`, default: 4 days): Send message to DLQ
2111
+ 6. **Visibility timeout extended** every 30 seconds during sleep to prevent message reclaim
2112
+
2113
+ **Configuration with barrier sleep:**
2114
+
2115
+ ```typescript
2116
+ class MyFifoConsumer extends AbstractSqsConsumer<MessageType, Context> {
2117
+ constructor(dependencies: SQSConsumerDependencies) {
2118
+ super(dependencies, {
2119
+ creationConfig: {
2120
+ queue: {
2121
+ QueueName: 'my-queue.fifo',
2122
+ Attributes: {
2123
+ FifoQueue: 'true',
2124
+ VisibilityTimeout: '3600', // 1 hour - must be greater than heartbeatInterval
2125
+ },
2126
+ },
2127
+ },
2128
+ maxRetryDuration: 345600, // 4 days in seconds (default)
2129
+ barrierSleepCheckIntervalInMsecs: 5000, // 5 seconds (default)
2130
+
2131
+ // Consumer configuration - controls visibility timeout management
2132
+ consumerOverrides: {
2133
+ heartbeatInterval: 300, // Extends visibility every 5 minutes (default)
2134
+ // Must be less than VisibilityTimeout
2135
+ // Prevents AWS from reclaiming the message during long processing or barrier sleep
2136
+ },
2137
+
2138
+ handlers: new MessageHandlerConfigBuilder()
2139
+ .addConfig(
2140
+ SCHEMA,
2141
+ async (message) => {
2142
+ return { result: 'success' }
2143
+ },
2144
+ {
2145
+ preHandlerBarrier: async (message, context) => {
2146
+ // Check if prerequisite is met
2147
+ const prerequisiteMet = await checkPrerequisite(message)
2148
+ return { isPassing: prerequisiteMet }
2149
+ }
2150
+ }
2151
+ )
2152
+ .build(),
2153
+ })
2154
+ }
2155
+ }
2156
+ ```
2157
+
2158
+ **Retry flow for FIFO queues (with barrier sleep):**
2159
+ 1. Handler or barrier returns `{ error: 'retryLater' }`
2160
+ 2. Consumer enters sleep loop for up to `maxRetryDuration` (default: 4 days)
2161
+ 3. Every `barrierSleepCheckIntervalInMsecs` (default: 5 sec), consumer:
2162
+ - Re-checks barrier
2163
+ - Extends visibility timeout (every 30 seconds)
2164
+ 4. If barrier passes: Process message and mark as consumed
2165
+ 5. If `maxRetryDuration` exceeded: Send message to DLQ with error `"FIFO queue: Retry duration exceeded. Moving message to DLQ."`
2166
+
2167
+ **Retry flow for FIFO queues (without barrier - immediate retry):**
2168
+ 1. Handler returns `{ error: 'retryLater' }` but no barrier configured
2169
+ 2. Consumer immediately throws error: `"FIFO queue: Triggering AWS SQS retry to preserve message order"`
2170
+ 3. AWS SQS makes message invisible for `VisibilityTimeout` duration
2171
+ 4. After timeout, message becomes visible again **at the same position**
2172
+ 5. Consumer processes it again
2173
+
2174
+ **Retry duration limit:**
2175
+ - The `maxRetryDuration` setting still applies (default: 4 days)
2176
+ - After exceeding retry duration, message moves to DLQ
2177
+ - Error message: `"FIFO queue: Retry duration exceeded. Moving message to DLQ"`
2178
+
2179
+ **Understanding VisibilityTimeout and heartbeatInterval:**
2180
+
2181
+ The visibility timeout mechanism prevents multiple consumers from processing the same message:
2182
+
2183
+ - **`VisibilityTimeout` (queue attribute)**: Initial time (in seconds) that a message is hidden from other consumers after being received. This is the starting timeout when a message is first picked up.
2184
+
2185
+ - **`heartbeatInterval` (consumerOverrides option)**: Interval (in seconds) at which the consumer automatically extends the visibility timeout using `ChangeMessageVisibilityCommand`. This keeps the message "locked" to the current consumer during long processing.
2186
+
2187
+ **How they work together:**
2188
+
2189
+ 1. **Message received**: AWS SQS hides message for `VisibilityTimeout` seconds
2190
+ 2. **During processing**: Consumer automatically extends timeout every `heartbeatInterval` seconds
2191
+ 3. **If processing exceeds VisibilityTimeout without extension**: AWS makes message visible again (allowing retry)
2192
+ 4. **Requirement**: `heartbeatInterval` < `VisibilityTimeout` (otherwise extension happens after message already became visible)
2193
+
2194
+ **For FIFO queues with barrier sleep:**
2195
+ - The barrier sleep mechanism can explicitly extend visibility timeout every 30 seconds
2196
+ - Extensions set visibility to 90 seconds **from now** (not cumulative) before each sleep chunk
2197
+ - Extension happens BEFORE sleeping (not after) to prevent first-check vulnerability
2198
+ - The 90-second value (3x the check interval) provides a 60-second safety buffer against timing drift
2199
+ - However, it smartly defers to `heartbeatInterval` when set to avoid redundant API calls:
2200
+ - If `heartbeatInterval` <= 30 seconds: rely on sqs-consumer's automatic extension (no explicit extension)
2201
+ - If `heartbeatInterval` > 30 seconds or not set: explicitly extend every 30 seconds during sleep
2202
+ - This optimization prevents unnecessary ChangeMessageVisibility API calls
2203
+ - Set `VisibilityTimeout` high enough for expected barrier wait time (e.g., 3600 seconds / 1 hour)
2204
+
2205
+ **Best practices:**
2206
+ - Set `VisibilityTimeout` high enough to accommodate the barrier sleep period (consider `maxRetryDuration`)
2207
+ - Use `heartbeatInterval` < `VisibilityTimeout` (default: 300 seconds / 5 minutes)
2208
+ - For long-running barriers: increase `VisibilityTimeout` (not `heartbeatInterval`)
2209
+ - Use `maxRetryDuration` to control total retry time for both FIFO and standard queues
2210
+ - Adjust `barrierSleepCheckIntervalInMsecs` based on how quickly prerequisites typically become available
2211
+ - For FIFO queues: barriers are rechecked periodically instead of republishing messages
2212
+ - For standard queues: messages are republished with exponential backoff delay
2213
+
1745
2214
  ### Message Groups
1746
2215
 
1747
2216
  Message groups enable parallel processing while maintaining order:
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export type { SQSMessageOptions, SQSPublisherOptions } from './sqs/AbstractSqsPu
6
6
  export { AbstractSqsPublisher, OFFLOADED_PAYLOAD_SIZE_ATTRIBUTE, } from './sqs/AbstractSqsPublisher.ts';
7
7
  export { type ExtraSQSCreationParams, SQS_MESSAGE_MAX_SIZE, SQS_RESOURCE_ANY, SQS_RESOURCE_CURRENT_QUEUE, type SQSCreationConfig, type SQSDependencies, type SQSOptions, type SQSPolicyConfig, type SQSQueueConfig, type SQSQueueLocatorType, } from './sqs/AbstractSqsService.ts';
8
8
  export type { CommonMessage, SQSMessage } from './types/MessageTypes.ts';
9
+ export { createEventBridgeSchema, createEventBridgeSchemas, type EventBridgeDetail, } from './utils/eventBridgeSchemaBuilder.ts';
9
10
  export { resolveOutgoingMessageAttributes } from './utils/messageUtils.ts';
10
11
  export { generateQueuePublishForTopicPolicy, generateWildcardSnsArn, generateWildcardSqsArn, } from './utils/sqsAttributeUtils.ts';
11
12
  export { deleteSqs, updateQueueAttributes } from './utils/sqsInitter.ts';
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ export { FakeConsumerErrorResolver } from "./fakes/FakeConsumerErrorResolver.js"
3
3
  export { AbstractSqsConsumer } from "./sqs/AbstractSqsConsumer.js";
4
4
  export { AbstractSqsPublisher, OFFLOADED_PAYLOAD_SIZE_ATTRIBUTE, } from "./sqs/AbstractSqsPublisher.js";
5
5
  export { SQS_MESSAGE_MAX_SIZE, SQS_RESOURCE_ANY, SQS_RESOURCE_CURRENT_QUEUE, } from "./sqs/AbstractSqsService.js";
6
+ export { createEventBridgeSchema, createEventBridgeSchemas, } from "./utils/eventBridgeSchemaBuilder.js";
6
7
  export { resolveOutgoingMessageAttributes } from "./utils/messageUtils.js";
7
8
  export { generateQueuePublishForTopicPolicy, generateWildcardSnsArn, generateWildcardSqsArn, } from "./utils/sqsAttributeUtils.js";
8
9
  export { deleteSqs, updateQueueAttributes } from "./utils/sqsInitter.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,sCAAsC,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGlE,OAAO,EACL,oBAAoB,EACpB,gCAAgC,GACjC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,GAO3B,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,EACL,kCAAkC,EAClC,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EACL,WAAW,EACX,4BAA4B,EAC5B,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,gCAAgC,EAChC,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGlE,OAAO,EACL,oBAAoB,EACpB,gCAAgC,GACjC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAChB,0BAA0B,GAO3B,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GAEzB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,gCAAgC,EAAE,MAAM,yBAAyB,CAAA;AAC1E,OAAO,EACL,kCAAkC,EAClC,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EACL,WAAW,EACX,4BAA4B,EAC5B,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,gCAAgC,EAChC,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,qBAAqB,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import type { Either, ErrorResolver } from '@lokalise/node-core';
2
2
  import { type BarrierResult, type MessageSchemaContainer, type PreHandlingOutputs, type Prehandler, type QueueConsumer, type QueueConsumerDependencies, type QueueConsumerOptions } from '@message-queue-toolkit/core';
3
3
  import type { ConsumerOptions } from 'sqs-consumer';
4
+ import type { ZodSchema } from 'zod/v4';
4
5
  import type { SQSMessage } from '../types/MessageTypes.ts';
5
6
  import type { SQSCreationConfig, SQSDependencies, SQSQueueLocatorType } from './AbstractSqsService.ts';
6
7
  import { AbstractSqsService } from './AbstractSqsService.ts';
@@ -10,15 +11,42 @@ type SQSDeadLetterQueueOptions = {
10
11
  };
11
12
  };
12
13
  export type SQSConsumerDependencies = SQSDependencies & QueueConsumerDependencies;
13
- export type SQSConsumerOptions<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends object = SQSQueueLocatorType> = QueueConsumerOptions<CreationConfigType, QueueLocatorType, SQSDeadLetterQueueOptions, MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, SQSCreationConfig, SQSQueueLocatorType> & {
14
+ type SQSConsumerCommonOptions<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends object = SQSQueueLocatorType> = QueueConsumerOptions<CreationConfigType, QueueLocatorType, SQSDeadLetterQueueOptions, MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, SQSCreationConfig, SQSQueueLocatorType> & {
14
15
  /**
15
16
  * Omitting properties which will be set internally ins this class
16
17
  * `visibilityTimeout` is also omitted to avoid conflicts with queue config
17
18
  */
18
19
  consumerOverrides?: Omit<ConsumerOptions, 'sqs' | 'queueUrl' | 'handler' | 'handleMessageBatch' | 'visibilityTimeout' | 'messageAttributeNames' | 'messageSystemAttributeNames' | 'attributeNames'>;
19
20
  concurrentConsumersAmount?: number;
20
- fifoQueue?: boolean;
21
21
  };
22
+ type SQSConsumerFifoOptions = {
23
+ fifoQueue: true;
24
+ /**
25
+ * Interval in milliseconds between barrier re-checks during sleep period (FIFO queues only).
26
+ * FIFO queues sleep and recheck barriers instead of republishing messages to preserve order.
27
+ * The consumer will sleep and recheck for up to maxRetryDuration before moving to DLQ.
28
+ * Default: 5000 (5 seconds)
29
+ */
30
+ barrierSleepCheckIntervalInMsecs?: number;
31
+ /**
32
+ * Interval in milliseconds between visibility timeout extensions during barrier sleep (FIFO queues only).
33
+ * Extensions happen BEFORE each sleep chunk to prevent message from becoming visible during long waits.
34
+ * Should be less than the VisibilityTimeout to prevent message reclaim.
35
+ * Default: 30000 (30 seconds)
36
+ */
37
+ barrierVisibilityExtensionIntervalInMsecs?: number;
38
+ /**
39
+ * Duration in seconds to extend visibility timeout to during barrier sleep (FIFO queues only).
40
+ * Each extension sets visibility to this value from NOW (not cumulative).
41
+ * Should be significantly longer than barrierVisibilityExtensionIntervalInMsecs for safety buffer.
42
+ * Default: 90 (90 seconds, providing 60s buffer with 30s check interval)
43
+ */
44
+ barrierVisibilityTimeoutInSeconds?: number;
45
+ };
46
+ type SQSConsumerStandardQueueOptions = {
47
+ fifoQueue?: false;
48
+ };
49
+ export type SQSConsumerOptions<MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends object = SQSQueueLocatorType> = (SQSConsumerCommonOptions<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, CreationConfigType, QueueLocatorType> & SQSConsumerFifoOptions) | (SQSConsumerCommonOptions<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, CreationConfigType, QueueLocatorType> & SQSConsumerStandardQueueOptions);
22
50
  export declare abstract class AbstractSqsConsumer<MessagePayloadType extends object, ExecutionContext, PrehandlerOutput = undefined, CreationConfigType extends SQSCreationConfig = SQSCreationConfig, QueueLocatorType extends object = SQSQueueLocatorType, ConsumerOptionsType extends SQSConsumerOptions<MessagePayloadType, ExecutionContext, PrehandlerOutput, CreationConfigType, QueueLocatorType> = SQSConsumerOptions<MessagePayloadType, ExecutionContext, PrehandlerOutput, CreationConfigType, QueueLocatorType>> extends AbstractSqsService<MessagePayloadType, QueueLocatorType, CreationConfigType, ConsumerOptionsType, SQSConsumerDependencies, ExecutionContext, PrehandlerOutput> implements QueueConsumer {
23
51
  private consumers;
24
52
  private readonly concurrentConsumersAmount;
@@ -29,6 +57,9 @@ export declare abstract class AbstractSqsConsumer<MessagePayloadType extends obj
29
57
  private readonly isDeduplicationEnabled;
30
58
  private maxRetryDuration;
31
59
  private cachedContentBasedDeduplication?;
60
+ private readonly barrierSleepCheckIntervalInMsecs;
61
+ private readonly barrierVisibilityExtensionIntervalInMsecs;
62
+ private readonly barrierVisibilityTimeoutInSeconds;
32
63
  protected deadLetterQueueUrl?: string;
33
64
  protected readonly errorResolver: ErrorResolver;
34
65
  protected readonly executionContext: ExecutionContext;
@@ -40,6 +71,27 @@ export declare abstract class AbstractSqsConsumer<MessagePayloadType extends obj
40
71
  close(abort?: boolean): Promise<void>;
41
72
  private createConsumer;
42
73
  private handleRetryLater;
74
+ /**
75
+ * Sleep and periodically recheck barrier for FIFO queues.
76
+ * This method implements the barrier sleep mechanism to avoid unnecessary AWS retries.
77
+ */
78
+ private sleepAndRecheckBarrier;
79
+ /**
80
+ * Sleep for the specified duration while optionally extending visibility timeout to prevent message reclaim.
81
+ * AWS SQS will reclaim messages if visibility timeout expires during processing.
82
+ *
83
+ * Visibility extension strategy:
84
+ * - If heartbeatInterval is set and <= extension interval: rely on sqs-consumer's automatic extension
85
+ * - Otherwise: explicitly extend at configured intervals during sleep
86
+ *
87
+ * This prevents redundant API calls when heartbeatInterval already provides sufficient coverage.
88
+ */
89
+ private sleepWithVisibilityTimeoutExtension;
90
+ /**
91
+ * Determines whether to use async or sync path for building retry message params.
92
+ * For FIFO queues with locatorConfig, we need to fetch ContentBasedDeduplication from SQS.
93
+ */
94
+ private buildRetryMessageParamsWithDeduplicationCheck;
43
95
  /**
44
96
  * Builds SendMessageCommand parameters for retry, handling FIFO vs standard queues (synchronous)
45
97
  */
@@ -55,7 +107,7 @@ export declare abstract class AbstractSqsConsumer<MessagePayloadType extends obj
55
107
  protected processMessage(message: MessagePayloadType, messageType: string, preHandlingOutputs: PreHandlingOutputs<PrehandlerOutput, any>): Promise<Either<'retryLater', 'success'>>;
56
108
  protected processPrehandlers(message: MessagePayloadType, messageType: string): Promise<PrehandlerOutput>;
57
109
  protected preHandlerBarrier<BarrierOutput>(message: MessagePayloadType, messageType: string, preHandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
58
- protected resolveSchema(message: MessagePayloadType): Either<Error, import("zod/v4").ZodType<MessagePayloadType, unknown, import("zod/v4/core").$ZodTypeInternals<MessagePayloadType, unknown>>>;
110
+ protected resolveSchema(message: MessagePayloadType): Either<Error, ZodSchema<MessagePayloadType>>;
59
111
  protected resolveNextFunction(preHandlers: Prehandler<MessagePayloadType, ExecutionContext, unknown>[], message: MessagePayloadType, index: number, preHandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (preHandlerResult: import("@message-queue-toolkit/core").PrehandlerResult) => void;
60
112
  protected resolveMessageLog(message: MessagePayloadType, messageType: string): unknown;
61
113
  protected resolveMessage(message: SQSMessage): Either<import("@message-queue-toolkit/core").MessageInvalidFormatError | import("@message-queue-toolkit/core").MessageValidationError, import("@message-queue-toolkit/core").ResolvedMessage>;
@@ -1,4 +1,4 @@
1
- import { SendMessageCommand, SetQueueAttributesCommand } from '@aws-sdk/client-sqs';
1
+ import { ChangeMessageVisibilityCommand, SendMessageCommand, SetQueueAttributesCommand, } from '@aws-sdk/client-sqs';
2
2
  import { DeduplicationRequesterEnum, HandlerContainer, isMessageError, noopReleasableLock, parseMessage, } from '@message-queue-toolkit/core';
3
3
  import { Consumer } from 'sqs-consumer';
4
4
  import { hasOffloadedPayload } from "../utils/messageUtils.js";
@@ -11,6 +11,9 @@ const ABORT_EARLY_EITHER = {
11
11
  error: 'abort',
12
12
  };
13
13
  const DEFAULT_MAX_RETRY_DURATION = 4 * 24 * 60 * 60; // 4 days in seconds
14
+ const DEFAULT_BARRIER_SLEEP_CHECK_INTERVAL_IN_MSECS = 5000; // 5 seconds in milliseconds
15
+ const DEFAULT_BARRIER_VISIBILITY_EXTENSION_INTERVAL_IN_MSECS = 30000; // 30 seconds in milliseconds
16
+ const DEFAULT_BARRIER_VISIBILITY_TIMEOUT_IN_SECONDS = 90; // 90 seconds
14
17
  export class AbstractSqsConsumer extends AbstractSqsService {
15
18
  consumers;
16
19
  concurrentConsumersAmount;
@@ -21,6 +24,9 @@ export class AbstractSqsConsumer extends AbstractSqsService {
21
24
  isDeduplicationEnabled;
22
25
  maxRetryDuration;
23
26
  cachedContentBasedDeduplication;
27
+ barrierSleepCheckIntervalInMsecs;
28
+ barrierVisibilityExtensionIntervalInMsecs;
29
+ barrierVisibilityTimeoutInSeconds;
24
30
  deadLetterQueueUrl;
25
31
  errorResolver;
26
32
  executionContext;
@@ -32,6 +38,15 @@ export class AbstractSqsConsumer extends AbstractSqsService {
32
38
  this.consumerOptionsOverride = options.consumerOverrides ?? {};
33
39
  this.deadLetterQueueOptions = options.deadLetterQueue;
34
40
  this.maxRetryDuration = options.maxRetryDuration ?? DEFAULT_MAX_RETRY_DURATION;
41
+ // Access FIFO-specific options (only available when fifoQueue: true)
42
+ const fifoOptions = options;
43
+ this.barrierSleepCheckIntervalInMsecs =
44
+ fifoOptions.barrierSleepCheckIntervalInMsecs ?? DEFAULT_BARRIER_SLEEP_CHECK_INTERVAL_IN_MSECS;
45
+ this.barrierVisibilityExtensionIntervalInMsecs =
46
+ fifoOptions.barrierVisibilityExtensionIntervalInMsecs ??
47
+ DEFAULT_BARRIER_VISIBILITY_EXTENSION_INTERVAL_IN_MSECS;
48
+ this.barrierVisibilityTimeoutInSeconds =
49
+ fifoOptions.barrierVisibilityTimeoutInSeconds ?? DEFAULT_BARRIER_VISIBILITY_TIMEOUT_IN_SECONDS;
35
50
  this.executionContext = executionContext;
36
51
  this.consumers = [];
37
52
  this.concurrentConsumersAmount = options.concurrentConsumersAmount ?? 1;
@@ -132,7 +147,7 @@ export class AbstractSqsConsumer extends AbstractSqsService {
132
147
  // We don't want to discard message yet as we don't know if the other consumer will be able to process it successfully.
133
148
  // We're re-queueing the message, so it can be processed later.
134
149
  if (acquireLockResult.error) {
135
- await this.handleRetryLater(message, originalMessage, parsedMessage, messageProcessingStartTimestamp);
150
+ await this.handleRetryLater(message, originalMessage, parsedMessage, messageProcessingStartTimestamp, false);
136
151
  return message;
137
152
  }
138
153
  // While the consumer was waiting for a lock to be acquired, the message might have been processed
@@ -183,7 +198,7 @@ export class AbstractSqsConsumer extends AbstractSqsService {
183
198
  }
184
199
  if (result.error === 'retryLater') {
185
200
  await acquireLockResult.result?.release();
186
- await this.handleRetryLater(message, originalMessage, parsedMessage, messageProcessingStartTimestamp);
201
+ await this.handleRetryLater(message, originalMessage, parsedMessage, messageProcessingStartTimestamp, true);
187
202
  return message;
188
203
  }
189
204
  await acquireLockResult.result?.release();
@@ -197,21 +212,42 @@ export class AbstractSqsConsumer extends AbstractSqsService {
197
212
  },
198
213
  });
199
214
  }
200
- async handleRetryLater(message, originalMessage, parsedMessage, messageProcessingStartTimestamp) {
201
- if (this.shouldBeRetried(originalMessage, this.maxRetryDuration)) {
202
- let sendMessageParams;
203
- // For FIFO queues, check if ContentBasedDeduplication is explicitly set in creationConfig
204
- // If not explicitly set (undefined), we must fetch from SQS (async path)
205
- const contentBasedDedup = this.creationConfig?.queue.Attributes?.ContentBasedDeduplication;
206
- const isContentBasedDedupExplicit = contentBasedDedup === 'true' || contentBasedDedup === 'false';
207
- if (this.isFifoQueue && !isContentBasedDedupExplicit) {
208
- // Need to fetch ContentBasedDeduplication attribute from SQS (locatorConfig or not explicitly set)
209
- sendMessageParams = await this.buildFifoRetryMessageParamsAsync(message, originalMessage);
210
- }
211
- else {
212
- // Standard queue or FIFO with explicit ContentBasedDeduplication value - synchronous path
213
- sendMessageParams = this.buildRetryMessageParams(message, originalMessage);
215
+ async handleRetryLater(message, originalMessage, parsedMessage, messageProcessingStartTimestamp, isHandlerRetry = true) {
216
+ /**
217
+ * For FIFO queues, we use a special retry approach to preserve message ordering.
218
+ * For handler/barrier retries: sleep and periodically re-check until barrier passes or max sleep exceeded
219
+ * For lock failures: throw error immediately to trigger AWS retry
220
+ */
221
+ if (this.isFifoQueue) {
222
+ // Check if retry is still within the allowed duration
223
+ if (this.shouldBeRetried(originalMessage, this.maxRetryDuration)) {
224
+ // Only use sleep-and-recheck for handler/barrier retries, not lock failures
225
+ if (isHandlerRetry) {
226
+ await this.sleepAndRecheckBarrier(message, originalMessage, parsedMessage, messageProcessingStartTimestamp);
227
+ return;
228
+ }
229
+ // For lock failures, throw error immediately
230
+ this.handleMessageProcessed({
231
+ message: parsedMessage,
232
+ processingResult: { status: 'retryLater' },
233
+ messageProcessingStartTimestamp,
234
+ queueName: this.queueName,
235
+ });
236
+ throw new Error('FIFO queue: Lock acquisition failed. Triggering AWS SQS retry to preserve message order.');
214
237
  }
238
+ // Retry duration exceeded for FIFO queue
239
+ await this.failProcessing(message);
240
+ this.handleMessageProcessed({
241
+ message: parsedMessage,
242
+ processingResult: { status: 'error', errorReason: 'retryLaterExceeded' },
243
+ messageProcessingStartTimestamp,
244
+ queueName: this.queueName,
245
+ });
246
+ throw new Error('FIFO queue: Retry duration exceeded. Moving message to DLQ.');
247
+ }
248
+ // Standard queue handling: republish the message with delay
249
+ if (this.shouldBeRetried(originalMessage, this.maxRetryDuration)) {
250
+ const sendMessageParams = await this.buildRetryMessageParamsWithDeduplicationCheck(message, originalMessage);
215
251
  await this.sqsClient.send(new SendMessageCommand(sendMessageParams));
216
252
  this.handleMessageProcessed({
217
253
  message: parsedMessage,
@@ -230,6 +266,118 @@ export class AbstractSqsConsumer extends AbstractSqsService {
230
266
  });
231
267
  }
232
268
  }
269
+ /**
270
+ * Sleep and periodically recheck barrier for FIFO queues.
271
+ * This method implements the barrier sleep mechanism to avoid unnecessary AWS retries.
272
+ */
273
+ async sleepAndRecheckBarrier(message, originalMessage, parsedMessage, messageProcessingStartTimestamp) {
274
+ // Extract message type for barrier rechecks
275
+ // @ts-expect-error
276
+ const messageType = parsedMessage[this.messageTypeField];
277
+ // Sleep and periodically recheck barrier until maxRetryDuration is exceeded
278
+ while (this.shouldBeRetried(originalMessage, this.maxRetryDuration)) {
279
+ // Sleep for the check interval
280
+ await this.sleepWithVisibilityTimeoutExtension(message, this.barrierSleepCheckIntervalInMsecs);
281
+ // Re-check barrier
282
+ const result = await this.internalProcessMessage(parsedMessage, messageType).catch((err) => {
283
+ this.handleError(err);
284
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
285
+ return { error: err };
286
+ });
287
+ // If barrier passed and message processed successfully, we're done
288
+ if ('result' in result && result.result === 'success') {
289
+ this.handleMessageProcessed({
290
+ message: originalMessage,
291
+ processingResult: { status: 'consumed' },
292
+ messageProcessingStartTimestamp,
293
+ queueName: this.queueName,
294
+ });
295
+ return;
296
+ }
297
+ // If handler threw an error (not just retryLater), rethrow it
298
+ if (result.error !== 'retryLater') {
299
+ this.handleMessageProcessed({
300
+ message: parsedMessage,
301
+ processingResult: { status: 'error', errorReason: 'handlerError' },
302
+ messageProcessingStartTimestamp,
303
+ queueName: this.queueName,
304
+ });
305
+ throw result.error;
306
+ }
307
+ // Barrier still not passing, continue sleeping
308
+ }
309
+ // Max retry duration exceeded, send to DLQ
310
+ await this.failProcessing(message);
311
+ this.handleMessageProcessed({
312
+ message: parsedMessage,
313
+ processingResult: { status: 'error', errorReason: 'retryLaterExceeded' },
314
+ messageProcessingStartTimestamp,
315
+ queueName: this.queueName,
316
+ });
317
+ throw new Error('FIFO queue: Retry duration exceeded. Moving message to DLQ.');
318
+ }
319
+ /**
320
+ * Sleep for the specified duration while optionally extending visibility timeout to prevent message reclaim.
321
+ * AWS SQS will reclaim messages if visibility timeout expires during processing.
322
+ *
323
+ * Visibility extension strategy:
324
+ * - If heartbeatInterval is set and <= extension interval: rely on sqs-consumer's automatic extension
325
+ * - Otherwise: explicitly extend at configured intervals during sleep
326
+ *
327
+ * This prevents redundant API calls when heartbeatInterval already provides sufficient coverage.
328
+ */
329
+ async sleepWithVisibilityTimeoutExtension(message, sleepDurationMs) {
330
+ // Check if heartbeatInterval is set and sufficient for our needs
331
+ // If heartbeatInterval <= extension interval, sqs-consumer will extend frequently enough
332
+ const heartbeatInterval = this.consumerOptionsOverride?.heartbeatInterval;
333
+ const extensionIntervalSeconds = this.barrierVisibilityExtensionIntervalInMsecs / 1000;
334
+ const shouldExplicitlyExtend = !heartbeatInterval || heartbeatInterval > extensionIntervalSeconds;
335
+ let remainingSleepMs = sleepDurationMs;
336
+ const startTime = Date.now();
337
+ while (remainingSleepMs > 0) {
338
+ // Extend visibility timeout BEFORE sleeping (not after) to prevent message from becoming visible
339
+ // Only extend explicitly if heartbeatInterval is not set or is too long
340
+ if (shouldExplicitlyExtend) {
341
+ try {
342
+ await this.sqsClient.send(new ChangeMessageVisibilityCommand({
343
+ QueueUrl: this.queueUrl,
344
+ ReceiptHandle: message.ReceiptHandle,
345
+ VisibilityTimeout: this.barrierVisibilityTimeoutInSeconds,
346
+ }));
347
+ }
348
+ catch (err) {
349
+ // Log error but don't fail - the message might have already been processed or deleted
350
+ this.logger.warn({
351
+ message: 'Failed to extend visibility timeout during barrier sleep',
352
+ error: err,
353
+ });
354
+ }
355
+ }
356
+ // Now sleep for the chunk
357
+ const sleepChunkMs = Math.min(remainingSleepMs, this.barrierVisibilityExtensionIntervalInMsecs);
358
+ await new Promise((resolve) => setTimeout(resolve, sleepChunkMs));
359
+ // Calculate remaining sleep time for next iteration
360
+ remainingSleepMs = sleepDurationMs - (Date.now() - startTime);
361
+ }
362
+ }
363
+ /**
364
+ * Determines whether to use async or sync path for building retry message params.
365
+ * For FIFO queues with locatorConfig, we need to fetch ContentBasedDeduplication from SQS.
366
+ */
367
+ async buildRetryMessageParamsWithDeduplicationCheck(message, originalMessage) {
368
+ // For FIFO queues, check if ContentBasedDeduplication is explicitly set in creationConfig
369
+ // If not explicitly set (undefined), we must fetch from SQS (async path)
370
+ if (this.isFifoQueue) {
371
+ const contentBasedDedup = this.creationConfig?.queue.Attributes?.ContentBasedDeduplication;
372
+ const isContentBasedDedupExplicit = contentBasedDedup === 'true' || contentBasedDedup === 'false';
373
+ if (!isContentBasedDedupExplicit) {
374
+ // Need to fetch ContentBasedDeduplication attribute from SQS (locatorConfig or not explicitly set)
375
+ return await this.buildFifoRetryMessageParamsAsync(message, originalMessage);
376
+ }
377
+ }
378
+ // Standard queue or FIFO with explicit ContentBasedDeduplication value - synchronous path
379
+ return this.buildRetryMessageParams(message, originalMessage);
380
+ }
233
381
  /**
234
382
  * Builds SendMessageCommand parameters for retry, handling FIFO vs standard queues (synchronous)
235
383
  */
@@ -398,12 +546,13 @@ export class AbstractSqsConsumer extends AbstractSqsService {
398
546
  if (resolveMessageResult.error) {
399
547
  return ABORT_EARLY_EITHER;
400
548
  }
401
- const resolveSchemaResult = this.resolveSchema(resolveMessageResult.result.body);
549
+ const fullMessage = resolveMessageResult.result.body;
550
+ const resolveSchemaResult = this.resolveSchema(fullMessage);
402
551
  if (resolveSchemaResult.error) {
403
552
  this.handleError(resolveSchemaResult.error);
404
553
  return ABORT_EARLY_EITHER;
405
554
  }
406
- const deserializationResult = parseMessage(resolveMessageResult.result.body, resolveSchemaResult.result, this.errorResolver);
555
+ const deserializationResult = parseMessage(fullMessage, resolveSchemaResult.result, this.errorResolver);
407
556
  if (isMessageError(deserializationResult.error)) {
408
557
  this.handleError(deserializationResult.error);
409
558
  return ABORT_EARLY_EITHER;
@@ -413,7 +562,10 @@ export class AbstractSqsConsumer extends AbstractSqsService {
413
562
  return ABORT_EARLY_EITHER;
414
563
  }
415
564
  return {
416
- result: deserializationResult.result,
565
+ result: {
566
+ parsedMessage: deserializationResult.result.parsedMessage,
567
+ originalMessage: deserializationResult.result.originalMessage,
568
+ },
417
569
  };
418
570
  }
419
571
  async failProcessing(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractSqsConsumer.js","sourceRoot":"","sources":["../../lib/sqs/AbstractSqsConsumer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractSqsConsumer.js","sourceRoot":"","sources":["../../lib/sqs/AbstractSqsConsumer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAGL,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EAEd,kBAAkB,EAIlB,YAAY,GAKb,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAIvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,mCAAmC,EAAE,MAAM,2BAA2B,CAAA;AAM/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,MAAM,kBAAkB,GAA2B;IACjD,KAAK,EAAE,OAAO;CACf,CAAA;AACD,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,oBAAoB;AACxE,MAAM,6CAA6C,GAAG,IAAI,CAAA,CAAC,4BAA4B;AACvF,MAAM,sDAAsD,GAAG,KAAK,CAAA,CAAC,6BAA6B;AAClG,MAAM,6CAA6C,GAAG,EAAE,CAAA,CAAC,aAAa;AAiGtE,MAAM,OAAgB,mBAoBpB,SAAQ,kBAQP;IAGO,SAAS,CAAY;IACZ,yBAAyB,CAAQ;IACjC,+BAA+B,CAAkC;IACjE,uBAAuB,CAA0B;IACjD,gBAAgB,CAIhC;IACgB,sBAAsB,CAItC;IACgB,sBAAsB,CAAS;IACxC,gBAAgB,CAAQ;IACxB,+BAA+B,CAAU;IAChC,gCAAgC,CAAQ;IACxC,yCAAyC,CAAQ;IACjD,iCAAiC,CAAQ;IAEhD,kBAAkB,CAAS;IAClB,aAAa,CAAe;IAC5B,gBAAgB,CAAkB;IAErC,uBAAuB,CAA4C;IAEnF,YACE,YAAqC,EACrC,OAA4B,EAC5B,gBAAkC;QAElC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC5B,IAAI,CAAC,+BAA+B,GAAG,YAAY,CAAC,+BAA+B,CAAA;QACnF,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,qBAAqB,CAAA;QACvD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,IAAI,EAAE,CAAA;QAC9D,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAA;QACrD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAA;QAC9E,qEAAqE;QACrE,MAAM,WAAW,GAAG,OAA0C,CAAA;QAC9D,IAAI,CAAC,gCAAgC;YACnC,WAAW,CAAC,gCAAgC,IAAI,6CAA6C,CAAA;QAC/F,IAAI,CAAC,yCAAyC;YAC5C,WAAW,CAAC,yCAAyC;gBACrD,sDAAsD,CAAA;QACxD,IAAI,CAAC,iCAAiC;YACpC,WAAW,CAAC,iCAAiC,IAAI,6CAA6C,CAAA;QAChG,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;QACxC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,IAAI,CAAC,CAAA;QACvE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAA;QAClF,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAI1C;YACA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,OAAO,CAAC,QAAQ;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAA;IACrE,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAClB,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAClC,CAAC;IAES,KAAK,CAAC,mBAAmB;QACjC,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAAE,OAAM;QAExC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,GACpE,IAAI,CAAC,sBAAsB,CAAA;QAE7B,IAAI,cAAc,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,CAAC,CAAA;QACjE,CAAC;QAED,iFAAiF;QACjF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7F,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CACvB,IAAI,yBAAyB,CAAC;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE;gBACV,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;oBAC5B,mBAAmB,EAAE,MAAM,CAAC,QAAQ;oBACpC,eAAe,EAAE,aAAa,CAAC,eAAe;iBAC/C,CAAC;aACH;SACF,CAAC,CACH,CAAA;QAED,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC3C,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QACjB,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAElC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAEhE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,yBAAyB,EAAE,EAAE,GAAG,EAAE,CAC3E,IAAI,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAC3C,CAAA;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YACtD,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;IAEe,KAAK,CAAC,KAAK,CAAC,KAAe;QACzC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACnB,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,IAAI,KAAK,CAAC,CAAA;IAClD,CAAC;IAEO,cAAc,CAAC,OAAkD;QACvE,OAAO,QAAQ,CAAC,MAAM,CAAC;YACrB,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,qBAAqB,EAAE,CAAC,GAAG,mCAAmC,GAAG,CAAC;YAClE,0GAA0G;YAC1G,2BAA2B,EAAE,IAAI,CAAC,WAAW;gBAC3C,CAAC,CAAC,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;gBAC9C,CAAC,CAAC,SAAS;YACb,GAAG,IAAI,CAAC,uBAAuB;YAC/B,4EAA4E;YAC5E,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACxD,qEAAqE;YACrE,aAAa,EAAE,KAAK,EAAE,OAAmB,EAAE,EAAE;gBAC3C,IAAI,OAAO,KAAK,IAAI;oBAAE,OAAO,OAAO,CAAA;gBAEpC,MAAM,+BAA+B,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAElD,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;gBAClE,IAAI,mBAAmB,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;oBAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;oBAElC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;oBAC9C,IAAI,CAAC,sBAAsB,CAAC;wBAC1B,OAAO,EAAE,IAAI;wBACb,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE;wBACpE,+BAA+B;wBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,SAAS,EAAE,SAAS,CAAC,MAAM;qBAC5B,CAAC,CAAA;oBAEF,OAAO,OAAO,CAAA;gBAChB,CAAC;gBACD,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAA;gBAErE,IACE,IAAI,CAAC,gCAAgC,CAAC,aAAa,CAAC;oBACpD,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC,EACpF,CAAC;oBACD,IAAI,CAAC,sBAAsB,CAAC;wBAC1B,OAAO,EAAE,aAAa;wBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE;wBAClE,+BAA+B;wBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM;qBAC/C,CAAC,CAAA;oBAEF,OAAO,OAAO,CAAA;gBAChB,CAAC;gBAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,gCAAgC,CAAC,aAAa,CAAC;oBAC5E,CAAC,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;oBACjD,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;gBAElC,gFAAgF;gBAChF,uHAAuH;gBACvH,+DAA+D;gBAC/D,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;oBAC5B,MAAM,IAAI,CAAC,gBAAgB,CACzB,OAAO,EACP,eAAe,EACf,aAAa,EACb,+BAA+B,EAC/B,KAAK,CACN,CAAA;oBAED,OAAO,OAAO,CAAA;gBAChB,CAAC;gBAED,kGAAkG;gBAClG,wGAAwG;gBACxG,IACE,IAAI,CAAC,gCAAgC,CAAC,aAAa,CAAC;oBACpD,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC,EACpF,CAAC;oBACD,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;oBACzC,IAAI,CAAC,sBAAsB,CAAC;wBAC1B,OAAO,EAAE,aAAa;wBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE;wBAClE,+BAA+B;wBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM;qBAC/C,CAAC,CAAA;oBAEF,OAAO,OAAO,CAAA;gBAChB,CAAC;gBAED,mBAAmB;gBACnB,4EAA4E;gBAC5E,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;gBACxD,MAAM,iBAAiB,GAAG,SAAS,IAAI,CAAC,SAAS,IAAI,WAAW,EAAE,CAAA;gBAElE,mBAAmB;gBACnB,MAAM,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC/D,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,CAAA;gBACpF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;oBAC7E,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;gBACrC,CAAC;gBACD,MAAM,MAAM,GAA4C,MAAM,IAAI,CAAC,sBAAsB,CACvF,aAAa,EACb,WAAW,CACZ;qBACE,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;oBACrB,mEAAmE;oBACnE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;gBACvB,CAAC,CAAC;qBACD,OAAO,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;gBAClE,CAAC,CAAC,CAAA;gBAEJ,UAAU;gBACV,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAA;oBACjF,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;oBACzC,IAAI,CAAC,sBAAsB,CAAC;wBAC1B,OAAO,EAAE,eAAe;wBACxB,gBAAgB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;wBACxC,+BAA+B;wBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;qBAC1B,CAAC,CAAA;oBAEF,OAAO,OAAO,CAAA;gBAChB,CAAC;gBAED,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;oBAClC,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;oBACzC,MAAM,IAAI,CAAC,gBAAgB,CACzB,OAAO,EACP,eAAe,EACf,aAAa,EACb,+BAA+B,EAC/B,IAAI,CACL,CAAA;oBAED,OAAO,OAAO,CAAA;gBAChB,CAAC;gBAED,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;gBACzC,IAAI,CAAC,sBAAsB,CAAC;oBAC1B,OAAO,EAAE,aAAa;oBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;oBAClE,+BAA+B;oBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAA;gBAEF,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACrC,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,OAAmB,EACnB,eAAmC,EACnC,aAAiC,EACjC,+BAAuC,EACvC,iBAA0B,IAAI;QAE9B;;;;WAIG;QACH,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,sDAAsD;YACtD,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACjE,4EAA4E;gBAC5E,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,IAAI,CAAC,sBAAsB,CAC/B,OAAO,EACP,eAAe,EACf,aAAa,EACb,+BAA+B,CAChC,CAAA;oBACD,OAAM;gBACR,CAAC;gBAED,6CAA6C;gBAC7C,IAAI,CAAC,sBAAsB,CAAC;oBAC1B,OAAO,EAAE,aAAa;oBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;oBAC1C,+BAA+B;oBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAA;gBACF,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;YACH,CAAC;YACD,yCAAyC;YACzC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,OAAO,EAAE,aAAa;gBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE;gBACxE,+BAA+B;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAA;YACF,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;QAChF,CAAC;QAED,4DAA4D;QAC5D,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjE,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,6CAA6C,CAChF,OAAO,EACP,eAAe,CAChB,CAAA;YACD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAA;YAEpE,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,OAAO,EAAE,aAAa;gBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;gBAC1C,+BAA+B;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,OAAO,EAAE,aAAa;gBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE;gBACxE,+BAA+B;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,sBAAsB,CAClC,OAAmB,EACnB,eAAmC,EACnC,aAAiC,EACjC,+BAAuC;QAEvC,4CAA4C;QAC5C,mBAAmB;QACnB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAW,CAAA;QAElE,4EAA4E;QAC5E,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACpE,+BAA+B;YAC/B,MAAM,IAAI,CAAC,mCAAmC,CAAC,OAAO,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAA;YAE9F,mBAAmB;YACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBACrB,mEAAmE;gBACnE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;YACvB,CAAC,CAAC,CAAA;YAEF,mEAAmE;YACnE,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACtD,IAAI,CAAC,sBAAsB,CAAC;oBAC1B,OAAO,EAAE,eAAe;oBACxB,gBAAgB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;oBACxC,+BAA+B;oBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;YAED,8DAA8D;YAC9D,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBAClC,IAAI,CAAC,sBAAsB,CAAC;oBAC1B,OAAO,EAAE,aAAa;oBACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE;oBAClE,+BAA+B;oBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAA;gBACF,MAAM,MAAM,CAAC,KAAK,CAAA;YACpB,CAAC;YAED,+CAA+C;QACjD,CAAC;QAED,2CAA2C;QAC3C,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,sBAAsB,CAAC;YAC1B,OAAO,EAAE,aAAa;YACtB,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE;YACxE,+BAA+B;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAA;QACF,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;IAChF,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,mCAAmC,CAC/C,OAAmB,EACnB,eAAuB;QAEvB,iEAAiE;QACjE,yFAAyF;QACzF,MAAM,iBAAiB,GAAG,IAAI,CAAC,uBAAuB,EAAE,iBAAiB,CAAA;QACzE,MAAM,wBAAwB,GAAG,IAAI,CAAC,yCAAyC,GAAG,IAAI,CAAA;QACtF,MAAM,sBAAsB,GAC1B,CAAC,iBAAiB,IAAI,iBAAiB,GAAG,wBAAwB,CAAA;QAEpE,IAAI,gBAAgB,GAAG,eAAe,CAAA;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,OAAO,gBAAgB,GAAG,CAAC,EAAE,CAAC;YAC5B,iGAAiG;YACjG,wEAAwE;YACxE,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CACvB,IAAI,8BAA8B,CAAC;wBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,aAAa,EAAE,OAAO,CAAC,aAAa;wBACpC,iBAAiB,EAAE,IAAI,CAAC,iCAAiC;qBAC1D,CAAC,CACH,CAAA;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sFAAsF;oBACtF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;wBACf,OAAO,EAAE,0DAA0D;wBACnE,KAAK,EAAE,GAAG;qBACX,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,0BAA0B;YAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,gBAAgB,EAChB,IAAI,CAAC,yCAAyC,CAC/C,CAAA;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;YAEjE,oDAAoD;YACpD,gBAAgB,GAAG,eAAe,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,6CAA6C,CACzD,OAAmB,EACnB,eAAmC;QAEnC,0FAA0F;QAC1F,yEAAyE;QACzE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,EAAE,yBAAyB,CAAA;YAC1F,MAAM,2BAA2B,GAC/B,iBAAiB,KAAK,MAAM,IAAI,iBAAiB,KAAK,OAAO,CAAA;YAE/D,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACjC,mGAAmG;gBACnG,OAAO,MAAM,IAAI,CAAC,gCAAgC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;QAED,0FAA0F;QAC1F,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IAC/D,CAAC;IAED;;OAEG;IACK,uBAAuB,CAC7B,OAAmB,EACnB,eAAmC;QAEnC,MAAM,MAAM,GAA4B;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;SAC5E,CAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,wDAAwD;YACxD,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,cAAc,CAAA;YACzD,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,cAAc,GAAG,cAAc,CAAA;YACxC,CAAC;YAED,iFAAiF;YACjF,+FAA+F;YAC/F,uGAAuG;YACvG,MAAM,mBAAmB,GACvB,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,UAAU,EAAE,yBAAyB,KAAK,MAAM,CAAA;YAE7E,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,sBAAsB,CAAA;gBAClE,IAAI,eAAe,EAAE,CAAC;oBACpB,8EAA8E;oBAC9E,0FAA0F;oBAC1F,MAAM,eAAe,GAAI,eAA2C;yBACjE,wBAAwB,CAAA;oBAC3B,MAAM,UAAU,GAAG,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC5E,MAAM,CAAC,sBAAsB,GAAG,GAAG,eAAe,UAAU,UAAU,GAAG,CAAC,EAAE,CAAA;gBAC9E,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,0EAA0E;YAC1E,wCAAwC;QAC1C,CAAC;aAAM,CAAC;YACN,4DAA4D;YAC5D,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAA;QAC3E,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gCAAgC,CAC5C,OAAmB,EACnB,eAAmC;QAEnC,MAAM,MAAM,GAA4B;YACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;SAC5E,CAAA;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,cAAc,CAAA;QACzD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,cAAc,GAAG,cAAc,CAAA;QACxC,CAAC;QAED,gFAAgF;QAChF,IAAI,mBAAmB,GAAG,IAAI,CAAC,+BAA+B,CAAA;QAC9D,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;gBAC9E,2BAA2B;aAC5B,CAAC,CAAA;YACF,mBAAmB,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,yBAAyB,KAAK,MAAM,CAAA;YAC9F,IAAI,CAAC,+BAA+B,GAAG,mBAAmB,CAAA;QAC5D,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,sBAAsB,CAAA;YAClE,IAAI,eAAe,EAAE,CAAC;gBACpB,8EAA8E;gBAC9E,MAAM,eAAe,GAAI,eAA2C;qBACjE,wBAAwB,CAAA;gBAC3B,MAAM,UAAU,GAAG,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC5E,MAAM,CAAC,sBAAsB,GAAG,GAAG,eAAe,UAAU,UAAU,GAAG,CAAC,EAAE,CAAA;YAC9E,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,KAAe;QACjD,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC9B,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK;SACN,CAAC,CACH,CACF,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,OAA2B,EAC3B,WAAmB;QAEnB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QAC5E,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAA;QAE1F,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE;gBAC/C,gBAAgB;gBAChB,aAAa,EAAE,aAAa,CAAC,MAAM;aACpC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;IAChC,CAAC;IAEkB,cAAc,CAC/B,OAA2B,EAC3B,WAAmB;IACnB,uDAAuD;IACvD,kBAA6D;QAE7D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAmB,WAAW,CAAC,CAAA;QAEnF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;IAC5E,CAAC;IAEkB,kBAAkB,CAAC,OAA2B,EAAE,WAAmB;QACpF,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAmB,WAAW,CAAC,CAAA;QAEzF,OAAO,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAC5E,CAAC;IAEkB,iBAAiB,CAClC,OAA2B,EAC3B,WAAmB,EACnB,gBAAkC;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAClD,WAAW,CACZ,CAAA;QAED,OAAO,IAAI,CAAC,yBAAyB,CACnC,OAAO,CAAC,iBAAiB,EACzB,OAAO,EACP,IAAI,CAAC,gBAAgB,EACrB,gBAAgB,CACjB,CAAA;IACH,CAAC;IAEkB,aAAa,CAC9B,OAA2B;QAE3B,OAAO,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,OAAkC,CAAC,CAAA;IACvF,CAAC;IAED,sCAAsC;IACnB,mBAAmB,CACpC,WAAwE,EACxE,OAA2B,EAC3B,KAAa,EACb,gBAAkC,EAClC,OAA0E,EAC1E,MAA4B;QAE5B,OAAO,IAAI,CAAC,qCAAqC,CAC/C,WAAW,EACX,IAAI,CAAC,gBAAgB,EACrB,OAAO,EACP,KAAK,EACL,gBAAgB,EAChB,OAAO,EACP,MAAM,CACP,CAAA;IACH,CAAC;IAEkB,iBAAiB,CAAC,OAA2B,EAAE,WAAmB;QACnF,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QACjE,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC;IAEkB,cAAc,CAAC,OAAmB;QACnD,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACpD,CAAC;IAEkB,gCAAgC,CAAC,OAA2B;QAC7E,OAAO,IAAI,CAAC,sBAAsB,IAAI,KAAK,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAA;IACvF,CAAC;IAES,KAAK,CAAC,mCAAmC,CAAC,OAAmB;QACrE,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QACzD,IAAI,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC5C,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACtE,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,IAAI,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,MAAM,qCAAqC,GAAG,MAAM,IAAI,CAAC,+BAA+B,CACtF,oBAAoB,CAAC,MAAM,CAAC,IAAI,CACjC,CAAA;YACD,IAAI,qCAAqC,CAAC,KAAK,EAAE,CAAC;gBAChD,IAAI,CAAC,WAAW,CAAC,qCAAqC,CAAC,KAAK,CAAC,CAAA;gBAC7D,OAAO,kBAAkB,CAAA;YAC3B,CAAC;YACD,oBAAoB,CAAC,MAAM,CAAC,IAAI,GAAG,qCAAqC,CAAC,MAAM,CAAA;QACjF,CAAC;QAED,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IAEO,cAAc,CAAC,OAAmB;QACxC,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QACzD,IAAI,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC5C,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAA;QAEnD,oCAAoC;QACpC,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,IAAI;YAAE,OAAO,kBAAkB,CAAA;QAExE,mBAAmB;QACnB,IAAI,IAAI,CAAC,cAAc,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;YAChD,OAAO;gBACL,mBAAmB;gBACnB,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;aAClD,CAAA;QACH,CAAC;QAED,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,OAAmB;QAEnB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAA;QACpF,IAAI,oBAAoB,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAA;QAEpD,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,WAAiC,CAAC,CAAA;QACjF,IAAI,mBAAmB,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;YAC3C,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,MAAM,qBAAqB,GAAG,YAAY,CACxC,WAAW,EACX,mBAAmB,CAAC,MAAM,EAC1B,IAAI,CAAC,aAAa,CACnB,CAAA;QACD,IAAI,cAAc,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;YAC7C,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QACD,oCAAoC;QACpC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,kBAAkB,CAAA;QAC3B,CAAC;QAED,OAAO;YACL,MAAM,EAAE;gBACN,aAAa,EAAE,qBAAqB,CAAC,MAAM,CAAC,aAAa;gBACzD,eAAe,EAAE,qBAAqB,CAAC,MAAM,CAAC,eAAe;aAC9D;SACF,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAmB;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAM;QAEpC,MAAM,MAAM,GAA4B;YACtC,QAAQ,EAAE,IAAI,CAAC,kBAAkB;YACjC,WAAW,EAAE,OAAO,CAAC,IAAI;SAC1B,CAAA;QAED,+DAA+D;QAC/D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,cAAc,CAAA;YACzD,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,cAAc,GAAG,cAAc,CAAA;YACxC,CAAC;YACD,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,sBAAsB,CAAA;YAClE,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,CAAC,sBAAsB,GAAG,eAAe,CAAA;YACjD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACrC,IAAI,uBAA2C,CAAA;QAC/C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,uBAAuB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,CAAA;QACnF,CAAC;aAAM,CAAC;YACN,mEAAmE;YACnE,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;gBAC9E,mBAAmB;aACpB,CAAC,CAAA;YACF,uBAAuB,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAA;QACjF,CAAC;QAED,2FAA2F;QAC3F,OAAO,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3F,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/sqs",
3
- "version": "22.4.0",
3
+ "version": "22.5.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "SQS adapter for message-queue-toolkit",