UNPKG

serverless-offline-sns

Version:

Serverless plugin to run a local SNS server and call lambdas with events notifications.

133 lines (132 loc) 4.76 kB
"use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; Object.defineProperty(exports, "__esModule", { value: true }); var uuid_1 = require("uuid"); function createAttr() { return { _attr: { xmlns: "http://sns.amazonaws.com/doc/2010-03-31/", }, }; } exports.createAttr = createAttr; function createMetadata() { return { ResponseMetadata: [{ RequestId: uuid_1.v4(), }], }; } exports.createMetadata = createMetadata; function arrayify(obj) { return Object.keys(obj).map(function (key) { var x = {}; x[key] = obj[key]; return x; }); } exports.arrayify = arrayify; function parseMessageAttributes(body) { if (body.MessageStructure === "json") { return {}; } var entries = Object.keys(body) .filter(function (key) { return key.startsWith("MessageAttributes.entry"); }) .reduce(function (prev, key) { var index = key.replace("MessageAttributes.entry.", "").match(/.*?(?=\.|$)/i)[0]; return prev.includes(index) ? prev : prev.concat([index]); }, []); return entries .map(function (index) { return "MessageAttributes.entry." + index; }) .reduce(function (prev, baseKey) { return (__assign({}, prev, (_a = {}, _a["" + body[baseKey + ".Name"]] = { Type: body[baseKey + ".Value.DataType"], Value: body[baseKey + ".Value.BinaryValue"] || body[baseKey + ".Value.StringValue"], }, _a))); var _a; }, {}); } exports.parseMessageAttributes = parseMessageAttributes; function parseAttributes(body) { var indices = Object.keys(body) .filter(function (key) { return key.startsWith("Attributes.entry"); }) .reduce(function (prev, key) { var index = key.replace("Attributes.entry.", "").match(/.*?(?=\.|$)/i)[0]; return prev.includes(index) ? prev : prev.concat([index]); }, []); var attrs = {}; for (var _i = 0, _a = indices.map(function (index) { return "Attributes.entry." + index; }); _i < _a.length; _i++) { var key = _a[_i]; attrs[body[key + ".key"]] = body[key + ".value"]; } return attrs; } exports.parseAttributes = parseAttributes; function createSnsLambdaEvent(topicArn, subscriptionArn, subject, message, messageId, messageAttributes) { return { Records: [ { EventVersion: "1.0", EventSubscriptionArn: subscriptionArn, EventSource: "aws:sns", Sns: { SignatureVersion: "1", Timestamp: new Date().toISOString(), Signature: "EXAMPLE", SigningCertUrl: "EXAMPLE", MessageId: messageId, Message: message, MessageAttributes: messageAttributes || {}, Type: "Notification", UnsubscribeUrl: "EXAMPLE", TopicArn: topicArn, Subject: subject, }, }, ], }; } exports.createSnsLambdaEvent = createSnsLambdaEvent; function createSnsTopicEvent(topicArn, subscriptionArn, subject, message, messageId, messageStructure, messageAttributes) { return { SignatureVersion: "1", Timestamp: new Date().toISOString(), Signature: "EXAMPLE", SigningCertUrl: "EXAMPLE", MessageId: messageId, Message: message, MessageStructure: messageStructure, MessageAttributes: messageAttributes || {}, Type: "Notification", UnsubscribeUrl: "EXAMPLE", TopicArn: topicArn, Subject: subject, }; } exports.createSnsTopicEvent = createSnsTopicEvent; function createMessageId() { return uuid_1.v4(); } exports.createMessageId = createMessageId; var phoneNumberValidator = /^\++?[1-9]\d{1,14}$/; function validatePhoneNumber(phoneNumber) { if (!phoneNumberValidator.test(phoneNumber)) { throw new Error("PhoneNumber " + phoneNumber + " is not valid to publish"); } return phoneNumber; } exports.validatePhoneNumber = validatePhoneNumber; // the topics name is that last part of the ARN: // arn:aws:sns:<REGION>:<ACCOUNT_ID>:<TOPIC_NAME> exports.topicNameFromArn = function (arn) { var arnParts = arn.split(":"); return arnParts[arnParts.length - 1]; }; exports.topicArnFromName = function (name, region, accountId) { return "arn:aws:sns:" + region + ":" + accountId + ":" + name; };