@gammarers/aws-sns-slack-message-lambda-subscription 0.1.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/.jsii +3890 -0
- package/API.md +207 -0
- package/LICENSE +202 -0
- package/README.md +22 -0
- package/assets/funcs/send-slack-message.lambda/index.js +17564 -0
- package/assets/funcs/send-slack-message.lambda/index.js.map +7 -0
- package/lib/funcs/send-slack-message-function.d.ts +13 -0
- package/lib/funcs/send-slack-message-function.js +23 -0
- package/lib/funcs/send-slack-message.lambda.d.ts +2 -0
- package/lib/funcs/send-slack-message.lambda.js +51 -0
- package/lib/index.d.ts +17 -0
- package/lib/index.js +87 -0
- package/package.json +150 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
/**
|
|
4
|
+
* Props for SendSlackMessageFunction
|
|
5
|
+
*/
|
|
6
|
+
export interface SendSlackMessageFunctionProps extends lambda.FunctionOptions {
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* An AWS Lambda function which executes src/funcs/send-slack-message.
|
|
10
|
+
*/
|
|
11
|
+
export declare class SendSlackMessageFunction extends lambda.Function {
|
|
12
|
+
constructor(scope: Construct, id: string, props?: SendSlackMessageFunctionProps);
|
|
13
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SendSlackMessageFunction = void 0;
|
|
4
|
+
// ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
/**
|
|
8
|
+
* An AWS Lambda function which executes src/funcs/send-slack-message.
|
|
9
|
+
*/
|
|
10
|
+
class SendSlackMessageFunction extends lambda.Function {
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id, {
|
|
13
|
+
description: 'src/funcs/send-slack-message.lambda.ts',
|
|
14
|
+
...props,
|
|
15
|
+
runtime: new lambda.Runtime('nodejs20.x', lambda.RuntimeFamily.NODEJS),
|
|
16
|
+
handler: 'index.handler',
|
|
17
|
+
code: lambda.Code.fromAsset(path.join(__dirname, '../../assets/funcs/send-slack-message.lambda')),
|
|
18
|
+
});
|
|
19
|
+
this.addEnvironment('AWS_NODEJS_CONNECTION_REUSE_ENABLED', '1', { removeInEdge: true });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.SendSlackMessageFunction = SendSlackMessageFunction;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay1tZXNzYWdlLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1bmNzL3NlbmQtc2xhY2stbWVzc2FnZS1mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2RUFBNkU7QUFDN0UsNkJBQTZCO0FBQzdCLGlEQUFpRDtBQVNqRDs7R0FFRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsTUFBTSxDQUFDLFFBQVE7SUFDM0QsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFdBQVcsRUFBRSx3Q0FBd0M7WUFDckQsR0FBRyxLQUFLO1lBQ1IsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDdEUsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDhDQUE4QyxDQUFDLENBQUM7U0FDbEcsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQ0FBcUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0Y7QUFYRCw0REFXQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5weCBwcm9qZW5cIi5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgU2VuZFNsYWNrTWVzc2FnZUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFNsYWNrTWVzc2FnZUZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb25PcHRpb25zIHtcbn1cblxuLyoqXG4gKiBBbiBBV1MgTGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGV4ZWN1dGVzIHNyYy9mdW5jcy9zZW5kLXNsYWNrLW1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZW5kU2xhY2tNZXNzYWdlRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFNlbmRTbGFja01lc3NhZ2VGdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ3NyYy9mdW5jcy9zZW5kLXNsYWNrLW1lc3NhZ2UubGFtYmRhLnRzJyxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcnVudGltZTogbmV3IGxhbWJkYS5SdW50aW1lKCdub2RlanMyMC54JywgbGFtYmRhLlJ1bnRpbWVGYW1pbHkuTk9ERUpTKSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vYXNzZXRzL2Z1bmNzL3NlbmQtc2xhY2stbWVzc2FnZS5sYW1iZGEnKSksXG4gICAgfSk7XG4gICAgdGhpcy5hZGRFbnZpcm9ubWVudCgnQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQnLCAnMScsIHsgcmVtb3ZlSW5FZGdlOiB0cnVlIH0pO1xuICB9XG59Il19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handler = void 0;
|
|
4
|
+
const webhook_1 = require("@slack/webhook");
|
|
5
|
+
const axios_1 = require("axios");
|
|
6
|
+
const SECRET_MANAGER_GET_URL = 'http://localhost:2773/secretsmanager/get';
|
|
7
|
+
const AWS_SESSION_TOKEN = process.env.AWS_SESSION_TOKEN || '';
|
|
8
|
+
class NotSetSecretStringError extends Error {
|
|
9
|
+
constructor() {
|
|
10
|
+
super('get object is empty');
|
|
11
|
+
this.name = 'NotSetSecretStringError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const handler = async (event, context) => {
|
|
15
|
+
console.log({ event, context });
|
|
16
|
+
const axiosRequestConfig = {
|
|
17
|
+
params: {
|
|
18
|
+
secretId: encodeURIComponent(process.env.SLACK_WEBOOK_SECRET_NAME), // require URI Encord "/"
|
|
19
|
+
// withDecryption: true,
|
|
20
|
+
},
|
|
21
|
+
headers: {
|
|
22
|
+
'X-Aws-Parameters-Secrets-Token': AWS_SESSION_TOKEN,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
let slackWebhookSecrets = null;
|
|
26
|
+
return axios_1.default.get(SECRET_MANAGER_GET_URL, axiosRequestConfig)
|
|
27
|
+
.then((value) => {
|
|
28
|
+
slackWebhookSecrets = JSON.parse(value.data.SecretString);
|
|
29
|
+
if (!slackWebhookSecrets) {
|
|
30
|
+
throw new NotSetSecretStringError();
|
|
31
|
+
}
|
|
32
|
+
const webhook = new webhook_1.IncomingWebhook(`https://hooks.slack.com/services/${slackWebhookSecrets.Workspace}/${slackWebhookSecrets.Channel}/${slackWebhookSecrets.Webhook}`);
|
|
33
|
+
const promises = event.Records.map((record) => {
|
|
34
|
+
const id = record.Sns.MessageId;
|
|
35
|
+
console.log({ MessageId: id });
|
|
36
|
+
//const subject = record.Sns.Subject;
|
|
37
|
+
const message = record.Sns.Message;
|
|
38
|
+
const jsonMessage = JSON.parse(message);
|
|
39
|
+
return webhook.send(jsonMessage);
|
|
40
|
+
});
|
|
41
|
+
return Promise.all(promises);
|
|
42
|
+
})
|
|
43
|
+
.then((results) => {
|
|
44
|
+
console.info({ Succeed: 'Webhook Sent', results });
|
|
45
|
+
})
|
|
46
|
+
.catch((error) => {
|
|
47
|
+
throw error;
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
exports.handler = handler;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay1tZXNzYWdlLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdW5jcy9zZW5kLXNsYWNrLW1lc3NhZ2UubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDRDQUFzRztBQUV0RyxpQ0FBMEI7QUFFMUIsTUFBTSxzQkFBc0IsR0FBRywwQ0FBMEMsQ0FBQztBQUMxRSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO0FBUTlELE1BQU0sdUJBQXdCLFNBQVEsS0FBSztJQUN6QztRQUNFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRU0sTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEtBQWUsRUFBRSxPQUFnQixFQUFpQixFQUFFO0lBQ2hGLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLE1BQU0sRUFBRTtZQUNOLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF5QixDQUFDLEVBQUUseUJBQXlCO1lBQzlGLHdCQUF3QjtTQUN6QjtRQUNELE9BQU8sRUFBRTtZQUNQLGdDQUFnQyxFQUFFLGlCQUFpQjtTQUNwRDtLQUNGLENBQUM7SUFFRixJQUFJLG1CQUFtQixHQUErQixJQUFJLENBQUM7SUFFM0QsT0FBTyxlQUFLLENBQUMsR0FBRyxDQUFDLHNCQUFzQixFQUFFLGtCQUFrQixDQUFDO1NBQ3pELElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHlCQUFlLENBQUMsb0NBQW9DLG1CQUFtQixDQUFDLFNBQVMsSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUV2SyxNQUFNLFFBQVEsR0FBcUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFzQixFQUFFLEVBQUU7WUFDOUYsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLHFDQUFxQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBaUMsQ0FBQztZQUN4RSxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsT0FBZ0MsRUFBRSxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDO1NBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBeENXLFFBQUEsT0FBTyxXQXdDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNvbWluZ1dlYmhvb2ssIEluY29taW5nV2ViaG9va1Jlc3VsdCwgSW5jb21pbmdXZWJob29rU2VuZEFyZ3VtZW50cyB9IGZyb20gJ0BzbGFjay93ZWJob29rJztcbmltcG9ydCB7IENvbnRleHQsIFNOU0V2ZW50LCBTTlNFdmVudFJlY29yZCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuY29uc3QgU0VDUkVUX01BTkFHRVJfR0VUX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjI3NzMvc2VjcmV0c21hbmFnZXIvZ2V0JztcbmNvbnN0IEFXU19TRVNTSU9OX1RPS0VOID0gcHJvY2Vzcy5lbnYuQVdTX1NFU1NJT05fVE9LRU4gfHwgJyc7XG5cbmludGVyZmFjZSBTbGFja1dlYmhvb2tTZWNyZXRzIHtcbiAgcmVhZG9ubHkgV29ya3NwYWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IENoYW5uZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgV2ViaG9vazogc3RyaW5nO1xufVxuXG5jbGFzcyBOb3RTZXRTZWNyZXRTdHJpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2dldCBvYmplY3QgaXMgZW1wdHknKTtcbiAgICB0aGlzLm5hbWUgPSAnTm90U2V0U2VjcmV0U3RyaW5nRXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKGV2ZW50OiBTTlNFdmVudCwgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zb2xlLmxvZyh7IGV2ZW50LCBjb250ZXh0IH0pO1xuXG4gIGNvbnN0IGF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICBwYXJhbXM6IHtcbiAgICAgIHNlY3JldElkOiBlbmNvZGVVUklDb21wb25lbnQocHJvY2Vzcy5lbnYuU0xBQ0tfV0VCT09LX1NFQ1JFVF9OQU1FISksIC8vIHJlcXVpcmUgVVJJIEVuY29yZCBcIi9cIlxuICAgICAgLy8gd2l0aERlY3J5cHRpb246IHRydWUsXG4gICAgfSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnWC1Bd3MtUGFyYW1ldGVycy1TZWNyZXRzLVRva2VuJzogQVdTX1NFU1NJT05fVE9LRU4sXG4gICAgfSxcbiAgfTtcblxuICBsZXQgc2xhY2tXZWJob29rU2VjcmV0czogU2xhY2tXZWJob29rU2VjcmV0cyB8IG51bGwgPSBudWxsO1xuXG4gIHJldHVybiBheGlvcy5nZXQoU0VDUkVUX01BTkFHRVJfR0VUX1VSTCwgYXhpb3NSZXF1ZXN0Q29uZmlnKVxuICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgc2xhY2tXZWJob29rU2VjcmV0cyA9IEpTT04ucGFyc2UodmFsdWUuZGF0YS5TZWNyZXRTdHJpbmcpO1xuICAgICAgaWYgKCFzbGFja1dlYmhvb2tTZWNyZXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RTZXRTZWNyZXRTdHJpbmdFcnJvcigpO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2ViaG9vayA9IG5ldyBJbmNvbWluZ1dlYmhvb2soYGh0dHBzOi8vaG9va3Muc2xhY2suY29tL3NlcnZpY2VzLyR7c2xhY2tXZWJob29rU2VjcmV0cy5Xb3Jrc3BhY2V9LyR7c2xhY2tXZWJob29rU2VjcmV0cy5DaGFubmVsfS8ke3NsYWNrV2ViaG9va1NlY3JldHMuV2ViaG9va31gKTtcblxuICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8SW5jb21pbmdXZWJob29rUmVzdWx0PltdID0gZXZlbnQuUmVjb3Jkcy5tYXAoKHJlY29yZDogU05TRXZlbnRSZWNvcmQpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSByZWNvcmQuU25zLk1lc3NhZ2VJZDtcbiAgICAgICAgY29uc29sZS5sb2coeyBNZXNzYWdlSWQ6IGlkIH0pO1xuICAgICAgICAvL2NvbnN0IHN1YmplY3QgPSByZWNvcmQuU25zLlN1YmplY3Q7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZWNvcmQuU25zLk1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGpzb25NZXNzYWdlID0gSlNPTi5wYXJzZShtZXNzYWdlKSBhcyBJbmNvbWluZ1dlYmhvb2tTZW5kQXJndW1lbnRzO1xuICAgICAgICByZXR1cm4gd2ViaG9vay5zZW5kKGpzb25NZXNzYWdlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIH0pXG4gICAgLnRoZW4oKHJlc3VsdHM6IEluY29taW5nV2ViaG9va1Jlc3VsdFtdKSA9PiB7XG4gICAgICBjb25zb2xlLmluZm8oeyBTdWNjZWVkOiAnV2ViaG9vayBTZW50JywgcmVzdWx0cyB9KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTsiXX0=
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ResourceDefaultNaming, ResourceNamingType } from '@gammarers/aws-resource-naming';
|
|
2
|
+
import * as sns from 'aws-cdk-lib/aws-sns';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
export interface ResourceCustomNaming {
|
|
5
|
+
readonly type: ResourceNamingType.CUSTOM;
|
|
6
|
+
readonly functionName: string;
|
|
7
|
+
readonly functionRoleName: string;
|
|
8
|
+
}
|
|
9
|
+
export type ResourceNamingOption = ResourceDefaultNaming | ResourceCustomNaming;
|
|
10
|
+
export interface SNSSlackMessageLambdaSubscriptionProps {
|
|
11
|
+
readonly topic: sns.ITopic;
|
|
12
|
+
readonly slackWebhookSecretName: string;
|
|
13
|
+
readonly resourceNamingOption?: ResourceNamingOption;
|
|
14
|
+
}
|
|
15
|
+
export declare class SNSSlackMessageLambdaSubscription extends Construct {
|
|
16
|
+
constructor(scope: Construct, id: string, props: SNSSlackMessageLambdaSubscriptionProps);
|
|
17
|
+
}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SNSSlackMessageLambdaSubscription = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_resource_naming_1 = require("@gammarers/aws-resource-naming");
|
|
7
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
|
+
const iam = require("aws-cdk-lib/aws-iam");
|
|
9
|
+
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
10
|
+
const logs = require("aws-cdk-lib/aws-logs");
|
|
11
|
+
const sns = require("aws-cdk-lib/aws-sns");
|
|
12
|
+
const constructs_1 = require("constructs");
|
|
13
|
+
const send_slack_message_function_1 = require("./funcs/send-slack-message-function");
|
|
14
|
+
class SNSSlackMessageLambdaSubscription extends constructs_1.Construct {
|
|
15
|
+
constructor(scope, id, props) {
|
|
16
|
+
super(scope, id);
|
|
17
|
+
// 👇 Get account & region
|
|
18
|
+
const account = aws_cdk_lib_1.Stack.of(scope).account;
|
|
19
|
+
const region = aws_cdk_lib_1.Stack.of(scope).region;
|
|
20
|
+
// 👇 Create random 8 length string
|
|
21
|
+
const random = aws_resource_naming_1.ResourceNaming.createRandomString(`${aws_cdk_lib_1.Names.uniqueId(scope)}.${aws_cdk_lib_1.Names.uniqueId(this)}`);
|
|
22
|
+
const autoNaming = {
|
|
23
|
+
functionName: `send-slack-message-${random}-func`,
|
|
24
|
+
functionRoleName: `send-slack-message-lambda-func-exec-${random}-role`,
|
|
25
|
+
};
|
|
26
|
+
const names = aws_resource_naming_1.ResourceNaming.naming(autoNaming, props.resourceNamingOption);
|
|
27
|
+
// Lambda function
|
|
28
|
+
const sendMessageFunction = new send_slack_message_function_1.SendSlackMessageFunction(this, 'SendSlackMessageFunction', {
|
|
29
|
+
functionName: names.functionName,
|
|
30
|
+
description: 'Send Slack message function',
|
|
31
|
+
architecture: lambda.Architecture.ARM_64,
|
|
32
|
+
role: new iam.Role(this, 'LambdaExecutionRole', {
|
|
33
|
+
roleName: names.functionRoleName,
|
|
34
|
+
description: '',
|
|
35
|
+
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
36
|
+
managedPolicies: [
|
|
37
|
+
iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaBasicExecutionRole'),
|
|
38
|
+
],
|
|
39
|
+
inlinePolicies: {
|
|
40
|
+
'get-secret-policy': new iam.PolicyDocument({
|
|
41
|
+
statements: [
|
|
42
|
+
new iam.PolicyStatement({
|
|
43
|
+
effect: iam.Effect.ALLOW,
|
|
44
|
+
actions: [
|
|
45
|
+
'secretsmanager:GetSecretValue',
|
|
46
|
+
],
|
|
47
|
+
resources: [
|
|
48
|
+
`arn:aws:secretsmanager:${region}:${account}:secret:${props.slackWebhookSecretName}*`,
|
|
49
|
+
],
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
}),
|
|
53
|
+
},
|
|
54
|
+
}),
|
|
55
|
+
timeout: aws_cdk_lib_1.Duration.seconds(10),
|
|
56
|
+
paramsAndSecrets: lambda.ParamsAndSecretsLayerVersion.fromVersion(lambda.ParamsAndSecretsVersions.V1_0_103, {
|
|
57
|
+
cacheSize: 500,
|
|
58
|
+
logLevel: lambda.ParamsAndSecretsLogLevel.INFO,
|
|
59
|
+
}),
|
|
60
|
+
environment: {
|
|
61
|
+
SLACK_WEBOOK_SECRET_NAME: props.slackWebhookSecretName,
|
|
62
|
+
},
|
|
63
|
+
logFormat: lambda.LogFormat.JSON,
|
|
64
|
+
systemLogLevel: lambda.SystemLogLevel.INFO,
|
|
65
|
+
applicationLogLevel: lambda.ApplicationLogLevel.INFO,
|
|
66
|
+
logGroup: new logs.LogGroup(this, 'SendSlackMessageFunctionLogGroup', {
|
|
67
|
+
logGroupName: names.functionName ? `/aws/lambda/${names.functionName}` : undefined,
|
|
68
|
+
retention: logs.RetentionDays.THREE_MONTHS,
|
|
69
|
+
removalPolicy: aws_cdk_lib_1.RemovalPolicy.RETAIN_ON_UPDATE_OR_DELETE,
|
|
70
|
+
}),
|
|
71
|
+
});
|
|
72
|
+
sendMessageFunction.addPermission('InvokeFunctionFromSNS', {
|
|
73
|
+
principal: new iam.ServicePrincipal('sns.amazonaws.com'),
|
|
74
|
+
action: 'lambda:InvokeFunction',
|
|
75
|
+
sourceArn: props.topic.topicArn,
|
|
76
|
+
});
|
|
77
|
+
new sns.Subscription(this, 'LambdaSubscription', {
|
|
78
|
+
topic: props.topic,
|
|
79
|
+
protocol: sns.SubscriptionProtocol.LAMBDA,
|
|
80
|
+
endpoint: sendMessageFunction.functionArn,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.SNSSlackMessageLambdaSubscription = SNSSlackMessageLambdaSubscription;
|
|
85
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
86
|
+
SNSSlackMessageLambdaSubscription[_a] = { fqn: "@gammarers/aws-sns-slack-message-lambda-subscription.SNSSlackMessageLambdaSubscription", version: "0.1.0" };
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBa0k7QUFDbEksNkNBQW9FO0FBQ3BFLDJDQUEyQztBQUMzQyxpREFBaUQ7QUFDakQsNkNBQTZDO0FBQzdDLDJDQUEyQztBQUMzQywyQ0FBdUM7QUFDdkMscUZBQStFO0FBZ0IvRSxNQUFhLGlDQUFrQyxTQUFRLHNCQUFTO0lBQzlELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkM7UUFDckYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiwwQkFBMEI7UUFDMUIsTUFBTSxPQUFPLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUV0QyxtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsb0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLG1CQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLG1CQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRyxNQUFNLFVBQVUsR0FBRztZQUNqQixZQUFZLEVBQUUsc0JBQXNCLE1BQU0sT0FBTztZQUNqRCxnQkFBZ0IsRUFBRSx1Q0FBdUMsTUFBTSxPQUFPO1NBQ3ZFLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxvQ0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLG9CQUE2QyxDQUFDLENBQUM7UUFFckcsa0JBQWtCO1FBQ2xCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDekYsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUN4QyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtnQkFDOUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7Z0JBQ2hDLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztnQkFDM0QsZUFBZSxFQUFFO29CQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsMENBQTBDLENBQUM7aUJBQ3ZGO2dCQUNELGNBQWMsRUFBRTtvQkFDZCxtQkFBbUIsRUFBRSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUM7d0JBQzFDLFVBQVUsRUFBRTs0QkFDVixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0NBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0NBQ3hCLE9BQU8sRUFBRTtvQ0FDUCwrQkFBK0I7aUNBQ2hDO2dDQUNELFNBQVMsRUFBRTtvQ0FDVCwwQkFBMEIsTUFBTSxJQUFJLE9BQU8sV0FBVyxLQUFLLENBQUMsc0JBQXNCLEdBQUc7aUNBQ3RGOzZCQUNGLENBQUM7eUJBQ0g7cUJBQ0YsQ0FBQztpQkFDSDthQUNGLENBQUM7WUFDRixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtnQkFDMUcsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsUUFBUSxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJO2FBQy9DLENBQUM7WUFDRixXQUFXLEVBQUU7Z0JBQ1gsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjthQUN2RDtZQUNELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUk7WUFDaEMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSTtZQUMxQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSTtZQUNwRCxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxrQ0FBa0MsRUFBRTtnQkFDcEUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGVBQWUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUNsRixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZO2dCQUMxQyxhQUFhLEVBQUUsMkJBQWEsQ0FBQywwQkFBMEI7YUFDeEQsQ0FBQztTQUNILENBQUMsQ0FBQztRQUNILG1CQUFtQixDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRTtZQUN6RCxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDeEQsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO1NBQ2hDLENBQUMsQ0FBQztRQUVILElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDL0MsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLFFBQVEsRUFBRSxHQUFHLENBQUMsb0JBQW9CLENBQUMsTUFBTTtZQUN6QyxRQUFRLEVBQUUsbUJBQW1CLENBQUMsV0FBVztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXhFSCw4RUF5RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZURlZmF1bHROYW1pbmcsIFJlc291cmNlTmFtaW5nLCBSZXNvdXJjZU5hbWluZ09wdGlvbnMsIFJlc291cmNlTmFtaW5nVHlwZSB9IGZyb20gJ0BnYW1tYXJlcnMvYXdzLXJlc291cmNlLW5hbWluZyc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgTmFtZXMsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFNlbmRTbGFja01lc3NhZ2VGdW5jdGlvbiB9IGZyb20gJy4vZnVuY3Mvc2VuZC1zbGFjay1tZXNzYWdlLWZ1bmN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUN1c3RvbU5hbWluZyB7XG4gIHJlYWRvbmx5IHR5cGU6IFJlc291cmNlTmFtaW5nVHlwZS5DVVNUT007XG4gIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBmdW5jdGlvblJvbGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlTmFtaW5nT3B0aW9uID0gUmVzb3VyY2VEZWZhdWx0TmFtaW5nIHwgUmVzb3VyY2VDdXN0b21OYW1pbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU05TU2xhY2tNZXNzYWdlTGFtYmRhU3Vic2NyaXB0aW9uUHJvcHMge1xuICByZWFkb25seSB0b3BpYzogc25zLklUb3BpYztcbiAgcmVhZG9ubHkgc2xhY2tXZWJob29rU2VjcmV0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZU5hbWluZ09wdGlvbj86IFJlc291cmNlTmFtaW5nT3B0aW9uO1xufVxuXG5leHBvcnQgY2xhc3MgU05TU2xhY2tNZXNzYWdlTGFtYmRhU3Vic2NyaXB0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNOU1NsYWNrTWVzc2FnZUxhbWJkYVN1YnNjcmlwdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIPCfkYcgR2V0IGFjY291bnQgJiByZWdpb25cbiAgICBjb25zdCBhY2NvdW50ID0gU3RhY2sub2Yoc2NvcGUpLmFjY291bnQ7XG4gICAgY29uc3QgcmVnaW9uID0gU3RhY2sub2Yoc2NvcGUpLnJlZ2lvbjtcblxuICAgIC8vIPCfkYcgQ3JlYXRlIHJhbmRvbSA4IGxlbmd0aCBzdHJpbmdcbiAgICBjb25zdCByYW5kb20gPSBSZXNvdXJjZU5hbWluZy5jcmVhdGVSYW5kb21TdHJpbmcoYCR7TmFtZXMudW5pcXVlSWQoc2NvcGUpfS4ke05hbWVzLnVuaXF1ZUlkKHRoaXMpfWApO1xuICAgIGNvbnN0IGF1dG9OYW1pbmcgPSB7XG4gICAgICBmdW5jdGlvbk5hbWU6IGBzZW5kLXNsYWNrLW1lc3NhZ2UtJHtyYW5kb219LWZ1bmNgLFxuICAgICAgZnVuY3Rpb25Sb2xlTmFtZTogYHNlbmQtc2xhY2stbWVzc2FnZS1sYW1iZGEtZnVuYy1leGVjLSR7cmFuZG9tfS1yb2xlYCxcbiAgICB9O1xuICAgIGNvbnN0IG5hbWVzID0gUmVzb3VyY2VOYW1pbmcubmFtaW5nKGF1dG9OYW1pbmcsIHByb3BzLnJlc291cmNlTmFtaW5nT3B0aW9uIGFzIFJlc291cmNlTmFtaW5nT3B0aW9ucyk7XG5cbiAgICAvLyBMYW1iZGEgZnVuY3Rpb25cbiAgICBjb25zdCBzZW5kTWVzc2FnZUZ1bmN0aW9uID0gbmV3IFNlbmRTbGFja01lc3NhZ2VGdW5jdGlvbih0aGlzLCAnU2VuZFNsYWNrTWVzc2FnZUZ1bmN0aW9uJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBuYW1lcy5mdW5jdGlvbk5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1NlbmQgU2xhY2sgbWVzc2FnZSBmdW5jdGlvbicsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgcm9sZTogbmV3IGlhbS5Sb2xlKHRoaXMsICdMYW1iZGFFeGVjdXRpb25Sb2xlJywge1xuICAgICAgICByb2xlTmFtZTogbmFtZXMuZnVuY3Rpb25Sb2xlTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJyksXG4gICAgICAgIF0sXG4gICAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgICAgJ2dldC1zZWNyZXQtcG9saWN5JzogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtyZWdpb259OiR7YWNjb3VudH06c2VjcmV0OiR7cHJvcHMuc2xhY2tXZWJob29rU2VjcmV0TmFtZX0qYCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgcGFyYW1zQW5kU2VjcmV0czogbGFtYmRhLlBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24obGFtYmRhLlBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucy5WMV8wXzEwMywge1xuICAgICAgICBjYWNoZVNpemU6IDUwMCxcbiAgICAgICAgbG9nTGV2ZWw6IGxhbWJkYS5QYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuSU5GTyxcbiAgICAgIH0pLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU0xBQ0tfV0VCT09LX1NFQ1JFVF9OQU1FOiBwcm9wcy5zbGFja1dlYmhvb2tTZWNyZXROYW1lLFxuICAgICAgfSxcbiAgICAgIGxvZ0Zvcm1hdDogbGFtYmRhLkxvZ0Zvcm1hdC5KU09OLFxuICAgICAgc3lzdGVtTG9nTGV2ZWw6IGxhbWJkYS5TeXN0ZW1Mb2dMZXZlbC5JTkZPLFxuICAgICAgYXBwbGljYXRpb25Mb2dMZXZlbDogbGFtYmRhLkFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GTyxcbiAgICAgIGxvZ0dyb3VwOiBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnU2VuZFNsYWNrTWVzc2FnZUZ1bmN0aW9uTG9nR3JvdXAnLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogbmFtZXMuZnVuY3Rpb25OYW1lID8gYC9hd3MvbGFtYmRhLyR7bmFtZXMuZnVuY3Rpb25OYW1lfWAgOiB1bmRlZmluZWQsXG4gICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLlRIUkVFX01PTlRIUyxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24uYWRkUGVybWlzc2lvbignSW52b2tlRnVuY3Rpb25Gcm9tU05TJywge1xuICAgICAgcHJpbmNpcGFsOiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3Nucy5hbWF6b25hd3MuY29tJyksXG4gICAgICBhY3Rpb246ICdsYW1iZGE6SW52b2tlRnVuY3Rpb24nLFxuICAgICAgc291cmNlQXJuOiBwcm9wcy50b3BpYy50b3BpY0FybixcbiAgICB9KTtcblxuICAgIG5ldyBzbnMuU3Vic2NyaXB0aW9uKHRoaXMsICdMYW1iZGFTdWJzY3JpcHRpb24nLCB7XG4gICAgICB0b3BpYzogcHJvcHMudG9waWMsXG4gICAgICBwcm90b2NvbDogc25zLlN1YnNjcmlwdGlvblByb3RvY29sLkxBTUJEQSxcbiAgICAgIGVuZHBvaW50OiBzZW5kTWVzc2FnZUZ1bmN0aW9uLmZ1bmN0aW9uQXJuLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
package/package.json
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@gammarers/aws-sns-slack-message-lambda-subscription",
|
|
3
|
+
"repository": {
|
|
4
|
+
"type": "git",
|
|
5
|
+
"url": "https://github.com/gammarers/aws-sns-slack-message-lambda-subscription.git"
|
|
6
|
+
},
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "npx projen build",
|
|
9
|
+
"bump": "npx projen bump",
|
|
10
|
+
"bundle": "npx projen bundle",
|
|
11
|
+
"bundle:funcs/send-slack-message.lambda": "npx projen bundle:funcs/send-slack-message.lambda",
|
|
12
|
+
"bundle:funcs/send-slack-message.lambda:watch": "npx projen bundle:funcs/send-slack-message.lambda:watch",
|
|
13
|
+
"clobber": "npx projen clobber",
|
|
14
|
+
"compat": "npx projen compat",
|
|
15
|
+
"compile": "npx projen compile",
|
|
16
|
+
"default": "npx projen default",
|
|
17
|
+
"docgen": "npx projen docgen",
|
|
18
|
+
"eject": "npx projen eject",
|
|
19
|
+
"eslint": "npx projen eslint",
|
|
20
|
+
"package": "npx projen package",
|
|
21
|
+
"package-all": "npx projen package-all",
|
|
22
|
+
"package:js": "npx projen package:js",
|
|
23
|
+
"post-compile": "npx projen post-compile",
|
|
24
|
+
"post-upgrade": "npx projen post-upgrade",
|
|
25
|
+
"pre-compile": "npx projen pre-compile",
|
|
26
|
+
"release": "npx projen release",
|
|
27
|
+
"test": "npx projen test",
|
|
28
|
+
"test:watch": "npx projen test:watch",
|
|
29
|
+
"unbump": "npx projen unbump",
|
|
30
|
+
"upgrade": "npx projen upgrade",
|
|
31
|
+
"watch": "npx projen watch",
|
|
32
|
+
"projen": "npx projen"
|
|
33
|
+
},
|
|
34
|
+
"author": {
|
|
35
|
+
"name": "yicr",
|
|
36
|
+
"email": "yicr@users.noreply.github.com",
|
|
37
|
+
"organization": true
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@gammarers/aws-resource-naming": "0.8.0",
|
|
41
|
+
"@gammarers/jest-aws-cdk-asset-filename-renamer": "^0.5.21",
|
|
42
|
+
"@slack/webhook": "^7.0.3",
|
|
43
|
+
"@stylistic/eslint-plugin": "^2",
|
|
44
|
+
"@types/aws-lambda": "^8.10.145",
|
|
45
|
+
"@types/jest": "^29.5.14",
|
|
46
|
+
"@types/node": "^18",
|
|
47
|
+
"@typescript-eslint/eslint-plugin": "^8",
|
|
48
|
+
"@typescript-eslint/parser": "^8",
|
|
49
|
+
"aws-cdk-lib": "2.120.0",
|
|
50
|
+
"aws-sdk-client-mock": "^4.1.0",
|
|
51
|
+
"aws-sdk-client-mock-jest": "^4.1.0",
|
|
52
|
+
"axios": "^1.6.7",
|
|
53
|
+
"commit-and-tag-version": "^12",
|
|
54
|
+
"constructs": "10.0.5",
|
|
55
|
+
"esbuild": "^0.24.2",
|
|
56
|
+
"eslint": "^9",
|
|
57
|
+
"eslint-import-resolver-typescript": "^3.7.0",
|
|
58
|
+
"eslint-plugin-import": "^2.31.0",
|
|
59
|
+
"jest": "^29.7.0",
|
|
60
|
+
"jest-junit": "^16",
|
|
61
|
+
"jsii": "5.7.x",
|
|
62
|
+
"jsii-diff": "^1.106.0",
|
|
63
|
+
"jsii-docgen": "^10.5.0",
|
|
64
|
+
"jsii-pacmak": "^1.106.0",
|
|
65
|
+
"jsii-rosetta": "5.7.x",
|
|
66
|
+
"projen": "^0.91.6",
|
|
67
|
+
"ts-jest": "^29.2.5",
|
|
68
|
+
"ts-node": "^10.9.2",
|
|
69
|
+
"typescript": "5.7.x"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"@gammarers/aws-resource-naming": "^0.8.0",
|
|
73
|
+
"aws-cdk-lib": "^2.120.0",
|
|
74
|
+
"constructs": "^10.0.5"
|
|
75
|
+
},
|
|
76
|
+
"dependencies": {
|
|
77
|
+
"@gammarers/aws-resource-naming": "0.8.0"
|
|
78
|
+
},
|
|
79
|
+
"keywords": [
|
|
80
|
+
"cdk"
|
|
81
|
+
],
|
|
82
|
+
"engines": {
|
|
83
|
+
"node": ">= 18.0.0"
|
|
84
|
+
},
|
|
85
|
+
"main": "lib/index.js",
|
|
86
|
+
"license": "Apache-2.0",
|
|
87
|
+
"publishConfig": {
|
|
88
|
+
"access": "public"
|
|
89
|
+
},
|
|
90
|
+
"version": "0.1.0",
|
|
91
|
+
"jest": {
|
|
92
|
+
"coverageProvider": "v8",
|
|
93
|
+
"snapshotSerializers": [
|
|
94
|
+
"<rootDir>/node_modules/@gammarers/jest-aws-cdk-asset-filename-renamer"
|
|
95
|
+
],
|
|
96
|
+
"testMatch": [
|
|
97
|
+
"<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)",
|
|
98
|
+
"<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)",
|
|
99
|
+
"<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)",
|
|
100
|
+
"<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"
|
|
101
|
+
],
|
|
102
|
+
"clearMocks": true,
|
|
103
|
+
"collectCoverage": true,
|
|
104
|
+
"coverageReporters": [
|
|
105
|
+
"json",
|
|
106
|
+
"lcov",
|
|
107
|
+
"clover",
|
|
108
|
+
"cobertura",
|
|
109
|
+
"text"
|
|
110
|
+
],
|
|
111
|
+
"coverageDirectory": "coverage",
|
|
112
|
+
"coveragePathIgnorePatterns": [
|
|
113
|
+
"/node_modules/"
|
|
114
|
+
],
|
|
115
|
+
"testPathIgnorePatterns": [
|
|
116
|
+
"/node_modules/"
|
|
117
|
+
],
|
|
118
|
+
"watchPathIgnorePatterns": [
|
|
119
|
+
"/node_modules/"
|
|
120
|
+
],
|
|
121
|
+
"reporters": [
|
|
122
|
+
"default",
|
|
123
|
+
[
|
|
124
|
+
"jest-junit",
|
|
125
|
+
{
|
|
126
|
+
"outputDirectory": "test-reports"
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
],
|
|
130
|
+
"transform": {
|
|
131
|
+
"^.+\\.[t]sx?$": [
|
|
132
|
+
"ts-jest",
|
|
133
|
+
{
|
|
134
|
+
"tsconfig": "tsconfig.dev.json"
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
"types": "lib/index.d.ts",
|
|
140
|
+
"stability": "stable",
|
|
141
|
+
"jsii": {
|
|
142
|
+
"outdir": "dist",
|
|
143
|
+
"targets": {},
|
|
144
|
+
"tsc": {
|
|
145
|
+
"outDir": "lib",
|
|
146
|
+
"rootDir": "src"
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\"."
|
|
150
|
+
}
|