@aws-solutions-constructs/aws-apigateway-lambda 2.99.0 → 2.100.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.
Files changed (33) hide show
  1. package/.jsii +7 -9
  2. package/lib/index.js +3 -2
  3. package/package.json +6 -7
  4. package/test/apigateway-lambda.test.js +211 -0
  5. package/test/integ.apilam-deployFunction.js +2 -2
  6. package/test/integ.apilam-deployFunction.js.snapshot/apilam-deployFunction.assets.json +4 -18
  7. package/test/integ.apilam-deployFunction.js.snapshot/apilam-deployFunction.template.json +1 -4
  8. package/test/integ.apilam-deployFunction.js.snapshot/apilamdeployFunctionIntegDefaultTestDeployAssert281C111D.assets.json +1 -1
  9. package/test/integ.apilam-deployFunction.js.snapshot/cdk.out +1 -1
  10. package/test/integ.apilam-deployFunction.js.snapshot/integ.json +2 -2
  11. package/test/integ.apilam-deployFunction.js.snapshot/manifest.json +23 -25
  12. package/test/integ.apilam-deployFunction.js.snapshot/tree.json +1 -1
  13. package/test/integ.apilam-existingFunction.js +2 -2
  14. package/test/integ.apilam-existingFunction.js.snapshot/apilam-existingFunction.assets.json +4 -18
  15. package/test/integ.apilam-existingFunction.js.snapshot/apilam-existingFunction.template.json +1 -4
  16. package/test/integ.apilam-existingFunction.js.snapshot/apilamexistingFunctionIntegDefaultTestDeployAssert4238FD03.assets.json +1 -1
  17. package/test/integ.apilam-existingFunction.js.snapshot/cdk.out +1 -1
  18. package/test/integ.apilam-existingFunction.js.snapshot/integ.json +2 -2
  19. package/test/integ.apilam-existingFunction.js.snapshot/manifest.json +23 -25
  20. package/test/integ.apilam-existingFunction.js.snapshot/tree.json +1 -1
  21. package/test/integ.apilam-no-usage-plan.js +2 -2
  22. package/test/integ.apilam-no-usage-plan.js.snapshot/apilam-no-usage-plan.assets.json +4 -18
  23. package/test/integ.apilam-no-usage-plan.js.snapshot/apilam-no-usage-plan.template.json +1 -4
  24. package/test/integ.apilam-no-usage-plan.js.snapshot/apilamnousageplanIntegDefaultTestDeployAssertFA088EA5.assets.json +1 -1
  25. package/test/integ.apilam-no-usage-plan.js.snapshot/cdk.out +1 -1
  26. package/test/integ.apilam-no-usage-plan.js.snapshot/integ.json +2 -2
  27. package/test/integ.apilam-no-usage-plan.js.snapshot/manifest.json +23 -25
  28. package/test/integ.apilam-no-usage-plan.js.snapshot/tree.json +1 -1
  29. package/test/integ.apilam-deployFunction.js.snapshot/asset.4085f2fc7cce70548a05ffc5162591a6b42f88398292e9c4b2739feed32a1640/index.js +0 -21
  30. package/test/integ.apilam-existingFunction.js.snapshot/asset.4085f2fc7cce70548a05ffc5162591a6b42f88398292e9c4b2739feed32a1640/index.js +0 -21
  31. package/test/integ.apilam-no-usage-plan.js.snapshot/asset.4085f2fc7cce70548a05ffc5162591a6b42f88398292e9c4b2739feed32a1640/index.js +0 -21
  32. package/test/test.apigateway-lambda.test.js +0 -194
  33. /package/test/{test.apigateway-lambda.test.d.ts → apigateway-lambda.test.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "48.0.0",
2
+ "version": "52.0.0",
3
3
  "artifacts": {
4
4
  "apilamnousageplanIntegDefaultTestDeployAssertFA088EA5.assets": {
5
5
  "type": "cdk:asset-manifest",
@@ -66,7 +66,7 @@
66
66
  "validateOnSynth": false,
67
67
  "assumeRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-deploy-role-${AWS::AccountId}-${AWS::Region}",
68
68
  "cloudFormationExecutionRoleArn": "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-hnb659fds-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",
69
- "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/9a0cad16b9fc837702261c0a1771ec006e26cd905b1160f41651e5efdacf8dab.json",
69
+ "stackTemplateAssetObjectUrl": "s3://cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}/406dbc56b98a7ab47c68cdb6d2bf4bf8dad35595fd16247c3068bf3bdc8f71f3.json",
70
70
  "requiresBootstrapStackVersion": 6,
71
71
  "bootstrapStackVersionSsmParameter": "/cdk-bootstrap/hnb659fds/version",
72
72
  "additionalDependencies": [
@@ -110,12 +110,6 @@
110
110
  }
111
111
  }
112
112
  ],
113
- "/apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole/ImportLambdaFunctionServiceRole": [
114
- {
115
- "type": "aws:cdk:analytics:construct",
116
- "data": "*"
117
- }
118
- ],
119
113
  "/apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole/Resource": [
120
114
  {
121
115
  "type": "aws:cdk:logicalId",
@@ -428,12 +422,6 @@
428
422
  }
429
423
  }
430
424
  ],
431
- "/apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole": [
432
- {
433
- "type": "aws:cdk:analytics:construct",
434
- "data": "*"
435
- }
436
- ],
437
425
  "/apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole/Resource": [
438
426
  {
439
427
  "type": "aws:cdk:logicalId",
@@ -473,6 +461,7 @@
473
461
  "module": "aws-cdk-lib",
474
462
  "flags": {
475
463
  "@aws-cdk/aws-signer:signingProfileNamePassedToCfn": {
464
+ "userValue": true,
476
465
  "recommendedValue": true,
477
466
  "explanation": "Pass signingProfileName to CfnSigningProfile"
478
467
  },
@@ -491,6 +480,7 @@
491
480
  }
492
481
  },
493
482
  "@aws-cdk/aws-ecs-patterns:secGroupsDisablesImplicitOpenListener": {
483
+ "userValue": true,
494
484
  "recommendedValue": true,
495
485
  "explanation": "Disable implicit openListener when custom security groups are provided"
496
486
  },
@@ -756,6 +746,10 @@
756
746
  "recommendedValue": true,
757
747
  "explanation": "When enabled, nodegroupName attribute of the provisioned EKS NodeGroup will not have the cluster name prefix."
758
748
  },
