@mavogel/cdk-vscode-server 0.0.59 → 0.0.61

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 (55) hide show
  1. package/.claude/hooks/file_checker.sh +3 -0
  2. package/.jsii +453 -30
  3. package/API.md +514 -0
  4. package/README.md +57 -0
  5. package/assets/idle-monitor/idle-monitor.lambda/index.js +110 -0
  6. package/assets/status-check/status-check.lambda/index.js +123 -0
  7. package/examples/auto-stop/main.ts +75 -0
  8. package/integ-tests/functions/idle-test-handler.ts +178 -0
  9. package/integ-tests/functions/login-handler.ts +62 -33
  10. package/integ-tests/integ.al2023.ts.snapshot/read.13497.1.lock +1 -0
  11. package/integ-tests/integ.custom-domain.ts.snapshot/read.13497.1.lock +1 -0
  12. package/integ-tests/integ.stop-on-idle.ts +175 -0
  13. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.assets.json +33 -0
  14. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegStopOnIdleFunctionalityDefaultTestDeployAssertEECF3FC0.template.json +692 -0
  15. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.assets.json +146 -0
  16. package/integ-tests/integ.stop-on-idle.ts.snapshot/IntegTestStackStopOnIdle.template.json +3077 -0
  17. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.2819175352ad1ce0dae768e83fc328fb70fb5f10b4a8ff0ccbcb791f02b0716d/index.js +1 -0
  18. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.lambda/index.js +143 -0
  19. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.530055f7515b3f0a47900f5df37e729ba40ca977b2d07b952bdefa2b8f883f42.bundle/index.js +30676 -0
  20. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.lambda/index.js +57 -0
  21. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/__entrypoint__.js +1 -0
  22. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.7fa1e366ee8a9ded01fc355f704cff92bfd179574e6f9cfee800a3541df1b200/index.js +1 -0
  23. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.8dd4be31c5a6cd8750dc55c07c1e2f19596f8a27b032d02c18554ed44eabe065.lambda/index.js +110 -0
  24. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00/index.js +1 -0
  25. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/cfn-response.js +1 -0
  26. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/consts.js +1 -0
  27. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/framework.js +3 -0
  28. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/outbound.js +1 -0
  29. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca/util.js +1 -0
  30. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.d061a1ca61c6339fcb77bb6fc19194a60c96bb16531eaf1e4e733b50089512ca/index.js +118 -0
  31. package/integ-tests/integ.stop-on-idle.ts.snapshot/asset.efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9/index.js +6017 -0
  32. package/integ-tests/integ.stop-on-idle.ts.snapshot/integ.json +20 -0
  33. package/integ-tests/integ.stop-on-idle.ts.snapshot/manifest.json +1942 -0
  34. package/integ-tests/integ.stop-on-idle.ts.snapshot/tree.json +1 -0
  35. package/integ-tests/integ.ubuntu.ts.snapshot/read.13497.1.lock +1 -0
  36. package/lib/idle-monitor/idle-monitor-function.d.ts +13 -0
  37. package/lib/idle-monitor/idle-monitor-function.js +22 -0
  38. package/lib/idle-monitor/idle-monitor.d.ts +53 -0
  39. package/lib/idle-monitor/idle-monitor.js +84 -0
  40. package/lib/idle-monitor/idle-monitor.lambda.d.ts +2 -0
  41. package/lib/idle-monitor/idle-monitor.lambda.js +97 -0
  42. package/lib/index.d.ts +2 -0
  43. package/lib/index.js +3 -1
  44. package/lib/status-check/status-check-function.d.ts +13 -0
  45. package/lib/status-check/status-check-function.js +22 -0
  46. package/lib/status-check/status-check.d.ts +36 -0
  47. package/lib/status-check/status-check.js +109 -0
  48. package/lib/status-check/status-check.lambda.d.ts +2 -0
  49. package/lib/status-check/status-check.lambda.js +104 -0
  50. package/lib/vscode-server.d.ts +42 -0
  51. package/lib/vscode-server.js +51 -7
  52. package/mavogelcdkvscodeserver/go.mod +2 -2
  53. package/mavogelcdkvscodeserver/jsii/jsii.go +2 -2
  54. package/mavogelcdkvscodeserver/version +1 -1
  55. package/package.json +21 -16
