@message-queue-toolkit/sns 2.1.0 → 3.0.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.
Files changed (32) hide show
  1. package/dist/index.d.ts +10 -2
  2. package/dist/index.js +16 -3
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/sns/AbstractSnsPublisherMonoSchema.d.ts +17 -0
  5. package/dist/lib/sns/AbstractSnsPublisherMonoSchema.js +40 -0
  6. package/dist/lib/sns/AbstractSnsPublisherMonoSchema.js.map +1 -0
  7. package/dist/lib/sns/AbstractSnsPublisherMultiSchema.d.ts +18 -0
  8. package/dist/lib/sns/AbstractSnsPublisherMultiSchema.js +40 -0
  9. package/dist/lib/sns/AbstractSnsPublisherMultiSchema.js.map +1 -0
  10. package/dist/lib/sns/AbstractSnsService.d.ts +7 -4
  11. package/dist/lib/sns/AbstractSnsService.js +3 -14
  12. package/dist/lib/sns/AbstractSnsService.js.map +1 -1
  13. package/dist/lib/sns/AbstractSnsSqsConsumerMonoSchema.d.ts +34 -0
  14. package/dist/lib/sns/AbstractSnsSqsConsumerMonoSchema.js +42 -0
  15. package/dist/lib/sns/AbstractSnsSqsConsumerMonoSchema.js.map +1 -0
  16. package/dist/lib/sns/AbstractSnsSqsConsumerMultiSchema.d.ts +17 -0
  17. package/dist/lib/sns/AbstractSnsSqsConsumerMultiSchema.js +36 -0
  18. package/dist/lib/sns/AbstractSnsSqsConsumerMultiSchema.js.map +1 -0
  19. package/dist/lib/sns/SnsInitter.d.ts +12 -0
  20. package/dist/lib/sns/SnsInitter.js +50 -0
  21. package/dist/lib/sns/SnsInitter.js.map +1 -0
  22. package/dist/lib/sns/snsMessageReader.d.ts +4 -0
  23. package/dist/lib/sns/snsMessageReader.js +19 -0
  24. package/dist/lib/sns/snsMessageReader.js.map +1 -0
  25. package/dist/lib/types/MessageTypes.d.ts +2 -2
  26. package/package.json +11 -11
  27. package/dist/lib/sns/AbstractSnsPublisher.d.ts +0 -9
  28. package/dist/lib/sns/AbstractSnsPublisher.js +0 -24
  29. package/dist/lib/sns/AbstractSnsPublisher.js.map +0 -1
  30. package/dist/lib/sns/AbstractSnsSqsConsumer.d.ts +0 -25
  31. package/dist/lib/sns/AbstractSnsSqsConsumer.js +0 -62
  32. package/dist/lib/sns/AbstractSnsSqsConsumer.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,15 @@
1
1
  export type { SNSTopicAWSConfig, SNSTopicConfig, SNSConsumerDependencies, SNSQueueLocatorType, } from './lib/sns/AbstractSnsService';
2
2
  export { SnsConsumerErrorResolver } from './lib/errors/SnsConsumerErrorResolver';
3
- export { AbstractSnsPublisher } from './lib/sns/AbstractSnsPublisher';
4
- export type { SNSMessageOptions } from './lib/sns/AbstractSnsPublisher';
3
+ export { AbstractSnsPublisherMonoSchema } from './lib/sns/AbstractSnsPublisherMonoSchema';
4
+ export { AbstractSnsPublisherMultiSchema } from './lib/sns/AbstractSnsPublisherMultiSchema';
5
+ export { AbstractSnsSqsConsumerMonoSchema } from './lib/sns/AbstractSnsSqsConsumerMonoSchema';
6
+ export { AbstractSnsSqsConsumerMultiSchema } from './lib/sns/AbstractSnsSqsConsumerMultiSchema';
7
+ export type { ExistingSnsSqsConsumerOptions, NewSnsSqsConsumerOptions, SNSSQSConsumerDependencies, ExistingSnsSqsConsumerOptionsMono, NewSnsSqsConsumerOptionsMono, SNSSQSQueueLocatorType, } from './lib/sns/AbstractSnsSqsConsumerMonoSchema';
8
+ export type { NewSnsSqsConsumerOptionsMulti, ExistingSnsSqsConsumerOptionsMulti, } from './lib/sns/AbstractSnsSqsConsumerMultiSchema';
9
+ export type { SNSMessageOptions } from './lib/sns/AbstractSnsPublisherMonoSchema';
5
10
  export type { CommonMessage } from './lib/types/MessageTypes';
6
11
  export { deserializeSNSMessage } from './lib/sns/snsMessageDeserializer';
7
12
  export { assertTopic, deleteTopic, getTopicAttributes, deleteSubscription, } from './lib/utils/snsUtils';
13
+ export { subscribeToTopic } from './lib/sns/SnsSubscriber';
14
+ export { initSns, initSnsSqs } from './lib/sns/SnsInitter';
15
+ export { readSnsMessage } from './lib/sns/snsMessageReader';
package/dist/index.js CHANGED
@@ -1,10 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteSubscription = exports.getTopicAttributes = exports.deleteTopic = exports.assertTopic = exports.deserializeSNSMessage = exports.AbstractSnsPublisher = exports.SnsConsumerErrorResolver = void 0;
3
+ exports.readSnsMessage = exports.initSnsSqs = exports.initSns = exports.subscribeToTopic = exports.deleteSubscription = exports.getTopicAttributes = exports.deleteTopic = exports.assertTopic = exports.deserializeSNSMessage = exports.AbstractSnsSqsConsumerMultiSchema = exports.AbstractSnsSqsConsumerMonoSchema = exports.AbstractSnsPublisherMultiSchema = exports.AbstractSnsPublisherMonoSchema = exports.SnsConsumerErrorResolver = void 0;
4
4
  var SnsConsumerErrorResolver_1 = require("./lib/errors/SnsConsumerErrorResolver");
5
5
  Object.defineProperty(exports, "SnsConsumerErrorResolver", { enumerable: true, get: function () { return SnsConsumerErrorResolver_1.SnsConsumerErrorResolver; } });
6
- var AbstractSnsPublisher_1 = require("./lib/sns/AbstractSnsPublisher");
7
- Object.defineProperty(exports, "AbstractSnsPublisher", { enumerable: true, get: function () { return AbstractSnsPublisher_1.AbstractSnsPublisher; } });
6
+ var AbstractSnsPublisherMonoSchema_1 = require("./lib/sns/AbstractSnsPublisherMonoSchema");
7
+ Object.defineProperty(exports, "AbstractSnsPublisherMonoSchema", { enumerable: true, get: function () { return AbstractSnsPublisherMonoSchema_1.AbstractSnsPublisherMonoSchema; } });
8
+ var AbstractSnsPublisherMultiSchema_1 = require("./lib/sns/AbstractSnsPublisherMultiSchema");
9
+ Object.defineProperty(exports, "AbstractSnsPublisherMultiSchema", { enumerable: true, get: function () { return AbstractSnsPublisherMultiSchema_1.AbstractSnsPublisherMultiSchema; } });
10
+ var AbstractSnsSqsConsumerMonoSchema_1 = require("./lib/sns/AbstractSnsSqsConsumerMonoSchema");
11
+ Object.defineProperty(exports, "AbstractSnsSqsConsumerMonoSchema", { enumerable: true, get: function () { return AbstractSnsSqsConsumerMonoSchema_1.AbstractSnsSqsConsumerMonoSchema; } });
12
+ var AbstractSnsSqsConsumerMultiSchema_1 = require("./lib/sns/AbstractSnsSqsConsumerMultiSchema");
13
+ Object.defineProperty(exports, "AbstractSnsSqsConsumerMultiSchema", { enumerable: true, get: function () { return AbstractSnsSqsConsumerMultiSchema_1.AbstractSnsSqsConsumerMultiSchema; } });
8
14
  var snsMessageDeserializer_1 = require("./lib/sns/snsMessageDeserializer");
