@message-queue-toolkit/sns 1.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.
- package/dist/index.d.ts +6 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/errors/SnsConsumerErrorResolver.d.ts +5 -0
- package/dist/lib/errors/SnsConsumerErrorResolver.js +36 -0
- package/dist/lib/errors/SnsConsumerErrorResolver.js.map +1 -0
- package/dist/lib/sns/AbstractSnsPublisher.d.ts +9 -0
- package/dist/lib/sns/AbstractSnsPublisher.js +24 -0
- package/dist/lib/sns/AbstractSnsPublisher.js.map +1 -0
- package/dist/lib/sns/AbstractSnsService.d.ts +28 -0
- package/dist/lib/sns/AbstractSnsService.js +24 -0
- package/dist/lib/sns/AbstractSnsService.js.map +1 -0
- package/dist/lib/sns/AbstractSnsSqsConsumer.d.ts +16 -0
- package/dist/lib/sns/AbstractSnsSqsConsumer.js +31 -0
- package/dist/lib/sns/AbstractSnsSqsConsumer.js.map +1 -0
- package/dist/lib/sns/SnsSubscriber.d.ts +3 -0
- package/dist/lib/sns/SnsSubscriber.js +28 -0
- package/dist/lib/sns/SnsSubscriber.js.map +1 -0
- package/dist/lib/sns/snsMessageDeserializer.d.ts +5 -0
- package/dist/lib/sns/snsMessageDeserializer.js +19 -0
- package/dist/lib/sns/snsMessageDeserializer.js.map +1 -0
- package/dist/lib/types/MessageTypes.d.ts +36 -0
- package/dist/lib/types/MessageTypes.js +17 -0
- package/dist/lib/types/MessageTypes.js.map +1 -0
- package/dist/lib/utils/snsUtils.d.ts +2 -0
- package/dist/lib/utils/snsUtils.js +14 -0
- package/dist/lib/utils/snsUtils.js.map +1 -0
- package/package.json +78 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { SNSTopicAWSConfig, SNSTopicConfig, SNSConsumerDependencies, } from './lib/sns/AbstractSnsService';
|
|
2
|
+
export { SnsConsumerErrorResolver } from './lib/errors/SnsConsumerErrorResolver';
|
|
3
|
+
export { AbstractSnsPublisher } from './lib/sns/AbstractSnsPublisher';
|
|
4
|
+
export type { SNSMessageOptions } from './lib/sns/AbstractSnsPublisher';
|
|
5
|
+
export type { CommonMessage } from './lib/types/MessageTypes';
|
|
6
|
+
export { deserializeSNSMessage } from './lib/sns/snsMessageDeserializer';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deserializeSNSMessage = exports.AbstractSnsPublisher = exports.SnsConsumerErrorResolver = void 0;
|
|
4
|
+
var SnsConsumerErrorResolver_1 = require("./lib/errors/SnsConsumerErrorResolver");
|
|
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; } });
|
|
8
|
+
var snsMessageDeserializer_1 = require("./lib/sns/snsMessageDeserializer");
|
|
9
|
+
Object.defineProperty(exports, "deserializeSNSMessage", { enumerable: true, get: function () { return snsMessageDeserializer_1.deserializeSNSMessage; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAMA,kFAAgF;AAAvE,oIAAA,wBAAwB,OAAA;AAEjC,uEAAqE;AAA5D,4HAAA,oBAAoB,OAAA;AAK7B,2EAAwE;AAA/D,+HAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SnsConsumerErrorResolver = void 0;
|
|
4
|
+
const node_util_1 = require("node:util");
|
|
5
|
+
const node_core_1 = require("@lokalise/node-core");
|
|
6
|
+
const core_1 = require("@message-queue-toolkit/core");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
class SnsConsumerErrorResolver {
|
|
9
|
+
processError(error) {
|
|
10
|
+
if (node_util_1.types.isNativeError(error) && error?.name === 'SyntaxError') {
|
|
11
|
+
return new core_1.MessageInvalidFormatError({
|
|
12
|
+
message: error.message,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (error instanceof zod_1.ZodError) {
|
|
16
|
+
return new core_1.MessageValidationError({
|
|
17
|
+
message: error.message,
|
|
18
|
+
details: {
|
|
19
|
+
error: error.issues,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if ((0, node_core_1.isStandardizedError)(error)) {
|
|
24
|
+
return new node_core_1.InternalError({
|
|
25
|
+
message: error.message,
|
|
26
|
+
errorCode: error.code,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return new node_core_1.InternalError({
|
|
30
|
+
message: 'Error processing message',
|
|
31
|
+
errorCode: 'INTERNAL_ERROR',
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.SnsConsumerErrorResolver = SnsConsumerErrorResolver;
|
|
36
|
+
//# sourceMappingURL=SnsConsumerErrorResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnsConsumerErrorResolver.js","sourceRoot":"","sources":["../../../lib/errors/SnsConsumerErrorResolver.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAGjC,mDAAwE;AACxE,sDAA+F;AAC/F,6BAA8B;AAE9B,MAAa,wBAAwB;IAC5B,YAAY,CAAC,KAAc;QAChC,IAAI,iBAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa,EAAE;YAC/D,OAAO,IAAI,gCAAyB,CAAC;gBACnC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAA;SACH;QACD,IAAI,KAAK,YAAY,cAAQ,EAAE;YAC7B,OAAO,IAAI,6BAAsB,CAAC;gBAChC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE;oBACP,KAAK,EAAE,KAAK,CAAC,MAAM;iBACpB;aACF,CAAC,CAAA;SACH;QACD,IAAI,IAAA,+BAAmB,EAAC,KAAK,CAAC,EAAE;YAC9B,OAAO,IAAI,yBAAa,CAAC;gBACvB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,IAAI;aACtB,CAAC,CAAA;SACH;QACD,OAAO,IAAI,yBAAa,CAAC;YACvB,OAAO,EAAE,0BAA0B;YACnC,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAA;IACJ,CAAC;CACF;AA1BD,4DA0BC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SNSClient, CreateTopicCommandInput, Tag } from '@aws-sdk/client-sns';
|
|
2
|
+
import type { QueueConsumerDependencies, QueueDependencies, QueueOptions } from '@message-queue-toolkit/core';
|
|
3
|
+
import { AbstractQueueService } from '@message-queue-toolkit/core';
|
|
4
|
+
export type SNSDependencies = QueueDependencies & {
|
|
5
|
+
snsClient: SNSClient;
|
|
6
|
+
};
|
|
7
|
+
export type SNSConsumerDependencies = SNSDependencies & QueueConsumerDependencies;
|
|
8
|
+
export type SNSTopicAWSConfig = Omit<CreateTopicCommandInput, 'Name'>;
|
|
9
|
+
export type SNSTopicConfig = {
|
|
10
|
+
tags?: Tag[];
|
|
11
|
+
DataProtectionPolicy?: string;
|
|
12
|
+
Attributes?: {
|
|
13
|
+
DeliveryPolicy?: string;
|
|
14
|
+
DisplayName?: string;
|
|
15
|
+
Policy?: string;
|
|
16
|
+
SignatureVersion?: number;
|
|
17
|
+
TracingConfig?: string;
|
|
18
|
+
FifoTopic?: boolean;
|
|
19
|
+
ContentBasedDeduplication?: boolean;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export declare class AbstractSnsService<MessagePayloadType extends object, SNSOptionsType extends QueueOptions<MessagePayloadType, SNSTopicAWSConfig> = QueueOptions<MessagePayloadType, SNSTopicAWSConfig>, DependenciesType extends SNSDependencies = SNSDependencies> extends AbstractQueueService<MessagePayloadType, DependenciesType, SNSTopicAWSConfig, SNSOptionsType> {
|
|
23
|
+
protected readonly snsClient: SNSClient;
|
|
24
|
+
topicArn: string;
|
|
25
|
+
constructor(dependencies: DependenciesType, options: SNSOptionsType);
|
|
26
|
+
init(): Promise<void>;
|
|
27
|
+
close(): Promise<void>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractSnsService = void 0;
|
|
4
|
+
const core_1 = require("@message-queue-toolkit/core");
|
|
5
|
+
const snsUtils_1 = require("../utils/snsUtils");
|
|
6
|
+
class AbstractSnsService extends core_1.AbstractQueueService {
|
|
7
|
+
snsClient;
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
topicArn;
|
|
10
|
+
constructor(dependencies, options) {
|
|
11
|
+
super(dependencies, options);
|
|
12
|
+
this.snsClient = dependencies.snsClient;
|
|
13
|
+
}
|
|
14
|
+
async init() {
|
|
15
|
+
this.topicArn = await (0, snsUtils_1.assertTopic)(this.snsClient, {
|
|
16
|
+
Name: this.queueName,
|
|
17
|
+
...this.queueConfiguration,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
21
|
+
async close() { }
|
|
22
|
+
}
|
|
23
|
+
exports.AbstractSnsService = AbstractSnsService;
|
|
24
|
+
//# sourceMappingURL=AbstractSnsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractSnsService.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsService.ts"],"names":[],"mappings":";;;AAMA,sDAAkE;AAElE,gDAA+C;AAwB/C,MAAa,kBAOX,SAAQ,2BAKT;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,CAAC,QAAQ,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,CAAC,SAAS,EAAE;YAChD,IAAI,EAAE,IAAI,CAAC,SAAS;YACpB,GAAG,IAAI,CAAC,kBAAkB;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,4DAA4D;IAC5C,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChD;AAhCD,gDAgCC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CreateTopicCommandInput, SNSClient } from '@aws-sdk/client-sns';
|
|
2
|
+
import type { SQSConsumerDependencies, SQSConsumerOptions } from '@message-queue-toolkit/sqs';
|
|
3
|
+
import { AbstractSqsConsumer } from '@message-queue-toolkit/sqs';
|
|
4
|
+
export type SnsSqsConsumerOptions<MessagePayloadType extends object> = SQSConsumerOptions<MessagePayloadType> & {
|
|
5
|
+
subscribedToTopic: CreateTopicCommandInput;
|
|
6
|
+
};
|
|
7
|
+
export type SNSSQSConsumerDependencies = SQSConsumerDependencies & {
|
|
8
|
+
snsClient: SNSClient;
|
|
9
|
+
};
|
|
10
|
+
export declare abstract class AbstractSnsSqsConsumer<MessagePayloadType extends object> extends AbstractSqsConsumer<MessagePayloadType, SnsSqsConsumerOptions<MessagePayloadType>> {
|
|
11
|
+
private readonly subscribedToTopic;
|
|
12
|
+
private readonly snsClient;
|
|
13
|
+
topicArn: string;
|
|
14
|
+
protected constructor(dependencies: SNSSQSConsumerDependencies, options: SnsSqsConsumerOptions<MessagePayloadType>);
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
subscribedToTopic;
|
|
10
|
+
snsClient;
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
topicArn;
|
|
13
|
+
constructor(dependencies, options) {
|
|
14
|
+
super(dependencies, {
|
|
15
|
+
...options,
|
|
16
|
+
deserializer: options.deserializer ?? snsMessageDeserializer_1.deserializeSNSMessage,
|
|
17
|
+
});
|
|
18
|
+
this.subscribedToTopic = options.subscribedToTopic;
|
|
19
|
+
this.snsClient = dependencies.snsClient;
|
|
20
|
+
}
|
|
21
|
+
async init() {
|
|
22
|
+
await super.init();
|
|
23
|
+
this.topicArn = await (0, snsUtils_1.assertTopic)(this.snsClient, this.subscribedToTopic);
|
|
24
|
+
await (0, SnsSubscriber_1.subscribeToTopic)(this.sqsClient, this.snsClient, {
|
|
25
|
+
QueueName: this.queueName,
|
|
26
|
+
...this.queueConfiguration,
|
|
27
|
+
}, this.subscribedToTopic);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.AbstractSnsSqsConsumer = AbstractSnsSqsConsumer;
|
|
31
|
+
//# sourceMappingURL=AbstractSnsSqsConsumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractSnsSqsConsumer.js","sourceRoot":"","sources":["../../../lib/sns/AbstractSnsSqsConsumer.ts"],"names":[],"mappings":";;;AAEA,oDAAgE;AAEhE,gDAA+C;AAE/C,mDAAkD;AAClD,qEAAgE;AAWhE,MAAsB,sBAEpB,SAAQ,yBAAkF;IACzE,iBAAiB,CAAyB;IAC1C,SAAS,CAAW;IACrC,aAAa;IACN,QAAQ,CAAQ;IAEvB,YACE,YAAwC,EACxC,OAAkD;QAElD,KAAK,CAAC,YAAY,EAAE;YAClB,GAAG,OAAO;YACV,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,8CAAqB;SAC5D,CAAC,CAAA;QAEF,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAA;QAClD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAElB,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAEzE,MAAM,IAAA,gCAAgB,EACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd;YACE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,IAAI,CAAC,kBAAkB;SAC3B,EACD,IAAI,CAAC,iBAAiB,CACvB,CAAA;IACH,CAAC;CACF;AApCD,wDAoCC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CreateTopicCommandInput, SNSClient } from '@aws-sdk/client-sns';
|
|
2
|
+
import type { CreateQueueCommandInput, SQSClient } from '@aws-sdk/client-sqs';
|
|
3
|
+
export declare function subscribeToTopic(sqsClient: SQSClient, snsClient: SNSClient, queueConfiguration: CreateQueueCommandInput, topicConfiguration: CreateTopicCommandInput): Promise<void>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.subscribeToTopic = void 0;
|
|
4
|
+
const client_sns_1 = require("@aws-sdk/client-sns");
|
|
5
|
+
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
6
|
+
const sqs_1 = require("@message-queue-toolkit/sqs");
|
|
7
|
+
const snsUtils_1 = require("../utils/snsUtils");
|
|
8
|
+
async function subscribeToTopic(sqsClient, snsClient, queueConfiguration, topicConfiguration) {
|
|
9
|
+
const topicArn = await (0, snsUtils_1.assertTopic)(snsClient, topicConfiguration);
|
|
10
|
+
const queueUrl = await (0, sqs_1.assertQueue)(sqsClient, queueConfiguration);
|
|
11
|
+
const getQueueAttributesCommand = new client_sqs_1.GetQueueAttributesCommand({
|
|
12
|
+
QueueUrl: queueUrl,
|
|
13
|
+
AttributeNames: ['QueueArn'],
|
|
14
|
+
});
|
|
15
|
+
const queueAttributesResponse = await sqsClient.send(getQueueAttributesCommand);
|
|
16
|
+
const sqsArn = queueAttributesResponse.Attributes?.QueueArn;
|
|
17
|
+
if (!sqsArn) {
|
|
18
|
+
throw new Error(`Queue ${queueUrl} ARN is not defined`);
|
|
19
|
+
}
|
|
20
|
+
const subscribeCommand = new client_sns_1.SubscribeCommand({
|
|
21
|
+
TopicArn: topicArn,
|
|
22
|
+
Endpoint: sqsArn,
|
|
23
|
+
Protocol: 'sqs',
|
|
24
|
+
});
|
|
25
|
+
await snsClient.send(subscribeCommand);
|
|
26
|
+
}
|
|
27
|
+
exports.subscribeToTopic = subscribeToTopic;
|
|
28
|
+
//# sourceMappingURL=SnsSubscriber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnsSubscriber.js","sourceRoot":"","sources":["../../../lib/sns/SnsSubscriber.ts"],"names":[],"mappings":";;;AACA,oDAAsD;AAEtD,oDAA+D;AAC/D,oDAAwD;AAExD,gDAA+C;AAExC,KAAK,UAAU,gBAAgB,CACpC,SAAoB,EACpB,SAAoB,EACpB,kBAA2C,EAC3C,kBAA2C;IAE3C,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAW,EAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAW,EAAC,SAAS,EAAE,kBAAkB,CAAC,CAAA;IAEjE,MAAM,yBAAyB,GAAG,IAAI,sCAAyB,CAAC;QAC9D,QAAQ,EAAE,QAAQ;QAClB,cAAc,EAAE,CAAC,UAAU,CAAC;KAC7B,CAAC,CAAA;IACF,MAAM,uBAAuB,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IAC/E,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAA;IAE3D,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,qBAAqB,CAAC,CAAA;KACxD;IAED,MAAM,gBAAgB,GAAG,IAAI,6BAAgB,CAAC;QAC5C,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IAEF,MAAM,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACxC,CAAC;AA3BD,4CA2BC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
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
|
+
import type { ZodType } from 'zod';
|
|
5
|
+
export declare const deserializeSNSMessage: <T extends object>(message: SQSMessage, type: ZodType<T, import("zod").ZodTypeDef, T>, errorProcessor: ErrorResolver) => Either<MessageInvalidFormatError | MessageValidationError, T>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deserializeSNSMessage = void 0;
|
|
4
|
+
const MessageTypes_1 = require("../types/MessageTypes");
|
|
5
|
+
const deserializeSNSMessage = (message, type, errorProcessor) => {
|
|
6
|
+
try {
|
|
7
|
+
const snsMessage = MessageTypes_1.SNS_MESSAGE_BODY_SCHEMA.parse(JSON.parse(message.Body));
|
|
8
|
+
return {
|
|
9
|
+
result: type.parse(JSON.parse(snsMessage.Message)),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
catch (exception) {
|
|
13
|
+
return {
|
|
14
|
+
error: errorProcessor.processError(exception),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
exports.deserializeSNSMessage = deserializeSNSMessage;
|
|
19
|
+
//# sourceMappingURL=snsMessageDeserializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snsMessageDeserializer.js","sourceRoot":"","sources":["../../../lib/sns/snsMessageDeserializer.ts"],"names":[],"mappings":";;;AAKA,wDAA+D;AAExD,MAAM,qBAAqB,GAAG,CACnC,OAAmB,EACnB,IAAgB,EAChB,cAA6B,EACkC,EAAE;IACjE,IAAI;QACF,MAAM,UAAU,GAAG,sCAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1E,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SACnD,CAAA;KACF;IAAC,OAAO,SAAS,EAAE;QAClB,OAAO;YACL,KAAK,EAAE,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC;SAC9C,CAAA;KACF;AACH,CAAC,CAAA;AAfY,QAAA,qBAAqB,yBAejC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
export type CommonMessage = {
|
|
3
|
+
messageType: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const SNS_MESSAGE_BODY_SCHEMA: z.ZodObject<{
|
|
6
|
+
Type: z.ZodString;
|
|
7
|
+
MessageId: z.ZodString;
|
|
8
|
+
TopicArn: z.ZodString;
|
|
9
|
+
Message: z.ZodString;
|
|
10
|
+
Timestamp: z.ZodString;
|
|
11
|
+
SignatureVersion: z.ZodString;
|
|
12
|
+
Signature: z.ZodString;
|
|
13
|
+
SigningCertURL: z.ZodString;
|
|
14
|
+
UnsubscribeURL: z.ZodString;
|
|
15
|
+
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
Message: string;
|
|
17
|
+
Type: string;
|
|
18
|
+
MessageId: string;
|
|
19
|
+
TopicArn: string;
|
|
20
|
+
Timestamp: string;
|
|
21
|
+
SignatureVersion: string;
|
|
22
|
+
Signature: string;
|
|
23
|
+
SigningCertURL: string;
|
|
24
|
+
UnsubscribeURL: string;
|
|
25
|
+
}, {
|
|
26
|
+
Message: string;
|
|
27
|
+
Type: string;
|
|
28
|
+
MessageId: string;
|
|
29
|
+
TopicArn: string;
|
|
30
|
+
Timestamp: string;
|
|
31
|
+
SignatureVersion: string;
|
|
32
|
+
Signature: string;
|
|
33
|
+
SigningCertURL: string;
|
|
34
|
+
UnsubscribeURL: string;
|
|
35
|
+
}>;
|
|
36
|
+
export type SNS_MESSAGE_BODY_TYPE = z.infer<typeof SNS_MESSAGE_BODY_SCHEMA>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SNS_MESSAGE_BODY_SCHEMA = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const zod_1 = tslib_1.__importDefault(require("zod"));
|
|
6
|
+
exports.SNS_MESSAGE_BODY_SCHEMA = zod_1.default.object({
|
|
7
|
+
Type: zod_1.default.string(),
|
|
8
|
+
MessageId: zod_1.default.string(),
|
|
9
|
+
TopicArn: zod_1.default.string(),
|
|
10
|
+
Message: zod_1.default.string(),
|
|
11
|
+
Timestamp: zod_1.default.string(),
|
|
12
|
+
SignatureVersion: zod_1.default.string(),
|
|
13
|
+
Signature: zod_1.default.string(),
|
|
14
|
+
SigningCertURL: zod_1.default.string(),
|
|
15
|
+
UnsubscribeURL: zod_1.default.string(),
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=MessageTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageTypes.js","sourceRoot":"","sources":["../../../lib/types/MessageTypes.ts"],"names":[],"mappings":";;;;AAAA,sDAAmB;AAMN,QAAA,uBAAuB,GAAG,aAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,aAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;IACrB,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;IACrB,gBAAgB,EAAE,aAAC,CAAC,MAAM,EAAE;IAC5B,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE;IACrB,cAAc,EAAE,aAAC,CAAC,MAAM,EAAE;IAC1B,cAAc,EAAE,aAAC,CAAC,MAAM,EAAE;CAC3B,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertTopic = void 0;
|
|
4
|
+
const client_sns_1 = require("@aws-sdk/client-sns");
|
|
5
|
+
async function assertTopic(snsClient, topicOptions) {
|
|
6
|
+
const command = new client_sns_1.CreateTopicCommand(topicOptions);
|
|
7
|
+
const response = await snsClient.send(command);
|
|
8
|
+
if (!response.TopicArn) {
|
|
9
|
+
throw new Error('No topic arn in response');
|
|
10
|
+
}
|
|
11
|
+
return response.TopicArn;
|
|
12
|
+
}
|
|
13
|
+
exports.assertTopic = assertTopic;
|
|
14
|
+
//# sourceMappingURL=snsUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snsUtils.js","sourceRoot":"","sources":["../../../lib/utils/snsUtils.ts"],"names":[],"mappings":";;;AACA,oDAAwD;AAEjD,KAAK,UAAU,WAAW,CAAC,SAAoB,EAAE,YAAqC;IAC3F,MAAM,OAAO,GAAG,IAAI,+BAAkB,CAAC,YAAY,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAE9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;KAC5C;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAA;AAC1B,CAAC;AARD,kCAQC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@message-queue-toolkit/sns",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"description": "SNS adapter for message-queue-toolkit",
|
|
7
|
+
"maintainers": [
|
|
8
|
+
{
|
|
9
|
+
"name": "Igor Savin",
|
|
10
|
+
"email": "kibertoad@gmail.com"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"main": "dist/index.js",
|
|
14
|
+
"types": "dist/index.d.ts",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"build:release": "del-cli dist && del-cli coverage && npm run lint && tsc --project tsconfig.release.json",
|
|
18
|
+
"test": "vitest",
|
|
19
|
+
"test:coverage": "npm test -- --coverage",
|
|
20
|
+
"test:ci": "npm run docker:start:dev && npm run test:coverage && npm run docker:stop:dev",
|
|
21
|
+
"lint": "eslint . --ext .ts",
|
|
22
|
+
"lint:fix": "eslint . --ext .ts --fix",
|
|
23
|
+
"format": "prettier --write .",
|
|
24
|
+
"docker:start:dev": "docker compose up -d",
|
|
25
|
+
"docker:stop:dev": "docker compose down",
|
|
26
|
+
"prepublishOnly": "npm run build:release"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@aws-sdk/client-sns": "^3.360.0",
|
|
30
|
+
"@aws-sdk/client-sqs": "^3.360.0",
|
|
31
|
+
"@lokalise/node-core": "^5.8.1",
|
|
32
|
+
"sqs-consumer": "^7.2.0",
|
|
33
|
+
"zod": "^3.21.4"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@message-queue-toolkit/core": "^1.1.0",
|
|
37
|
+
"@message-queue-toolkit/sqs": "^1.1.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@message-queue-toolkit/core": "*",
|
|
41
|
+
"@message-queue-toolkit/sqs": "*",
|
|
42
|
+
"@types/node": "^20.3.1",
|
|
43
|
+
"@typescript-eslint/eslint-plugin": "^5.60.0",
|
|
44
|
+
"@typescript-eslint/parser": "^5.60.0",
|
|
45
|
+
"@vitest/coverage-v8": "^0.32.2",
|
|
46
|
+
"awilix": "^8.0.1",
|
|
47
|
+
"awilix-manager": "^2.0.0",
|
|
48
|
+
"del-cli": "^5.0.0",
|
|
49
|
+
"eslint": "^8.43.0",
|
|
50
|
+
"eslint-config-prettier": "^8.8.0",
|
|
51
|
+
"eslint-plugin-import": "^2.27.5",
|
|
52
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
53
|
+
"eslint-plugin-vitest": "^0.2.6",
|
|
54
|
+
"prettier": "^2.8.8",
|
|
55
|
+
"typescript": "^5.1.3",
|
|
56
|
+
"vitest": "^0.32.2"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/kibertoad/message-queue-toolkit",
|
|
59
|
+
"repository": {
|
|
60
|
+
"type": "git",
|
|
61
|
+
"url": "git://github.com/kibertoad/message-queue-toolkit.git"
|
|
62
|
+
},
|
|
63
|
+
"keywords": [
|
|
64
|
+
"message",
|
|
65
|
+
"queue",
|
|
66
|
+
"queues",
|
|
67
|
+
"abstract",
|
|
68
|
+
"common",
|
|
69
|
+
"utils",
|
|
70
|
+
"notification",
|
|
71
|
+
"sns"
|
|
72
|
+
],
|
|
73
|
+
"files": [
|
|
74
|
+
"README.md",
|
|
75
|
+
"LICENSE",
|
|
76
|
+
"dist/*"
|
|
77
|
+
]
|
|
78
|
+
}
|