@@ -0,0 +1 @@
1
+ {"version":"tree-0.1","tree":{"id":"App","path":"","children":{"IntegTestStackStopOnIdle":{"id":"IntegTestStackStopOnIdle","path":"IntegTestStackStopOnIdle","children":{"IntegVSCodeServer":{"id":"IntegVSCodeServer","path":"IntegTestStackStopOnIdle/IntegVSCodeServer","children":{"password-secret":{"id":"password-secret","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/password-secret","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/password-secret/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::SecretsManager::Secret","aws:cdk:cloudformation:props":{"generateSecretString":{"passwordLength":16,"secretStringTemplate":"{\"username\":\"participant\"}","excludePunctuation":true,"includeSpace":false,"generateStringKey":"password"},"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.CfnSecret","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_secretsmanager.Secret","version":"2.190.0","metadata":[{"generateSecretString":{"passwordLength":"*","secretStringTemplate":"*","excludePunctuation":true,"includeSpace":false,"generateStringKey":"*"}}]}},"SecretRetrieverOnEventHandler":{"id":"SecretRetrieverOnEventHandler","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"secretsmanager:GetSecretValue","Effect":"Allow","Resource":{"Ref":"IntegVSCodeServerpasswordsecret202A5DB3"}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerSecretRetrieverOnEventHandlerServiceRoleDefaultPolicy2641E2C6","roles":[{"Ref":"IntegVSCodeServerSecretRetrieverOnEventHandlerServiceRoleBEF8D4D2"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverOnEventHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"781ab0ab74634cdaf61539ab208ab777829ef07097ac21f95b9e15a3b1eedc1b.zip"},"description":"src/secret-retriever/secret-retriever.lambda.ts","handler":"index.handler","memorySize":128,"role":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerServiceRoleBEF8D4D2","Arn"]},"runtime":"nodejs20.x","timeout":10}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"description":"*","timeout":"*","memorySize":"*","runtime":"*","handler":"*","code":"*"}]}},"SecretRetrieveProvider":{"id":"SecretRetrieveProvider","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerSecretRetrieveProviderframeworkonEventServiceRoleDefaultPolicyEC4DCEA0","roles":[{"Ref":"IntegVSCodeServerSecretRetrieveProviderframeworkonEventServiceRole0F156B64"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider/framework-onEvent/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"},"description":"AWS CDK resource provider framework - onEvent (IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieveProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieverOnEventHandlerDD084AE3","Arn"]}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["IntegVSCodeServerSecretRetrieveProviderframeworkonEventServiceRole0F156B64","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"2.190.0"}},"SecretRetrieverCustomResource":{"id":"SecretRetrieverCustomResource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverCustomResource","children":{"Default":{"id":"Default","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SecretRetrieverCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*","*"]}},"vpc":{"id":"vpc","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPC","aws:cdk:cloudformation:props":{"cidrBlock":"10.0.0.0/16","enableDnsHostnames":true,"enableDnsSupport":true,"instanceTenancy":"default","tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPC","version":"2.190.0"}},"publicSubnet1":{"id":"publicSubnet1","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1","children":{"Subnet":{"id":"Subnet","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.0.0/17","mapPublicIpOnLaunch":true,"tags":[{"key":"app","value":"vscode-server"},{"key":"aws-cdk:subnet-name","value":"public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1"},{"key":"TestType","value":"StopOnIdle"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"2.190.0"}},"Acl":{"id":"Acl","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1"},{"key":"TestType","value":"StopOnIdle"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"2.190.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet1RouteTableFD418D0B"},"subnetId":{"Ref":"IntegVSCodeServervpcpublicSubnet1Subnet928029A1"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"2.190.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet1/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"IntegVSCodeServervpcIGW960F6D83"},"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet1RouteTableFD418D0B"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"2.190.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"publicSubnet2":{"id":"publicSubnet2","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2","children":{"Subnet":{"id":"Subnet","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2/Subnet","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Subnet","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[1,{"Fn::GetAZs":""}]},"cidrBlock":"10.0.128.0/17","mapPublicIpOnLaunch":true,"tags":[{"key":"app","value":"vscode-server"},{"key":"aws-cdk:subnet-name","value":"public"},{"key":"aws-cdk:subnet-type","value":"Public"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2"},{"key":"TestType","value":"StopOnIdle"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnet","version":"2.190.0"}},"Acl":{"id":"Acl","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2/Acl","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}},"RouteTable":{"id":"RouteTable","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2/RouteTable","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::RouteTable","aws:cdk:cloudformation:props":{"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2"},{"key":"TestType","value":"StopOnIdle"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRouteTable","version":"2.190.0"}},"RouteTableAssociation":{"id":"RouteTableAssociation","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2/RouteTableAssociation","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SubnetRouteTableAssociation","aws:cdk:cloudformation:props":{"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet2RouteTableC264EFB4"},"subnetId":{"Ref":"IntegVSCodeServervpcpublicSubnet2SubnetE381654D"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSubnetRouteTableAssociation","version":"2.190.0"}},"DefaultRoute":{"id":"DefaultRoute","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/publicSubnet2/DefaultRoute","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Route","aws:cdk:cloudformation:props":{"destinationCidrBlock":"0.0.0.0/0","gatewayId":{"Ref":"IntegVSCodeServervpcIGW960F6D83"},"routeTableId":{"Ref":"IntegVSCodeServervpcpublicSubnet2RouteTableC264EFB4"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnRoute","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.PublicSubnet","version":"2.190.0","metadata":[{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{"availabilityZone":"*","vpcId":"*","cidrBlock":"*","mapPublicIpOnLaunch":true,"ipv6CidrBlock":"*","assignIpv6AddressOnCreation":"*"},{}]}},"IGW":{"id":"IGW","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/IGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::InternetGateway","aws:cdk:cloudformation:props":{"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInternetGateway","version":"2.190.0"}},"VPCGW":{"id":"VPCGW","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/VPCGW","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::VPCGatewayAttachment","aws:cdk:cloudformation:props":{"internetGatewayId":{"Ref":"IntegVSCodeServervpcIGW960F6D83"},"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnVPCGatewayAttachment","version":"2.190.0"}},"RestrictDefaultSecurityGroupCustomResource":{"id":"RestrictDefaultSecurityGroupCustomResource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/RestrictDefaultSecurityGroupCustomResource","children":{"Default":{"id":"Default","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/vpc/RestrictDefaultSecurityGroupCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Vpc","version":"2.190.0","metadata":[{"maxAzs":"*","createInternetGateway":true,"subnetConfiguration":[{"name":"*","subnetType":"Public"}],"enableDnsHostnames":true,"enableDnsSupport":true}]}},"cf-to-server-sg":{"id":"cf-to-server-sg","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-to-server-sg","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-to-server-sg/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroup","aws:cdk:cloudformation:props":{"groupDescription":"SG for VSCodeServer - only allow CloudFront ingress","groupName":"cloudfront-to-vscode-server","securityGroupEgress":[{"cidrIp":"0.0.0.0/0","description":"Allow all outbound traffic by default","ipProtocol":"-1"}],"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"TestType","value":"StopOnIdle"}],"vpcId":{"Ref":"IntegVSCodeServervpc93DDE887"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroup","version":"2.190.0"}},"from {IndirectPeer}:80":{"id":"from {IndirectPeer}:80","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-to-server-sg/from {IndirectPeer}:80","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::SecurityGroupIngress","aws:cdk:cloudformation:props":{"description":"Allow HTTP from com.amazonaws.global.cloudfront.origin-facing","fromPort":80,"groupId":{"Fn::GetAtt":["IntegVSCodeServercftoserversgFFE586B0","GroupId"]},"ipProtocol":"tcp","sourcePrefixListId":{"Fn::GetAtt":["IntegVSCodeServercfprefixlistIdGetPrefixListIdF0821FFC","PrefixLists.0.PrefixListId"]},"toPort":80}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnSecurityGroupIngress","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.SecurityGroup","version":"2.190.0","metadata":[{"vpc":"*","description":"*","securityGroupName":"*"},{"addIngressRule":[{"canInlineRule":false,"connections":"*","uniqueId":"*"},{},"*"]}]}},"cf-prefixlistId":{"id":"cf-prefixlistId","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId","children":{"GetPrefixListIdLogGroup":{"id":"GetPrefixListIdLogGroup","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdLogGroup","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdLogGroup/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Logs::LogGroup","aws:cdk:cloudformation:props":{"retentionInDays":1,"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.CfnLogGroup","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogGroup","version":"2.190.0","metadata":[{"removalPolicy":"destroy","retention":1}]}},"GetPrefixListIdRole":{"id":"GetPrefixListIdRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdRole","children":{"ImportGetPrefixListIdRole":{"id":"ImportGetPrefixListIdRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdRole/ImportGetPrefixListIdRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListIdRole/Resource","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"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"}},{"attachInlinePolicy":["*"]}]}},"GetPrefixListId":{"id":"GetPrefixListId","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId","children":{"Provider":{"id":"Provider","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/Provider","constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.SingletonFunction","version":"2.190.0","metadata":[{"uuid":"*","lambdaPurpose":"*","memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"},{"addMetadata":["*",true]},{"addMetadata":["*","*"]}]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/Resource","children":{"Default":{"id":"Default","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/Resource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"CustomResourcePolicy":{"id":"CustomResourcePolicy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/CustomResourcePolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/GetPrefixListId/CustomResourcePolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"ec2:DescribeManagedPrefixLists","Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServercfprefixlistIdGetPrefixListIdCustomResourcePolicyAB3F4958","roles":[{"Ref":"IntegVSCodeServercfprefixlistIdGetPrefixListIdRole1302B3E1"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":[{"statements":"*"},{"addStatements":[{}]},{"attachToRole":["*"]},{"attachToRole":["*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.AwsCustomResource","version":"2.190.0"}},"PrefixList":{"id":"PrefixList","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-prefixlistId/PrefixList","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"server-instance-role":{"id":"server-instance-role","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance-role","children":{"Importserver-instance-role":{"id":"Importserver-instance-role","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance-role/Importserver-instance-role","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance-role/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Role","aws:cdk:cloudformation:props":{"assumeRolePolicyDocument":{"Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":["ec2.amazonaws.com","ssm.amazonaws.com"]}}],"Version":"2012-10-17"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/AmazonSSMManagedInstanceCore"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/CloudWatchAgentServerPolicy"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/AmazonQDeveloperAccess"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/ReadOnlyAccess"]]}],"policies":[{"policyName":"VSCodeInstanceInlinePolicy","policyDocument":{"Statement":[{"Action":["iam:AddRoleToInstanceProfile","iam:AttachRolePolicy","iam:CreateRole","iam:CreateServiceLinkedRole","iam:DeleteRole","iam:DeleteRolePermissionsBoundary","iam:DeleteRolePolicy","iam:DeleteServiceLinkedRole","iam:DetachRolePolicy","iam:GetRole","iam:GetRolePolicy","iam:GetServiceLinkedRoleDeletionStatus","iam:ListAttachedRolePolicies","iam:ListInstanceProfilesForRole","iam:ListRolePolicies","iam:ListRoleTags","iam:ListRoles","iam:PutRolePermissionsBoundary","iam:PutRolePolicy","iam:RemoveRoleFromInstanceProfile","iam:TagRole","iam:UntagRole","iam:UpdateAssumeRolePolicy","iam:UpdateRole","iam:UpdateRoleDescription","sts:AssumeRole"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:iam::",{"Ref":"AWS::AccountId"},":role/cdk-*"]]},"Sid":"StsAccess"},{"Action":"iam:PassRole","Condition":{"StringLike":{"iam:PassedToService":"cloudformation.amazonaws.com"}},"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:iam::",{"Ref":"AWS::AccountId"},":role/cdk-*"]]}},{"Action":"cloudformation:*","Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:cloudformation:*:",{"Ref":"AWS::AccountId"},":stack/CDKToolkit/*"]]}},{"Action":["cloudformation:CreateChangeSet","cloudformation:DeleteChangeSet","cloudformation:ExecuteChangeSet","ec2:DescribeInstances","ec2:DescribeVolumesModifications*","ec2:ModifyVolume"],"Effect":"Allow","Resource":"*"},{"Action":"s3:*","Effect":"Allow","Resource":"*","Sid":"S3Access"},{"Action":["ecr:CreateRepository","ecr:DeleteRepository","ecr:DescribeRepositories","ecr:GetLifecyclePolicy","ecr:PutImageScanningConfiguration","ecr:PutLifecyclePolicy","ecr:SetRepositoryPolicy"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:ecr:*:",{"Ref":"AWS::AccountId"},":repository/cdk-*"]]},"Sid":"ECRAccess"},{"Action":["ssm:DeleteParameter*","ssm:GetParameter*","ssm:PutParameter*"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:ssm:*:",{"Ref":"AWS::AccountId"},":parameter/cdk-bootstrap/*"]]}},{"Action":["codepipeline:DisableStageTransition","codepipeline:EnableStageTransition","codepipeline:StartPipelineExecution","codepipeline:StopPipelineExecution","codepipeline:UpdatePipeline"],"Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:codepipeline:*:",{"Ref":"AWS::AccountId"},":*/*"]]}},{"Action":"kms:Decrypt","Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:kms:*:",{"Ref":"AWS::AccountId"},":key/*"]]}}],"Version":"2012-10-17"}}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"inlinePolicies":"*","managedPolicies":[{"managedPolicyArn":"*"},{"managedPolicyArn":"*"},{"managedPolicyArn":"*"},{"managedPolicyArn":"*"}]}]}},"server-instance":{"id":"server-instance","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance","children":{"InstanceProfile":{"id":"InstanceProfile","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance/InstanceProfile","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::InstanceProfile","aws:cdk:cloudformation:props":{"roles":[{"Ref":"IntegVSCodeServerserverinstancerole7745B5BB"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnInstanceProfile","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::Instance","aws:cdk:cloudformation:props":{"availabilityZone":{"Fn::Select":[0,{"Fn::GetAZs":""}]},"blockDeviceMappings":[{"deviceName":"/dev/sda1","ebs":{"encrypted":true,"deleteOnTermination":true,"volumeSize":8,"volumeType":"gp3"}}],"iamInstanceProfile":{"Ref":"IntegVSCodeServerserverinstanceInstanceProfile6130979E"},"imageId":{"Ref":"SsmParameterValueawsservicecanonicalubuntuserverjammystablecurrentarm64hvmebsgp2amiidC96584B6F00A464EAD1953AFF4B05118Parameter"},"instanceType":"t4g.large","launchTemplate":{"launchTemplateName":"IntegTestStackStopOnIdleIntegVSCodeServerserverinstanceLaunchTemplateD9ABA365","version":{"Fn::GetAtt":["IntegVSCodeServerserverinstanceLaunchTemplate43932ED3","LatestVersionNumber"]}},"monitoring":true,"networkInterfaces":[{"deviceIndex":"0","associatePublicIpAddress":true,"subnetId":{"Ref":"IntegVSCodeServervpcpublicSubnet1Subnet928029A1"},"groupSet":[{"Fn::GetAtt":["IntegVSCodeServercftoserversgFFE586B0","GroupId"]}]}],"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"VSCodeServer"},{"key":"TestType","value":"StopOnIdle"}],"userData":{"Fn::Base64":"\n #cloud-config\n hostname: VSCodeServer\n runcmd:\n - mkdir -p /Workshop && chown -R participant:participant /Workshop\n "}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnInstance","version":"2.190.0"}},"LaunchTemplate":{"id":"LaunchTemplate","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/server-instance/LaunchTemplate","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::LaunchTemplate","aws:cdk:cloudformation:props":{"launchTemplateData":{"metadataOptions":{"httpTokens":"required"}},"launchTemplateName":"IntegTestStackStopOnIdleIntegVSCodeServerserverinstanceLaunchTemplateD9ABA365"}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnLaunchTemplate","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.Instance","version":"2.190.0","metadata":[{"vpc":"*","instanceName":"*","instanceType":"*","machineImage":"*","requireImdsv2":true,"vpcSubnets":{"subnetType":"Public"},"associatePublicIpAddress":true,"detailedMonitoring":true,"blockDevices":[{"deviceName":"*","volume":"*"}],"role":"*","securityGroup":"*","userData":"*"}]}},"elastic-ip":{"id":"elastic-ip","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/elastic-ip","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIP","aws:cdk:cloudformation:props":{"domain":"vpc","tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"Name","value":"VSCodeServer-EIP"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIP","version":"2.190.0"}},"eip-association":{"id":"eip-association","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/eip-association","attributes":{"aws:cdk:cloudformation:type":"AWS::EC2::EIPAssociation","aws:cdk:cloudformation:props":{"eip":{"Ref":"IntegVSCodeServerelasticip31D48F71"},"instanceId":{"Ref":"IntegVSCodeServerserverinstance0A3D62D7"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ec2.CfnEIPAssociation","version":"2.190.0"}},"cf-cache-policy":{"id":"cf-cache-policy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-cache-policy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-cache-policy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFront::CachePolicy","aws:cdk:cloudformation:props":{"cachePolicyConfig":{"name":"cf-cache-policy-vscodeserver-IntegTestStackStopOnIdle","comment":"Cache policy for VSCodeServer","minTtl":1,"maxTtl":31536000,"defaultTtl":86400,"parametersInCacheKeyAndForwardedToOrigin":{"cookiesConfig":{"cookieBehavior":"all"},"headersConfig":{"headerBehavior":"whitelist","headers":["Accept-Charset","Authorization","Origin","Accept","Referer","Host","Accept-Language","Accept-Encoding","Accept-Datetime"]},"enableAcceptEncodingGzip":false,"enableAcceptEncodingBrotli":false,"queryStringsConfig":{"queryStringBehavior":"all"}}}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.CfnCachePolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.CachePolicy","version":"2.190.0","metadata":[{"cachePolicyName":"*","comment":"*","minTtl":"*","maxTtl":"*","defaultTtl":"*","cookieBehavior":"*","enableAcceptEncodingGzip":false,"headerBehavior":"*","queryStringBehavior":"*"}]}},"cf-distribution":{"id":"cf-distribution","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-distribution","children":{"Origin1":{"id":"Origin1","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-distribution/Origin1","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/cf-distribution/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::CloudFront::Distribution","aws:cdk:cloudformation:props":{"distributionConfig":{"enabled":true,"origins":[{"domainName":{"Fn::Join":["",["ec2-",{"Fn::Join":["-",{"Fn::Split":[".",{"Fn::GetAtt":["IntegVSCodeServerelasticip31D48F71","PublicIp"]}]}]},".",{"Ref":"AWS::Region"},".compute.amazonaws.com"]]},"id":"Cloudfront-IntegTestStackStopOnIdle-IntegTestStackStopOnIdle","customOriginConfig":{"originSslProtocols":["TLSv1.2"],"originProtocolPolicy":"http-only"}}],"defaultCacheBehavior":{"pathPattern":"*","targetOriginId":"Cloudfront-IntegTestStackStopOnIdle-IntegTestStackStopOnIdle","allowedMethods":["GET","HEAD","OPTIONS","PUT","PATCH","POST","DELETE"],"cachePolicyId":{"Ref":"IntegVSCodeServercfcachepolicy8F5F1F69"},"compress":true,"originRequestPolicyId":"216adef6-5c7f-47e4-b989-5492eafa07d3","viewerProtocolPolicy":"allow-all"},"cacheBehaviors":[{"pathPattern":"/proxy/*","targetOriginId":"Cloudfront-IntegTestStackStopOnIdle-IntegTestStackStopOnIdle","allowedMethods":["GET","HEAD","OPTIONS","PUT","PATCH","POST","DELETE"],"cachePolicyId":"4135ea2d-6df8-44a3-9df3-4b5a84be39ad","compress":false,"originRequestPolicyId":"216adef6-5c7f-47e4-b989-5492eafa07d3","viewerProtocolPolicy":"allow-all"}],"comment":"Distribution for VSCodeServer","httpVersion":"http2and3","ipv6Enabled":true,"priceClass":"PriceClass_All"},"tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.CfnDistribution","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_cloudfront.Distribution","version":"2.190.0","metadata":[{"enabled":true,"httpVersion":"http2and3","comment":"*","priceClass":"PriceClass_All","defaultBehavior":{"allowedMethods":"*","cachePolicy":"*","originRequestPolicy":{"originRequestPolicyId":"*"},"viewerProtocolPolicy":"allow-all","origin":"*"},"additionalBehaviors":"*"},{"addBehavior":["*",{},{"allowedMethods":"*","compress":false,"cachePolicy":{"cachePolicyId":"*"},"originRequestPolicy":{"originRequestPolicyId":"*"},"viewerProtocolPolicy":"allow-all"}]}]}},"ssm-document-ubuntu":{"id":"ssm-document-ubuntu","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/ssm-document-ubuntu","attributes":{"aws:cdk:cloudformation:type":"AWS::SSM::Document","aws:cdk:cloudformation:props":{"content":{"schemaVersion":"2.2","description":"Bootstrap VSCode code-server instance","parameters":{"VSCodePassword":{"type":"String","default":{"Ref":"AWS::StackId"}},"NodeVersion":{"type":"String","default":"20","allowedValues":["22","20","18"]},"DotNetVersion":{"type":"String","default":"8.0","allowedValues":["8.0","7.0"]}},"mainSteps":[{"action":"aws:configurePackage","name":"InstallCloudWatchAgent","inputs":{"name":"AmazonCloudWatchAgent","action":"Install"}},{"action":"aws:runDocument","name":"ConfigureCloudWatchAgent","inputs":{"documentType":"SSMDocument","documentPath":"AmazonCloudWatch-ManageAgent","documentParameters":{"action":"configure","mode":"ec2","optionalConfigurationSource":"default","optionalRestart":"yes"}}},{"action":"aws:runShellScript","name":"InstallAptPackagesApt","inputs":{"runCommand":["#!/bin/bash","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q apt-utils","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q needrestart unattended-upgrades","sed -i 's/#$nrconf{kernelhints} = -1;/$nrconf{kernelhints} = 0;/' /etc/needrestart/needrestart.conf","sed -i 's/#$nrconf{verbosity} = 2;/$nrconf{verbosity} = 0;/' /etc/needrestart/needrestart.conf","sed -i \"s/#$nrconf{restart} = 'i';/$nrconf{restart} = 'a';/\" /etc/needrestart/needrestart.conf","echo \"Apt helper packages added. Checking configuration\"","cat /etc/needrestart/needrestart.conf"]}},{"action":"aws:runShellScript","name":"InstallBasePackagesApt","inputs":{"runCommand":["#!/bin/bash","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q curl gnupg whois argon2 openssl locales locales-all unzip apt-transport-https ca-certificates software-properties-common nginx"]}},{"action":"aws:runShellScript","name":"AddUserApt","inputs":{"runCommand":["#!/bin/bash","echo 'Adding user: ${VSCodeUser}'","adduser --disabled-password --gecos '' participant","echo \"participant:{{ VSCodePassword }}\" | chpasswd","usermod -aG sudo participant","tee /etc/sudoers.d/91-vscode-user <<EOF\nparticipant ALL=(ALL) NOPASSWD:ALL\nEOF","mkdir -p /home/participant && chown -R participant:participant /home/participant","echo \"User added. Checking configuration\"","getent passwd participant"]}},{"action":"aws:runShellScript","name":"InstallNodeApt","inputs":{"runCommand":["#!/bin/bash","curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource.gpg","echo \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_{{ NodeVersion }}.x nodistro main\" > /etc/apt/sources.list.d/nodesource.list","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q nodejs","npm install -g npm@latest","echo \"Node and npm installed. Checking configuration\"","node -v","npm -v"]}},{"action":"aws:runShellScript","name":"InstallDockerApt","inputs":{"runCommand":["#!/bin/bash","curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg","echo \"deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release --codename --short) stable\" > /etc/apt/sources.list.d/docker.list","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q docker-ce docker-ce-cli containerd.io","systemctl restart code-server@participant.service","systemctl start docker.service","echo \"Docker installed. Checking configuration\"","docker --version","systemctl status docker.service"]}},{"action":"aws:runShellScript","name":"InstallGitApt","inputs":{"runCommand":["#!/bin/bash","add-apt-repository ppa:git-core/ppa","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q git","sudo -u participant git config --global user.email \"participant@example.com\"","sudo -u participant git config --global user.name \"Workshop participant\"","sudo -u participant git config --global init.defaultBranch \"main\"","echo \"Git installed. Checking configuration\"","git --version"]}},{"action":"aws:runShellScript","name":"InstallPythonApt","inputs":{"runCommand":["#!/bin/bash","apt-get -q update && DEBIAN_FRONTEND=noninteractive apt-get install -y -q python3-pip python3-venv python3-boto3 python3-pytest","echo 'alias pytest=pytest-3' >> /home/participant/.bashrc","systemctl restart code-server@participant.service","systemctl start multipathd.service packagekit.service","systemctl restart unattended-upgrades.service","echo \"Python and Pip installed. Checking configuration\"","python3 --version","pip3 --version"]}},{"action":"aws:runShellScript","name":"InstallAWSCLI","inputs":{"runCommand":["#!/bin/bash","curl -fsSL https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip -o /tmp/aws-cli.zip","unzip -q -d /tmp /tmp/aws-cli.zip","sudo /tmp/aws/install","rm -rf /tmp/aws","echo \"AWS CLI installed. Checking configuration\"","aws --version"]}},{"action":"aws:runShellScript","name":"ConfigureCodeServer","inputs":{"runCommand":["#!/bin/bash","export HOME=/home/participant","curl -fsSL https://code-server.dev/install.sh | bash -s -- 2>&1","systemctl enable --now code-server@participant 2>&1","tee /etc/nginx/conf.d/code-server.conf <<EOF\nserver {\n listen 80;\n listen [::]:80;\n # server_name distribution.distributionDomainName;\n server_name *.cloudfront.net;\n location / {\n proxy_pass http://localhost:8080/;\n proxy_set_header Host \\$host;\n proxy_set_header Upgrade \\$http_upgrade;\n proxy_set_header Connection upgrade;\n proxy_set_header Accept-Encoding gzip;\n }\n location /app {\n proxy_pass http://localhost:8081/app;\n proxy_set_header Host \\$host;\n proxy_set_header Upgrade \\$http_upgrade;\n proxy_set_header Connection upgrade;\n proxy_set_header Accept-Encoding gzip;\n }\n}\nEOF","mkdir -p /home/participant/.config/code-server","tee /home/participant/.config/code-server/config.yaml <<EOF\ncert: false\nauth: password\nhashed-password: \"$(echo -n {{ VSCodePassword }} | argon2 $(openssl rand -base64 12) -e)\"\nEOF","mkdir -p /home/participant/.local/share/code-server/User/","touch /home/participant/.hushlogin","mkdir -p /Workshop && chown -R participant:participant /Workshop","tee /home/participant/.local/share/code-server/User/settings.json <<EOF\n{\n \"extensions.autoUpdate\": false,\n \"extensions.autoCheckUpdates\": false,\n \"telemetry.telemetryLevel\": \"off\",\n \"security.workspace.trust.startupPrompt\": \"never\",\n \"security.workspace.trust.enabled\": false,\n \"security.workspace.trust.banner\": \"never\",\n \"security.workspace.trust.emptyWindow\": false,\n \"python.testing.pytestEnabled\": true,\n \"auto-run-command.rules\": [\n {\n \"command\": \"workbench.action.terminal.new\"\n }\n ]\n}\nEOF","chown -R participant:participant /home/participant","systemctl restart code-server@participant","systemctl restart nginx","sudo -u participant --login code-server --install-extension AmazonWebServices.aws-toolkit-vscode --force","sudo -u participant --login code-server --install-extension AmazonWebServices.amazon-q-vscode --force","sudo -u participant --login code-server --install-extension synedra.auto-run-command --force","sudo -u participant --login code-server --install-extension vscjava.vscode-java-pack --force","sudo -u participant --login code-server --install-extension ms-vscode.live-server --force","chown -R participant:participant /home/participant","echo \"Nginx installed. Checking configuration\"","nginx -t 2>&1","systemctl status nginx","echo \"CodeServer installed. Checking configuration\"","code-server -v","systemctl status code-server@participant"]}},{"action":"aws:runShellScript","name":"UpdateProfile","inputs":{"runCommand":["#!/bin/bash","echo LANG=en_US.utf-8 >> /etc/environment","echo LC_ALL=en_US.UTF-8 >> /etc/environment","echo 'PATH=$PATH:/home/participant/.local/bin' >> /home/participant/.bashrc","echo 'export PATH' >> /home/participant/.bashrc",{"Fn::Join":["",["echo 'export AWS_REGION=",{"Ref":"AWS::Region"},"' >> /home/participant/.bashrc"]]},{"Fn::Join":["",["echo 'export AWS_ACCOUNTID=",{"Ref":"AWS::AccountId"},"' >> /home/participant/.bashrc"]]},"echo 'export NEXT_TELEMETRY_DISABLED=1' >> /home/participant/.bashrc","echo \"export PS1='\\[\\033[01;32m\\]\\u:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '\" >> /home/participant/.bashrc","chown -R participant:participant /home/participant"]}},{"action":"aws:runShellScript","name":"InstallCDK","inputs":{"runCommand":["#!/bin/bash","npm install -g aws-cdk","echo \"AWS CDK installed. Checking configuration\"","cdk --version"]}}]},"documentType":"Command","name":"vscode-server-ubuntu-IntegTestStackStopOnIdle","tags":[{"key":"app","value":"vscode-server"},{"key":"IntegTest","value":"True"},{"key":"TestType","value":"StopOnIdle"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_ssm.CfnDocument","version":"2.190.0"}},"InstallerOnEventHandler":{"id":"InstallerOnEventHandler","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["ssm:GetCommandInvocation","ssm:ListCommandInvocations","ssm:SendCommand"],"Effect":"Allow","Resource":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":ec2:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":instance/",{"Ref":"IntegVSCodeServerserverinstance0A3D62D7"}]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":ssm:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":document/AmazonCloudWatch-ManageAgent"]]},{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":ssm:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":document/vscode-server-ubuntu-IntegTestStackStopOnIdle"]]}]}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerInstallerOnEventHandlerServiceRoleDefaultPolicy1CAD86C2","roles":[{"Ref":"IntegVSCodeServerInstallerOnEventHandlerServiceRole59651FEF"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerOnEventHandler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"33da23274e25bd9f43638c5d83dad26e3931cbe78d462ffd9a9f565e948b4f5f.zip"},"description":"src/installer/installer.lambda.ts","handler":"index.handler","memorySize":512,"role":{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandlerServiceRole59651FEF","Arn"]},"runtime":"nodejs20.x","timeout":300}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"description":"*","timeout":"*","memorySize":"*","runtime":"*","handler":"*","code":"*"}]}},"InstallerProvider":{"id":"InstallerProvider","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider","children":{"framework-onEvent":{"id":"framework-onEvent","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":"lambda:InvokeFunction","Effect":"Allow","Resource":[{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]},{"Fn::Join":["",[{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]},":*"]]}]},{"Action":"lambda:GetFunction","Effect":"Allow","Resource":{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerInstallerProviderframeworkonEventServiceRoleDefaultPolicy3E54FC3A","roles":[{"Ref":"IntegVSCodeServerInstallerProviderframeworkonEventServiceRoleA509851F"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider/framework-onEvent/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"bdc104ed9cab1b5b6421713c8155f0b753380595356f710400609664d3635eca.zip"},"description":"AWS CDK resource provider framework - onEvent (IntegTestStackStopOnIdle/IntegVSCodeServer/InstallerProvider)","environment":{"variables":{"USER_ON_EVENT_FUNCTION_ARN":{"Fn::GetAtt":["IntegVSCodeServerInstallerOnEventHandler6FF91542","Arn"]}}},"handler":"framework.onEvent","role":{"Fn::GetAtt":["IntegVSCodeServerInstallerProviderframeworkonEventServiceRoleA509851F","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":900}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"code":"*","description":"*","runtime":"*","handler":"*","timeout":"*","logGroup":"*","vpc":"*","vpcSubnets":"*","securityGroups":"*","role":"*","functionName":"*","environmentEncryption":"*"},{"addEnvironment":["*","*"]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.custom_resources.Provider","version":"2.190.0"}},"SSMInstallerCustomResource":{"id":"SSMInstallerCustomResource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SSMInstallerCustomResource","children":{"Default":{"id":"Default","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/SSMInstallerCustomResource/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*"]}},"IdleMonitor":{"id":"IdleMonitor","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor","children":{"Function":{"id":"Function","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["cloudwatch:GetMetricData","cloudwatch:GetMetricStatistics","ec2:DescribeInstanceStatus","ec2:DescribeInstances"],"Effect":"Allow","Resource":"*"},{"Action":"ec2:StopInstances","Effect":"Allow","Resource":{"Fn::Join":["",["arn:aws:ec2:",{"Ref":"AWS::Region"},":",{"Ref":"AWS::AccountId"},":instance/",{"Ref":"IntegVSCodeServerserverinstance0A3D62D7"}]]}}],"Version":"2012-10-17"},"policyName":"IntegVSCodeServerIdleMonitorFunctionServiceRoleDefaultPolicyE13A3890","roles":[{"Ref":"IntegVSCodeServerIdleMonitorFunctionServiceRoleC1088A0D"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]},{"addStatements":[{}]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]},{"addToPrincipalPolicy":[{}]},{"addToPrincipalPolicy":[{}]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/Function/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"8dd4be31c5a6cd8750dc55c07c1e2f19596f8a27b032d02c18554ed44eabe065.zip"},"environment":{"variables":{"INSTANCE_ID":{"Ref":"IntegVSCodeServerserverinstance0A3D62D7"},"DISTRIBUTION_ID":{"Ref":"IntegVSCodeServercfdistributionFDBE873F"},"IDLE_TIMEOUT_MINUTES":"2","SKIP_STATUS_CHECKS":"true"}},"handler":"index.handler","memorySize":256,"role":{"Fn::GetAtt":["IntegVSCodeServerIdleMonitorFunctionServiceRoleC1088A0D","Arn"]},"runtime":"nodejs20.x","timeout":30}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"runtime":"*","handler":"*","code":"*","timeout":"*","memorySize":"*","environment":"*"},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]},{"addEnvironment":["*","*"]}]}},"ScheduleRule":{"id":"ScheduleRule","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/ScheduleRule","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/ScheduleRule/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Events::Rule","aws:cdk:cloudformation:props":{"scheduleExpression":"rate(1 minute)","state":"ENABLED","targets":[{"id":"Target0","arn":{"Fn::GetAtt":["IntegVSCodeServerIdleMonitorFunctionCACBFA32","Arn"]}}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_events.CfnRule","version":"2.190.0"}},"AllowEventRuleIntegTestStackStopOnIdleIntegVSCodeServerIdleMonitorFunction8C52CC5D":{"id":"AllowEventRuleIntegTestStackStopOnIdleIntegVSCodeServerIdleMonitorFunction8C52CC5D","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/IdleMonitor/ScheduleRule/AllowEventRuleIntegTestStackStopOnIdleIntegVSCodeServerIdleMonitorFunction8C52CC5D","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Permission","aws:cdk:cloudformation:props":{"action":"lambda:InvokeFunction","functionName":{"Fn::GetAtt":["IntegVSCodeServerIdleMonitorFunctionCACBFA32","Arn"]},"principal":"events.amazonaws.com","sourceArn":{"Fn::GetAtt":["IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5","Arn"]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnPermission","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_events.Rule","version":"2.190.0","metadata":[{"schedule":"*"},{"addEventPattern":["*"]},{"addTarget":[{}]}]}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"domainName":{"id":"domainName","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/domainName","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"password":{"id":"password","path":"IntegTestStackStopOnIdle/IntegVSCodeServer/password","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"IntegTestStackStopOnIdle/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"2.190.0"}},"Custom::VpcRestrictDefaultSGCustomResourceProvider":{"id":"Custom::VpcRestrictDefaultSGCustomResourceProvider","path":"IntegTestStackStopOnIdle/Custom::VpcRestrictDefaultSGCustomResourceProvider","children":{"Staging":{"id":"Staging","path":"IntegTestStackStopOnIdle/Custom::VpcRestrictDefaultSGCustomResourceProvider/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"Role":{"id":"Role","path":"IntegTestStackStopOnIdle/Custom::VpcRestrictDefaultSGCustomResourceProvider/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"Handler":{"id":"Handler","path":"IntegTestStackStopOnIdle/Custom::VpcRestrictDefaultSGCustomResourceProvider/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResourceProviderBase","version":"2.190.0"}},"AWS679f53fac002430cb0da5b7982bd2287":{"id":"AWS679f53fac002430cb0da5b7982bd2287","path":"IntegTestStackStopOnIdle/AWS679f53fac002430cb0da5b7982bd2287","children":{"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/AWS679f53fac002430cb0da5b7982bd2287/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/AWS679f53fac002430cb0da5b7982bd2287/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/AWS679f53fac002430cb0da5b7982bd2287/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/AWS679f53fac002430cb0da5b7982bd2287/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"9d043014be736e8162bcc7ec5590cc6d2ff24fd0d9c73a5c5d595151c5fdad00.zip"},"handler":"index.handler","loggingConfig":{"logGroup":{"Ref":"IntegVSCodeServercfprefixlistIdGetPrefixListIdLogGroup171C2803"}},"role":{"Fn::GetAtt":["IntegVSCodeServercfprefixlistIdGetPrefixListIdRole1302B3E1","Arn"]},"runtime":{"Fn::FindInMap":["LatestNodeRuntimeMap",{"Ref":"AWS::Region"},"value"]},"timeout":120}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.Function","version":"2.190.0","metadata":[{"memorySize":"*","timeout":"*","role":"*","logGroup":"*","functionName":"*","vpc":"*","vpcSubnets":"*","code":"*","handler":"*","runtime":"*"}]}},"SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter":{"id":"SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter","path":"IntegTestStackStopOnIdle/SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118.Parameter","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.190.0"}},"SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118":{"id":"SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118","path":"IntegTestStackStopOnIdle/SsmParameterValue:--aws--service--canonical--ubuntu--server--jammy--stable--current--arm64--hvm--ebs-gp2--ami-id:C96584B6-F00A-464E-AD19-53AFF4B05118","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}},"idle-test-handler":{"id":"idle-test-handler","path":"IntegTestStackStopOnIdle/idle-test-handler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/idle-test-handler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/idle-test-handler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/idle-test-handler/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/idle-test-handler/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/idle-test-handler/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["cloudwatch:GetMetricStatistics","ec2:DescribeInstanceStatus","ec2:DescribeInstances","ec2:StartInstances","events:DescribeRule","events:DisableRule"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"idletesthandlerServiceRoleDefaultPolicyB0C00EC7","roles":[{"Ref":"idletesthandlerServiceRoleBB9B4624"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/idle-test-handler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/idle-test-handler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/idle-test-handler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/idle-test-handler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"d061a1ca61c6339fcb77bb6fc19194a60c96bb16531eaf1e4e733b50089512ca.zip"},"environment":{"variables":{"INSTANCE_ID":{"Ref":"IntegVSCodeServerserverinstance0A3D62D7"},"CLOUDFRONT_DOMAIN":{"Fn::Join":["",["https://",{"Fn::GetAtt":["IntegVSCodeServercfdistributionFDBE873F","DomainName"]},"/?folder=/Workshop"]]},"IDLE_TIMEOUT_MINUTES":"2","IDLE_MONITOR_RULE_NAME":{"Ref":"IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5"}}},"handler":"index.handler","role":{"Fn::GetAtt":["idletesthandlerServiceRoleBB9B4624","Arn"]},"runtime":"nodejs20.x","timeout":120}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}},"LogRetention":{"id":"LogRetention","path":"IntegTestStackStopOnIdle/idle-test-handler/LogRetention","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/idle-test-handler/LogRetention/Resource","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogRetention","version":"2.190.0"}},"LogGroup":{"id":"LogGroup","path":"IntegTestStackStopOnIdle/idle-test-handler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.190.0","metadata":[{"functionName":"*","entry":"*","runtime":"*","logRetention":1,"timeout":"*","bundling":{"esbuildArgs":"*"},"environment":"*","code":"*","handler":"*"},{},{},{},{},{"functionName":"*","entry":"*","runtime":"*","logRetention":1,"timeout":"*","bundling":{"esbuildArgs":"*"},"environment":"*"}]}},"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a":{"id":"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a","children":{"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}},"DefaultPolicy":{"id":"DefaultPolicy","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/ServiceRole/DefaultPolicy/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::IAM::Policy","aws:cdk:cloudformation:props":{"policyDocument":{"Statement":[{"Action":["logs:DeleteRetentionPolicy","logs:PutRetentionPolicy"],"Effect":"Allow","Resource":"*"}],"Version":"2012-10-17"},"policyName":"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB","roles":[{"Ref":"LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB"}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnPolicy","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Policy","version":"2.190.0","metadata":["*",{"attachToRole":["*"]},{"attachToRole":["*"]},{"addStatements":[{}]}]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]},{"addToPrincipalPolicy":[{}]},{"attachInlinePolicy":["*"]},{"attachInlinePolicy":["*"]}]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8a/Resource","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"login-handler":{"id":"login-handler","path":"IntegTestStackStopOnIdle/login-handler","children":{"ServiceRole":{"id":"ServiceRole","path":"IntegTestStackStopOnIdle/login-handler/ServiceRole","children":{"ImportServiceRole":{"id":"ImportServiceRole","path":"IntegTestStackStopOnIdle/login-handler/ServiceRole/ImportServiceRole","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":["*"]}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/login-handler/ServiceRole/Resource","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"},"managedPolicyArns":[{"Fn::Join":["",["arn:",{"Ref":"AWS::Partition"},":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"]]}]}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.CfnRole","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_iam.Role","version":"2.190.0","metadata":[{"assumedBy":{"principalAccount":"*","assumeRoleAction":"*"},"managedPolicies":[{"managedPolicyArn":"*"}]}]}},"Code":{"id":"Code","path":"IntegTestStackStopOnIdle/login-handler/Code","children":{"Stage":{"id":"Stage","path":"IntegTestStackStopOnIdle/login-handler/Code/Stage","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"AssetBucket":{"id":"AssetBucket","path":"IntegTestStackStopOnIdle/login-handler/Code/AssetBucket","constructInfo":{"fqn":"aws-cdk-lib.aws_s3.BucketBase","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_s3_assets.Asset","version":"2.190.0"}},"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/login-handler/Resource","attributes":{"aws:cdk:cloudformation:type":"AWS::Lambda::Function","aws:cdk:cloudformation:props":{"code":{"s3Bucket":{"Fn::Sub":"cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}"},"s3Key":"efac30c7091c58fed492058fa6403c14f7e58aab8cf4fd595d838b8d5eeec2b9.zip"},"handler":"index.handler","role":{"Fn::GetAtt":["loginhandlerServiceRole330B0B32","Arn"]},"runtime":"nodejs20.x","timeout":30}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda.CfnFunction","version":"2.190.0"}},"LogRetention":{"id":"LogRetention","path":"IntegTestStackStopOnIdle/login-handler/LogRetention","children":{"Resource":{"id":"Resource","path":"IntegTestStackStopOnIdle/login-handler/LogRetention/Resource","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_logs.LogRetention","version":"2.190.0"}},"LogGroup":{"id":"LogGroup","path":"IntegTestStackStopOnIdle/login-handler/LogGroup","constructInfo":{"fqn":"aws-cdk-lib.Resource","version":"2.190.0","metadata":[]}}},"constructInfo":{"fqn":"aws-cdk-lib.aws_lambda_nodejs.NodejsFunction","version":"2.190.0","metadata":[{"functionName":"*","entry":"*","runtime":"*","logRetention":1,"timeout":"*","bundling":{"esbuildArgs":"*"},"code":"*","handler":"*"},{"functionName":"*","entry":"*","runtime":"*","logRetention":1,"timeout":"*","bundling":{"esbuildArgs":"*"}}]}},"Exports":{"id":"Exports","path":"IntegTestStackStopOnIdle/Exports","children":{"Output{\"Ref\":\"idletesthandler1A304024\"}":{"id":"Output{\"Ref\":\"idletesthandler1A304024\"}","path":"IntegTestStackStopOnIdle/Exports/Output{\"Ref\":\"idletesthandler1A304024\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Fn::GetAtt\":[\"IntegVSCodeServercfdistributionFDBE873F\",\"DomainName\"]}":{"id":"Output{\"Fn::GetAtt\":[\"IntegVSCodeServercfdistributionFDBE873F\",\"DomainName\"]}","path":"IntegTestStackStopOnIdle/Exports/Output{\"Fn::GetAtt\":[\"IntegVSCodeServercfdistributionFDBE873F\",\"DomainName\"]}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Ref\":\"IntegVSCodeServerserverinstance0A3D62D7\"}":{"id":"Output{\"Ref\":\"IntegVSCodeServerserverinstance0A3D62D7\"}","path":"IntegTestStackStopOnIdle/Exports/Output{\"Ref\":\"IntegVSCodeServerserverinstance0A3D62D7\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Ref\":\"loginhandler99CCCCFD\"}":{"id":"Output{\"Ref\":\"loginhandler99CCCCFD\"}","path":"IntegTestStackStopOnIdle/Exports/Output{\"Ref\":\"loginhandler99CCCCFD\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Ref\":\"IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5\"}":{"id":"Output{\"Ref\":\"IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5\"}","path":"IntegTestStackStopOnIdle/Exports/Output{\"Ref\":\"IntegVSCodeServerIdleMonitorScheduleRuleCF2E60F5\"}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}},"Output{\"Fn::GetAtt\":[\"IntegVSCodeServerSecretRetrieverCustomResource2F3DB8BD\",\"secretPasswordValue\"]}":{"id":"Output{\"Fn::GetAtt\":[\"IntegVSCodeServerSecretRetrieverCustomResource2F3DB8BD\",\"secretPasswordValue\"]}","path":"IntegTestStackStopOnIdle/Exports/Output{\"Fn::GetAtt\":[\"IntegVSCodeServerSecretRetrieverCustomResource2F3DB8BD\",\"secretPasswordValue\"]}","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"IntegTestStackStopOnIdle/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.190.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"IntegTestStackStopOnIdle/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.190.0"}},"IntegStopOnIdleFunctionality":{"id":"IntegStopOnIdleFunctionality","path":"IntegStopOnIdleFunctionality","children":{"DefaultTest":{"id":"DefaultTest","path":"IntegStopOnIdleFunctionality/DefaultTest","children":{"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/Default","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"DeployAssert":{"id":"DeployAssert","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert","children":{"LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637":{"id":"LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.190.0-alpha.0"}},"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637/Default","children":{"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"Invoke":{"id":"Invoke","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"AssertionResults":{"id":"AssertionResults","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke2b0ac1bc65c03d14e22d254e216f0637/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.190.0-alpha.0"}},"SingletonFunction1488541a7b23466481b69b4408076b81":{"id":"SingletonFunction1488541a7b23466481b69b4408076b81","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81","children":{"Staging":{"id":"Staging","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Staging","constructInfo":{"fqn":"aws-cdk-lib.AssetStaging","version":"2.190.0"}},"Role":{"id":"Role","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Role","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"Handler":{"id":"Handler","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/SingletonFunction1488541a7b23466481b69b4408076b81/Handler","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}},"LatestNodeRuntimeMap":{"id":"LatestNodeRuntimeMap","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LatestNodeRuntimeMap","constructInfo":{"fqn":"aws-cdk-lib.CfnMapping","version":"2.190.0"}},"LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b":{"id":"LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.190.0-alpha.0"}},"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b/Default","children":{"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"Invoke":{"id":"Invoke","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"AssertionResults":{"id":"AssertionResults","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke7ec14df5ab88e3e4c0d00edb2d94921b/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.190.0-alpha.0"}},"LambdaInvokedc3da1442e925b8c33569d5fea03b0f7":{"id":"LambdaInvokedc3da1442e925b8c33569d5fea03b0f7","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.190.0-alpha.0"}},"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7/Default","children":{"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"Invoke":{"id":"Invoke","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"AssertionResults":{"id":"AssertionResults","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvokedc3da1442e925b8c33569d5fea03b0f7/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.190.0-alpha.0"}},"LambdaInvoke493987f824f978002013a8ed7c9980f4":{"id":"LambdaInvoke493987f824f978002013a8ed7c9980f4","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4","children":{"SdkProvider":{"id":"SdkProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/SdkProvider","children":{"AssertionsProvider":{"id":"AssertionsProvider","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/SdkProvider/AssertionsProvider","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.AssertionsProvider","version":"2.190.0-alpha.0"}},"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/Default","children":{"Default":{"id":"Default","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/Default/Default","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.CustomResource","version":"2.190.0","metadata":["*","*","*"]}},"Invoke":{"id":"Invoke","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/Invoke","constructInfo":{"fqn":"aws-cdk-lib.CfnResource","version":"2.190.0"}},"AssertionResults":{"id":"AssertionResults","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/LambdaInvoke493987f824f978002013a8ed7c9980f4/AssertionResults","constructInfo":{"fqn":"aws-cdk-lib.CfnOutput","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.LambdaInvokeFunction","version":"2.190.0-alpha.0"}},"BootstrapVersion":{"id":"BootstrapVersion","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/BootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnParameter","version":"2.190.0"}},"CheckBootstrapVersion":{"id":"CheckBootstrapVersion","path":"IntegStopOnIdleFunctionality/DefaultTest/DeployAssert/CheckBootstrapVersion","constructInfo":{"fqn":"aws-cdk-lib.CfnRule","version":"2.190.0"}}},"constructInfo":{"fqn":"aws-cdk-lib.Stack","version":"2.190.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTestCase","version":"2.190.0-alpha.0"}}},"constructInfo":{"fqn":"@aws-cdk/integ-tests-alpha.IntegTest","version":"2.190.0-alpha.0"}},"Tree":{"id":"Tree","path":"Tree","constructInfo":{"fqn":"constructs.Construct","version":"10.4.2"}}},"constructInfo":{"fqn":"aws-cdk-lib.App","version":"2.190.0"}}}
@@ -0,0 +1,13 @@
1
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
2
+ import { Construct } from 'constructs';
3
+ /**
4
+ * Props for IdleMonitorFunction
5
+ */
6
+ export interface IdleMonitorFunctionProps extends lambda.FunctionOptions {
7
+ }
8
+ /**
9
+ * An AWS Lambda function which executes src/idle-monitor/idle-monitor.
10
+ */
11
+ export declare class IdleMonitorFunction extends lambda.Function {
12
+ constructor(scope: Construct, id: string, props?: IdleMonitorFunctionProps);
13
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IdleMonitorFunction = void 0;
4
+ // ~~ Generated by projen. To modify, edit .projenrc.ts and run "npx projen".
5
+ const path = require("path");
6
+ const lambda = require("aws-cdk-lib/aws-lambda");
7
+ /**
8
+ * An AWS Lambda function which executes src/idle-monitor/idle-monitor.
9
+ */
10
+ class IdleMonitorFunction extends lambda.Function {
11
+ constructor(scope, id, props) {
12
+ super(scope, id, {
13
+ description: 'src/idle-monitor/idle-monitor.lambda.ts',
14
+ ...props,
15
+ runtime: new lambda.Runtime('nodejs20.x', lambda.RuntimeFamily.NODEJS),
16
+ handler: 'index.handler',
17
+ code: lambda.Code.fromAsset(path.join(__dirname, '../../assets/idle-monitor/idle-monitor.lambda')),
18
+ });
19
+ }
20
+ }
21
+ exports.IdleMonitorFunction = IdleMonitorFunction;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLWZ1bmN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3ItZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQTZFO0FBQzdFLDZCQUE2QjtBQUM3QixpREFBaUQ7QUFTakQ7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLE1BQU0sQ0FBQyxRQUFRO0lBQ3RELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELEdBQUcsS0FBSztZQUNSLE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO1NBQ25HLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQVZELGtEQVVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLlxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFByb3BzIGZvciBJZGxlTW9uaXRvckZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZU1vbml0b3JGdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uT3B0aW9ucyB7XG59XG5cbi8qKlxuICogQW4gQVdTIExhbWJkYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVNb25pdG9yRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IElkbGVNb25pdG9yRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgZGVzY3JpcHRpb246ICdzcmMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEudHMnLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBydW50aW1lOiBuZXcgbGFtYmRhLlJ1bnRpbWUoJ25vZGVqczIwLngnLCBsYW1iZGEuUnVudGltZUZhbWlseS5OT0RFSlMpLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi9hc3NldHMvaWRsZS1tb25pdG9yL2lkbGUtbW9uaXRvci5sYW1iZGEnKSksXG4gICAgfSk7XG4gIH1cbn0iXX0=
@@ -0,0 +1,53 @@
1
+ import { IDistribution } from 'aws-cdk-lib/aws-cloudfront';
2
+ import { IInstance } from 'aws-cdk-lib/aws-ec2';
3
+ import { Rule } from 'aws-cdk-lib/aws-events';
4
+ import { Function as LambdaFunction } from 'aws-cdk-lib/aws-lambda';
5
+ import { Construct } from 'constructs';
6
+ /**
7
+ * Props for IdleMonitor construct
8
+ */
9
+ export interface IdleMonitorProps {
10
+ /**
11
+ * The EC2 instance to monitor
12
+ */
13
+ readonly instance: IInstance;
14
+ /**
15
+ * The CloudFront distribution to monitor for activity
16
+ */
17
+ readonly distribution: IDistribution;
18
+ /**
19
+ * Number of minutes of inactivity before stopping the instance
20
+ */
21
+ readonly idleTimeoutMinutes: number;
22
+ /**
23
+ * How often to check for idle activity (in minutes)
24
+ * @default 5 - Check every 5 minutes
25
+ */
26
+ readonly checkIntervalMinutes?: number;
27
+ /**
28
+ * Skip instance status checks before stopping
29
+ * When true, IdleMonitor will stop idle instances even if status checks haven't passed
30
+ * This is useful for integration tests where status check initialization time
31
+ * exceeds test timeout limits
32
+ *
33
+ * WARNING: For testing only - in production, you should wait for status checks
34
+ * to pass before stopping instances
35
+ *
36
+ * @default false
37
+ */
38
+ readonly skipStatusChecks?: boolean;
39
+ }
40
+ /**
41
+ * Construct that monitors CloudFront request metrics and stops the EC2 instance when idle
42
+ */
43
+ export declare class IdleMonitor extends Construct {
44
+ /**
45
+ * The Lambda function that performs idle monitoring
46
+ */
47
+ readonly function: LambdaFunction;
48
+ /**
49
+ * The EventBridge rule that triggers idle monitoring checks
50
+ */
51
+ readonly scheduleRule: Rule;
52
+ constructor(scope: Construct, id: string, props: IdleMonitorProps);
53
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.IdleMonitor = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const path = require("path");
7
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
8
+ const aws_events_1 = require("aws-cdk-lib/aws-events");
9
+ const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
10
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
11
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
12
+ const cdk_nag_1 = require("cdk-nag");
13
+ const constructs_1 = require("constructs");
14
+ /**
15
+ * Construct that monitors CloudFront request metrics and stops the EC2 instance when idle
16
+ */
17
+ class IdleMonitor extends constructs_1.Construct {
18
+ constructor(scope, id, props) {
19
+ super(scope, id);
20
+ this.function = new aws_lambda_1.Function(this, 'Function', {
21
+ runtime: aws_lambda_1.Runtime.NODEJS_20_X,
22
+ handler: 'index.handler',
23
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, '../../assets/idle-monitor/idle-monitor.lambda')),
24
+ timeout: aws_cdk_lib_1.Duration.seconds(30),
25
+ memorySize: 256,
26
+ environment: {
27
+ INSTANCE_ID: props.instance.instanceId,
28
+ DISTRIBUTION_ID: props.distribution.distributionId,
29
+ IDLE_TIMEOUT_MINUTES: props.idleTimeoutMinutes.toString(),
30
+ SKIP_STATUS_CHECKS: props.skipStatusChecks ? 'true' : 'false',
31
+ },
32
+ });
33
+ this.function.addToRolePolicy(new aws_iam_1.PolicyStatement({
34
+ actions: [
35
+ 'cloudwatch:GetMetricStatistics',
36
+ 'cloudwatch:GetMetricData',
37
+ ],
38
+ resources: ['*'],
39
+ }));
40
+ // DescribeInstances and DescribeInstanceStatus don't support resource-level permissions
41
+ // They require wildcard resources
42
+ this.function.addToRolePolicy(new aws_iam_1.PolicyStatement({
43
+ actions: [
44
+ 'ec2:DescribeInstances',
45
+ 'ec2:DescribeInstanceStatus',
46
+ ],
47
+ resources: ['*'],
48
+ }));
49
+ // StopInstances supports resource-level permissions, so we can restrict it
50
+ this.function.addToRolePolicy(new aws_iam_1.PolicyStatement({
51
+ actions: [
52
+ 'ec2:StopInstances',
53
+ ],
54
+ resources: [
55
+ `arn:aws:ec2:${aws_cdk_lib_1.Stack.of(this).region}:${aws_cdk_lib_1.Stack.of(this).account}:instance/${props.instance.instanceId}`,
56
+ ],
57
+ }));
58
+ // Create EventBridge rule to trigger at specified interval
59
+ const checkInterval = props.checkIntervalMinutes ?? 5;
60
+ this.scheduleRule = new aws_events_1.Rule(this, 'ScheduleRule', {
61
+ schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.minutes(checkInterval)),
62
+ });
63
+ this.scheduleRule.addTarget(new aws_events_targets_1.LambdaFunction(this.function));
64
+ // CDK-nag suppressions
65
+ cdk_nag_1.NagSuppressions.addResourceSuppressions(this.function, [
66
+ {
67
+ id: 'AwsSolutions-IAM4',
68
+ reason: 'Managed policies acceptable for workshop Lambda functions',
69
+ },
70
+ {
71
+ id: 'AwsSolutions-IAM5',
72
+ reason: 'CloudWatch metrics require wildcard permissions',
73
+ },
74
+ {
75
+ id: 'AwsSolutions-L1',
76
+ reason: 'Latest runtime not required for this function',
77
+ },
78
+ ], true);
79
+ }
80
+ }
81
+ exports.IdleMonitor = IdleMonitor;
82
+ _a = JSII_RTTI_SYMBOL_1;
83
+ IdleMonitor[_a] = { fqn: "@mavogel/cdk-vscode-server.IdleMonitor", version: "0.0.61" };
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1tb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkbGUtbW9uaXRvci9pZGxlLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNkNBQThDO0FBRzlDLHVEQUF3RDtBQUN4RCx1RUFBd0Y7QUFDeEYsaURBQXNEO0FBQ3RELHVEQUFtRjtBQUNuRixxQ0FBMEM7QUFDMUMsMkNBQXVDO0FBcUN2Qzs7R0FFRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBV3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ25ELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLCtDQUErQyxDQUFDLENBQUM7WUFDM0YsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixVQUFVLEVBQUUsR0FBRztZQUNmLFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVO2dCQUN0QyxlQUFlLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjO2dCQUNsRCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO2dCQUN6RCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTzthQUM5RDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQixJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLGdDQUFnQztnQkFDaEMsMEJBQTBCO2FBQzNCO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBRUYsd0ZBQXdGO1FBQ3hGLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCx1QkFBdUI7Z0JBQ3ZCLDRCQUE0QjthQUM3QjtZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSx5QkFBZSxDQUFDO1lBQ2xCLE9BQU8sRUFBRTtnQkFDUCxtQkFBbUI7YUFDcEI7WUFDRCxTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxhQUFhLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO2FBQ3ZHO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFFRiwyREFBMkQ7UUFDM0QsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksaUJBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ2pELFFBQVEsRUFBRSxxQkFBUSxDQUFDLElBQUksQ0FBQyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN6RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLG1DQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXJFLHVCQUF1QjtRQUN2Qix5QkFBZSxDQUFDLHVCQUF1QixDQUNyQyxJQUFJLENBQUMsUUFBUSxFQUNiO1lBQ0U7Z0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsTUFBTSxFQUFFLDJEQUEyRDthQUNwRTtZQUNEO2dCQUNFLEVBQUUsRUFBRSxtQkFBbUI7Z0JBQ3ZCLE1BQU0sRUFBRSxpREFBaUQ7YUFDMUQ7WUFDRDtnQkFDRSxFQUFFLEVBQUUsaUJBQWlCO2dCQUNyQixNQUFNLEVBQUUsK0NBQStDO2FBQ3hEO1NBQ0YsRUFDRCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7O0FBekZILGtDQTBGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJRGlzdHJpYnV0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgSUluc3RhbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBSdWxlLCBTY2hlZHVsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gYXMgTGFtYmRhRnVuY3Rpb25UYXJnZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBSdW50aW1lLCBDb2RlLCBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgSWRsZU1vbml0b3IgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRsZU1vbml0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgRUMyIGluc3RhbmNlIHRvIG1vbml0b3JcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlOiBJSW5zdGFuY2U7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gdG8gbW9uaXRvciBmb3IgYWN0aXZpdHlcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBtaW51dGVzIG9mIGluYWN0aXZpdHkgYmVmb3JlIHN0b3BwaW5nIHRoZSBpbnN0YW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgaWRsZVRpbWVvdXRNaW51dGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIGlkbGUgYWN0aXZpdHkgKGluIG1pbnV0ZXMpXG4gICAqIEBkZWZhdWx0IDUgLSBDaGVjayBldmVyeSA1IG1pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrSW50ZXJ2YWxNaW51dGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogU2tpcCBpbnN0YW5jZSBzdGF0dXMgY2hlY2tzIGJlZm9yZSBzdG9wcGluZ1xuICAgKiBXaGVuIHRydWUsIElkbGVNb25pdG9yIHdpbGwgc3RvcCBpZGxlIGluc3RhbmNlcyBldmVuIGlmIHN0YXR1cyBjaGVja3MgaGF2ZW4ndCBwYXNzZWRcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGludGVncmF0aW9uIHRlc3RzIHdoZXJlIHN0YXR1cyBjaGVjayBpbml0aWFsaXphdGlvbiB0aW1lXG4gICAqIGV4Y2VlZHMgdGVzdCB0aW1lb3V0IGxpbWl0c1xuICAgKlxuICAgKiBXQVJOSU5HOiBGb3IgdGVzdGluZyBvbmx5IC0gaW4gcHJvZHVjdGlvbiwgeW91IHNob3VsZCB3YWl0IGZvciBzdGF0dXMgY2hlY2tzXG4gICAqIHRvIHBhc3MgYmVmb3JlIHN0b3BwaW5nIGluc3RhbmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFN0YXR1c0NoZWNrcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHRoYXQgbW9uaXRvcnMgQ2xvdWRGcm9udCByZXF1ZXN0IG1ldHJpY3MgYW5kIHN0b3BzIHRoZSBFQzIgaW5zdGFuY2Ugd2hlbiBpZGxlXG4gKi9cbmV4cG9ydCBjbGFzcyBJZGxlTW9uaXRvciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgcGVyZm9ybXMgaWRsZSBtb25pdG9yaW5nXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgRXZlbnRCcmlkZ2UgcnVsZSB0aGF0IHRyaWdnZXJzIGlkbGUgbW9uaXRvcmluZyBjaGVja3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY2hlZHVsZVJ1bGU6IFJ1bGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElkbGVNb25pdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5mdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnRnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uL2Fzc2V0cy9pZGxlLW1vbml0b3IvaWRsZS1tb25pdG9yLmxhbWJkYScpKSxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgbWVtb3J5U2l6ZTogMjU2LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgSU5TVEFOQ0VfSUQ6IHByb3BzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICAgIERJU1RSSUJVVElPTl9JRDogcHJvcHMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgICAgICBJRExFX1RJTUVPVVRfTUlOVVRFUzogcHJvcHMuaWRsZVRpbWVvdXRNaW51dGVzLnRvU3RyaW5nKCksXG4gICAgICAgIFNLSVBfU1RBVFVTX0NIRUNLUzogcHJvcHMuc2tpcFN0YXR1c0NoZWNrcyA/ICd0cnVlJyA6ICdmYWxzZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5mdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdjbG91ZHdhdGNoOkdldE1ldHJpY1N0YXRpc3RpY3MnLFxuICAgICAgICAgICdjbG91ZHdhdGNoOkdldE1ldHJpY0RhdGEnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIERlc2NyaWJlSW5zdGFuY2VzIGFuZCBEZXNjcmliZUluc3RhbmNlU3RhdHVzIGRvbid0IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnNcbiAgICAvLyBUaGV5IHJlcXVpcmUgd2lsZGNhcmQgcmVzb3VyY2VzXG4gICAgdGhpcy5mdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlYzI6RGVzY3JpYmVJbnN0YW5jZXMnLFxuICAgICAgICAgICdlYzI6RGVzY3JpYmVJbnN0YW5jZVN0YXR1cycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gU3RvcEluc3RhbmNlcyBzdXBwb3J0cyByZXNvdXJjZS1sZXZlbCBwZXJtaXNzaW9ucywgc28gd2UgY2FuIHJlc3RyaWN0IGl0XG4gICAgdGhpcy5mdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdlYzI6U3RvcEluc3RhbmNlcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOmVjMjoke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn06JHtTdGFjay5vZih0aGlzKS5hY2NvdW50fTppbnN0YW5jZS8ke3Byb3BzLmluc3RhbmNlLmluc3RhbmNlSWR9YCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgRXZlbnRCcmlkZ2UgcnVsZSB0byB0cmlnZ2VyIGF0IHNwZWNpZmllZCBpbnRlcnZhbFxuICAgIGNvbnN0IGNoZWNrSW50ZXJ2YWwgPSBwcm9wcy5jaGVja0ludGVydmFsTWludXRlcyA/PyA1O1xuICAgIHRoaXMuc2NoZWR1bGVSdWxlID0gbmV3IFJ1bGUodGhpcywgJ1NjaGVkdWxlUnVsZScsIHtcbiAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5yYXRlKER1cmF0aW9uLm1pbnV0ZXMoY2hlY2tJbnRlcnZhbCkpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY2hlZHVsZVJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFGdW5jdGlvblRhcmdldCh0aGlzLmZ1bmN0aW9uKSk7XG5cbiAgICAvLyBDREstbmFnIHN1cHByZXNzaW9uc1xuICAgIE5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIHRoaXMuZnVuY3Rpb24sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgICAgICByZWFzb246ICdNYW5hZ2VkIHBvbGljaWVzIGFjY2VwdGFibGUgZm9yIHdvcmtzaG9wIExhbWJkYSBmdW5jdGlvbnMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICAgICAgcmVhc29uOiAnQ2xvdWRXYXRjaCBtZXRyaWNzIHJlcXVpcmUgd2lsZGNhcmQgcGVybWlzc2lvbnMnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtTDEnLFxuICAgICAgICAgIHJlYXNvbjogJ0xhdGVzdCBydW50aW1lIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import type { ScheduledEvent } from 'aws-lambda';
2
+ export declare const handler: (event: ScheduledEvent) => Promise<void>;