From 3a705b3ef172088396ab4ace0de8517b079ac8c0 Mon Sep 17 00:00:00 2001 From: Jordan Sinko Date: Mon, 5 Oct 2020 11:46:42 -0400 Subject: [PATCH] feat: adding example handlers --- .projenrc.js | 21 +- API.md | 158 +++++++- package.json | 31 +- src/{handler => approver}/index.ts | 0 src/index.ts | 122 +++++- src/requester/index.ts | 1 + test/__snapshots__/index.test.ts.snap | 331 +++++++++++++++- test/index.test.ts | 5 +- yarn.lock | 536 +++++++++++++++++++++++++- 9 files changed, 1178 insertions(+), 27 deletions(-) rename src/{handler => approver}/index.ts (100%) create mode 100644 src/requester/index.ts diff --git a/.projenrc.js b/.projenrc.js index 3611e4a..6e88908 100644 --- a/.projenrc.js +++ b/.projenrc.js @@ -12,7 +12,7 @@ class ContentFile extends FileBase { } const project = new AwsCdkConstructLibrary({ - cdkVersion: "1.63.0", + cdkVersion: "1.66.0", name: "@JordanSinko/the-slack-pipeline-approval", authorName: "Jordan Sinko", authorAddress: "jordan5sinko@gmail.com", @@ -20,7 +20,9 @@ const project = new AwsCdkConstructLibrary({ scripts: { format: "pretty-quick --staged", "compile:construct": "jsii --silence-warnings=reserved-word --no-fix-peer-dependencies && jsii-docgen", - "compile:handler": "esbuild src/handler/index.ts --outfile=lib/handler/index.js --platform=node --format=cjs", + "compile:handlers": "npm run compile:requester && npm run compile:approver", + "compile:requester": "esbuild src/requester/index.ts --outfile=lib/requester/index.js --platform=node --format=cjs", + "compile:approver": "esbuild src/approver/index.ts --outfile=lib/approver/index.js --platform=node --format=cjs", }, devDependencies: { esbuild: "^0.7.9", @@ -29,7 +31,16 @@ const project = new AwsCdkConstructLibrary({ "pretty-quick": "^3.0.2", "npm-run-all": "^4.1.5", }, - cdkDependencies: ["@aws-cdk/core"], + cdkDependencies: [ + "@aws-cdk/core", + "@aws-cdk/aws-codepipeline", + "@aws-cdk/aws-codepipeline-actions", + "@aws-cdk/aws-sns", + "@aws-cdk/aws-sns-subscriptions", + "@aws-cdk/aws-iam", + "@aws-cdk/aws-lambda", + "@aws-cdk/aws-apigatewayv2", + ], cdkTestDependencies: ["@aws-cdk/assert"], eslint: false, releaseWorkflow: true, @@ -38,12 +49,12 @@ const project = new AwsCdkConstructLibrary({ npmRegistry: "npm.pkg.github.com", }); -project.addScript("compile", "npm run compile:construct && npm run compile:handler"); +project.addScript("compile", "npm run compile:construct && npm run compile:handlers"); project.addFields({ jsii: { ...project.manifest.jsii, - excludeTypescript: ["src/handler"], + excludeTypescript: ["src/approver", "src/requester"], }, }); diff --git a/API.md b/API.md index 4020025..5c9d53a 100644 --- a/API.md +++ b/API.md @@ -4,11 +4,20 @@ Name|Description ----|----------- -[SlackPipelineApproval](#jordansinko-the-slack-pipeline-approval-slackpipelineapproval)|*No description* +[SlackApproval](#jordansinko-the-slack-pipeline-approval-slackapproval)|*No description* +[SlackApprovalAction](#jordansinko-the-slack-pipeline-approval-slackapprovalaction)|*No description* +**Structs** -## class SlackPipelineApproval +Name|Description +----|----------- +[SlackApprovalActionProps](#jordansinko-the-slack-pipeline-approval-slackapprovalactionprops)|*No description* +[SlackApprovalProps](#jordansinko-the-slack-pipeline-approval-slackapprovalprops)|*No description* + + + +## class SlackApproval @@ -21,12 +30,155 @@ __Extends__: [Construct](#aws-cdk-core-construct) ```ts -new SlackPipelineApproval(scope: Construct, id: string) +new SlackApproval(scope: Construct, id: string, props: SlackApprovalProps) ``` * **scope** ([Construct](#aws-cdk-core-construct)) *No description* * **id** (string) *No description* +* **props** ([SlackApprovalProps](#jordansinko-the-slack-pipeline-approval-slackapprovalprops)) *No description* + * **slackToken** (string) *No description* + + + +### Properties + + +Name | Type | Description +-----|------|------------- +**approverHandler** | [Function](#aws-cdk-aws-lambda-function) | +**props** | [SlackApprovalProps](#jordansinko-the-slack-pipeline-approval-slackapprovalprops) | +**topic** | [Topic](#aws-cdk-aws-sns-topic) | + +### Methods + + +#### addApprovalAction(id, props) + + + +```ts +addApprovalAction(id: string, props: SlackApprovalActionProps): SlackApprovalAction +``` + +* **id** (string) *No description* +* **props** ([SlackApprovalActionProps](#jordansinko-the-slack-pipeline-approval-slackapprovalactionprops)) *No description* + * **actionName** (string) The physical, human-readable name of the Action. + * **runOrder** (number) The runOrder property for this Action. __*Default*__: 1 + * **variablesNamespace** (string) The name of the namespace to use for variables emitted by this action. __*Default*__: a name will be generated, based on the stage and action names, if any of the action's variables were referenced - otherwise, no namespace will be set + * **role** ([IRole](#aws-cdk-aws-iam-irole)) The Role in which context's this Action will be executing in. __*Default*__: a new Role will be generated + * **additionalInformation** (string) Any additional information that you want to include in the notification email message. __*Optional*__ + * **externalEntityLink** (string) URL you want to provide to the reviewer as part of the approval request. __*Default*__: the approval request will not have an external link + * **notificationTopic** ([ITopic](#aws-cdk-aws-sns-itopic)) Optional SNS topic to send notifications to when an approval is pending. __*Optional*__ + * **notifyEmails** (Array) A list of email addresses to subscribe to notifications when this Action is pending approval. __*Optional*__ + * **slackChannel** (string) *No description* + * **slackIcon** (string) *No description* __*Optional*__ + * **slackUsername** (string) *No description* __*Optional*__ + +__Returns__: +* [SlackApprovalAction](#jordansinko-the-slack-pipeline-approval-slackapprovalaction) + + + +## class SlackApprovalAction + + + +__Implements__: [IAction](#aws-cdk-aws-codepipeline-iaction) +__Extends__: [ManualApprovalAction](#aws-cdk-aws-codepipeline-actions-manualapprovalaction) + +### Initializer + + + + +```ts +new SlackApprovalAction(approval: SlackApproval, id: string, props: SlackApprovalActionProps) +``` + +* **approval** ([SlackApproval](#jordansinko-the-slack-pipeline-approval-slackapproval)) *No description* +* **id** (string) *No description* +* **props** ([SlackApprovalActionProps](#jordansinko-the-slack-pipeline-approval-slackapprovalactionprops)) *No description* + * **actionName** (string) The physical, human-readable name of the Action. + * **runOrder** (number) The runOrder property for this Action. __*Default*__: 1 + * **variablesNamespace** (string) The name of the namespace to use for variables emitted by this action. __*Default*__: a name will be generated, based on the stage and action names, if any of the action's variables were referenced - otherwise, no namespace will be set + * **role** ([IRole](#aws-cdk-aws-iam-irole)) The Role in which context's this Action will be executing in. __*Default*__: a new Role will be generated + * **additionalInformation** (string) Any additional information that you want to include in the notification email message. __*Optional*__ + * **externalEntityLink** (string) URL you want to provide to the reviewer as part of the approval request. __*Default*__: the approval request will not have an external link + * **notificationTopic** ([ITopic](#aws-cdk-aws-sns-itopic)) Optional SNS topic to send notifications to when an approval is pending. __*Optional*__ + * **notifyEmails** (Array) A list of email addresses to subscribe to notifications when this Action is pending approval. __*Optional*__ + * **slackChannel** (string) *No description* + * **slackIcon** (string) *No description* __*Optional*__ + * **slackUsername** (string) *No description* __*Optional*__ + + + +### Properties + + +Name | Type | Description +-----|------|------------- +**approval** | [SlackApproval](#jordansinko-the-slack-pipeline-approval-slackapproval) | +**id** | string | +**slackProps** | [SlackApprovalActionProps](#jordansinko-the-slack-pipeline-approval-slackapprovalactionprops) | +**slackAdditionalInformation**? | string | __*Optional*__ + +### Methods + + +#### protected bound(_scope, stage, options) + +The method called when an Action is attached to a Pipeline. + +This method is guaranteed to be called only once for each Action instance. + +```ts +protected bound(_scope: Construct, stage: IStage, options: ActionBindOptions): ActionConfig +``` + +* **_scope** ([Construct](#aws-cdk-core-construct)) *No description* +* **stage** ([IStage](#aws-cdk-aws-codepipeline-istage)) *No description* +* **options** ([ActionBindOptions](#aws-cdk-aws-codepipeline-actionbindoptions)) *No description* + * **bucket** ([IBucket](#aws-cdk-aws-s3-ibucket)) *No description* + * **role** ([IRole](#aws-cdk-aws-iam-irole)) *No description* + +__Returns__: +* [ActionConfig](#aws-cdk-aws-codepipeline-actionconfig) + + + +## struct SlackApprovalActionProps + + + + + + +Name | Type | Description +-----|------|------------- +**actionName** | string | The physical, human-readable name of the Action. +**slackChannel** | string | +**additionalInformation**? | string | Any additional information that you want to include in the notification email message.
__*Optional*__ +**externalEntityLink**? | string | URL you want to provide to the reviewer as part of the approval request.
__*Default*__: the approval request will not have an external link +**notificationTopic**? | [ITopic](#aws-cdk-aws-sns-itopic) | Optional SNS topic to send notifications to when an approval is pending.
__*Optional*__ +**notifyEmails**? | Array | A list of email addresses to subscribe to notifications when this Action is pending approval.
__*Optional*__ +**role**? | [IRole](#aws-cdk-aws-iam-irole) | The Role in which context's this Action will be executing in.
__*Default*__: a new Role will be generated +**runOrder**? | number | The runOrder property for this Action.
__*Default*__: 1 +**slackIcon**? | string | __*Optional*__ +**slackUsername**? | string | __*Optional*__ +**variablesNamespace**? | string | The name of the namespace to use for variables emitted by this action.
__*Default*__: a name will be generated, based on the stage and action names, if any of the action's variables were referenced - otherwise, no namespace will be set + + + +## struct SlackApprovalProps + + + + + +Name | Type | Description +-----|------|------------- +**slackToken** | string | diff --git a/package.json b/package.json index 44e47ff..a53d4b4 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,10 @@ "projen:upgrade": "yarn upgrade -L projen && CI=\"\" yarn projen", "format": "pretty-quick --staged", "compile:construct": "jsii --silence-warnings=reserved-word --no-fix-peer-dependencies && jsii-docgen", - "compile:handler": "esbuild src/handler/index.ts --outfile=lib/handler/index.js --platform=node --format=cjs", - "compile": "npm run compile:construct && npm run compile:handler", + "compile:handlers": "npm run compile:requester && npm run compile:approver", + "compile:requester": "esbuild src/requester/index.ts --outfile=lib/requester/index.js --platform=node --format=cjs", + "compile:approver": "esbuild src/approver/index.ts --outfile=lib/approver/index.js --platform=node --format=cjs", + "compile": "npm run compile:construct && npm run compile:handlers", "watch": "jsii -w --silence-warnings=reserved-word --no-fix-peer-dependencies", "build": "yarn test && yarn compile && yarn run package", "package": "jsii-pacmak", @@ -32,7 +34,7 @@ "organization": false }, "devDependencies": { - "@aws-cdk/assert": "^1.63.0", + "@aws-cdk/assert": "^1.66.0", "@types/jest": "^26.0.7", "@types/node": "^10.17.0", "esbuild": "^0.7.9", @@ -52,13 +54,25 @@ "typescript": "^3.9.5" }, "peerDependencies": { - "@aws-cdk/aws-kinesis": "^1.63.0", - "@aws-cdk/core": "^1.63.0", + "@aws-cdk/aws-apigatewayv2": "^1.66.0", + "@aws-cdk/aws-codepipeline": "^1.66.0", + "@aws-cdk/aws-codepipeline-actions": "^1.66.0", + "@aws-cdk/aws-iam": "^1.66.0", + "@aws-cdk/aws-lambda": "^1.66.0", + "@aws-cdk/aws-sns": "^1.66.0", + "@aws-cdk/aws-sns-subscriptions": "^1.66.0", + "@aws-cdk/core": "^1.66.0", "constructs": "^3.0.4" }, "dependencies": { - "@aws-cdk/aws-kinesis": "^1.63.0", - "@aws-cdk/core": "^1.63.0" + "@aws-cdk/aws-apigatewayv2": "^1.66.0", + "@aws-cdk/aws-codepipeline": "^1.66.0", + "@aws-cdk/aws-codepipeline-actions": "^1.66.0", + "@aws-cdk/aws-iam": "^1.66.0", + "@aws-cdk/aws-lambda": "^1.66.0", + "@aws-cdk/aws-sns": "^1.66.0", + "@aws-cdk/aws-sns-subscriptions": "^1.66.0", + "@aws-cdk/core": "^1.66.0" }, "bundledDependencies": [], "keywords": [ @@ -153,7 +167,8 @@ "rootDir": "src" }, "excludeTypescript": [ - "src/handler" + "src/approver", + "src/requester" ] } } \ No newline at end of file diff --git a/src/handler/index.ts b/src/approver/index.ts similarity index 100% rename from src/handler/index.ts rename to src/approver/index.ts diff --git a/src/index.ts b/src/index.ts index 1b6f8bb..ad3c90b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,123 @@ -import { Construct } from "@aws-cdk/core"; +import { resolve } from "path"; -export class SlackPipelineApproval extends Construct { - constructor(scope: Construct, id: string) { +import { Stack, Construct } from "@aws-cdk/core"; +import { IStage, ActionBindOptions, ActionConfig } from "@aws-cdk/aws-codepipeline"; +import { ManualApprovalAction, ManualApprovalActionProps } from "@aws-cdk/aws-codepipeline-actions"; +import { Topic } from "@aws-cdk/aws-sns"; +import { Code, Function as AwsFunction, Runtime } from "@aws-cdk/aws-lambda"; +import { HttpApi, HttpMethod, LambdaProxyIntegration } from "@aws-cdk/aws-apigatewayv2"; +import { LambdaSubscription } from "@aws-cdk/aws-sns-subscriptions"; +import { PolicyStatement } from "@aws-cdk/aws-iam"; + +export interface SlackApprovalActionProps extends ManualApprovalActionProps { + readonly slackChannel: string; + readonly slackUsername?: string; + readonly slackIcon?: string; +} + +export class SlackApprovalAction extends ManualApprovalAction { + slackProps: SlackApprovalActionProps; + approval: SlackApproval; + id: string; + slackAdditionalInformation?: string; + + constructor(approval: SlackApproval, id: string, props: SlackApprovalActionProps) { + const { slackChannel, slackUsername, slackIcon, additionalInformation: _additionalInformation, ..._props } = props; + const additionalInformation = JSON.stringify({ + slackChannel, + slackUsername, + slackIcon, + userInformation: _additionalInformation, + }); + + super({ + ..._props, + additionalInformation, + }); + + this.slackProps = props; + this.id = id; + this.approval = approval; + this.slackAdditionalInformation = additionalInformation; + } + + protected bound(_scope: Construct, stage: IStage, options: ActionBindOptions): ActionConfig { + this.approval.topic.grantPublish(options.role); + this.approval.approverHandler.role?.addToPrincipalPolicy( + new PolicyStatement({ + actions: ["codepipeline:PutApprovalResult"], + resources: [`${stage.pipeline.pipelineArn}/${stage.stageName}/${this.slackProps.actionName}`], + }) + ); + + return { + configuration: undefinedIfAllValuesAreEmpty({ + NotificationArn: this.approval.topic.topicArn, + CustomData: this.slackAdditionalInformation, + ExternalEntityLink: this.slackProps.externalEntityLink, + }), + }; + } +} + +export interface SlackApprovalProps { + readonly slackToken: string; +} + +export class SlackApproval extends Construct { + public readonly props: SlackApprovalProps; + public readonly topic: Topic; + public readonly approverHandler: AwsFunction; + + constructor(scope: Construct, id: string, props: SlackApprovalProps) { super(scope, id); + + this.props = props; + + const stack = Stack.of(scope); + const topic = new Topic(scope, `Topic`, {}); + + this.topic = topic; + + const requester = new AwsFunction(scope, `Requester`, { + runtime: Runtime.NODEJS_12_X, + code: Code.fromAsset(resolve(__dirname, "requester"), {}), + handler: "index.handler", + environment: { + AWS_ACCOUNT_ID: stack.account, + SLACK_TOKEN: this.props.slackToken, + }, + }); + + topic.addSubscription(new LambdaSubscription(requester)); + + const api = new HttpApi(this, "Api", {}); + + const approver = new AwsFunction(this, "Approver", { + runtime: Runtime.NODEJS_12_X, + code: Code.fromAsset(resolve(__dirname, "approver"), {}), + handler: "index.handler", + environment: { + AWS_ACCOUNT_ID: stack.account, + SLACK_TOKEN: this.props.slackToken, + }, + }); + + this.approverHandler = approver; + + api.addRoutes({ + path: "/{proxy+}", + methods: [HttpMethod.ANY], + integration: new LambdaProxyIntegration({ handler: approver }), + }); } + + public addApprovalAction(id: string, props: SlackApprovalActionProps) { + const action = new SlackApprovalAction(this, id, { ...props }); + return action; + } +} + +function undefinedIfAllValuesAreEmpty(object: object): object | undefined { + return Object.values(object).some((v) => v !== undefined) ? object : undefined; } diff --git a/src/requester/index.ts b/src/requester/index.ts new file mode 100644 index 0000000..251bff9 --- /dev/null +++ b/src/requester/index.ts @@ -0,0 +1 @@ +export const handler = async () => `Hello, world!`; diff --git a/test/__snapshots__/index.test.ts.snap b/test/__snapshots__/index.test.ts.snap index c8fe9e1..f89ce7b 100644 --- a/test/__snapshots__/index.test.ts.snap +++ b/test/__snapshots__/index.test.ts.snap @@ -1,3 +1,332 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`Snapshot 1`] = `Object {}`; +exports[`Snapshot 1`] = ` +Object { + "Parameters": Object { + "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dArtifactHashEEC8ED0C": Object { + "Description": "Artifact hash for asset \\"9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348d\\"", + "Type": "String", + }, + "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3Bucket01FB5559": Object { + "Description": "S3 bucket for asset \\"9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348d\\"", + "Type": "String", + }, + "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3VersionKey4C30C2E2": Object { + "Description": "S3 key for asset version \\"9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348d\\"", + "Type": "String", + }, + }, + "Resources": Object { + "ApprovalApi7AD56316": Object { + "Properties": Object { + "Name": "Api", + "ProtocolType": "HTTP", + }, + "Type": "AWS::ApiGatewayV2::Api", + }, + "ApprovalApiANYproxy80D0C580": Object { + "Properties": Object { + "ApiId": Object { + "Ref": "ApprovalApi7AD56316", + }, + "RouteKey": "ANY /{proxy+}", + "Target": Object { + "Fn::Join": Array [ + "", + Array [ + "integrations/", + Object { + "Ref": "ApprovalApiANYproxyANYproxyIntegration9EB5C601", + }, + ], + ], + }, + }, + "Type": "AWS::ApiGatewayV2::Route", + }, + "ApprovalApiANYproxyANYproxyIntegration9EB5C601": Object { + "Properties": Object { + "ApiId": Object { + "Ref": "ApprovalApi7AD56316", + }, + "IntegrationType": "AWS_PROXY", + "IntegrationUri": Object { + "Fn::GetAtt": Array [ + "ApprovalApprover72D44F63", + "Arn", + ], + }, + "PayloadFormatVersion": "2.0", + }, + "Type": "AWS::ApiGatewayV2::Integration", + }, + "ApprovalApiANYproxytestingstackApprovalApiANYproxy59DA5EE7Permission2A619A51": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "ApprovalApprover72D44F63", + "Arn", + ], + }, + "Principal": "apigateway.amazonaws.com", + "SourceArn": Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":execute-api:", + Object { + "Ref": "AWS::Region", + }, + ":", + Object { + "Ref": "AWS::AccountId", + }, + ":", + Object { + "Ref": "ApprovalApi7AD56316", + }, + "/*/*/{proxy+}", + ], + ], + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "ApprovalApiDefaultStage1F3689E0": Object { + "Properties": Object { + "ApiId": Object { + "Ref": "ApprovalApi7AD56316", + }, + "AutoDeploy": true, + "StageName": "$default", + }, + "Type": "AWS::ApiGatewayV2::Stage", + }, + "ApprovalApprover72D44F63": Object { + "DependsOn": Array [ + "ApprovalApproverServiceRole747D061A", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3Bucket01FB5559", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3VersionKey4C30C2E2", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3VersionKey4C30C2E2", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "AWS_ACCOUNT_ID": Object { + "Ref": "AWS::AccountId", + }, + "SLACK_TOKEN": "xoxb-12345", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "ApprovalApproverServiceRole747D061A", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + }, + "Type": "AWS::Lambda::Function", + }, + "ApprovalApproverServiceRole747D061A": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "RequesterAllowInvoketestingstackTopic636EF16810BC6C79": Object { + "Properties": Object { + "Action": "lambda:InvokeFunction", + "FunctionName": Object { + "Fn::GetAtt": Array [ + "RequesterC5D85B6B", + "Arn", + ], + }, + "Principal": "sns.amazonaws.com", + "SourceArn": Object { + "Ref": "TopicBFC7AF6E", + }, + }, + "Type": "AWS::Lambda::Permission", + }, + "RequesterC5D85B6B": Object { + "DependsOn": Array [ + "RequesterServiceRole455136E7", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3Bucket01FB5559", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3VersionKey4C30C2E2", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters9df69b1c5244ca159360ab80f7e94d352de6fc13390ac375c21274ed8bed348dS3VersionKey4C30C2E2", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Environment": Object { + "Variables": Object { + "AWS_ACCOUNT_ID": Object { + "Ref": "AWS::AccountId", + }, + "SLACK_TOKEN": "xoxb-12345", + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "RequesterServiceRole455136E7", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + }, + "Type": "AWS::Lambda::Function", + }, + "RequesterServiceRole455136E7": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "RequesterTopic2A59E833": Object { + "Properties": Object { + "Endpoint": Object { + "Fn::GetAtt": Array [ + "RequesterC5D85B6B", + "Arn", + ], + }, + "Protocol": "lambda", + "TopicArn": Object { + "Ref": "TopicBFC7AF6E", + }, + }, + "Type": "AWS::SNS::Subscription", + }, + "TopicBFC7AF6E": Object { + "Type": "AWS::SNS::Topic", + }, + }, +} +`; diff --git a/test/index.test.ts b/test/index.test.ts index f81a7a6..eb51c84 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -1,13 +1,14 @@ import "@aws-cdk/assert/jest"; import { App, Stack } from "@aws-cdk/core"; -import { SlackPipelineApproval } from "../src"; +import { SlackApproval } from "../src"; test("Snapshot", () => { const app = new App(); const stack = new Stack(app, "testing-stack"); - new SlackPipelineApproval(stack, "Approval"); + const approval = new SlackApproval(stack, "Approval", { slackToken: "xoxb-12345" }); + approval.addApprovalAction("Approval", { actionName: "Approval", slackChannel: "1" }); expect(app.synth().getStackArtifact(stack.artifactId).template).toMatchSnapshot(); }); diff --git a/yarn.lock b/yarn.lock index 76cf641..1cd5557 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@aws-cdk/assert@^1.63.0": +"@aws-cdk/assert@^1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.66.0.tgz#3cfafbfbabf7e2a4f23008f939a67b78225b157c" integrity sha512-/BH8eCJr3Mn/XjurqhhbIskFTypPts0zzwtNnE+qhgJ8BaLl6b9OjKrVpeDNBcRWBpYsR7v7nYlzsI+Rat0JfA== @@ -22,6 +22,134 @@ "@aws-cdk/cx-api" "1.66.0" constructs "^3.0.4" +"@aws-cdk/aws-apigateway@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.66.0.tgz#5411ec8e400b5981cc113bdea1baf3b77e5cdecd" + integrity sha512-15RjBCj4G3XszjREE8DEtJfrTmTWlPvOvaeKB8N5cHbXZAklVS3DPLX8pjMd53W2rnuVVKsDexcxf61IxVpIIA== + dependencies: + "@aws-cdk/assets" "1.66.0" + "@aws-cdk/aws-certificatemanager" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/aws-s3-assets" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-apigatewayv2@^1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.66.0.tgz#f0a277fb4cdeee5bc307c8f8a3d7ea7e2e8c600d" + integrity sha512-Bcyb2SJ+YgyWes2qwrx/YmGv/WhZ9VmEkQDjdBLNWS2EwISYDtGlFossE6aDlaqUWF36R1BeUXYcR0i6is7kLA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-applicationautoscaling@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.66.0.tgz#baeb4097005f532c73073c328f50e8b95b8b33d0" + integrity sha512-TVlBOSr/eCAyShHmDzNI7EWg/wsAGZfS5nWNTQTvZxAbrMaB/gSaj9hTiSdsTTIG4LZWhpy5JIl7V+0shBJGPQ== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-common@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.66.0.tgz#b51ac8024e82db203951d84a9a780624f1be6f04" + integrity sha512-Ms5VcVatbCaS1yrQFlzSHXYHE+HFXzWfvzmihQ+SUPmu32B8y/TADzH4WIC/wktz3HKD6Dui8E2wSuFc4aALqg== + dependencies: + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling-hooktargets@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-hooktargets/-/aws-autoscaling-hooktargets-1.66.0.tgz#eea152a3630d823161ad8e1c5d7b14e20fcb45b0" + integrity sha512-pCLJ+qQ+UN38XiMHZDci1PwZ0Fr+jirb83RUd0f5UBBnf2nzFwEHnKmLoynW3okfsVx/Lf5rnjaeq/dnv2g55A== + dependencies: + "@aws-cdk/aws-autoscaling" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/aws-sns-subscriptions" "1.66.0" + "@aws-cdk/aws-sqs" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-autoscaling@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling/-/aws-autoscaling-1.66.0.tgz#d93007516eb71e46032592fbfa19c2d71858cf5b" + integrity sha512-rlJUhz8l5DwKVPiM1gDD63cuzgsMoU7goar+w4Frg9SZaqhnhCmeCHkwEOSW50eeSmeWnnBjOFO1CFj38ILNLw== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-elasticloadbalancing" "1.66.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-batch@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-batch/-/aws-batch-1.66.0.tgz#3956ed1826d43d4acafe19f9416e4e2bfb49b3b1" + integrity sha512-nzuerv8ao61YPHG8vrwDDq2a8gV9njMTOu5wZHKdq0bGM6x5ZYQSh8B7mnHjxcCakVLac2f7AWzwOQ3STiAzkQ== + dependencies: + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-ecr" "1.66.0" + "@aws-cdk/aws-ecs" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-certificatemanager@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.66.0.tgz#35318d9a61b8bbe8dd38c2b6619c7e97e92dd08d" + integrity sha512-tJZpiijlCDUkBk5HRlyRd1+DKzXLO5/n+0EXzcWeE8PcDgX/Z27ZehqWNQ0qY80tLcFEBuHPTZ07USFCDXNKGQ== + dependencies: + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-route53" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudformation@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.66.0.tgz#300dbe74a209b6e716e930f1ffbaf099482846c7" + integrity sha512-SZhCE61m9bLjzhcYG+Y0MOZZhu7gndD5+XTu9TnZ/okhh3hNpqD/yhb4CpfPVY2ZIPUokLwUT+Qf/yszoHlXAw== + dependencies: + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cloudfront@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.66.0.tgz#00f1f419c3fbfeda2bc7426bdc294b80a09f1aa9" + integrity sha512-ohc0FhBFT/2BB3qF7a/JZEmPhiV6SEIcI2Lx6E4K9GNJRGqgiU+lhZy67l49WED7MJ8bXo3OCKRRxRo0UMjUaw== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + "@aws-cdk/aws-cloudwatch@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.66.0.tgz#3551ab0edf6827816f9c73a0c41dc49cf8223740" @@ -31,6 +159,243 @@ "@aws-cdk/core" "1.66.0" constructs "^3.0.4" +"@aws-cdk/aws-codebuild@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codebuild/-/aws-codebuild-1.66.0.tgz#985a604822555e3b5e32f21d4d30309bed0f81ed" + integrity sha512-LfNM4H6ei8oJ+nmuuvP4MTi7njSgV/yjDwyU0jCaeUQIpjlApnL/Bm6+aezyZLQNa3aCBio5Xe1URcQgokqYVw== + dependencies: + "@aws-cdk/assets" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-codecommit" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-ecr" "1.66.0" + "@aws-cdk/aws-ecr-assets" "1.66.0" + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/aws-s3-assets" "1.66.0" + "@aws-cdk/aws-secretsmanager" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/region-info" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codecommit@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codecommit/-/aws-codecommit-1.66.0.tgz#bcdb7fe765eda15c353dcdb42f3804169fca20ef" + integrity sha512-LgmB5UCI5IOIDrj4Dk32nTOlkfcXrY6O1tR50QPgxX9VmBclP4jdqrGUGwSy7OWXNVO8YCA52IVVPwq2WPiryw== + dependencies: + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codedeploy@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codedeploy/-/aws-codedeploy-1.66.0.tgz#324f8767bee592096fc413002d9704fbaeb101e8" + integrity sha512-mqr9pRXx4dD5HXk63anqseC51CTp140K2/FxGVBuK8jgE5iYgfk32+LvJMuzJTkzsktpRVOikedDXJB60hanNA== + dependencies: + "@aws-cdk/aws-autoscaling" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-elasticloadbalancing" "1.66.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codeguruprofiler@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.66.0.tgz#40a562bac55c5586cf2fd7e282526b9593175956" + integrity sha512-C94xKsrhmeyjZ6Gs4z1mvDR9ygwDMqa9X0X8NEvfqfHhluX6yuDju7RT5teZv29/8qe2z5X6scvmUaiH+Y5OUg== + dependencies: + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-codepipeline-actions@^1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codepipeline-actions/-/aws-codepipeline-actions-1.66.0.tgz#e2a7f2ba467045a456471bf5e7e6622dde8d3cbc" + integrity sha512-HPhs0sDKQpYMGNASof6Sc7lUCR9HoY2RUNhb7QqGtTkxVxf7fkOGXWE64QNugpHiuISF2pYOpHqyAFxfG9d9GQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.66.0" + "@aws-cdk/aws-codebuild" "1.66.0" + "@aws-cdk/aws-codecommit" "1.66.0" + "@aws-cdk/aws-codedeploy" "1.66.0" + "@aws-cdk/aws-codepipeline" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-ecr" "1.66.0" + "@aws-cdk/aws-ecs" "1.66.0" + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-events-targets" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/aws-servicecatalog" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/aws-sns-subscriptions" "1.66.0" + "@aws-cdk/aws-stepfunctions" "1.66.0" + "@aws-cdk/core" "1.66.0" + case "1.6.3" + constructs "^3.0.4" + +"@aws-cdk/aws-codepipeline@1.66.0", "@aws-cdk/aws-codepipeline@^1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codepipeline/-/aws-codepipeline-1.66.0.tgz#6b62af2a2785333d4eea47d901ae1e8381887416" + integrity sha512-OR86pRaO2xExo0hcqCGLt0854LSCxPlNVTclZ8rcbbJFiSgLlLD2r/q0eyNcGe6ZVLoZPV2oHytNjxhFfE1BwQ== + dependencies: + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-cognito@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.66.0.tgz#7dc1bf0f9d593472798be099a0613474e1349dfb" + integrity sha512-QF+eo7n3huqS8/Tiwv1hQmM27cKYLOAzhWzFa66hLJWym6Wg6qiVFLVlK8T1YaMASBmRzUx+1GBKJIfS7249+w== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/custom-resources" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ec2@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.66.0.tgz#a9ce9fb7e26b6ea6ee2e0117007a609117249a5e" + integrity sha512-12y2E6rO1rmpG2Y6YtXT6r20prg3s4TbXYxKYz2tsBkjVwKv8D8/EhTUXXanwEAtdTMqFoBH0OkaD1y6rhceyA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/aws-s3-assets" "1.66.0" + "@aws-cdk/aws-ssm" "1.66.0" + "@aws-cdk/cloud-assembly-schema" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + "@aws-cdk/region-info" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ecr-assets@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.66.0.tgz#bded5e92e6ac70cf51aef87a8d756eff86feb78f" + integrity sha512-/Wb4ylwezqBcbq4yyc/R+UQI4qnbWZpGsn413G9T0Q/rZ5TRpgnmIUmSC9AIagdlhMEZIkB0bCwBDQxAEvkZPg== + dependencies: + "@aws-cdk/assets" "1.66.0" + "@aws-cdk/aws-ecr" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + constructs "^3.0.4" + minimatch "^3.0.4" + +"@aws-cdk/aws-ecr@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.66.0.tgz#fca65f2f74b9528d67bc60625928b13d80aad548" + integrity sha512-DbkOZpAJ2wPBADu4fYdO32uABRad/e6O1qxtRwwHVQlvKfg3qRgU7k+cnlj8ohV726QPY5amKfEjSPDNjmGL0g== + dependencies: + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/custom-resources" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ecs@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecs/-/aws-ecs-1.66.0.tgz#b4419094a45523f188259733a43114ed093e1262" + integrity sha512-uRozIgHyB7pgiqULRKyYe9i/BHKOaDqBZtMmlGm8LwgHBt+EpO8o9mYIqjvsQp09sfu5ip+n3QsQK1Q9yRc7FQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.66.0" + "@aws-cdk/aws-autoscaling" "1.66.0" + "@aws-cdk/aws-autoscaling-hooktargets" "1.66.0" + "@aws-cdk/aws-certificatemanager" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-ecr" "1.66.0" + "@aws-cdk/aws-ecr-assets" "1.66.0" + "@aws-cdk/aws-elasticloadbalancing" "1.66.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/aws-route53" "1.66.0" + "@aws-cdk/aws-route53-targets" "1.66.0" + "@aws-cdk/aws-secretsmanager" "1.66.0" + "@aws-cdk/aws-servicediscovery" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/aws-sqs" "1.66.0" + "@aws-cdk/aws-ssm" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-efs@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.66.0.tgz#5a1263f754882b0ea627aa5f8b33cd26d2c97b43" + integrity sha512-Yx+8mKJRy/3JUa7sM5i0G0/l0N5W/RzWHpkY4+Lh71iG0mKHgbQaBAr9RBZ2bMouAIdqN37dAc+Wd8wE6PjRjg== + dependencies: + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/cloud-assembly-schema" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-elasticloadbalancing@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.66.0.tgz#305728ba801af3ab948ce340a56ccce87a342696" + integrity sha512-WNMAUpx+vgStqxviDNDIJw7cTMxar6XSdTq5pKlk5VyQMsWTDM3YhlpmHOxUQhfU2kVPHyFVDSsbbgHT02AzrA== + dependencies: + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-elasticloadbalancingv2@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.66.0.tgz#dcf1c4a935c5c54f8725bb3f602af3276d51280d" + integrity sha512-Ognxbp4CvnuZdq2fSAnBtWFKXTedlvLluZbiFUzzhKNOQUwJXg1sKVgP7Ssa+oAIywbB7D4ZNHcJ2FZgQxRZSA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/region-info" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-events-targets@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events-targets/-/aws-events-targets-1.66.0.tgz#1d23f8bd2d40d9aa0ad75c94a431d08c0a8e3dbd" + integrity sha512-GMD1YOnfWYxRAqDJGWSqmlERwn8VdTT3/lEwrg+JsRlxptgXHzlRlK/kH58rQ/1iQGAoaqcEElujGDfz1TBFtw== + dependencies: + "@aws-cdk/aws-batch" "1.66.0" + "@aws-cdk/aws-codebuild" "1.66.0" + "@aws-cdk/aws-codepipeline" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-ecs" "1.66.0" + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kinesis" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/aws-sns-subscriptions" "1.66.0" + "@aws-cdk/aws-sqs" "1.66.0" + "@aws-cdk/aws-stepfunctions" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + "@aws-cdk/aws-events@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.66.0.tgz#b0ec3f7a39e3414141a76a00031a9538a1970406" @@ -40,7 +405,7 @@ "@aws-cdk/core" "1.66.0" constructs "^3.0.4" -"@aws-cdk/aws-iam@1.66.0": +"@aws-cdk/aws-iam@1.66.0", "@aws-cdk/aws-iam@^1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.66.0.tgz#632a949d4ae2500522b8f99dfa4ac12bdd63dbba" integrity sha512-rWUQVDgCQ31btE9LnsFnNHkUmZmRBF5COOimX2bItXxNQF2lTSKxThP71E0IGCF0Rl3FkjXLo0yoXnIQGJr08Q== @@ -49,7 +414,7 @@ "@aws-cdk/region-info" "1.66.0" constructs "^3.0.4" -"@aws-cdk/aws-kinesis@^1.63.0": +"@aws-cdk/aws-kinesis@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kinesis/-/aws-kinesis-1.66.0.tgz#3e529267b10dda907f0efc368b19d59641196657" integrity sha512-N+MAU+RU0lzt9O4Y8nt1vDtTJJ+vCXNkpz0dsnTb1S4mkeuXAyO8l7+izjBAsPRRmLedVSUwpFsc/58zF3UXcg== @@ -69,6 +434,26 @@ "@aws-cdk/core" "1.66.0" constructs "^3.0.4" +"@aws-cdk/aws-lambda@1.66.0", "@aws-cdk/aws-lambda@^1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.66.0.tgz#a38f8d4ae7087a8d1d0b9676bd2531ba819f236a" + integrity sha512-aw1LnCBHDkDSWgZyVyoeDoSSUQvbhHFKvvxEKrDMQ10Iy39vuUXz4xSAK/XaqOYCiDH7W1ubwEK9iKiMHYbPtA== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.66.0" + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-codeguruprofiler" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-efs" "1.66.0" + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/aws-s3-assets" "1.66.0" + "@aws-cdk/aws-sqs" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/cx-api" "1.66.0" + constructs "^3.0.4" + "@aws-cdk/aws-logs@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.66.0.tgz#0c5564d21ed7583e31c249944a0f4951d3e413ef" @@ -80,6 +465,35 @@ "@aws-cdk/core" "1.66.0" constructs "^3.0.4" +"@aws-cdk/aws-route53-targets@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.66.0.tgz#757c908611eb76f28bb49ab3d13869b81b134dc4" + integrity sha512-Dy9jOgTrOmaFzBy8ODGdPHlbt9TCC4mE/we0EK74Z1t47N0qZFkEXDJdFxNFYbr6liB1mQAS+3vBz1FfiF51ug== + dependencies: + "@aws-cdk/aws-apigateway" "1.66.0" + "@aws-cdk/aws-cloudfront" "1.66.0" + "@aws-cdk/aws-cognito" "1.66.0" + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-elasticloadbalancing" "1.66.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-route53" "1.66.0" + "@aws-cdk/aws-s3" "1.66.0" + "@aws-cdk/core" "1.66.0" + "@aws-cdk/region-info" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-route53@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.66.0.tgz#fe032be2e6c2574062217b59ab715210f47fb2e3" + integrity sha512-S5wkT/GD7FKhwfh6AwbAmTAeXCw/06OWXjTkW4a6OA4uN/9sJsDIekZRVI8uYp9gjS08IzD3PkttQywtLJr68w== + dependencies: + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/cloud-assembly-schema" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + "@aws-cdk/aws-s3-assets@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.66.0.tgz#50781fff17c142d7f34b04566d85e31122c2843b" @@ -104,6 +518,105 @@ "@aws-cdk/core" "1.66.0" constructs "^3.0.4" +"@aws-cdk/aws-sam@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sam/-/aws-sam-1.66.0.tgz#9e2bd815c1de8f7980ec7ec31006b5231dd2dcde" + integrity sha512-FI5X7E9sWQZ+ApCKuczBf093LNMnGBjtlMAMy2DdKfobG7TQ2y2oxkItdsINwRmoEldccyROzR9fvN+4sCQeaQ== + dependencies: + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-secretsmanager@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-secretsmanager/-/aws-secretsmanager-1.66.0.tgz#ef683dc8566131236868989a1da0b120017fdb3c" + integrity sha512-mRo4iMN/eqP/Bc63HdBH3n3tsAZ553cdadfmp8ckyYGsqcg8gnRyIuuE75GkqbnXxyQcgLf5aIWTC5+p6RfuXA== + dependencies: + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-sam" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-servicecatalog@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicecatalog/-/aws-servicecatalog-1.66.0.tgz#33e8ab2c1a78919872a952288c2c9bcc5eab6e9d" + integrity sha512-yF8G14s17159reEFpmNWm0pXo6LcjtKrfMlG3XXxlvuCALdsvHw/4qEUd1vRG62+zna1Ugz3kJeicWHqgbXe2Q== + dependencies: + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-servicediscovery@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-servicediscovery/-/aws-servicediscovery-1.66.0.tgz#a597215f4e6fda960ee05c1610e9cb7f8da0e642" + integrity sha512-dJLQm5xmfe4Xc9koQlG6feYiIRqOC5tbgs9sAHWIP9TB30q7PZVviguQEcuiXESlb/CTtQth4LjK8qkHU55Xqw== + dependencies: + "@aws-cdk/aws-ec2" "1.66.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.66.0" + "@aws-cdk/aws-route53" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns-subscriptions@1.66.0", "@aws-cdk/aws-sns-subscriptions@^1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns-subscriptions/-/aws-sns-subscriptions-1.66.0.tgz#2373813a11f9e95f5eacd4159a2fe7b0155dd494" + integrity sha512-Z2VVRgBegTgQuF5s9xu36Bb5B22V8CIOMIWx/9MlQzdYrUfO47eutkV5OFI2DZQ9nA5ug8eaTkTHBBRtE2avkg== + dependencies: + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/aws-sqs" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sns@1.66.0", "@aws-cdk/aws-sns@^1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.66.0.tgz#b5e91c9951488ddcde4b96c795ceb781746a8bfb" + integrity sha512-nmB4mjSe7EkWZk+SVg4KrZURplqQI1yc5D8cU2CUF0SDlLtoTb36Y/5GjucinIc9ayD/15HopW8DlPLAafHHrw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/aws-sqs" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-sqs@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.66.0.tgz#0dfc21ddaea1dcec09301c04a88e23b37509d4b2" + integrity sha512-glRdZLcKpP+C+6pyiotWA1PAva1Yra0fYrsjO+g/BVzxB4q6WjH5X+kwb7OzRTKs88an8U9YpFwRMxijY2Itxg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-ssm@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.66.0.tgz#b22550279920a2a4b2e98bdfdcf10cf67aed11ed" + integrity sha512-5XNuZF46MjsxAl6rz3jwq5GIaO0QwrSYdKNCSnoL/q5LBjqM25kyD0DpSorwlxkPVMLwUllfYIL8jnO/jWFb+Q== + dependencies: + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-kms" "1.66.0" + "@aws-cdk/cloud-assembly-schema" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + +"@aws-cdk/aws-stepfunctions@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-stepfunctions/-/aws-stepfunctions-1.66.0.tgz#9618b85b94226a8b4424a979d0a19831fc859162" + integrity sha512-db5fYiGLiUbaB/+K7+46u3MiOyOWOXbKOp8YEI46QKCH/xotCVhPYoW9JPVoSIPVCWVchlChMsyrKbTxy8fv4g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.66.0" + "@aws-cdk/aws-events" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + "@aws-cdk/cfnspec@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.66.0.tgz#ed400b2fbcafcaf8e93ba504b9c42fce0824608d" @@ -131,7 +644,7 @@ string-width "^4.2.0" table "^6.0.3" -"@aws-cdk/core@1.66.0", "@aws-cdk/core@^1.63.0": +"@aws-cdk/core@1.66.0", "@aws-cdk/core@^1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.66.0.tgz#9a177622f3cd1bdd7f58a3dd4f5dc87b43d534b6" integrity sha512-sGM/Uz4NrH7RaT88P/YJI039fru1rpZPAmtuZ3+x+ciGjCAPwRYdG99xqsaE8OLXjyDL1QokCeeKVs7oRkTVtA== @@ -143,6 +656,19 @@ fs-extra "^9.0.1" minimatch "^3.0.4" +"@aws-cdk/custom-resources@1.66.0": + version "1.66.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.66.0.tgz#8e229c9c6d21f75f191e0e123c47dd20aea78b97" + integrity sha512-7z5VMRruiLAiCowHPLbRge3D+uLJW3Uu8DAAYSF/AYI0yCOIVMVhSRwQwe6GdtAFPjJMJr6vnd2kHX59CGBoHg== + dependencies: + "@aws-cdk/aws-cloudformation" "1.66.0" + "@aws-cdk/aws-iam" "1.66.0" + "@aws-cdk/aws-lambda" "1.66.0" + "@aws-cdk/aws-logs" "1.66.0" + "@aws-cdk/aws-sns" "1.66.0" + "@aws-cdk/core" "1.66.0" + constructs "^3.0.4" + "@aws-cdk/cx-api@1.66.0": version "1.66.0" resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.66.0.tgz#b2327641b407901ecc9cd893c29599d6c27e6770" @@ -1192,7 +1718,7 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -case@^1.6.3: +case@1.6.3, case@^1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==