9
15
  Object.defineProperty(exports, "deserializeSNSMessage", { enumerable: true, get: function () { return snsMessageDeserializer_1.deserializeSNSMessage; } });
10
16
  var snsUtils_1 = require("./lib/utils/snsUtils");
@@ -12,4 +18,11 @@ Object.defineProperty(exports, "assertTopic", { enumerable: true, get: function
12
18
  Object.defineProperty(exports, "deleteTopic", { enumerable: true, get: function () { return snsUtils_1.deleteTopic; } });
13
19
  Object.defineProperty(exports, "getTopicAttributes", { enumerable: true, get: function () { return snsUtils_1.getTopicAttributes; } });
14
20
  Object.defineProperty(exports, "deleteSubscription", { enumerable: true, get: function () { return snsUtils_1.deleteSubscription; } });
21
+ var SnsSubscriber_1 = require("./lib/sns/SnsSubscriber");
22
+ Object.defineProperty(exports, "subscribeToTopic", { enumerable: true, get: function () { return SnsSubscriber_1.subscribeToTopic; } });
23
+ var SnsInitter_1 = require("./lib/sns/SnsInitter");
24
+ Object.defineProperty(exports, "initSns", { enumerable: true, get: function () { return SnsInitter_1.initSns; } });
25
+ Object.defineProperty(exports, "initSnsSqs", { enumerable: true, get: function () { return SnsInitter_1.initSnsSqs; } });
26
+ var snsMessageReader_1 = require("./lib/sns/snsMessageReader");
27
+ Object.defineProperty(exports, "readSnsMessage", { enumerable: true, get: function () { return snsMessageReader_1.readSnsMessage; } });
15
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAOA,kFAAgF;AAAvE,oIAAA,wBAAwB,OAAA;AAEjC,uEAAqE;AAA5D,4HAAA,oBAAoB,OAAA;AAK7B,2EAAwE;AAA/D,+HAAA,qBAAqB,OAAA;AAE9B,iDAK6B;AAJ3B,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,8GAAA,kBAAkB,OAAA;AAClB,8GAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAOA,kFAAgF;AAAvE,oIAAA,wBAAwB,OAAA;AAEjC,2FAAyF;AAAhF,gJAAA,8BAA8B,OAAA;AACvC,6FAA2F;AAAlF,kJAAA,+BAA+B,OAAA;AAExC,+FAA6F;AAApF,oJAAA,gCAAgC,OAAA;AACzC,iGAA+F;AAAtF,sJAAA,iCAAiC,OAAA;AAkB1C,2EAAwE;AAA/D,+HAAA,qBAAqB,OAAA;AAE9B,iDAK6B;AAJ3B,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AACX,8GAAA,kBAAkB,OAAA;AAClB,8GAAA,kBAAkB,OAAA;AAGpB,yDAA0D;AAAjD,iHAAA,gBAAgB,OAAA;AACzB,mDAA0D;AAAjD,qGAAA,OAAO,OAAA;AAAE,wGAAA,UAAU,OAAA;AAC5B,+DAA2D;AAAlD,kHAAA,cAAc,OAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Either } from '@lokalise/node-core';
2
+ import type { AsyncPublisher, MessageInvalidFormatError, MessageValidationError, MonoSchemaQueueOptions, NewQueueOptions } from '@message-queue-toolkit/core';
3
+ import type { ZodSchema } from 'zod';
4
+ import type { ExistingSNSOptions, SNSCreationConfig, SNSDependencies } from './AbstractSnsService';
5
+ import { AbstractSnsService } from './AbstractSnsService';
6
+ export type SNSMessageOptions = {
7
+ MessageGroupId?: string;
8
+ MessageDeduplicationId?: string;
9
+ };
10
+ export declare abstract class AbstractSnsPublisherMonoSchema<MessagePayloadType extends object> extends AbstractSnsService<MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SNSMessageOptions> {
11
+ private readonly messageSchema;
12
+ private readonly schemaEither;
13
+ constructor(dependencies: SNSDependencies, options: (ExistingSNSOptions | NewQueueOptions<SNSCreationConfig>) & MonoSchemaQueueOptions<MessagePayloadType>);
14
+ publish(message: MessagePayloadType, options?: SNSMessageOptions): Promise<void>;
15
+ protected resolveMessage(): Either<MessageInvalidFormatError | MessageValidationError, unknown>;
16
+ protected resolveSchema(): Either<Error, ZodSchema<MessagePayloadType, import("zod").ZodTypeDef, MessagePayloadType>>;
17
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractSnsPublisherMonoSchema = void 0;
4
+ const client_sns_1 = require("@aws-sdk/client-sns");
5
+ const AbstractSnsService_1 = require("./AbstractSnsService");
6
+ class AbstractSnsPublisherMonoSchema extends AbstractSnsService_1.AbstractSnsService {
7
+ messageSchema;
8
+ schemaEither;
9
+ constructor(dependencies, options) {
10
+ super(dependencies, options);
11
+ this.messageSchema = options.messageSchema;
12
+ this.schemaEither = {
13
+ result: this.messageSchema,
14
+ };
15
+ }
16
+ async publish(message, options = {}) {
17
+ try {
18
+ const input = {
19
+ Message: JSON.stringify(message),
20
+ TopicArn: this.topicArn,
21
+ ...options,
22
+ };
23
+ const command = new client_sns_1.PublishCommand(input);
24
+ await this.snsClient.send(command);
25
+ }
26
+ catch (error) {
27
+ this.handleError(error);
28
+ throw error;
29
+ }
30
+ }
31
+ /* c8 ignore start */
32
+ resolveMessage() {
33
+ throw new Error('Not implemented for publisher');
34
+ }
35
+ resolveSchema() {
36
+ return this.schemaEither;
37
+ }
38
+ }
39
+ exports.AbstractSnsPublisherMonoSchema = AbstractSnsPublisherMonoSchema;
40
+ //# sourceMappingURL=AbstractSnsPublisherMonoSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSnsPublisherMonoSchema.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsPublisherMonoSchema.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AAapD,6DAAyD;AAOzD,MAAsB,8BACpB,SAAQ,uCAAsC;IAG7B,aAAa,CAA+B;IAC5C,YAAY,CAA8C;IAE3E,YACE,YAA6B,EAC7B,OAC4C;QAE5C,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;QAC1C,IAAI,CAAC,YAAY,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA2B,EAAE,UAA6B,EAAE;QACxE,IAAI;YACF,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,OAAO;aACmB,CAAA;YAC/B,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACnC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACvB,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;IAED,qBAAqB;IACF,cAAc;QAI/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEkB,aAAa;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;CAEF;AA9CD,wEA8CC"}
@@ -0,0 +1,18 @@
1
+ import type { Either } from '@lokalise/node-core';
2
+ import type { AsyncPublisher, MessageInvalidFormatError, MessageValidationError, NewQueueOptions } from '@message-queue-toolkit/core';
3
+ import type { ZodSchema } from 'zod';
4
+ import type { ExistingSNSOptions, SNSCreationConfig, SNSDependencies } from './AbstractSnsService';
5
+ import { AbstractSnsService } from './AbstractSnsService';
6
+ export type SNSMessageOptions = {
7
+ MessageGroupId?: string;
8
+ MessageDeduplicationId?: string;
9
+ };
10
+ export declare abstract class AbstractSnsPublisherMultiSchema<MessagePayloadType extends object> extends AbstractSnsService<MessagePayloadType, MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SNSMessageOptions> {
11
+ private readonly messageSchemaContainer;
12
+ constructor(dependencies: SNSDependencies, options: (ExistingSNSOptions | NewQueueOptions<SNSCreationConfig>) & {
13
+ messageSchemas: readonly ZodSchema<MessagePayloadType>[];
14
+ });
15
+ publish(message: MessagePayloadType, options?: SNSMessageOptions): Promise<void>;
16
+ protected resolveMessage(): Either<MessageInvalidFormatError | MessageValidationError, unknown>;
17
+ protected resolveSchema(message: MessagePayloadType): Either<Error, ZodSchema<MessagePayloadType, import("zod").ZodTypeDef, MessagePayloadType>>;
18
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractSnsPublisherMultiSchema = void 0;
4
+ const client_sns_1 = require("@aws-sdk/client-sns");
5
+ const core_1 = require("@message-queue-toolkit/core");
6
+ const AbstractSnsService_1 = require("./AbstractSnsService");
7
+ class AbstractSnsPublisherMultiSchema extends AbstractSnsService_1.AbstractSnsService {
8
+ messageSchemaContainer;
9
+ constructor(dependencies, options) {
10
+ super(dependencies, options);
11
+ const messageSchemas = options.messageSchemas;
12
+ this.messageSchemaContainer = new core_1.MessageSchemaContainer({
13
+ messageSchemas,
14
+ messageTypeField: options.messageTypeField,
15
+ });
16
+ }
17
+ async publish(message, options = {}) {
18
+ try {
19
+ const input = {
20
+ Message: JSON.stringify(message),
21
+ TopicArn: this.topicArn,
22
+ ...options,
23
+ };
24
+ const command = new client_sns_1.PublishCommand(input);
25
+ await this.snsClient.send(command);
26
+ }
27
+ catch (error) {
28
+ this.handleError(error);
29
+ throw error;
30
+ }
31
+ }
32
+ resolveMessage() {
33
+ throw new Error('Not implemented for publisher');
34
+ }
35
+ resolveSchema(message) {
36
+ return this.messageSchemaContainer.resolveSchema(message);
37
+ }
38
+ }
39
+ exports.AbstractSnsPublisherMultiSchema = AbstractSnsPublisherMultiSchema;
40
+ //# sourceMappingURL=AbstractSnsPublisherMultiSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSnsPublisherMultiSchema.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsPublisherMultiSchema.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AASpD,sDAAoE;AAIpE,6DAAyD;AAOzD,MAAsB,+BACpB,SAAQ,uCAA0D;IAGjD,sBAAsB,CAA4C;IAEnF,YACE,YAA6B,EAC7B,OAEC;QAED,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE5B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;QAC7C,IAAI,CAAC,sBAAsB,GAAG,IAAI,6BAAsB,CAAqB;YAC3E,cAAc;YACd,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA2B,EAAE,UAA6B,EAAE;QACxE,IAAI;YACF,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,OAAO;aACmB,CAAA;YAC/B,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACnC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACvB,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;IAEkB,cAAc;QAI/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAEkB,aAAa,CAAC,OAA2B;QAC1D,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC3D,CAAC;CACF;AA9CD,0EA8CC"}
@@ -1,6 +1,7 @@
1
1
  import type { SNSClient, CreateTopicCommandInput, Tag } from '@aws-sdk/client-sns';
2
- import type { QueueConsumerDependencies, QueueDependencies, NewQueueOptions, ExistingQueueOptions } from '@message-queue-toolkit/core';
2
+ import type { QueueConsumerDependencies, QueueDependencies, NewQueueOptions, ExistingQueueOptions, NewQueueOptionsMultiSchema, ExistingQueueOptionsMultiSchema } from '@message-queue-toolkit/core';
3
3
  import { AbstractQueueService } from '@message-queue-toolkit/core';
4
+ import type { SNS_MESSAGE_BODY_TYPE } from '../types/MessageTypes';
4
5
  export type SNSDependencies = QueueDependencies & {
5
6
  snsClient: SNSClient;
6
7
  };
@@ -22,12 +23,14 @@ export type SNSTopicConfig = {
22
23
  ContentBasedDeduplication?: boolean;
23
24
  };
24
25
  };
25
- export type NewSNSOptions<MessagePayloadType extends object> = NewQueueOptions<MessagePayloadType, SNSCreationConfig>;
26
- export type ExistingSNSOptions<MessagePayloadType extends object> = ExistingQueueOptions<MessagePayloadType, SNSQueueLocatorType>;
26
+ export type NewSNSOptions = NewQueueOptions<SNSCreationConfig>;
27
+ export type ExistingSNSOptions = ExistingQueueOptions<SNSQueueLocatorType>;
28
+ export type NewSNSOptionsMultiSchema<MessagePayloadSchemas extends object, ExecutionContext> = NewQueueOptionsMultiSchema<MessagePayloadSchemas, SNSCreationConfig, ExecutionContext>;
29
+ export type ExistingSNSOptionsMultiSchema<MessagePayloadSchemas extends object, ExecutionContext> = ExistingQueueOptionsMultiSchema<MessagePayloadSchemas, SNSQueueLocatorType, ExecutionContext>;
27
30
  export type SNSCreationConfig = {
28
31
  topic: SNSTopicAWSConfig;
29
32
  };
30
- export declare class AbstractSnsService<MessagePayloadType extends object, SNSOptionsType extends ExistingQueueOptions<MessagePayloadType, SNSQueueLocatorType> | NewQueueOptions<MessagePayloadType, SNSCreationConfig> = ExistingSNSOptions<MessagePayloadType> | NewQueueOptions<MessagePayloadType, SNSCreationConfig>, DependenciesType extends SNSDependencies = SNSDependencies> extends AbstractQueueService<MessagePayloadType, DependenciesType, SNSCreationConfig, SNSQueueLocatorType, SNSOptionsType> {
33
+ export declare abstract class AbstractSnsService<MessagePayloadType extends object, MessageEnvelopeType extends object = SNS_MESSAGE_BODY_TYPE, SNSOptionsType extends ExistingQueueOptions<SNSQueueLocatorType> | NewQueueOptions<SNSCreationConfig> = ExistingSNSOptions | NewQueueOptions<SNSCreationConfig>, DependenciesType extends SNSDependencies = SNSDependencies> extends AbstractQueueService<MessagePayloadType, MessageEnvelopeType, DependenciesType, SNSCreationConfig, SNSQueueLocatorType, SNSOptionsType> {
31
34
  protected readonly snsClient: SNSClient;
32
35
  topicArn: string;
33
36
  constructor(dependencies: DependenciesType, options: SNSOptionsType);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractSnsService = void 0;
4
4
  const core_1 = require("@message-queue-toolkit/core");
5
- const snsUtils_1 = require("../utils/snsUtils");
5
+ const SnsInitter_1 = require("./SnsInitter");
6
6
  class AbstractSnsService extends core_1.AbstractQueueService {
7
7
  snsClient;
8
8
  // @ts-ignore
@@ -12,19 +12,8 @@ class AbstractSnsService extends core_1.AbstractQueueService {
12
12
  this.snsClient = dependencies.snsClient;
13
13
  }
14
14
  async init() {
15
- if (this.locatorConfig) {
16
- const checkResult = await (0, snsUtils_1.getTopicAttributes)(this.snsClient, this.locatorConfig.topicArn);
17
- if (checkResult.error === 'not_found') {
18
- throw new Error(`Topic with topicArn ${this.locatorConfig.topicArn} does not exist.`);
19
- }
20
- this.topicArn = this.locatorConfig.topicArn;
21
- return;
22
- }
23
- // create new topic if it does not exist
24
- if (!this.creationConfig) {
25
- throw new Error('When locatorConfig for the topic is not specified, creationConfig of the topic is mandatory');
26
- }
27
- this.topicArn = await (0, snsUtils_1.assertTopic)(this.snsClient, this.creationConfig.topic);
15
+ const initResult = await (0, SnsInitter_1.initSns)(this.snsClient, this.locatorConfig, this.creationConfig);
16
+ this.topicArn = initResult.topicArn;
28
17
  }
29
18
  // eslint-disable-next-line @typescript-eslint/require-await
30
19
  async close() { }
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractSnsService.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsService.ts"],"names":[],"mappings":";;;AAOA,sDAAkE;AAElE,gDAAmE;AA0CnE,MAAa,kBAQX,SAAQ,2BAMT;IACoB,SAAS,CAAW;IACvC,aAAa;IACN,QAAQ,CAAQ;IAEvB,YAAY,YAA8B,EAAE,OAAuB;QACjE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE5B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YACzF,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE;gBACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,aAAa,CAAC,QAAQ,kBAAkB,CAAC,CAAA;aACtF;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAA;YAC3C,OAAM;SACP;QAED,wCAAwC;QACxC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAA;SACF;QACD,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;IAC9E,CAAC;IAED,4DAA4D;IAC5C,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChD;AA/CD,gDA+CC"}
1
+ {"version":3,"file":"AbstractSnsService.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsService.ts"],"names":[],"mappings":";;;AASA,sDAAkE;AAIlE,6CAAsC;AA8CtC,MAAsB,kBAOpB,SAAQ,2BAOT;IACoB,SAAS,CAAW;IACvC,aAAa;IACN,QAAQ,CAAQ;IAEvB,YAAY,YAA8B,EAAE,OAAuB;QACjE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE5B,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,UAAU,GAAG,MAAM,IAAA,oBAAO,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QACzF,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IACrC,CAAC;IAED,4DAA4D;IAC5C,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChD;AAhCD,gDAgCC"}
@@ -0,0 +1,34 @@
1
+ import type { SNSClient } from '@aws-sdk/client-sns';
2
+ import type { Either } from '@lokalise/node-core';
3
+ import type { MonoSchemaQueueOptions } from '@message-queue-toolkit/core';
4
+ import type { SQSConsumerDependencies, NewSQSConsumerOptions, ExistingSQSConsumerOptions, SQSQueueLocatorType, SQSCreationConfig, SQSMessage } from '@message-queue-toolkit/sqs';
5
+ import { AbstractSqsConsumer } from '@message-queue-toolkit/sqs';
6
+ import type { ZodSchema } from 'zod';
7
+ import type { ExistingSNSOptions, NewSNSOptions, SNSCreationConfig, SNSQueueLocatorType } from './AbstractSnsService';
8
+ import type { SNSSubscriptionOptions } from './SnsSubscriber';
9
+ export type NewSnsSqsConsumerOptions = NewSQSConsumerOptions<SQSCreationConfig & SNSCreationConfig> & NewSNSOptions & {
10
+ subscriptionConfig?: SNSSubscriptionOptions;
11
+ };
12
+ export type NewSnsSqsConsumerOptionsMono<MessagePayloadType extends object> = NewSnsSqsConsumerOptions & MonoSchemaQueueOptions<MessagePayloadType>;
13
+ export type ExistingSnsSqsConsumerOptions = ExistingSQSConsumerOptions<SNSSQSQueueLocatorType> & ExistingSNSOptions & {
14
+ subscriptionConfig?: SNSSubscriptionOptions;
15
+ };
16
+ export type ExistingSnsSqsConsumerOptionsMono<MessagePayloadType extends object> = ExistingSnsSqsConsumerOptions & MonoSchemaQueueOptions<MessagePayloadType>;
17
+ export type SNSSQSConsumerDependencies = SQSConsumerDependencies & {
18
+ snsClient: SNSClient;
19
+ };
20
+ export type SNSSQSQueueLocatorType = SQSQueueLocatorType & SNSQueueLocatorType & {
21
+ subscriptionArn?: string;
22
+ };
23
+ export declare abstract class AbstractSnsSqsConsumerMonoSchema<MessagePayloadType extends object> extends AbstractSqsConsumer<MessagePayloadType, SNSSQSQueueLocatorType, SNSCreationConfig & SQSCreationConfig, NewSnsSqsConsumerOptions | ExistingSnsSqsConsumerOptionsMono<MessagePayloadType>> {
24
+ private readonly subscriptionConfig?;
25
+ private readonly snsClient;
26
+ private readonly messageSchema;
27
+ private readonly schemaEither;
28
+ topicArn: string;
29
+ subscriptionArn: string;
30
+ protected constructor(dependencies: SNSSQSConsumerDependencies, options: NewSnsSqsConsumerOptionsMono<MessagePayloadType> | ExistingSnsSqsConsumerOptionsMono<MessagePayloadType>);
31
+ protected resolveSchema(): Either<Error, ZodSchema<MessagePayloadType, import("zod").ZodTypeDef, MessagePayloadType>>;
32
+ protected resolveMessage(message: SQSMessage): Either<import("@message-queue-toolkit/core").MessageInvalidFormatError | import("@message-queue-toolkit/core").MessageValidationError, unknown>;
33
+ init(): Promise<void>;
34
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractSnsSqsConsumerMonoSchema = void 0;
4
+ const sqs_1 = require("@message-queue-toolkit/sqs");
5
+ const SnsInitter_1 = require("./SnsInitter");
6
+ const snsMessageReader_1 = require("./snsMessageReader");
7
+ class AbstractSnsSqsConsumerMonoSchema extends sqs_1.AbstractSqsConsumer {
8
+ subscriptionConfig;
9
+ snsClient;
10
+ messageSchema;
11
+ schemaEither;
12
+ // @ts-ignore
13
+ topicArn;
14
+ // @ts-ignore
15
+ subscriptionArn;
16
+ constructor(dependencies, options) {
17
+ super(dependencies, {
18
+ ...options,
19
+ });
20
+ this.subscriptionConfig = options.subscriptionConfig;
21
+ this.snsClient = dependencies.snsClient;
22
+ this.messageSchema = options.messageSchema;
23
+ this.schemaEither = {
24
+ result: this.messageSchema,
25
+ };
26
+ }
27
+ resolveSchema() {
28
+ return this.schemaEither;
29
+ }
30
+ resolveMessage(message) {
31
+ return (0, snsMessageReader_1.readSnsMessage)(message, this.errorResolver);
32
+ }
33
+ async init() {
34
+ await super.init();
35
+ const initSnsResult = await (0, SnsInitter_1.initSns)(this.snsClient, this.locatorConfig, this.creationConfig);
36
+ this.topicArn = initSnsResult.topicArn;
37
+ const initSnsSqsResult = await (0, SnsInitter_1.initSnsSqs)(this.sqsClient, this.snsClient, this.locatorConfig, this.creationConfig, this.subscriptionConfig);
38
+ this.subscriptionArn = initSnsSqsResult.subscriptionArn;
39
+ }
40
+ }
41
+ exports.AbstractSnsSqsConsumerMonoSchema = AbstractSnsSqsConsumerMonoSchema;
42
+ //# sourceMappingURL=AbstractSnsSqsConsumerMonoSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSnsSqsConsumerMonoSchema.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsSqsConsumerMonoSchema.ts"],"names":[],"mappings":";;;AAWA,oDAAgE;AAShE,6CAAkD;AAElD,yDAAmD;AA6BnD,MAAsB,gCAEpB,SAAQ,yBAKT;IACkB,kBAAkB,CAAyB;IAC3C,SAAS,CAAW;IACpB,aAAa,CAA+B;IAC5C,YAAY,CAA8C;IAC3E,aAAa;IACN,QAAQ,CAAQ;IACvB,aAAa;IACN,eAAe,CAAQ;IAE9B,YACE,YAAwC,EACxC,OAEyD;QAEzD,KAAK,CAAC,YAAY,EAAE;YAClB,GAAG,OAAO;SACX,CAAC,CAAA;QAEF,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;QACvC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAA;QAC1C,IAAI,CAAC,YAAY,GAAG;YAClB,MAAM,EAAE,IAAI,CAAC,aAAa;SAC3B,CAAA;IACH,CAAC;IAEkB,aAAa;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAEkB,cAAc,CAAC,OAAmB;QACnD,OAAO,IAAA,iCAAc,EAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAElB,MAAM,aAAa,GAAG,MAAM,IAAA,oBAAO,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC5F,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;QAEtC,MAAM,gBAAgB,GAAG,MAAM,IAAA,uBAAU,EACvC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,kBAAkB,CACxB,CAAA;QACD,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAA;IACzD,CAAC;CACF;AA1DD,4EA0DC"}
@@ -0,0 +1,17 @@
1
+ import type { MultiSchemaConsumerOptions } from '@message-queue-toolkit/core';
2
+ import type { SQSCreationConfig, SQSMessage } from '@message-queue-toolkit/sqs';
3
+ import { AbstractSqsConsumerMultiSchema } from '@message-queue-toolkit/sqs';
4
+ import type { SNSCreationConfig } from './AbstractSnsService';
5
+ import type { ExistingSnsSqsConsumerOptions, NewSnsSqsConsumerOptions, SNSSQSConsumerDependencies, SNSSQSQueueLocatorType } from './AbstractSnsSqsConsumerMonoSchema';
6
+ export type ExistingSnsSqsConsumerOptionsMulti<MessagePayloadType extends object, ExecutionContext> = ExistingSnsSqsConsumerOptions & MultiSchemaConsumerOptions<MessagePayloadType, ExecutionContext>;
7
+ export type NewSnsSqsConsumerOptionsMulti<MessagePayloadType extends object, ExecutionContext> = NewSnsSqsConsumerOptions & MultiSchemaConsumerOptions<MessagePayloadType, ExecutionContext>;
8
+ export declare abstract class AbstractSnsSqsConsumerMultiSchema<MessagePayloadSchemas extends object, ExecutionContext> extends AbstractSqsConsumerMultiSchema<MessagePayloadSchemas, ExecutionContext, SNSSQSQueueLocatorType, SNSCreationConfig & SQSCreationConfig, NewSnsSqsConsumerOptionsMulti<MessagePayloadSchemas, ExecutionContext> | ExistingSnsSqsConsumerOptionsMulti<MessagePayloadSchemas, ExecutionContext>> {
9
+ private readonly subscriptionConfig?;
10
+ private readonly snsClient;
11
+ topicArn: string;
12
+ subscriptionArn: string;
13
+ protected constructor(dependencies: SNSSQSConsumerDependencies, options: NewSnsSqsConsumerOptionsMulti<MessagePayloadSchemas, ExecutionContext> | ExistingSnsSqsConsumerOptionsMulti<MessagePayloadSchemas, ExecutionContext>);
14
+ init(): Promise<void>;
15
+ protected resolveMessage(message: SQSMessage): import("@lokalise/node-core").Either<import("@message-queue-toolkit/core").MessageInvalidFormatError | import("@message-queue-toolkit/core").MessageValidationError, unknown>;
16
+ protected resolveSchema(messagePayload: MessagePayloadSchemas): import("@lokalise/node-core").Either<Error, import("zod").ZodType<MessagePayloadSchemas, import("zod").ZodTypeDef, MessagePayloadSchemas>>;
17
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractSnsSqsConsumerMultiSchema = void 0;
4
+ const sqs_1 = require("@message-queue-toolkit/sqs");
5
+ const SnsInitter_1 = require("./SnsInitter");
6
+ const snsMessageReader_1 = require("./snsMessageReader");
7
+ class AbstractSnsSqsConsumerMultiSchema extends sqs_1.AbstractSqsConsumerMultiSchema {
8
+ subscriptionConfig;
9
+ snsClient;
10
+ // @ts-ignore
11
+ topicArn;
12
+ // @ts-ignore
13
+ subscriptionArn;
14
+ constructor(dependencies, options) {
15
+ super(dependencies, {
16
+ ...options,
17
+ });
18
+ this.subscriptionConfig = options.subscriptionConfig;
19
+ this.snsClient = dependencies.snsClient;
20
+ }
21
+ async init() {
22
+ await super.init();
23
+ const initSnsResult = await (0, SnsInitter_1.initSns)(this.snsClient, this.locatorConfig, this.creationConfig);
24
+ this.topicArn = initSnsResult.topicArn;
25
+ const initSnsSqsResult = await (0, SnsInitter_1.initSnsSqs)(this.sqsClient, this.snsClient, this.locatorConfig, this.creationConfig, this.subscriptionConfig);
26
+ this.subscriptionArn = initSnsSqsResult.subscriptionArn;
27
+ }
28
+ resolveMessage(message) {
29
+ return (0, snsMessageReader_1.readSnsMessage)(message, this.errorResolver);
30
+ }
31
+ resolveSchema(messagePayload) {
32
+ return this.messageSchemaContainer.resolveSchema(messagePayload);
33
+ }
34
+ }
35
+ exports.AbstractSnsSqsConsumerMultiSchema = AbstractSnsSqsConsumerMultiSchema;
36
+ //# sourceMappingURL=AbstractSnsSqsConsumerMultiSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSnsSqsConsumerMultiSchema.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsSqsConsumerMultiSchema.ts"],"names":[],"mappings":";;;AAGA,oDAA2E;AAS3E,6CAAkD;AAElD,yDAAmD;AAYnD,MAAsB,iCAGpB,SAAQ,oCAOT;IACkB,kBAAkB,CAAyB;IAC3C,SAAS,CAAW;IACrC,aAAa;IACN,QAAQ,CAAQ;IACvB,aAAa;IACN,eAAe,CAAQ;IAE9B,YACE,YAAwC,EACxC,OAE+E;QAE/E,KAAK,CAAC,YAAY,EAAE;YAClB,GAAG,OAAO;SACX,CAAC,CAAA;QAEF,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAElB,MAAM,aAAa,GAAG,MAAM,IAAA,oBAAO,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC5F,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAA;QAEtC,MAAM,gBAAgB,GAAG,MAAM,IAAA,uBAAU,EACvC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,kBAAkB,CACxB,CAAA;QACD,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAA;IACzD,CAAC;IAEkB,cAAc,CAAC,OAAmB;QACnD,OAAO,IAAA,iCAAc,EAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACpD,CAAC;IAEkB,aAAa,CAAC,cAAqC;QACpE,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAA;IAClE,CAAC;CACF;AAvDD,8EAuDC"}
@@ -0,0 +1,12 @@
1
+ import type { SNSClient } from '@aws-sdk/client-sns';
2
+ import type { SQSClient } from '@aws-sdk/client-sqs';
3
+ import type { SQSCreationConfig } from '@message-queue-toolkit/sqs';
4
+ import type { SNSCreationConfig, SNSQueueLocatorType } from './AbstractSnsService';
5
+ import type { SNSSQSQueueLocatorType } from './AbstractSnsSqsConsumerMonoSchema';
6
+ import type { SNSSubscriptionOptions } from './SnsSubscriber';
7
+ export declare function initSnsSqs(sqsClient: SQSClient, snsClient: SNSClient, locatorConfig?: SNSSQSQueueLocatorType, creationConfig?: SNSCreationConfig & SQSCreationConfig, subscriptionConfig?: SNSSubscriptionOptions): Promise<{
8
+ subscriptionArn: string;
9
+ }>;
10
+ export declare function initSns(snsClient: SNSClient, locatorConfig?: SNSQueueLocatorType, creationConfig?: SNSCreationConfig): Promise<{
11
+ topicArn: string;
12
+ }>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initSns = exports.initSnsSqs = void 0;
4
+ const snsUtils_1 = require("../utils/snsUtils");
5
+ const SnsSubscriber_1 = require("./SnsSubscriber");
6
+ async function initSnsSqs(sqsClient, snsClient, locatorConfig, creationConfig, subscriptionConfig) {
7
+ if (!locatorConfig?.subscriptionArn) {
8
+ if (!creationConfig?.topic) {
9
+ throw new Error('If locatorConfig.subscriptionArn is not specified, creationConfig.topic parameter is mandatory, as there will be an attempt to create the missing topic');
10
+ }
11
+ if (!creationConfig?.queue) {
12
+ 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');
13
+ }
14
+ if (!subscriptionConfig) {
15
+ throw new Error('If locatorConfig.subscriptionArn is not specified, subscriptionConfig parameter is mandatory, as there will be an attempt to create the missing subscription');
16
+ }
17
+ const { subscriptionArn } = await (0, SnsSubscriber_1.subscribeToTopic)(sqsClient, snsClient, creationConfig.queue, creationConfig.topic, subscriptionConfig);
18
+ if (!subscriptionArn) {
19
+ throw new Error('Failed to subscribe');
20
+ }
21
+ return {
22
+ subscriptionArn,
23
+ };
24
+ }
25
+ return {
26
+ subscriptionArn: locatorConfig.subscriptionArn,
27
+ };
28
+ }
29
+ exports.initSnsSqs = initSnsSqs;
30
+ async function initSns(snsClient, locatorConfig, creationConfig) {
31
+ if (locatorConfig) {
32
+ const checkResult = await (0, snsUtils_1.getTopicAttributes)(snsClient, locatorConfig.topicArn);
33
+ if (checkResult.error === 'not_found') {
34
+ throw new Error(`Topic with topicArn ${locatorConfig.topicArn} does not exist.`);
35
+ }
36
+ return {
37
+ topicArn: locatorConfig.topicArn,
38
+ };
39
+ }
40
+ // create new topic if it does not exist
41
+ if (!creationConfig) {
42
+ throw new Error('When locatorConfig for the topic is not specified, creationConfig of the topic is mandatory');
43
+ }
44
+ const topicArn = await (0, snsUtils_1.assertTopic)(snsClient, creationConfig.topic);
45
+ return {
46
+ topicArn,
47
+ };
48
+ }
49
+ exports.initSns = initSns;
50
+ //# sourceMappingURL=SnsInitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnsInitter.js","sourceRoot":"","sources":["../../../lib/sns/SnsInitter.ts"],"names":[],"mappings":";;;AAIA,gDAAmE;AAKnE,mDAAkD;AAE3C,KAAK,UAAU,UAAU,CAC9B,SAAoB,EACpB,SAAoB,EACpB,aAAsC,EACtC,cAAsD,EACtD,kBAA2C;IAE3C,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE;QACnC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;YAC1B,MAAM,IAAI,KAAK,CACb,yJAAyJ,CAC1J,CAAA;SACF;QACD,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;YAC1B,MAAM,IAAI,KAAK,CACb,yJAAyJ,CAC1J,CAAA;SACF;QACD,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,IAAI,KAAK,CACb,8JAA8J,CAC/J,CAAA;SACF;QAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,IAAA,gCAAgB,EAChD,SAAS,EACT,SAAS,EACT,cAAc,CAAC,KAAK,EACpB,cAAc,CAAC,KAAK,EACpB,kBAAkB,CACnB,CAAA;QACD,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACvC;QACD,OAAO;YACL,eAAe;SAChB,CAAA;KACF;IACD,OAAO;QACL,eAAe,EAAE,aAAa,CAAC,eAAe;KAC/C,CAAA;AACH,CAAC;AAzCD,gCAyCC;AAEM,KAAK,UAAU,OAAO,CAC3B,SAAoB,EACpB,aAAmC,EACnC,cAAkC;IAElC,IAAI,aAAa,EAAE;QACjB,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAkB,EAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/E,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,CAAC,QAAQ,kBAAkB,CAAC,CAAA;SACjF;QAED,OAAO;YACL,QAAQ,EAAE,aAAa,CAAC,QAAQ;SACjC,CAAA;KACF;IAED,wCAAwC;IACxC,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAA;KACF;IACD,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAW,EAAC,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;IACnE,OAAO;QACL,QAAQ;KACT,CAAA;AACH,CAAC;AA1BD,0BA0BC"}
@@ -0,0 +1,4 @@
1
+ import type { Either, ErrorResolver } from '@lokalise/node-core';
2
+ import type { MessageInvalidFormatError, MessageValidationError } from '@message-queue-toolkit/core';
3
+ import type { SQSMessage } from '@message-queue-toolkit/sqs';
4
+ export declare function readSnsMessage(message: SQSMessage, errorProcessor: ErrorResolver): Either<MessageInvalidFormatError | MessageValidationError, unknown>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readSnsMessage = void 0;
4
+ function readSnsMessage(message, errorProcessor) {
5
+ try {
6
+ const snsMessage = JSON.parse(message.Body);
7
+ const messagePayload = JSON.parse(snsMessage.Message);
8
+ return {
9
+ result: messagePayload,
10
+ };
11
+ }
12
+ catch (exception) {
13
+ return {
14
+ error: errorProcessor.processError(exception),
15
+ };
16
+ }
17
+ }
18
+ exports.readSnsMessage = readSnsMessage;
19
+ //# sourceMappingURL=snsMessageReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snsMessageReader.js","sourceRoot":"","sources":["../../../lib/sns/snsMessageReader.ts"],"names":[],"mappings":";;;AAMA,SAAgB,cAAc,CAC5B,OAAmB,EACnB,cAA6B;IAE7B,IAAI;QACF,MAAM,UAAU,GAA0B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAClE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAErD,OAAO;YACL,MAAM,EAAE,cAAc;SACvB,CAAA;KACF;IAAC,OAAO,SAAS,EAAE;QAClB,OAAO;YACL,KAAK,EAAE,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC;SAC9C,CAAA;KACF;AACH,CAAC;AAhBD,wCAgBC"}
@@ -14,9 +14,9 @@ export declare const SNS_MESSAGE_BODY_SCHEMA: z.ZodObject<{
14
14
  UnsubscribeURL: z.ZodString;
15
15
  }, "strip", z.ZodTypeAny, {
16
16
  Message: string;
17
- TopicArn: string;
18
17
  Type: string;
19
18
  MessageId: string;
19
+ TopicArn: string;
20
20
  Timestamp: string;
21
21
  SignatureVersion: string;
22
22
  Signature: string;
@@ -24,9 +24,9 @@ export declare const SNS_MESSAGE_BODY_SCHEMA: z.ZodObject<{
24
24
  UnsubscribeURL: string;
25
25
  }, {
26
26
  Message: string;
27
- TopicArn: string;
28
27
  Type: string;
29
28
  MessageId: string;
29
+ TopicArn: string;
30
30
  Timestamp: string;
31
31
  SignatureVersion: string;
32
32
  Signature: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/sns",
3
- "version": "2.1.0",
3
+ "version": "3.0.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "description": "SNS adapter for message-queue-toolkit",
@@ -31,20 +31,20 @@
31
31
  "zod": "^3.21.4"
32
32
  },
33
33
  "peerDependencies": {
34
- "@aws-sdk/client-sns": "^3.369.0",
35
- "@aws-sdk/client-sqs": "^3.369.0",
36
- "@message-queue-toolkit/core": "^2.0.0",
37
- "@message-queue-toolkit/sqs": "^2.0.0"
34
+ "@aws-sdk/client-sns": "^3.382.0",
35
+ "@aws-sdk/client-sqs": "^3.382.0",
36
+ "@message-queue-toolkit/core": "^3.0.0",
37
+ "@message-queue-toolkit/sqs": "^3.0.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@aws-sdk/client-sns": "^3.369.0",
41
- "@aws-sdk/client-sqs": "^3.369.0",
40
+ "@aws-sdk/client-sns": "^3.382.0",
41
+ "@aws-sdk/client-sqs": "^3.382.0",
42
42
  "@message-queue-toolkit/core": "*",
43
43
  "@message-queue-toolkit/sqs": "*",
44
44
  "@types/node": "^20.4.1",
45
- "@typescript-eslint/eslint-plugin": "^5.61.0",
46
- "@typescript-eslint/parser": "^5.62.0",
47
- "@vitest/coverage-v8": "^0.33.0",
45
+ "@typescript-eslint/eslint-plugin": "^6.2.1",
46
+ "@typescript-eslint/parser": "^6.2.1",
47
+ "@vitest/coverage-v8": "^0.34.1",
48
48
  "awilix": "^8.0.1",
49
49
  "awilix-manager": "^2.0.0",
50
50
  "del-cli": "^5.0.0",
@@ -55,7 +55,7 @@
55
55
  "eslint-plugin-vitest": "^0.2.6",
56
56
  "prettier": "^3.0.0",
57
57
  "typescript": "^5.1.6",
58
- "vitest": "^0.33.0"
58
+ "vitest": "^0.34.1"
59
59
  },
60
60
  "homepage": "https://github.com/kibertoad/message-queue-toolkit",
61
61
  "repository": {
@@ -1,9 +0,0 @@
1
- import type { AsyncPublisher } from '@message-queue-toolkit/core';
2
- import { AbstractSnsService } from './AbstractSnsService';
3
- export type SNSMessageOptions = {
4
- MessageGroupId?: string;
5
- MessageDeduplicationId?: string;
6
- };
7
- export declare abstract class AbstractSnsPublisher<MessagePayloadType extends object> extends AbstractSnsService<MessagePayloadType> implements AsyncPublisher<MessagePayloadType, SNSMessageOptions> {
8
- publish(message: MessagePayloadType, options?: SNSMessageOptions): Promise<void>;
9
- }
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractSnsPublisher = void 0;
4
- const client_sns_1 = require("@aws-sdk/client-sns");
5
- const AbstractSnsService_1 = require("./AbstractSnsService");
6
- class AbstractSnsPublisher extends AbstractSnsService_1.AbstractSnsService {
7
- async publish(message, options = {}) {
8
- try {
9
- const input = {
10
- Message: JSON.stringify(message),
11
- TopicArn: this.topicArn,
12
- ...options,
13
- };
14
- const command = new client_sns_1.PublishCommand(input);
15
- await this.snsClient.send(command);
16
- }
17
- catch (error) {
18
- this.handleError(error);
19
- throw error;
20
- }
21
- }
22
- }
23
- exports.AbstractSnsPublisher = AbstractSnsPublisher;
24
- //# sourceMappingURL=AbstractSnsPublisher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractSnsPublisher.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsPublisher.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AAIpD,6DAAyD;AAOzD,MAAsB,oBACpB,SAAQ,uCAAsC;IAG9C,KAAK,CAAC,OAAO,CAAC,OAA2B,EAAE,UAA6B,EAAE;QACxE,IAAI;YACF,MAAM,KAAK,GAAG;gBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,OAAO;aACmB,CAAA;YAC/B,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACnC;QAAC,OAAO,KAAK,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACvB,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;CACF;AAlBD,oDAkBC"}
@@ -1,25 +0,0 @@
1
- import type { SNSClient } from '@aws-sdk/client-sns';
2
- import type { SQSConsumerDependencies, NewSQSConsumerOptions, ExistingSQSConsumerOptions, SQSQueueLocatorType, SQSCreationConfig } from '@message-queue-toolkit/sqs';
3
- import { AbstractSqsConsumer } from '@message-queue-toolkit/sqs';
4
- import type { ExistingSNSOptions, NewSNSOptions, SNSCreationConfig, SNSQueueLocatorType } from './AbstractSnsService';
5
- import type { SNSSubscriptionOptions } from './SnsSubscriber';
6
- export type NewSnsSqsConsumerOptions<MessagePayloadType extends object> = NewSQSConsumerOptions<MessagePayloadType, SQSCreationConfig & SNSCreationConfig> & NewSNSOptions<MessagePayloadType> & {
7
- subscriptionConfig?: SNSSubscriptionOptions;
8
- };
9
- export type ExistingSnsSqsConsumerOptions<MessagePayloadType extends object> = ExistingSQSConsumerOptions<MessagePayloadType, SNSSQSQueueLocatorType> & ExistingSNSOptions<MessagePayloadType> & {
10
- subscriptionConfig?: SNSSubscriptionOptions;
11
- };
12
- export type SNSSQSConsumerDependencies = SQSConsumerDependencies & {
13
- snsClient: SNSClient;
14
- };
15
- export type SNSSQSQueueLocatorType = SQSQueueLocatorType & SNSQueueLocatorType & {
16
- subscriptionArn?: string;
17
- };
18
- export declare abstract class AbstractSnsSqsConsumer<MessagePayloadType extends object> extends AbstractSqsConsumer<MessagePayloadType, SNSSQSQueueLocatorType, SNSCreationConfig & SQSCreationConfig, NewSnsSqsConsumerOptions<MessagePayloadType> | ExistingSnsSqsConsumerOptions<MessagePayloadType>> {
19
- private readonly subscriptionConfig?;
20
- private readonly snsClient;
21
- topicArn: string;
22
- subscriptionArn: string;
23
- protected constructor(dependencies: SNSSQSConsumerDependencies, options: NewSnsSqsConsumerOptions<MessagePayloadType> | ExistingSnsSqsConsumerOptions<MessagePayloadType>);
24
- init(): Promise<void>;
25
- }
@@ -1,62 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbstractSnsSqsConsumer = void 0;
4
- const sqs_1 = require("@message-queue-toolkit/sqs");
5
- const snsUtils_1 = require("../utils/snsUtils");
6
- const SnsSubscriber_1 = require("./SnsSubscriber");
7
- const snsMessageDeserializer_1 = require("./snsMessageDeserializer");
8
- class AbstractSnsSqsConsumer extends sqs_1.AbstractSqsConsumer {
9
- subscriptionConfig;
10
- snsClient;
11
- // @ts-ignore
12
- topicArn;
13
- // @ts-ignore
14
- subscriptionArn;
15
- constructor(dependencies, options) {
16
- super(dependencies, {
17
- ...options,
18
- deserializer: options.deserializer ?? snsMessageDeserializer_1.deserializeSNSMessage,
19
- });
20
- this.subscriptionConfig = options.subscriptionConfig;
21
- this.snsClient = dependencies.snsClient;
22
- }
23
- async init() {
24
- await super.init();
25
- // reuse existing queue only
26
- if (this.locatorConfig) {
27
- const checkResult = await (0, snsUtils_1.getTopicAttributes)(this.snsClient, this.locatorConfig.topicArn);
28
- if (checkResult.error === 'not_found') {
29
- throw new Error(`Topic with topicArn ${this.locatorConfig.topicArn} does not exist.`);
30
- }
31
- this.topicArn = this.locatorConfig.topicArn;
32
- }
33
- // create new topic if it does not exist
34
- else {
35
- if (!this.creationConfig) {
36
- throw new Error('If queueLocator.subscriptionArn is not specified, subscribedToTopic parameter is mandatory, as there will be an attempt to create the missing topic');
37
- }
38
- this.topicArn = await (0, snsUtils_1.assertTopic)(this.snsClient, this.creationConfig?.topic);
39
- }
40
- if (!this.locatorConfig?.subscriptionArn) {
41
- if (!this.creationConfig?.topic) {
42
- throw new Error('If locatorConfig.subscriptionArn is not specified, creationConfig.topic parameter is mandatory, as there will be an attempt to create the missing topic');
43
- }
44
- if (!this.creationConfig?.queue) {
45
- 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');
46
- }
47
- if (!this.subscriptionConfig) {
48
- throw new Error('If locatorConfig.subscriptionArn is not specified, subscriptionConfig parameter is mandatory, as there will be an attempt to create the missing subscription');
49
- }
50
- const { subscriptionArn } = await (0, SnsSubscriber_1.subscribeToTopic)(this.sqsClient, this.snsClient, this.creationConfig.queue, this.creationConfig.topic, this.subscriptionConfig);
51
- if (!subscriptionArn) {
52
- throw new Error('Failed to subscribe');
53
- }
54
- this.subscriptionArn = subscriptionArn;
55
- }
56
- else {
57
- this.subscriptionArn = this.locatorConfig.subscriptionArn;
58
- }
59
- }
60
- }
61
- exports.AbstractSnsSqsConsumer = AbstractSnsSqsConsumer;
62
- //# sourceMappingURL=AbstractSnsSqsConsumer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractSnsSqsConsumer.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsSqsConsumer.ts"],"names":[],"mappings":";;;AAQA,oDAAgE;AAEhE,gDAAmE;AASnE,mDAAkD;AAClD,qEAAgE;AAyBhE,MAAsB,sBAEpB,SAAQ,yBAKT;IACkB,kBAAkB,CAAyB;IAC3C,SAAS,CAAW;IACrC,aAAa;IACN,QAAQ,CAAQ;IACvB,aAAa;IACN,eAAe,CAAQ;IAE9B,YACE,YAAwC,EACxC,OAEqD;QAErD,KAAK,CAAC,YAAY,EAAE;YAClB,GAAG,OAAO;YACV,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,8CAAqB;SAC5D,CAAC,CAAA;QAEF,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;QACpD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAElB,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;YACzF,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE;gBACrC,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,aAAa,CAAC,QAAQ,kBAAkB,CAAC,CAAA;aACtF;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAA;SAC5C;QACD,wCAAwC;aACnC;YACH,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,MAAM,IAAI,KAAK,CACb,qJAAqJ,CACtJ,CAAA;aACF;YAED,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;SAC9E;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;gBAC/B,MAAM,IAAI,KAAK,CACb,yJAAyJ,CAC1J,CAAA;aACF;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE;gBAC/B,MAAM,IAAI,KAAK,CACb,yJAAyJ,CAC1J,CAAA;aACF;YACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC5B,MAAM,IAAI,KAAK,CACb,8JAA8J,CAC/J,CAAA;aACF;YAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,IAAA,gCAAgB,EAChD,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,cAAc,CAAC,KAAK,EACzB,IAAI,CAAC,cAAc,CAAC,KAAK,EACzB,IAAI,CAAC,kBAAkB,CACxB,CAAA;YACD,IAAI,CAAC,eAAe,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;aACvC;YACD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;SACvC;aAAM;YACL,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAA;SAC1D;IACH,CAAC;CACF;AArFD,wDAqFC"}