@cdkx/aws-sns-subscriptions
Version:
AWS SNS extended subscriptions
102 lines • 13.9 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define("@cdkx/aws-sns-subscriptions/handlers/slack-subscription-handler", ["require", "exports", "@cdkx/aws-sns-subscriptions/handlers/base-sns-handler", "aws-sdk", "@cdkx/aws-sns-subscriptions/handlers/slack.service", "@cdkx/aws-sns-subscriptions/handlers/slack-blocks-builder"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SlackSubscriptionHandler = void 0;
const base_sns_handler_1 = require("@cdkx/aws-sns-subscriptions/handlers/base-sns-handler");
const aws_sdk_1 = require("aws-sdk");
const slack_service_1 = require("@cdkx/aws-sns-subscriptions/handlers/slack.service");
const slack_blocks_builder_1 = require("@cdkx/aws-sns-subscriptions/handlers/slack-blocks-builder");
class SlackSubscriptionHandler extends base_sns_handler_1.BaseSNSHandler {
constructor() {
super();
this.ssmClient = new aws_sdk_1.SSM({
apiVersion: '2014-11-06',
});
}
runExec(event) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const configParamName = process.env.CONFIG_PARAM;
if (!configParamName) {
console.error(`Missing required config parameter.`);
return;
}
const rawParamValue = yield this.ssmClient
.getParameter({
Name: configParamName,
})
.promise();
if (!((_a = rawParamValue.Parameter) === null || _a === void 0 ? void 0 : _a.Value)) {
console.error(`Could not resolve parameter "${configParamName}" from store.`);
return;
}
const slackConfig = JSON.parse(rawParamValue.Parameter.Value);
const { authToken, channelName, channelTypes } = slackConfig;
let { channelId } = slackConfig;
if (!authToken) {
console.error(`Auth Token is required for sending notifications to slack, refer to https://api.slack.com/bot-users`);
return;
}
const slackService = new slack_service_1.SlackService(authToken);
if (!channelId) {
// if no channel id is provided, find one and save it back in param store,
// so subsequent runs do not need to fetch it from slack api again
const resolvedChannelId = yield slackService.getChannelIdByChannelName(channelName, channelTypes);
if (!resolvedChannelId) {
console.warn(`Could not resolve channel id for channel ${channelId}, message will to first channel matching ${channelName}.`);
}
if (resolvedChannelId) {
channelId = resolvedChannelId.id;
yield this.ssmClient
.putParameter({
Name: configParamName,
Value: JSON.stringify(Object.assign(Object.assign({}, slackConfig), { channelId })),
Overwrite: true,
})
.promise();
}
}
const { Message, Subject, UnsubscribeUrl, Timestamp, MessageId, TopicArn, } = this.getParsedEvent(event);
const subject = !Subject || Subject === 'null' ? 'New Notification' : Subject;
const defaultMessageTemplate = new slack_blocks_builder_1.SlackBlocksBuilder(channelName).getDefaultTemplate({
subject,
message: Message,
messageId: MessageId,
timestamp: Timestamp,
topicArn: TopicArn,
unsubscribeUrl: UnsubscribeUrl,
});
const postMessageResponse = yield slackService.webClient.chat.postMessage({
token: authToken,
channel: channelId !== null && channelId !== void 0 ? channelId : channelName,
text: subject,
blocks: defaultMessageTemplate,
});
if (!postMessageResponse.ok) {
console.error('Could Not post notification to slack', 'Please request permissions for scope "chat:write:bot", and make sure bot is in the channel.');
return this.bail(postMessageResponse.error);
}
return { success: true };
});
}
}
exports.SlackSubscriptionHandler = SlackSubscriptionHandler;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stc3Vic2NyaXB0aW9uLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hd3Mtc25zLXN1YnNjcmlwdGlvbnMvaGFuZGxlcnMvc2xhY2stc3Vic2NyaXB0aW9uLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0EsNkZBQW9EO0lBQ3BELHFDQUE4QjtJQUU5Qix1RkFBK0M7SUFDL0MscUdBQTREO0lBVzVELE1BQWEsd0JBQXlCLFNBQVEsaUNBQWM7UUFFMUQ7WUFDRSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxhQUFHLENBQUM7Z0JBQ3ZCLFVBQVUsRUFBRSxZQUFZO2FBQ3pCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDSyxPQUFPLENBQUMsS0FBZTs7O2dCQUMzQixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztnQkFFakQsSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO29CQUNwRCxPQUFPO2lCQUNSO2dCQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVM7cUJBQ3ZDLFlBQVksQ0FBQztvQkFDWixJQUFJLEVBQUUsZUFBZTtpQkFDdEIsQ0FBQztxQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFFYixJQUFJLENBQUMsQ0FBQSxNQUFBLGFBQWEsQ0FBQyxTQUFTLDBDQUFFLEtBQUssQ0FBQSxFQUFFO29CQUNuQyxPQUFPLENBQUMsS0FBSyxDQUNYLGdDQUFnQyxlQUFlLGVBQWUsQ0FDL0QsQ0FBQztvQkFDRixPQUFPO2lCQUNSO2dCQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzVCLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUNULENBQUM7Z0JBRXZCLE1BQU0sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQztnQkFDN0QsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLFdBQVcsQ0FBQztnQkFFaEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDZCxPQUFPLENBQUMsS0FBSyxDQUNYLHFHQUFxRyxDQUN0RyxDQUFDO29CQUNGLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSw0QkFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNkLDBFQUEwRTtvQkFDMUUsa0VBQWtFO29CQUVsRSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sWUFBWSxDQUFDLHlCQUF5QixDQUNwRSxXQUFXLEVBQ1gsWUFBWSxDQUNiLENBQUM7b0JBRUYsSUFBSSxDQUFDLGlCQUFpQixFQUFFO3dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUNWLDRDQUE0QyxTQUFTLDRDQUE0QyxXQUFXLEdBQUcsQ0FDaEgsQ0FBQztxQkFDSDtvQkFFRCxJQUFJLGlCQUFpQixFQUFFO3dCQUNyQixTQUFTLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxDQUFDO3dCQUNqQyxNQUFNLElBQUksQ0FBQyxTQUFTOzZCQUNqQixZQUFZLENBQUM7NEJBQ1osSUFBSSxFQUFFLGVBQWU7NEJBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxpQ0FBTSxXQUFXLEtBQUUsU0FBUyxJQUFHOzRCQUNwRCxTQUFTLEVBQUUsSUFBSTt5QkFDaEIsQ0FBQzs2QkFDRCxPQUFPLEVBQUUsQ0FBQztxQkFDZDtpQkFDRjtnQkFFRCxNQUFNLEVBQ0osT0FBTyxFQUNQLE9BQU8sRUFDUCxjQUFjLEVBQ2QsU0FBUyxFQUNULFNBQVMsRUFDVCxRQUFRLEdBQ1QsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FDWCxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUVoRSxNQUFNLHNCQUFzQixHQUFHLElBQUkseUNBQWtCLENBQ25ELFdBQVcsQ0FDWixDQUFDLGtCQUFrQixDQUFDO29CQUNuQixPQUFPO29CQUNQLE9BQU8sRUFBRSxPQUFPO29CQUNoQixTQUFTLEVBQUUsU0FBUztvQkFDcEIsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFFBQVEsRUFBRSxRQUFRO29CQUNsQixjQUFjLEVBQUUsY0FBYztpQkFDL0IsQ0FBQyxDQUFDO2dCQUVILE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7b0JBQ3hFLEtBQUssRUFBRSxTQUFTO29CQUNoQixPQUFPLEVBQUUsU0FBUyxhQUFULFNBQVMsY0FBVCxTQUFTLEdBQUksV0FBVztvQkFDakMsSUFBSSxFQUFFLE9BQU87b0JBQ2IsTUFBTSxFQUFFLHNCQUFzQjtpQkFDL0IsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQ1gsc0NBQXNDLEVBQ3RDLDZGQUE2RixDQUM5RixDQUFDO29CQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDN0M7Z0JBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzs7U0FDMUI7S0FDRjtJQTlHRCw0REE4R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTTlNFdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQmFzZVNOU0hhbmRsZXIgfSBmcm9tICcuL2Jhc2Utc25zLWhhbmRsZXInO1xuaW1wb3J0IHsgU1NNIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBJU2xhY2tDb25maWdQYXJhbSB9IGZyb20gJy4uL3N1YnNjcmlwdGlvbnMvc2xhY2stc3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IFNsYWNrU2VydmljZSB9IGZyb20gJy4vc2xhY2suc2VydmljZSc7XG5pbXBvcnQgeyBTbGFja0Jsb2Nrc0J1aWxkZXIgfSBmcm9tICcuL3NsYWNrLWJsb2Nrcy1idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBJU2xhY2tTTlNNZXNzYWdlIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIHVuc3Vic2NyaWJlVXJsOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbiAgdG9waWNBcm46IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNsYWNrU3Vic2NyaXB0aW9uSGFuZGxlciBleHRlbmRzIEJhc2VTTlNIYW5kbGVyIHtcbiAgcHJpdmF0ZSBzc21DbGllbnQ6IFNTTTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnNzbUNsaWVudCA9IG5ldyBTU00oe1xuICAgICAgYXBpVmVyc2lvbjogJzIwMTQtMTEtMDYnLFxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHJ1bkV4ZWMoZXZlbnQ6IFNOU0V2ZW50KTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGNvbmZpZ1BhcmFtTmFtZSA9IHByb2Nlc3MuZW52LkNPTkZJR19QQVJBTTtcblxuICAgIGlmICghY29uZmlnUGFyYW1OYW1lKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIGNvbmZpZyBwYXJhbWV0ZXIuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF3UGFyYW1WYWx1ZSA9IGF3YWl0IHRoaXMuc3NtQ2xpZW50XG4gICAgICAuZ2V0UGFyYW1ldGVyKHtcbiAgICAgICAgTmFtZTogY29uZmlnUGFyYW1OYW1lLFxuICAgICAgfSlcbiAgICAgIC5wcm9taXNlKCk7XG5cbiAgICBpZiAoIXJhd1BhcmFtVmFsdWUuUGFyYW1ldGVyPy5WYWx1ZSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCByZXNvbHZlIHBhcmFtZXRlciBcIiR7Y29uZmlnUGFyYW1OYW1lfVwiIGZyb20gc3RvcmUuYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzbGFja0NvbmZpZyA9IEpTT04ucGFyc2UoXG4gICAgICByYXdQYXJhbVZhbHVlLlBhcmFtZXRlci5WYWx1ZVxuICAgICkgYXMgSVNsYWNrQ29uZmlnUGFyYW07XG5cbiAgICBjb25zdCB7IGF1dGhUb2tlbiwgY2hhbm5lbE5hbWUsIGNoYW5uZWxUeXBlcyB9ID0gc2xhY2tDb25maWc7XG4gICAgbGV0IHsgY2hhbm5lbElkIH0gPSBzbGFja0NvbmZpZztcblxuICAgIGlmICghYXV0aFRva2VuKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgQXV0aCBUb2tlbiBpcyByZXF1aXJlZCBmb3Igc2VuZGluZyBub3RpZmljYXRpb25zIHRvIHNsYWNrLCByZWZlciB0byBodHRwczovL2FwaS5zbGFjay5jb20vYm90LXVzZXJzYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzbGFja1NlcnZpY2UgPSBuZXcgU2xhY2tTZXJ2aWNlKGF1dGhUb2tlbik7XG4gICAgaWYgKCFjaGFubmVsSWQpIHtcbiAgICAgIC8vIGlmIG5vIGNoYW5uZWwgaWQgaXMgcHJvdmlkZWQsIGZpbmQgb25lIGFuZCBzYXZlIGl0IGJhY2sgaW4gcGFyYW0gc3RvcmUsXG4gICAgICAvLyBzbyBzdWJzZXF1ZW50IHJ1bnMgZG8gbm90IG5lZWQgdG8gZmV0Y2ggaXQgZnJvbSBzbGFjayBhcGkgYWdhaW5cblxuICAgICAgY29uc3QgcmVzb2x2ZWRDaGFubmVsSWQgPSBhd2FpdCBzbGFja1NlcnZpY2UuZ2V0Q2hhbm5lbElkQnlDaGFubmVsTmFtZShcbiAgICAgICAgY2hhbm5lbE5hbWUsXG4gICAgICAgIGNoYW5uZWxUeXBlc1xuICAgICAgKTtcblxuICAgICAgaWYgKCFyZXNvbHZlZENoYW5uZWxJZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYENvdWxkIG5vdCByZXNvbHZlIGNoYW5uZWwgaWQgZm9yIGNoYW5uZWwgJHtjaGFubmVsSWR9LCBtZXNzYWdlIHdpbGwgdG8gZmlyc3QgY2hhbm5lbCBtYXRjaGluZyAke2NoYW5uZWxOYW1lfS5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNvbHZlZENoYW5uZWxJZCkge1xuICAgICAgICBjaGFubmVsSWQgPSByZXNvbHZlZENoYW5uZWxJZC5pZDtcbiAgICAgICAgYXdhaXQgdGhpcy5zc21DbGllbnRcbiAgICAgICAgICAucHV0UGFyYW1ldGVyKHtcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZ1BhcmFtTmFtZSxcbiAgICAgICAgICAgIFZhbHVlOiBKU09OLnN0cmluZ2lmeSh7IC4uLnNsYWNrQ29uZmlnLCBjaGFubmVsSWQgfSksXG4gICAgICAgICAgICBPdmVyd3JpdGU6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIE1lc3NhZ2UsXG4gICAgICBTdWJqZWN0LFxuICAgICAgVW5zdWJzY3JpYmVVcmwsXG4gICAgICBUaW1lc3RhbXAsXG4gICAgICBNZXNzYWdlSWQsXG4gICAgICBUb3BpY0FybixcbiAgICB9ID0gdGhpcy5nZXRQYXJzZWRFdmVudChldmVudCk7XG4gICAgY29uc3Qgc3ViamVjdCA9XG4gICAgICAhU3ViamVjdCB8fCBTdWJqZWN0ID09PSAnbnVsbCcgPyAnTmV3IE5vdGlmaWNhdGlvbicgOiBTdWJqZWN0O1xuXG4gICAgY29uc3QgZGVmYXVsdE1lc3NhZ2VUZW1wbGF0ZSA9IG5ldyBTbGFja0Jsb2Nrc0J1aWxkZXIoXG4gICAgICBjaGFubmVsTmFtZVxuICAgICkuZ2V0RGVmYXVsdFRlbXBsYXRlKHtcbiAgICAgIHN1YmplY3QsXG4gICAgICBtZXNzYWdlOiBNZXNzYWdlLFxuICAgICAgbWVzc2FnZUlkOiBNZXNzYWdlSWQsXG4gICAgICB0aW1lc3RhbXA6IFRpbWVzdGFtcCxcbiAgICAgIHRvcGljQXJuOiBUb3BpY0FybixcbiAgICAgIHVuc3Vic2NyaWJlVXJsOiBVbnN1YnNjcmliZVVybCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBvc3RNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCBzbGFja1NlcnZpY2Uud2ViQ2xpZW50LmNoYXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgdG9rZW46IGF1dGhUb2tlbixcbiAgICAgIGNoYW5uZWw6IGNoYW5uZWxJZCA/PyBjaGFubmVsTmFtZSxcbiAgICAgIHRleHQ6IHN1YmplY3QsXG4gICAgICBibG9ja3M6IGRlZmF1bHRNZXNzYWdlVGVtcGxhdGUsXG4gICAgfSk7XG5cbiAgICBpZiAoIXBvc3RNZXNzYWdlUmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdDb3VsZCBOb3QgcG9zdCBub3RpZmljYXRpb24gdG8gc2xhY2snLFxuICAgICAgICAnUGxlYXNlIHJlcXVlc3QgcGVybWlzc2lvbnMgZm9yIHNjb3BlIFwiY2hhdDp3cml0ZTpib3RcIiwgYW5kIG1ha2Ugc3VyZSBib3QgaXMgaW4gdGhlIGNoYW5uZWwuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmJhaWwocG9zdE1lc3NhZ2VSZXNwb25zZS5lcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICB9XG59XG4iXX0=