749
+ "@aws-cdk/aws-eks:useNativeOidcProvider": {
750
+ "recommendedValue": true,
751
+ "explanation": "When enabled, EKS V2 clusters will use the native OIDC provider resource AWS::IAM::OIDCProvider instead of creating the OIDCProvider with a custom resource (iam.OpenIDConnectProvider)."
752
+ },
759
753
  "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": {
760
754
  "userValue": true,
761
755
  "recommendedValue": true,
@@ -788,16 +782,6 @@
788
782
  "recommendedValue": true,
789
783
  "explanation": "When enabled, stack tags need to be assigned explicitly on a Stack."
790
784
  },
791
- "@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature": {
792
- "userValue": false,
793
- "recommendedValue": false,
794
- "explanation": "When set to true along with canContainersAccessInstanceRole=false in ECS cluster, new updated commands will be added to UserData to block container accessing IMDS. **Applicable to Linux only. IMPORTANT: See [details.](#aws-cdkaws-ecsenableImdsBlockingDeprecatedFeature)**"
795
- },
796
- "@aws-cdk/aws-ecs:disableEcsImdsBlocking": {
797
- "userValue": true,
798
- "recommendedValue": true,
799
- "explanation": "When set to true, CDK synth will throw exception if canContainersAccessInstanceRole is false. **IMPORTANT: See [details.](#aws-cdkaws-ecsdisableEcsImdsBlocking)**"
800
- },
801
785
  "@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": {
802
786
  "userValue": true,
803
787
  "recommendedValue": true,
@@ -943,6 +927,7 @@
943
927
  "explanation": "When enabled, CDK creates and manages loggroup for the lambda function"
944
928
  },
945
929
  "@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault": {
930
+ "userValue": true,
946
931
  "recommendedValue": true,
947
932
  "explanation": "When enabled, Network Load Balancer will be created with a security group by default."
948
933
  },
@@ -954,12 +939,25 @@
954
939
  }
955
940
  },
956
941
  "@aws-cdk/aws-ecs-patterns:uniqueTargetGroupId": {
942
+ "userValue": true,
957
943
  "recommendedValue": true,
958
944
  "explanation": "When enabled, ECS patterns will generate unique target group IDs to prevent conflicts during load balancer replacement"
945
+ },
946
+ "@aws-cdk/aws-route53-patterns:useDistribution": {
947
+ "userValue": true,
948
+ "recommendedValue": true,
949
+ "explanation": "Use the `Distribution` resource instead of `CloudFrontWebDistribution`"
950
+ },
951
+ "@aws-cdk/core:automaticL1Traits": {
952
+ "recommendedValue": true,
953
+ "explanation": "Automatically use the default L1 traits for L1 constructs`",
954
+ "unconfiguredBehavesLike": {
955
+ "v2": true
956
+ }
959
957
  }
960
958
  }
961
959
  }
962
960
  }
963
961
  },
964
- "minimumCliVersion": "2.1021.0"
962
+ "minimumCliVersion": "2.1106.1"
965
963
  }
