@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.
@@ -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,2 @@
1
+ import { Context, SNSEvent } from 'aws-lambda';
2
+ export declare const handler: (event: SNSEvent, context: Context) => Promise<void>;
@@ -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
+ }