@message-queue-toolkit/sns 27.0.1 → 27.1.1

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
@@ -17,6 +17,8 @@ both standard and FIFO topics.
17
17
  - [Configuration](#configuration)
18
18
  - [Topic Creation](#topic-creation)
19
19
  - [Topic Locator](#topic-locator)
20
+ - [Resource Resolution](#resource-resolution)
21
+ - [Startup Resource Polling](#startup-resource-polling)
20
22
  - [Publisher Options](#publisher-options)
21
23
  - [Consumer Options](#consumer-options)
22
24
  - [SNS-Specific Features](#sns-specific-features)
@@ -486,12 +488,65 @@ When using `locatorConfig`, you connect to an existing topic without creating it
486
488
  // or
487
489
  // queueName: 'my-queue',
488
490
 
489
- // Optional: Existing subscription ARN
491
+ // Optional: Existing subscription ARN. When omitted and no `subscriptionConfig` is given, the subscription of
492
+ // the queue to the topic is looked up instead (see Resource Resolution)
490
493
  subscriptionArn: 'arn:aws:sns:us-east-1:123456789012:my-topic:uuid',
491
494
  },
492
495
  }
493
496
  ```
494
497
 
498
+ ### Resource Resolution
499
+
500
+ Consumers resolve the topic, the queue and the subscription independently, so each of them can either be managed by
501
+ your application or by external tooling (e.g. Terraform):
502
+
503
+ | Resource | Located when | Created when |
504
+ |--------------|------------------------------------------------|----------------------------------------|
505
+ | Topic | `locatorConfig.topicArn` or `topicName` is set | otherwise, from `creationConfig.topic` |
506
+ | Queue | `locatorConfig.queueUrl` or `queueName` is set | otherwise, from `creationConfig.queue` |
507
+ | Subscription | `subscriptionConfig` is not set | `subscriptionConfig` is set |
508
+
509
+ A subscription that already exists is reused, and its attributes are updated when they differ and
510
+ `subscriptionConfig.updateAttributesIfExists` is enabled. When both a locator and a creation config are given for the
511
+ same resource, the locator takes precedence and the creation config is ignored. When `locatorConfig.subscriptionArn`
512
+ is set, every resource is located and both `creationConfig` and `subscriptionConfig` are ignored.
513
+
514
+ ```typescript
515
+ // Application manages everything
516
+ {
517
+ creationConfig: { topic: { Name: 'my-topic' }, queue: { QueueName: 'my-queue' } },
518
+ subscriptionConfig: { updateAttributesIfExists: true },
519
+ }
520
+
521
+ // Topic owned by another service, queue and subscription managed by the application
522
+ {
523
+ locatorConfig: { topicName: 'my-topic' },
524
+ creationConfig: { queue: { QueueName: 'my-queue' } },
525
+ subscriptionConfig: { updateAttributesIfExists: true },
526
+ }
527
+
528
+ // Topic and queue managed externally, subscription (and its filter policy) managed by the application
529
+ {
530
+ locatorConfig: { topicName: 'my-topic', queueName: 'my-queue' },
531
+ subscriptionConfig: { updateAttributesIfExists: true },
532
+ }
533
+
534
+ // Everything managed externally, the application only locates the resources
535
+ {
536
+ locatorConfig: { topicName: 'my-topic', queueName: 'my-queue' },
537
+ }
538
+ ```
539
+
540
+ Some things to keep in mind when resources are managed externally:
541
+
542
+ - **Queue policy**: when the queue is located, the application does not set its policy. The external tooling must
543
+ allow the topic to send messages to the queue, otherwise the subscription exists but messages are never delivered.
544
+ - **Filter policy**: when the subscription is located, its filter policy is not derived from the consumer handlers.
545
+ The external tooling must keep it in sync with the message types the consumer handles.
546
+ - **Permissions**: locating a subscription requires `sns:ListSubscriptionsByTopic`. Subscriptions pending
547
+ confirmation (e.g. cross-account) are not considered until they are confirmed.
548
+ - A missing located resource makes `init()` fail, unless startup resource polling is enabled (see below).
549
+
495
550
  ### Startup Resource Polling
496
551
 
497
552
  When your SNS topic or SQS queue may not exist at startup (e.g., created by another service or infrastructure-as-code pipeline), you can enable polling to wait for resources to become available instead of failing immediately:
@@ -519,7 +574,8 @@ When your SNS topic or SQS queue may not exist at startup (e.g., created by anot
519
574
 
520
575
  #### Blocking Mode (Default)
521
576
 
522
- In blocking mode, `init()` or `start()` will wait until both the topic and queue are available:
577
+ In blocking mode, `init()` or `start()` will wait until the located resources (topic, queue and, when located, the
578
+ subscription) are available:
523
579
 
524
580
  ```typescript
525
581
  const consumer = new MyConsumer(deps, {
@@ -650,6 +706,32 @@ const consumer = new MyConsumer(deps, {
650
706
  await consumer.start()
651
707
  ```
652
708
 
709
+ #### Subscription Locate Mode
710
+
711
+ When the subscription is managed externally (no `subscriptionConfig`), startup resource polling will also wait for the
712
+ subscription of the queue to the topic to exist:
713
+
714
+ ```typescript
715
+ const consumer = new MyConsumer(deps, {
716
+ locatorConfig: {
717
+ topicName: 'my-topic', // Topic, queue and subscription created by infrastructure tooling
718
+ queueName: 'my-consumer-queue',
719
+ startupResourcePolling: {
720
+ enabled: true,
721
+ pollingIntervalMs: 5000,
722
+ timeoutMs: 60000,
723
+ },
724
+ },
725
+ // No subscriptionConfig - the subscription is located, never created
726
+ })
727
+
728
+ // This will:
729
+ // 1. Poll until the topic and the queue exist
730
+ // 2. Poll until the queue is subscribed to the topic
731
+ // 3. Start consuming
732
+ await consumer.start()
733
+ ```
734
+
653
735
  ### Publisher Options
654
736
 
655
737
  ```typescript
@@ -47,6 +47,23 @@ export type InitSnsExtraParams = ExtraParams & {
47
47
  topicArn: string;
48
48
  }) => void;
49
49
  };
50
+ /**
51
+ * Initializes an SNS topic, an SQS queue and the subscription of the queue to the topic. Each
52
+ * resource is resolved independently:
53
+ * - Topic: located when `locatorConfig.topicArn` or `locatorConfig.topicName` is given, otherwise
54
+ * created from `creationConfig.topic`.
55
+ * - Queue: located when `locatorConfig.queueUrl` or `locatorConfig.queueName` is given, otherwise
56
+ * created from `creationConfig.queue`.
57
+ * - Subscription: created (or updated) when `subscriptionConfig` is given, otherwise located by
58
+ * looking up the queue's subscription on the topic.
59
+ *
60
+ * When `locatorConfig.subscriptionArn` is given, every resource is located and `creationConfig` and
61
+ * `subscriptionConfig` are ignored.
62
+ *
63
+ * Located resources are waited for when `locatorConfig.startupResourcePolling` is enabled. In
64
+ * non-blocking mode, `undefined` is returned if they are not immediately available, and
65
+ * `onResourcesReady` is invoked once they are.
66
+ */
50
67
  export declare function initSnsSqs(sqsClient: SQSClient, snsClient: SNSClient, stsClient: STSClient, locatorConfig?: SNSSQSQueueLocatorType, creationConfig?: SNSCreationConfig & SQSCreationConfig, subscriptionConfig?: SNSSubscriptionOptions, extraParams?: InitSnsSqsExtraParams): Promise<InitSnsSqsResult | undefined>;
51
68
  export declare function deleteSnsSqs(sqsClient: SQSClient, snsClient: SNSClient, stsClient: STSClient, deletionConfig: DeletionConfig, queueConfiguration: CreateQueueCommandInput, topicConfiguration: CreateTopicCommandInput | undefined, subscriptionConfiguration: SNSSubscriptionOptions, extraParams?: ExtraParams, topicLocator?: SNSTopicLocatorType): Promise<void>;
52
69
  export declare function deleteSns(snsClient: SNSClient, stsClient: STSClient, deletionConfig: DeletionConfig, creationConfig: SNSCreationConfig): Promise<void>;
@@ -1,271 +1,204 @@
1
- import { isError } from '@lokalise/node-core';
1
+ import { InternalError, isError, isInternalError } from '@lokalise/node-core';
2
2
  import { isProduction, isStartupResourcePollingEnabled, waitForResource, } from '@message-queue-toolkit/core';
3
- import { deleteQueue, getQueueAttributes, resolveQueueUrlFromLocatorConfig, } from '@message-queue-toolkit/sqs';
3
+ import { assertQueue, deleteQueue, getQueueAttributes, getQueueUrl, } from '@message-queue-toolkit/sqs';
4
4
  import { isCreateTopicCommand } from '../types/TopicTypes.js';
5
- import { subscribeToTopic } from './snsSubscriber.js';
6
- import { assertTopic, deleteSubscription, deleteTopic, getTopicAttributes } from './snsUtils.js';
5
+ import { assertSubscription, subscribeToTopic } from './snsSubscriber.js';
6
+ import { assertTopic, deleteSubscription, deleteTopic, findSubscriptionByTopicAndQueue, getTopicAttributes, } from './snsUtils.js';
7
7
  import { buildTopicArn } from './stsUtils.js';
8
- // Helper function to poll for SNS topic availability
9
- async function pollForTopic(snsClient, topicArn, startupResourcePolling, extraParams, onResourceAvailable, onError) {
10
- const topicResult = await waitForResource({
11
- config: startupResourcePolling,
12
- resourceName: `SNS topic ${topicArn}`,
13
- logger: extraParams?.logger,
14
- errorReporter: extraParams?.errorReporter,
15
- onResourceAvailable,
16
- onError,
17
- checkFn: async () => {
8
+ const RESOURCE_NOT_FOUND_ERROR_CODE = 'sns_sqs_resource_not_found';
9
+ async function waitForOrCheckResource(resourceName, notFoundMessage, checkFn, options) {
10
+ if (options.polling) {
11
+ const result = await waitForResource({
12
+ config: { ...options.polling, nonBlocking: false },
13
+ resourceName,
14
+ logger: options.extraParams?.logger,
15
+ errorReporter: options.extraParams?.errorReporter,
16
+ checkFn,
17
+ });
18
+ if (result === undefined)
19
+ throw new Error(`Could not resolve ${resourceName}`);
20
+ return result;
21
+ }
22
+ const checkResult = await checkFn();
23
+ if (!checkResult.isAvailable) {
24
+ throw new InternalError({ errorCode: RESOURCE_NOT_FOUND_ERROR_CODE, message: notFoundMessage });
25
+ }
26
+ return checkResult.result;
27
+ }
28
+ /**
29
+ * Topic is located when the locator references it, otherwise it is created.
30
+ * Locator takes precedence.
31
+ */
32
+ async function resolveTopicArn(snsClient, stsClient, locatorConfig, creationConfig, options) {
33
+ const topicArn = locatorConfig?.topicArn ??
34
+ (locatorConfig?.topicName ? await buildTopicArn(stsClient, locatorConfig.topicName) : undefined);
35
+ if (topicArn) {
36
+ if (!options.polling && !options.checkLocatedTopic)
37
+ return topicArn;
38
+ return await waitForOrCheckResource(`SNS topic ${topicArn}`, `Topic with topicArn ${topicArn} does not exist.`, async () => {
18
39
  const result = await getTopicAttributes(snsClient, topicArn);
19
- if (result.error === 'not_found') {
40
+ if (result.error === 'not_found')
20
41
  return { isAvailable: false };
21
- }
22
- return { isAvailable: true, result: result.result };
23
- },
24
- });
25
- return { topicResult, topicArn };
26
- }
27
- // Helper function to create subscription
28
- async function createSubscription(sqsClient, snsClient, stsClient, creationConfig, topicResolutionOptions, subscriptionConfig, extraParams) {
29
- const { subscriptionArn, topicArn, queueUrl, queueArn } = await subscribeToTopic(sqsClient, snsClient, stsClient, creationConfig.queue, topicResolutionOptions, subscriptionConfig, {
30
- updateAttributesIfExists: creationConfig.updateAttributesIfExists,
31
- queueUrlsWithSubscribePermissionsPrefix: creationConfig.queueUrlsWithSubscribePermissionsPrefix,
32
- allowedSourceOwner: creationConfig.allowedSourceOwner,
33
- topicArnsWithPublishPermissionsPrefix: creationConfig.topicArnsWithPublishPermissionsPrefix,
34
- logger: extraParams?.logger,
35
- forceTagUpdate: creationConfig.forceTagUpdate,
36
- });
37
- if (!subscriptionArn) {
38
- throw new Error('Failed to subscribe');
42
+ return { isAvailable: true, result: topicArn };
43
+ }, options);
44
+ }
45
+ if (!creationConfig?.topic) {
46
+ throw new Error('Either creationConfig.topic, locatorConfig.topicArn or locatorConfig.topicName must be provided');
39
47
  }
40
- return { subscriptionArn, topicArn, queueUrl, queueArn };
48
+ return await assertTopic(snsClient, stsClient, creationConfig.topic, {
49
+ queueUrlsWithSubscribePermissionsPrefix: creationConfig?.queueUrlsWithSubscribePermissionsPrefix,
50
+ allowedSourceOwner: creationConfig?.allowedSourceOwner,
51
+ forceTagUpdate: creationConfig?.forceTagUpdate,
52
+ });
41
53
  }
42
- // Helper to handle subscription creation with optional topic polling (blocking and non-blocking)
43
- async function createSubscriptionWithPolling(sqsClient, snsClient, stsClient, creationConfig, topicResolutionOptions, subscriptionConfig, topicArn, startupResourcePolling, extraParams) {
44
- const nonBlocking = startupResourcePolling.nonBlocking === true;
45
- // biome-ignore lint/style/noNonNullAssertion: QueueName is validated in initSnsSqs before calling this function
46
- const queueName = creationConfig.queue.QueueName;
47
- const onTopicReady = async () => {
48
- try {
49
- const result = await createSubscription(sqsClient, snsClient, stsClient, creationConfig, topicResolutionOptions, subscriptionConfig, extraParams);
50
- extraParams?.onResourcesReady?.({
51
- topicArn: result.topicArn,
52
- queueUrl: result.queueUrl,
53
- queueArn: result.queueArn,
54
- subscriptionArn: result.subscriptionArn,
55
- queueName,
56
- });
54
+ /**
55
+ * Queue is located when the locator references it, otherwise it is created.
56
+ * Locator takes precedence.
57
+ */
58
+ async function resolveQueue(sqsClient, locatorConfig, creationConfig, options) {
59
+ const locatedQueueUrl = locatorConfig?.queueUrl;
60
+ const locatedQueueName = locatorConfig?.queueName;
61
+ if (!locatedQueueUrl && !locatedQueueName) {
62
+ if (!creationConfig?.queue) {
63
+ throw new Error('Either creationConfig.queue, locatorConfig.queueUrl or locatorConfig.queueName must be provided');
57
64
  }
58
- catch (err) {
59
- const error = isError(err) ? err : new Error(String(err));
60
- extraParams?.logger?.error({
61
- message: 'Background subscription creation failed',
62
- topicArn,
63
- error,
64
- });
65
- // Subscription creation failure is final - we don't retry
66
- extraParams?.onResourcesError?.(error, { isFinal: true });
65
+ return assertQueue(sqsClient, creationConfig.queue, {
66
+ topicArnsWithPublishPermissionsPrefix: creationConfig.topicArnsWithPublishPermissionsPrefix,
67
+ updateAttributesIfExists: creationConfig.updateAttributesIfExists,
68
+ forceTagUpdate: creationConfig.forceTagUpdate,
69
+ });
70
+ }
71
+ const queueReference = locatedQueueUrl
72
+ ? `queueUrl ${locatedQueueUrl}`
73
+ : `queueName ${locatedQueueName}`;
74
+ return await waitForOrCheckResource(`SQS queue with ${queueReference}`, `Queue with ${queueReference} does not exist.`, async () => {
75
+ // Queue URL is resolved on every check, so a queue located by name can be waited for as well
76
+ let queueUrl = locatedQueueUrl;
77
+ if (!queueUrl && locatedQueueName) {
78
+ const queueUrlResult = await getQueueUrl(sqsClient, locatedQueueName);
79
+ if (queueUrlResult.error === 'not_found')
80
+ return { isAvailable: false };
81
+ queueUrl = queueUrlResult.result;
67
82
  }
68
- };
69
- const { topicResult } = await pollForTopic(snsClient, topicArn, startupResourcePolling, extraParams, nonBlocking ? onTopicReady : undefined, nonBlocking ? extraParams?.onResourcesError : undefined);
70
- // Non-blocking: caller will be notified via onResourcesReady when ready
71
- if (nonBlocking && topicResult === undefined)
72
- return undefined;
73
- // Blocking: topic is now available, create subscription
74
- const result = await createSubscription(sqsClient, snsClient, stsClient, creationConfig, topicResolutionOptions, subscriptionConfig, extraParams);
75
- return {
76
- subscriptionArn: result.subscriptionArn,
77
- topicArn: result.topicArn,
78
- queueName,
79
- queueUrl: result.queueUrl,
80
- queueArn: result.queueArn,
81
- };
83
+ if (!queueUrl)
84
+ return { isAvailable: false };
85
+ const queueAttributesResult = await getQueueAttributes(sqsClient, queueUrl, ['QueueArn']);
86
+ if (queueAttributesResult.error === 'not_found')
87
+ return { isAvailable: false };
88
+ const queueArn = queueAttributesResult.result?.attributes?.QueueArn;
89
+ if (!queueArn)
90
+ throw new Error(`Could not resolve QueueArn for queue at ${queueUrl}`);
91
+ const queueName = queueUrl.split('/').pop();
92
+ if (!queueName)
93
+ throw new Error(`Could not resolve queue name from queueUrl ${queueUrl}`);
94
+ return { isAvailable: true, result: { queueUrl, queueArn, queueName } };
95
+ }, options);
82
96
  }
83
- // Helper function to poll for SQS queue availability. Returns the resolved
84
- // queue attributes (including QueueArn) so callers don't have to re-fetch.
85
- async function pollForQueue(sqsClient, queueUrl, startupResourcePolling, extraParams, onResourceAvailable, onError) {
86
- return await waitForResource({
87
- config: startupResourcePolling,
88
- resourceName: `SQS queue ${queueUrl}`,
89
- logger: extraParams?.logger,
90
- errorReporter: extraParams?.errorReporter,
91
- onResourceAvailable,
92
- onError,
93
- checkFn: async () => {
94
- const result = await getQueueAttributes(sqsClient, queueUrl);
95
- if (result.error === 'not_found') {
96
- return { isAvailable: false };
97
- }
98
- return { isAvailable: true, result: result.result };
99
- },
100
- });
97
+ async function findConfirmedSubscriptionArn(snsClient, topicArn, queueArn) {
98
+ const subscription = await findSubscriptionByTopicAndQueue(snsClient, topicArn, queueArn);
99
+ const subscriptionArn = subscription?.SubscriptionArn;
100
+ // Unconfirmed subscriptions are listed with a status placeholder instead of an ARN
101
+ return subscriptionArn?.startsWith('arn:') ? subscriptionArn : undefined;
101
102
  }
102
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: fixme
103
- export async function initSnsSqs(sqsClient, snsClient, stsClient, locatorConfig, creationConfig, subscriptionConfig, extraParams) {
104
- if (!locatorConfig?.subscriptionArn) {
105
- if (!creationConfig?.topic && !locatorConfig?.topicArn && !locatorConfig?.topicName) {
106
- throw new Error('If locatorConfig.subscriptionArn is not specified, creationConfig.topic is mandatory in order to attempt to create missing topic and subscribe to it OR locatorConfig.name or locatorConfig.topicArn parameter is mandatory, to create subscription for existing topic.');
107
- }
108
- if (!creationConfig?.queue) {
109
- throw new Error('If locatorConfig.subscriptionArn is not specified, creationConfig.queue parameter is mandatory, as there will be an attempt to create the missing queue');
110
- }
103
+ /**
104
+ * Subscription is used as is when its ARN is given, created (or updated) when subscriptionConfig is
105
+ * given, and otherwise located by looking up the queue's subscription on the topic.
106
+ */
107
+ async function resolveSubscriptionArn(snsClient, topicArn, queue, locatorConfig, subscriptionConfig, options) {
108
+ if (locatorConfig?.subscriptionArn)
109
+ return locatorConfig.subscriptionArn;
110
+ if (subscriptionConfig) {
111
+ const subscriptionArn = await assertSubscription(snsClient, topicArn, queue.queueArn, subscriptionConfig, { queueName: queue.queueName, topicName: topicArn.split(':').pop() }, options.extraParams?.logger);
112
+ if (!subscriptionArn)
113
+ throw new Error('Failed to subscribe');
114
+ return subscriptionArn;
115
+ }
116
+ return await waitForOrCheckResource(`SNS subscription of SQS queue ${queue.queueArn} to topic ${topicArn}`, `Subscription of queue ${queue.queueArn} to topic ${topicArn} does not exist.`, async () => {
117
+ const subscriptionArn = await findConfirmedSubscriptionArn(snsClient, topicArn, queue.queueArn);
118
+ if (!subscriptionArn)
119
+ return { isAvailable: false };
120
+ return { isAvailable: true, result: subscriptionArn };
121
+ }, options);
122
+ }
123
+ async function resolveSnsSqsResources(sqsClient, snsClient, stsClient, locatorConfig, creationConfig, subscriptionConfig, options) {
124
+ const topicArn = await resolveTopicArn(snsClient, stsClient, locatorConfig, creationConfig, options);
125
+ const queue = await resolveQueue(sqsClient, locatorConfig, creationConfig, options);
126
+ const subscriptionArn = await resolveSubscriptionArn(snsClient, topicArn, queue, locatorConfig, subscriptionConfig, options);
127
+ return { topicArn, subscriptionArn, ...queue };
128
+ }
129
+ function validateInitSnsSqsConfig(locatorConfig, creationConfig, subscriptionConfig) {
130
+ if (!creationConfig?.topic && !locatorConfig?.topicArn && !locatorConfig?.topicName) {
131
+ throw new Error('If locatorConfig.subscriptionArn is not specified, creationConfig.topic is mandatory in order to attempt to create missing topic and subscribe to it OR locatorConfig.topicName or locatorConfig.topicArn parameter is mandatory, to create subscription for existing topic.');
132
+ }
133
+ if (!creationConfig?.queue && !locatorConfig?.queueUrl && !locatorConfig?.queueName) {
134
+ throw new Error('Either creationConfig.queue is mandatory in order to create the queue, or locatorConfig.queueUrl or locatorConfig.queueName is mandatory in order to locate the existing queue');
135
+ }
136
+ // Queue creation config is ignored when the queue is located
137
+ const isQueueLocated = !!(locatorConfig?.queueUrl || locatorConfig?.queueName);
138
+ if (!isQueueLocated && creationConfig?.queue) {
111
139
  if (!creationConfig.queue.QueueName) {
112
140
  throw new Error('If locatorConfig.subscriptionArn is not specified, creationConfig.queue.QueueName parameter is mandatory, as there will be an attempt to create the missing queue');
113
141
  }
114
142
  if (!subscriptionConfig) {
115
- throw new Error('If locatorConfig.subscriptionArn is not specified, subscriptionConfig parameter is mandatory, as there will be an attempt to create the missing subscription');
116
- }
117
- const topicResolutionOptions = {
118
- ...locatorConfig,
119
- ...creationConfig.topic,
120
- };
121
- // If startup resource polling is enabled and we're not creating the topic (just locating it),
122
- // we should poll for the topic to exist before attempting to subscribe
123
- const startupResourcePolling = locatorConfig?.startupResourcePolling;
124
- if (isStartupResourcePollingEnabled(startupResourcePolling) &&
125
- !isCreateTopicCommand(topicResolutionOptions)) {
126
- // Validate that we have either topicArn or topicName to build the ARN
127
- if (!topicResolutionOptions.topicArn && !topicResolutionOptions.topicName) {
128
- throw new Error('When startup resource polling is enabled and topic is not being created, either topicArn or topicName must be provided in locatorConfig to identify the topic to poll for');
129
- }
130
- // topicName is guaranteed to be defined here because we validated above that at least one of topicArn or topicName is present
131
- const topicArnToWaitFor = topicResolutionOptions.topicArn ??
132
- (await buildTopicArn(stsClient, topicResolutionOptions.topicName));
133
- return await createSubscriptionWithPolling(sqsClient, snsClient, stsClient, creationConfig, topicResolutionOptions, subscriptionConfig, topicArnToWaitFor, startupResourcePolling, extraParams);
143
+ throw new Error('If creationConfig.queue is specified, subscriptionConfig is mandatory, as the subscription of a queue being created cannot be located');
134
144
  }
135
- // No polling needed - create subscription immediately
136
- const { subscriptionArn, topicArn, queueUrl, queueArn } = await createSubscription(sqsClient, snsClient, stsClient, creationConfig, topicResolutionOptions, subscriptionConfig, extraParams);
137
- return {
138
- subscriptionArn,
139
- topicArn,
140
- queueName: creationConfig.queue.QueueName,
141
- queueUrl,
142
- queueArn,
143
- };
144
145
  }
145
- const queueUrl = await resolveQueueUrlFromLocatorConfig(sqsClient, locatorConfig);
146
- let queueAttributes;
147
- // Check for existing resources, using the locators
148
- const subscriptionTopicArn = locatorConfig.topicArn ?? (await buildTopicArn(stsClient, locatorConfig.topicName ?? ''));
149
- const startupResourcePolling = locatorConfig.startupResourcePolling;
150
- // If startup resource polling is enabled, poll for resources to become available
151
- if (isStartupResourcePollingEnabled(startupResourcePolling)) {
152
- const nonBlocking = startupResourcePolling.nonBlocking === true;
153
- // Extract queueName early for use in callbacks
154
- const splitUrl = queueUrl.split('/');
155
- // biome-ignore lint/style/noNonNullAssertion: It's ok
156
- const queueName = splitUrl[splitUrl.length - 1];
157
- // Track availability for non-blocking mode coordination. `queueArn`
158
- // doubles as the "queue ready" signal — once it's set, the ARN is
159
- // guaranteed defined, so callers can use it without non-null assertions.
160
- let topicAvailable = false;
161
- let queueArn;
162
- const notifyIfBothReady = () => {
163
- if (nonBlocking && topicAvailable && queueArn) {
164
- extraParams?.onResourcesReady?.({
165
- topicArn: subscriptionTopicArn,
166
- queueUrl,
167
- queueArn,
168
- // subscriptionArn is guaranteed to be defined here because we're in the branch where locatorConfig.subscriptionArn exists
169
- subscriptionArn: locatorConfig.subscriptionArn,
170
- queueName,
171
- });
172
- }
173
- };
174
- const markQueueAvailable = (attrs) => {
175
- const resolvedArn = attrs.attributes?.QueueArn;
176
- if (!resolvedArn) {
177
- extraParams?.onResourcesError?.(new Error(`Could not resolve QueueArn for queue at ${queueUrl}`), { isFinal: true });
178
- return;
179
- }
180
- queueArn = resolvedArn;
181
- notifyIfBothReady();
182
- };
183
- // Wait for topic to become available
184
- const { topicResult } = await pollForTopic(snsClient, subscriptionTopicArn, startupResourcePolling, extraParams, () => {
185
- topicAvailable = true;
186
- notifyIfBothReady();
187
- }, (error, context) => {
188
- extraParams?.onResourcesError?.(error, context);
189
- });
190
- // If topic was immediately available, mark it
191
- if (topicResult !== undefined) {
192
- topicAvailable = true;
193
- }
194
- // If non-blocking and topic wasn't immediately available, return early
195
- // Background polling will continue and call notifyIfBothReady when topic is available
196
- if (nonBlocking && topicResult === undefined) {
197
- // Also start polling for queue in background so we can notify when both are ready
198
- pollForQueue(sqsClient, queueUrl, startupResourcePolling, extraParams, (attrs) => markQueueAvailable(attrs), (error, context) => {
199
- extraParams?.onResourcesError?.(error, context);
200
- })
201
- .then((result) => {
202
- // If queue was immediately available, pollForQueue returns the result
203
- // but doesn't call onResourceAvailable, so we handle it here
204
- if (result !== undefined) {
205
- markQueueAvailable(result);
206
- }
207
- })
208
- .catch((err) => {
209
- // Handle unexpected errors during background polling
210
- const error = isError(err) ? err : new Error(String(err));
211
- extraParams?.logger?.error({
212
- message: 'Background queue polling failed unexpectedly',
213
- queueUrl,
214
- error,
215
- });
216
- extraParams?.onResourcesError?.(error, { isFinal: true });
217
- });
218
- // Non-blocking: caller will be notified via onResourcesReady when ready
219
- return undefined;
220
- }
221
- // Wait for queue to become available
222
- const queueResult = await pollForQueue(sqsClient, queueUrl, startupResourcePolling, extraParams, (attrs) => markQueueAvailable(attrs));
223
- // If queue was immediately available, mark it (reuses the same attrs)
224
- if (queueResult !== undefined) {
225
- markQueueAvailable(queueResult);
226
- queueAttributes = queueResult;
227
- }
228
- // Non-blocking: caller will be notified via onResourcesReady when ready
229
- if (nonBlocking && queueResult === undefined)
230
- return undefined;
146
+ }
147
+ /**
148
+ * Initializes an SNS topic, an SQS queue and the subscription of the queue to the topic. Each
149
+ * resource is resolved independently:
150
+ * - Topic: located when `locatorConfig.topicArn` or `locatorConfig.topicName` is given, otherwise
151
+ * created from `creationConfig.topic`.
152
+ * - Queue: located when `locatorConfig.queueUrl` or `locatorConfig.queueName` is given, otherwise
153
+ * created from `creationConfig.queue`.
154
+ * - Subscription: created (or updated) when `subscriptionConfig` is given, otherwise located by
155
+ * looking up the queue's subscription on the topic.
156
+ *
157
+ * When `locatorConfig.subscriptionArn` is given, every resource is located and `creationConfig` and
158
+ * `subscriptionConfig` are ignored.
159
+ *
160
+ * Located resources are waited for when `locatorConfig.startupResourcePolling` is enabled. In
161
+ * non-blocking mode, `undefined` is returned if they are not immediately available, and
162
+ * `onResourcesReady` is invoked once they are.
163
+ */
164
+ export async function initSnsSqs(sqsClient, snsClient, stsClient, locatorConfig, creationConfig, subscriptionConfig, extraParams) {
165
+ const isFullyLocated = !!locatorConfig?.subscriptionArn;
166
+ const resolvedCreationConfig = isFullyLocated ? undefined : creationConfig;
167
+ const resolvedSubscriptionConfig = isFullyLocated ? undefined : subscriptionConfig;
168
+ validateInitSnsSqsConfig(locatorConfig, resolvedCreationConfig, resolvedSubscriptionConfig);
169
+ const resolve = (options) => resolveSnsSqsResources(sqsClient, snsClient, stsClient, locatorConfig, resolvedCreationConfig, resolvedSubscriptionConfig, { ...options, extraParams });
170
+ const startupResourcePolling = locatorConfig?.startupResourcePolling;
171
+ if (!isStartupResourcePollingEnabled(startupResourcePolling)) {
172
+ return await resolve({ checkLocatedTopic: !resolvedSubscriptionConfig });
231
173
  }
232
- else {
233
- // Original behavior: check resources once and fail immediately if not found
234
- const [topicCheckResult, queueCheckResult] = await Promise.all([
235
- getTopicAttributes(snsClient, subscriptionTopicArn),
236
- getQueueAttributes(sqsClient, queueUrl),
237
- ]);
238
- if (queueCheckResult.error === 'not_found') {
239
- throw new Error(`Queue with queueUrl ${queueUrl} does not exist.`);
240
- }
241
- if (topicCheckResult.error === 'not_found') {
242
- throw new Error(`Topic with topicArn ${subscriptionTopicArn} does not exist.`);
243
- }
244
- // Capture so the final return below can read QueueArn without a re-fetch
245
- queueAttributes = queueCheckResult.result;
174
+ if (startupResourcePolling.nonBlocking !== true) {
175
+ return await resolve({ polling: startupResourcePolling, checkLocatedTopic: true });
246
176
  }
247
- let queueName;
248
- if (queueUrl) {
249
- const splitUrl = queueUrl.split('/');
250
- // biome-ignore lint/style/noNonNullAssertion: It's ok
251
- queueName = splitUrl[splitUrl.length - 1];
177
+ // Non-blocking: resources are returned directly if they are all available on the first check,
178
+ // otherwise they keep being resolved in background and onResourcesReady is invoked once ready
179
+ try {
180
+ return await resolve({ checkLocatedTopic: true });
252
181
  }
253
- else {
254
- // biome-ignore lint/style/noNonNullAssertion: It's ok
255
- queueName = creationConfig.queue.QueueName;
182
+ catch (err) {
183
+ if (!isInternalError(err) || err.errorCode !== RESOURCE_NOT_FOUND_ERROR_CODE)
184
+ throw err;
185
+ extraParams?.logger?.info({
186
+ message: 'SNS/SQS resources not immediately available, resolving them in background',
187
+ reason: err.message,
188
+ });
256
189
  }
257
- // Resources are confirmed available; read QueueArn from the attributes we
258
- // already fetched in whichever branch ran above (no extra round-trip).
259
- const queueArn = queueAttributes?.attributes?.QueueArn;
260
- if (!queueArn)
261
- throw new Error(`Could not resolve QueueArn for queue at ${queueUrl}`);
262
- return {
263
- subscriptionArn: locatorConfig.subscriptionArn,
264
- topicArn: subscriptionTopicArn,
265
- queueUrl,
266
- queueArn,
267
- queueName,
268
- };
190
+ resolve({ polling: startupResourcePolling, checkLocatedTopic: true })
191
+ .then((result) => extraParams?.onResourcesReady?.(result))
192
+ .catch((err) => {
193
+ const error = isError(err) ? err : new Error(String(err));
194
+ extraParams?.logger?.error({
195
+ message: 'Background SNS/SQS resources resolution failed',
196
+ error,
197
+ });
198
+ // Blocking polling only throws when it gives up, so the error is final
199
+ extraParams?.onResourcesError?.(error, { isFinal: true });
200
+ });
201
+ return undefined;
269
202
  }
270
203
  export async function deleteSnsSqs(sqsClient, snsClient, stsClient, deletionConfig, queueConfiguration, topicConfiguration, subscriptionConfiguration, extraParams, topicLocator) {
271
204
  if (!deletionConfig.deleteIfExists) {
@@ -1 +1 @@
1
- {"version":3,"file":"snsInitter.js","sourceRoot":"","sources":["../../lib/utils/snsInitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snsInitter.js","sourceRoot":"","sources":["../../lib/utils/snsInitter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { SNSClient, SubscribeCommandInput } from '@aws-sdk/client-sns';
2
2
  import type { CreateQueueCommandInput, SQSClient } from '@aws-sdk/client-sqs';
3
3
  import type { STSClient } from '@aws-sdk/client-sts';
4
+ import { type CommonLogger } from '@lokalise/node-core';
4
5
  import type { ExtraParams } from '@message-queue-toolkit/core';
5
6
  import type { ExtraSQSCreationParams } from '@message-queue-toolkit/sqs';
6
7
  import type { ExtraSNSCreationParams } from '../sns/AbstractSnsService.ts';
@@ -8,9 +9,22 @@ import { type TopicResolutionOptions } from '../types/TopicTypes.ts';
8
9
  export type SNSSubscriptionOptions = Omit<SubscribeCommandInput, 'TopicArn' | 'Endpoint' | 'Protocol' | 'ReturnSubscriptionArn'> & {
9
10
  updateAttributesIfExists: boolean;
10
11
  };
12
+ /**
13
+ * Asserts the SNS topic (or resolves the ARN of a located one), asserts the SQS queue and then
14
+ * asserts the subscription of the queue to the topic.
15
+ */
11
16
  export declare function subscribeToTopic(sqsClient: SQSClient, snsClient: SNSClient, stsClient: STSClient, queueConfiguration: CreateQueueCommandInput, topicConfiguration: TopicResolutionOptions, subscriptionConfiguration: SNSSubscriptionOptions, extraParams?: ExtraSNSCreationParams & ExtraSQSCreationParams & ExtraParams): Promise<{
12
17
  subscriptionArn: string | undefined;
13
18
  topicArn: string;
14
19
  queueUrl: string;
15
20
  queueArn: string;
16
21
  }>;
22
+ /**
23
+ * Subscribes an existing SQS queue to an existing SNS topic. Subscribing is idempotent, so an
24
+ * existing subscription is returned as is, or has its attributes updated when they differ and
25
+ * `updateAttributesIfExists` is enabled.
26
+ */
27
+ export declare function assertSubscription(snsClient: SNSClient, topicArn: string, queueArn: string, subscriptionConfiguration: SNSSubscriptionOptions, errorContext: {
28
+ queueName?: string;
29
+ topicName?: string;
30
+ }, logger?: CommonLogger): Promise<string | undefined>;
@@ -1,5 +1,5 @@
1
1
  import { SetSubscriptionAttributesCommand, SubscribeCommand } from '@aws-sdk/client-sns';
2
- import { InternalError, isError, stringValueSerializer } from '@lokalise/node-core';
2
+ import { InternalError, isError, stringValueSerializer, } from '@lokalise/node-core';
3
3
  import { assertQueue } from '@message-queue-toolkit/sqs';
4
4
  import { isCreateTopicCommand, isSNSTopicLocatorType, } from '../types/TopicTypes.js';
5
5
  import { assertTopic, findSubscriptionByTopicAndQueue } from './snsUtils.js';
@@ -24,6 +24,10 @@ async function resolveTopicArnToSubscribeTo(snsClient, stsClient, topicConfigura
24
24
  details: { topicConfiguration: stringValueSerializer(topicConfiguration) },
25
25
  });
26
26
  }
27
+ /**
28
+ * Asserts the SNS topic (or resolves the ARN of a located one), asserts the SQS queue and then
29
+ * asserts the subscription of the queue to the topic.
30
+ */
27
31
  export async function subscribeToTopic(sqsClient, snsClient, stsClient, queueConfiguration, topicConfiguration, subscriptionConfiguration, extraParams) {
28
32
  const topicArn = await resolveTopicArnToSubscribeTo(snsClient, stsClient, topicConfiguration, extraParams);
29
33
  const { queueUrl, queueArn } = await assertQueue(sqsClient, queueConfiguration, {
@@ -31,6 +35,20 @@ export async function subscribeToTopic(sqsClient, snsClient, stsClient, queueCon
31
35
  updateAttributesIfExists: extraParams?.updateAttributesIfExists,
32
36
  forceTagUpdate: extraParams?.forceTagUpdate,
33
37
  });
38
+ const subscriptionArn = await assertSubscription(snsClient, topicArn, queueArn, subscriptionConfiguration, {
39
+ queueName: queueConfiguration.QueueName,
40
+ topicName: isCreateTopicCommand(topicConfiguration)
41
+ ? topicConfiguration.Name
42
+ : topicConfiguration.topicName,
43
+ }, extraParams?.logger);
44
+ return { subscriptionArn, topicArn, queueUrl, queueArn };
45
+ }
46
+ /**
47
+ * Subscribes an existing SQS queue to an existing SNS topic. Subscribing is idempotent, so an
48
+ * existing subscription is returned as is, or has its attributes updated when they differ and
49
+ * `updateAttributesIfExists` is enabled.
50
+ */
51
+ export async function assertSubscription(snsClient, topicArn, queueArn, subscriptionConfiguration, errorContext, logger) {
34
52
  const subscribeCommand = new SubscribeCommand({
35
53
  TopicArn: topicArn,
36
54
  Endpoint: queueArn,
@@ -40,41 +58,28 @@ export async function subscribeToTopic(sqsClient, snsClient, stsClient, queueCon
40
58
  });
41
59
  try {
42
60
  const subscriptionResult = await snsClient.send(subscribeCommand);
43
- return {
44
- subscriptionArn: subscriptionResult.SubscriptionArn,
45
- topicArn,
46
- queueUrl,
47
- queueArn,
48
- };
61
+ return subscriptionResult.SubscriptionArn;
49
62
  }
50
63
  catch (err) {
51
64
  if (!isError(err))
52
65
  throw err;
53
- const logger = extraParams?.logger ?? console;
54
- const errMessage = `Error while creating subscription for queue "${queueConfiguration.QueueName}", topic "${isCreateTopicCommand(topicConfiguration)
55
- ? topicConfiguration.Name
56
- : topicConfiguration.topicName}": ${err.message}`;
66
+ const resolvedLogger = logger ?? console;
67
+ const errMessage = `Error while creating subscription for queue "${errorContext.queueName}", topic "${errorContext.topicName}": ${err.message}`;
57
68
  if (subscriptionConfiguration.updateAttributesIfExists &&
58
- err.message.indexOf('Subscription already exists with different attributes') !== -1) {
59
- logger.warn(`${errMessage}. Trying to update subscription`);
69
+ err.message.includes('Subscription already exists with different attributes')) {
70
+ resolvedLogger.warn(`${errMessage}. Trying to update subscription`);
60
71
  const result = await tryToUpdateSubscription(snsClient, topicArn, queueArn, subscriptionConfiguration);
61
- if (result) {
62
- return {
63
- subscriptionArn: result.SubscriptionArn,
64
- topicArn,
65
- queueUrl,
66
- queueArn,
67
- };
68
- }
69
- logger.error('Failed to update subscription');
72
+ if (result)
73
+ return result.SubscriptionArn;
74
+ resolvedLogger.error('Failed to update subscription');
70
75
  }
71
76
  else {
72
- logger.error(errMessage);
77
+ resolvedLogger.error(errMessage);
73
78
  }
74
79
  throw new InternalError({
75
80
  errorCode: 'sns_subscription_creation_failed',
76
81
  message: errMessage,
77
- details: { queueName: queueConfiguration.QueueName, topicArn, originalError: err.message },
82
+ details: { queueName: errorContext.queueName, topicArn, originalError: err.message },
78
83
  cause: err,
79
84
  });
80
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snsSubscriber.js","sourceRoot":"","sources":["../../lib/utils/snsSubscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGxF,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAGnF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAO7C,KAAK,UAAU,4BAA4B,CACzC,SAAoB,EACpB,SAAoB,EACpB,kBAA0C,EAC1C,WAAwF;IAExF,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC9C,IAAI,kBAAkB,CAAC,QAAQ;YAAE,OAAO,kBAAkB,CAAC,QAAQ,CAAA;QACnE,IAAI,kBAAkB,CAAC,SAAS;YAAE,OAAO,aAAa,CAAC,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACjG,CAAC;IAED,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,OAAO,MAAM,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACjE,uCAAuC,EAAE,WAAW,EAAE,uCAAuC;YAC7F,kBAAkB,EAAE,WAAW,EAAE,kBAAkB;YACnD,cAAc,EAAE,WAAW,EAAE,cAAc;SAC5C,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,IAAI,aAAa,CAAC;QACtB,SAAS,EAAE,6BAA6B;QACxC,OAAO,EAAE,gEAAgE;QACzE,OAAO,EAAE,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,EAAE;KAC3E,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAoB,EACpB,SAAoB,EACpB,SAAoB,EACpB,kBAA2C,EAC3C,kBAA0C,EAC1C,yBAAiD,EACjD,WAA2E;IAE3E,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CACjD,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,WAAW,CACZ,CAAA;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,kBAAkB,EAAE;QAC9E,qCAAqC,EAAE,WAAW,EAAE,qCAAqC;QACzF,wBAAwB,EAAE,WAAW,EAAE,wBAAwB;QAC/D,cAAc,EAAE,WAAW,EAAE,cAAc;KAC5C,CAAC,CAAA;IAEF,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC5C,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,KAAK;QACf,qBAAqB,EAAE,IAAI;QAC3B,GAAG,yBAAyB;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACjE,OAAO;YACL,eAAe,EAAE,kBAAkB,CAAC,eAAe;YACnD,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAA;QAE5B,MAAM,MAAM,GAAG,WAAW,EAAE,MAAM,IAAI,OAAO,CAAA;QAC7C,MAAM,UAAU,GAAG,gDAAgD,kBAAkB,CAAC,SAAS,aAC7F,oBAAoB,CAAC,kBAAkB,CAAC;YACtC,CAAC,CAAC,kBAAkB,CAAC,IAAI;YACzB,CAAC,CAAC,kBAAkB,CAAC,SACzB,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;QAEnB,IACE,yBAAyB,CAAC,wBAAwB;YAClD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,uDAAuD,CAAC,KAAK,CAAC,CAAC,EACnF,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,iCAAiC,CAAC,CAAA;YAE3D,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,yBAAyB,CAC1B,CAAA;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,QAAQ;oBACR,QAAQ;oBACR,QAAQ;iBACT,CAAA;YACH,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,IAAI,aAAa,CAAC;YACtB,SAAS,EAAE,kCAAkC;YAC7C,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,OAAO,EAAE;YAC1F,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,SAAoB,EACpB,QAAgB,EAChB,QAAgB,EAChB,yBAAiD;IAEjD,MAAM,YAAY,GAAG,MAAM,+BAA+B,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACzF,IAAI,CAAC,YAAY,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,iCAAiC,GAAG,MAAM,CAAC,OAAO,CACtD,yBAAyB,CAAC,UAAU,CACrC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrB,OAAO,IAAI,gCAAgC,CAAC;YAC1C,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,aAAa,EAAE,GAAG;YAClB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,OAAO,IAAI,iCAAiC,EAAE,CAAC;QACxD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC"}
1
+ {"version":3,"file":"snsSubscriber.js","sourceRoot":"","sources":["../../lib/utils/snsSubscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGxF,OAAO,EAEL,aAAa,EACb,OAAO,EACP,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAO7C,KAAK,UAAU,4BAA4B,CACzC,SAAoB,EACpB,SAAoB,EACpB,kBAA0C,EAC1C,WAAwF;IAExF,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC9C,IAAI,kBAAkB,CAAC,QAAQ;YAAE,OAAO,kBAAkB,CAAC,QAAQ,CAAA;QACnE,IAAI,kBAAkB,CAAC,SAAS;YAAE,OAAO,aAAa,CAAC,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACjG,CAAC;IAED,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,OAAO,MAAM,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE;YACjE,uCAAuC,EAAE,WAAW,EAAE,uCAAuC;YAC7F,kBAAkB,EAAE,WAAW,EAAE,kBAAkB;YACnD,cAAc,EAAE,WAAW,EAAE,cAAc;SAC5C,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,IAAI,aAAa,CAAC;QACtB,SAAS,EAAE,6BAA6B;QACxC,OAAO,EAAE,gEAAgE;QACzE,OAAO,EAAE,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,EAAE;KAC3E,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAoB,EACpB,SAAoB,EACpB,SAAoB,EACpB,kBAA2C,EAC3C,kBAA0C,EAC1C,yBAAiD,EACjD,WAA2E;IAE3E,MAAM,QAAQ,GAAG,MAAM,4BAA4B,CACjD,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB,WAAW,CACZ,CAAA;IAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,kBAAkB,EAAE;QAC9E,qCAAqC,EAAE,WAAW,EAAE,qCAAqC;QACzF,wBAAwB,EAAE,WAAW,EAAE,wBAAwB;QAC/D,cAAc,EAAE,WAAW,EAAE,cAAc;KAC5C,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAC9C,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,yBAAyB,EACzB;QACE,SAAS,EAAE,kBAAkB,CAAC,SAAS;QACvC,SAAS,EAAE,oBAAoB,CAAC,kBAAkB,CAAC;YACjD,CAAC,CAAC,kBAAkB,CAAC,IAAI;YACzB,CAAC,CAAC,kBAAkB,CAAC,SAAS;KACjC,EACD,WAAW,EAAE,MAAM,CACpB,CAAA;IAED,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAoB,EACpB,QAAgB,EAChB,QAAgB,EAChB,yBAAiD,EACjD,YAAwD,EACxD,MAAqB;IAErB,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC5C,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,KAAK;QACf,qBAAqB,EAAE,IAAI;QAC3B,GAAG,yBAAyB;KAC7B,CAAC,CAAA;IAEF,IAAI,CAAC;QACH,MAAM,kBAAkB,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACjE,OAAO,kBAAkB,CAAC,eAAe,CAAA;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,MAAM,GAAG,CAAA;QAE5B,MAAM,cAAc,GAAG,MAAM,IAAI,OAAO,CAAA;QACxC,MAAM,UAAU,GAAG,gDAAgD,YAAY,CAAC,SAAS,aAAa,YAAY,CAAC,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CAAA;QAE/I,IACE,yBAAyB,CAAC,wBAAwB;YAClD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,uDAAuD,CAAC,EAC7E,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,GAAG,UAAU,iCAAiC,CAAC,CAAA;YAEnE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,yBAAyB,CAC1B,CAAA;YACD,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC,eAAe,CAAA;YAEzC,cAAc,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAClC,CAAC;QAED,MAAM,IAAI,aAAa,CAAC;YACtB,SAAS,EAAE,kCAAkC;YAC7C,OAAO,EAAE,UAAU;YACnB,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,CAAC,OAAO,EAAE;YACpF,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,SAAoB,EACpB,QAAgB,EAChB,QAAgB,EAChB,yBAAiD;IAEjD,MAAM,YAAY,GAAG,MAAM,+BAA+B,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACzF,IAAI,CAAC,YAAY,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,iCAAiC,GAAG,MAAM,CAAC,OAAO,CACtD,yBAAyB,CAAC,UAAU,CACrC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrB,OAAO,IAAI,gCAAgC,CAAC;YAC1C,eAAe,EAAE,YAAY,CAAC,eAAe;YAC7C,aAAa,EAAE,GAAG;YAClB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,OAAO,IAAI,iCAAiC,EAAE,CAAC;QACxD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,YAAY,CAAA;AACrB,CAAC"}
@@ -131,13 +131,18 @@ export async function deleteSubscription(client, subscriptionArn) {
131
131
  }
132
132
  }
133
133
  export async function findSubscriptionByTopicAndQueue(snsClient, topicArn, queueArn) {
134
- const listSubscriptionsCommand = new ListSubscriptionsByTopicCommand({
135
- TopicArn: topicArn,
136
- });
137
- const listSubscriptionResult = await snsClient.send(listSubscriptionsCommand);
138
- return listSubscriptionResult.Subscriptions?.find((entry) => {
139
- return entry.Endpoint === queueArn;
140
- });
134
+ // ListSubscriptionsByTopic returns up to 100 subscriptions per page
135
+ let nextToken;
136
+ do {
137
+ const listSubscriptionResult = await snsClient.send(new ListSubscriptionsByTopicCommand({ TopicArn: topicArn, NextToken: nextToken }));
138
+ const subscription = listSubscriptionResult.Subscriptions?.find((entry) => {
139
+ return entry.Protocol === 'sqs' && entry.Endpoint === queueArn;
140
+ });
141
+ if (subscription)
142
+ return subscription;
143
+ nextToken = listSubscriptionResult.NextToken;
144
+ } while (nextToken);
145
+ return undefined;
141
146
  }
142
147
  /**
143
148
  * Calculates the size of an outgoing SNS message.
@@ -1 +1 @@
1
- {"version":3,"file":"snsUtils.js","sourceRoot":"","sources":["../../lib/utils/snsUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snsUtils.js","sourceRoot":"","sources":["../../lib/utils/snsUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/sns",
3
- "version": "27.0.1",
3
+ "version": "27.1.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "SNS adapter for message-queue-toolkit",
@@ -33,27 +33,27 @@
33
33
  "zod": "^4.5.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@aws-sdk/client-s3": "^3.1124.0",
37
- "@aws-sdk/client-sns": "^3.1124.0",
38
- "@aws-sdk/client-sqs": "^3.1124.0",
39
- "@aws-sdk/client-sts": "^3.1124.0",
40
- "@biomejs/biome": "^2.5.11",
36
+ "@aws-sdk/client-s3": "^3.1138.0",
37
+ "@aws-sdk/client-sns": "^3.1138.0",
38
+ "@aws-sdk/client-sqs": "^3.1134.0",
39
+ "@aws-sdk/client-sts": "^3.1138.0",
40
+ "@biomejs/biome": "^2.5.14",
41
41
  "@lokalise/biome-config": "^3.1.1",
42
42
  "@lokalise/tsconfig": "^5.0.0",
43
- "@message-queue-toolkit/core": "27.0.1",
43
+ "@message-queue-toolkit/core": "27.2.0",
44
44
  "@message-queue-toolkit/redis-message-deduplication-store": "3.0.1",
45
- "@message-queue-toolkit/s3-payload-store": "4.0.1",
46
- "@message-queue-toolkit/sqs": "27.0.1",
47
- "@types/node": "^26.4.1",
48
- "@vitest/coverage-v8": "^4.1.11",
45
+ "@message-queue-toolkit/s3-payload-store": "4.0.2",
46
+ "@message-queue-toolkit/sqs": "27.1.1",
47
+ "@types/node": "^26.6.2",
48
+ "@vitest/coverage-v8": "^5.0.1",
49
49
  "awilix": "^13.0.5",
50
- "awilix-manager": "^7.0.0",
51
- "fauxqs": "^2.12.0",
50
+ "awilix-manager": "^7.1.0",
51
+ "fauxqs": "^2.12.1",
52
52
  "ioredis": "^5.11.1",
53
53
  "rimraf": "^6.1.3",
54
54
  "typescript": "^7.0.2",
55
- "vitest": "^4.1.11",
56
- "zod": "^4.5.4"
55
+ "vitest": "^5.0.1",
56
+ "zod": "^4.6.5"
57
57
  },
58
58
  "homepage": "https://github.com/kibertoad/message-queue-toolkit",
59
59
  "repository": {