@ashishpandeyone/cdk-lambda-web-function 0.1.9 → 0.1.11
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 +184 -95
- package/.jsii.tabl.json +1 -1
- package/API.md +154 -0
- package/README.md +53 -0
- package/lib/nodejs-web-function.d.ts +5 -0
- package/lib/nodejs-web-function.js +9 -2
- package/lib/private/property-injection.d.ts +6 -0
- package/lib/private/property-injection.js +19 -0
- package/lib/web-function-deployment.js +1 -1
- package/lib/web-function-endpoint.js +1 -1
- package/lib/web-function-grants.js +1 -1
- package/lib/web-function-origin.js +1 -1
- package/lib/web-function-revision.js +1 -1
- package/lib/web-function.d.ts +32 -0
- package/lib/web-function.js +60 -3
- package/package.json +2 -1
package/API.md
CHANGED
|
@@ -63,6 +63,7 @@ new NodejsWebFunction(scope: Construct, id: string, props: NodejsWebFunctionProp
|
|
|
63
63
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.addEnvironment">addEnvironment</a></code> | Adds an environment variable. |
|
|
64
64
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.addPermission">addPermission</a></code> | Allows a principal in another account, an AWS service or an organization to call the function's endpoints, through the function's resource policy. |
|
|
65
65
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.addToRolePolicy">addToRolePolicy</a></code> | Adds a statement to the execution role's policy. |
|
|
66
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.encryptionKeyPolicyStatement">encryptionKeyPolicyStatement</a></code> | The key-policy statement Lambda needs to start this function's environments with `encryptionKey`: `kms:Decrypt` for `lambda.amazonaws.com`, limited to this function's revisions (`aws:SourceArn` and the encryption context Lambda sets). |
|
|
66
67
|
|
|
67
68
|
---
|
|
68
69
|
|
|
@@ -351,6 +352,17 @@ Adds a statement to the execution role's policy.
|
|
|
351
352
|
|
|
352
353
|
---
|
|
353
354
|
|
|
355
|
+
##### `encryptionKeyPolicyStatement` <a name="encryptionKeyPolicyStatement" id="@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.encryptionKeyPolicyStatement"></a>
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
public encryptionKeyPolicyStatement(): PolicyStatement
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
The key-policy statement Lambda needs to start this function's environments with `encryptionKey`: `kms:Decrypt` for `lambda.amazonaws.com`, limited to this function's revisions (`aws:SourceArn` and the encryption context Lambda sets).
|
|
362
|
+
|
|
363
|
+
It's added to `encryptionKey` when the key is defined in this app. Add it to every replica of a multi-Region key
|
|
364
|
+
yourself: replicas don't share their primary's policy.
|
|
365
|
+
|
|
354
366
|
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
|
|
355
367
|
|
|
356
368
|
| **Name** | **Description** |
|
|
@@ -529,6 +541,7 @@ Imports an existing Web Function in this stack's account and region by its name.
|
|
|
529
541
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.logGroup">logGroup</a></code> | <code>aws-cdk-lib.aws_logs.ILogGroup</code> | The home-region log group that receives the logs of every region the function serves from. |
|
|
530
542
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.revisionId">revisionId</a></code> | <code>string</code> | The ID of the current revision. |
|
|
531
543
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.role">role</a></code> | <code>aws-cdk-lib.aws_iam.IRole</code> | The execution role. |
|
|
544
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.encryptionKey">encryptionKey</a></code> | <code>aws-cdk-lib.aws_kms.IKey</code> | The customer managed key of the function's revisions, if any. |
|
|
532
545
|
|
|
533
546
|
---
|
|
534
547
|
|
|
@@ -702,6 +715,37 @@ The execution role.
|
|
|
702
715
|
|
|
703
716
|
---
|
|
704
717
|
|
|
718
|
+
##### `encryptionKey`<sup>Optional</sup> <a name="encryptionKey" id="@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.encryptionKey"></a>
|
|
719
|
+
|
|
720
|
+
```typescript
|
|
721
|
+
public readonly encryptionKey: IKey;
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
- *Type:* aws-cdk-lib.aws_kms.IKey
|
|
725
|
+
|
|
726
|
+
The customer managed key of the function's revisions, if any.
|
|
727
|
+
|
|
728
|
+
---
|
|
729
|
+
|
|
730
|
+
#### Constants <a name="Constants" id="Constants"></a>
|
|
731
|
+
|
|
732
|
+
| **Name** | **Type** | **Description** |
|
|
733
|
+
| --- | --- | --- |
|
|
734
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.PROPERTY_INJECTION_ID">PROPERTY_INJECTION_ID</a></code> | <code>string</code> | Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`). A `NodejsWebFunction` gets its own injector first, then `WebFunction`'s, as aws-cdk-lib's `NodejsFunction` does with `Function`'s. |
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
738
|
+
##### `PROPERTY_INJECTION_ID`<sup>Required</sup> <a name="PROPERTY_INJECTION_ID" id="@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction.property.PROPERTY_INJECTION_ID"></a>
|
|
739
|
+
|
|
740
|
+
```typescript
|
|
741
|
+
public readonly PROPERTY_INJECTION_ID: string;
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
- *Type:* string
|
|
745
|
+
|
|
746
|
+
Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`). A `NodejsWebFunction` gets its own injector first, then `WebFunction`'s, as aws-cdk-lib's `NodejsFunction` does with `Function`'s.
|
|
747
|
+
|
|
748
|
+
---
|
|
705
749
|
|
|
706
750
|
### WebFunction <a name="WebFunction" id="@ashishpandeyone/cdk-lambda-web-function.WebFunction"></a>
|
|
707
751
|
|
|
@@ -769,6 +813,7 @@ new WebFunction(scope: Construct, id: string, props: WebFunctionProps)
|
|
|
769
813
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.addEnvironment">addEnvironment</a></code> | Adds an environment variable. |
|
|
770
814
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.addPermission">addPermission</a></code> | Allows a principal in another account, an AWS service or an organization to call the function's endpoints, through the function's resource policy. |
|
|
771
815
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.addToRolePolicy">addToRolePolicy</a></code> | Adds a statement to the execution role's policy. |
|
|
816
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.encryptionKeyPolicyStatement">encryptionKeyPolicyStatement</a></code> | The key-policy statement Lambda needs to start this function's environments with `encryptionKey`: `kms:Decrypt` for `lambda.amazonaws.com`, limited to this function's revisions (`aws:SourceArn` and the encryption context Lambda sets). |
|
|
772
817
|
|
|
773
818
|
---
|
|
774
819
|
|
|
@@ -1057,6 +1102,17 @@ Adds a statement to the execution role's policy.
|
|
|
1057
1102
|
|
|
1058
1103
|
---
|
|
1059
1104
|
|
|
1105
|
+
##### `encryptionKeyPolicyStatement` <a name="encryptionKeyPolicyStatement" id="@ashishpandeyone/cdk-lambda-web-function.WebFunction.encryptionKeyPolicyStatement"></a>
|
|
1106
|
+
|
|
1107
|
+
```typescript
|
|
1108
|
+
public encryptionKeyPolicyStatement(): PolicyStatement
|
|
1109
|
+
```
|
|
1110
|
+
|
|
1111
|
+
The key-policy statement Lambda needs to start this function's environments with `encryptionKey`: `kms:Decrypt` for `lambda.amazonaws.com`, limited to this function's revisions (`aws:SourceArn` and the encryption context Lambda sets).
|
|
1112
|
+
|
|
1113
|
+
It's added to `encryptionKey` when the key is defined in this app. Add it to every replica of a multi-Region key
|
|
1114
|
+
yourself: replicas don't share their primary's policy.
|
|
1115
|
+
|
|
1060
1116
|
#### Static Functions <a name="Static Functions" id="Static Functions"></a>
|
|
1061
1117
|
|
|
1062
1118
|
| **Name** | **Description** |
|
|
@@ -1235,6 +1291,7 @@ Imports an existing Web Function in this stack's account and region by its name.
|
|
|
1235
1291
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.logGroup">logGroup</a></code> | <code>aws-cdk-lib.aws_logs.ILogGroup</code> | The home-region log group that receives the logs of every region the function serves from. |
|
|
1236
1292
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.revisionId">revisionId</a></code> | <code>string</code> | The ID of the current revision. |
|
|
1237
1293
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.role">role</a></code> | <code>aws-cdk-lib.aws_iam.IRole</code> | The execution role. |
|
|
1294
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.encryptionKey">encryptionKey</a></code> | <code>aws-cdk-lib.aws_kms.IKey</code> | The customer managed key of the function's revisions, if any. |
|
|
1238
1295
|
|
|
1239
1296
|
---
|
|
1240
1297
|
|
|
@@ -1408,6 +1465,37 @@ The execution role.
|
|
|
1408
1465
|
|
|
1409
1466
|
---
|
|
1410
1467
|
|
|
1468
|
+
##### `encryptionKey`<sup>Optional</sup> <a name="encryptionKey" id="@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.encryptionKey"></a>
|
|
1469
|
+
|
|
1470
|
+
```typescript
|
|
1471
|
+
public readonly encryptionKey: IKey;
|
|
1472
|
+
```
|
|
1473
|
+
|
|
1474
|
+
- *Type:* aws-cdk-lib.aws_kms.IKey
|
|
1475
|
+
|
|
1476
|
+
The customer managed key of the function's revisions, if any.
|
|
1477
|
+
|
|
1478
|
+
---
|
|
1479
|
+
|
|
1480
|
+
#### Constants <a name="Constants" id="Constants"></a>
|
|
1481
|
+
|
|
1482
|
+
| **Name** | **Type** | **Description** |
|
|
1483
|
+
| --- | --- | --- |
|
|
1484
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.PROPERTY_INJECTION_ID">PROPERTY_INJECTION_ID</a></code> | <code>string</code> | Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`), which can set default props for every `WebFunction` under a scope. Injectors for `WebFunction` also apply to `NodejsWebFunction`. |
|
|
1485
|
+
|
|
1486
|
+
---
|
|
1487
|
+
|
|
1488
|
+
##### `PROPERTY_INJECTION_ID`<sup>Required</sup> <a name="PROPERTY_INJECTION_ID" id="@ashishpandeyone/cdk-lambda-web-function.WebFunction.property.PROPERTY_INJECTION_ID"></a>
|
|
1489
|
+
|
|
1490
|
+
```typescript
|
|
1491
|
+
public readonly PROPERTY_INJECTION_ID: string;
|
|
1492
|
+
```
|
|
1493
|
+
|
|
1494
|
+
- *Type:* string
|
|
1495
|
+
|
|
1496
|
+
Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`), which can set default props for every `WebFunction` under a scope. Injectors for `WebFunction` also apply to `NodejsWebFunction`.
|
|
1497
|
+
|
|
1498
|
+
---
|
|
1411
1499
|
|
|
1412
1500
|
### WebFunctionBase <a name="WebFunctionBase" id="@ashishpandeyone/cdk-lambda-web-function.WebFunctionBase"></a>
|
|
1413
1501
|
|
|
@@ -2927,6 +3015,7 @@ const nodejsWebFunctionProps: NodejsWebFunctionProps = { ... }
|
|
|
2927
3015
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.authType">authType</a></code> | <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionAuthType">WebFunctionAuthType</a></code> | How callers of the endpoint are authenticated. |
|
|
2928
3016
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.applicationLogLevelV2">applicationLogLevelV2</a></code> | <code>aws-cdk-lib.aws_lambda.ApplicationLogLevel</code> | The minimum level of application logs to keep. |
|
|
2929
3017
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.description">description</a></code> | <code>string</code> | A description of the function's code and configuration. |
|
|
3018
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.encryptionKey">encryptionKey</a></code> | <code>aws-cdk-lib.aws_kms.IKey</code> | A customer managed KMS key for the function's revisions: their code and environment variables. |
|
|
2930
3019
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.endpoint">endpoint</a></code> | <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpointOptions">WebFunctionEndpointOptions</a></code> | The default endpoint (`fn.endpoint`): where it serves from, its name and limits. It serves the current revision; route it elsewhere with `fn.endpoint.routeTraffic()`. Add more endpoints with `addEndpoint`. |
|
|
2931
3020
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.environment">environment</a></code> | <code>{[ key: string ]: string}</code> | Environment variables. |
|
|
2932
3021
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.logRemovalPolicy">logRemovalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | What happens to the log groups when the function is removed: RETAIN or DESTROY. |
|
|
@@ -2983,6 +3072,27 @@ A description of the function's code and configuration.
|
|
|
2983
3072
|
|
|
2984
3073
|
---
|
|
2985
3074
|
|
|
3075
|
+
##### `encryptionKey`<sup>Optional</sup> <a name="encryptionKey" id="@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.encryptionKey"></a>
|
|
3076
|
+
|
|
3077
|
+
```typescript
|
|
3078
|
+
public readonly encryptionKey: IKey;
|
|
3079
|
+
```
|
|
3080
|
+
|
|
3081
|
+
- *Type:* aws-cdk-lib.aws_kms.IKey
|
|
3082
|
+
- *Default:* an AWS owned key
|
|
3083
|
+
|
|
3084
|
+
A customer managed KMS key for the function's revisions: their code and environment variables.
|
|
3085
|
+
|
|
3086
|
+
A `PER_REGION` or `MULTI_REGION` endpoint needs a **multi-Region key** with a replica in every region it serves
|
|
3087
|
+
from, and each replica's policy must allow Lambda to decrypt (see `encryptionKeyPolicyStatement()`). A key defined
|
|
3088
|
+
in this app gets that statement added to its own policy.
|
|
3089
|
+
|
|
3090
|
+
Changing the key creates a new revision. Earlier revisions, including the ones kept as rollback targets, still
|
|
3091
|
+
need their key.
|
|
3092
|
+
[disable-awslint:prefer-ref-interface]
|
|
3093
|
+
|
|
3094
|
+
---
|
|
3095
|
+
|
|
2986
3096
|
##### `endpoint`<sup>Optional</sup> <a name="endpoint" id="@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunctionProps.property.endpoint"></a>
|
|
2987
3097
|
|
|
2988
3098
|
```typescript
|
|
@@ -3575,6 +3685,7 @@ const webFunctionOptions: WebFunctionOptions = { ... }
|
|
|
3575
3685
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.authType">authType</a></code> | <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionAuthType">WebFunctionAuthType</a></code> | How callers of the endpoint are authenticated. |
|
|
3576
3686
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.applicationLogLevelV2">applicationLogLevelV2</a></code> | <code>aws-cdk-lib.aws_lambda.ApplicationLogLevel</code> | The minimum level of application logs to keep. |
|
|
3577
3687
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.description">description</a></code> | <code>string</code> | A description of the function's code and configuration. |
|
|
3688
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.encryptionKey">encryptionKey</a></code> | <code>aws-cdk-lib.aws_kms.IKey</code> | A customer managed KMS key for the function's revisions: their code and environment variables. |
|
|
3578
3689
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.endpoint">endpoint</a></code> | <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpointOptions">WebFunctionEndpointOptions</a></code> | The default endpoint (`fn.endpoint`): where it serves from, its name and limits. It serves the current revision; route it elsewhere with `fn.endpoint.routeTraffic()`. Add more endpoints with `addEndpoint`. |
|
|
3579
3690
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.environment">environment</a></code> | <code>{[ key: string ]: string}</code> | Environment variables. |
|
|
3580
3691
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.logRemovalPolicy">logRemovalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | What happens to the log groups when the function is removed: RETAIN or DESTROY. |
|
|
@@ -3626,6 +3737,27 @@ A description of the function's code and configuration.
|
|
|
3626
3737
|
|
|
3627
3738
|
---
|
|
3628
3739
|
|
|
3740
|
+
##### `encryptionKey`<sup>Optional</sup> <a name="encryptionKey" id="@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.encryptionKey"></a>
|
|
3741
|
+
|
|
3742
|
+
```typescript
|
|
3743
|
+
public readonly encryptionKey: IKey;
|
|
3744
|
+
```
|
|
3745
|
+
|
|
3746
|
+
- *Type:* aws-cdk-lib.aws_kms.IKey
|
|
3747
|
+
- *Default:* an AWS owned key
|
|
3748
|
+
|
|
3749
|
+
A customer managed KMS key for the function's revisions: their code and environment variables.
|
|
3750
|
+
|
|
3751
|
+
A `PER_REGION` or `MULTI_REGION` endpoint needs a **multi-Region key** with a replica in every region it serves
|
|
3752
|
+
from, and each replica's policy must allow Lambda to decrypt (see `encryptionKeyPolicyStatement()`). A key defined
|
|
3753
|
+
in this app gets that statement added to its own policy.
|
|
3754
|
+
|
|
3755
|
+
Changing the key creates a new revision. Earlier revisions, including the ones kept as rollback targets, still
|
|
3756
|
+
need their key.
|
|
3757
|
+
[disable-awslint:prefer-ref-interface]
|
|
3758
|
+
|
|
3759
|
+
---
|
|
3760
|
+
|
|
3629
3761
|
##### `endpoint`<sup>Optional</sup> <a name="endpoint" id="@ashishpandeyone/cdk-lambda-web-function.WebFunctionOptions.property.endpoint"></a>
|
|
3630
3762
|
|
|
3631
3763
|
```typescript
|
|
@@ -4334,6 +4466,7 @@ const webFunctionProps: WebFunctionProps = { ... }
|
|
|
4334
4466
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.authType">authType</a></code> | <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionAuthType">WebFunctionAuthType</a></code> | How callers of the endpoint are authenticated. |
|
|
4335
4467
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.applicationLogLevelV2">applicationLogLevelV2</a></code> | <code>aws-cdk-lib.aws_lambda.ApplicationLogLevel</code> | The minimum level of application logs to keep. |
|
|
4336
4468
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.description">description</a></code> | <code>string</code> | A description of the function's code and configuration. |
|
|
4469
|
+
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.encryptionKey">encryptionKey</a></code> | <code>aws-cdk-lib.aws_kms.IKey</code> | A customer managed KMS key for the function's revisions: their code and environment variables. |
|
|
4337
4470
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.endpoint">endpoint</a></code> | <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpointOptions">WebFunctionEndpointOptions</a></code> | The default endpoint (`fn.endpoint`): where it serves from, its name and limits. It serves the current revision; route it elsewhere with `fn.endpoint.routeTraffic()`. Add more endpoints with `addEndpoint`. |
|
|
4338
4471
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.environment">environment</a></code> | <code>{[ key: string ]: string}</code> | Environment variables. |
|
|
4339
4472
|
| <code><a href="#@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.logRemovalPolicy">logRemovalPolicy</a></code> | <code>aws-cdk-lib.RemovalPolicy</code> | What happens to the log groups when the function is removed: RETAIN or DESTROY. |
|
|
@@ -4388,6 +4521,27 @@ A description of the function's code and configuration.
|
|
|
4388
4521
|
|
|
4389
4522
|
---
|
|
4390
4523
|
|
|
4524
|
+
##### `encryptionKey`<sup>Optional</sup> <a name="encryptionKey" id="@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.encryptionKey"></a>
|
|
4525
|
+
|
|
4526
|
+
```typescript
|
|
4527
|
+
public readonly encryptionKey: IKey;
|
|
4528
|
+
```
|
|
4529
|
+
|
|
4530
|
+
- *Type:* aws-cdk-lib.aws_kms.IKey
|
|
4531
|
+
- *Default:* an AWS owned key
|
|
4532
|
+
|
|
4533
|
+
A customer managed KMS key for the function's revisions: their code and environment variables.
|
|
4534
|
+
|
|
4535
|
+
A `PER_REGION` or `MULTI_REGION` endpoint needs a **multi-Region key** with a replica in every region it serves
|
|
4536
|
+
from, and each replica's policy must allow Lambda to decrypt (see `encryptionKeyPolicyStatement()`). A key defined
|
|
4537
|
+
in this app gets that statement added to its own policy.
|
|
4538
|
+
|
|
4539
|
+
Changing the key creates a new revision. Earlier revisions, including the ones kept as rollback targets, still
|
|
4540
|
+
need their key.
|
|
4541
|
+
[disable-awslint:prefer-ref-interface]
|
|
4542
|
+
|
|
4543
|
+
---
|
|
4544
|
+
|
|
4391
4545
|
##### `endpoint`<sup>Optional</sup> <a name="endpoint" id="@ashishpandeyone/cdk-lambda-web-function.WebFunctionProps.property.endpoint"></a>
|
|
4392
4546
|
|
|
4393
4547
|
```typescript
|
package/README.md
CHANGED
|
@@ -279,6 +279,59 @@ table.grantReadWriteData(api); // the default role trusts lambda.amazo
|
|
|
279
279
|
- **The default execution role can only write to the function's own log groups**: the home region's, and the `.local` copy in every region it serves from. That's the minimum AWS documents for Web Functions. It doesn't use `AWSLambdaBasicExecutionRole`, which can also create any log group. Pass `role` to use your own, and include those log permissions.
|
|
280
280
|
- **Renaming the function replaces it and changes its URL.** A generated name depends on the construct path, so moving the construct renames it too.
|
|
281
281
|
|
|
282
|
+
### Encryption
|
|
283
|
+
|
|
284
|
+
Lambda encrypts each revision's code and environment variables with an AWS owned key. To use your own key, pass `encryptionKey`:
|
|
285
|
+
|
|
286
|
+
```ts
|
|
287
|
+
declare const keyStack: Stack; // deploys first
|
|
288
|
+
declare const replicaStack: Stack; // in us-east-1, deploys before this stack
|
|
289
|
+
|
|
290
|
+
const key = new kms.Key(keyStack, 'Key', { multiRegion: true });
|
|
291
|
+
const api = new WebFunction(this, 'Api', {
|
|
292
|
+
runtime: lambda.Runtime.NODEJS_24_X,
|
|
293
|
+
code: lambda.Code.fromAsset('build'),
|
|
294
|
+
authType: WebFunctionAuthType.AWS_IAM,
|
|
295
|
+
endpoint: { endpointType: WebFunctionEndpointType.PER_REGION, regions: ['us-east-1'] },
|
|
296
|
+
encryptionKey: key,
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
// One replica per region the endpoint serves from, with Lambda's statement in its own policy.
|
|
300
|
+
new kms.CfnReplicaKey(replicaStack, 'KeyReplica', {
|
|
301
|
+
primaryKeyArn: key.keyArn,
|
|
302
|
+
keyPolicy: new iam.PolicyDocument({
|
|
303
|
+
statements: [
|
|
304
|
+
new iam.PolicyStatement({ principals: [new iam.AccountRootPrincipal()], actions: ['kms:*'], resources: ['*'] }),
|
|
305
|
+
api.encryptionKeyPolicyStatement(),
|
|
306
|
+
],
|
|
307
|
+
}),
|
|
308
|
+
});
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
- **A key defined in your app gets Lambda's statement automatically.** It allows `kms:Decrypt` for `lambda.amazonaws.com`, limited to this function's revisions through `aws:SourceArn` and the encryption context Lambda sets. For an imported key, add `encryptionKeyPolicyStatement()` to its policy yourself.
|
|
312
|
+
- **`PER_REGION` and `MULTI_REGION` endpoints need a multi-Region key**, with a replica in every region they serve from. The replicas must exist before the endpoint, so put the key and its replicas in stacks that deploy before the function's. Replica policies aren't copied from the primary, so each one needs `encryptionKeyPolicyStatement()`. With a single-Region key, the endpoint fails to activate in its other regions and the whole deployment rolls back. The construct fails synthesis instead, when it can tell: a key in your app without `multiRegion`, or an imported key whose ID doesn't start with `mrk-`.
|
|
313
|
+
- **CloudFormation's role creates the revisions**, so it needs `kms:DescribeKey`, `kms:GenerateDataKey` and `kms:Decrypt` on the key. A key's default policy delegates to IAM, and CDK's default deployment role is allowed.
|
|
314
|
+
- **Changing the key creates a new revision.** Earlier revisions keep their key, including the ones kept as rollback targets (`revisionRetention`). Keep the old key enabled while any of them might serve traffic again.
|
|
315
|
+
- **Disabling the key, or removing Lambda's access, stops new execution environments from starting.** Running ones keep their decrypted copy for a while, so this doesn't contain traffic immediately.
|
|
316
|
+
|
|
317
|
+
### Defaults for every function (property injection)
|
|
318
|
+
|
|
319
|
+
To give every function under a scope the same defaults, register a property injector for `WebFunction.PROPERTY_INJECTION_ID`, as you would for aws-cdk-lib's constructs. For example, a team's log retention:
|
|
320
|
+
|
|
321
|
+
```ts
|
|
322
|
+
class TeamDefaults implements IPropertyInjector {
|
|
323
|
+
public readonly constructUniqueId = WebFunction.PROPERTY_INJECTION_ID;
|
|
324
|
+
public inject(originalProps: WebFunctionProps): WebFunctionProps {
|
|
325
|
+
// The team's defaults, with explicit props winning.
|
|
326
|
+
return Object.assign({ logRetention: logs.RetentionDays.ONE_MONTH }, originalProps);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
PropertyInjectors.of(this).add(new TeamDefaults()); // or on the app, for every stack
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
- An injector applies to functions created under the scope it's added to. The nearest one wins.
|
|
333
|
+
- `NodejsWebFunction` has its own ID (`NodejsWebFunction.PROPERTY_INJECTION_ID`). Its injector runs first, then `WebFunction`'s, as with aws-cdk-lib's `NodejsFunction` and `Function`.
|
|
334
|
+
|
|
282
335
|
### Bundling TypeScript with `NodejsWebFunction`
|
|
283
336
|
|
|
284
337
|
`NodejsWebFunction` is a `WebFunction` that bundles your server from a TypeScript or JavaScript entry file with esbuild, like `NodejsFunction` does for Lambda functions:
|
|
@@ -149,5 +149,10 @@ export interface NodejsWebFunctionProps extends WebFunctionOptions {
|
|
|
149
149
|
* bundle, and `NODE_OPTIONS=--enable-source-maps` when source maps are on.
|
|
150
150
|
*/
|
|
151
151
|
export declare class NodejsWebFunction extends WebFunction {
|
|
152
|
+
/**
|
|
153
|
+
* Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`). A `NodejsWebFunction` gets
|
|
154
|
+
* its own injector first, then `WebFunction`'s, as aws-cdk-lib's `NodejsFunction` does with `Function`'s.
|
|
155
|
+
*/
|
|
156
|
+
static readonly PROPERTY_INJECTION_ID: string;
|
|
152
157
|
constructor(scope: Construct, id: string, props: NodejsWebFunctionProps);
|
|
153
158
|
}
|
|
@@ -40,6 +40,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
40
40
|
const lambda = __importStar(require("aws-cdk-lib/aws-lambda"));
|
|
41
41
|
const aws_lambda_nodejs_1 = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
42
42
|
const bundling_1 = require("./private/bundling");
|
|
43
|
+
const property_injection_1 = require("./private/property-injection");
|
|
43
44
|
const web_function_1 = require("./web-function");
|
|
44
45
|
/**
|
|
45
46
|
* A `WebFunction` whose code is bundled from a TypeScript or JavaScript entry file with esbuild,
|
|
@@ -49,8 +50,14 @@ const web_function_1 = require("./web-function");
|
|
|
49
50
|
* bundle, and `NODE_OPTIONS=--enable-source-maps` when source maps are on.
|
|
50
51
|
*/
|
|
51
52
|
class NodejsWebFunction extends web_function_1.WebFunction {
|
|
52
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.
|
|
53
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction", version: "0.1.11" };
|
|
54
|
+
/**
|
|
55
|
+
* Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`). A `NodejsWebFunction` gets
|
|
56
|
+
* its own injector first, then `WebFunction`'s, as aws-cdk-lib's `NodejsFunction` does with `Function`'s.
|
|
57
|
+
*/
|
|
58
|
+
static PROPERTY_INJECTION_ID = '@ashishpandeyone/cdk-lambda-web-function.NodejsWebFunction';
|
|
53
59
|
constructor(scope, id, props) {
|
|
60
|
+
props = (0, property_injection_1.injectProps)(NodejsWebFunction.PROPERTY_INJECTION_ID, props, scope, id);
|
|
54
61
|
const runtime = props.runtime ?? lambda.Runtime.NODEJS_24_X;
|
|
55
62
|
const entry = (0, bundling_1.resolveEntry)(props.entry);
|
|
56
63
|
const projectRoot = path.resolve(props.projectRoot ?? path.dirname(lockFile(props, entry)));
|
|
@@ -110,4 +117,4 @@ function withSourceMaps(environment, sourceMap) {
|
|
|
110
117
|
return environment;
|
|
111
118
|
return { ...environment, NODE_OPTIONS: existing ? `${existing} --enable-source-maps` : '--enable-source-maps' };
|
|
112
119
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLXdlYi1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ub2RlanMtd2ViLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsNkNBQTBDO0FBQzFDLCtEQUFpRDtBQUNqRCxxRUFBNkQ7QUFFN0QsaURBQXlGO0FBQ3pGLGlEQUFzRTtBQXdKdEU7Ozs7OztHQU1HO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSwwQkFBVzs7SUFDaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFHLElBQUEsdUJBQVksRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSywrQkFBK0IsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxnQ0FBWSxDQUFDLEdBQUcsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sSUFBSSxHQUFHLElBQUEsc0JBQVcsRUFBQztZQUN2QixLQUFLO1lBQ0wsV0FBVztZQUNYLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztZQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLElBQUksS0FBSztZQUNuRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSx5QkFBVyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsT0FBTyxDQUFDLElBQUksZUFBZSxDQUFDO1lBQy9HLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJO2dCQUN4QixTQUFTO2dCQUNULE1BQU07Z0JBQ04sTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDL0QsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlLElBQUksRUFBRTtnQkFDeEMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDdEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDdEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO2dCQUNoQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07Z0JBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtnQkFDcEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSztnQkFDL0IsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRTthQUNqQztTQUNGLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsT0FBTztZQUNQLElBQUk7WUFDSixVQUFVLEVBQUUsSUFBQSxxQkFBVSxFQUFDLE1BQU0sQ0FBQztZQUM5QixXQUFXLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO1NBQzFELENBQUMsQ0FBQztJQUNMLENBQUM7O0FBM0NILDhDQTRDQztBQUVELFNBQVMsUUFBUSxDQUFDLEtBQTZCLEVBQUUsS0FBYTtJQUM1RCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBQSx1QkFBWSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHFGQUFxRixLQUFLLHVDQUF1QyxDQUFDLENBQUM7SUFDckosQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFTLGNBQWMsQ0FBQyxXQUFrRCxFQUFFLFNBQWtCO0lBQzVGLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxFQUFFLFlBQVksQ0FBQztJQUMzQyxJQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDaEYsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztBQUNsSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBPdXRwdXRGb3JtYXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgYnVuZGxlZENvZGUsIGZpbmRMb2NrRmlsZSwgb3V0cHV0RmlsZSwgcmVzb2x2ZUVudHJ5IH0gZnJvbSAnLi9wcml2YXRlL2J1bmRsaW5nJztcbmltcG9ydCB7IFdlYkZ1bmN0aW9uLCB0eXBlIFdlYkZ1bmN0aW9uT3B0aW9ucyB9IGZyb20gJy4vd2ViLWZ1bmN0aW9uJztcblxuLyoqXG4gKiBIb3cgYE5vZGVqc1dlYkZ1bmN0aW9uYCBidW5kbGVzIHRoZSBzZXJ2ZXIgd2l0aCBlc2J1aWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVqc1dlYkZ1bmN0aW9uQnVuZGxpbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1pbmlmeSB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHNvdXJjZSBtYXAsIGFuZCBzZXQgYE5PREVfT1BUSU9OUz0tLWVuYWJsZS1zb3VyY2UtbWFwc2Agc28gc3RhY2sgdHJhY2VzIHBvaW50IGF0IHlvdXIgc291cmNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlTWFwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3V0cHV0IGZvcm1hdC4gRVNNIGlzIHdyaXR0ZW4gdG8gYGluZGV4Lm1qc2AgKHdpdGggYSBgcmVxdWlyZWAgc2hpbSwgc28gQ29tbW9uSlMgZGVwZW5kZW5jaWVzXG4gICAqIHN1Y2ggYXMgRXhwcmVzcyB3b3JrKTsgQ29tbW9uSlMgdG8gYGluZGV4LmpzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgT3V0cHV0Rm9ybWF0LkVTTVxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0PzogT3V0cHV0Rm9ybWF0O1xuXG4gIC8qKlxuICAgKiBlc2J1aWxkIHRhcmdldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcnVudGltZSdzIE5vZGUuanMgdmVyc2lvbiwgZS5nLiBgbm9kZTI0YFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNb2R1bGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYnVuZGxlLiBUaGUgcnVudGltZSBoYXMgbm8gQVdTIFNESywgc28gYEBhd3Mtc2RrLypgIGlzIGJ1bmRsZWQgbGlrZVxuICAgKiBhbnkgb3RoZXIgZGVwZW5kZW5jeTsgb25seSBleGNsdWRlIG1vZHVsZXMgeW91IHByb3ZpZGUgYW5vdGhlciB3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxNb2R1bGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgZ2xvYmFsIGlkZW50aWZpZXJzIHdpdGggY29uc3RhbnQgZXhwcmVzc2lvbnMgKGVzYnVpbGQgYC0tZGVmaW5lYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmaW5lPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogZXNidWlsZCBsb2FkZXJzIGJ5IGZpbGUgZXh0ZW5zaW9uLCBlLmcuIGB7ICcucG5nJzogJ2RhdGF1cmwnIH1gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVzYnVpbGQncyBkZWZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgbG9hZGVyPzogeyBbZXh0OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGV4dCB0byBwcmVwZW5kIHRvIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYmFubmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZXh0IHRvIGFwcGVuZCB0byB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGZvb3Rlcj86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCBvZiB0aGUgdHNjb25maWcuanNvbiB0byB1c2UsIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3Qgb3IgYWJzb2x1dGUgKGluc2lkZSB0aGUgcHJvamVjdCByb290KS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlc2J1aWxkJ3MgbG9va3VwIGZyb20gdGhlIGVudHJ5IGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHRzY29uZmlnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZWVwIGZ1bmN0aW9uIGFuZCBjbGFzcyBuYW1lcyAoYC0ta2VlcC1uYW1lc2ApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkga2VlcE5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXh0cmEgZXNidWlsZCBhcmd1bWVudHMsIGUuZy4gYHsgJy0tbG9nLWxpbWl0JzogJzAnLCAnLS10cmVlLXNoYWtpbmcnOiB0cnVlIH1gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGVzYnVpbGRBcmdzPzogeyBbYXJnOiBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuIH07XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB3aGlsZSBidW5kbGluZyAobm90IGF0IHJ1bnRpbWUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQWx3YXlzIGJ1bmRsZSBpbiBEb2NrZXIsIGV2ZW4gaWYgZXNidWlsZCBpcyBpbnN0YWxsZWQgbG9jYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRG9ja2VyQnVuZGxpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgaW1hZ2UgZm9yIGJ1bmRsaW5nIHdoZW4gZXNidWlsZCBpc24ndCBpbnN0YWxsZWQgbG9jYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgYXJtNjQgQVdTIFNBTSBidWlsZCBpbWFnZSBmb3IgdGhlIHJ1bnRpbWUsIGUuZy4gYHB1YmxpYy5lY3IuYXdzL3NhbS9idWlsZC1ub2RlanMyNC54OmxhdGVzdC1hcm02NGBcbiAgICovXG4gIHJlYWRvbmx5IGRvY2tlckltYWdlPzogRG9ja2VySW1hZ2U7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBgTm9kZWpzV2ViRnVuY3Rpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVqc1dlYkZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBXZWJGdW5jdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGZpbGUgdGhhdCBzdGFydHMgeW91ciBzZXJ2ZXIgKFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCkuIEl0J3MgYnVuZGxlZCB3aXRoIGl0cyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICByZWFkb25seSBlbnRyeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZS5qcyBydW50aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjRfWFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZT86IGxhbWJkYS5SdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jayBmaWxlIHRoYXQgbWFya3MgdGhlIHByb2plY3Qgcm9vdCAod2hlcmUgZXNidWlsZCByZXNvbHZlcyBgbm9kZV9tb2R1bGVzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG5lYXJlc3QgYHBhY2thZ2UtbG9jay5qc29uYCwgYHlhcm4ubG9ja2AsIGBwbnBtLWxvY2sueWFtbGAgb3IgYGJ1bi5sb2NrKGIpYCBhYm92ZSB0aGUgZW50cnlcbiAgICovXG4gIHJlYWRvbmx5IGRlcHNMb2NrRmlsZVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0IHJvb3QuIE11c3QgY29udGFpbiB0aGUgZW50cnkgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGlyZWN0b3J5IG9mIHRoZSBsb2NrIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RSb290Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIHNlcnZlciBpcyBidW5kbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG1pbmlmaWVkIEVTTSB3aXRoIGEgc291cmNlIG1hcCwgdGFyZ2V0aW5nIHRoZSBydW50aW1lJ3MgTm9kZS5qcyB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBidW5kbGluZz86IE5vZGVqc1dlYkZ1bmN0aW9uQnVuZGxpbmdPcHRpb25zO1xufVxuXG4vKipcbiAqIEEgYFdlYkZ1bmN0aW9uYCB3aG9zZSBjb2RlIGlzIGJ1bmRsZWQgZnJvbSBhIFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCBlbnRyeSBmaWxlIHdpdGggZXNidWlsZCxcbiAqIGxpa2UgYE5vZGVqc0Z1bmN0aW9uYCBmb3IgTGFtYmRhIGZ1bmN0aW9ucy5cbiAqXG4gKiBCZXNpZGVzIGJ1bmRsaW5nLCBpdCBzZXRzIHdoYXQgYSBgbGFtYmRhLkNvZGVgIGFsb25lIGNhbid0OiB0aGUgZW50cnkgcG9pbnQgdGhhdCBtYXRjaGVzIHRoZVxuICogYnVuZGxlLCBhbmQgYE5PREVfT1BUSU9OUz0tLWVuYWJsZS1zb3VyY2UtbWFwc2Agd2hlbiBzb3VyY2UgbWFwcyBhcmUgb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlanNXZWJGdW5jdGlvbiBleHRlbmRzIFdlYkZ1bmN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vZGVqc1dlYkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBydW50aW1lID0gcHJvcHMucnVudGltZSA/PyBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjRfWDtcbiAgICBjb25zdCBlbnRyeSA9IHJlc29sdmVFbnRyeShwcm9wcy5lbnRyeSk7XG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvcHMucHJvamVjdFJvb3QgPz8gcGF0aC5kaXJuYW1lKGxvY2tGaWxlKHByb3BzLCBlbnRyeSkpKTtcbiAgICBpZiAocGF0aC5yZWxhdGl2ZShwcm9qZWN0Um9vdCwgZW50cnkpLnN0YXJ0c1dpdGgoJy4uJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZW50cnkgJHtlbnRyeX0gbXVzdCBiZSBpbnNpZGUgcHJvamVjdFJvb3QgJHtwcm9qZWN0Um9vdH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBiID0gcHJvcHMuYnVuZGxpbmcgPz8ge307XG4gICAgY29uc3QgZm9ybWF0ID0gYi5mb3JtYXQgPz8gT3V0cHV0Rm9ybWF0LkVTTTtcbiAgICBjb25zdCBzb3VyY2VNYXAgPSBiLnNvdXJjZU1hcCA/PyB0cnVlO1xuICAgIGNvbnN0IG5vZGVNYWpvciA9IC9ebm9kZWpzKFxcZCspLy5leGVjKHJ1bnRpbWUubmFtZSk/LlsxXTtcblxuICAgIGNvbnN0IGNvZGUgPSBidW5kbGVkQ29kZSh7XG4gICAgICBlbnRyeSxcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgZW52aXJvbm1lbnQ6IGIuZW52aXJvbm1lbnQsXG4gICAgICBmb3JjZURvY2tlckJ1bmRsaW5nOiBiLmZvcmNlRG9ja2VyQnVuZGxpbmcgPz8gZmFsc2UsXG4gICAgICBkb2NrZXJJbWFnZTogYi5kb2NrZXJJbWFnZSA/PyBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoYHB1YmxpYy5lY3IuYXdzL3NhbS9idWlsZC0ke3J1bnRpbWUubmFtZX06bGF0ZXN0LWFybTY0YCksXG4gICAgICBlc2J1aWxkOiB7XG4gICAgICAgIG1pbmlmeTogYi5taW5pZnkgPz8gdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwLFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIHRhcmdldDogYi50YXJnZXQgPz8gKG5vZGVNYWpvciA/IGBub2RlJHtub2RlTWFqb3J9YCA6ICdub2RlMjQnKSxcbiAgICAgICAgZXh0ZXJuYWxNb2R1bGVzOiBiLmV4dGVybmFsTW9kdWxlcyA/PyBbXSxcbiAgICAgICAgZGVmaW5lOiBiLmRlZmluZSA/PyB7fSxcbiAgICAgICAgbG9hZGVyOiBiLmxvYWRlciA/PyB7fSxcbiAgICAgICAgYmFubmVyOiBiLmJhbm5lcixcbiAgICAgICAgZm9vdGVyOiBiLmZvb3RlcixcbiAgICAgICAgdHNjb25maWc6IGIudHNjb25maWcsXG4gICAgICAgIGtlZXBOYW1lczogYi5rZWVwTmFtZXMgPz8gZmFsc2UsXG4gICAgICAgIGVzYnVpbGRBcmdzOiBiLmVzYnVpbGRBcmdzID8/IHt9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lLFxuICAgICAgY29kZSxcbiAgICAgIGVudHJ5cG9pbnQ6IG91dHB1dEZpbGUoZm9ybWF0KSxcbiAgICAgIGVudmlyb25tZW50OiB3aXRoU291cmNlTWFwcyhwcm9wcy5lbnZpcm9ubWVudCwgc291cmNlTWFwKSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2NrRmlsZShwcm9wczogTm9kZWpzV2ViRnVuY3Rpb25Qcm9wcywgZW50cnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChwcm9wcy5kZXBzTG9ja0ZpbGVQYXRoKSByZXR1cm4gcGF0aC5yZXNvbHZlKHByb3BzLmRlcHNMb2NrRmlsZVBhdGgpO1xuICBjb25zdCBmb3VuZCA9IGZpbmRMb2NrRmlsZShwYXRoLmRpcm5hbWUoZW50cnkpKTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgbm8gbG9jayBmaWxlIChwYWNrYWdlLWxvY2suanNvbiwgeWFybi5sb2NrLCBwbnBtLWxvY2sueWFtbCwgYnVuLmxvY2spIGZvdW5kIGFib3ZlICR7ZW50cnl9OyBzZXQgZGVwc0xvY2tGaWxlUGF0aCBvciBwcm9qZWN0Um9vdGApO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuLyoqIEFkZHMgYC0tZW5hYmxlLXNvdXJjZS1tYXBzYCB0byBOT0RFX09QVElPTlMsIGtlZXBpbmcgYW55dGhpbmcgdGhlIHVzZXIgc2V0LiAqL1xuZnVuY3Rpb24gd2l0aFNvdXJjZU1hcHMoZW52aXJvbm1lbnQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQsIHNvdXJjZU1hcDogYm9vbGVhbik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBpZiAoIXNvdXJjZU1hcCkgcmV0dXJuIGVudmlyb25tZW50O1xuICBjb25zdCBleGlzdGluZyA9IGVudmlyb25tZW50Py5OT0RFX09QVElPTlM7XG4gIGlmIChleGlzdGluZz8uc3BsaXQoL1xccysvKS5pbmNsdWRlcygnLS1lbmFibGUtc291cmNlLW1hcHMnKSkgcmV0dXJuIGVudmlyb25tZW50O1xuICByZXR1cm4geyAuLi5lbnZpcm9ubWVudCwgTk9ERV9PUFRJT05TOiBleGlzdGluZyA/IGAke2V4aXN0aW5nfSAtLWVuYWJsZS1zb3VyY2UtbWFwc2AgOiAnLS1lbmFibGUtc291cmNlLW1hcHMnIH07XG59XG4iXX0=
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWpzLXdlYi1mdW5jdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ub2RlanMtd2ViLWZ1bmN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsNkNBQTBDO0FBQzFDLCtEQUFpRDtBQUNqRCxxRUFBNkQ7QUFFN0QsaURBQXlGO0FBQ3pGLHFFQUEyRDtBQUMzRCxpREFBc0U7QUF3SnRFOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsMEJBQVc7O0lBQ2hEOzs7T0FHRztJQUNJLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyw0REFBNEQsQ0FBQztJQUVwSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssR0FBRyxJQUFBLGdDQUFXLEVBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzVELE1BQU0sS0FBSyxHQUFHLElBQUEsdUJBQVksRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSywrQkFBK0IsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBRUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxnQ0FBWSxDQUFDLEdBQUcsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUN0QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sSUFBSSxHQUFHLElBQUEsc0JBQVcsRUFBQztZQUN2QixLQUFLO1lBQ0wsV0FBVztZQUNYLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztZQUMxQixtQkFBbUIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLElBQUksS0FBSztZQUNuRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSx5QkFBVyxDQUFDLFlBQVksQ0FBQyw0QkFBNEIsT0FBTyxDQUFDLElBQUksZUFBZSxDQUFDO1lBQy9HLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxJQUFJO2dCQUN4QixTQUFTO2dCQUNULE1BQU07Z0JBQ04sTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDL0QsZUFBZSxFQUFFLENBQUMsQ0FBQyxlQUFlLElBQUksRUFBRTtnQkFDeEMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDdEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDdEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO2dCQUNoQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07Z0JBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtnQkFDcEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSztnQkFDL0IsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRTthQUNqQztTQUNGLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1IsT0FBTztZQUNQLElBQUk7WUFDSixVQUFVLEVBQUUsSUFBQSxxQkFBVSxFQUFDLE1BQU0sQ0FBQztZQUM5QixXQUFXLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO1NBQzFELENBQUMsQ0FBQztJQUNMLENBQUM7O0FBbERILDhDQW1EQztBQUVELFNBQVMsUUFBUSxDQUFDLEtBQTZCLEVBQUUsS0FBYTtJQUM1RCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0I7UUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBQSx1QkFBWSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLHFGQUFxRixLQUFLLHVDQUF1QyxDQUFDLENBQUM7SUFDckosQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFTLGNBQWMsQ0FBQyxXQUFrRCxFQUFFLFNBQWtCO0lBQzVGLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDbkMsTUFBTSxRQUFRLEdBQUcsV0FBVyxFQUFFLFlBQVksQ0FBQztJQUMzQyxJQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDaEYsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztBQUNsSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2UgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBPdXRwdXRGb3JtYXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgYnVuZGxlZENvZGUsIGZpbmRMb2NrRmlsZSwgb3V0cHV0RmlsZSwgcmVzb2x2ZUVudHJ5IH0gZnJvbSAnLi9wcml2YXRlL2J1bmRsaW5nJztcbmltcG9ydCB7IGluamVjdFByb3BzIH0gZnJvbSAnLi9wcml2YXRlL3Byb3BlcnR5LWluamVjdGlvbic7XG5pbXBvcnQgeyBXZWJGdW5jdGlvbiwgdHlwZSBXZWJGdW5jdGlvbk9wdGlvbnMgfSBmcm9tICcuL3dlYi1mdW5jdGlvbic7XG5cbi8qKlxuICogSG93IGBOb2RlanNXZWJGdW5jdGlvbmAgYnVuZGxlcyB0aGUgc2VydmVyIHdpdGggZXNidWlsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlanNXZWJGdW5jdGlvbkJ1bmRsaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pZnkgdGhlIGJ1bmRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBzb3VyY2UgbWFwLCBhbmQgc2V0IGBOT0RFX09QVElPTlM9LS1lbmFibGUtc291cmNlLW1hcHNgIHNvIHN0YWNrIHRyYWNlcyBwb2ludCBhdCB5b3VyIHNvdXJjZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZU1hcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE91dHB1dCBmb3JtYXQuIEVTTSBpcyB3cml0dGVuIHRvIGBpbmRleC5tanNgICh3aXRoIGEgYHJlcXVpcmVgIHNoaW0sIHNvIENvbW1vbkpTIGRlcGVuZGVuY2llc1xuICAgKiBzdWNoIGFzIEV4cHJlc3Mgd29yayk7IENvbW1vbkpTIHRvIGBpbmRleC5qc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IE91dHB1dEZvcm1hdC5FU01cbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdD86IE91dHB1dEZvcm1hdDtcblxuICAvKipcbiAgICogZXNidWlsZCB0YXJnZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHJ1bnRpbWUncyBOb2RlLmpzIHZlcnNpb24sIGUuZy4gYG5vZGUyNGBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldD86IHN0cmluZztcblxuICAvKipcbiAgICogTW9kdWxlcyB0byBsZWF2ZSBvdXQgb2YgdGhlIGJ1bmRsZS4gVGhlIHJ1bnRpbWUgaGFzIG5vIEFXUyBTREssIHNvIGBAYXdzLXNkay8qYCBpcyBidW5kbGVkIGxpa2VcbiAgICogYW55IG90aGVyIGRlcGVuZGVuY3k7IG9ubHkgZXhjbHVkZSBtb2R1bGVzIHlvdSBwcm92aWRlIGFub3RoZXIgd2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsTW9kdWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGdsb2JhbCBpZGVudGlmaWVycyB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb25zIChlc2J1aWxkIGAtLWRlZmluZWApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlZmluZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIGVzYnVpbGQgbG9hZGVycyBieSBmaWxlIGV4dGVuc2lvbiwgZS5nLiBgeyAnLnBuZyc6ICdkYXRhdXJsJyB9YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlc2J1aWxkJ3MgZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRlcj86IHsgW2V4dDogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRleHQgdG8gcHJlcGVuZCB0byB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGJhbm5lcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGV4dCB0byBhcHBlbmQgdG8gdGhlIGJ1bmRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBmb290ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHRzY29uZmlnLmpzb24gdG8gdXNlLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290IG9yIGFic29sdXRlIChpbnNpZGUgdGhlIHByb2plY3Qgcm9vdCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZXNidWlsZCdzIGxvb2t1cCBmcm9tIHRoZSBlbnRyeSBmaWxlXG4gICAqL1xuICByZWFkb25seSB0c2NvbmZpZz86IHN0cmluZztcblxuICAvKipcbiAgICogS2VlcCBmdW5jdGlvbiBhbmQgY2xhc3MgbmFtZXMgKGAtLWtlZXAtbmFtZXNgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGtlZXBOYW1lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4dHJhIGVzYnVpbGQgYXJndW1lbnRzLCBlLmcuIGB7ICctLWxvZy1saW1pdCc6ICcwJywgJy0tdHJlZS1zaGFraW5nJzogdHJ1ZSB9YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBlc2J1aWxkQXJncz86IHsgW2FyZzogc3RyaW5nXTogc3RyaW5nIHwgYm9vbGVhbiB9O1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpbGUgYnVuZGxpbmcgKG5vdCBhdCBydW50aW1lKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBidW5kbGUgaW4gRG9ja2VyLCBldmVuIGlmIGVzYnVpbGQgaXMgaW5zdGFsbGVkIGxvY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZURvY2tlckJ1bmRsaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9ja2VyIGltYWdlIGZvciBidW5kbGluZyB3aGVuIGVzYnVpbGQgaXNuJ3QgaW5zdGFsbGVkIGxvY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGFybTY0IEFXUyBTQU0gYnVpbGQgaW1hZ2UgZm9yIHRoZSBydW50aW1lLCBlLmcuIGBwdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtbm9kZWpzMjQueDpsYXRlc3QtYXJtNjRgXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJJbWFnZT86IERvY2tlckltYWdlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgYE5vZGVqc1dlYkZ1bmN0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlanNXZWJGdW5jdGlvblByb3BzIGV4dGVuZHMgV2ViRnVuY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIHRoYXQgc3RhcnRzIHlvdXIgc2VydmVyIChUeXBlU2NyaXB0IG9yIEphdmFTY3JpcHQpLiBJdCdzIGJ1bmRsZWQgd2l0aCBpdHMgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE5vZGUuanMgcnVudGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzI0X1hcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWU/OiBsYW1iZGEuUnVudGltZTtcblxuICAvKipcbiAgICogVGhlIGxvY2sgZmlsZSB0aGF0IG1hcmtzIHRoZSBwcm9qZWN0IHJvb3QgKHdoZXJlIGVzYnVpbGQgcmVzb2x2ZXMgYG5vZGVfbW9kdWxlc2ApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBuZWFyZXN0IGBwYWNrYWdlLWxvY2suanNvbmAsIGB5YXJuLmxvY2tgLCBgcG5wbS1sb2NrLnlhbWxgIG9yIGBidW4ubG9jayhiKWAgYWJvdmUgdGhlIGVudHJ5XG4gICAqL1xuICByZWFkb25seSBkZXBzTG9ja0ZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCByb290LiBNdXN0IGNvbnRhaW4gdGhlIGVudHJ5IGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGRpcmVjdG9yeSBvZiB0aGUgbG9jayBmaWxlXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0Um9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IHRoZSBzZXJ2ZXIgaXMgYnVuZGxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBtaW5pZmllZCBFU00gd2l0aCBhIHNvdXJjZSBtYXAsIHRhcmdldGluZyB0aGUgcnVudGltZSdzIE5vZGUuanMgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxpbmc/OiBOb2RlanNXZWJGdW5jdGlvbkJ1bmRsaW5nT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBIGBXZWJGdW5jdGlvbmAgd2hvc2UgY29kZSBpcyBidW5kbGVkIGZyb20gYSBUeXBlU2NyaXB0IG9yIEphdmFTY3JpcHQgZW50cnkgZmlsZSB3aXRoIGVzYnVpbGQsXG4gKiBsaWtlIGBOb2RlanNGdW5jdGlvbmAgZm9yIExhbWJkYSBmdW5jdGlvbnMuXG4gKlxuICogQmVzaWRlcyBidW5kbGluZywgaXQgc2V0cyB3aGF0IGEgYGxhbWJkYS5Db2RlYCBhbG9uZSBjYW4ndDogdGhlIGVudHJ5IHBvaW50IHRoYXQgbWF0Y2hlcyB0aGVcbiAqIGJ1bmRsZSwgYW5kIGBOT0RFX09QVElPTlM9LS1lbmFibGUtc291cmNlLW1hcHNgIHdoZW4gc291cmNlIG1hcHMgYXJlIG9uLlxuICovXG5leHBvcnQgY2xhc3MgTm9kZWpzV2ViRnVuY3Rpb24gZXh0ZW5kcyBXZWJGdW5jdGlvbiB7XG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIHRoaXMgY2xhc3MgdG8gcHJvcGVydHkgaW5qZWN0b3JzIChgUHJvcGVydHlJbmplY3RvcnMub2Yoc2NvcGUpLmFkZCguLi4pYCkuIEEgYE5vZGVqc1dlYkZ1bmN0aW9uYCBnZXRzXG4gICAqIGl0cyBvd24gaW5qZWN0b3IgZmlyc3QsIHRoZW4gYFdlYkZ1bmN0aW9uYCdzLCBhcyBhd3MtY2RrLWxpYidzIGBOb2RlanNGdW5jdGlvbmAgZG9lcyB3aXRoIGBGdW5jdGlvbmAncy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGFzaGlzaHBhbmRleW9uZS9jZGstbGFtYmRhLXdlYi1mdW5jdGlvbi5Ob2RlanNXZWJGdW5jdGlvbic7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5vZGVqc1dlYkZ1bmN0aW9uUHJvcHMpIHtcbiAgICBwcm9wcyA9IGluamVjdFByb3BzKE5vZGVqc1dlYkZ1bmN0aW9uLlBST1BFUlRZX0lOSkVDVElPTl9JRCwgcHJvcHMsIHNjb3BlLCBpZCk7XG4gICAgY29uc3QgcnVudGltZSA9IHByb3BzLnJ1bnRpbWUgPz8gbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzI0X1g7XG4gICAgY29uc3QgZW50cnkgPSByZXNvbHZlRW50cnkocHJvcHMuZW50cnkpO1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gcGF0aC5yZXNvbHZlKHByb3BzLnByb2plY3RSb290ID8/IHBhdGguZGlybmFtZShsb2NrRmlsZShwcm9wcywgZW50cnkpKSk7XG4gICAgaWYgKHBhdGgucmVsYXRpdmUocHJvamVjdFJvb3QsIGVudHJ5KS5zdGFydHNXaXRoKCcuLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGVudHJ5ICR7ZW50cnl9IG11c3QgYmUgaW5zaWRlIHByb2plY3RSb290ICR7cHJvamVjdFJvb3R9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYiA9IHByb3BzLmJ1bmRsaW5nID8/IHt9O1xuICAgIGNvbnN0IGZvcm1hdCA9IGIuZm9ybWF0ID8/IE91dHB1dEZvcm1hdC5FU007XG4gICAgY29uc3Qgc291cmNlTWFwID0gYi5zb3VyY2VNYXAgPz8gdHJ1ZTtcbiAgICBjb25zdCBub2RlTWFqb3IgPSAvXm5vZGVqcyhcXGQrKS8uZXhlYyhydW50aW1lLm5hbWUpPy5bMV07XG5cbiAgICBjb25zdCBjb2RlID0gYnVuZGxlZENvZGUoe1xuICAgICAgZW50cnksXG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIGVudmlyb25tZW50OiBiLmVudmlyb25tZW50LFxuICAgICAgZm9yY2VEb2NrZXJCdW5kbGluZzogYi5mb3JjZURvY2tlckJ1bmRsaW5nID8/IGZhbHNlLFxuICAgICAgZG9ja2VySW1hZ2U6IGIuZG9ja2VySW1hZ2UgPz8gRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KGBwdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtJHtydW50aW1lLm5hbWV9OmxhdGVzdC1hcm02NGApLFxuICAgICAgZXNidWlsZDoge1xuICAgICAgICBtaW5pZnk6IGIubWluaWZ5ID8/IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcCxcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICB0YXJnZXQ6IGIudGFyZ2V0ID8/IChub2RlTWFqb3IgPyBgbm9kZSR7bm9kZU1ham9yfWAgOiAnbm9kZTI0JyksXG4gICAgICAgIGV4dGVybmFsTW9kdWxlczogYi5leHRlcm5hbE1vZHVsZXMgPz8gW10sXG4gICAgICAgIGRlZmluZTogYi5kZWZpbmUgPz8ge30sXG4gICAgICAgIGxvYWRlcjogYi5sb2FkZXIgPz8ge30sXG4gICAgICAgIGJhbm5lcjogYi5iYW5uZXIsXG4gICAgICAgIGZvb3RlcjogYi5mb290ZXIsXG4gICAgICAgIHRzY29uZmlnOiBiLnRzY29uZmlnLFxuICAgICAgICBrZWVwTmFtZXM6IGIua2VlcE5hbWVzID8/IGZhbHNlLFxuICAgICAgICBlc2J1aWxkQXJnczogYi5lc2J1aWxkQXJncyA/PyB7fSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgcnVudGltZSxcbiAgICAgIGNvZGUsXG4gICAgICBlbnRyeXBvaW50OiBvdXRwdXRGaWxlKGZvcm1hdCksXG4gICAgICBlbnZpcm9ubWVudDogd2l0aFNvdXJjZU1hcHMocHJvcHMuZW52aXJvbm1lbnQsIHNvdXJjZU1hcCksXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbG9ja0ZpbGUocHJvcHM6IE5vZGVqc1dlYkZ1bmN0aW9uUHJvcHMsIGVudHJ5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJvcHMuZGVwc0xvY2tGaWxlUGF0aCkgcmV0dXJuIHBhdGgucmVzb2x2ZShwcm9wcy5kZXBzTG9ja0ZpbGVQYXRoKTtcbiAgY29uc3QgZm91bmQgPSBmaW5kTG9ja0ZpbGUocGF0aC5kaXJuYW1lKGVudHJ5KSk7XG4gIGlmICghZm91bmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGxvY2sgZmlsZSAocGFja2FnZS1sb2NrLmpzb24sIHlhcm4ubG9jaywgcG5wbS1sb2NrLnlhbWwsIGJ1bi5sb2NrKSBmb3VuZCBhYm92ZSAke2VudHJ5fTsgc2V0IGRlcHNMb2NrRmlsZVBhdGggb3IgcHJvamVjdFJvb3RgKTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG5cbi8qKiBBZGRzIGAtLWVuYWJsZS1zb3VyY2UtbWFwc2AgdG8gTk9ERV9PUFRJT05TLCBrZWVwaW5nIGFueXRoaW5nIHRoZSB1c2VyIHNldC4gKi9cbmZ1bmN0aW9uIHdpdGhTb3VyY2VNYXBzKGVudmlyb25tZW50OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkLCBzb3VyY2VNYXA6IGJvb2xlYW4pOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFzb3VyY2VNYXApIHJldHVybiBlbnZpcm9ubWVudDtcbiAgY29uc3QgZXhpc3RpbmcgPSBlbnZpcm9ubWVudD8uTk9ERV9PUFRJT05TO1xuICBpZiAoZXhpc3Rpbmc/LnNwbGl0KC9cXHMrLykuaW5jbHVkZXMoJy0tZW5hYmxlLXNvdXJjZS1tYXBzJykpIHJldHVybiBlbnZpcm9ubWVudDtcbiAgcmV0dXJuIHsgLi4uZW52aXJvbm1lbnQsIE5PREVfT1BUSU9OUzogZXhpc3RpbmcgPyBgJHtleGlzdGluZ30gLS1lbmFibGUtc291cmNlLW1hcHNgIDogJy0tZW5hYmxlLXNvdXJjZS1tYXBzJyB9O1xufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Construct } from 'constructs';
|
|
2
|
+
/**
|
|
3
|
+
* Applies the nearest property injector registered for `uniqueId` above `scope` (`PropertyInjectors.of(app).add(...)`),
|
|
4
|
+
* the same lookup aws-cdk-lib's own constructs do through their `@propertyInjectable` decorator.
|
|
5
|
+
*/
|
|
6
|
+
export declare function injectProps<T>(uniqueId: string, props: T, scope: Construct, id: string): T;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.injectProps = injectProps;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
/**
|
|
6
|
+
* Applies the nearest property injector registered for `uniqueId` above `scope` (`PropertyInjectors.of(app).add(...)`),
|
|
7
|
+
* the same lookup aws-cdk-lib's own constructs do through their `@propertyInjectable` decorator.
|
|
8
|
+
*/
|
|
9
|
+
function injectProps(uniqueId, props, scope, id) {
|
|
10
|
+
for (let c = scope; c !== undefined; c = c.node.scope) {
|
|
11
|
+
if (!aws_cdk_lib_1.PropertyInjectors.hasPropertyInjectors(c))
|
|
12
|
+
continue;
|
|
13
|
+
const injector = aws_cdk_lib_1.PropertyInjectors.of(c).for(uniqueId);
|
|
14
|
+
if (injector)
|
|
15
|
+
return injector.inject(props, { scope, id });
|
|
16
|
+
}
|
|
17
|
+
return props;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktaW5qZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ByaXZhdGUvcHJvcGVydHktaW5qZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esa0NBT0M7QUFkRCw2Q0FBZ0Q7QUFHaEQ7OztHQUdHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFJLFFBQWdCLEVBQUUsS0FBUSxFQUFFLEtBQWdCLEVBQUUsRUFBVTtJQUNyRixLQUFLLElBQUksQ0FBQyxHQUEyQixLQUFLLEVBQUUsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5RSxJQUFJLENBQUMsK0JBQWlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUN6RCxNQUFNLFFBQVEsR0FBRywrQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksUUFBUTtZQUFFLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvcGVydHlJbmplY3RvcnMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG5lYXJlc3QgcHJvcGVydHkgaW5qZWN0b3IgcmVnaXN0ZXJlZCBmb3IgYHVuaXF1ZUlkYCBhYm92ZSBgc2NvcGVgIChgUHJvcGVydHlJbmplY3RvcnMub2YoYXBwKS5hZGQoLi4uKWApLFxuICogdGhlIHNhbWUgbG9va3VwIGF3cy1jZGstbGliJ3Mgb3duIGNvbnN0cnVjdHMgZG8gdGhyb3VnaCB0aGVpciBgQHByb3BlcnR5SW5qZWN0YWJsZWAgZGVjb3JhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0UHJvcHM8VD4odW5pcXVlSWQ6IHN0cmluZywgcHJvcHM6IFQsIHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBUIHtcbiAgZm9yIChsZXQgYzogSUNvbnN0cnVjdCB8IHVuZGVmaW5lZCA9IHNjb3BlOyBjICE9PSB1bmRlZmluZWQ7IGMgPSBjLm5vZGUuc2NvcGUpIHtcbiAgICBpZiAoIVByb3BlcnR5SW5qZWN0b3JzLmhhc1Byb3BlcnR5SW5qZWN0b3JzKGMpKSBjb250aW51ZTtcbiAgICBjb25zdCBpbmplY3RvciA9IFByb3BlcnR5SW5qZWN0b3JzLm9mKGMpLmZvcih1bmlxdWVJZCk7XG4gICAgaWYgKGluamVjdG9yKSByZXR1cm4gaW5qZWN0b3IuaW5qZWN0KHByb3BzLCB7IHNjb3BlLCBpZCB9KTtcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG4iXX0=
|
|
@@ -11,7 +11,7 @@ const MAX_STEPS = 20;
|
|
|
11
11
|
* How an endpoint moves its traffic to a new revision.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionDeployment {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionDeployment", version: "0.1.11" };
|
|
15
15
|
/**
|
|
16
16
|
* All traffic moves to the new revision at once, as soon as it's ready (the default).
|
|
17
17
|
*/
|
|
@@ -53,7 +53,7 @@ const web_function_grants_1 = require("./web-function-grants");
|
|
|
53
53
|
* Endpoints are created only through `WebFunction`, which owns their log groups in every region, so the constructor is private.
|
|
54
54
|
*/
|
|
55
55
|
class WebFunctionEndpoint extends constructs_1.Construct {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpoint", version: "0.1.
|
|
56
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionEndpoint", version: "0.1.11" };
|
|
57
57
|
/**
|
|
58
58
|
* Creates an endpoint of a Web Function. Used by `WebFunction`.
|
|
59
59
|
*
|
|
@@ -42,7 +42,7 @@ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
|
42
42
|
class WebFunctionGrants {
|
|
43
43
|
endpointArns;
|
|
44
44
|
webFunction;
|
|
45
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionGrants", version: "0.1.
|
|
45
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionGrants", version: "0.1.11" };
|
|
46
46
|
/**
|
|
47
47
|
* @internal
|
|
48
48
|
*/
|
|
@@ -54,7 +54,7 @@ const OPT_IN_REGIONS = [
|
|
|
54
54
|
* and only your distribution may call the endpoint. `new WebFunctionOrigin(endpoint)` is for a public (`NONE`) endpoint.
|
|
55
55
|
*/
|
|
56
56
|
class WebFunctionOrigin extends cloudfront.OriginBase {
|
|
57
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionOrigin", version: "0.1.
|
|
57
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionOrigin", version: "0.1.11" };
|
|
58
58
|
/**
|
|
59
59
|
* An origin for an `AWS_IAM` endpoint, with origin access control: CloudFront signs every request to the endpoint
|
|
60
60
|
* (`always-amz-auth`, which keeps the viewer's `Authorization` header for your application), and the function's
|
|
@@ -11,7 +11,7 @@ const constructs_1 = require("constructs");
|
|
|
11
11
|
* only revisions within `revisionRetention`, or that an endpoint routes to, are kept.
|
|
12
12
|
*/
|
|
13
13
|
class WebFunctionRevision extends constructs_1.Construct {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionRevision", version: "0.1.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@ashishpandeyone/cdk-lambda-web-function.WebFunctionRevision", version: "0.1.11" };
|
|
15
15
|
/**
|
|
16
16
|
* References an existing revision of `webFunction`, e.g. to pin an endpoint to it or split traffic with it.
|
|
17
17
|
*/
|
package/lib/web-function.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Duration, type IResource, RemovalPolicy, Resource } from 'aws-cdk-lib';
|
|
2
2
|
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
|
|
3
3
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import * as kms from 'aws-cdk-lib/aws-kms';
|
|
4
5
|
import * as lambda from 'aws-cdk-lib/aws-lambda';
|
|
5
6
|
import * as logs from 'aws-cdk-lib/aws-logs';
|
|
6
7
|
import { Construct } from 'constructs';
|
|
@@ -56,6 +57,20 @@ export interface WebFunctionOptions {
|
|
|
56
57
|
* @default - a role trusting `lambda.amazonaws.com` with `AWSLambdaBasicExecutionRole`
|
|
57
58
|
*/
|
|
58
59
|
readonly role?: iam.IRole;
|
|
60
|
+
/**
|
|
61
|
+
* A customer managed KMS key for the function's revisions: their code and environment variables.
|
|
62
|
+
*
|
|
63
|
+
* A `PER_REGION` or `MULTI_REGION` endpoint needs a **multi-Region key** with a replica in every region it serves
|
|
64
|
+
* from, and each replica's policy must allow Lambda to decrypt (see `encryptionKeyPolicyStatement()`). A key defined
|
|
65
|
+
* in this app gets that statement added to its own policy.
|
|
66
|
+
*
|
|
67
|
+
* Changing the key creates a new revision. Earlier revisions, including the ones kept as rollback targets, still
|
|
68
|
+
* need their key.
|
|
69
|
+
* [disable-awslint:prefer-ref-interface]
|
|
70
|
+
*
|
|
71
|
+
* @default - an AWS owned key
|
|
72
|
+
*/
|
|
73
|
+
readonly encryptionKey?: kms.IKey;
|
|
59
74
|
/**
|
|
60
75
|
* Environment variables. Names starting with `AWS_` are reserved.
|
|
61
76
|
*
|
|
@@ -296,6 +311,11 @@ export declare abstract class WebFunctionBase extends Resource implements IWebFu
|
|
|
296
311
|
* @resource AWS::Lambda::WebFunction
|
|
297
312
|
*/
|
|
298
313
|
export declare class WebFunction extends WebFunctionBase implements iam.IGrantable {
|
|
314
|
+
/**
|
|
315
|
+
* Identifies this class to property injectors (`PropertyInjectors.of(scope).add(...)`), which can set default props for
|
|
316
|
+
* every `WebFunction` under a scope. Injectors for `WebFunction` also apply to `NodejsWebFunction`.
|
|
317
|
+
*/
|
|
318
|
+
static readonly PROPERTY_INJECTION_ID: string;
|
|
299
319
|
/**
|
|
300
320
|
* Imports an existing Web Function by its ARN (in any region or account).
|
|
301
321
|
*/
|
|
@@ -320,6 +340,8 @@ export declare class WebFunction extends WebFunctionBase implements iam.IGrantab
|
|
|
320
340
|
readonly grants: WebFunctionGrants;
|
|
321
341
|
/** The execution role. */
|
|
322
342
|
readonly role: iam.IRole;
|
|
343
|
+
/** The customer managed key of the function's revisions, if any. */
|
|
344
|
+
readonly encryptionKey?: kms.IKey;
|
|
323
345
|
/** The principal to grant permissions to (the execution role). */
|
|
324
346
|
readonly grantPrincipal: iam.IPrincipal;
|
|
325
347
|
/**
|
|
@@ -363,6 +385,16 @@ export declare class WebFunction extends WebFunctionBase implements iam.IGrantab
|
|
|
363
385
|
* @param id the statement ID (`Sid`): letters and digits, unique within the function
|
|
364
386
|
*/
|
|
365
387
|
addPermission(id: string, permission: WebFunctionPermission): void;
|
|
388
|
+
/**
|
|
389
|
+
* The key-policy statement Lambda needs to start this function's environments with `encryptionKey`: `kms:Decrypt` for
|
|
390
|
+
* `lambda.amazonaws.com`, limited to this function's revisions (`aws:SourceArn` and the encryption context Lambda sets).
|
|
391
|
+
*
|
|
392
|
+
* It's added to `encryptionKey` when the key is defined in this app. Add it to every replica of a multi-Region key
|
|
393
|
+
* yourself: replicas don't share their primary's policy.
|
|
394
|
+
*/
|
|
395
|
+
encryptionKeyPolicyStatement(): iam.PolicyStatement;
|
|
396
|
+
/** Regional and multi-region endpoints need a multi-Region key: otherwise their other regions fail to activate. */
|
|
397
|
+
private validateEncryptionKey;
|
|
366
398
|
private createEndpoint;
|
|
367
399
|
/**
|
|
368
400
|
* The default execution role: write to the function's own log groups only (the home region's and every region's
|