@@ -1 +1 @@
1
- {"version":"tree-0.1","tree":{"id":"App","path":"","constructInfo":{"fqn":"aws-cdk-lib.App","version":"2.223.0"},"children":{"apilam-no-usage-plan":{"id":"apilam-no-usage-plan","path":"apilam-no-usage-plan","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.223.0"},"children":{"test-apigateway-lambda":{"id":"test-apigateway-lambda","path":"apilam-no-usage-plan/test-apigateway-lambda","constructInfo":{"fqn":"@aws-solutions-constructs/aws-apigateway-lambda.ApiGatewayToLambda","version":"2.95.1"},"children":{"LambdaFunctionServiceRole":{"id":"LambdaFunctionServiceRole","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.223.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"inlinePolicies":"*"},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]},"children":{"ImportLambdaFunctionServiceRole":{"id":"ImportLambdaFunctionServiceRole","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole/ImportLambdaFunctionServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.223.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"policies":[{"policyName":"LambdaFunctionServiceRolePolicy","policyDocument":{"Statement":[{"Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":logs:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":log-group:/aws/lambda/*"]]}}],"Version":"2012-10-17"}}]}}}}},"LambdaFunction":{"id":"LambdaFunction","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.223.0","metadata":[{"role":"*","tracing":"Active","runtime":"*","handler":"*","code":"*"},{"addEnvironment":["*","*",{"removeInEdge":true}]}]},"children":{"Code":{"id":"Code","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/Code","constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.223.0"},"children":{"Stage":{"id":"Stage","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.223.0"}},"AssetBucket":{"id":"AssetBucket","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.223.0","metadata":[]}}}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"4085f2fc7cce70548a05ffc5162591a6b42f88398292e9c4b2739feed32a1640.zip"},"environment":{"variables":{"AWS_NODEJS_CONNECTION_REUSE_ENABLED":"1"}},"handler":"index.handler","role":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunctionServiceRole5CD2E9F7","Arn"]},"runtime":"nodejs22.x","tracingConfig":{"mode":"Active"}}}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/inlinePolicyAddedToExecutionRole-0","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.223.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/inlinePolicyAddedToExecutionRole-0/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["xray:PutTelemetryRecords","xray:PutTraceSegments"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"testapigatewaylambdaLambdaFunctioninlinePolicyAddedToExecutionRole00FEF72FF","roles":[{"Ref":"testapigatewaylambdaLambdaFunctionServiceRole5CD2E9F7"}]}}}}}}},"ApiAccessLogGroup":{"id":"ApiAccessLogGroup","path":"apilam-no-usage-plan/test-apigateway-lambda/ApiAccessLogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.223.0","metadata":[{"retention":9999}]},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/ApiAccessLogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{}}}}},"LambdaRestApi":{"id":"LambdaRestApi","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.LambdaRestApi","version":"2.223.0","metadata":[{"defaultIntegration":"*","endpointConfiguration":{"types":["EDGE"]},"cloudWatchRole":false,"deployOptions":{"accessLogDestination":"*","accessLogFormat":"*","loggingLevel":"INFO","dataTraceEnabled":false,"tracingEnabled":true},"defaultMethodOptions":{"authorizationType":"*"},"handler":"*"},{"endpointConfiguration":{"types":["EDGE"]},"cloudWatchRole":false,"deployOptions":{"accessLogDestination":"*","accessLogFormat":"*","loggingLevel":"INFO","dataTraceEnabled":false,"tracingEnabled":true},"defaultMethodOptions":{"authorizationType":"*"},"handler":"*"}]},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnRestApi","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::RestApi","aws:cdk:cloudformation:props":{"endpointConfiguration":{"types":["EDGE"]},"name":"LambdaRestApi"}}},"Deployment":{"id":"Deployment","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Deployment","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Deployment","version":"2.223.0","metadata":[{"description":"*","api":"*","retainDeployments":"*"},{"addToLogicalId":[{}]},{"addToLogicalId":[{}]},{"addToLogicalId":[{}]}]},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Deployment/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnDeployment","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Deployment","aws:cdk:cloudformation:props":{"description":"Automatically created by the RestApi construct","restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}}}},"DeploymentStage.prod":{"id":"DeploymentStage.prod","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/DeploymentStage.prod","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Stage","version":"2.223.0","metadata":[{"deployment":"*","accessLogDestination":"*","accessLogFormat":"*","loggingLevel":"INFO","dataTraceEnabled":false,"tracingEnabled":true}]},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/DeploymentStage.prod/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnStage","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Stage","aws:cdk:cloudformation:props":{"accessLogSetting":{"destinationArn":{"Fn::GetAtt":["testapigatewaylambdaApiAccessLogGroupEB3253A2","Arn"]},"format":"{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"},"deploymentId":{"Ref":"testapigatewaylambdaLambdaRestApiDeployment85334BB3a1765c45928980e423727978265730d1"},"methodSettings":[{"httpMethod":"*","resourcePath":"/*","dataTraceEnabled":false,"loggingLevel":"INFO"}],"restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"stageName":"prod","tracingEnabled":true}}}}},"Endpoint":{"id":"Endpoint","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Endpoint","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.223.0"}},"Default":{"id":"Default","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.ResourceBase","version":"2.223.0","metadata":["*"]},"children":{"{proxy+}":{"id":"{proxy+}","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.ProxyResource","version":"2.223.0","metadata":[{"parent":"*","defaultIntegration":"*","defaultMethodOptions":"*"},{"parent":"*"},{"addMethod":["*"]}]},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnResource","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Resource","aws:cdk:cloudformation:props":{"parentId":{"Fn::GetAtt":["testapigatewaylambdaLambdaRestApiE957E944","RootResourceId"]},"pathPart":"{proxy+}","restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}},"ANY":{"id":"ANY","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Method","version":"2.223.0","metadata":[{"resource":"*","httpMethod":"*","integration":"*","options":"*"}]},"children":{"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}":{"id":"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY/ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/",{"Ref":"testapigatewaylambdaLambdaRestApiDeploymentStageprod4EBF7247"},"/*/*"]]}}}},"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}":{"id":"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY/ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/test-invoke-stage/*/*"]]}}}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnMethod","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Method","aws:cdk:cloudformation:props":{"authorizationType":"AWS_IAM","httpMethod":"ANY","integration":{"type":"AWS_PROXY","uri":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":apigateway:",{"Ref":"AWS::Region"},":lambda:path/2015-03-31/functions/",{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"/invocations"]]},"integrationHttpMethod":"POST"},"resourceId":{"Ref":"testapigatewaylambdaLambdaRestApiproxy2C2C544E"},"restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}}}}}},"ANY":{"id":"ANY","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Method","version":"2.223.0","metadata":[{"resource":"*","httpMethod":"*","integration":"*","options":"*"}]},"children":{"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..":{"id":"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY/ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/",{"Ref":"testapigatewaylambdaLambdaRestApiDeploymentStageprod4EBF7247"},"/*/"]]}}}},"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..":{"id":"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY/ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/test-invoke-stage/*/"]]}}}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnMethod","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Method","aws:cdk:cloudformation:props":{"authorizationType":"AWS_IAM","httpMethod":"ANY","integration":{"type":"AWS_PROXY","uri":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":apigateway:",{"Ref":"AWS::Region"},":lambda:path/2015-03-31/functions/",{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"/invocations"]]},"integrationHttpMethod":"POST"},"resourceId":{"Fn::GetAtt":["testapigatewaylambdaLambdaRestApiE957E944","RootResourceId"]},"restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}}}}}}}},"LambdaRestApiCloudWatchRole":{"id":"LambdaRestApiCloudWatchRole","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.223.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"inlinePolicies":"*"}]},"children":{"ImportLambdaRestApiCloudWatchRole":{"id":"ImportLambdaRestApiCloudWatchRole","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole/ImportLambdaRestApiCloudWatchRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.223.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"apigateway.amazonaws.com"}}],"Version":"2012-10-17"},"policies":[{"policyName":"LambdaRestApiCloudWatchRolePolicy","policyDocument":{"Statement":[{"Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:DescribeLogGroups","logs:DescribeLogStreams","logs:FilterLogEvents","logs:GetLogEvents","logs:PutLogEvents"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":logs:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":*"]]}}],"Version":"2012-10-17"}}]}}}}},"LambdaRestApiAccount":{"id":"LambdaRestApiAccount","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiAccount","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnAccount","version":"2.223.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Account","aws:cdk:cloudformation:props":{"cloudWatchRoleArn":{"Fn::GetAtt":["testapigatewaylambdaLambdaRestApiCloudWatchRole6D45E039","Arn"]}}}}}},"Integ":{"id":"Integ","path":"apilam-no-usage-plan/Integ","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"2.223.0-alpha.0"},"children":{"DefaultTest":{"id":"DefaultTest","path":"apilam-no-usage-plan/Integ/DefaultTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"2.223.0-alpha.0"},"children":{"Default":{"id":"Default","path":"apilam-no-usage-plan/Integ/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"apilam-no-usage-plan/Integ/DefaultTest/DeployAssert","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.223.0"},"children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"apilam-no-usage-plan/Integ/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.223.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"apilam-no-usage-plan/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.223.0"}}}}}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"apilam-no-usage-plan/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.223.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"apilam-no-usage-plan/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.223.0"}}}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}}}}
1
+ {"version":"tree-0.1","tree":{"id":"App","path":"","constructInfo":{"fqn":"aws-cdk-lib.App","version":"2.239.0"},"children":{"apilam-no-usage-plan":{"id":"apilam-no-usage-plan","path":"apilam-no-usage-plan","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.239.0"},"children":{"test-apigateway-lambda":{"id":"test-apigateway-lambda","path":"apilam-no-usage-plan/test-apigateway-lambda","constructInfo":{"fqn":"@aws-solutions-constructs/aws-apigateway-lambda.ApiGatewayToLambda","version":"2.99.0"},"children":{"LambdaFunctionServiceRole":{"id":"LambdaFunctionServiceRole","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunctionServiceRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"}}],"Version":"2012-10-17"},"policies":[{"policyName":"LambdaFunctionServiceRolePolicy","policyDocument":{"Statement":[{"Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":logs:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":log-group:/aws/lambda/*"]]}}],"Version":"2012-10-17"}}]}}}}},"LambdaFunction":{"id":"LambdaFunction","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"zipFile":"exports.handler = async (event) => { console.log(event); return {'statusCode': 200, 'body': ''}; }"},"environment":{"variables":{"AWS_NODEJS_CONNECTION_REUSE_ENABLED":"1"}},"handler":"index.handler","role":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunctionServiceRole5CD2E9F7","Arn"]},"runtime":"nodejs22.x","tracingConfig":{"mode":"Active"}}}},"inlinePolicyAddedToExecutionRole-0":{"id":"inlinePolicyAddedToExecutionRole-0","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/inlinePolicyAddedToExecutionRole-0","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaFunction/inlinePolicyAddedToExecutionRole-0/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["xray:PutTelemetryRecords","xray:PutTraceSegments"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"testapigatewaylambdaLambdaFunctioninlinePolicyAddedToExecutionRole00FEF72FF","roles":[{"Ref":"testapigatewaylambdaLambdaFunctionServiceRole5CD2E9F7"}]}}}}}}},"ApiAccessLogGroup":{"id":"ApiAccessLogGroup","path":"apilam-no-usage-plan/test-apigateway-lambda/ApiAccessLogGroup","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/ApiAccessLogGroup/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{}}}}},"LambdaRestApi":{"id":"LambdaRestApi","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.LambdaRestApi","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnRestApi","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::RestApi","aws:cdk:cloudformation:props":{"endpointConfiguration":{"types":["EDGE"]},"name":"LambdaRestApi"}}},"Deployment":{"id":"Deployment","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Deployment","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Deployment","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Deployment/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnDeployment","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Deployment","aws:cdk:cloudformation:props":{"description":"Automatically created by the RestApi construct","restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}}}},"DeploymentStage.prod":{"id":"DeploymentStage.prod","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/DeploymentStage.prod","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Stage","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/DeploymentStage.prod/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnStage","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Stage","aws:cdk:cloudformation:props":{"accessLogSetting":{"destinationArn":{"Fn::GetAtt":["testapigatewaylambdaApiAccessLogGroupEB3253A2","Arn"]},"format":"{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"user\":\"$context.identity.user\",\"caller\":\"$context.identity.caller\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\"}"},"deploymentId":{"Ref":"testapigatewaylambdaLambdaRestApiDeployment85334BB3a1765c45928980e423727978265730d1"},"methodSettings":[{"httpMethod":"*","resourcePath":"/*","dataTraceEnabled":false,"loggingLevel":"INFO"}],"restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"stageName":"prod","tracingEnabled":true}}}}},"Endpoint":{"id":"Endpoint","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Endpoint","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.239.0"}},"Default":{"id":"Default","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.ResourceBase","version":"2.239.0"},"children":{"{proxy+}":{"id":"{proxy+}","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.ProxyResource","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnResource","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Resource","aws:cdk:cloudformation:props":{"parentId":{"Fn::GetAtt":["testapigatewaylambdaLambdaRestApiE957E944","RootResourceId"]},"pathPart":"{proxy+}","restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}},"ANY":{"id":"ANY","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Method","version":"2.239.0"},"children":{"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}":{"id":"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY/ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/",{"Ref":"testapigatewaylambdaLambdaRestApiDeploymentStageprod4EBF7247"},"/*/*"]]}}}},"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}":{"id":"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY/ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..{proxy+}","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/test-invoke-stage/*/*"]]}}}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/{proxy+}/ANY/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnMethod","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Method","aws:cdk:cloudformation:props":{"authorizationType":"AWS_IAM","httpMethod":"ANY","integration":{"type":"AWS_PROXY","uri":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":apigateway:",{"Ref":"AWS::Region"},":lambda:path/2015-03-31/functions/",{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"/invocations"]]},"integrationHttpMethod":"POST"},"resourceId":{"Ref":"testapigatewaylambdaLambdaRestApiproxy2C2C544E"},"restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}}}}}},"ANY":{"id":"ANY","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.Method","version":"2.239.0"},"children":{"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..":{"id":"ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY/ApiPermission.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/",{"Ref":"testapigatewaylambdaLambdaRestApiDeploymentStageprod4EBF7247"},"/*/"]]}}}},"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..":{"id":"ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY/ApiPermission.Test.apilamnousageplantestapigatewaylambdaLambdaRestApi37AE5E45.ANY..","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"principal":"apigateway.amazonaws.com","sourceArn":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":execute-api:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":",{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"},"/test-invoke-stage/*/"]]}}}},"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApi/Default/ANY/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnMethod","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Method","aws:cdk:cloudformation:props":{"authorizationType":"AWS_IAM","httpMethod":"ANY","integration":{"type":"AWS_PROXY","uri":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":apigateway:",{"Ref":"AWS::Region"},":lambda:path/2015-03-31/functions/",{"Fn::GetAtt":["testapigatewaylambdaLambdaFunction18FF222F","Arn"]},"/invocations"]]},"integrationHttpMethod":"POST"},"resourceId":{"Fn::GetAtt":["testapigatewaylambdaLambdaRestApiE957E944","RootResourceId"]},"restApiId":{"Ref":"testapigatewaylambdaLambdaRestApiE957E944"}}}}}}}}}},"LambdaRestApiCloudWatchRole":{"id":"LambdaRestApiCloudWatchRole","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.239.0"},"children":{"Resource":{"id":"Resource","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiCloudWatchRole/Resource","constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"apigateway.amazonaws.com"}}],"Version":"2012-10-17"},"policies":[{"policyName":"LambdaRestApiCloudWatchRolePolicy","policyDocument":{"Statement":[{"Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:DescribeLogGroups","logs:DescribeLogStreams","logs:FilterLogEvents","logs:GetLogEvents","logs:PutLogEvents"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":logs:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":*"]]}}],"Version":"2012-10-17"}}]}}}}},"LambdaRestApiAccount":{"id":"LambdaRestApiAccount","path":"apilam-no-usage-plan/test-apigateway-lambda/LambdaRestApiAccount","constructInfo":{"fqn":"aws-cdk-lib.aws_apigateway.CfnAccount","version":"2.239.0"},"attributes":{"aws:cdk:cloudformation:type":"AWS::ApiGateway::Account","aws:cdk:cloudformation:props":{"cloudWatchRoleArn":{"Fn::GetAtt":["testapigatewaylambdaLambdaRestApiCloudWatchRole6D45E039","Arn"]}}}}}},"Integ":{"id":"Integ","path":"apilam-no-usage-plan/Integ","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"2.239.0-alpha.0"},"children":{"DefaultTest":{"id":"DefaultTest","path":"apilam-no-usage-plan/Integ/DefaultTest","constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"2.239.0-alpha.0"},"children":{"Default":{"id":"Default","path":"apilam-no-usage-plan/Integ/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.5.1"}},"DeployAssert":{"id":"DeployAssert","path":"apilam-no-usage-plan/Integ/DefaultTest/DeployAssert","constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.239.0"},"children":{"BootstrapVersion":{"id":"BootstrapVersion","path":"apilam-no-usage-plan/Integ/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.239.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"apilam-no-usage-plan/Integ/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.239.0"}}}}}}}},"BootstrapVersion":{"id":"BootstrapVersion","path":"apilam-no-usage-plan/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.239.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"apilam-no-usage-plan/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.239.0"}}}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.5.1"}}}}}
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
- * with the License. A copy of the License is located at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
- * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
- * and limitations under the License.
12
- */
13
-
14
- exports.handler = async (event, context) => {
15
- console.log('Received event:', JSON.stringify(event, null, 2));
16
-     return {
17
-       statusCode: 200,
18
-       headers: { 'Content-Type': 'text/plain' },
19
-       body: `Hello from AWS Solutions Constructs! You've hit ${event.path}\n`
20
-     };
21
- };
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
- * with the License. A copy of the License is located at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
- * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
- * and limitations under the License.
12
- */
13
-
14
- exports.handler = async (event, context) => {
15
- console.log('Received event:', JSON.stringify(event, null, 2));
16
-     return {
17
-       statusCode: 200,
18
-       headers: { 'Content-Type': 'text/plain' },
19
-       body: `Hello from AWS Solutions Constructs! You've hit ${event.path}\n`
20
-     };
21
- };
@@ -1,21 +0,0 @@
1
- /**
2
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
- * with the License. A copy of the License is located at
6
- *
7
- * http://www.apache.org/licenses/LICENSE-2.0
8
- *
9
- * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
- * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
- * and limitations under the License.
12
- */
13
-
14
- exports.handler = async (event, context) => {
15
- console.log('Received event:', JSON.stringify(event, null, 2));
16
-     return {
17
-       statusCode: 200,
18
-       headers: { 'Content-Type': 'text/plain' },
19
-       body: `Hello from AWS Solutions Constructs! You've hit ${event.path}\n`
20
-     };
21
- };
@@ -1,194 +0,0 @@
1
- "use strict";
2
- /**
3
- * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
- * with the License. A copy of the License is located at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
- * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
- * and limitations under the License.
13
- */
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- // Imports
16
- const aws_cdk_lib_1 = require("aws-cdk-lib");
17
- const lib_1 = require("../lib");
18
- const lambda = require("aws-cdk-lib/aws-lambda");
19
- const api = require("aws-cdk-lib/aws-apigateway");
20
- const assertions_1 = require("aws-cdk-lib/assertions");
21
- const defaults = require("@aws-solutions-constructs/core");
22
- test('Error on existingLambdaObj=undefined', () => {
23
- // Initial Setup
24
- const stack = new aws_cdk_lib_1.Stack();
25
- const props = {};
26
- const app = () => {
27
- new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
28
- };
29
- // Assertion 1
30
- expect(app).toThrowError();
31
- });
32
- test('Test with lambdaFunctionProps', () => {
33
- // Initial Setup
34
- const stack = new aws_cdk_lib_1.Stack();
35
- const props = {
36
- lambdaFunctionProps: {
37
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
38
- handler: 'index.handler',
39
- code: lambda.Code.fromAsset(`${__dirname}/lambda`),
40
- environment: {
41
- OVERRIDE_STATUS: 'true'
42
- }
43
- },
44
- apiGatewayProps: {
45
- description: "sampleApiProp"
46
- }
47
- };
48
- new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
49
- const template = assertions_1.Template.fromStack(stack);
50
- template.hasResourceProperties('AWS::Lambda::Function', {
51
- Environment: {
52
- Variables: {
53
- OVERRIDE_STATUS: "true",
54
- AWS_NODEJS_CONNECTION_REUSE_ENABLED: "1"
55
- }
56
- }
57
- });
58
- template.resourceCountIs('AWS::ApiGateway::UsagePlan', 1);
59
- });
60
- test('Test properties', () => {
61
- // Initial Setup
62
- const stack = new aws_cdk_lib_1.Stack();
63
- const props = {
64
- lambdaFunctionProps: {
65
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
66
- handler: 'index.handler',
67
- code: lambda.Code.fromAsset(`${__dirname}/lambda`)
68
- }
69
- };
70
- const app = new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
71
- // Assertion 1
72
- expect(app.lambdaFunction).toBeDefined();
73
- // Assertion 2
74
- expect(app.apiGateway).toBeDefined();
75
- expect(app.apiGatewayCloudWatchRole).toBeDefined();
76
- expect(app.apiGatewayLogGroup).toBeDefined();
77
- });
78
- test('Error on lambdaFunctionProps=undefined', () => {
79
- // Initial Setup
80
- const stack = new aws_cdk_lib_1.Stack();
81
- const props = {};
82
- const app = () => {
83
- new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
84
- };
85
- // Assertion 1
86
- expect(app).toThrowError();
87
- });
88
- test('Test deployment ApiGateway AuthorizationType override', () => {
89
- // Stack
90
- const stack = new aws_cdk_lib_1.Stack();
91
- // Helper declaration
92
- new lib_1.ApiGatewayToLambda(stack, 'api-gateway-lambda', {
93
- apiGatewayProps: {
94
- defaultMethodOptions: {
95
- authorizationType: api.AuthorizationType.NONE
96
- }
97
- },
98
- lambdaFunctionProps: {
99
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
100
- handler: 'index.handler',
101
- code: lambda.Code.fromAsset(`${__dirname}/lambda`)
102
- }
103
- });
104
- // Assertion 1
105
- const template = assertions_1.Template.fromStack(stack);
106
- template.hasResourceProperties("AWS::ApiGateway::Method", {
107
- HttpMethod: "ANY",
108
- AuthorizationType: "NONE"
109
- });
110
- });
111
- test('Test deployment ApiGateway override cloudWatchRole = false', () => {
112
- // Stack
113
- const stack = new aws_cdk_lib_1.Stack();
114
- // Helper declaration
115
- new lib_1.ApiGatewayToLambda(stack, 'api-gateway-lambda', {
116
- apiGatewayProps: {
117
- cloudWatchRole: false
118
- },
119
- lambdaFunctionProps: {
120
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
121
- handler: 'index.handler',
122
- code: lambda.Code.fromAsset(`${__dirname}/lambda`)
123
- }
124
- });
125
- // Assertion 1
126
- defaults.expectNonexistence(stack, "AWS::ApiGateway::Account", {});
127
- });
128
- test('Confirm call to CheckLambdaProps', () => {
129
- // Initial Setup
130
- const stack = new aws_cdk_lib_1.Stack();
131
- const lambdaFunction = new lambda.Function(stack, 'a-function', {
132
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
133
- handler: 'index.handler',
134
- code: lambda.Code.fromAsset(`${__dirname}/lambda`),
135
- });
136
- const props = {
137
- lambdaFunctionProps: {
138
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
139
- handler: 'index.handler',
140
- code: lambda.Code.fromAsset(`${__dirname}/lambda`),
141
- environment: {
142
- OVERRIDE_STATUS: 'true'
143
- }
144
- },
145
- existingLambdaObj: lambdaFunction,
146
- apiGatewayProps: {
147
- description: "sampleApiProp"
148
- }
149
- };
150
- const app = () => {
151
- new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
152
- };
153
- // Assertion
154
- expect(app).toThrowError('Error - Either provide lambdaFunctionProps or existingLambdaObj, but not both.\n');
155
- });
156
- test('Confirm call to CheckApiProps', () => {
157
- // Initial Setup
158
- const stack = new aws_cdk_lib_1.Stack();
159
- const lambdaFunction = new lambda.Function(stack, 'a-function', {
160
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
161
- handler: 'index.handler',
162
- code: lambda.Code.fromAsset(`${__dirname}/lambda`),
163
- });
164
- const props = {
165
- existingLambdaObj: lambdaFunction,
166
- apiGatewayProps: {
167
- defaultMethodOptions: {
168
- apiKeyRequired: true
169
- },
170
- },
171
- createUsagePlan: false,
172
- };
173
- const app = () => {
174
- new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
175
- };
176
- // Assertion
177
- expect(app).toThrowError('Error - if API key is required, then the Usage plan must be created\n');
178
- });
179
- test('Confirm suppression of Usage Plan', () => {
180
- // Initial Setup
181
- const stack = new aws_cdk_lib_1.Stack();
182
- const props = {
183
- lambdaFunctionProps: {
184
- code: new lambda.InlineCode('exports.handler = async (event) => { console.log(event); return {\'statusCode\': 200, \'body\': \'\'}; }'),
185
- runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
186
- handler: 'index.handler',
187
- },
188
- createUsagePlan: false
189
- };
190
- new lib_1.ApiGatewayToLambda(stack, 'test-apigateway-lambda', props);
191
- const template = assertions_1.Template.fromStack(stack);
192
- template.resourceCountIs('AWS::ApiGateway::UsagePlan', 0);
193
- });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5hcGlnYXRld2F5LWxhbWJkYS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5hcGlnYXRld2F5LWxhbWJkYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1YsNkNBQW9DO0FBQ3BDLGdDQUFxRTtBQUNyRSxpREFBaUQ7QUFDakQsa0RBQWtEO0FBQ2xELHVEQUFrRDtBQUNsRCwyREFBMkQ7QUFFM0QsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNoRCxnQkFBZ0I7SUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQTRCLEVBQ3RDLENBQUM7SUFDRixNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7UUFDZixJQUFJLHdCQUFrQixDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDLENBQUM7SUFDQSxjQUFjO0lBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7SUFDekMsZ0JBQWdCO0lBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUE0QjtRQUNyQyxtQkFBbUIsRUFBRTtZQUNuQixPQUFPLEVBQUUsUUFBUSxDQUFDLHFDQUFxQztZQUN2RCxPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLFNBQVMsQ0FBQztZQUNsRCxXQUFXLEVBQUU7Z0JBQ1gsZUFBZSxFQUFFLE1BQU07YUFDeEI7U0FDRjtRQUNELGVBQWUsRUFBRTtZQUNmLFdBQVcsRUFBRSxlQUFlO1NBQzdCO0tBQ0Ys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TUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO0FBQ3BHLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtJQUM3QyxnQkFBZ0I7SUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsTUFBTSxLQUFLLEdBQTRCO1FBQ3JDLG1CQUFtQixFQUFFO1lBQ2xCLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsMEdBQTBHLENBQUM7WUFDdkksT0FBTyxFQUFFLFFBQVEsQ0FBQyxxQ0FBcUM7WUFDdkQsT0FBTyxFQUFFLGVBQWU7U0FDMUI7UUFDRCxlQUFlLEVBQUUsS0FBSztLQUN2QixDQUFDO0lBQ0YsSUFBSSx3QkFBa0IsQ0FBQyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFL0QsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBBcGlHYXRld2F5VG9MYW1iZGEsIEFwaUdhdGV3YXlUb0xhbWJkYVByb3BzIH0gZnJvbSBcIi4uL2xpYlwiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgYXBpIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2Fzc2VydGlvbnNcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJ0Bhd3Mtc29sdXRpb25zLWNvbnN0cnVjdHMvY29yZSc7XG5cbnRlc3QoJ0Vycm9yIG9uIGV4aXN0aW5nTGFtYmRhT2JqPXVuZGVmaW5lZCcsICgpID0+IHtcbiAgLy8gSW5pdGlhbCBTZXR1cFxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBjb25zdCBwcm9wczogQXBpR2F0ZXdheVRvTGFtYmRhUHJvcHMgPSB7XG4gIH07XG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBuZXcgQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAndGVzdC1hcGlnYXRld2F5LWxhbWJkYScsIHByb3BzKTtcbiAgfTtcbiAgICAvLyBBc3NlcnRpb24gMVxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHdpdGggbGFtYmRhRnVuY3Rpb25Qcm9wcycsICgpID0+IHtcbiAgLy8gSW5pdGlhbCBTZXR1cFxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBjb25zdCBwcm9wczogQXBpR2F0ZXdheVRvTGFtYmRhUHJvcHMgPSB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgcnVudGltZTogZGVmYXVsdHMuQ09NTUVSQ0lBTF9SRUdJT05fTEFNQkRBX05PREVfUlVOVElNRSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgT1ZFUlJJREVfU1RBVFVTOiAndHJ1ZSdcbiAgICAgIH1cbiAgICB9LFxuICAgIGFwaUdhdGV3YXlQcm9wczoge1xuICAgICAgZGVzY3JpcHRpb246IFwic2FtcGxlQXBpUHJvcFwiXG4gICAgfVxuICB9O1xuICBuZXcgQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAndGVzdC1hcGlnYXRld2F5LWxhbWJkYScsIHByb3BzKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgIEVudmlyb25tZW50OiB7XG4gICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgT1ZFUlJJREVfU1RBVFVTOiBcInRydWVcIixcbiAgICAgICAgQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQ6IFwiMVwiXG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkFwaUdhdGV3YXk6OlVzYWdlUGxhbicsIDEpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgcHJvcGVydGllcycsICgpID0+IHtcbiAgLy8gSW5pdGlhbCBTZXR1cFxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBjb25zdCBwcm9wczogQXBpR2F0ZXdheVRvTGFtYmRhUHJvcHMgPSB7XG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgcnVudGltZTogZGVmYXVsdHMuQ09NTUVSQ0lBTF9SRUdJT05fTEFNQkRBX05PREVfUlVOVElNRSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApXG4gICAgfVxuICB9O1xuICBjb25zdCBhcHAgPSBuZXcgQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAndGVzdC1hcGlnYXRld2F5LWxhbWJkYScsIHByb3BzKTtcbiAgLy8gQXNzZXJ0aW9uIDFcbiAgZXhwZWN0KGFwcC5sYW1iZGFGdW5jdGlvbikudG9CZURlZmluZWQoKTtcbiAgLy8gQXNzZXJ0aW9uIDJcbiAgZXhwZWN0KGFwcC5hcGlHYXRld2F5KS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoYXBwLmFwaUdhdGV3YXlDbG91ZFdhdGNoUm9sZSkudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KGFwcC5hcGlHYXRld2F5TG9nR3JvdXApLnRvQmVEZWZpbmVkKCk7XG59KTtcblxudGVzdCgnRXJyb3Igb24gbGFtYmRhRnVuY3Rpb25Qcm9wcz11bmRlZmluZWQnLCAoKSA9PiB7XG4gIC8vIEluaXRpYWwgU2V0dXBcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgY29uc3QgcHJvcHM6IEFwaUdhdGV3YXlUb0xhbWJkYVByb3BzID0ge1xuICB9O1xuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgbmV3IEFwaUdhdGV3YXlUb0xhbWJkYShzdGFjaywgJ3Rlc3QtYXBpZ2F0ZXdheS1sYW1iZGEnLCBwcm9wcyk7XG4gIH07XG4gICAgLy8gQXNzZXJ0aW9uIDFcbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCk7XG59KTtcblxudGVzdCgnVGVzdCBkZXBsb3ltZW50IEFwaUdhdGV3YXkgQXV0aG9yaXphdGlvblR5cGUgb3ZlcnJpZGUnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEhlbHBlciBkZWNsYXJhdGlvblxuICBuZXcgQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAnYXBpLWdhdGV3YXktbGFtYmRhJywge1xuICAgIGFwaUdhdGV3YXlQcm9wczoge1xuICAgICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IHtcbiAgICAgICAgYXV0aG9yaXphdGlvblR5cGU6IGFwaS5BdXRob3JpemF0aW9uVHlwZS5OT05FXG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICBydW50aW1lOiBkZWZhdWx0cy5DT01NRVJDSUFMX1JFR0lPTl9MQU1CREFfTk9ERV9SVU5USU1FLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYClcbiAgICB9XG4gIH0pO1xuICAvLyBBc3NlcnRpb24gMVxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCIsIHtcbiAgICBIdHRwTWV0aG9kOiBcIkFOWVwiLFxuICAgIEF1dGhvcml6YXRpb25UeXBlOiBcIk5PTkVcIlxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgQXBpR2F0ZXdheSBvdmVycmlkZSBjbG91ZFdhdGNoUm9sZSA9IGZhbHNlJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBIZWxwZXIgZGVjbGFyYXRpb25cbiAgbmV3IEFwaUdhdGV3YXlUb0xhbWJkYShzdGFjaywgJ2FwaS1nYXRld2F5LWxhbWJkYScsIHtcbiAgICBhcGlHYXRld2F5UHJvcHM6IHtcbiAgICAgIGNsb3VkV2F0Y2hSb2xlOiBmYWxzZVxuICAgIH0sXG4gICAgbGFtYmRhRnVuY3Rpb25Qcm9wczoge1xuICAgICAgcnVudGltZTogZGVmYXVsdHMuQ09NTUVSQ0lBTF9SRUdJT05fTEFNQkRBX05PREVfUlVOVElNRSxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApXG4gICAgfVxuICB9KTtcbiAgLy8gQXNzZXJ0aW9uIDFcbiAgZGVmYXVsdHMuZXhwZWN0Tm9uZXhpc3RlbmNlKHN0YWNrLCBcIkFXUzo6QXBpR2F0ZXdheTo6QWNjb3VudFwiLCB7fSk7XG59KTtcblxudGVzdCgnQ29uZmlybSBjYWxsIHRvIENoZWNrTGFtYmRhUHJvcHMnLCAoKSA9PiB7XG4gIC8vIEluaXRpYWwgU2V0dXBcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAnYS1mdW5jdGlvbicsIHtcbiAgICBydW50aW1lOiBkZWZhdWx0cy5DT01NRVJDSUFMX1JFR0lPTl9MQU1CREFfTk9ERV9SVU5USU1FLFxuICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvcHM6IEFwaUdhdGV3YXlUb0xhbWJkYVByb3BzID0ge1xuICAgIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgIHJ1bnRpbWU6IGRlZmF1bHRzLkNPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1JVTlRJTUUsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIE9WRVJSSURFX1NUQVRVUzogJ3RydWUnXG4gICAgICB9XG4gICAgfSxcbiAgICBleGlzdGluZ0xhbWJkYU9iajogbGFtYmRhRnVuY3Rpb24sXG4gICAgYXBpR2F0ZXdheVByb3BzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJzYW1wbGVBcGlQcm9wXCJcbiAgICB9XG4gIH07XG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBuZXcgQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAndGVzdC1hcGlnYXRld2F5LWxhbWJkYScsIHByb3BzKTtcbiAgfTtcbiAgLy8gQXNzZXJ0aW9uXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcignRXJyb3IgLSBFaXRoZXIgcHJvdmlkZSBsYW1iZGFGdW5jdGlvblByb3BzIG9yIGV4aXN0aW5nTGFtYmRhT2JqLCBidXQgbm90IGJvdGguXFxuJyk7XG59KTtcblxudGVzdCgnQ29uZmlybSBjYWxsIHRvIENoZWNrQXBpUHJvcHMnLCAoKSA9PiB7XG4gIC8vIEluaXRpYWwgU2V0dXBcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCAnYS1mdW5jdGlvbicsIHtcbiAgICBydW50aW1lOiBkZWZhdWx0cy5DT01NRVJDSUFMX1JFR0lPTl9MQU1CREFfTk9ERV9SVU5USU1FLFxuICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvcHM6IEFwaUdhdGV3YXlUb0xhbWJkYVByb3BzID0ge1xuICAgIGV4aXN0aW5nTGFtYmRhT2JqOiBsYW1iZGFGdW5jdGlvbixcbiAgICBhcGlHYXRld2F5UHJvcHM6IHtcbiAgICAgIGRlZmF1bHRNZXRob2RPcHRpb25zOiB7XG4gICAgICAgIGFwaUtleVJlcXVpcmVkOiB0cnVlXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3JlYXRlVXNhZ2VQbGFuOiBmYWxzZSxcbiAgfTtcbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIG5ldyBBcGlHYXRld2F5VG9MYW1iZGEoc3RhY2ssICd0ZXN0LWFwaWdhdGV3YXktbGFtYmRhJywgcHJvcHMpO1xuICB9O1xuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdFcnJvciAtIGlmIEFQSSBrZXkgaXMgcmVxdWlyZWQsIHRoZW4gdGhlIFVzYWdlIHBsYW4gbXVzdCBiZSBjcmVhdGVkXFxuJyk7XG59KTtcblxudGVzdCgnQ29uZmlybSBzdXBwcmVzc2lvbiBvZiBVc2FnZSBQbGFuJywgKCkgPT4ge1xuICAvLyBJbml0aWFsIFNldHVwXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIGNvbnN0IHByb3BzOiBBcGlHYXRld2F5VG9MYW1iZGFQcm9wcyA9IHtcbiAgICBsYW1iZGFGdW5jdGlvblByb3BzOiB7XG4gICAgICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKCdleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoZXZlbnQpID0+IHsgY29uc29sZS5sb2coZXZlbnQpOyByZXR1cm4ge1xcJ3N0YXR1c0NvZGVcXCc6IDIwMCwgXFwnYm9keVxcJzogXFwnXFwnfTsgfScpLFxuICAgICAgIHJ1bnRpbWU6IGRlZmF1bHRzLkNPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1JVTlRJTUUsXG4gICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgIH0sXG4gICAgY3JlYXRlVXNhZ2VQbGFuOiBmYWxzZVxuICB9O1xuICBuZXcgQXBpR2F0ZXdheVRvTGFtYmRhKHN0YWNrLCAndGVzdC1hcGlnYXRld2F5LWxhbWJkYScsIHByb3BzKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpBcGlHYXRld2F5OjpVc2FnZVBsYW4nLCAwKTtcbn0pO1xuIl19