@bitblit/ratchet-epsilon-deployment 4.0.210-alpha → 4.0.219-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{Stack as e,Duration as t,Size as o,Lazy as s}from"aws-cdk-lib";import{DockerImageCode as i,DockerImageFunction as r,FunctionUrlAuthType as a,HttpMethod as n}from"aws-cdk-lib/aws-lambda";import{PolicyStatement as c,Effect as m,Role as l,ServicePrincipal as d,ManagedPolicy as u,PolicyDocument as p}from"aws-cdk-lib/aws-iam";import{Topic as f}from"aws-cdk-lib/aws-sns";import{Queue as w}from"aws-cdk-lib/aws-sqs";import{LambdaSubscription as S}from"aws-cdk-lib/aws-sns-subscriptions";import{Rule as A,Schedule as L}from"aws-cdk-lib/aws-events";import{LambdaFunction as b}from"aws-cdk-lib/aws-events-targets";import{DockerImageAsset as h}from"aws-cdk-lib/aws-ecr-assets";import{StringRatchet as g,ErrorRatchet as E}from"@bitblit/ratchet-common";import{FargateComputeEnvironment as N,JobQueue as _,EcsFargateContainerDefinition as I,EcsJobDefinition as O}from"@aws-cdk/aws-batch-alpha";import{Subnet as T,Vpc as C,SecurityGroup as P}from"aws-cdk-lib/aws-ec2";import{ContainerImage as y}from"aws-cdk-lib/aws-ecs";import{Bucket as k,BucketEncryption as R}from"aws-cdk-lib/aws-s3";import v from"path";import{OriginAccessIdentity as D,OriginProtocolPolicy as B,CloudFrontAllowedMethods as W,CloudFrontAllowedCachedMethods as H,HttpVersion as G,PriceClass as F,ViewerProtocolPolicy as M,CloudFrontWebDistribution as U}from"aws-cdk-lib/aws-cloudfront";import{RecordSet as x,RecordType as V,HostedZone as z}from"aws-cdk-lib/aws-route53";import{CloudFrontTarget as j}from"aws-cdk-lib/aws-route53-targets";import{BucketDeployment as q,Source as J}from"aws-cdk-lib/aws-s3-deployment";class Q{constructor(){}static buildInformation(){return{version:"210",hash:"8490a192d81de0ea00f88a5d60add399ed69aa8e",branch:"alpha-2023-08-30-3",tag:"alpha-2023-08-30-3",timeBuiltISO:"2023-08-30T11:18:27-0700",notes:"No notes"}}}class ${constructor(){}static toEnvironmentVariables(e){const t={};return e.forEach((e=>{Object.keys(e).forEach((o=>{t[o]=g.safeString(e[o])}))})),t}static createDefaultPolicyStatementList(e,t,o,s){return(e.additionalPolicyStatements||[]).concat([new c({effect:m.ALLOW,actions:["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],resources:["arn:aws:logs:*:*:*"]}),new c({effect:m.ALLOW,actions:["ses:SendEmail","ses:SendRawEmail"],resources:["arn:aws:ses:*"]}),new c({effect:m.ALLOW,actions:["sqs:*"],resources:[t.queueArn]}),new c({effect:m.ALLOW,actions:["sns:*"],resources:[o.topicArn,s.topicArn]}),new c({effect:m.ALLOW,actions:["batch:*"],resources:["*"]})])}static ALLOW_ECS=new c({effect:m.ALLOW,actions:["ecs:*"],resources:["*"]});static ALLOW_ECR=new c({effect:m.ALLOW,actions:["ecr:BatchCheckLayerAvailability","ecr:BatchGetImage","ecr:GetDownloadUrlForLayer","ecr:GetAuthorizationToken"],resources:["*"]});static ALLOW_RESTRICTED_LOGS=new c({effect:m.ALLOW,actions:["logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams","logs:CreateLogGroup"],resources:["*"]});static ALLOW_FARGATE_SECRET_READING=[new c({effect:m.ALLOW,actions:["ssm:GetParameters"],resources:["*"]}),new c({effect:m.ALLOW,actions:["secretsmanager:GetSecretValue"],resources:["*"]}),new c({effect:m.ALLOW,actions:["kms:Decrypt"],resources:["*"]})];static ECS_POLICY_STATEMENTS=[$.ALLOW_ECS,$.ALLOW_ECR,$.ALLOW_RESTRICTED_LOGS].concat($.ALLOW_FARGATE_SECRET_READING)}class K extends e{webHandler;backgroundHandler;apiDomain;constructor(c,m,E){super(c,m,E);const k=new h(this,m+"DockerImage",{directory:E.dockerFileFolder,file:E.dockerFileName}),R=i.fromImageAsset(E.dockerFileFolder,{file:E.dockerFileName}),v=new f(this,m+"WorkNotificationTopic"),D=new w(this,m+"WorkQueue",{fifo:!0,retentionPeriod:t.hours(8),visibilityTimeout:t.minutes(5),contentBasedDeduplication:!0,...E}),B=new f(this,m+"InterApiTopic"),W={EPSILON_AWS_REGION:g.safeString(e.of(this).region),EPSILON_AWS_AVAILABILITY_ZONES:g.safeString(JSON.stringify(e.of(this).availabilityZones)),EPSILON_BACKGROUND_SQS_QUEUE_URL:g.safeString(D.queueUrl),EPSILON_BACKGROUND_SNS_TOPIC_ARN:g.safeString(v.topicArn),EPSILON_INTER_API_EVENT_TOPIC_ARN:g.safeString(B.topicArn),EPSILON_LIB_BUILD_HASH:g.safeString(Q.buildInformation().hash),EPSILON_LIB_BUILD_TIME:g.safeString(Q.buildInformation().timeBuiltISO),EPSILON_LIB_BUILD_BRANCH_OR_TAG:g.safeString(Q.buildInformation().branch||Q.buildInformation().tag),EPSILON_LIB_BUILD_VERSION:g.safeString(Q.buildInformation().version)},H=Object.assign({},E.extraEnvironmentalVars||{},W),G=new l(this,m+"BatchExecutionRole",{assumedBy:new d("ecs-tasks.amazonaws.com"),managedPolicies:[u.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],inlinePolicies:{root:new p({statements:$.ECS_POLICY_STATEMENTS})}}),F=new l(this,m+"BatchJobRole",{assumedBy:new d("ecs-tasks.amazonaws.com"),managedPolicies:[u.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],inlinePolicies:{root:new p({statements:$.createDefaultPolicyStatementList(E,D,v,B)})}});E.vpcSubnetIds.map(((e,t)=>T.fromSubnetId(this,`VpcSubnet${t}`,`subnet-${e}`)));const M={vpc:C.fromLookup(this,"Vpc",{vpcId:E.vpcId}),computeEnvironmentName:m+"ComputeEnv",enabled:!0,maxvCpus:16,replaceComputeEnvironment:!1,securityGroups:E.lambdaSecurityGroupIds.map(((e,t)=>P.fromSecurityGroupId(this,`SecurityGroup${t}`,`sg-${e}`))),serviceRole:l.fromRoleArn(this,`${m}ServiceRole`,"arn:aws:iam::"+E.env.account+":role/AWSBatchServiceRole"),spot:!1,terminateOnUpdate:!1,updateTimeout:t.hours(4),updateToLatestImageVersion:!0},U=new N(this,m+"ComputeEnv",M),x=new _(this,m+"BatchJobQueue",{computeEnvironments:[{order:1,computeEnvironment:U}],enabled:!0,jobQueueName:m+"BatchJobQueue",priority:10,schedulingPolicy:void 0}),V=$.toEnvironmentVariables([H,E.extraEnvironmentalVars||{},{EPSILON_RUNNING_IN_AWS_BATCH:!0}]),z={cpu:4,image:y.fromRegistry(k.imageUri),memory:o.mebibytes(8192),assignPublicIp:!0,command:["Ref::taskName","Ref::taskData","Ref::traceId","Ref::traceDepth"],environment:V,executionRole:G,jobRole:F,readonlyRootFilesystem:!1,volumes:[]},j=new I(this,`${m}FargateContainerDefinition`,z),q=new O(this,m+"JobDefinition",{jobDefinitionName:m+"JobDefinition",retryAttempts:3,retryStrategies:void 0,schedulingPriority:void 0,timeout:void 0,container:j}),J=new l(this,"customRole",{roleName:m+"LambdaCustomRole",assumedBy:new d("lambda.amazonaws.com"),managedPolicies:[u.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],inlinePolicies:{root:new p({statements:$.createDefaultPolicyStatementList(E,D,v,B)})}});if(H.EPSILON_AWS_BATCH_JOB_DEFINITION_ARN=q.jobDefinitionArn,H.EPSILON_AWS_BATCH_JOB_QUEUE_ARN=x.jobQueueArn,this.webHandler=new r(this,m+"Web",{retryAttempts:2,memorySize:E.webMemorySizeMb||128,ephemeralStorageSize:o.mebibytes(512),timeout:t.seconds(E.webTimeoutSeconds||20),code:R,role:J,environment:H}),E?.webLambdaPingMinutes&&E.webLambdaPingMinutes>0){new A(this,m+"WebKeepaliveRule",{schedule:L.rate(t.minutes(Math.ceil(E.webLambdaPingMinutes)))}).addTarget(new b(this.webHandler))}const K=this.webHandler.addFunctionUrl({authType:a.NONE,cors:{allowedOrigins:["*"],allowedHeaders:["Content-Type","X-Amz-Date","Authorization","X-Api-Key"],allowedMethods:[n.ALL],allowCredentials:!0}});this.backgroundHandler=new r(this,m+"Background",{retryAttempts:2,memorySize:E.backgroundMemorySizeMb||3e3,ephemeralStorageSize:o.mebibytes(512),timeout:t.seconds(E.backgroundTimeoutSeconds||900),code:R,role:J,environment:H}),v.addSubscription(new S(this.backgroundHandler)),B.addSubscription(new S(this.backgroundHandler));new A(this,m+"CronRule",{schedule:L.rate(t.minutes(1))}).addTarget(new b(this.backgroundHandler)),this.apiDomain=s.uncachedString({produce:e=>({"Fn::Select":[2,{"Fn::Split":["/",e.resolve(K.url)]}]})})}}var Y;!function(e){e.Update="Update",e.DoNotUpdate="DoNotUpdate"}(Y||(Y={}));class X extends e{constructor(e,o,s){super(e,o,s);const i=new D(this,o+"OriginAccessId"),r=new k(this,o+"DeployBucket",{bucketName:s.targetBucketName,versioned:!1,publicReadAccess:!1,encryption:R.S3_MANAGED}),a=(s.simpleAdditionalMappings||[]).map((e=>{const o=k.fromBucketAttributes(this,e.bucketName+"ImportedBucket",{bucketName:e.bucketName});return{bucket:o,sourceConfig:{s3OriginSource:{s3BucketSource:o,originAccessIdentity:i},behaviors:[{pathPattern:e.pathPattern,isDefaultBehavior:!1,compress:!0,defaultTtl:t.seconds(1),minTtl:t.seconds(1),maxTtl:t.seconds(1),forwardedValues:{queryString:!1}}]}}})),n={s3OriginSource:{s3BucketSource:r,originAccessIdentity:i},behaviors:[{isDefaultBehavior:!0,compress:!0,defaultTtl:t.seconds(1),minTtl:t.seconds(1),maxTtl:t.seconds(1),forwardedValues:{queryString:!1}}]},c={customOriginSource:{domainName:s.apiDomainName,originProtocolPolicy:B.HTTPS_ONLY},behaviors:[{compress:!0,forwardedValues:{queryString:!0,cookies:{forward:"whitelist",whitelistedNames:["idToken"]},headers:["Accept","Referer","Authorization","Content-Type"]},pathPattern:"graphql",defaultTtl:t.seconds(0),maxTtl:t.seconds(0),minTtl:t.seconds(0),allowedMethods:W.ALL,cachedMethods:H.GET_HEAD}]},m={httpVersion:G.HTTP2,defaultRootObject:"index.html",originConfigs:[n,c,...a.map((e=>e.sourceConfig))],errorConfigurations:[{errorCode:404,errorCachingMinTtl:300,responseCode:200,responsePagePath:"/index.html"},{errorCode:403,errorCachingMinTtl:300,responseCode:200,responsePagePath:"/index.html"}],priceClass:F.PRICE_CLASS_ALL,viewerProtocolPolicy:M.REDIRECT_TO_HTTPS,viewerCertificate:{aliases:s.cloudFrontDomainNames,props:{acmCertificateArn:s.cloudFrontHttpsCertificateArn,sslSupportMethod:"sni-only"}}},l=new U(this,o+"CloudfrontDistro",m);if(s?.route53Handling===Y.Update&&s?.cloudFrontDomainNames?.length)for(let e=0;e<s.cloudFrontDomainNames.length;e++)new x(this,o+"DomainName-"+s.cloudFrontDomainNames[e],{recordType:V.A,recordName:s.cloudFrontDomainNames[e],target:{aliasTarget:new j(l)},zone:z.fromLookup(this,o,{domainName:X.extractApexDomain(s.cloudFrontDomainNames[e])})});new q(this,o+"SiteDeploy",{sources:s.pathsToAssets.map((e=>J.asset(v.resolve(e)))),destinationBucket:r,distribution:l,distributionPaths:["/*"]})}static extractApexDomain(e){const t=g.trimToEmpty(e).split(".");return t.length<2&&E.throwFormattedErr("Not a valid domain name : %s",e),t[t.length-2]+"."+t[t.length-1]}}export{K as EpsilonApiStack,$ as EpsilonStackUtil,X as EpsilonWebsiteStack,Y as EpsilonWebsiteStackPropsRoute53Handling,Q as RatchetEpsilonDeploymentInfo};
1
+ import{Stack as e,Duration as t,Size as o,Lazy as s}from"aws-cdk-lib";import{DockerImageCode as i,DockerImageFunction as r,FunctionUrlAuthType as a,HttpMethod as n}from"aws-cdk-lib/aws-lambda";import{PolicyStatement as c,Effect as m,Role as l,ServicePrincipal as d,ManagedPolicy as u,PolicyDocument as p}from"aws-cdk-lib/aws-iam";import{Topic as f}from"aws-cdk-lib/aws-sns";import{Queue as w}from"aws-cdk-lib/aws-sqs";import{LambdaSubscription as S}from"aws-cdk-lib/aws-sns-subscriptions";import{Rule as A,Schedule as L}from"aws-cdk-lib/aws-events";import{LambdaFunction as b}from"aws-cdk-lib/aws-events-targets";import{DockerImageAsset as h}from"aws-cdk-lib/aws-ecr-assets";import{StringRatchet as g,ErrorRatchet as E}from"@bitblit/ratchet-common";import{FargateComputeEnvironment as N,JobQueue as _,EcsFargateContainerDefinition as I,EcsJobDefinition as O}from"@aws-cdk/aws-batch-alpha";import{Subnet as T,Vpc as C,SecurityGroup as P}from"aws-cdk-lib/aws-ec2";import{ContainerImage as y}from"aws-cdk-lib/aws-ecs";import{Bucket as k,BucketEncryption as R}from"aws-cdk-lib/aws-s3";import v from"path";import{OriginAccessIdentity as D,OriginProtocolPolicy as B,CloudFrontAllowedMethods as W,CloudFrontAllowedCachedMethods as H,HttpVersion as G,PriceClass as F,ViewerProtocolPolicy as M,CloudFrontWebDistribution as U}from"aws-cdk-lib/aws-cloudfront";import{RecordSet as x,RecordType as V,HostedZone as z}from"aws-cdk-lib/aws-route53";import{CloudFrontTarget as j}from"aws-cdk-lib/aws-route53-targets";import{BucketDeployment as q,Source as J}from"aws-cdk-lib/aws-s3-deployment";class Q{constructor(){}static buildInformation(){return{version:"219",hash:"0bb0813c0bd056e47ed88525a92a45f064dd208a",branch:"alpha-2023-09-04-8",tag:"alpha-2023-09-04-8",timeBuiltISO:"2023-09-04T21:57:27-0700",notes:"No notes"}}}class ${constructor(){}static toEnvironmentVariables(e){const t={};return e.forEach((e=>{Object.keys(e).forEach((o=>{t[o]=g.safeString(e[o])}))})),t}static createDefaultPolicyStatementList(e,t,o,s){return(e.additionalPolicyStatements||[]).concat([new c({effect:m.ALLOW,actions:["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],resources:["arn:aws:logs:*:*:*"]}),new c({effect:m.ALLOW,actions:["ses:SendEmail","ses:SendRawEmail"],resources:["arn:aws:ses:*"]}),new c({effect:m.ALLOW,actions:["sqs:*"],resources:[t.queueArn]}),new c({effect:m.ALLOW,actions:["sns:*"],resources:[o.topicArn,s.topicArn]}),new c({effect:m.ALLOW,actions:["batch:*"],resources:["*"]})])}static ALLOW_ECS=new c({effect:m.ALLOW,actions:["ecs:*"],resources:["*"]});static ALLOW_ECR=new c({effect:m.ALLOW,actions:["ecr:BatchCheckLayerAvailability","ecr:BatchGetImage","ecr:GetDownloadUrlForLayer","ecr:GetAuthorizationToken"],resources:["*"]});static ALLOW_RESTRICTED_LOGS=new c({effect:m.ALLOW,actions:["logs:CreateLogStream","logs:PutLogEvents","logs:DescribeLogStreams","logs:CreateLogGroup"],resources:["*"]});static ALLOW_FARGATE_SECRET_READING=[new c({effect:m.ALLOW,actions:["ssm:GetParameters"],resources:["*"]}),new c({effect:m.ALLOW,actions:["secretsmanager:GetSecretValue"],resources:["*"]}),new c({effect:m.ALLOW,actions:["kms:Decrypt"],resources:["*"]})];static ECS_POLICY_STATEMENTS=[$.ALLOW_ECS,$.ALLOW_ECR,$.ALLOW_RESTRICTED_LOGS].concat($.ALLOW_FARGATE_SECRET_READING)}class K extends e{webHandler;backgroundHandler;apiDomain;constructor(c,m,E){super(c,m,E);const k=new h(this,m+"DockerImage",{directory:E.dockerFileFolder,file:E.dockerFileName}),R=i.fromImageAsset(E.dockerFileFolder,{file:E.dockerFileName}),v=new f(this,m+"WorkNotificationTopic"),D=new w(this,m+"WorkQueue",{fifo:!0,retentionPeriod:t.hours(8),visibilityTimeout:t.minutes(5),contentBasedDeduplication:!0,...E}),B=new f(this,m+"InterApiTopic"),W={EPSILON_AWS_REGION:g.safeString(e.of(this).region),EPSILON_AWS_AVAILABILITY_ZONES:g.safeString(JSON.stringify(e.of(this).availabilityZones)),EPSILON_BACKGROUND_SQS_QUEUE_URL:g.safeString(D.queueUrl),EPSILON_BACKGROUND_SNS_TOPIC_ARN:g.safeString(v.topicArn),EPSILON_INTER_API_EVENT_TOPIC_ARN:g.safeString(B.topicArn),EPSILON_LIB_BUILD_HASH:g.safeString(Q.buildInformation().hash),EPSILON_LIB_BUILD_TIME:g.safeString(Q.buildInformation().timeBuiltISO),EPSILON_LIB_BUILD_BRANCH_OR_TAG:g.safeString(Q.buildInformation().branch||Q.buildInformation().tag),EPSILON_LIB_BUILD_VERSION:g.safeString(Q.buildInformation().version)},H=Object.assign({},E.extraEnvironmentalVars||{},W),G=new l(this,m+"BatchExecutionRole",{assumedBy:new d("ecs-tasks.amazonaws.com"),managedPolicies:[u.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],inlinePolicies:{root:new p({statements:$.ECS_POLICY_STATEMENTS})}}),F=new l(this,m+"BatchJobRole",{assumedBy:new d("ecs-tasks.amazonaws.com"),managedPolicies:[u.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],inlinePolicies:{root:new p({statements:$.createDefaultPolicyStatementList(E,D,v,B)})}});E.vpcSubnetIds.map(((e,t)=>T.fromSubnetId(this,`VpcSubnet${t}`,`subnet-${e}`)));const M={vpc:C.fromLookup(this,"Vpc",{vpcId:E.vpcId}),computeEnvironmentName:m+"ComputeEnv",enabled:!0,maxvCpus:16,replaceComputeEnvironment:!1,securityGroups:E.lambdaSecurityGroupIds.map(((e,t)=>P.fromSecurityGroupId(this,`SecurityGroup${t}`,`sg-${e}`))),serviceRole:l.fromRoleArn(this,`${m}ServiceRole`,"arn:aws:iam::"+E.env.account+":role/AWSBatchServiceRole"),spot:!1,terminateOnUpdate:!1,updateTimeout:t.hours(4),updateToLatestImageVersion:!0},U=new N(this,m+"ComputeEnv",M),x=new _(this,m+"BatchJobQueue",{computeEnvironments:[{order:1,computeEnvironment:U}],enabled:!0,jobQueueName:m+"BatchJobQueue",priority:10,schedulingPolicy:void 0}),V=$.toEnvironmentVariables([H,E.extraEnvironmentalVars||{},{EPSILON_RUNNING_IN_AWS_BATCH:!0}]),z={cpu:4,image:y.fromRegistry(k.imageUri),memory:o.mebibytes(8192),assignPublicIp:!0,command:["Ref::taskName","Ref::taskData","Ref::traceId","Ref::traceDepth"],environment:V,executionRole:G,jobRole:F,readonlyRootFilesystem:!1,volumes:[]},j=new I(this,`${m}FargateContainerDefinition`,z),q=new O(this,m+"JobDefinition",{jobDefinitionName:m+"JobDefinition",retryAttempts:3,retryStrategies:void 0,schedulingPriority:void 0,timeout:void 0,container:j}),J=new l(this,"customRole",{roleName:m+"LambdaCustomRole",assumedBy:new d("lambda.amazonaws.com"),managedPolicies:[u.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],inlinePolicies:{root:new p({statements:$.createDefaultPolicyStatementList(E,D,v,B)})}});if(H.EPSILON_AWS_BATCH_JOB_DEFINITION_ARN=q.jobDefinitionArn,H.EPSILON_AWS_BATCH_JOB_QUEUE_ARN=x.jobQueueArn,this.webHandler=new r(this,m+"Web",{retryAttempts:2,memorySize:E.webMemorySizeMb||128,ephemeralStorageSize:o.mebibytes(512),timeout:t.seconds(E.webTimeoutSeconds||20),code:R,role:J,environment:H}),E?.webLambdaPingMinutes&&E.webLambdaPingMinutes>0){new A(this,m+"WebKeepaliveRule",{schedule:L.rate(t.minutes(Math.ceil(E.webLambdaPingMinutes)))}).addTarget(new b(this.webHandler))}const K=this.webHandler.addFunctionUrl({authType:a.NONE,cors:{allowedOrigins:["*"],allowedHeaders:["Content-Type","X-Amz-Date","Authorization","X-Api-Key"],allowedMethods:[n.ALL],allowCredentials:!0}});this.backgroundHandler=new r(this,m+"Background",{retryAttempts:2,memorySize:E.backgroundMemorySizeMb||3e3,ephemeralStorageSize:o.mebibytes(512),timeout:t.seconds(E.backgroundTimeoutSeconds||900),code:R,role:J,environment:H}),v.addSubscription(new S(this.backgroundHandler)),B.addSubscription(new S(this.backgroundHandler));new A(this,m+"CronRule",{schedule:L.rate(t.minutes(1))}).addTarget(new b(this.backgroundHandler)),this.apiDomain=s.uncachedString({produce:e=>({"Fn::Select":[2,{"Fn::Split":["/",e.resolve(K.url)]}]})})}}var Y;!function(e){e.Update="Update",e.DoNotUpdate="DoNotUpdate"}(Y||(Y={}));class X extends e{constructor(e,o,s){super(e,o,s);const i=new D(this,o+"OriginAccessId"),r=new k(this,o+"DeployBucket",{bucketName:s.targetBucketName,versioned:!1,publicReadAccess:!1,encryption:R.S3_MANAGED}),a=(s.simpleAdditionalMappings||[]).map((e=>{const o=k.fromBucketAttributes(this,e.bucketName+"ImportedBucket",{bucketName:e.bucketName});return{bucket:o,sourceConfig:{s3OriginSource:{s3BucketSource:o,originAccessIdentity:i},behaviors:[{pathPattern:e.pathPattern,isDefaultBehavior:!1,compress:!0,defaultTtl:t.seconds(1),minTtl:t.seconds(1),maxTtl:t.seconds(1),forwardedValues:{queryString:!1}}]}}})),n={s3OriginSource:{s3BucketSource:r,originAccessIdentity:i},behaviors:[{isDefaultBehavior:!0,compress:!0,defaultTtl:t.seconds(1),minTtl:t.seconds(1),maxTtl:t.seconds(1),forwardedValues:{queryString:!1}}]},c={customOriginSource:{domainName:s.apiDomainName,originProtocolPolicy:B.HTTPS_ONLY},behaviors:[{compress:!0,forwardedValues:{queryString:!0,cookies:{forward:"whitelist",whitelistedNames:["idToken"]},headers:["Accept","Referer","Authorization","Content-Type"]},pathPattern:"graphql",defaultTtl:t.seconds(0),maxTtl:t.seconds(0),minTtl:t.seconds(0),allowedMethods:W.ALL,cachedMethods:H.GET_HEAD}]},m={httpVersion:G.HTTP2,defaultRootObject:"index.html",originConfigs:[n,c,...a.map((e=>e.sourceConfig))],errorConfigurations:[{errorCode:404,errorCachingMinTtl:300,responseCode:200,responsePagePath:"/index.html"},{errorCode:403,errorCachingMinTtl:300,responseCode:200,responsePagePath:"/index.html"}],priceClass:F.PRICE_CLASS_ALL,viewerProtocolPolicy:M.REDIRECT_TO_HTTPS,viewerCertificate:{aliases:s.cloudFrontDomainNames,props:{acmCertificateArn:s.cloudFrontHttpsCertificateArn,sslSupportMethod:"sni-only"}}},l=new U(this,o+"CloudfrontDistro",m);if(s?.route53Handling===Y.Update&&s?.cloudFrontDomainNames?.length)for(let e=0;e<s.cloudFrontDomainNames.length;e++)new x(this,o+"DomainName-"+s.cloudFrontDomainNames[e],{recordType:V.A,recordName:s.cloudFrontDomainNames[e],target:{aliasTarget:new j(l)},zone:z.fromLookup(this,o,{domainName:X.extractApexDomain(s.cloudFrontDomainNames[e])})});new q(this,o+"SiteDeploy",{sources:s.pathsToAssets.map((e=>J.asset(v.resolve(e)))),destinationBucket:r,distribution:l,distributionPaths:["/*"]})}static extractApexDomain(e){const t=g.trimToEmpty(e).split(".");return t.length<2&&E.throwFormattedErr("Not a valid domain name : %s",e),t[t.length-2]+"."+t[t.length-1]}}export{K as EpsilonApiStack,$ as EpsilonStackUtil,X as EpsilonWebsiteStack,Y as EpsilonWebsiteStackPropsRoute53Handling,Q as RatchetEpsilonDeploymentInfo};
2
2
  //# sourceMappingURL=index.mjs.map
package/lib/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/build/ratchet-epsilon-deployment-info.ts","../src/deployment/cdk/epsilon-stack-util.ts","../src/deployment/cdk/epsilon-api-stack.ts","../src/deployment/cdk/epsilon-website-stack-props.ts","../src/deployment/cdk/epsilon-website-stack.ts"],"sourcesContent":["export class RatchetEpsilonDeploymentInfo {\n constructor() { }\n static buildInformation() {\n const val = {\n version: 'LOCAL-SNAPSHOT',\n hash: 'LOCAL-HASH',\n branch: 'LOCAL-BRANCH',\n tag: 'LOCAL-TAG',\n timeBuiltISO: 'LOCAL-TIME-ISO',\n notes: 'LOCAL-NOTES',\n };\n return val;\n }\n}\n//# sourceMappingURL=ratchet-epsilon-deployment-info.js.map","import { StringRatchet } from '@bitblit/ratchet-common';\nimport { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam';\nexport class EpsilonStackUtil {\n constructor() { }\n static toEnvironmentVariables(input) {\n const rval = {};\n input.forEach((inval) => {\n Object.keys(inval).forEach((k) => {\n rval[k] = StringRatchet.safeString(inval[k]);\n });\n });\n return rval;\n }\n static createDefaultPolicyStatementList(props, backgroundLambdaSqs, backgroundLambdaSns, interApiSns) {\n const rval = (props.additionalPolicyStatements || []).concat([\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents'],\n resources: ['arn:aws:logs:*:*:*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ses:SendEmail', 'ses:SendRawEmail'],\n resources: ['arn:aws:ses:*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['sqs:*'],\n resources: [backgroundLambdaSqs.queueArn],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['sns:*'],\n resources: [backgroundLambdaSns.topicArn, interApiSns.topicArn],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['batch:*'],\n resources: ['*'],\n }),\n ]);\n return rval;\n }\n static ALLOW_ECS = new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ecs:*'],\n resources: ['*'],\n });\n static ALLOW_ECR = new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ecr:BatchCheckLayerAvailability', 'ecr:BatchGetImage', 'ecr:GetDownloadUrlForLayer', 'ecr:GetAuthorizationToken'],\n resources: ['*'],\n });\n static ALLOW_RESTRICTED_LOGS = new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['logs:CreateLogStream', 'logs:PutLogEvents', 'logs:DescribeLogStreams', 'logs:CreateLogGroup'],\n resources: ['*'],\n });\n static ALLOW_FARGATE_SECRET_READING = [\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ssm:GetParameters'],\n resources: ['*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['secretsmanager:GetSecretValue'],\n resources: ['*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['kms:Decrypt'],\n resources: ['*'],\n }),\n ];\n static ECS_POLICY_STATEMENTS = [\n EpsilonStackUtil.ALLOW_ECS,\n EpsilonStackUtil.ALLOW_ECR,\n EpsilonStackUtil.ALLOW_RESTRICTED_LOGS,\n ].concat(EpsilonStackUtil.ALLOW_FARGATE_SECRET_READING);\n}\n//# sourceMappingURL=epsilon-stack-util.js.map","import { Duration, Lazy, Size, Stack } from 'aws-cdk-lib';\nimport { DockerImageCode, DockerImageFunction, FunctionUrlAuthType, HttpMethod } from 'aws-cdk-lib/aws-lambda';\nimport { ManagedPolicy, PolicyDocument, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';\nimport { Topic } from 'aws-cdk-lib/aws-sns';\nimport { Queue } from 'aws-cdk-lib/aws-sqs';\nimport { LambdaSubscription } from 'aws-cdk-lib/aws-sns-subscriptions';\nimport { Rule, Schedule } from 'aws-cdk-lib/aws-events';\nimport { LambdaFunction } from 'aws-cdk-lib/aws-events-targets';\nimport { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { EpsilonStackUtil } from './epsilon-stack-util.js';\nimport { RatchetEpsilonDeploymentInfo } from '../../build/ratchet-epsilon-deployment-info.js';\nimport { EcsFargateContainerDefinition, EcsJobDefinition, FargateComputeEnvironment, JobQueue, } from '@aws-cdk/aws-batch-alpha';\nimport { SecurityGroup, Subnet, Vpc } from 'aws-cdk-lib/aws-ec2';\nimport { ContainerImage } from 'aws-cdk-lib/aws-ecs';\nexport class EpsilonApiStack extends Stack {\n webHandler;\n backgroundHandler;\n apiDomain;\n constructor(scope, id, props) {\n super(scope, id, props);\n const dockerImageAsset = new DockerImageAsset(this, id + 'DockerImage', {\n directory: props.dockerFileFolder,\n file: props.dockerFileName,\n });\n const dockerImageCode = DockerImageCode.fromImageAsset(props.dockerFileFolder, { file: props.dockerFileName });\n const notificationTopic = new Topic(this, id + 'WorkNotificationTopic');\n const workQueue = new Queue(this, id + 'WorkQueue', {\n fifo: true,\n retentionPeriod: Duration.hours(8),\n visibilityTimeout: Duration.minutes(5),\n contentBasedDeduplication: true,\n ...props,\n });\n const interApiGenericEventTopic = new Topic(this, id + 'InterApiTopic');\n const epsilonEnv = {\n EPSILON_AWS_REGION: StringRatchet.safeString(Stack.of(this).region),\n EPSILON_AWS_AVAILABILITY_ZONES: StringRatchet.safeString(JSON.stringify(Stack.of(this).availabilityZones)),\n EPSILON_BACKGROUND_SQS_QUEUE_URL: StringRatchet.safeString(workQueue.queueUrl),\n EPSILON_BACKGROUND_SNS_TOPIC_ARN: StringRatchet.safeString(notificationTopic.topicArn),\n EPSILON_INTER_API_EVENT_TOPIC_ARN: StringRatchet.safeString(interApiGenericEventTopic.topicArn),\n EPSILON_LIB_BUILD_HASH: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().hash),\n EPSILON_LIB_BUILD_TIME: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().timeBuiltISO),\n EPSILON_LIB_BUILD_BRANCH_OR_TAG: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().branch || RatchetEpsilonDeploymentInfo.buildInformation().tag),\n EPSILON_LIB_BUILD_VERSION: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().version),\n };\n const env = Object.assign({}, props.extraEnvironmentalVars || {}, epsilonEnv);\n const executionRole = new Role(this, id + 'BatchExecutionRole', {\n assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'),\n managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole')],\n inlinePolicies: {\n root: new PolicyDocument({\n statements: EpsilonStackUtil.ECS_POLICY_STATEMENTS,\n }),\n },\n });\n const jobRole = new Role(this, id + 'BatchJobRole', {\n assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'),\n managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole')],\n inlinePolicies: {\n root: new PolicyDocument({\n statements: EpsilonStackUtil.createDefaultPolicyStatementList(props, workQueue, notificationTopic, interApiGenericEventTopic),\n }),\n },\n });\n const subnetSelection = {\n subnets: props.vpcSubnetIds.map((subnetId, index) => Subnet.fromSubnetId(this, `VpcSubnet${index}`, `subnet-${subnetId}`)),\n };\n const compEnvProps = {\n vpc: Vpc.fromLookup(this, `Vpc`, { vpcId: props.vpcId }),\n computeEnvironmentName: id + 'ComputeEnv',\n enabled: true,\n maxvCpus: 16,\n replaceComputeEnvironment: false,\n securityGroups: props.lambdaSecurityGroupIds.map((sgId, index) => SecurityGroup.fromSecurityGroupId(this, `SecurityGroup${index}`, `sg-${sgId}`)),\n serviceRole: Role.fromRoleArn(this, `${id}ServiceRole`, 'arn:aws:iam::' + props.env.account + ':role/AWSBatchServiceRole'),\n spot: false,\n terminateOnUpdate: false,\n updateTimeout: Duration.hours(4),\n updateToLatestImageVersion: true,\n };\n const compEnv = new FargateComputeEnvironment(this, id + 'ComputeEnv', compEnvProps);\n const batchJobQueueProps = {\n computeEnvironments: [{ order: 1, computeEnvironment: compEnv }],\n enabled: true,\n jobQueueName: id + 'BatchJobQueue',\n priority: 10,\n schedulingPolicy: undefined,\n };\n const batchJobQueue = new JobQueue(this, id + 'BatchJobQueue', batchJobQueueProps);\n const batchEnvVars = EpsilonStackUtil.toEnvironmentVariables([\n env,\n props.extraEnvironmentalVars || {},\n {\n EPSILON_RUNNING_IN_AWS_BATCH: true,\n },\n ]);\n const containerDef = {\n cpu: 4,\n image: ContainerImage.fromRegistry(dockerImageAsset.imageUri),\n memory: Size.mebibytes(8192),\n assignPublicIp: true,\n command: ['Ref::taskName', 'Ref::taskData', 'Ref::traceId', 'Ref::traceDepth'],\n environment: batchEnvVars,\n executionRole: executionRole,\n jobRole: jobRole,\n readonlyRootFilesystem: false,\n volumes: [],\n };\n const fargateContainerDefinitionDef = new EcsFargateContainerDefinition(this, `${id}FargateContainerDefinition`, containerDef);\n const jobProps = {\n jobDefinitionName: id + 'JobDefinition',\n retryAttempts: 3,\n retryStrategies: undefined,\n schedulingPriority: undefined,\n timeout: undefined,\n container: fargateContainerDefinitionDef,\n };\n const jobDef = new EcsJobDefinition(this, id + 'JobDefinition', jobProps);\n const lambdaRole = new Role(this, 'customRole', {\n roleName: id + 'LambdaCustomRole',\n assumedBy: new ServicePrincipal('lambda.amazonaws.com'),\n managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole')],\n inlinePolicies: {\n root: new PolicyDocument({\n statements: EpsilonStackUtil.createDefaultPolicyStatementList(props, workQueue, notificationTopic, interApiGenericEventTopic),\n }),\n },\n });\n env['EPSILON_AWS_BATCH_JOB_DEFINITION_ARN'] = jobDef.jobDefinitionArn;\n env['EPSILON_AWS_BATCH_JOB_QUEUE_ARN'] = batchJobQueue.jobQueueArn;\n this.webHandler = new DockerImageFunction(this, id + 'Web', {\n retryAttempts: 2,\n memorySize: props.webMemorySizeMb || 128,\n ephemeralStorageSize: Size.mebibytes(512),\n timeout: Duration.seconds(props.webTimeoutSeconds || 20),\n code: dockerImageCode,\n role: lambdaRole,\n environment: env,\n });\n if (props?.webLambdaPingMinutes && props.webLambdaPingMinutes > 0) {\n const rule = new Rule(this, id + 'WebKeepaliveRule', {\n schedule: Schedule.rate(Duration.minutes(Math.ceil(props.webLambdaPingMinutes))),\n });\n rule.addTarget(new LambdaFunction(this.webHandler));\n }\n const fnUrl = this.webHandler.addFunctionUrl({\n authType: FunctionUrlAuthType.NONE,\n cors: {\n allowedOrigins: ['*'],\n allowedHeaders: ['Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key'],\n allowedMethods: [HttpMethod.ALL],\n allowCredentials: true,\n },\n });\n this.backgroundHandler = new DockerImageFunction(this, id + 'Background', {\n retryAttempts: 2,\n memorySize: props.backgroundMemorySizeMb || 3000,\n ephemeralStorageSize: Size.mebibytes(512),\n timeout: Duration.seconds(props.backgroundTimeoutSeconds || 900),\n code: dockerImageCode,\n role: lambdaRole,\n environment: env,\n });\n notificationTopic.addSubscription(new LambdaSubscription(this.backgroundHandler));\n interApiGenericEventTopic.addSubscription(new LambdaSubscription(this.backgroundHandler));\n const rule = new Rule(this, id + 'CronRule', {\n schedule: Schedule.rate(Duration.minutes(1)),\n });\n rule.addTarget(new LambdaFunction(this.backgroundHandler));\n this.apiDomain = Lazy.uncachedString({\n produce: (context) => {\n const resolved = context.resolve(fnUrl.url);\n return { 'Fn::Select': [2, { 'Fn::Split': ['/', resolved] }] };\n },\n });\n }\n}\n//# sourceMappingURL=epsilon-api-stack.js.map","export var EpsilonWebsiteStackPropsRoute53Handling;\n(function (EpsilonWebsiteStackPropsRoute53Handling) {\n EpsilonWebsiteStackPropsRoute53Handling[\"Update\"] = \"Update\";\n EpsilonWebsiteStackPropsRoute53Handling[\"DoNotUpdate\"] = \"DoNotUpdate\";\n})(EpsilonWebsiteStackPropsRoute53Handling || (EpsilonWebsiteStackPropsRoute53Handling = {}));\n//# sourceMappingURL=epsilon-website-stack-props.js.map","import { Bucket, BucketEncryption } from 'aws-cdk-lib/aws-s3';\nimport { Duration, Stack } from 'aws-cdk-lib';\nimport path from 'path';\nimport { CloudFrontAllowedCachedMethods, CloudFrontAllowedMethods, CloudFrontWebDistribution, HttpVersion, OriginAccessIdentity, OriginProtocolPolicy, PriceClass, ViewerProtocolPolicy, } from 'aws-cdk-lib/aws-cloudfront';\nimport { HostedZone, RecordSet, RecordType } from 'aws-cdk-lib/aws-route53';\nimport { CloudFrontTarget } from 'aws-cdk-lib/aws-route53-targets';\nimport { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment';\nimport { EpsilonWebsiteStackPropsRoute53Handling } from './epsilon-website-stack-props.js';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { ErrorRatchet } from '@bitblit/ratchet-common';\nexport class EpsilonWebsiteStack extends Stack {\n constructor(scope, id, props) {\n super(scope, id, props);\n const originAccessId = new OriginAccessIdentity(this, id + 'OriginAccessId');\n const websiteBucket = new Bucket(this, id + 'DeployBucket', {\n bucketName: props.targetBucketName,\n versioned: false,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n });\n const extraBucketAndSource = (props.simpleAdditionalMappings || []).map((eb) => {\n const nextBucket = Bucket.fromBucketAttributes(this, eb.bucketName + 'ImportedBucket', {\n bucketName: eb.bucketName,\n });\n const nextBS = {\n bucket: nextBucket,\n sourceConfig: {\n s3OriginSource: {\n s3BucketSource: nextBucket,\n originAccessIdentity: originAccessId,\n },\n behaviors: [\n {\n pathPattern: eb.pathPattern,\n isDefaultBehavior: false,\n compress: true,\n defaultTtl: Duration.seconds(1),\n minTtl: Duration.seconds(1),\n maxTtl: Duration.seconds(1),\n forwardedValues: {\n queryString: false,\n },\n },\n ],\n },\n };\n return nextBS;\n });\n const assetSource = {\n s3OriginSource: {\n s3BucketSource: websiteBucket,\n originAccessIdentity: originAccessId,\n },\n behaviors: [\n {\n isDefaultBehavior: true,\n compress: true,\n defaultTtl: Duration.seconds(1),\n minTtl: Duration.seconds(1),\n maxTtl: Duration.seconds(1),\n forwardedValues: {\n queryString: false,\n },\n },\n ],\n };\n const apiSource = {\n customOriginSource: {\n domainName: props.apiDomainName,\n originProtocolPolicy: OriginProtocolPolicy.HTTPS_ONLY,\n },\n behaviors: [\n {\n compress: true,\n forwardedValues: {\n queryString: true,\n cookies: {\n forward: 'whitelist',\n whitelistedNames: ['idToken'],\n },\n headers: ['Accept', 'Referer', 'Authorization', 'Content-Type'],\n },\n pathPattern: 'graphql',\n defaultTtl: Duration.seconds(0),\n maxTtl: Duration.seconds(0),\n minTtl: Duration.seconds(0),\n allowedMethods: CloudFrontAllowedMethods.ALL,\n cachedMethods: CloudFrontAllowedCachedMethods.GET_HEAD,\n },\n ],\n };\n const distributionProps = {\n httpVersion: HttpVersion.HTTP2,\n defaultRootObject: 'index.html',\n originConfigs: [assetSource, apiSource, ...extraBucketAndSource.map((s) => s.sourceConfig)],\n errorConfigurations: [\n {\n errorCode: 404,\n errorCachingMinTtl: 300,\n responseCode: 200,\n responsePagePath: '/index.html',\n },\n {\n errorCode: 403,\n errorCachingMinTtl: 300,\n responseCode: 200,\n responsePagePath: '/index.html',\n },\n ],\n priceClass: PriceClass.PRICE_CLASS_ALL,\n viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n viewerCertificate: {\n aliases: props.cloudFrontDomainNames,\n props: {\n acmCertificateArn: props.cloudFrontHttpsCertificateArn,\n sslSupportMethod: 'sni-only',\n },\n },\n };\n const cloudfrontDistro = new CloudFrontWebDistribution(this, id + 'CloudfrontDistro', distributionProps);\n if (props?.route53Handling === EpsilonWebsiteStackPropsRoute53Handling.Update) {\n if (props?.cloudFrontDomainNames?.length) {\n for (let i = 0; i < props.cloudFrontDomainNames.length; i++) {\n const domain = new RecordSet(this, id + 'DomainName-' + props.cloudFrontDomainNames[i], {\n recordType: RecordType.A,\n recordName: props.cloudFrontDomainNames[i],\n target: {\n aliasTarget: new CloudFrontTarget(cloudfrontDistro),\n },\n zone: HostedZone.fromLookup(this, id, { domainName: EpsilonWebsiteStack.extractApexDomain(props.cloudFrontDomainNames[i]) }),\n });\n }\n }\n }\n new BucketDeployment(this, id + 'SiteDeploy', {\n sources: props.pathsToAssets.map((inPath) => Source.asset(path.resolve(inPath))),\n destinationBucket: websiteBucket,\n distribution: cloudfrontDistro,\n distributionPaths: ['/*'],\n });\n }\n static extractApexDomain(domainName) {\n const pieces = StringRatchet.trimToEmpty(domainName).split('.');\n if (pieces.length < 2) {\n ErrorRatchet.throwFormattedErr('Not a valid domain name : %s', domainName);\n }\n return pieces[pieces.length - 2] + '.' + pieces[pieces.length - 1];\n }\n}\n//# sourceMappingURL=epsilon-website-stack.js.map"],"names":["RatchetEpsilonDeploymentInfo","constructor","static","version","hash","branch","tag","timeBuiltISO","notes","EpsilonStackUtil","input","rval","forEach","inval","Object","keys","k","StringRatchet","safeString","props","backgroundLambdaSqs","backgroundLambdaSns","interApiSns","additionalPolicyStatements","concat","PolicyStatement","effect","Effect","ALLOW","actions","resources","queueArn","topicArn","ALLOW_ECS","ALLOW_ECR","ALLOW_RESTRICTED_LOGS","ALLOW_FARGATE_SECRET_READING","EpsilonApiStack","Stack","webHandler","backgroundHandler","apiDomain","scope","id","super","dockerImageAsset","DockerImageAsset","this","directory","dockerFileFolder","file","dockerFileName","dockerImageCode","DockerImageCode","fromImageAsset","notificationTopic","Topic","workQueue","Queue","fifo","retentionPeriod","Duration","hours","visibilityTimeout","minutes","contentBasedDeduplication","interApiGenericEventTopic","epsilonEnv","EPSILON_AWS_REGION","of","region","EPSILON_AWS_AVAILABILITY_ZONES","JSON","stringify","availabilityZones","EPSILON_BACKGROUND_SQS_QUEUE_URL","queueUrl","EPSILON_BACKGROUND_SNS_TOPIC_ARN","EPSILON_INTER_API_EVENT_TOPIC_ARN","EPSILON_LIB_BUILD_HASH","buildInformation","EPSILON_LIB_BUILD_TIME","EPSILON_LIB_BUILD_BRANCH_OR_TAG","EPSILON_LIB_BUILD_VERSION","env","assign","extraEnvironmentalVars","executionRole","Role","assumedBy","ServicePrincipal","managedPolicies","ManagedPolicy","fromAwsManagedPolicyName","inlinePolicies","root","PolicyDocument","statements","ECS_POLICY_STATEMENTS","jobRole","createDefaultPolicyStatementList","vpcSubnetIds","map","subnetId","index","Subnet","fromSubnetId","compEnvProps","vpc","Vpc","fromLookup","vpcId","computeEnvironmentName","enabled","maxvCpus","replaceComputeEnvironment","securityGroups","lambdaSecurityGroupIds","sgId","SecurityGroup","fromSecurityGroupId","serviceRole","fromRoleArn","account","spot","terminateOnUpdate","updateTimeout","updateToLatestImageVersion","compEnv","FargateComputeEnvironment","batchJobQueue","JobQueue","computeEnvironments","order","computeEnvironment","jobQueueName","priority","schedulingPolicy","undefined","batchEnvVars","toEnvironmentVariables","EPSILON_RUNNING_IN_AWS_BATCH","containerDef","cpu","image","ContainerImage","fromRegistry","imageUri","memory","Size","mebibytes","assignPublicIp","command","environment","readonlyRootFilesystem","volumes","fargateContainerDefinitionDef","EcsFargateContainerDefinition","jobDef","EcsJobDefinition","jobDefinitionName","retryAttempts","retryStrategies","schedulingPriority","timeout","container","lambdaRole","roleName","jobDefinitionArn","jobQueueArn","DockerImageFunction","memorySize","webMemorySizeMb","ephemeralStorageSize","seconds","webTimeoutSeconds","code","role","webLambdaPingMinutes","Rule","schedule","Schedule","rate","Math","ceil","addTarget","LambdaFunction","fnUrl","addFunctionUrl","authType","FunctionUrlAuthType","NONE","cors","allowedOrigins","allowedHeaders","allowedMethods","HttpMethod","ALL","allowCredentials","backgroundMemorySizeMb","backgroundTimeoutSeconds","addSubscription","LambdaSubscription","Lazy","uncachedString","produce","context","resolve","url","EpsilonWebsiteStackPropsRoute53Handling","EpsilonWebsiteStack","originAccessId","OriginAccessIdentity","websiteBucket","Bucket","bucketName","targetBucketName","versioned","publicReadAccess","encryption","BucketEncryption","S3_MANAGED","extraBucketAndSource","simpleAdditionalMappings","eb","nextBucket","fromBucketAttributes","bucket","sourceConfig","s3OriginSource","s3BucketSource","originAccessIdentity","behaviors","pathPattern","isDefaultBehavior","compress","defaultTtl","minTtl","maxTtl","forwardedValues","queryString","assetSource","apiSource","customOriginSource","domainName","apiDomainName","originProtocolPolicy","OriginProtocolPolicy","HTTPS_ONLY","cookies","forward","whitelistedNames","headers","CloudFrontAllowedMethods","cachedMethods","CloudFrontAllowedCachedMethods","GET_HEAD","distributionProps","httpVersion","HttpVersion","HTTP2","defaultRootObject","originConfigs","s","errorConfigurations","errorCode","errorCachingMinTtl","responseCode","responsePagePath","priceClass","PriceClass","PRICE_CLASS_ALL","viewerProtocolPolicy","ViewerProtocolPolicy","REDIRECT_TO_HTTPS","viewerCertificate","aliases","cloudFrontDomainNames","acmCertificateArn","cloudFrontHttpsCertificateArn","sslSupportMethod","cloudfrontDistro","CloudFrontWebDistribution","route53Handling","Update","length","i","RecordSet","recordType","RecordType","A","recordName","target","aliasTarget","CloudFrontTarget","zone","HostedZone","extractApexDomain","BucketDeployment","sources","pathsToAssets","inPath","Source","asset","path","destinationBucket","distribution","distributionPaths","pieces","trimToEmpty","split","ErrorRatchet","throwFormattedErr"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/build/ratchet-epsilon-deployment-info.ts","../src/deployment/cdk/epsilon-stack-util.ts","../src/deployment/cdk/epsilon-api-stack.ts","../src/deployment/cdk/epsilon-website-stack-props.ts","../src/deployment/cdk/epsilon-website-stack.ts"],"sourcesContent":["export class RatchetEpsilonDeploymentInfo {\n constructor() { }\n static buildInformation() {\n const val = {\n version: 'LOCAL-SNAPSHOT',\n hash: 'LOCAL-HASH',\n branch: 'LOCAL-BRANCH',\n tag: 'LOCAL-TAG',\n timeBuiltISO: 'LOCAL-TIME-ISO',\n notes: 'LOCAL-NOTES',\n };\n return val;\n }\n}\n//# sourceMappingURL=ratchet-epsilon-deployment-info.js.map","import { StringRatchet } from '@bitblit/ratchet-common';\nimport { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam';\nexport class EpsilonStackUtil {\n constructor() { }\n static toEnvironmentVariables(input) {\n const rval = {};\n input.forEach((inval) => {\n Object.keys(inval).forEach((k) => {\n rval[k] = StringRatchet.safeString(inval[k]);\n });\n });\n return rval;\n }\n static createDefaultPolicyStatementList(props, backgroundLambdaSqs, backgroundLambdaSns, interApiSns) {\n const rval = (props.additionalPolicyStatements || []).concat([\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents'],\n resources: ['arn:aws:logs:*:*:*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ses:SendEmail', 'ses:SendRawEmail'],\n resources: ['arn:aws:ses:*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['sqs:*'],\n resources: [backgroundLambdaSqs.queueArn],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['sns:*'],\n resources: [backgroundLambdaSns.topicArn, interApiSns.topicArn],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['batch:*'],\n resources: ['*'],\n }),\n ]);\n return rval;\n }\n static ALLOW_ECS = new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ecs:*'],\n resources: ['*'],\n });\n static ALLOW_ECR = new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ecr:BatchCheckLayerAvailability', 'ecr:BatchGetImage', 'ecr:GetDownloadUrlForLayer', 'ecr:GetAuthorizationToken'],\n resources: ['*'],\n });\n static ALLOW_RESTRICTED_LOGS = new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['logs:CreateLogStream', 'logs:PutLogEvents', 'logs:DescribeLogStreams', 'logs:CreateLogGroup'],\n resources: ['*'],\n });\n static ALLOW_FARGATE_SECRET_READING = [\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['ssm:GetParameters'],\n resources: ['*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['secretsmanager:GetSecretValue'],\n resources: ['*'],\n }),\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: ['kms:Decrypt'],\n resources: ['*'],\n }),\n ];\n static ECS_POLICY_STATEMENTS = [\n EpsilonStackUtil.ALLOW_ECS,\n EpsilonStackUtil.ALLOW_ECR,\n EpsilonStackUtil.ALLOW_RESTRICTED_LOGS,\n ].concat(EpsilonStackUtil.ALLOW_FARGATE_SECRET_READING);\n}\n//# sourceMappingURL=epsilon-stack-util.js.map","import { Duration, Lazy, Size, Stack } from 'aws-cdk-lib';\nimport { DockerImageCode, DockerImageFunction, FunctionUrlAuthType, HttpMethod } from 'aws-cdk-lib/aws-lambda';\nimport { ManagedPolicy, PolicyDocument, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam';\nimport { Topic } from 'aws-cdk-lib/aws-sns';\nimport { Queue } from 'aws-cdk-lib/aws-sqs';\nimport { LambdaSubscription } from 'aws-cdk-lib/aws-sns-subscriptions';\nimport { Rule, Schedule } from 'aws-cdk-lib/aws-events';\nimport { LambdaFunction } from 'aws-cdk-lib/aws-events-targets';\nimport { DockerImageAsset } from 'aws-cdk-lib/aws-ecr-assets';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { EpsilonStackUtil } from './epsilon-stack-util.js';\nimport { RatchetEpsilonDeploymentInfo } from '../../build/ratchet-epsilon-deployment-info.js';\nimport { EcsFargateContainerDefinition, EcsJobDefinition, FargateComputeEnvironment, JobQueue, } from '@aws-cdk/aws-batch-alpha';\nimport { SecurityGroup, Subnet, Vpc } from 'aws-cdk-lib/aws-ec2';\nimport { ContainerImage } from 'aws-cdk-lib/aws-ecs';\nexport class EpsilonApiStack extends Stack {\n webHandler;\n backgroundHandler;\n apiDomain;\n constructor(scope, id, props) {\n super(scope, id, props);\n const dockerImageAsset = new DockerImageAsset(this, id + 'DockerImage', {\n directory: props.dockerFileFolder,\n file: props.dockerFileName,\n });\n const dockerImageCode = DockerImageCode.fromImageAsset(props.dockerFileFolder, { file: props.dockerFileName });\n const notificationTopic = new Topic(this, id + 'WorkNotificationTopic');\n const workQueue = new Queue(this, id + 'WorkQueue', {\n fifo: true,\n retentionPeriod: Duration.hours(8),\n visibilityTimeout: Duration.minutes(5),\n contentBasedDeduplication: true,\n ...props,\n });\n const interApiGenericEventTopic = new Topic(this, id + 'InterApiTopic');\n const epsilonEnv = {\n EPSILON_AWS_REGION: StringRatchet.safeString(Stack.of(this).region),\n EPSILON_AWS_AVAILABILITY_ZONES: StringRatchet.safeString(JSON.stringify(Stack.of(this).availabilityZones)),\n EPSILON_BACKGROUND_SQS_QUEUE_URL: StringRatchet.safeString(workQueue.queueUrl),\n EPSILON_BACKGROUND_SNS_TOPIC_ARN: StringRatchet.safeString(notificationTopic.topicArn),\n EPSILON_INTER_API_EVENT_TOPIC_ARN: StringRatchet.safeString(interApiGenericEventTopic.topicArn),\n EPSILON_LIB_BUILD_HASH: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().hash),\n EPSILON_LIB_BUILD_TIME: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().timeBuiltISO),\n EPSILON_LIB_BUILD_BRANCH_OR_TAG: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().branch || RatchetEpsilonDeploymentInfo.buildInformation().tag),\n EPSILON_LIB_BUILD_VERSION: StringRatchet.safeString(RatchetEpsilonDeploymentInfo.buildInformation().version),\n };\n const env = Object.assign({}, props.extraEnvironmentalVars || {}, epsilonEnv);\n const executionRole = new Role(this, id + 'BatchExecutionRole', {\n assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'),\n managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole')],\n inlinePolicies: {\n root: new PolicyDocument({\n statements: EpsilonStackUtil.ECS_POLICY_STATEMENTS,\n }),\n },\n });\n const jobRole = new Role(this, id + 'BatchJobRole', {\n assumedBy: new ServicePrincipal('ecs-tasks.amazonaws.com'),\n managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole')],\n inlinePolicies: {\n root: new PolicyDocument({\n statements: EpsilonStackUtil.createDefaultPolicyStatementList(props, workQueue, notificationTopic, interApiGenericEventTopic),\n }),\n },\n });\n const subnetSelection = {\n subnets: props.vpcSubnetIds.map((subnetId, index) => Subnet.fromSubnetId(this, `VpcSubnet${index}`, `subnet-${subnetId}`)),\n };\n const compEnvProps = {\n vpc: Vpc.fromLookup(this, `Vpc`, { vpcId: props.vpcId }),\n computeEnvironmentName: id + 'ComputeEnv',\n enabled: true,\n maxvCpus: 16,\n replaceComputeEnvironment: false,\n securityGroups: props.lambdaSecurityGroupIds.map((sgId, index) => SecurityGroup.fromSecurityGroupId(this, `SecurityGroup${index}`, `sg-${sgId}`)),\n serviceRole: Role.fromRoleArn(this, `${id}ServiceRole`, 'arn:aws:iam::' + props.env.account + ':role/AWSBatchServiceRole'),\n spot: false,\n terminateOnUpdate: false,\n updateTimeout: Duration.hours(4),\n updateToLatestImageVersion: true,\n };\n const compEnv = new FargateComputeEnvironment(this, id + 'ComputeEnv', compEnvProps);\n const batchJobQueueProps = {\n computeEnvironments: [{ order: 1, computeEnvironment: compEnv }],\n enabled: true,\n jobQueueName: id + 'BatchJobQueue',\n priority: 10,\n schedulingPolicy: undefined,\n };\n const batchJobQueue = new JobQueue(this, id + 'BatchJobQueue', batchJobQueueProps);\n const batchEnvVars = EpsilonStackUtil.toEnvironmentVariables([\n env,\n props.extraEnvironmentalVars || {},\n {\n EPSILON_RUNNING_IN_AWS_BATCH: true,\n },\n ]);\n const containerDef = {\n cpu: 4,\n image: ContainerImage.fromRegistry(dockerImageAsset.imageUri),\n memory: Size.mebibytes(8192),\n assignPublicIp: true,\n command: ['Ref::taskName', 'Ref::taskData', 'Ref::traceId', 'Ref::traceDepth'],\n environment: batchEnvVars,\n executionRole: executionRole,\n jobRole: jobRole,\n readonlyRootFilesystem: false,\n volumes: [],\n };\n const fargateContainerDefinitionDef = new EcsFargateContainerDefinition(this, `${id}FargateContainerDefinition`, containerDef);\n const jobProps = {\n jobDefinitionName: id + 'JobDefinition',\n retryAttempts: 3,\n retryStrategies: undefined,\n schedulingPriority: undefined,\n timeout: undefined,\n container: fargateContainerDefinitionDef,\n };\n const jobDef = new EcsJobDefinition(this, id + 'JobDefinition', jobProps);\n const lambdaRole = new Role(this, 'customRole', {\n roleName: id + 'LambdaCustomRole',\n assumedBy: new ServicePrincipal('lambda.amazonaws.com'),\n managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSLambdaVPCAccessExecutionRole')],\n inlinePolicies: {\n root: new PolicyDocument({\n statements: EpsilonStackUtil.createDefaultPolicyStatementList(props, workQueue, notificationTopic, interApiGenericEventTopic),\n }),\n },\n });\n env['EPSILON_AWS_BATCH_JOB_DEFINITION_ARN'] = jobDef.jobDefinitionArn;\n env['EPSILON_AWS_BATCH_JOB_QUEUE_ARN'] = batchJobQueue.jobQueueArn;\n this.webHandler = new DockerImageFunction(this, id + 'Web', {\n retryAttempts: 2,\n memorySize: props.webMemorySizeMb || 128,\n ephemeralStorageSize: Size.mebibytes(512),\n timeout: Duration.seconds(props.webTimeoutSeconds || 20),\n code: dockerImageCode,\n role: lambdaRole,\n environment: env,\n });\n if (props?.webLambdaPingMinutes && props.webLambdaPingMinutes > 0) {\n const rule = new Rule(this, id + 'WebKeepaliveRule', {\n schedule: Schedule.rate(Duration.minutes(Math.ceil(props.webLambdaPingMinutes))),\n });\n rule.addTarget(new LambdaFunction(this.webHandler));\n }\n const fnUrl = this.webHandler.addFunctionUrl({\n authType: FunctionUrlAuthType.NONE,\n cors: {\n allowedOrigins: ['*'],\n allowedHeaders: ['Content-Type', 'X-Amz-Date', 'Authorization', 'X-Api-Key'],\n allowedMethods: [HttpMethod.ALL],\n allowCredentials: true,\n },\n });\n this.backgroundHandler = new DockerImageFunction(this, id + 'Background', {\n retryAttempts: 2,\n memorySize: props.backgroundMemorySizeMb || 3000,\n ephemeralStorageSize: Size.mebibytes(512),\n timeout: Duration.seconds(props.backgroundTimeoutSeconds || 900),\n code: dockerImageCode,\n role: lambdaRole,\n environment: env,\n });\n notificationTopic.addSubscription(new LambdaSubscription(this.backgroundHandler));\n interApiGenericEventTopic.addSubscription(new LambdaSubscription(this.backgroundHandler));\n const rule = new Rule(this, id + 'CronRule', {\n schedule: Schedule.rate(Duration.minutes(1)),\n });\n rule.addTarget(new LambdaFunction(this.backgroundHandler));\n this.apiDomain = Lazy.uncachedString({\n produce: (context) => {\n const resolved = context.resolve(fnUrl.url);\n return { 'Fn::Select': [2, { 'Fn::Split': ['/', resolved] }] };\n },\n });\n }\n}\n//# sourceMappingURL=epsilon-api-stack.js.map","export var EpsilonWebsiteStackPropsRoute53Handling;\n(function (EpsilonWebsiteStackPropsRoute53Handling) {\n EpsilonWebsiteStackPropsRoute53Handling[\"Update\"] = \"Update\";\n EpsilonWebsiteStackPropsRoute53Handling[\"DoNotUpdate\"] = \"DoNotUpdate\";\n})(EpsilonWebsiteStackPropsRoute53Handling || (EpsilonWebsiteStackPropsRoute53Handling = {}));\n//# sourceMappingURL=epsilon-website-stack-props.js.map","import { Bucket, BucketEncryption } from 'aws-cdk-lib/aws-s3';\nimport { Duration, Stack } from 'aws-cdk-lib';\nimport path from 'path';\nimport { CloudFrontAllowedCachedMethods, CloudFrontAllowedMethods, CloudFrontWebDistribution, HttpVersion, OriginAccessIdentity, OriginProtocolPolicy, PriceClass, ViewerProtocolPolicy, } from 'aws-cdk-lib/aws-cloudfront';\nimport { HostedZone, RecordSet, RecordType } from 'aws-cdk-lib/aws-route53';\nimport { CloudFrontTarget } from 'aws-cdk-lib/aws-route53-targets';\nimport { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment';\nimport { EpsilonWebsiteStackPropsRoute53Handling } from './epsilon-website-stack-props.js';\nimport { StringRatchet } from '@bitblit/ratchet-common';\nimport { ErrorRatchet } from '@bitblit/ratchet-common';\nexport class EpsilonWebsiteStack extends Stack {\n constructor(scope, id, props) {\n super(scope, id, props);\n const originAccessId = new OriginAccessIdentity(this, id + 'OriginAccessId');\n const websiteBucket = new Bucket(this, id + 'DeployBucket', {\n bucketName: props.targetBucketName,\n versioned: false,\n publicReadAccess: false,\n encryption: BucketEncryption.S3_MANAGED,\n });\n const extraBucketAndSource = (props.simpleAdditionalMappings || []).map((eb) => {\n const nextBucket = Bucket.fromBucketAttributes(this, eb.bucketName + 'ImportedBucket', {\n bucketName: eb.bucketName,\n });\n const nextBS = {\n bucket: nextBucket,\n sourceConfig: {\n s3OriginSource: {\n s3BucketSource: nextBucket,\n originAccessIdentity: originAccessId,\n },\n behaviors: [\n {\n pathPattern: eb.pathPattern,\n isDefaultBehavior: false,\n compress: true,\n defaultTtl: Duration.seconds(1),\n minTtl: Duration.seconds(1),\n maxTtl: Duration.seconds(1),\n forwardedValues: {\n queryString: false,\n },\n },\n ],\n },\n };\n return nextBS;\n });\n const assetSource = {\n s3OriginSource: {\n s3BucketSource: websiteBucket,\n originAccessIdentity: originAccessId,\n },\n behaviors: [\n {\n isDefaultBehavior: true,\n compress: true,\n defaultTtl: Duration.seconds(1),\n minTtl: Duration.seconds(1),\n maxTtl: Duration.seconds(1),\n forwardedValues: {\n queryString: false,\n },\n },\n ],\n };\n const apiSource = {\n customOriginSource: {\n domainName: props.apiDomainName,\n originProtocolPolicy: OriginProtocolPolicy.HTTPS_ONLY,\n },\n behaviors: [\n {\n compress: true,\n forwardedValues: {\n queryString: true,\n cookies: {\n forward: 'whitelist',\n whitelistedNames: ['idToken'],\n },\n headers: ['Accept', 'Referer', 'Authorization', 'Content-Type'],\n },\n pathPattern: 'graphql',\n defaultTtl: Duration.seconds(0),\n maxTtl: Duration.seconds(0),\n minTtl: Duration.seconds(0),\n allowedMethods: CloudFrontAllowedMethods.ALL,\n cachedMethods: CloudFrontAllowedCachedMethods.GET_HEAD,\n },\n ],\n };\n const distributionProps = {\n httpVersion: HttpVersion.HTTP2,\n defaultRootObject: 'index.html',\n originConfigs: [assetSource, apiSource, ...extraBucketAndSource.map((s) => s.sourceConfig)],\n errorConfigurations: [\n {\n errorCode: 404,\n errorCachingMinTtl: 300,\n responseCode: 200,\n responsePagePath: '/index.html',\n },\n {\n errorCode: 403,\n errorCachingMinTtl: 300,\n responseCode: 200,\n responsePagePath: '/index.html',\n },\n ],\n priceClass: PriceClass.PRICE_CLASS_ALL,\n viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n viewerCertificate: {\n aliases: props.cloudFrontDomainNames,\n props: {\n acmCertificateArn: props.cloudFrontHttpsCertificateArn,\n sslSupportMethod: 'sni-only',\n },\n },\n };\n const cloudfrontDistro = new CloudFrontWebDistribution(this, id + 'CloudfrontDistro', distributionProps);\n if (props?.route53Handling === EpsilonWebsiteStackPropsRoute53Handling.Update) {\n if (props?.cloudFrontDomainNames?.length) {\n for (let i = 0; i < props.cloudFrontDomainNames.length; i++) {\n const domain = new RecordSet(this, id + 'DomainName-' + props.cloudFrontDomainNames[i], {\n recordType: RecordType.A,\n recordName: props.cloudFrontDomainNames[i],\n target: {\n aliasTarget: new CloudFrontTarget(cloudfrontDistro),\n },\n zone: HostedZone.fromLookup(this, id, { domainName: EpsilonWebsiteStack.extractApexDomain(props.cloudFrontDomainNames[i]) }),\n });\n }\n }\n }\n new BucketDeployment(this, id + 'SiteDeploy', {\n sources: props.pathsToAssets.map((inPath) => Source.asset(path.resolve(inPath))),\n destinationBucket: websiteBucket,\n distribution: cloudfrontDistro,\n distributionPaths: ['/*'],\n });\n }\n static extractApexDomain(domainName) {\n const pieces = StringRatchet.trimToEmpty(domainName).split('.');\n if (pieces.length < 2) {\n ErrorRatchet.throwFormattedErr('Not a valid domain name : %s', domainName);\n }\n return pieces[pieces.length - 2] + '.' + pieces[pieces.length - 1];\n }\n}\n//# sourceMappingURL=epsilon-website-stack.js.map"],"names":["RatchetEpsilonDeploymentInfo","constructor","buildInformation","version","hash","branch","tag","timeBuiltISO","notes","EpsilonStackUtil","toEnvironmentVariables","input","rval","forEach","inval","Object","keys","k","StringRatchet","safeString","createDefaultPolicyStatementList","props","backgroundLambdaSqs","backgroundLambdaSns","interApiSns","additionalPolicyStatements","concat","PolicyStatement","effect","Effect","ALLOW","actions","resources","queueArn","topicArn","static","ALLOW_ECS","ALLOW_ECR","ALLOW_RESTRICTED_LOGS","ALLOW_FARGATE_SECRET_READING","EpsilonApiStack","Stack","webHandler","backgroundHandler","apiDomain","scope","id","super","dockerImageAsset","DockerImageAsset","this","directory","dockerFileFolder","file","dockerFileName","dockerImageCode","DockerImageCode","fromImageAsset","notificationTopic","Topic","workQueue","Queue","fifo","retentionPeriod","Duration","hours","visibilityTimeout","minutes","contentBasedDeduplication","interApiGenericEventTopic","epsilonEnv","EPSILON_AWS_REGION","of","region","EPSILON_AWS_AVAILABILITY_ZONES","JSON","stringify","availabilityZones","EPSILON_BACKGROUND_SQS_QUEUE_URL","queueUrl","EPSILON_BACKGROUND_SNS_TOPIC_ARN","EPSILON_INTER_API_EVENT_TOPIC_ARN","EPSILON_LIB_BUILD_HASH","EPSILON_LIB_BUILD_TIME","EPSILON_LIB_BUILD_BRANCH_OR_TAG","EPSILON_LIB_BUILD_VERSION","env","assign","extraEnvironmentalVars","executionRole","Role","assumedBy","ServicePrincipal","managedPolicies","ManagedPolicy","fromAwsManagedPolicyName","inlinePolicies","root","PolicyDocument","statements","ECS_POLICY_STATEMENTS","jobRole","vpcSubnetIds","map","subnetId","index","Subnet","fromSubnetId","compEnvProps","vpc","Vpc","fromLookup","vpcId","computeEnvironmentName","enabled","maxvCpus","replaceComputeEnvironment","securityGroups","lambdaSecurityGroupIds","sgId","SecurityGroup","fromSecurityGroupId","serviceRole","fromRoleArn","account","spot","terminateOnUpdate","updateTimeout","updateToLatestImageVersion","compEnv","FargateComputeEnvironment","batchJobQueue","JobQueue","computeEnvironments","order","computeEnvironment","jobQueueName","priority","schedulingPolicy","undefined","batchEnvVars","EPSILON_RUNNING_IN_AWS_BATCH","containerDef","cpu","image","ContainerImage","fromRegistry","imageUri","memory","Size","mebibytes","assignPublicIp","command","environment","readonlyRootFilesystem","volumes","fargateContainerDefinitionDef","EcsFargateContainerDefinition","jobDef","EcsJobDefinition","jobDefinitionName","retryAttempts","retryStrategies","schedulingPriority","timeout","container","lambdaRole","roleName","jobDefinitionArn","jobQueueArn","DockerImageFunction","memorySize","webMemorySizeMb","ephemeralStorageSize","seconds","webTimeoutSeconds","code","role","webLambdaPingMinutes","Rule","schedule","Schedule","rate","Math","ceil","addTarget","LambdaFunction","fnUrl","addFunctionUrl","authType","FunctionUrlAuthType","NONE","cors","allowedOrigins","allowedHeaders","allowedMethods","HttpMethod","ALL","allowCredentials","backgroundMemorySizeMb","backgroundTimeoutSeconds","addSubscription","LambdaSubscription","Lazy","uncachedString","produce","context","resolve","url","EpsilonWebsiteStackPropsRoute53Handling","EpsilonWebsiteStack","originAccessId","OriginAccessIdentity","websiteBucket","Bucket","bucketName","targetBucketName","versioned","publicReadAccess","encryption","BucketEncryption","S3_MANAGED","extraBucketAndSource","simpleAdditionalMappings","eb","nextBucket","fromBucketAttributes","bucket","sourceConfig","s3OriginSource","s3BucketSource","originAccessIdentity","behaviors","pathPattern","isDefaultBehavior","compress","defaultTtl","minTtl","maxTtl","forwardedValues","queryString","assetSource","apiSource","customOriginSource","domainName","apiDomainName","originProtocolPolicy","OriginProtocolPolicy","HTTPS_ONLY","cookies","forward","whitelistedNames","headers","CloudFrontAllowedMethods","cachedMethods","CloudFrontAllowedCachedMethods","GET_HEAD","distributionProps","httpVersion","HttpVersion","HTTP2","defaultRootObject","originConfigs","s","errorConfigurations","errorCode","errorCachingMinTtl","responseCode","responsePagePath","priceClass","PriceClass","PRICE_CLASS_ALL","viewerProtocolPolicy","ViewerProtocolPolicy","REDIRECT_TO_HTTPS","viewerCertificate","aliases","cloudFrontDomainNames","acmCertificateArn","cloudFrontHttpsCertificateArn","sslSupportMethod","cloudfrontDistro","CloudFrontWebDistribution","route53Handling","Update","length","i","RecordSet","recordType","RecordType","A","recordName","target","aliasTarget","CloudFrontTarget","zone","HostedZone","extractApexDomain","BucketDeployment","sources","pathsToAssets","inPath","Source","asset","path","destinationBucket","distribution","distributionPaths","pieces","trimToEmpty","split","ErrorRatchet","throwFormattedErr"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitblit/ratchet-epsilon-deployment",
3
- "version": "4.0.210-alpha",
3
+ "version": "4.0.219-alpha",
4
4
  "description": "Epsilon CDK extensions to simplify deployment",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -51,17 +51,17 @@
51
51
  },
52
52
  "license": "Apache-2.0",
53
53
  "dependencies": {
54
- "@aws-cdk/aws-batch-alpha": "2.93.0-alpha.0",
55
- "@bitblit/ratchet-aws": "4.0.210-alpha",
56
- "@bitblit/ratchet-common": "4.0.210-alpha",
57
- "@bitblit/ratchet-epsilon-common": "4.0.210-alpha",
58
- "aws-cdk-lib": "2.93.0",
54
+ "@aws-cdk/aws-batch-alpha": "2.94.0-alpha.0",
55
+ "@bitblit/ratchet-aws": "4.0.219-alpha",
56
+ "@bitblit/ratchet-common": "4.0.219-alpha",
57
+ "@bitblit/ratchet-epsilon-common": "4.0.219-alpha",
58
+ "aws-cdk-lib": "2.94.0",
59
59
  "constructs": "10.2.70"
60
60
  },
61
61
  "peerDependencies": {
62
- "@aws-cdk/aws-batch-alpha": "^2.93.0-alpha.0",
63
- "@bitblit/ratchet-common": "4.0.210-alpha",
64
- "aws-cdk-lib": "^2.93.0",
62
+ "@aws-cdk/aws-batch-alpha": "^2.94.0-alpha.0",
63
+ "@bitblit/ratchet-common": "4.0.219-alpha",
64
+ "aws-cdk-lib": "^2.94.0",
65
65
  "constructs": "^10.2.70"
66
66
  }
67
67
  }