token-injectable-docker-builder 1.0.11 → 1.1.1
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 +30 -22
- package/API.md +32 -24
- package/README.md +50 -62
- package/lib/index.d.ts +15 -19
- package/lib/index.js +62 -47
- package/package.json +4 -2
package/.jsii
CHANGED
|
@@ -3898,7 +3898,7 @@
|
|
|
3898
3898
|
},
|
|
3899
3899
|
"name": "token-injectable-docker-builder",
|
|
3900
3900
|
"readme": {
|
|
3901
|
-
"markdown": "# TokenInjectableDockerBuilder\n\nThe `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.\n\n## Why?\n\nAWS CDK already provides mechanisms for creating deployable assets using Docker, such as [DockerImageAsset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr_assets.DockerImageAsset.html) and [DockerImageCode](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DockerImageCode.html), but these Constructs are limited because they cannot accept CDK tokens as build-args.
|
|
3901
|
+
"markdown": "# TokenInjectableDockerBuilder\n\nThe `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.\n\n---\n\n## Why?\n\nAWS CDK already provides mechanisms for creating deployable assets using Docker, such as [DockerImageAsset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr_assets.DockerImageAsset.html) and [DockerImageCode](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DockerImageCode.html), but these Constructs are limited because they cannot accept CDK tokens as build-args. The `TokenInjectableDockerBuilder` allows injecting CDK tokens as build-time arguments into Docker-based assets, enabling more dynamic dependency relationships.\n\nFor example, a Next.js frontend Docker image may require an API Gateway URL. With this construct, you can deploy the API Gateway first, then pass its URL as a build-time argument to the Next.js Docker image.\n\n---\n\n## Features\n\n- Automatically builds and pushes Docker images to ECR.\n- Supports custom build arguments for Docker builds, including CDK tokens resolved at deployment time.\n- Retrieves Docker images for use in ECS or Lambda.\n\n---\n\n## Installation\n\n### For NPM\n\nInstall the construct using NPM:\n\n```bash\nnpm install token-injectable-docker-builder\n```\n\n### For Python\n\nInstall the construct using pip:\n\n```bash\npip install token-injectable-docker-builder\n```\n\n---\n\n## Constructor\n\n### `TokenInjectableDockerBuilder`\n\n#### Parameters\n\n- **`scope`**: The construct's parent scope.\n- **`id`**: The construct ID.\n- **`props`**: Configuration properties.\n\n#### Properties in `TokenInjectableDockerBuilderProps`\n\n| Property | Type | Required | Description |\n|------------------------|--------------------|----------|-------------------------------------------------------------------------------------------------------|\n| `path` | `string` | Yes | The file path to the Dockerfile or source code directory. |\n| `buildArgs` | `{ [key: string]: string }` | No | Build arguments to pass to the Docker build process. |\n| `dockerLoginSecretArn` | `string` | No | ARN of an AWS Secrets Manager secret for Docker credentials. Skips login if not provided. |\n\n---\n\n## Usage Examples\n\n### TypeScript/NPM Example\n\nHere is how to use `TokenInjectableDockerBuilder` in an AWS CDK project with TypeScript:\n\n```typescript\nimport * as cdk from 'aws-cdk-lib';\nimport { TokenInjectableDockerBuilder } from 'token-injectable-docker-builder';\nimport * as ecs from 'aws-cdk-lib/aws-ecs';\nimport * as lambda from 'aws-cdk-lib/aws-lambda';\n\nexport class MyStack extends cdk.Stack {\n constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {\n super(scope, id, props);\n\n const dockerBuilder = new TokenInjectableDockerBuilder(this, 'MyDockerBuilder', {\n path: './docker',\n buildArgs: {\n TOKEN: 'my-secret-token',\n ENV: 'production',\n },\n dockerLoginSecretArn: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret',\n });\n\n // Use in ECS\n new ecs.FargateTaskDefinition(this, 'TaskDefinition', {\n containerImage: dockerBuilder.containerImage,\n });\n\n // Use in Lambda\n new lambda.Function(this, 'DockerLambdaFunction', {\n runtime: lambda.Runtime.FROM_IMAGE,\n code: dockerBuilder.dockerImageCode,\n handler: lambda.Handler.FROM_IMAGE,\n });\n }\n}\n```\n\n---\n\n### Python Example\n\nHere is how to use `TokenInjectableDockerBuilder` in an AWS CDK project with Python:\n\n```python\nfrom aws_cdk import core as cdk\nfrom token_injectable_docker_builder import TokenInjectableDockerBuilder\nfrom aws_cdk import aws_ecs as ecs\nfrom aws_cdk import aws_lambda as lambda_\n\nclass MyStack(cdk.Stack):\n\n def __init__(self, scope: cdk.App, id: str, **kwargs):\n super().__init__(scope, id, **kwargs)\n\n docker_builder = TokenInjectableDockerBuilder(self, \"MyDockerBuilder\",\n path=\"./docker\",\n build_args={\n \"TOKEN\": \"my-secret-token\",\n \"ENV\": \"production\"\n },\n docker_login_secret_arn=\"arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret\"\n )\n\n # Use in ECS\n ecs.FargateTaskDefinition(self, \"TaskDefinition\",\n container_image=docker_builder.container_image\n )\n\n # Use in Lambda\n lambda_.Function(self, \"DockerLambdaFunction\",\n runtime=lambda_.Runtime.FROM_IMAGE,\n code=docker_builder.docker_image_code,\n handler=lambda_.Handler.FROM_IMAGE\n )\n```\n\n---\n\n## How It Works\n\n1. **Docker Source**: Packages the source code or Dockerfile specified in the `path` property as an S3 asset.\n2. **CodeBuild Project**:\n - Uses the packaged asset and `buildArgs` to build the Docker image.\n - Pushes the image to an ECR repository.\n3. **Custom Resource**:\n - Triggers the build process using a Lambda function (`onEvent`).\n - Monitors the build status using another Lambda function (`isComplete`).\n4. **Outputs**:\n - `.containerImage`: Returns the Docker image for ECS.\n - `.dockerImageCode`: Returns the Docker image code for Lambda.\n\n---\n\n## IAM Permissions\n\nThe construct automatically grants permissions for:\n- CodeBuild to pull and push images to ECR.\n- Lambda to monitor build status and retrieve logs.\n- Encryption via a custom KMS key.\n\n---\n\n## Notes\n\n- **Build Arguments**: Pass custom arguments via `buildArgs` as `--build-arg` flags.\n- **ECR Repository**: Automatically creates an ECR repository with lifecycle rules.\n- **Custom Resources**: Manages lifecycle events for builds using custom Lambda handlers.\n\n---\n\n## Troubleshooting\n\n1. **Build Errors**: Check CodeBuild logs in CloudWatch.\n2. **Lambda Errors**: Check `onEvent` and `isComplete` Lambda logs in CloudWatch.\n3. **Permissions**: Ensure IAM roles have the required permissions for CodeBuild, ECR, and Secrets Manager.\n\n---\n\n## Support\n\nOpen an issue on [GitHub](https://github.com/AlexTech314/TokenInjectableDockerBuilder).\n\n---\n\n## Reference Links\n[](https://constructs.dev/packages/token-injectable-docker-builder)\n"
|
|
3902
3902
|
},
|
|
3903
3903
|
"repository": {
|
|
3904
3904
|
"type": "git",
|
|
@@ -3919,43 +3919,32 @@
|
|
|
3919
3919
|
"assembly": "token-injectable-docker-builder",
|
|
3920
3920
|
"base": "constructs.Construct",
|
|
3921
3921
|
"docs": {
|
|
3922
|
-
"example": "const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {\n path: './docker',\n buildArgs: {\n TOKEN: 'my-secret-token',\n ENV: 'production'\n },\n});\n\nconst containerImage = dockerBuilder.getContainerImage();",
|
|
3923
3922
|
"stability": "stable",
|
|
3924
3923
|
"summary": "A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources."
|
|
3925
3924
|
},
|
|
3926
3925
|
"fqn": "token-injectable-docker-builder.TokenInjectableDockerBuilder",
|
|
3927
3926
|
"initializer": {
|
|
3928
3927
|
"docs": {
|
|
3929
|
-
"stability": "stable"
|
|
3930
|
-
"summary": "Creates a new `TokenInjectableDockerBuilder` instance."
|
|
3928
|
+
"stability": "stable"
|
|
3931
3929
|
},
|
|
3932
3930
|
"locationInModule": {
|
|
3933
3931
|
"filename": "src/index.ts",
|
|
3934
|
-
"line":
|
|
3932
|
+
"line": 58
|
|
3935
3933
|
},
|
|
3936
3934
|
"parameters": [
|
|
3937
3935
|
{
|
|
3938
|
-
"docs": {
|
|
3939
|
-
"summary": "The parent construct/stack."
|
|
3940
|
-
},
|
|
3941
3936
|
"name": "scope",
|
|
3942
3937
|
"type": {
|
|
3943
3938
|
"fqn": "constructs.Construct"
|
|
3944
3939
|
}
|
|
3945
3940
|
},
|
|
3946
3941
|
{
|
|
3947
|
-
"docs": {
|
|
3948
|
-
"summary": "The unique ID of the construct."
|
|
3949
|
-
},
|
|
3950
3942
|
"name": "id",
|
|
3951
3943
|
"type": {
|
|
3952
3944
|
"primitive": "string"
|
|
3953
3945
|
}
|
|
3954
3946
|
},
|
|
3955
3947
|
{
|
|
3956
|
-
"docs": {
|
|
3957
|
-
"summary": "Configuration properties for the construct."
|
|
3958
|
-
},
|
|
3959
3948
|
"name": "props",
|
|
3960
3949
|
"type": {
|
|
3961
3950
|
"fqn": "token-injectable-docker-builder.TokenInjectableDockerBuilderProps"
|
|
@@ -3966,7 +3955,7 @@
|
|
|
3966
3955
|
"kind": "class",
|
|
3967
3956
|
"locationInModule": {
|
|
3968
3957
|
"filename": "src/index.ts",
|
|
3969
|
-
"line":
|
|
3958
|
+
"line": 53
|
|
3970
3959
|
},
|
|
3971
3960
|
"name": "TokenInjectableDockerBuilder",
|
|
3972
3961
|
"properties": [
|
|
@@ -3977,7 +3966,7 @@
|
|
|
3977
3966
|
"immutable": true,
|
|
3978
3967
|
"locationInModule": {
|
|
3979
3968
|
"filename": "src/index.ts",
|
|
3980
|
-
"line":
|
|
3969
|
+
"line": 55
|
|
3981
3970
|
},
|
|
3982
3971
|
"name": "containerImage",
|
|
3983
3972
|
"type": {
|
|
@@ -3991,7 +3980,7 @@
|
|
|
3991
3980
|
"immutable": true,
|
|
3992
3981
|
"locationInModule": {
|
|
3993
3982
|
"filename": "src/index.ts",
|
|
3994
|
-
"line":
|
|
3983
|
+
"line": 56
|
|
3995
3984
|
},
|
|
3996
3985
|
"name": "dockerImageCode",
|
|
3997
3986
|
"type": {
|
|
@@ -4012,7 +4001,7 @@
|
|
|
4012
4001
|
"kind": "interface",
|
|
4013
4002
|
"locationInModule": {
|
|
4014
4003
|
"filename": "src/index.ts",
|
|
4015
|
-
"line":
|
|
4004
|
+
"line": 17
|
|
4016
4005
|
},
|
|
4017
4006
|
"name": "TokenInjectableDockerBuilderProps",
|
|
4018
4007
|
"properties": [
|
|
@@ -4025,7 +4014,7 @@
|
|
|
4025
4014
|
"immutable": true,
|
|
4026
4015
|
"locationInModule": {
|
|
4027
4016
|
"filename": "src/index.ts",
|
|
4028
|
-
"line":
|
|
4017
|
+
"line": 21
|
|
4029
4018
|
},
|
|
4030
4019
|
"name": "path",
|
|
4031
4020
|
"type": {
|
|
@@ -4043,7 +4032,7 @@
|
|
|
4043
4032
|
"immutable": true,
|
|
4044
4033
|
"locationInModule": {
|
|
4045
4034
|
"filename": "src/index.ts",
|
|
4046
|
-
"line":
|
|
4035
|
+
"line": 32
|
|
4047
4036
|
},
|
|
4048
4037
|
"name": "buildArgs",
|
|
4049
4038
|
"optional": true,
|
|
@@ -4055,11 +4044,30 @@
|
|
|
4055
4044
|
"kind": "map"
|
|
4056
4045
|
}
|
|
4057
4046
|
}
|
|
4047
|
+
},
|
|
4048
|
+
{
|
|
4049
|
+
"abstract": true,
|
|
4050
|
+
"docs": {
|
|
4051
|
+
"example": "'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret'",
|
|
4052
|
+
"remarks": "This secret should store a JSON object with the following structure:\n```json\n{\n \"username\": \"my-docker-username\",\n \"password\": \"my-docker-password\"\n}\n```\nIf not provided, the construct will skip Docker login during the build process.",
|
|
4053
|
+
"stability": "stable",
|
|
4054
|
+
"summary": "The ARN of the AWS Secrets Manager secret containing Docker login credentials."
|
|
4055
|
+
},
|
|
4056
|
+
"immutable": true,
|
|
4057
|
+
"locationInModule": {
|
|
4058
|
+
"filename": "src/index.ts",
|
|
4059
|
+
"line": 47
|
|
4060
|
+
},
|
|
4061
|
+
"name": "dockerLoginSecretArn",
|
|
4062
|
+
"optional": true,
|
|
4063
|
+
"type": {
|
|
4064
|
+
"primitive": "string"
|
|
4065
|
+
}
|
|
4058
4066
|
}
|
|
4059
4067
|
],
|
|
4060
4068
|
"symbolId": "src/index:TokenInjectableDockerBuilderProps"
|
|
4061
4069
|
}
|
|
4062
4070
|
},
|
|
4063
|
-
"version": "1.
|
|
4064
|
-
"fingerprint": "
|
|
4071
|
+
"version": "1.1.1",
|
|
4072
|
+
"fingerprint": "dNZza5HJSvkKpYKTwFNzOlEu3XcrKWMe2UHZb9UxVrA="
|
|
4065
4073
|
}
|
package/API.md
CHANGED
|
@@ -6,21 +6,6 @@
|
|
|
6
6
|
|
|
7
7
|
A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
8
8
|
|
|
9
|
-
*Example*
|
|
10
|
-
|
|
11
|
-
```typescript
|
|
12
|
-
const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
13
|
-
path: './docker',
|
|
14
|
-
buildArgs: {
|
|
15
|
-
TOKEN: 'my-secret-token',
|
|
16
|
-
ENV: 'production'
|
|
17
|
-
},
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
const containerImage = dockerBuilder.getContainerImage();
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
|
|
24
9
|
#### Initializers <a name="Initializers" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer"></a>
|
|
25
10
|
|
|
26
11
|
```typescript
|
|
@@ -31,9 +16,9 @@ new TokenInjectableDockerBuilder(scope: Construct, id: string, props: TokenInjec
|
|
|
31
16
|
|
|
32
17
|
| **Name** | **Type** | **Description** |
|
|
33
18
|
| --- | --- | --- |
|
|
34
|
-
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> |
|
|
35
|
-
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.id">id</a></code> | <code>string</code> |
|
|
36
|
-
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.props">props</a></code> | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps">TokenInjectableDockerBuilderProps</a></code> |
|
|
19
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
|
|
20
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
|
|
21
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.props">props</a></code> | <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps">TokenInjectableDockerBuilderProps</a></code> | *No description.* |
|
|
37
22
|
|
|
38
23
|
---
|
|
39
24
|
|
|
@@ -41,24 +26,18 @@ new TokenInjectableDockerBuilder(scope: Construct, id: string, props: TokenInjec
|
|
|
41
26
|
|
|
42
27
|
- *Type:* constructs.Construct
|
|
43
28
|
|
|
44
|
-
The parent construct/stack.
|
|
45
|
-
|
|
46
29
|
---
|
|
47
30
|
|
|
48
31
|
##### `id`<sup>Required</sup> <a name="id" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.id"></a>
|
|
49
32
|
|
|
50
33
|
- *Type:* string
|
|
51
34
|
|
|
52
|
-
The unique ID of the construct.
|
|
53
|
-
|
|
54
35
|
---
|
|
55
36
|
|
|
56
37
|
##### `props`<sup>Required</sup> <a name="props" id="token-injectable-docker-builder.TokenInjectableDockerBuilder.Initializer.parameter.props"></a>
|
|
57
38
|
|
|
58
39
|
- *Type:* <a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps">TokenInjectableDockerBuilderProps</a>
|
|
59
40
|
|
|
60
|
-
Configuration properties for the construct.
|
|
61
|
-
|
|
62
41
|
---
|
|
63
42
|
|
|
64
43
|
#### Methods <a name="Methods" id="Methods"></a>
|
|
@@ -166,6 +145,7 @@ const tokenInjectableDockerBuilderProps: TokenInjectableDockerBuilderProps = { .
|
|
|
166
145
|
| --- | --- | --- |
|
|
167
146
|
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.path">path</a></code> | <code>string</code> | The path to the directory containing the Dockerfile or source code. |
|
|
168
147
|
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.buildArgs">buildArgs</a></code> | <code>{[ key: string ]: string}</code> | Build arguments to pass to the Docker build process. |
|
|
148
|
+
| <code><a href="#token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.dockerLoginSecretArn">dockerLoginSecretArn</a></code> | <code>string</code> | The ARN of the AWS Secrets Manager secret containing Docker login credentials. |
|
|
169
149
|
|
|
170
150
|
---
|
|
171
151
|
|
|
@@ -205,5 +185,33 @@ These are transformed into `--build-arg` flags.
|
|
|
205
185
|
```
|
|
206
186
|
|
|
207
187
|
|
|
188
|
+
##### `dockerLoginSecretArn`<sup>Optional</sup> <a name="dockerLoginSecretArn" id="token-injectable-docker-builder.TokenInjectableDockerBuilderProps.property.dockerLoginSecretArn"></a>
|
|
189
|
+
|
|
190
|
+
```typescript
|
|
191
|
+
public readonly dockerLoginSecretArn: string;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
- *Type:* string
|
|
195
|
+
|
|
196
|
+
The ARN of the AWS Secrets Manager secret containing Docker login credentials.
|
|
197
|
+
|
|
198
|
+
This secret should store a JSON object with the following structure:
|
|
199
|
+
```json
|
|
200
|
+
{
|
|
201
|
+
"username": "my-docker-username",
|
|
202
|
+
"password": "my-docker-password"
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
If not provided, the construct will skip Docker login during the build process.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
*Example*
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret'
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
|
|
208
216
|
|
|
209
217
|
|
package/README.md
CHANGED
|
@@ -2,17 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
The `TokenInjectableDockerBuilder` is a flexible AWS CDK construct that enables the usage of AWS CDK tokens in the building, pushing, and deployment of Docker images to Amazon Elastic Container Registry (ECR). It leverages AWS CodeBuild and Lambda custom resources.
|
|
4
4
|
|
|
5
|
+
---
|
|
6
|
+
|
|
5
7
|
## Why?
|
|
6
8
|
|
|
7
|
-
AWS CDK already provides mechanisms for creating deployable assets using Docker, such as [DockerImageAsset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr_assets.DockerImageAsset.html) and [DockerImageCode](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DockerImageCode.html), but these Constructs are limited because they cannot accept CDK tokens as build-args.
|
|
9
|
+
AWS CDK already provides mechanisms for creating deployable assets using Docker, such as [DockerImageAsset](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ecr_assets.DockerImageAsset.html) and [DockerImageCode](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.DockerImageCode.html), but these Constructs are limited because they cannot accept CDK tokens as build-args. The `TokenInjectableDockerBuilder` allows injecting CDK tokens as build-time arguments into Docker-based assets, enabling more dynamic dependency relationships.
|
|
8
10
|
|
|
9
|
-
For example,
|
|
11
|
+
For example, a Next.js frontend Docker image may require an API Gateway URL. With this construct, you can deploy the API Gateway first, then pass its URL as a build-time argument to the Next.js Docker image.
|
|
12
|
+
|
|
13
|
+
---
|
|
10
14
|
|
|
11
15
|
## Features
|
|
12
16
|
|
|
13
17
|
- Automatically builds and pushes Docker images to ECR.
|
|
14
|
-
- Supports custom build arguments for Docker builds, including CDK tokens
|
|
15
|
-
- Retrieves
|
|
18
|
+
- Supports custom build arguments for Docker builds, including CDK tokens resolved at deployment time.
|
|
19
|
+
- Retrieves Docker images for use in ECS or Lambda.
|
|
16
20
|
|
|
17
21
|
---
|
|
18
22
|
|
|
@@ -48,60 +52,59 @@ pip install token-injectable-docker-builder
|
|
|
48
52
|
|
|
49
53
|
#### Properties in `TokenInjectableDockerBuilderProps`
|
|
50
54
|
|
|
51
|
-
| Property
|
|
52
|
-
|
|
53
|
-
| `path`
|
|
54
|
-
| `buildArgs`
|
|
55
|
+
| Property | Type | Required | Description |
|
|
56
|
+
|------------------------|--------------------|----------|-------------------------------------------------------------------------------------------------------|
|
|
57
|
+
| `path` | `string` | Yes | The file path to the Dockerfile or source code directory. |
|
|
58
|
+
| `buildArgs` | `{ [key: string]: string }` | No | Build arguments to pass to the Docker build process. |
|
|
59
|
+
| `dockerLoginSecretArn` | `string` | No | ARN of an AWS Secrets Manager secret for Docker credentials. Skips login if not provided. |
|
|
55
60
|
|
|
56
61
|
---
|
|
57
62
|
|
|
58
|
-
## Usage
|
|
63
|
+
## Usage Examples
|
|
59
64
|
|
|
60
|
-
### NPM
|
|
65
|
+
### TypeScript/NPM Example
|
|
61
66
|
|
|
62
|
-
Here is
|
|
67
|
+
Here is how to use `TokenInjectableDockerBuilder` in an AWS CDK project with TypeScript:
|
|
63
68
|
|
|
64
69
|
```typescript
|
|
65
70
|
import * as cdk from 'aws-cdk-lib';
|
|
66
71
|
import { TokenInjectableDockerBuilder } from 'token-injectable-docker-builder';
|
|
72
|
+
import * as ecs from 'aws-cdk-lib/aws-ecs';
|
|
73
|
+
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
67
74
|
|
|
68
75
|
export class MyStack extends cdk.Stack {
|
|
69
76
|
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
|
|
70
77
|
super(scope, id, props);
|
|
71
78
|
|
|
72
|
-
// Create a TokenInjectableDockerBuilder construct
|
|
73
79
|
const dockerBuilder = new TokenInjectableDockerBuilder(this, 'MyDockerBuilder', {
|
|
74
|
-
path: './docker',
|
|
80
|
+
path: './docker',
|
|
75
81
|
buildArgs: {
|
|
76
|
-
TOKEN: 'my-secret-token',
|
|
82
|
+
TOKEN: 'my-secret-token',
|
|
77
83
|
ENV: 'production',
|
|
78
84
|
},
|
|
85
|
+
dockerLoginSecretArn: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret',
|
|
79
86
|
});
|
|
80
87
|
|
|
81
|
-
//
|
|
82
|
-
const containerImage = dockerBuilder.containerImage;
|
|
83
|
-
|
|
84
|
-
// Retrieve the Docker image code for Lambda
|
|
85
|
-
const dockerImageCode = dockerBuilder.dockerImageCode;
|
|
86
|
-
|
|
87
|
-
// Example: Use the container image in an ECS service
|
|
88
|
+
// Use in ECS
|
|
88
89
|
new ecs.FargateTaskDefinition(this, 'TaskDefinition', {
|
|
89
|
-
containerImage,
|
|
90
|
+
containerImage: dockerBuilder.containerImage,
|
|
90
91
|
});
|
|
91
92
|
|
|
92
|
-
//
|
|
93
|
+
// Use in Lambda
|
|
93
94
|
new lambda.Function(this, 'DockerLambdaFunction', {
|
|
94
95
|
runtime: lambda.Runtime.FROM_IMAGE,
|
|
95
|
-
code: dockerImageCode,
|
|
96
|
+
code: dockerBuilder.dockerImageCode,
|
|
96
97
|
handler: lambda.Handler.FROM_IMAGE,
|
|
97
98
|
});
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
```
|
|
101
102
|
|
|
103
|
+
---
|
|
104
|
+
|
|
102
105
|
### Python Example
|
|
103
106
|
|
|
104
|
-
Here is
|
|
107
|
+
Here is how to use `TokenInjectableDockerBuilder` in an AWS CDK project with Python:
|
|
105
108
|
|
|
106
109
|
```python
|
|
107
110
|
from aws_cdk import core as cdk
|
|
@@ -114,30 +117,24 @@ class MyStack(cdk.Stack):
|
|
|
114
117
|
def __init__(self, scope: cdk.App, id: str, **kwargs):
|
|
115
118
|
super().__init__(scope, id, **kwargs)
|
|
116
119
|
|
|
117
|
-
# Create a TokenInjectableDockerBuilder construct
|
|
118
120
|
docker_builder = TokenInjectableDockerBuilder(self, "MyDockerBuilder",
|
|
119
|
-
path="./docker",
|
|
121
|
+
path="./docker",
|
|
120
122
|
build_args={
|
|
121
|
-
"TOKEN": "my-secret-token",
|
|
123
|
+
"TOKEN": "my-secret-token",
|
|
122
124
|
"ENV": "production"
|
|
123
|
-
}
|
|
125
|
+
},
|
|
126
|
+
docker_login_secret_arn="arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret"
|
|
124
127
|
)
|
|
125
128
|
|
|
126
|
-
#
|
|
127
|
-
container_image = docker_builder.container_image
|
|
128
|
-
|
|
129
|
-
# Retrieve the Docker image code for Lambda
|
|
130
|
-
docker_image_code = docker_builder.docker_image_code
|
|
131
|
-
|
|
132
|
-
# Example: Use the container image in an ECS service
|
|
129
|
+
# Use in ECS
|
|
133
130
|
ecs.FargateTaskDefinition(self, "TaskDefinition",
|
|
134
|
-
container_image=container_image
|
|
131
|
+
container_image=docker_builder.container_image
|
|
135
132
|
)
|
|
136
133
|
|
|
137
|
-
#
|
|
134
|
+
# Use in Lambda
|
|
138
135
|
lambda_.Function(self, "DockerLambdaFunction",
|
|
139
136
|
runtime=lambda_.Runtime.FROM_IMAGE,
|
|
140
|
-
code=docker_image_code,
|
|
137
|
+
code=docker_builder.docker_image_code,
|
|
141
138
|
handler=lambda_.Handler.FROM_IMAGE
|
|
142
139
|
)
|
|
143
140
|
```
|
|
@@ -146,56 +143,47 @@ class MyStack(cdk.Stack):
|
|
|
146
143
|
|
|
147
144
|
## How It Works
|
|
148
145
|
|
|
149
|
-
1. **Docker Source**:
|
|
146
|
+
1. **Docker Source**: Packages the source code or Dockerfile specified in the `path` property as an S3 asset.
|
|
150
147
|
2. **CodeBuild Project**:
|
|
151
|
-
- Uses the packaged asset and
|
|
148
|
+
- Uses the packaged asset and `buildArgs` to build the Docker image.
|
|
152
149
|
- Pushes the image to an ECR repository.
|
|
153
150
|
3. **Custom Resource**:
|
|
154
151
|
- Triggers the build process using a Lambda function (`onEvent`).
|
|
155
152
|
- Monitors the build status using another Lambda function (`isComplete`).
|
|
156
153
|
4. **Outputs**:
|
|
157
|
-
-
|
|
158
|
-
-
|
|
154
|
+
- `.containerImage`: Returns the Docker image for ECS.
|
|
155
|
+
- `.dockerImageCode`: Returns the Docker image code for Lambda.
|
|
159
156
|
|
|
160
157
|
---
|
|
161
158
|
|
|
162
159
|
## IAM Permissions
|
|
163
160
|
|
|
164
|
-
|
|
161
|
+
The construct automatically grants permissions for:
|
|
165
162
|
- CodeBuild to pull and push images to ECR.
|
|
166
|
-
-
|
|
167
|
-
-
|
|
163
|
+
- Lambda to monitor build status and retrieve logs.
|
|
164
|
+
- Encryption via a custom KMS key.
|
|
168
165
|
|
|
169
166
|
---
|
|
170
167
|
|
|
171
168
|
## Notes
|
|
172
169
|
|
|
173
|
-
- **Build Arguments**:
|
|
174
|
-
- **ECR Repository**:
|
|
175
|
-
- **Custom Resources**:
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Prerequisites
|
|
180
|
-
|
|
181
|
-
Ensure you have the following:
|
|
182
|
-
1. Docker installed locally if you're testing builds.
|
|
183
|
-
2. AWS CDK CLI installed (`npm install -g aws-cdk`).
|
|
184
|
-
3. An AWS account and configured credentials.
|
|
170
|
+
- **Build Arguments**: Pass custom arguments via `buildArgs` as `--build-arg` flags.
|
|
171
|
+
- **ECR Repository**: Automatically creates an ECR repository with lifecycle rules.
|
|
172
|
+
- **Custom Resources**: Manages lifecycle events for builds using custom Lambda handlers.
|
|
185
173
|
|
|
186
174
|
---
|
|
187
175
|
|
|
188
176
|
## Troubleshooting
|
|
189
177
|
|
|
190
|
-
1. **Build Errors**: Check
|
|
191
|
-
2. **Lambda
|
|
192
|
-
3. **Permissions**: Ensure
|
|
178
|
+
1. **Build Errors**: Check CodeBuild logs in CloudWatch.
|
|
179
|
+
2. **Lambda Errors**: Check `onEvent` and `isComplete` Lambda logs in CloudWatch.
|
|
180
|
+
3. **Permissions**: Ensure IAM roles have the required permissions for CodeBuild, ECR, and Secrets Manager.
|
|
193
181
|
|
|
194
182
|
---
|
|
195
183
|
|
|
196
184
|
## Support
|
|
197
185
|
|
|
198
|
-
Open an issue on [GitHub](https://github.com/AlexTech314/TokenInjectableDockerBuilder)
|
|
186
|
+
Open an issue on [GitHub](https://github.com/AlexTech314/TokenInjectableDockerBuilder).
|
|
199
187
|
|
|
200
188
|
---
|
|
201
189
|
|
package/lib/index.d.ts
CHANGED
|
@@ -21,31 +21,27 @@ export interface TokenInjectableDockerBuilderProps {
|
|
|
21
21
|
readonly buildArgs?: {
|
|
22
22
|
[key: string]: string;
|
|
23
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* The ARN of the AWS Secrets Manager secret containing Docker login credentials.
|
|
26
|
+
* This secret should store a JSON object with the following structure:
|
|
27
|
+
* ```json
|
|
28
|
+
* {
|
|
29
|
+
* "username": "my-docker-username",
|
|
30
|
+
* "password": "my-docker-password"
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
* If not provided, the construct will skip Docker login during the build process.
|
|
34
|
+
*
|
|
35
|
+
* @example 'arn:aws:secretsmanager:us-east-1:123456789012:secret:DockerLoginSecret'
|
|
36
|
+
*/
|
|
37
|
+
readonly dockerLoginSecretArn?: string;
|
|
24
38
|
}
|
|
25
39
|
/**
|
|
26
40
|
* A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
30
|
-
* path: './docker',
|
|
31
|
-
* buildArgs: {
|
|
32
|
-
* TOKEN: 'my-secret-token',
|
|
33
|
-
* ENV: 'production'
|
|
34
|
-
* },
|
|
35
|
-
* });
|
|
36
|
-
*
|
|
37
|
-
* const containerImage = dockerBuilder.getContainerImage();
|
|
38
41
|
*/
|
|
39
42
|
export declare class TokenInjectableDockerBuilder extends Construct {
|
|
43
|
+
private readonly ecrRepository;
|
|
40
44
|
readonly containerImage: ContainerImage;
|
|
41
45
|
readonly dockerImageCode: DockerImageCode;
|
|
42
|
-
private readonly ecrRepository;
|
|
43
|
-
/**
|
|
44
|
-
* Creates a new `TokenInjectableDockerBuilder` instance.
|
|
45
|
-
*
|
|
46
|
-
* @param scope The parent construct/stack.
|
|
47
|
-
* @param id The unique ID of the construct.
|
|
48
|
-
* @param props Configuration properties for the construct.
|
|
49
|
-
*/
|
|
50
46
|
constructor(scope: Construct, id: string, props: TokenInjectableDockerBuilderProps);
|
|
51
47
|
}
|
package/lib/index.js
CHANGED
|
@@ -10,40 +10,39 @@ const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
|
10
10
|
const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
|
|
11
11
|
const aws_ecs_1 = require("aws-cdk-lib/aws-ecs");
|
|
12
12
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
13
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
13
14
|
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
14
15
|
const aws_s3_assets_1 = require("aws-cdk-lib/aws-s3-assets");
|
|
15
16
|
const custom_resources_1 = require("aws-cdk-lib/custom-resources");
|
|
16
17
|
const constructs_1 = require("constructs");
|
|
17
18
|
/**
|
|
18
19
|
* A CDK construct to build and push Docker images to an ECR repository using CodeBuild and Lambda custom resources.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* const dockerBuilder = new TokenInjectableDockerBuilder(this, 'DockerBuilder', {
|
|
22
|
-
* path: './docker',
|
|
23
|
-
* buildArgs: {
|
|
24
|
-
* TOKEN: 'my-secret-token',
|
|
25
|
-
* ENV: 'production'
|
|
26
|
-
* },
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* const containerImage = dockerBuilder.getContainerImage();
|
|
30
20
|
*/
|
|
31
21
|
class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
32
|
-
/**
|
|
33
|
-
* Creates a new `TokenInjectableDockerBuilder` instance.
|
|
34
|
-
*
|
|
35
|
-
* @param scope The parent construct/stack.
|
|
36
|
-
* @param id The unique ID of the construct.
|
|
37
|
-
* @param props Configuration properties for the construct.
|
|
38
|
-
*/
|
|
39
22
|
constructor(scope, id, props) {
|
|
40
23
|
super(scope, id);
|
|
41
|
-
const { path: sourcePath, buildArgs } = props;
|
|
42
|
-
//
|
|
43
|
-
|
|
24
|
+
const { path: sourcePath, buildArgs, dockerLoginSecretArn } = props;
|
|
25
|
+
// Define a KMS key for ECR encryption
|
|
26
|
+
const encryptionKey = new aws_kms_1.Key(this, 'EcrEncryptionKey', {
|
|
27
|
+
enableKeyRotation: true,
|
|
28
|
+
});
|
|
29
|
+
// Create an ECR repository with lifecycle rules, encryption, and image scanning enabled
|
|
30
|
+
this.ecrRepository = new aws_ecr_1.Repository(this, 'ECRRepository', {
|
|
31
|
+
lifecycleRules: [
|
|
32
|
+
{
|
|
33
|
+
rulePriority: 1,
|
|
34
|
+
description: 'Remove untagged images after 30 days',
|
|
35
|
+
tagStatus: aws_ecr_1.TagStatus.UNTAGGED,
|
|
36
|
+
maxImageAge: aws_cdk_lib_1.Duration.days(1),
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
encryption: aws_ecr_1.RepositoryEncryption.KMS,
|
|
40
|
+
encryptionKey: encryptionKey,
|
|
41
|
+
imageScanOnPush: true,
|
|
42
|
+
});
|
|
44
43
|
// Package the source code as an asset
|
|
45
44
|
const sourceAsset = new aws_s3_assets_1.Asset(this, 'SourceAsset', {
|
|
46
|
-
path: sourcePath,
|
|
45
|
+
path: sourcePath,
|
|
47
46
|
});
|
|
48
47
|
// Transform buildArgs into a string of --build-arg KEY=VALUE
|
|
49
48
|
const buildArgsString = buildArgs
|
|
@@ -51,11 +50,16 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
51
50
|
.map(([key, value]) => `--build-arg ${key}=${value}`)
|
|
52
51
|
.join(' ')
|
|
53
52
|
: '';
|
|
54
|
-
//
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
// Conditional Dockerhub login commands
|
|
54
|
+
const dockerLoginCommands = dockerLoginSecretArn
|
|
55
|
+
? [
|
|
56
|
+
'echo "Retrieving Docker credentials from Secrets Manager..."',
|
|
57
|
+
`DOCKER_USERNAME=$(aws secretsmanager get-secret-value --secret-id ${dockerLoginSecretArn} --query SecretString --output text | jq -r .username)`,
|
|
58
|
+
`DOCKER_PASSWORD=$(aws secretsmanager get-secret-value --secret-id ${dockerLoginSecretArn} --query SecretString --output text | jq -r .password)`,
|
|
59
|
+
'echo "Logging in to Docker..."',
|
|
60
|
+
'echo $DOCKER_PASSWORD | docker login --username $DOCKER_USERNAME --password-stdin',
|
|
61
|
+
]
|
|
62
|
+
: ['echo "No Docker credentials provided. Skipping login step."'];
|
|
59
63
|
// Create a CodeBuild project
|
|
60
64
|
const codeBuildProject = new aws_codebuild_1.Project(this, 'UICodeBuildProject', {
|
|
61
65
|
source: aws_codebuild_1.Source.s3({
|
|
@@ -64,14 +68,18 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
64
68
|
}),
|
|
65
69
|
environment: {
|
|
66
70
|
buildImage: aws_codebuild_1.LinuxBuildImage.STANDARD_7_0,
|
|
67
|
-
privileged: true,
|
|
71
|
+
privileged: true,
|
|
72
|
+
},
|
|
73
|
+
environmentVariables: {
|
|
74
|
+
ECR_REPO_URI: { value: this.ecrRepository.repositoryUri },
|
|
75
|
+
BUILD_ARGS: { value: buildArgsString },
|
|
68
76
|
},
|
|
69
|
-
environmentVariables: environmentVariables,
|
|
70
77
|
buildSpec: aws_codebuild_1.BuildSpec.fromObject({
|
|
71
78
|
version: '0.2',
|
|
72
79
|
phases: {
|
|
73
80
|
pre_build: {
|
|
74
81
|
commands: [
|
|
82
|
+
...dockerLoginCommands,
|
|
75
83
|
'echo "Retrieving AWS Account ID..."',
|
|
76
84
|
'export ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)',
|
|
77
85
|
'echo "Logging in to Amazon ECR..."',
|
|
@@ -93,33 +101,35 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
93
101
|
},
|
|
94
102
|
}),
|
|
95
103
|
});
|
|
96
|
-
// Grant permissions to
|
|
104
|
+
// Grant permissions to CodeBuild
|
|
97
105
|
this.ecrRepository.grantPullPush(codeBuildProject);
|
|
98
106
|
codeBuildProject.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({
|
|
99
|
-
actions: ['ecr:GetAuthorizationToken'],
|
|
100
|
-
resources: [
|
|
101
|
-
}));
|
|
102
|
-
// Grant permissions to CodeBuild for CloudWatch Logs
|
|
103
|
-
codeBuildProject.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({
|
|
104
|
-
actions: ['logs:PutLogEvents', 'logs:CreateLogGroup', 'logs:CreateLogStream'],
|
|
105
|
-
resources: [`arn:aws:logs:${aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:*`],
|
|
107
|
+
actions: ['ecr:GetAuthorizationToken', 'ecr:GetDownloadUrlForLayer', 'ecr:BatchCheckLayerAvailability'],
|
|
108
|
+
resources: [this.ecrRepository.repositoryArn],
|
|
106
109
|
}));
|
|
107
|
-
|
|
110
|
+
if (dockerLoginSecretArn) {
|
|
111
|
+
codeBuildProject.role.addToPrincipalPolicy(new aws_iam_1.PolicyStatement({
|
|
112
|
+
actions: ['secretsmanager:GetSecretValue'],
|
|
113
|
+
resources: [dockerLoginSecretArn],
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
// Grant CodeBuild access to the KMS key
|
|
117
|
+
encryptionKey.grantEncryptDecrypt(codeBuildProject.role);
|
|
118
|
+
// Create Lambda functions for onEvent and isComplete handlers
|
|
108
119
|
const onEventHandlerFunction = new aws_lambda_1.Function(this, 'OnEventHandlerFunction', {
|
|
109
|
-
runtime: aws_lambda_1.Runtime.
|
|
110
|
-
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../onEvent')),
|
|
111
|
-
handler: 'onEvent.handler',
|
|
120
|
+
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
|
121
|
+
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../onEvent')),
|
|
122
|
+
handler: 'onEvent.handler',
|
|
112
123
|
timeout: aws_cdk_lib_1.Duration.minutes(15),
|
|
113
124
|
});
|
|
114
125
|
onEventHandlerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
115
126
|
actions: ['codebuild:StartBuild'],
|
|
116
127
|
resources: [codeBuildProject.projectArn], // Restrict to specific project
|
|
117
128
|
}));
|
|
118
|
-
// Create Node.js Lambda function for isComplete
|
|
119
129
|
const isCompleteHandlerFunction = new aws_lambda_1.Function(this, 'IsCompleteHandlerFunction', {
|
|
120
|
-
runtime: aws_lambda_1.Runtime.
|
|
121
|
-
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../isComplete')),
|
|
122
|
-
handler: 'isComplete.handler',
|
|
130
|
+
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
|
131
|
+
code: aws_lambda_1.Code.fromAsset(path.resolve(__dirname, '../isComplete')),
|
|
132
|
+
handler: 'isComplete.handler',
|
|
123
133
|
timeout: aws_cdk_lib_1.Duration.minutes(15),
|
|
124
134
|
});
|
|
125
135
|
isCompleteHandlerFunction.addToRolePolicy(new aws_iam_1.PolicyStatement({
|
|
@@ -132,6 +142,11 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
132
142
|
],
|
|
133
143
|
resources: ['*'],
|
|
134
144
|
}));
|
|
145
|
+
// Grant Lambda functions access to KMS key and ECR
|
|
146
|
+
encryptionKey.grantEncryptDecrypt(onEventHandlerFunction);
|
|
147
|
+
encryptionKey.grantEncryptDecrypt(isCompleteHandlerFunction);
|
|
148
|
+
this.ecrRepository.grantPullPush(onEventHandlerFunction);
|
|
149
|
+
this.ecrRepository.grantPullPush(isCompleteHandlerFunction);
|
|
135
150
|
// Create a custom resource provider
|
|
136
151
|
const provider = new custom_resources_1.Provider(this, 'CustomResourceProvider', {
|
|
137
152
|
onEventHandler: onEventHandlerFunction,
|
|
@@ -153,5 +168,5 @@ class TokenInjectableDockerBuilder extends constructs_1.Construct {
|
|
|
153
168
|
}
|
|
154
169
|
exports.TokenInjectableDockerBuilder = TokenInjectableDockerBuilder;
|
|
155
170
|
_a = JSII_RTTI_SYMBOL_1;
|
|
156
|
-
TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "1.
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLDZDQUE4RDtBQUM5RCw2REFBd0Y7QUFDeEYsaURBQWlEO0FBQ2pELGlEQUFxRDtBQUNyRCxpREFBc0Q7QUFDdEQsdURBQWtGO0FBQ2xGLDZEQUFrRDtBQUNsRCxtRUFBd0Q7QUFDeEQsMkNBQXVDO0FBd0J2Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQUt6RDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMseUJBQXlCO1FBRXhFLDJCQUEyQjtRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksb0JBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFM0Qsc0NBQXNDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUkscUJBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ2pELElBQUksRUFBRSxVQUFVLEVBQUUsd0NBQXdDO1NBQzNELENBQUMsQ0FBQztRQUVILDZEQUE2RDtRQUM3RCxNQUFNLGVBQWUsR0FBRyxTQUFTO1lBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztpQkFDeEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO2lCQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLGlF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aUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyw0QkFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7QUFySkgsb0VBc0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIFN0YWNrLCBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFByb2plY3QsIFNvdXJjZSwgTGludXhCdWlsZEltYWdlLCBCdWlsZFNwZWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCB7IENvbnRhaW5lckltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFJ1bnRpbWUsIENvZGUsIERvY2tlckltYWdlQ29kZSwgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIGBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyYCBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIERvY2tlciBidWlsZCBwcm9jZXNzLlxuICAgKiBUaGVzZSBhcmUgdHJhbnNmb3JtZWQgaW50byBgLS1idWlsZC1hcmdgIGZsYWdzLlxuICAgKiBAZXhhbXBsZVxuICAgKiB7XG4gICAqICAgVE9LRU46ICdteS1zZWNyZXQtdG9rZW4nLFxuICAgKiAgIEVOVjogJ3Byb2R1Y3Rpb24nXG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQXJncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cblxuLyoqXG4gKiBBIENESyBjb25zdHJ1Y3QgdG8gYnVpbGQgYW5kIHB1c2ggRG9ja2VyIGltYWdlcyB0byBhbiBFQ1IgcmVwb3NpdG9yeSB1c2luZyBDb2RlQnVpbGQgYW5kIExhbWJkYSBjdXN0b20gcmVzb3VyY2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkb2NrZXJCdWlsZGVyID0gbmV3IFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIodGhpcywgJ0RvY2tlckJ1aWxkZXInLCB7XG4gKiAgIHBhdGg6ICcuL2RvY2tlcicsXG4gKiAgIGJ1aWxkQXJnczoge1xuICogICAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAqICAgICBFTlY6ICdwcm9kdWN0aW9uJ1xuICogICB9LFxuICogfSk7XG4gKlxuICogY29uc3QgY29udGFpbmVySW1hZ2UgPSBkb2NrZXJCdWlsZGVyLmdldENvbnRhaW5lckltYWdlKCk7XG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbkluamVjdGFibGVEb2NrZXJCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlOiBDb250YWluZXJJbWFnZTtcbiAgcHVibGljIHJlYWRvbmx5IGRvY2tlckltYWdlQ29kZTogRG9ja2VySW1hZ2VDb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3Qvc3RhY2suXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIElEIG9mIHRoZSBjb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBwcm9wcyBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgcGF0aDogc291cmNlUGF0aCwgYnVpbGRBcmdzIH0gPSBwcm9wczsgLy8gRGVmYXVsdCB0byBsaW51eC9hbWQ2NFxuXG4gICAgLy8gQ3JlYXRlIGFuIEVDUiByZXBvc2l0b3J5XG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gbmV3IFJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknKTtcblxuICAgIC8vIFBhY2thZ2UgdGhlIHNvdXJjZSBjb2RlIGFzIGFuIGFzc2V0XG4gICAgY29uc3Qgc291cmNlQXNzZXQgPSBuZXcgQXNzZXQodGhpcywgJ1NvdXJjZUFzc2V0Jywge1xuICAgICAgcGF0aDogc291cmNlUGF0aCwgLy8gUGF0aCB0byB0aGUgRG9ja2VyZmlsZSBvciBzb3VyY2UgY29kZVxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGJ1aWxkQXJncyBpbnRvIGEgc3RyaW5nIG9mIC0tYnVpbGQtYXJnIEtFWT1WQUxVRVxuICAgIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgICAgPyBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYC0tYnVpbGQtYXJnICR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgIDogJyc7XG5cbiAgICAvLyBQYXNzIHRoZSBidWlsZEFyZ3NTdHJpbmcgYW5kIHBsYXRmb3JtIGFzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVzOiB7IFtuYW1lOiBzdHJpbmddOiB7IHZhbHVlOiBzdHJpbmcgfSB9ID0ge1xuICAgICAgRUNSX1JFUE9fVVJJOiB7IHZhbHVlOiB0aGlzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSB9LFxuICAgICAgQlVJTERfQVJHUzogeyB2YWx1ZTogYnVpbGRBcmdzU3RyaW5nIH0sXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSBhIENvZGVCdWlsZCBwcm9qZWN0XG4gICAgY29uc3QgY29kZUJ1aWxkUHJvamVjdCA9IG5ldyBQcm9qZWN0KHRoaXMsICdVSUNvZGVCdWlsZFByb2plY3QnLCB7XG4gICAgICBzb3VyY2U6IFNvdXJjZS5zMyh7XG4gICAgICAgIGJ1Y2tldDogc291cmNlQXNzZXQuYnVja2V0LFxuICAgICAgICBwYXRoOiBzb3VyY2VBc3NldC5zM09iamVjdEtleSxcbiAgICAgIH0pLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhCdWlsZEltYWdlLlNUQU5EQVJEXzdfMCxcbiAgICAgICAgcHJpdmlsZWdlZDogdHJ1ZSwgLy8gUmVxdWlyZWQgZm9yIERvY2tlciBidWlsZHNcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogZW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZV9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2VjaG8gXCJSZXRyaWV2aW5nIEFXUyBBY2NvdW50IElELi4uXCInLFxuICAgICAgICAgICAgICAnZXhwb3J0IEFDQ09VTlRfSUQ9JChhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIEFtYXpvbiBFQ1IuLi5cIicsXG4gICAgICAgICAgICAgICdhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAkQVdTX0RFRkFVTFRfUkVHSU9OIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgQVdTIC0tcGFzc3dvcmQtc3RkaW4gJEFDQ09VTlRfSUQuZGtyLmVjci4kQVdTX0RFRkFVTFRfUkVHSU9OLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBCdWlsZCBwaGFzZTogQnVpbGRpbmcgdGhlIERvY2tlciBpbWFnZS4uLicsXG4gICAgICAgICAgICAgICdkb2NrZXIgYnVpbGQgJEJVSUxEX0FSR1MgLXQgJEVDUl9SRVBPX1VSSTpsYXRlc3QgJENPREVCVUlMRF9TUkNfRElSJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBQb3N0LWJ1aWxkIHBoYXNlOiBQdXNoaW5nIHRoZSBEb2NrZXIgaW1hZ2UuLi4nLFxuICAgICAgICAgICAgICAnZG9ja2VyIHB1c2ggJEVDUl9SRVBPX1VSSTpsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBpbnRlcmFjdCB3aXRoIEVDUlxuICAgIHRoaXMuZWNyUmVwb3NpdG9yeS5ncmFudFB1bGxQdXNoKGNvZGVCdWlsZFByb2plY3QpO1xuXG4gICAgY29kZUJ1aWxkUHJvamVjdC5yb2xlIS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBDb2RlQnVpbGQgZm9yIENsb3VkV2F0Y2ggTG9nc1xuICAgIGNvZGVCdWlsZFByb2plY3Qucm9sZSEuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydsb2dzOlB1dExvZ0V2ZW50cycsICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJywgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJ10sXG4gICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmxvZ3M6JHtTdGFjay5vZih0aGlzKS5yZWdpb259OiR7U3RhY2sub2YodGhpcykuYWNjb3VudH06KmBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBOb2RlLmpzIExhbWJkYSBmdW5jdGlvbiBmb3Igb25FdmVudFxuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ09uRXZlbnRIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU19MQVRFU1QsIC8vIFVzZSBOb2RlLmpzIHJ1bnRpbWVcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi9vbkV2ZW50JykpLCAvLyBQYXRoIHRvIGhhbmRsZXIgY29kZVxuICAgICAgaGFuZGxlcjogJ29uRXZlbnQuaGFuZGxlcicsIC8vIEVudHJ5IHBvaW50IChhZGp1c3QgYXMgbmVlZGVkKVxuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxNSksXG4gICAgfSk7XG5cbiAgICBvbkV2ZW50SGFuZGxlckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbJ2NvZGVidWlsZDpTdGFydEJ1aWxkJ10sXG4gICAgICAgIHJlc291cmNlczogW2NvZGVCdWlsZFByb2plY3QucHJvamVjdEFybl0sIC8vIFJlc3RyaWN0IHRvIHNwZWNpZmljIHByb2plY3RcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgTm9kZS5qcyBMYW1iZGEgZnVuY3Rpb24gZm9yIGlzQ29tcGxldGVcbiAgICBjb25zdCBpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdJc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfTEFURVNULFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2lzQ29tcGxldGUnKSksIC8vIFBhdGggdG8gaGFuZGxlciBjb2RlXG4gICAgICBoYW5kbGVyOiAnaXNDb21wbGV0ZS5oYW5kbGVyJywgLy8gRW50cnkgcG9pbnQgKGFkanVzdCBhcyBuZWVkZWQpXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcblxuICAgIGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnY29kZWJ1aWxkOkJhdGNoR2V0QnVpbGRzJyxcbiAgICAgICAgICAnY29kZWJ1aWxkOkxpc3RCdWlsZHNGb3JQcm9qZWN0JyxcbiAgICAgICAgICAnbG9nczpHZXRMb2dFdmVudHMnLFxuICAgICAgICAgICdsb2dzOkRlc2NyaWJlTG9nU3RyZWFtcycsXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdDdXN0b21SZXNvdXJjZVByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICBjb25zdCBidWlsZFRyaWdnZXJSZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQnVpbGRUcmlnZ2VyUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUHJvamVjdE5hbWU6IGNvZGVCdWlsZFByb2plY3QucHJvamVjdE5hbWUsXG4gICAgICAgIFRyaWdnZXI6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYnVpbGRUcmlnZ2VyUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGNvZGVCdWlsZFByb2plY3QpO1xuICAgIHRoaXMuY29udGFpbmVySW1hZ2UgPSBDb250YWluZXJJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeSh0aGlzLmVjclJlcG9zaXRvcnkpO1xuICAgIHRoaXMuZG9ja2VySW1hZ2VDb2RlID0gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5lY3JSZXBvc2l0b3J5KTtcbiAgfVxufVxuIl19
|
|
171
|
+
TokenInjectableDockerBuilder[_a] = { fqn: "token-injectable-docker-builder.TokenInjectableDockerBuilder", version: "1.1.1" };
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLDZDQUF1RDtBQUN2RCw2REFBd0Y7QUFDeEYsaURBQWtGO0FBQ2xGLGlEQUFxRDtBQUNyRCxpREFBc0Q7QUFDdEQsaURBQTBDO0FBQzFDLHVEQUFrRjtBQUNsRiw2REFBa0Q7QUFDbEQsbUVBQXdEO0FBQ3hELDJDQUF1QztBQXNDdkM7O0dBRUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBS3pELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFcEUsc0NBQXNDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUN0RCxpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILHdGQUF3RjtRQUN4RixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksb0JBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3pELGNBQWMsRUFBRTtnQkFDZDtvQkFDRSxZQUFZLEVBQUUsQ0FBQztvQkFDZixXQUFXLEVBQUUsc0NBQXNDO29CQUNuRCxTQUFTLEVBQUUsbUJBQVMsQ0FBQyxRQUFRO29CQUM3QixXQUFXLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjthQUNGO1lBQ0QsVUFBVSxFQUFFLDhCQUFvQixDQUFDLEdBQUc7WUFDcEMsYUFBYSxFQUFFLGFBQWE7WUFDNUIsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsc0NBQXNDO1FB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Q0FBQztRQUMxRCxhQUFhLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFNUQsb0NBQW9DO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksMkJBQVEsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDNUQsY0FBYyxFQUFFLHNCQUFzQjtZQUN0QyxpQkFBaUIsRUFBRSx5QkFBeUI7WUFDNUMsYUFBYSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFFSCw2QkFBNkI7UUFDN0IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQzVFLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7Z0JBQ3pDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxjQUFjLEdBQUcsd0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGVBQWUsR0FBRyw0QkFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckUsQ0FBQzs7QUFoTEgsb0VBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUHJvamVjdCwgU291cmNlLCBMaW51eEJ1aWxkSW1hZ2UsIEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSwgUmVwb3NpdG9yeUVuY3J5cHRpb24sIFRhZ1N0YXR1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0IHsgQ29udGFpbmVySW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBSdW50aW1lLCBDb2RlLCBEb2NrZXJJbWFnZUNvZGUsIEZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBgVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlcmAgY29uc3RydWN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIERvY2tlcmZpbGUgb3Igc291cmNlIGNvZGUuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBEb2NrZXIgYnVpbGQgcHJvY2Vzcy5cbiAgICogVGhlc2UgYXJlIHRyYW5zZm9ybWVkIGludG8gYC0tYnVpbGQtYXJnYCBmbGFncy5cbiAgICogQGV4YW1wbGVcbiAgICoge1xuICAgKiAgIFRPS0VOOiAnbXktc2VjcmV0LXRva2VuJyxcbiAgICogICBFTlY6ICdwcm9kdWN0aW9uJ1xuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBidWlsZEFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHNlY3JldCBjb250YWluaW5nIERvY2tlciBsb2dpbiBjcmVkZW50aWFscy5cbiAgICogVGhpcyBzZWNyZXQgc2hvdWxkIHN0b3JlIGEgSlNPTiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAgICogYGBganNvblxuICAgKiB7XG4gICAqICAgXCJ1c2VybmFtZVwiOiBcIm15LWRvY2tlci11c2VybmFtZVwiLFxuICAgKiAgIFwicGFzc3dvcmRcIjogXCJteS1kb2NrZXItcGFzc3dvcmRcIlxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3Qgd2lsbCBza2lwIERvY2tlciBsb2dpbiBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuXG4gICAqXG4gICAqIEBleGFtcGxlICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6c2VjcmV0OkRvY2tlckxvZ2luU2VjcmV0J1xuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyTG9naW5TZWNyZXRBcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBDREsgY29uc3RydWN0IHRvIGJ1aWxkIGFuZCBwdXNoIERvY2tlciBpbWFnZXMgdG8gYW4gRUNSIHJlcG9zaXRvcnkgdXNpbmcgQ29kZUJ1aWxkIGFuZCBMYW1iZGEgY3VzdG9tIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRva2VuSW5qZWN0YWJsZURvY2tlckJ1aWxkZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJJbWFnZTogQ29udGFpbmVySW1hZ2U7XG4gIHB1YmxpYyByZWFkb25seSBkb2NrZXJJbWFnZUNvZGU6IERvY2tlckltYWdlQ29kZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVG9rZW5JbmplY3RhYmxlRG9ja2VyQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgcGF0aDogc291cmNlUGF0aCwgYnVpbGRBcmdzLCBkb2NrZXJMb2dpblNlY3JldEFybiB9ID0gcHJvcHM7XG5cbiAgICAvLyBEZWZpbmUgYSBLTVMga2V5IGZvciBFQ1IgZW5jcnlwdGlvblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBuZXcgS2V5KHRoaXMsICdFY3JFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYW4gRUNSIHJlcG9zaXRvcnkgd2l0aCBsaWZlY3ljbGUgcnVsZXMsIGVuY3J5cHRpb24sIGFuZCBpbWFnZSBzY2FubmluZyBlbmFibGVkXG4gICAgdGhpcy5lY3JSZXBvc2l0b3J5ID0gbmV3IFJlcG9zaXRvcnkodGhpcywgJ0VDUlJlcG9zaXRvcnknLCB7XG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgcnVsZVByaW9yaXR5OiAxLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUmVtb3ZlIHVudGFnZ2VkIGltYWdlcyBhZnRlciAzMCBkYXlzJyxcbiAgICAgICAgICB0YWdTdGF0dXM6IFRhZ1N0YXR1cy5VTlRBR0dFRCxcbiAgICAgICAgICBtYXhJbWFnZUFnZTogRHVyYXRpb24uZGF5cygxKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBlbmNyeXB0aW9uOiBSZXBvc2l0b3J5RW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uS2V5OiBlbmNyeXB0aW9uS2V5LFxuICAgICAgaW1hZ2VTY2FuT25QdXNoOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gUGFja2FnZSB0aGUgc291cmNlIGNvZGUgYXMgYW4gYXNzZXRcbiAgICBjb25zdCBzb3VyY2VBc3NldCA9IG5ldyBBc3NldCh0aGlzLCAnU291cmNlQXNzZXQnLCB7XG4gICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIGJ1aWxkQXJncyBpbnRvIGEgc3RyaW5nIG9mIC0tYnVpbGQtYXJnIEtFWT1WQUxVRVxuICAgIGNvbnN0IGJ1aWxkQXJnc1N0cmluZyA9IGJ1aWxkQXJnc1xuICAgICAgPyBPYmplY3QuZW50cmllcyhidWlsZEFyZ3MpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYC0tYnVpbGQtYXJnICR7a2V5fT0ke3ZhbHVlfWApXG4gICAgICAgIC5qb2luKCcgJylcbiAgICAgIDogJyc7XG5cbiAgICAvLyBDb25kaXRpb25hbCBEb2NrZXJodWIgbG9naW4gY29tbWFuZHNcbiAgICBjb25zdCBkb2NrZXJMb2dpbkNvbW1hbmRzID0gZG9ja2VyTG9naW5TZWNyZXRBcm5cbiAgICAgID8gW1xuICAgICAgICAnZWNobyBcIlJldHJpZXZpbmcgRG9ja2VyIGNyZWRlbnRpYWxzIGZyb20gU2VjcmV0cyBNYW5hZ2VyLi4uXCInLFxuICAgICAgICBgRE9DS0VSX1VTRVJOQU1FPSQoYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtkb2NrZXJMb2dpblNlY3JldEFybn0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCB8IGpxIC1yIC51c2VybmFtZSlgLFxuICAgICAgICBgRE9DS0VSX1BBU1NXT1JEPSQoYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtkb2NrZXJMb2dpblNlY3JldEFybn0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCB8IGpxIC1yIC5wYXNzd29yZClgLFxuICAgICAgICAnZWNobyBcIkxvZ2dpbmcgaW4gdG8gRG9ja2VyLi4uXCInLFxuICAgICAgICAnZWNobyAkRE9DS0VSX1BBU1NXT1JEIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgJERPQ0tFUl9VU0VSTkFNRSAtLXBhc3N3b3JkLXN0ZGluJyxcbiAgICAgIF1cbiAgICAgIDogWydlY2hvIFwiTm8gRG9ja2VyIGNyZWRlbnRpYWxzIHByb3ZpZGVkLiBTa2lwcGluZyBsb2dpbiBzdGVwLlwiJ107XG5cbiAgICAvLyBDcmVhdGUgYSBDb2RlQnVpbGQgcHJvamVjdFxuICAgIGNvbnN0IGNvZGVCdWlsZFByb2plY3QgPSBuZXcgUHJvamVjdCh0aGlzLCAnVUlDb2RlQnVpbGRQcm9qZWN0Jywge1xuICAgICAgc291cmNlOiBTb3VyY2UuczMoe1xuICAgICAgICBidWNrZXQ6IHNvdXJjZUFzc2V0LmJ1Y2tldCxcbiAgICAgICAgcGF0aDogc291cmNlQXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IExpbnV4QnVpbGRJbWFnZS5TVEFOREFSRF83XzAsXG4gICAgICAgIHByaXZpbGVnZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHtcbiAgICAgICAgRUNSX1JFUE9fVVJJOiB7IHZhbHVlOiB0aGlzLmVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSB9LFxuICAgICAgICBCVUlMRF9BUkdTOiB7IHZhbHVlOiBidWlsZEFyZ3NTdHJpbmcgfSxcbiAgICAgIH0sXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZV9idWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgLi4uZG9ja2VyTG9naW5Db21tYW5kcyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJSZXRyaWV2aW5nIEFXUyBBY2NvdW50IElELi4uXCInLFxuICAgICAgICAgICAgICAnZXhwb3J0IEFDQ09VTlRfSUQ9JChhd3Mgc3RzIGdldC1jYWxsZXItaWRlbnRpdHkgLS1xdWVyeSBBY2NvdW50IC0tb3V0cHV0IHRleHQpJyxcbiAgICAgICAgICAgICAgJ2VjaG8gXCJMb2dnaW5nIGluIHRvIEFtYXpvbiBFQ1IuLi5cIicsXG4gICAgICAgICAgICAgICdhd3MgZWNyIGdldC1sb2dpbi1wYXNzd29yZCAtLXJlZ2lvbiAkQVdTX0RFRkFVTFRfUkVHSU9OIHwgZG9ja2VyIGxvZ2luIC0tdXNlcm5hbWUgQVdTIC0tcGFzc3dvcmQtc3RkaW4gJEFDQ09VTlRfSUQuZGtyLmVjci4kQVdTX0RFRkFVTFRfUkVHSU9OLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJ1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBCdWlsZCBwaGFzZTogQnVpbGRpbmcgdGhlIERvY2tlciBpbWFnZS4uLicsXG4gICAgICAgICAgICAgICdkb2NrZXIgYnVpbGQgJEJVSUxEX0FSR1MgLXQgJEVDUl9SRVBPX1VSSTpsYXRlc3QgJENPREVCVUlMRF9TUkNfRElSJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZWNobyBQb3N0LWJ1aWxkIHBoYXNlOiBQdXNoaW5nIHRoZSBEb2NrZXIgaW1hZ2UuLi4nLFxuICAgICAgICAgICAgICAnZG9ja2VyIHB1c2ggJEVDUl9SRVBPX1VSSTpsYXRlc3QnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBDb2RlQnVpbGRcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChjb2RlQnVpbGRQcm9qZWN0KTtcblxuICAgIGNvZGVCdWlsZFByb2plY3Qucm9sZSEuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJywgJ2VjcjpHZXREb3dubG9hZFVybEZvckxheWVyJywgJ2VjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHknXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5lY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlBcm5dLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmIChkb2NrZXJMb2dpblNlY3JldEFybikge1xuICAgICAgY29kZUJ1aWxkUHJvamVjdC5yb2xlIS5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZSddLFxuICAgICAgICAgIHJlc291cmNlczogW2RvY2tlckxvZ2luU2VjcmV0QXJuXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEdyYW50IENvZGVCdWlsZCBhY2Nlc3MgdG8gdGhlIEtNUyBrZXlcbiAgICBlbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdERlY3J5cHQoY29kZUJ1aWxkUHJvamVjdC5yb2xlISk7XG5cbiAgICAvLyBDcmVhdGUgTGFtYmRhIGZ1bmN0aW9ucyBmb3Igb25FdmVudCBhbmQgaXNDb21wbGV0ZSBoYW5kbGVyc1xuICAgIGNvbnN0IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ09uRXZlbnRIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL29uRXZlbnQnKSksXG4gICAgICBoYW5kbGVyOiAnb25FdmVudC5oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgb25FdmVudEhhbmRsZXJGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydjb2RlYnVpbGQ6U3RhcnRCdWlsZCddLFxuICAgICAgICByZXNvdXJjZXM6IFtjb2RlQnVpbGRQcm9qZWN0LnByb2plY3RBcm5dLCAvLyBSZXN0cmljdCB0byBzcGVjaWZpYyBwcm9qZWN0XG4gICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IGlzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb24odGhpcywgJ0lzQ29tcGxldGVIYW5kbGVyRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uL2lzQ29tcGxldGUnKSksXG4gICAgICBoYW5kbGVyOiAnaXNDb21wbGV0ZS5oYW5kbGVyJyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgIH0pO1xuXG4gICAgaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdjb2RlYnVpbGQ6QmF0Y2hHZXRCdWlsZHMnLFxuICAgICAgICAgICdjb2RlYnVpbGQ6TGlzdEJ1aWxkc0ZvclByb2plY3QnLFxuICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zJyxcbiAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgTGFtYmRhIGZ1bmN0aW9ucyBhY2Nlc3MgdG8gS01TIGtleSBhbmQgRUNSXG4gICAgZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24pO1xuICAgIGVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0RGVjcnlwdChpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uKTtcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChvbkV2ZW50SGFuZGxlckZ1bmN0aW9uKTtcbiAgICB0aGlzLmVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChpc0NvbXBsZXRlSGFuZGxlckZ1bmN0aW9uKTtcblxuICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlclxuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IFByb3ZpZGVyKHRoaXMsICdDdXN0b21SZXNvdXJjZVByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IG9uRXZlbnRIYW5kbGVyRnVuY3Rpb24sXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogaXNDb21wbGV0ZUhhbmRsZXJGdW5jdGlvbixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgIH0pO1xuXG4gICAgLy8gRGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICBjb25zdCBidWlsZFRyaWdnZXJSZXNvdXJjZSA9IG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnQnVpbGRUcmlnZ2VyUmVzb3VyY2UnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IHByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgUHJvamVjdE5hbWU6IGNvZGVCdWlsZFByb2plY3QucHJvamVjdE5hbWUsXG4gICAgICAgIFRyaWdnZXI6IGNyeXB0by5yYW5kb21VVUlEKCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgYnVpbGRUcmlnZ2VyUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGNvZGVCdWlsZFByb2plY3QpO1xuICAgIHRoaXMuY29udGFpbmVySW1hZ2UgPSBDb250YWluZXJJbWFnZS5mcm9tRWNyUmVwb3NpdG9yeSh0aGlzLmVjclJlcG9zaXRvcnkpO1xuICAgIHRoaXMuZG9ja2VySW1hZ2VDb2RlID0gRG9ja2VySW1hZ2VDb2RlLmZyb21FY3IodGhpcy5lY3JSZXBvc2l0b3J5KTtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -28,7 +28,9 @@
|
|
|
28
28
|
"unbump": "npx projen unbump",
|
|
29
29
|
"upgrade": "npx projen upgrade",
|
|
30
30
|
"watch": "npx projen watch",
|
|
31
|
-
"projen": "npx projen"
|
|
31
|
+
"projen": "npx projen",
|
|
32
|
+
"local-deploy": "cdk deploy --app \"npx ts-node src/integ.default.ts\"",
|
|
33
|
+
"local-destroy": "cdk destroy --app \"npx ts-node src/integ.default.ts\""
|
|
32
34
|
},
|
|
33
35
|
"author": {
|
|
34
36
|
"name": "AlexTech314",
|
|
@@ -94,7 +96,7 @@
|
|
|
94
96
|
"publishConfig": {
|
|
95
97
|
"access": "public"
|
|
96
98
|
},
|
|
97
|
-
"version": "1.
|
|
99
|
+
"version": "1.1.1",
|
|
98
100
|
"jest": {
|
|
99
101
|
"coverageProvider": "v8",
|
|
100
102
|
"testMatch": [
|