@jaypie/constructs 1.1.34 → 1.1.36-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/JaypieLambda.d.ts +3 -2
- package/dist/cjs/index.cjs +224 -218
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/JaypieLambda.d.ts +3 -2
- package/dist/esm/index.js +223 -217
- package/dist/esm/index.js.map +1 -1
- package/package.json +2 -2
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/helpers/constructEnvName.ts","../../../src/helpers/constructStackName.ts","../../../src/helpers/isEnv.ts","../../../src/helpers/stackTagger.ts","../../../src/JaypieApiGateway.ts","../../../src/JaypieStack.ts","../../../src/JaypieAppStack.ts","../../../src/JaypieLambda.ts","../../../src/JaypieQueuedLambda.ts","../../../src/JaypieBucketQueuedLambda.ts","../../../src/JaypieEnvSecret.ts","../../../src/JaypieDatadogSecret.ts","../../../src/JaypieExpressLambda.ts","../../../src/JaypieHostedZone.ts","../../../src/JaypieInfrastructureStack.ts","../../../src/JaypieMongoDbSecret.ts","../../../src/JaypieOpenAiSecret.ts","../../../src/JaypieSsoGroups.ts","../../../src/JaypieTraceSigningKeySecret.ts","../../../src/JaypieWebDeploymentBucket.ts"],"sourcesContent":["export function constructEnvName(\n name: string,\n opts?: { env?: string; key?: string; nonce?: string },\n) {\n const env = opts?.env ?? process.env.PROJECT_ENV ?? \"build\";\n const key = opts?.key ?? process.env.PROJECT_KEY ?? \"project\";\n const nonce = opts?.nonce ?? process.env.PROJECT_NONCE ?? \"cfe2\";\n return `${env}-${key}-${name}-${nonce}`;\n}\n","export function constructStackName(key?: string): string {\n if (!key) {\n return `cdk-${process.env.PROJECT_SPONSOR}-${process.env.PROJECT_KEY}-${process.env.PROJECT_ENV}-${process.env.PROJECT_NONCE}`;\n } else {\n return `cdk-${process.env.PROJECT_SPONSOR}-${process.env.PROJECT_KEY}-${process.env.PROJECT_ENV}-${process.env.PROJECT_NONCE}-${key}`;\n }\n}\n","import { CDK } from \"@jaypie/cdk\";\n\n/**\n * Check if the current environment matches the given environment\n */\nexport function isEnv(env: string): boolean {\n return process.env.PROJECT_ENV === env;\n}\n\n/**\n * Check if the current environment is production\n */\nexport function isProductionEnv(): boolean {\n return isEnv(CDK.ENV.PRODUCTION);\n}\n\n/**\n * Check if the current environment is sandbox\n */\nexport function isSandboxEnv(): boolean {\n return isEnv(CDK.ENV.SANDBOX);\n}\n","import { Stack, Tags } from \"aws-cdk-lib\";\nimport { constructStackName } from \"./constructStackName\";\n\nconst CDK = {\n CREATION: {\n CDK: \"cdk\",\n },\n ROLE: {\n STACK: \"stack\",\n },\n TAG: {\n BUILD_DATE: \"buildDate\",\n BUILD_HEX: \"buildHex\",\n BUILD_TIME: \"buildTime\",\n COMMIT: \"commit\",\n CREATION: \"creation\",\n ENV: \"env\",\n NONCE: \"nonce\",\n PROJECT: \"project\",\n ROLE: \"role\",\n SERVICE: \"service\",\n SPONSOR: \"sponsor\",\n STACK: \"stack\",\n STACK_SHA: \"stackSha\",\n VERSION: \"version\",\n },\n};\n\nexport function stackTagger(\n stack: Stack,\n { name }: { name?: string } = {},\n): boolean {\n const stackName = name || constructStackName();\n const version =\n process.env.npm_package_version || process.env.PROJECT_VERSION || null;\n\n if (process.env.PROJECT_COMMIT && process.env.PROJECT_COMMIT.length > 8) {\n Tags.of(stack).add(\n CDK.TAG.BUILD_HEX,\n process.env.PROJECT_COMMIT.slice(0, 8),\n );\n }\n Tags.of(stack).add(CDK.TAG.BUILD_DATE, new Date().toISOString());\n Tags.of(stack).add(CDK.TAG.BUILD_TIME, Date.now().toString());\n if (process.env.PROJECT_COMMIT)\n Tags.of(stack).add(CDK.TAG.COMMIT, process.env.PROJECT_COMMIT);\n Tags.of(stack).add(CDK.TAG.CREATION, CDK.CREATION.CDK);\n if (process.env.PROJECT_ENV)\n Tags.of(stack).add(CDK.TAG.ENV, process.env.PROJECT_ENV);\n if (process.env.PROJECT_NONCE)\n Tags.of(stack).add(CDK.TAG.NONCE, process.env.PROJECT_NONCE);\n if (process.env.PROJECT_KEY)\n Tags.of(stack).add(CDK.TAG.PROJECT, process.env.PROJECT_KEY);\n Tags.of(stack).add(CDK.TAG.ROLE, CDK.ROLE.STACK);\n if (process.env.PROJECT_SERVICE)\n Tags.of(stack).add(CDK.TAG.SERVICE, process.env.PROJECT_SERVICE);\n if (process.env.PROJECT_SPONSOR)\n Tags.of(stack).add(CDK.TAG.SPONSOR, process.env.PROJECT_SPONSOR);\n if (stackName) Tags.of(stack).add(CDK.TAG.STACK, stackName);\n if (version) Tags.of(stack).add(CDK.TAG.VERSION, version);\n\n return true;\n}\n","import { Construct } from \"constructs\";\nimport { RemovalPolicy, Stack, Tags } from \"aws-cdk-lib\";\nimport * as acm from \"aws-cdk-lib/aws-certificatemanager\";\nimport * as apiGateway from \"aws-cdk-lib/aws-apigateway\";\nimport * as route53 from \"aws-cdk-lib/aws-route53\";\nimport * as route53Targets from \"aws-cdk-lib/aws-route53-targets\";\nimport { CDK, mergeDomain } from \"@jaypie/cdk\";\nimport { constructEnvName } from \"./helpers\";\n\nexport interface JaypieApiGatewayProps extends apiGateway.LambdaRestApiProps {\n certificate?: boolean | acm.ICertificate;\n host?: string;\n name?: string;\n roleTag?: string;\n zone?: string | route53.IHostedZone;\n}\n\nexport class JaypieApiGateway extends Construct implements apiGateway.IRestApi {\n private readonly _api: apiGateway.LambdaRestApi;\n private readonly _certificate?: acm.ICertificate;\n private readonly _domainName?: apiGateway.DomainName;\n private readonly _host?: string;\n\n constructor(scope: Construct, id: string, props: JaypieApiGatewayProps) {\n super(scope, id);\n\n const {\n certificate = true,\n handler,\n host: propsHost,\n name,\n roleTag = CDK.ROLE.API,\n zone: propsZone,\n } = props;\n\n // Determine zone from props or environment\n let zone = propsZone;\n if (!zone && process.env.CDK_ENV_API_HOSTED_ZONE) {\n zone = process.env.CDK_ENV_API_HOSTED_ZONE;\n }\n\n // Determine host from props or environment\n let host = propsHost;\n if (!host) {\n if (process.env.CDK_ENV_API_HOST_NAME) {\n host = process.env.CDK_ENV_API_HOST_NAME;\n } else if (\n process.env.CDK_ENV_API_SUBDOMAIN &&\n process.env.CDK_ENV_API_HOSTED_ZONE\n ) {\n host = mergeDomain(\n process.env.CDK_ENV_API_SUBDOMAIN,\n process.env.CDK_ENV_API_HOSTED_ZONE,\n );\n }\n }\n\n const apiGatewayName = name || constructEnvName(\"ApiGateway\");\n const certificateName = constructEnvName(\"Certificate\");\n const apiDomainName = constructEnvName(\"ApiDomainName\");\n\n let hostedZone: route53.IHostedZone | undefined;\n let certificateToUse: acm.ICertificate | undefined;\n\n if (host && zone) {\n if (typeof zone === \"string\") {\n hostedZone = route53.HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: zone,\n });\n } else {\n hostedZone = zone;\n }\n\n if (certificate === true) {\n certificateToUse = new acm.Certificate(this, certificateName, {\n domainName: host,\n validation: acm.CertificateValidation.fromDns(hostedZone),\n });\n Tags.of(certificateToUse).add(CDK.TAG.ROLE, CDK.ROLE.HOSTING);\n } else if (typeof certificate === \"object\") {\n certificateToUse = certificate;\n }\n\n this._certificate = certificateToUse;\n this._host = host;\n }\n\n const {\n // * `...lambdaRestApiProps` cannot be moved to the first const destructuring because it needs to exclude the custom properties first.\n // Ignore the variables we already assigned to other properties\n /* eslint-disable @typescript-eslint/no-unused-vars */\n certificate: _certificate,\n host: _host,\n name: _name,\n roleTag: _roleTag,\n zone: _zone,\n handler: _handler,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...lambdaRestApiProps\n } = props;\n\n this._api = new apiGateway.LambdaRestApi(this, apiGatewayName, {\n handler,\n ...lambdaRestApiProps,\n });\n Tags.of(this._api).add(CDK.TAG.ROLE, roleTag);\n\n if (host && certificateToUse && hostedZone) {\n this._domainName = this._api.addDomainName(apiDomainName, {\n domainName: host,\n certificate: certificateToUse,\n });\n Tags.of(this._domainName).add(CDK.TAG.ROLE, roleTag);\n\n const record = new route53.ARecord(this, \"AliasRecord\", {\n recordName: host,\n target: route53.RecordTarget.fromAlias(\n new route53Targets.ApiGatewayDomain(this._domainName),\n ),\n zone: hostedZone,\n });\n Tags.of(record).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n }\n }\n\n public get api(): apiGateway.LambdaRestApi {\n return this._api;\n }\n\n public get url(): string {\n return this._api.url;\n }\n\n public get certificateArn(): string | undefined {\n return this._certificate?.certificateArn;\n }\n\n public get domainName(): string | undefined {\n return this._domainName?.domainName;\n }\n\n public get host(): string | undefined {\n return this._host;\n }\n\n public get restApiId(): string {\n return this._api.restApiId;\n }\n\n public get restApiName(): string {\n return this._api.restApiName;\n }\n\n public get restApiRootResourceId(): string {\n return this._api.restApiRootResourceId;\n }\n\n public get deploymentStage(): apiGateway.Stage {\n return this._api.deploymentStage;\n }\n\n public get domainNameAliasDomainName(): string | undefined {\n return this._domainName?.domainNameAliasDomainName;\n }\n\n public get domainNameAliasHostedZoneId(): string | undefined {\n return this._domainName?.domainNameAliasHostedZoneId;\n }\n\n public get root(): apiGateway.IResource {\n return this._api.root;\n }\n\n public get env() {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public get stack(): Stack {\n return this._api.stack;\n }\n\n public arnForExecuteApi(\n method?: string,\n path?: string,\n stage?: string,\n ): string {\n return this._api.arnForExecuteApi(method, path, stage);\n }\n\n public metric(\n metricName: string,\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metric(metricName, props);\n }\n\n public metricCacheHitCount(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricCacheHitCount(props);\n }\n\n public metricCacheMissCount(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricCacheMissCount(props);\n }\n\n public metricClientError(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricClientError(props);\n }\n\n public metricCount(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricCount(props);\n }\n\n public metricIntegrationLatency(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricIntegrationLatency(props);\n }\n\n public metricLatency(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricLatency(props);\n }\n\n public metricServerError(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricServerError(props);\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._api.applyRemovalPolicy(policy);\n }\n}\n","import { Stack, StackProps } from \"aws-cdk-lib\";\nimport { Construct } from \"constructs\";\nimport { constructStackName, stackTagger } from \"./helpers\";\n\nexport interface JaypieStackProps extends StackProps {\n key?: string;\n}\n\nexport class JaypieStack extends Stack {\n constructor(scope: Construct, id: string, props: JaypieStackProps = {}) {\n const { key, ...stackProps } = props;\n\n // Handle stackName\n if (!stackProps.stackName) {\n stackProps.stackName = constructStackName(key);\n }\n\n // Handle env\n stackProps.env = {\n account: process.env.CDK_DEFAULT_ACCOUNT,\n region: process.env.CDK_DEFAULT_REGION,\n ...stackProps.env,\n };\n\n super(scope, id, stackProps);\n\n // Apply tags\n stackTagger(this, { name: stackProps.stackName });\n }\n}\n","import { Construct } from \"constructs\";\nimport { JaypieStack, JaypieStackProps } from \"./JaypieStack\";\nimport { constructStackName } from \"./helpers\";\n\nexport class JaypieAppStack extends JaypieStack {\n constructor(scope: Construct, id: string, props: JaypieStackProps = {}) {\n const { key = \"app\", ...stackProps } = props;\n\n // Handle stackName\n if (!stackProps.stackName) {\n stackProps.stackName = constructStackName(key);\n }\n\n super(scope, id, { key, ...stackProps });\n }\n}\n","import { Construct } from \"constructs\";\nimport { Duration, Tags, Stack, RemovalPolicy } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport { CDK } from \"@jaypie/cdk\";\nimport * as iam from \"aws-cdk-lib/aws-iam\";\nimport * as cloudwatch from \"aws-cdk-lib/aws-cloudwatch\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { JaypieEnvSecret } from \"./JaypieEnvSecret.js\";\n\nexport interface JaypieLambdaProps {\n code: lambda.Code | string;\n datadogApiKeyArn?: string;\n environment?: { [key: string]: string };\n envSecrets?: { [key: string]: secretsmanager.ISecret };\n handler: string;\n layers?: lambda.ILayerVersion[];\n logRetention?: number;\n memorySize?: number;\n paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;\n paramsAndSecretsOptions?: {\n cacheSize?: number;\n logLevel?: lambda.ParamsAndSecretsLogLevel;\n parameterStoreTtl?: number;\n secretsManagerTtl?: number;\n };\n provisionedConcurrentExecutions?: number;\n reservedConcurrentExecutions?: number;\n roleTag?: string;\n runtime?: lambda.Runtime;\n secrets?: JaypieEnvSecret[];\n timeout?: Duration | number;\n vendorTag?: string;\n}\n\nexport class JaypieLambda extends Construct implements lambda.IFunction {\n private readonly _lambda: lambda.Function;\n private readonly _alias?: lambda.Alias;\n private readonly _code: lambda.Code;\n\n constructor(scope: Construct, id: string, props: JaypieLambdaProps) {\n super(scope, id);\n\n const {\n code,\n datadogApiKeyArn,\n environment: initialEnvironment = {},\n envSecrets = {},\n handler = \"index.handler\",\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n roleTag = CDK.ROLE.PROCESSING,\n runtime = lambda.Runtime.NODEJS_22_X,\n secrets = [],\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n vendorTag,\n } = props;\n\n // Create a mutable copy of the environment variables\n let environment = { ...initialEnvironment };\n\n // Default environment values\n const defaultEnvValues: { [key: string]: string } = {\n AWS_LAMBDA_NODEJS_DISABLE_CALLBACK_WARNING: \"true\",\n };\n\n // Apply default environment values with user overrides\n Object.entries(defaultEnvValues).forEach(([key, defaultValue]) => {\n if (key in initialEnvironment) {\n const userValue = initialEnvironment[key];\n // If user passes a string, use that value\n if (typeof userValue === \"string\") {\n environment[key] = userValue;\n }\n // If user passes non-string falsy value, omit the key\n else if (!userValue) {\n delete environment[key];\n }\n // Ignore non-string truthy values (key already not present)\n } else {\n // No user override, use default value\n environment[key] = defaultValue;\n }\n });\n\n // Default environment variables from process.env if present\n const defaultEnvVars = [\n \"DATADOG_API_KEY_ARN\",\n \"LOG_LEVEL\",\n \"MODULE_LOGGER\",\n \"MODULE_LOG_LEVEL\",\n \"PROJECT_COMMIT\",\n \"PROJECT_ENV\",\n \"PROJECT_KEY\",\n \"PROJECT_SECRET\",\n \"PROJECT_SERVICE\",\n \"PROJECT_SPONSOR\",\n \"PROJECT_VERSION\",\n ];\n\n // Add default environment variables if they exist in process.env\n defaultEnvVars.forEach((envVar) => {\n if (process.env[envVar] && !environment[envVar]) {\n environment[envVar] = process.env[envVar];\n }\n });\n\n this._code = typeof code === \"string\" ? lambda.Code.fromAsset(code) : code;\n\n // Create a working copy of layers\n const resolvedLayers = [...layers];\n\n // Determine if we should add Datadog integration\n // Check for datadog API key ARN in different sources\n const resolvedDatadogApiKeyArn =\n datadogApiKeyArn ||\n process.env.DATADOG_API_KEY_ARN ||\n process.env.CDK_ENV_DATADOG_API_KEY_ARN;\n\n // Add Datadog integration if API key is available\n if (resolvedDatadogApiKeyArn) {\n // Add Datadog Node.js layer\n const datadogNodeLayer = lambda.LayerVersion.fromLayerVersionArn(\n this,\n \"DatadogNodeLayer\",\n `arn:aws:lambda:${Stack.of(this).region}:464622532012:layer:Datadog-Node20-x:${CDK.DATADOG.LAYER.NODE}`,\n );\n resolvedLayers.push(datadogNodeLayer);\n\n // Add Datadog Extension layer\n const datadogExtensionLayer = lambda.LayerVersion.fromLayerVersionArn(\n this,\n \"DatadogExtensionLayer\",\n `arn:aws:lambda:${Stack.of(this).region}:464622532012:layer:Datadog-Extension:${CDK.DATADOG.LAYER.EXTENSION}`,\n );\n resolvedLayers.push(datadogExtensionLayer);\n\n // Set Datadog environment variables\n Object.assign(environment, {\n DD_API_KEY_SECRET_ARN: resolvedDatadogApiKeyArn,\n DD_ENV: process.env.PROJECT_ENV || \"\",\n DD_SERVICE: process.env.PROJECT_SERVICE || \"\",\n DD_SITE: CDK.DATADOG.SITE,\n DD_TAGS: `${CDK.TAG.SPONSOR}:${process.env.PROJECT_SPONSOR || \"\"}`,\n });\n }\n\n // Configure ParamsAndSecrets layer\n let resolvedParamsAndSecrets:\n | lambda.ParamsAndSecretsLayerVersion\n | undefined = undefined;\n\n if (paramsAndSecrets !== false) {\n if (paramsAndSecrets instanceof lambda.ParamsAndSecretsLayerVersion) {\n resolvedParamsAndSecrets = paramsAndSecrets;\n } else {\n // Create default ParamsAndSecrets layer\n resolvedParamsAndSecrets =\n lambda.ParamsAndSecretsLayerVersion.fromVersion(\n lambda.ParamsAndSecretsVersions.V1_0_103,\n {\n cacheSize: paramsAndSecretsOptions?.cacheSize,\n logLevel:\n paramsAndSecretsOptions?.logLevel ||\n lambda.ParamsAndSecretsLogLevel.WARN,\n parameterStoreTtl: paramsAndSecretsOptions?.parameterStoreTtl\n ? Duration.seconds(paramsAndSecretsOptions.parameterStoreTtl)\n : undefined,\n secretsManagerTtl: paramsAndSecretsOptions?.secretsManagerTtl\n ? Duration.seconds(paramsAndSecretsOptions.secretsManagerTtl)\n : undefined,\n },\n );\n }\n }\n\n // Process secrets environment variables\n const secretsEnvironment = Object.entries(envSecrets).reduce(\n (acc, [key, secret]) => ({\n ...acc,\n [`SECRET_${key}`]: secret.secretName,\n }),\n {},\n );\n\n // Process JaypieEnvSecret array\n const jaypieSecretsEnvironment = secrets.reduce((acc, secret) => {\n if (secret.envKey) {\n return {\n ...acc,\n [`SECRET_${secret.envKey}`]: secret.secretName,\n };\n }\n return acc;\n }, {});\n\n // Create Lambda Function\n this._lambda = new lambda.Function(this, \"Function\", {\n code: this._code,\n environment: {\n ...environment,\n ...secretsEnvironment,\n ...jaypieSecretsEnvironment,\n },\n handler,\n layers: resolvedLayers,\n logRetention,\n memorySize,\n paramsAndSecrets: resolvedParamsAndSecrets,\n reservedConcurrentExecutions,\n runtime,\n timeout:\n typeof timeout === \"number\" ? Duration.seconds(timeout) : timeout,\n // Enable auto-publishing of versions when using provisioned concurrency\n currentVersionOptions:\n provisionedConcurrentExecutions !== undefined\n ? {\n removalPolicy: RemovalPolicy.RETAIN,\n description: \"Auto-published version for provisioned concurrency\",\n // Don't set provisioned concurrency here - it will be set on the alias\n }\n : undefined,\n });\n\n // Grant secret read permissions\n Object.values(envSecrets).forEach((secret) => {\n secret.grantRead(this._lambda);\n });\n\n // Grant read permissions for JaypieEnvSecrets\n secrets.forEach((secret) => {\n secret.grantRead(this);\n secret.grantRead(this._lambda);\n });\n\n // Grant Datadog API key read permission if applicable\n if (resolvedDatadogApiKeyArn) {\n const datadogApiKey = secretsmanager.Secret.fromSecretCompleteArn(\n this,\n \"DatadogApiKeyGrant\",\n resolvedDatadogApiKeyArn,\n );\n datadogApiKey.grantRead(this._lambda);\n }\n\n // Configure provisioned concurrency if specified\n if (provisionedConcurrentExecutions !== undefined) {\n // Use currentVersion which is auto-published with proper configuration\n const version = this._lambda.currentVersion;\n\n // Create alias for provisioned concurrency\n this._alias = new lambda.Alias(this, \"ProvisionedAlias\", {\n aliasName: \"provisioned\",\n version,\n provisionedConcurrentExecutions,\n });\n\n // Add explicit dependencies to ensure proper creation order\n this._alias.node.addDependency(version);\n }\n\n if (roleTag) {\n Tags.of(this._lambda).add(CDK.TAG.ROLE, roleTag);\n }\n if (vendorTag) {\n Tags.of(this._lambda).add(CDK.TAG.VENDOR, vendorTag);\n }\n }\n\n // Public accessors\n public get lambda(): lambda.Function {\n return this._lambda;\n }\n\n public get alias(): lambda.Alias | undefined {\n return this._alias;\n }\n\n public get code(): lambda.Code {\n return this._code;\n }\n\n // IFunction implementation\n public get functionArn(): string {\n return this._alias?.functionArn ?? this._lambda.functionArn;\n }\n\n public get functionName(): string {\n return this._alias?.functionName ?? this._lambda.functionName;\n }\n\n public get grantPrincipal(): iam.IPrincipal {\n return this._lambda.grantPrincipal;\n }\n\n public get role(): iam.IRole | undefined {\n return this._lambda.role;\n }\n\n public get architecture(): lambda.Architecture {\n return this._lambda.architecture;\n }\n\n public get connections(): import(\"aws-cdk-lib/aws-ec2\").Connections {\n return this._lambda.connections;\n }\n\n public get isBoundToVpc(): boolean {\n return this._lambda.isBoundToVpc;\n }\n\n public get latestVersion(): lambda.IVersion {\n return this._lambda.latestVersion;\n }\n\n public get permissionsNode(): import(\"constructs\").Node {\n return this._lambda.permissionsNode;\n }\n\n public get resourceArnsForGrantInvoke(): string[] {\n return (\n this._alias?.resourceArnsForGrantInvoke ??\n this._lambda.resourceArnsForGrantInvoke\n );\n }\n\n public addEventSource(source: lambda.IEventSource): void {\n this._lambda.addEventSource(source);\n }\n\n public addEventSourceMapping(\n id: string,\n options: lambda.EventSourceMappingOptions,\n ): lambda.EventSourceMapping {\n return this._lambda.addEventSourceMapping(id, options);\n }\n\n public addFunctionUrl(\n options?: lambda.FunctionUrlOptions,\n ): lambda.FunctionUrl {\n return this._lambda.addFunctionUrl(options);\n }\n\n public addPermission(id: string, permission: lambda.Permission): void {\n this._lambda.addPermission(id, permission);\n }\n\n public addToRolePolicy(statement: iam.PolicyStatement): void {\n this._lambda.addToRolePolicy(statement);\n }\n\n public addEnvironment(\n key: string,\n value: string,\n options?: lambda.EnvironmentOptions,\n ): lambda.Function {\n return this._lambda.addEnvironment(key, value, options);\n }\n\n public configureAsyncInvoke(options: lambda.EventInvokeConfigOptions): void {\n this._lambda.configureAsyncInvoke(options);\n }\n\n public grantInvoke(grantee: iam.IGrantable): iam.Grant {\n return (\n this._alias?.grantInvoke(grantee) ?? this._lambda.grantInvoke(grantee)\n );\n }\n\n public grantInvokeCompositePrincipal(\n compositePrincipal: iam.CompositePrincipal,\n ): iam.Grant[] {\n return this._lambda.grantInvokeCompositePrincipal(compositePrincipal);\n }\n\n public grantInvokeUrl(grantee: iam.IGrantable): iam.Grant {\n return this._lambda.grantInvokeUrl(grantee);\n }\n\n public metric(\n metricName: string,\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._lambda.metric(metricName, props);\n }\n\n public metricDuration(props?: cloudwatch.MetricOptions): cloudwatch.Metric {\n return this._lambda.metricDuration(props);\n }\n\n public metricErrors(props?: cloudwatch.MetricOptions): cloudwatch.Metric {\n return this._lambda.metricErrors(props);\n }\n\n public metricInvocations(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._lambda.metricInvocations(props);\n }\n\n public metricThrottles(props?: cloudwatch.MetricOptions): cloudwatch.Metric {\n return this._lambda.metricThrottles(props);\n }\n\n // Additional IFunction implementation\n public grantInvokeLatestVersion(grantee: iam.IGrantable): iam.Grant {\n return this._lambda.grantInvokeLatestVersion(grantee);\n }\n\n public grantInvokeVersion(\n grantee: iam.IGrantable,\n version: lambda.Version,\n ): iam.Grant {\n return this._lambda.grantInvokeVersion(grantee, version);\n }\n\n public get env() {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public get stack(): Stack {\n return this._lambda.stack;\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._lambda.applyRemovalPolicy(policy);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Duration, Tags, Stack, RemovalPolicy } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport * as sqs from \"aws-cdk-lib/aws-sqs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport * as lambdaEventSources from \"aws-cdk-lib/aws-lambda-event-sources\";\nimport * as iam from \"aws-cdk-lib/aws-iam\";\nimport * as cloudwatch from \"aws-cdk-lib/aws-cloudwatch\";\nimport * as kms from \"aws-cdk-lib/aws-kms\";\nimport { JaypieLambda, JaypieLambdaProps } from \"./JaypieLambda.js\";\n\nexport interface JaypieQueuedLambdaProps extends JaypieLambdaProps {\n batchSize?: number;\n fifo?: boolean;\n visibilityTimeout?: Duration | number;\n}\n\nexport class JaypieQueuedLambda\n extends Construct\n implements lambda.IFunction, sqs.IQueue\n{\n private readonly _queue: sqs.Queue;\n private readonly _lambdaConstruct: JaypieLambda;\n\n constructor(scope: Construct, id: string, props: JaypieQueuedLambdaProps) {\n super(scope, id);\n\n const {\n batchSize = 1,\n code,\n environment = {},\n envSecrets = {},\n fifo = true,\n handler = \"index.handler\",\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n reservedConcurrentExecutions,\n roleTag,\n runtime = lambda.Runtime.NODEJS_22_X,\n secrets = [],\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n vendorTag,\n visibilityTimeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n } = props;\n\n // Create SQS Queue\n this._queue = new sqs.Queue(this, \"Queue\", {\n fifo,\n visibilityTimeout:\n typeof visibilityTimeout === \"number\"\n ? Duration.seconds(visibilityTimeout)\n : visibilityTimeout,\n });\n if (roleTag) {\n Tags.of(this._queue).add(CDK.TAG.ROLE, roleTag);\n }\n if (vendorTag) {\n Tags.of(this._queue).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n // Create Lambda with JaypieLambda\n this._lambdaConstruct = new JaypieLambda(this, \"Function\", {\n code,\n environment: {\n ...environment,\n CDK_ENV_QUEUE_URL: this._queue.queueUrl,\n },\n envSecrets,\n handler,\n layers,\n logRetention,\n memorySize,\n paramsAndSecrets,\n reservedConcurrentExecutions,\n roleTag,\n runtime,\n secrets,\n timeout,\n vendorTag,\n });\n\n // Set up queue and lambda integration\n this._queue.grantConsumeMessages(this._lambdaConstruct);\n this._queue.grantSendMessages(this._lambdaConstruct);\n this._lambdaConstruct.addEventSource(\n new lambdaEventSources.SqsEventSource(this._queue, {\n batchSize,\n }),\n );\n }\n\n // Public accessors\n public get queue(): sqs.Queue {\n return this._queue;\n }\n\n public get lambda(): lambda.Function {\n return this._lambdaConstruct.lambda;\n }\n\n public get code(): lambda.Code {\n return this._lambdaConstruct.code;\n }\n\n // IFunction implementation\n public get functionArn(): string {\n return this._lambdaConstruct.functionArn;\n }\n\n public get functionName(): string {\n return this._lambdaConstruct.functionName;\n }\n\n public get grantPrincipal(): import(\"aws-cdk-lib/aws-iam\").IPrincipal {\n return this._lambdaConstruct.grantPrincipal;\n }\n\n public get role(): import(\"aws-cdk-lib/aws-iam\").IRole | undefined {\n return this._lambdaConstruct.role;\n }\n\n public get architecture(): lambda.Architecture {\n return this._lambdaConstruct.architecture;\n }\n\n public get connections(): import(\"aws-cdk-lib/aws-ec2\").Connections {\n return this._lambdaConstruct.connections;\n }\n\n public get isBoundToVpc(): boolean {\n return this._lambdaConstruct.isBoundToVpc;\n }\n\n public get latestVersion(): lambda.IVersion {\n return this._lambdaConstruct.latestVersion;\n }\n\n public get permissionsNode(): import(\"constructs\").Node {\n return this._lambdaConstruct.permissionsNode;\n }\n\n public get resourceArnsForGrantInvoke(): string[] {\n return this._lambdaConstruct.resourceArnsForGrantInvoke;\n }\n\n public addEventSource(source: lambda.IEventSource): void {\n this._lambdaConstruct.addEventSource(source);\n }\n\n public addEventSourceMapping(\n id: string,\n options: lambda.EventSourceMappingOptions,\n ): lambda.EventSourceMapping {\n return this._lambdaConstruct.addEventSourceMapping(id, options);\n }\n\n public addFunctionUrl(\n options?: lambda.FunctionUrlOptions,\n ): lambda.FunctionUrl {\n return this._lambdaConstruct.addFunctionUrl(options);\n }\n\n public addPermission(id: string, permission: lambda.Permission): void {\n this._lambdaConstruct.addPermission(id, permission);\n }\n\n public addToRolePolicy(\n statement: import(\"aws-cdk-lib/aws-iam\").PolicyStatement,\n ): void {\n this._lambdaConstruct.addToRolePolicy(statement);\n }\n\n public configureAsyncInvoke(options: lambda.EventInvokeConfigOptions): void {\n this._lambdaConstruct.configureAsyncInvoke(options);\n }\n\n public grantInvoke(\n grantee: import(\"aws-cdk-lib/aws-iam\").IGrantable,\n ): import(\"aws-cdk-lib/aws-iam\").Grant {\n return this._lambdaConstruct.grantInvoke(grantee);\n }\n\n public grantInvokeCompositePrincipal(\n compositePrincipal: import(\"aws-cdk-lib/aws-iam\").CompositePrincipal,\n ): import(\"aws-cdk-lib/aws-iam\").Grant[] {\n return this._lambdaConstruct.grantInvokeCompositePrincipal(\n compositePrincipal,\n );\n }\n\n public grantInvokeUrl(\n grantee: import(\"aws-cdk-lib/aws-iam\").IGrantable,\n ): import(\"aws-cdk-lib/aws-iam\").Grant {\n return this._lambdaConstruct.grantInvokeUrl(grantee);\n }\n\n public metric(\n metricName: string,\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metric(metricName, props);\n }\n\n public metricDuration(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricDuration(props);\n }\n\n public metricErrors(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricErrors(props);\n }\n\n public metricInvocations(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricInvocations(props);\n }\n\n public metricThrottles(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricThrottles(props);\n }\n\n // Additional IFunction implementation\n public grantInvokeLatestVersion(grantee: iam.IGrantable): iam.Grant {\n return this._lambdaConstruct.grantInvokeLatestVersion(grantee);\n }\n\n public grantInvokeVersion(\n grantee: iam.IGrantable,\n version: lambda.Version,\n ): iam.Grant {\n return this._lambdaConstruct.grantInvokeVersion(grantee, version);\n }\n\n public get env() {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public get stack(): Stack {\n return Stack.of(this);\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._lambdaConstruct.applyRemovalPolicy(policy);\n this._queue.applyRemovalPolicy(policy);\n }\n\n // IQueue implementation\n public get fifo(): boolean {\n return this._queue.fifo;\n }\n\n public get queueArn(): string {\n return this._queue.queueArn;\n }\n\n public get queueName(): string {\n return this._queue.queueName;\n }\n\n public get queueUrl(): string {\n return this._queue.queueUrl;\n }\n\n public get encryptionMasterKey(): kms.IKey | undefined {\n return this._queue.encryptionMasterKey;\n }\n\n public addToResourcePolicy(\n statement: iam.PolicyStatement,\n ): iam.AddToResourcePolicyResult {\n return this._queue.addToResourcePolicy(statement);\n }\n\n public grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant {\n return this._queue.grant(grantee, ...actions);\n }\n\n public grantConsumeMessages(grantee: iam.IGrantable): iam.Grant {\n return this._queue.grantConsumeMessages(grantee);\n }\n\n public grantPurge(grantee: iam.IGrantable): iam.Grant {\n return this._queue.grantPurge(grantee);\n }\n\n public grantSendMessages(grantee: iam.IGrantable): iam.Grant {\n return this._queue.grantSendMessages(grantee);\n }\n\n // Queue metrics\n public metricApproximateAgeOfOldestMessage(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateAgeOfOldestMessage(props);\n }\n\n public metricApproximateNumberOfMessagesDelayed(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateNumberOfMessagesDelayed(props);\n }\n\n public metricApproximateNumberOfMessagesNotVisible(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateNumberOfMessagesNotVisible(props);\n }\n\n public metricApproximateNumberOfMessagesVisible(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateNumberOfMessagesVisible(props);\n }\n\n public metricNumberOfEmptyReceives(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfEmptyReceives(props);\n }\n\n public metricNumberOfMessagesDeleted(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfMessagesDeleted(props);\n }\n\n public metricNumberOfMessagesReceived(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfMessagesReceived(props);\n }\n\n public metricNumberOfMessagesSent(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfMessagesSent(props);\n }\n\n public metricSentMessageSize(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricSentMessageSize(props);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Tags, RemovalPolicy } from \"aws-cdk-lib\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\nimport * as s3n from \"aws-cdk-lib/aws-s3-notifications\";\nimport { CDK } from \"@jaypie/cdk\";\nimport * as iam from \"aws-cdk-lib/aws-iam\";\nimport * as cloudwatch from \"aws-cdk-lib/aws-cloudwatch\";\nimport {\n JaypieQueuedLambda,\n JaypieQueuedLambdaProps,\n} from \"./JaypieQueuedLambda.js\";\n\nexport interface JaypieBucketQueuedLambdaProps extends JaypieQueuedLambdaProps {\n bucketName?: string;\n bucketOptions?: s3.BucketProps;\n}\n\nexport class JaypieBucketQueuedLambda\n extends JaypieQueuedLambda\n implements s3.IBucket\n{\n private readonly _bucket: s3.Bucket;\n\n constructor(\n scope: Construct,\n id: string,\n props: JaypieBucketQueuedLambdaProps,\n ) {\n props.fifo = false; // S3 event notifications are not supported for FIFO queues\n super(scope, id, props);\n\n const { bucketName, roleTag, vendorTag, bucketOptions = {} } = props;\n\n // Create S3 Bucket\n this._bucket = new s3.Bucket(this, \"Bucket\", {\n bucketName: bucketOptions.bucketName || bucketName,\n removalPolicy: bucketOptions.removalPolicy || RemovalPolicy.RETAIN,\n ...bucketOptions,\n });\n\n // Add tags to bucket\n if (roleTag) {\n Tags.of(this._bucket).add(CDK.TAG.ROLE, roleTag);\n }\n if (vendorTag) {\n Tags.of(this._bucket).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n // Add an event notification from the bucket to the queue\n this._bucket.addEventNotification(\n s3.EventType.OBJECT_CREATED,\n new s3n.SqsDestination(this.queue),\n );\n\n // Grant the lambda access to the bucket\n this._bucket.grantReadWrite(this);\n\n // Add environment variable for bucket name\n this.lambda.addEnvironment(\"CDK_ENV_BUCKET_NAME\", this._bucket.bucketName);\n }\n\n // Public accessors\n public get bucket(): s3.Bucket {\n return this._bucket;\n }\n\n // IBucket implementation\n public get bucketArn(): string {\n return this._bucket.bucketArn;\n }\n\n public get bucketDomainName(): string {\n return this._bucket.bucketDomainName;\n }\n\n public get bucketDualStackDomainName(): string {\n return this._bucket.bucketDualStackDomainName;\n }\n\n public get bucketName(): string {\n return this._bucket.bucketName;\n }\n\n public get bucketRegionalDomainName(): string {\n return this._bucket.bucketRegionalDomainName;\n }\n\n public get bucketWebsiteDomainName(): string {\n return this._bucket.bucketWebsiteDomainName;\n }\n\n public get bucketWebsiteUrl(): string {\n return this._bucket.bucketWebsiteUrl;\n }\n\n public get encryptionKey(): undefined | import(\"aws-cdk-lib/aws-kms\").IKey {\n return this._bucket.encryptionKey;\n }\n\n public get isWebsite(): boolean {\n return this._bucket.isWebsite || false;\n }\n\n public get policy(): s3.BucketPolicy | undefined {\n return this._bucket.policy;\n }\n\n public addEventNotification(\n event: s3.EventType,\n dest: s3.IBucketNotificationDestination,\n filters?: s3.NotificationKeyFilter[],\n ): void {\n this._bucket.addEventNotification(event, dest, ...filters);\n }\n\n public addObjectCreatedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this._bucket.addObjectCreatedNotification(dest, ...filters);\n }\n\n public addObjectRemovedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this._bucket.addObjectRemovedNotification(dest, ...filters);\n }\n\n public addToResourcePolicy(\n permission: iam.PolicyStatement,\n ): iam.AddToResourcePolicyResult {\n return this._bucket.addToResourcePolicy(permission);\n }\n\n public arnForObjects(objectKeyPattern: string): string {\n return this._bucket.arnForObjects(objectKeyPattern);\n }\n\n public enableEventBridgeNotification(): void {\n this._bucket.enableEventBridgeNotification();\n }\n\n public grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant {\n return this._bucket.grant(grantee, ...actions);\n }\n\n public grantDelete(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantDelete(grantee, objectsKeyPattern);\n }\n\n public grantPublicAccess(\n keyPrefix?: string,\n ...allowedActions: string[]\n ): iam.Grant {\n return this._bucket.grantPublicAccess(keyPrefix, ...allowedActions);\n }\n\n public grantPut(grantee: iam.IGrantable, objectsKeyPattern?: any): iam.Grant {\n return this._bucket.grantPut(grantee, objectsKeyPattern);\n }\n\n public grantPutAcl(\n grantee: iam.IGrantable,\n objectsKeyPattern?: string,\n ): iam.Grant {\n return this._bucket.grantPutAcl(grantee, objectsKeyPattern);\n }\n\n public grantRead(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantRead(grantee, objectsKeyPattern);\n }\n\n public grantReadWrite(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantReadWrite(grantee, objectsKeyPattern);\n }\n\n public grantWrite(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantWrite(grantee, objectsKeyPattern);\n }\n\n public onCloudTrailEvent(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): import(\"aws-cdk-lib/aws-events\").Rule {\n return this._bucket.onCloudTrailEvent(id, options);\n }\n\n public onCloudTrailPutObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): import(\"aws-cdk-lib/aws-events\").Rule {\n return this._bucket.onCloudTrailPutObject(id, options);\n }\n\n public onCloudTrailWriteObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): import(\"aws-cdk-lib/aws-events\").Rule {\n return this._bucket.onCloudTrailWriteObject(id, options);\n }\n\n public s3UrlForObject(key?: string): string {\n return this._bucket.s3UrlForObject(key);\n }\n\n public transferAccelerationUrlForObject(\n key?: string,\n options?: s3.TransferAccelerationUrlOptions,\n ): string {\n return this._bucket.transferAccelerationUrlForObject(key, options);\n }\n\n public urlForObject(key?: string): string {\n return this._bucket.urlForObject(key);\n }\n\n public virtualHostedUrlForObject(\n key?: string,\n options?: s3.VirtualHostedStyleUrlOptions,\n ): string {\n return this._bucket.virtualHostedUrlForObject(key, options);\n }\n\n // Bucket metrics\n public metricAllRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricAllRequests(props);\n }\n\n public metricBucketSizeBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricBucketSizeBytes(props);\n }\n\n public metricDeleteRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricDeleteRequests(props);\n }\n\n public metricDownloadBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricDownloadBytes(props);\n }\n\n public metricFirstByteLatency(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricFirstByteLatency(props);\n }\n\n public metricGetRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricGetRequests(props);\n }\n\n public metricHeadRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricHeadRequests(props);\n }\n\n public metricHttpRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricHttpRequests(props);\n }\n\n public metricListRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricListRequests(props);\n }\n\n public metricNumberOfObjects(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricNumberOfObjects(props);\n }\n\n public metricPostRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricPostRequests(props);\n }\n\n public metricPutRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricPutRequests(props);\n }\n\n public metricSelectRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricSelectRequests(props);\n }\n\n public metricSelectScannedBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricSelectScannedBytes(props);\n }\n\n public metricUploadBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricUploadBytes(props);\n }\n\n public metricSelectReturnedBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricSelectReturnedBytes(props);\n }\n\n // Override applyRemovalPolicy to apply to all resources\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n super.applyRemovalPolicy(policy);\n this._bucket.applyRemovalPolicy(policy);\n }\n}\n","import { Construct } from \"constructs\";\nimport {\n CfnOutput,\n Fn,\n SecretValue,\n Tags,\n RemovalPolicy,\n Stack,\n} from \"aws-cdk-lib\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { CDK } from \"@jaypie/cdk\";\nimport {\n ISecret,\n ISecretAttachmentTarget,\n RotationSchedule,\n RotationScheduleOptions,\n} from \"aws-cdk-lib/aws-secretsmanager\";\nimport { IKey } from \"aws-cdk-lib/aws-kms\";\nimport {\n Grant,\n IGrantable,\n PolicyStatement,\n AddToResourcePolicyResult,\n} from \"aws-cdk-lib/aws-iam\";\n\n// It is a consumer if the environment is ephemeral\nfunction checkEnvIsConsumer(env = process.env): boolean {\n return (\n env.PROJECT_ENV === CDK.ENV.PERSONAL ||\n !!env.CDK_ENV_PERSONAL ||\n /** @deprecated */ env.PROJECT_ENV === \"ephemeral\" ||\n /** @deprecated */ !!env.CDK_ENV_EPHEMERAL\n );\n}\n\nfunction checkEnvIsProvider(env = process.env): boolean {\n return env.PROJECT_ENV === CDK.ENV.SANDBOX;\n}\n\nfunction cleanName(name: string): string {\n return name.replace(/[^a-zA-Z0-9:-]/g, \"\");\n}\n\nfunction exportEnvName(name: string, env = process.env): string {\n let rawName;\n if (checkEnvIsProvider(env)) {\n rawName = `env-${env.PROJECT_ENV}-${env.PROJECT_KEY}-${name}`;\n // Clean the entire name to only allow alphanumeric, colons, and hyphens\n return cleanName(rawName);\n } else {\n if (checkEnvIsConsumer(env)) {\n rawName = `env-${CDK.ENV.SANDBOX}-${env.PROJECT_KEY}-${name}`;\n } else {\n rawName = `env-${env.PROJECT_ENV}-${env.PROJECT_KEY}-${name}`;\n }\n }\n return cleanName(rawName);\n}\n\nexport interface JaypieEnvSecretProps {\n consumer?: boolean;\n envKey?: string;\n export?: string;\n provider?: boolean;\n roleTag?: string;\n vendorTag?: string;\n value?: string;\n}\n\nexport class JaypieEnvSecret extends Construct implements ISecret {\n private readonly _envKey?: string;\n private readonly _secret: secretsmanager.ISecret;\n\n constructor(scope: Construct, id: string, props?: JaypieEnvSecretProps) {\n super(scope, id);\n\n const {\n consumer = checkEnvIsConsumer(),\n envKey,\n export: exportParam,\n provider = checkEnvIsProvider(),\n roleTag,\n vendorTag,\n value,\n } = props || {};\n\n this._envKey = envKey;\n\n let exportName;\n\n if (!exportParam) {\n exportName = exportEnvName(id);\n } else {\n exportName = cleanName(exportParam);\n }\n\n if (consumer) {\n const secretName = Fn.importValue(exportName);\n this._secret = secretsmanager.Secret.fromSecretNameV2(\n this,\n id,\n secretName,\n );\n\n // Add CfnOutput for consumer secrets\n new CfnOutput(this, `ConsumedName`, {\n value: this._secret.secretName,\n });\n } else {\n const secretValue =\n envKey && process.env[envKey] ? process.env[envKey] : value;\n\n const secretProps: secretsmanager.SecretProps = {\n secretStringValue: secretValue\n ? SecretValue.unsafePlainText(secretValue)\n : undefined,\n };\n\n this._secret = new secretsmanager.Secret(this, id, secretProps);\n\n if (roleTag) {\n Tags.of(this._secret).add(CDK.TAG.ROLE, roleTag);\n }\n\n if (vendorTag) {\n Tags.of(this._secret).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n if (provider) {\n new CfnOutput(this, `ProvidedName`, {\n value: this._secret.secretName,\n exportName,\n });\n } else {\n new CfnOutput(this, `CreatedName`, {\n value: this._secret.secretName,\n });\n }\n }\n }\n\n // IResource implementation\n public get stack(): Stack {\n return Stack.of(this);\n }\n\n public get env(): { account: string; region: string } {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._secret.applyRemovalPolicy(policy);\n }\n\n // ISecret implementation\n public get secretArn(): string {\n return this._secret.secretArn;\n }\n\n public get secretName(): string {\n return this._secret.secretName;\n }\n\n public get secretFullArn(): string | undefined {\n return this._secret.secretFullArn;\n }\n\n public get encryptionKey(): IKey | undefined {\n return this._secret.encryptionKey;\n }\n\n public get secretValue(): SecretValue {\n return this._secret.secretValue;\n }\n\n public secretValueFromJson(key: string): SecretValue {\n return this._secret.secretValueFromJson(key);\n }\n\n public grantRead(grantee: IGrantable, versionStages?: string[]): Grant {\n return this._secret.grantRead(grantee, versionStages);\n }\n\n public grantWrite(grantee: IGrantable): Grant {\n return this._secret.grantWrite(grantee);\n }\n\n public addRotationSchedule(\n id: string,\n options: RotationScheduleOptions,\n ): RotationSchedule {\n return this._secret.addRotationSchedule(id, options);\n }\n\n public addToResourcePolicy(\n statement: PolicyStatement,\n ): AddToResourcePolicyResult {\n return this._secret.addToResourcePolicy(statement);\n }\n\n public denyAccountRootDelete(): void {\n this._secret.denyAccountRootDelete();\n }\n\n public attach(target: ISecretAttachmentTarget): ISecret {\n return this._secret.attach(target);\n }\n\n public get envKey(): string | undefined {\n return this._envKey;\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieDatadogSecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"MongoConnectionString\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"DATADOG_API_KEY\",\n roleTag: CDK.ROLE.MONITORING,\n vendorTag: CDK.VENDOR.DATADOG,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Duration } from \"aws-cdk-lib\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieLambda, JaypieLambdaProps } from \"./JaypieLambda.js\";\n\nexport class JaypieExpressLambda extends JaypieLambda {\n constructor(scope: Construct, id: string, props: JaypieLambdaProps) {\n super(scope, id, {\n timeout: Duration.seconds(CDK.DURATION.EXPRESS_API),\n roleTag: CDK.ROLE.API,\n ...props,\n });\n }\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport * as cdk from \"aws-cdk-lib\";\nimport { ServicePrincipal } from \"aws-cdk-lib/aws-iam\";\nimport {\n LogGroup,\n FilterPattern,\n RetentionDays,\n ILogGroup,\n} from \"aws-cdk-lib/aws-logs\";\nimport { HostedZone, IHostedZone } from \"aws-cdk-lib/aws-route53\";\nimport { Construct } from \"constructs\";\nimport { LambdaDestination } from \"aws-cdk-lib/aws-logs-destinations\";\n\nconst SERVICE = {\n ROUTE53: \"route53.amazonaws.com\",\n} as const;\n\ninterface JaypieHostedZoneProps {\n /**\n * The domain name for the hosted zone\n */\n zoneName: string;\n /**\n * The service tag value\n * @default CDK.SERVICE.INFRASTRUCTURE\n */\n service?: string;\n /**\n * Optional project tag value\n */\n project?: string;\n /**\n * Optional log destination\n */\n destination?: LambdaDestination;\n}\n\nexport class JaypieHostedZone extends Construct {\n public readonly hostedZone: IHostedZone;\n public readonly logGroup: ILogGroup;\n\n /**\n * Create a new hosted zone with query logging\n */\n constructor(scope: Construct, id: string, props: JaypieHostedZoneProps) {\n super(scope, id);\n\n const { destination, zoneName, project } = props;\n const service = props.service || CDK.SERVICE.INFRASTRUCTURE;\n\n // Create the log group\n this.logGroup = new LogGroup(this, \"LogGroup\", {\n logGroupName: process.env.PROJECT_NONCE\n ? `/aws/route53/${zoneName}-${process.env.PROJECT_NONCE}`\n : `/aws/route53/${zoneName}`,\n retention: RetentionDays.ONE_WEEK,\n });\n\n // Add tags\n cdk.Tags.of(this.logGroup).add(CDK.TAG.SERVICE, service);\n cdk.Tags.of(this.logGroup).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n if (project) {\n cdk.Tags.of(this.logGroup).add(CDK.TAG.PROJECT, project);\n }\n\n // Grant Route 53 permissions to write to the log group\n this.logGroup.grantWrite(new ServicePrincipal(SERVICE.ROUTE53));\n\n // Add destination if provided\n if (destination) {\n this.logGroup.addSubscriptionFilter(\"DatadogLambdaDestination\", {\n destination,\n filterPattern: FilterPattern.allEvents(),\n });\n }\n\n // Create the hosted zone\n this.hostedZone = new HostedZone(this, \"HostedZone\", {\n queryLogsLogGroupArn: this.logGroup.logGroupArn,\n zoneName,\n });\n\n // Add tags\n cdk.Tags.of(this.hostedZone).add(CDK.TAG.SERVICE, service);\n cdk.Tags.of(this.hostedZone).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n if (project) {\n cdk.Tags.of(this.hostedZone).add(CDK.TAG.PROJECT, project);\n }\n }\n}\n","import { Tags } from \"aws-cdk-lib\";\nimport { Construct } from \"constructs\";\nimport { JaypieStack, JaypieStackProps } from \"./JaypieStack\";\nimport { constructStackName } from \"./helpers\";\n\nconst CDK = {\n TAG: {\n STACK_SHA: \"stackSha\",\n },\n};\n\nexport class JaypieInfrastructureStack extends JaypieStack {\n constructor(scope: Construct, id: string, props: JaypieStackProps = {}) {\n const { key = \"infra\", ...stackProps } = props;\n\n // Handle stackName\n if (!stackProps.stackName) {\n stackProps.stackName = constructStackName(key);\n }\n\n super(scope, id, { key, ...stackProps });\n\n // Add infrastructure-specific tag\n if (process.env.CDK_ENV_INFRASTRUCTURE_STACK_SHA) {\n Tags.of(this).add(\n CDK.TAG.STACK_SHA,\n process.env.CDK_ENV_INFRASTRUCTURE_STACK_SHA,\n );\n }\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieMongoDbSecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"MongoConnectionString\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"MONGODB_URI\",\n roleTag: CDK.ROLE.STORAGE,\n vendorTag: CDK.VENDOR.MONGODB,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieOpenAiSecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"OpenAiApiKey\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"OPENAI_API_KEY\",\n roleTag: CDK.ROLE.PROCESSING,\n vendorTag: CDK.VENDOR.OPENAI,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Tags, Duration } from \"aws-cdk-lib\";\nimport * as sso from \"aws-cdk-lib/aws-sso\";\nimport { CDK } from \"@jaypie/cdk\";\n\n/**\n * Account categories for SSO group assignments\n */\nexport interface JaypieSsoAccountMap {\n development: string[];\n management: string[];\n operations: string[];\n production: string[];\n sandbox: string[];\n security: string[];\n stage: string[];\n}\n\n/**\n * Mapping of group types to Google Workspace group GUIDs\n */\nexport interface JaypieSsoGroupMap {\n administrators: string;\n analysts: string;\n developers: string;\n}\n\n/**\n * IAM Policy Statement structure for inline policies\n */\nexport interface PolicyStatement {\n Effect: \"Allow\" | \"Deny\";\n Action: string[] | string;\n Resource: string[] | string;\n Condition?: Record<string, unknown>;\n}\n\n/**\n * Properties for the JaypieSsoGroups construct\n */\nexport interface JaypieSsoGroupsProps {\n /**\n * ARN of the IAM Identity Center instance\n */\n instanceArn: string;\n\n /**\n * Mapping of account categories to AWS account IDs\n */\n accountMap: JaypieSsoAccountMap;\n\n /**\n * Mapping of group types to Google Workspace group GUIDs\n */\n groupMap: JaypieSsoGroupMap;\n\n /**\n * Additional inline policy statements to append to each group's permission set\n * Each group can have its own set of policy statements that will be merged\n * with the default policies.\n */\n inlinePolicyStatements?: {\n administrators?: PolicyStatement[];\n analysts?: PolicyStatement[];\n developers?: PolicyStatement[];\n };\n}\n\n/**\n * Permission set types with corresponding AWS managed policies\n */\nexport enum PermissionSetType {\n ADMINISTRATOR = \"Administrator\",\n ANALYST = \"Analyst\",\n DEVELOPER = \"Developer\",\n}\n\n/**\n * Construct to simplify AWS SSO group management.\n * This construct encapsulates the complexity of creating permission sets\n * and assigning them to groups across multiple AWS accounts.\n */\nexport class JaypieSsoGroups extends Construct {\n private readonly permissionSets: Record<\n PermissionSetType,\n sso.CfnPermissionSet\n > = {} as Record<PermissionSetType, sso.CfnPermissionSet>;\n private readonly instanceArn: string;\n private readonly props: JaypieSsoGroupsProps;\n\n constructor(scope: Construct, id: string, props: JaypieSsoGroupsProps) {\n super(scope, id);\n\n this.instanceArn = props.instanceArn;\n this.props = props;\n\n // Create the permission sets\n this.createAdministratorPermissionSet();\n this.createAnalystPermissionSet();\n this.createDeveloperPermissionSet();\n\n // Create the assignments\n this.createPermissionSetAssignments(props);\n }\n\n /**\n * Creates the Administrator permission set with AdministratorAccess policy\n * and billing access\n */\n private createAdministratorPermissionSet(): void {\n const defaultInlinePolicy = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:*\",\n \"budgets:*\",\n \"ce:*\",\n \"cost-optimization-hub:*\",\n ],\n Resource: \"*\",\n },\n ],\n };\n\n // Merge with any additional policy statements provided for administrators\n const mergedPolicy = this.mergeInlinePolicies(\n defaultInlinePolicy,\n this.props?.inlinePolicyStatements?.administrators,\n );\n\n const permissionSet = new sso.CfnPermissionSet(\n this,\n \"AdministratorPermissionSet\",\n {\n instanceArn: this.instanceArn,\n name: PermissionSetType.ADMINISTRATOR,\n description:\n \"Full administrative access to all AWS services and resources\",\n sessionDuration: Duration.hours(8).toIsoString(),\n managedPolicies: [\"arn:aws:iam::aws:policy/AdministratorAccess\"],\n inlinePolicy: mergedPolicy,\n },\n );\n\n Tags.of(permissionSet).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n\n this.permissionSets[PermissionSetType.ADMINISTRATOR] = permissionSet;\n }\n\n /**\n * Creates the Analyst permission set with ReadOnlyAccess policy\n * and limited write access\n */\n private createAnalystPermissionSet(): void {\n const defaultInlinePolicy = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:ViewBilling\",\n \"aws-portal:ViewAccount\",\n \"budgets:ViewBudget\",\n \"cloudwatch:PutDashboard\",\n \"cloudwatch:PutMetricData\",\n \"s3:PutObject\",\n \"s3:GetObject\",\n \"s3:ListBucket\",\n ],\n Resource: \"*\",\n },\n ],\n };\n\n // Merge with any additional policy statements provided for analysts\n const mergedPolicy = this.mergeInlinePolicies(\n defaultInlinePolicy,\n this.props?.inlinePolicyStatements?.analysts,\n );\n\n const permissionSet = new sso.CfnPermissionSet(\n this,\n \"AnalystPermissionSet\",\n {\n instanceArn: this.instanceArn,\n name: PermissionSetType.ANALYST,\n description:\n \"Read-only access with billing visibility and limited write access\",\n sessionDuration: Duration.hours(4).toIsoString(),\n managedPolicies: [\"arn:aws:iam::aws:policy/ReadOnlyAccess\"],\n inlinePolicy: mergedPolicy,\n },\n );\n\n Tags.of(permissionSet).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n\n this.permissionSets[PermissionSetType.ANALYST] = permissionSet;\n }\n\n /**\n * Creates the Developer permission set with SystemAdministrator policy\n * and expanded write access\n */\n private createDeveloperPermissionSet(): void {\n const defaultInlinePolicy = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"cloudwatch:*\",\n \"logs:*\",\n \"lambda:*\",\n \"apigateway:*\",\n \"dynamodb:*\",\n \"s3:*\",\n \"sns:*\",\n \"sqs:*\",\n \"events:*\",\n \"ecr:*\",\n \"ecs:*\",\n \"codebuild:*\",\n ],\n Resource: \"*\",\n },\n {\n Effect: \"Deny\",\n Action: [\n \"iam:*User*\",\n \"iam:*Role*\",\n \"iam:*Policy*\",\n \"organizations:*\",\n \"account:*\",\n ],\n Resource: \"*\",\n },\n ],\n };\n\n // Merge with any additional policy statements provided for developers\n const mergedPolicy = this.mergeInlinePolicies(\n defaultInlinePolicy,\n this.props?.inlinePolicyStatements?.developers,\n );\n\n const permissionSet = new sso.CfnPermissionSet(\n this,\n \"DeveloperPermissionSet\",\n {\n instanceArn: this.instanceArn,\n name: PermissionSetType.DEVELOPER,\n description:\n \"System administrator access with expanded write permissions\",\n sessionDuration: Duration.hours(8).toIsoString(),\n managedPolicies: [\n \"arn:aws:iam::aws:policy/job-function/SystemAdministrator\",\n ],\n inlinePolicy: mergedPolicy,\n },\n );\n\n Tags.of(permissionSet).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n\n this.permissionSets[PermissionSetType.DEVELOPER] = permissionSet;\n }\n\n /**\n * Gets the permission set for the specified type\n */\n public getPermissionSet(type: PermissionSetType): sso.CfnPermissionSet {\n return this.permissionSets[type];\n }\n\n /**\n * Merges default inline policies with additional user-provided policy statements\n *\n * @param defaultPolicy - The default policy object with Version and Statement properties\n * @param additionalStatements - Optional additional policy statements to merge\n * @returns The merged policy object\n */\n private mergeInlinePolicies(\n defaultPolicy: Record<string, unknown>,\n additionalStatements?: PolicyStatement[],\n ): Record<string, unknown> {\n if (!additionalStatements || additionalStatements.length === 0) {\n return defaultPolicy;\n }\n\n // Create a deep copy of the default policy to avoid modifying the original\n const mergedPolicy = JSON.parse(JSON.stringify(defaultPolicy));\n\n // Add the additional statements to the existing statements\n mergedPolicy.Statement = [\n ...mergedPolicy.Statement,\n ...additionalStatements,\n ];\n\n return mergedPolicy;\n }\n\n /**\n * Creates assignments between permission sets, groups, and accounts\n * based on the provided configuration\n */\n private createPermissionSetAssignments(props: JaypieSsoGroupsProps): void {\n // Administrator assignments\n this.assignAdministratorPermissions(props);\n\n // Analyst assignments\n this.assignAnalystPermissions(props);\n\n // Developer assignments\n this.assignDeveloperPermissions(props);\n }\n\n /**\n * Assigns Administrator permissions to appropriate accounts\n */\n private assignAdministratorPermissions(props: JaypieSsoGroupsProps): void {\n const administratorGroup = props.groupMap.administrators;\n const administratorPermissionSet =\n this.permissionSets[PermissionSetType.ADMINISTRATOR];\n\n // Administrators get access to all accounts\n const allAccounts = [\n ...props.accountMap.development,\n ...props.accountMap.management,\n ...props.accountMap.operations,\n ...props.accountMap.production,\n ...props.accountMap.sandbox,\n ...props.accountMap.security,\n ...props.accountMap.stage,\n ];\n\n // Create assignments for each account\n allAccounts.forEach((accountId, index) => {\n const assignment = new sso.CfnAssignment(\n this,\n `AdministratorAssignment${index}`,\n {\n instanceArn: this.instanceArn,\n permissionSetArn: administratorPermissionSet.attrPermissionSetArn,\n principalId: administratorGroup,\n principalType: \"GROUP\",\n targetId: accountId,\n targetType: \"AWS_ACCOUNT\",\n },\n );\n\n Tags.of(assignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(assignment).add(\"Group\", \"administrators\");\n });\n }\n\n /**\n * Assigns Analyst permissions to appropriate accounts\n */\n private assignAnalystPermissions(props: JaypieSsoGroupsProps): void {\n const analystGroup = props.groupMap.analysts;\n const analystPermissionSet = this.permissionSets[PermissionSetType.ANALYST];\n\n // Analysts get access to development, management, sandbox, and stage accounts\n const analystAccounts = [\n ...props.accountMap.development,\n ...props.accountMap.management,\n ...props.accountMap.sandbox,\n ...props.accountMap.stage,\n ];\n\n // Create assignments for each account\n analystAccounts.forEach((accountId, index) => {\n const assignment = new sso.CfnAssignment(\n this,\n `AnalystAssignment${index}`,\n {\n instanceArn: this.instanceArn,\n permissionSetArn: analystPermissionSet.attrPermissionSetArn,\n principalId: analystGroup,\n principalType: \"GROUP\",\n targetId: accountId,\n targetType: \"AWS_ACCOUNT\",\n },\n );\n\n Tags.of(assignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(assignment).add(\"Group\", \"analysts\");\n });\n }\n\n /**\n * Assigns Developer permissions to appropriate accounts\n */\n private assignDeveloperPermissions(props: JaypieSsoGroupsProps): void {\n const developerGroup = props.groupMap.developers;\n const developerPermissionSet =\n this.permissionSets[PermissionSetType.DEVELOPER];\n\n // Developers get access to development, sandbox, and stage accounts\n const developerAccounts = [\n ...props.accountMap.development,\n ...props.accountMap.sandbox,\n ...props.accountMap.stage,\n ];\n\n // Create assignments for each account\n developerAccounts.forEach((accountId, index) => {\n const assignment = new sso.CfnAssignment(\n this,\n `DeveloperAssignment${index}`,\n {\n instanceArn: this.instanceArn,\n permissionSetArn: developerPermissionSet.attrPermissionSetArn,\n principalId: developerGroup,\n principalType: \"GROUP\",\n targetId: accountId,\n targetType: \"AWS_ACCOUNT\",\n },\n );\n\n Tags.of(assignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(assignment).add(\"Group\", \"developers\");\n });\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieTraceSigningKeySecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"TraceSigningKey\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"TRACE_SIGNING_KEY\",\n roleTag: CDK.ROLE.API,\n vendorTag: CDK.VENDOR.KNOWTRACE,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import {\n CDK,\n ConfigurationError,\n isValidHostname,\n isValidSubdomain,\n mergeDomain,\n} from \"@jaypie/cdk\";\nimport { CfnOutput, Duration, Fn, RemovalPolicy, Tags } from \"aws-cdk-lib\";\nimport * as acm from \"aws-cdk-lib/aws-certificatemanager\";\nimport * as cloudfront from \"aws-cdk-lib/aws-cloudfront\";\nimport * as origins from \"aws-cdk-lib/aws-cloudfront-origins\";\nimport {\n AddToResourcePolicyResult,\n Effect,\n FederatedPrincipal,\n Role,\n PolicyStatement,\n} from \"aws-cdk-lib/aws-iam\";\nimport * as route53 from \"aws-cdk-lib/aws-route53\";\nimport * as route53Targets from \"aws-cdk-lib/aws-route53-targets\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\nimport * as kms from \"aws-cdk-lib/aws-kms\";\nimport { Construct } from \"constructs\";\nimport { constructEnvName, isProductionEnv } from \"./helpers\";\n\nexport interface JaypieWebDeploymentBucketProps extends s3.BucketProps {\n /**\n * SSL certificate for the CloudFront distribution\n * @default true (creates a new certificate)\n */\n certificate?: boolean | acm.ICertificate;\n /**\n * The domain name for the website\n * @default mergeDomain(CDK_ENV_WEB_SUBDOMAIN, CDK_ENV_WEB_HOSTED_ZONE || CDK_ENV_HOSTED_ZONE)\n */\n host?: string;\n /**\n * Optional bucket name\n */\n name?: string;\n /**\n * Role tag for tagging resources\n * @default CDK.ROLE.HOSTING\n */\n roleTag?: string;\n /**\n * The hosted zone for DNS records\n * @default CDK_ENV_WEB_HOSTED_ZONE || CDK_ENV_HOSTED_ZONE\n */\n zone?: string | route53.IHostedZone;\n}\n\nexport class JaypieWebDeploymentBucket extends Construct implements s3.IBucket {\n public readonly bucket: s3.Bucket;\n public readonly bucketArn: string;\n public readonly bucketDomainName: string;\n public readonly bucketDualStackDomainName: string;\n public readonly bucketName: string;\n public readonly bucketRegionalDomainName: string;\n public readonly bucketWebsiteDomainName: string;\n public readonly bucketWebsiteUrl: string;\n public readonly encryptionKey?: kms.IKey;\n public readonly isWebsite?: boolean;\n public readonly notificationsHandlerRole?: string;\n public readonly policy?: s3.BucketPolicy;\n public readonly deployRoleArn?: string;\n public readonly distributionDomainName?: string;\n public readonly certificate?: acm.ICertificate;\n public readonly distribution?: cloudfront.Distribution;\n\n constructor(\n scope: Construct,\n id: string,\n props: JaypieWebDeploymentBucketProps = {},\n ) {\n super(scope, id);\n\n const roleTag = props.roleTag || CDK.ROLE.HOSTING;\n\n // Environment variable validation\n if (\n process.env.CDK_ENV_WEB_SUBDOMAIN &&\n !isValidSubdomain(process.env.CDK_ENV_WEB_SUBDOMAIN)\n ) {\n throw new ConfigurationError(\n \"CDK_ENV_WEB_SUBDOMAIN is not a valid subdomain\",\n );\n }\n\n if (\n process.env.CDK_ENV_WEB_HOSTED_ZONE &&\n !isValidHostname(process.env.CDK_ENV_WEB_HOSTED_ZONE)\n ) {\n throw new ConfigurationError(\n \"CDK_ENV_WEB_HOSTED_ZONE is not a valid hostname\",\n );\n }\n\n if (\n process.env.CDK_ENV_HOSTED_ZONE &&\n !isValidHostname(process.env.CDK_ENV_HOSTED_ZONE)\n ) {\n throw new ConfigurationError(\n \"CDK_ENV_HOSTED_ZONE is not a valid hostname\",\n );\n }\n\n // Determine host from props or environment\n let host = props.host;\n if (!host) {\n try {\n host =\n process.env.CDK_ENV_WEB_HOST ||\n mergeDomain(\n process.env.CDK_ENV_WEB_SUBDOMAIN || \"\",\n process.env.CDK_ENV_WEB_HOSTED_ZONE ||\n process.env.CDK_ENV_HOSTED_ZONE ||\n \"\",\n );\n } catch {\n host = undefined;\n }\n }\n\n if (host && !isValidHostname(host)) {\n throw new ConfigurationError(\"Host is not a valid hostname\");\n }\n\n // Determine zone from props or environment\n const zone =\n props.zone ||\n process.env.CDK_ENV_WEB_HOSTED_ZONE ||\n process.env.CDK_ENV_HOSTED_ZONE;\n\n // Create the S3 bucket\n this.bucket = new s3.Bucket(this, \"DestinationBucket\", {\n accessControl: s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL,\n autoDeleteObjects: true,\n blockPublicAccess: s3.BlockPublicAccess.BLOCK_ACLS,\n bucketName: props.name || constructEnvName(\"web\"),\n publicReadAccess: true,\n removalPolicy: RemovalPolicy.DESTROY,\n versioned: false,\n websiteErrorDocument: \"index.html\",\n websiteIndexDocument: \"index.html\",\n ...props,\n });\n\n // Delegate IBucket properties to the bucket\n this.bucketArn = this.bucket.bucketArn;\n this.bucketDomainName = this.bucket.bucketDomainName;\n this.bucketDualStackDomainName = this.bucket.bucketDualStackDomainName;\n this.bucketName = this.bucket.bucketName;\n this.bucketRegionalDomainName = this.bucket.bucketRegionalDomainName;\n this.bucketWebsiteDomainName = this.bucket.bucketWebsiteDomainName;\n this.bucketWebsiteUrl = this.bucket.bucketWebsiteUrl;\n this.encryptionKey = this.bucket.encryptionKey;\n this.isWebsite = this.bucket.isWebsite;\n this.notificationsHandlerRole = undefined;\n this.policy = this.bucket.policy;\n\n Tags.of(this.bucket).add(CDK.TAG.ROLE, roleTag);\n\n // Create deployment role if repository is configured\n let repo: string | undefined;\n if (process.env.CDK_ENV_REPO) {\n repo = `repo:${process.env.CDK_ENV_REPO}:*`;\n }\n\n if (repo) {\n const bucketDeployRole = new Role(this, \"DestinationBucketDeployRole\", {\n assumedBy: new FederatedPrincipal(\n Fn.importValue(CDK.IMPORT.OIDC_PROVIDER),\n {\n StringLike: {\n \"token.actions.githubusercontent.com:sub\": repo,\n },\n },\n \"sts:AssumeRoleWithWebIdentity\",\n ),\n maxSessionDuration: Duration.hours(1),\n });\n Tags.of(bucketDeployRole).add(CDK.TAG.ROLE, CDK.ROLE.DEPLOY);\n\n // Allow the role to write to the bucket\n bucketDeployRole.addToPolicy(\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: [\n \"s3:DeleteObject\",\n \"s3:GetObject\",\n \"s3:ListObjectsV2\",\n \"s3:PutObject\",\n ],\n resources: [`${this.bucket.bucketArn}/*`],\n }),\n );\n bucketDeployRole.addToPolicy(\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: [\"s3:ListBucket\"],\n resources: [this.bucket.bucketArn],\n }),\n );\n\n // Allow the role to deploy CDK apps\n bucketDeployRole.addToPolicy(\n new PolicyStatement({\n actions: [\"cloudformation:DescribeStacks\"],\n effect: Effect.ALLOW,\n resources: [\"*\"], // TODO: restrict to this stack\n }),\n );\n\n this.deployRoleArn = bucketDeployRole.roleArn;\n\n // Output the deploy role ARN\n new CfnOutput(this, \"DestinationBucketDeployRoleArn\", {\n value: bucketDeployRole.roleArn,\n });\n }\n\n // Create CloudFront distribution and certificate if host and zone are provided\n if (host && zone) {\n const hostedZone =\n typeof zone === \"string\"\n ? route53.HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: zone,\n })\n : zone;\n\n // Create certificate if not provided\n if (props.certificate !== false) {\n this.certificate =\n typeof props.certificate === \"object\"\n ? props.certificate\n : new acm.Certificate(this, \"Certificate\", {\n domainName: host,\n validation: acm.CertificateValidation.fromDns(hostedZone),\n });\n\n new CfnOutput(this, \"CertificateArn\", {\n value: this.certificate.certificateArn,\n });\n Tags.of(this.certificate).add(CDK.TAG.ROLE, roleTag);\n }\n\n // Create CloudFront distribution\n this.distribution = new cloudfront.Distribution(this, \"Distribution\", {\n defaultBehavior: {\n cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED,\n origin: new origins.S3Origin(this.bucket),\n viewerProtocolPolicy:\n cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n },\n certificate: this.certificate,\n domainNames: [host],\n });\n Tags.of(this.distribution).add(CDK.TAG.ROLE, roleTag);\n\n // If this is production, enable caching on everything but index.html\n if (isProductionEnv()) {\n this.distribution.addBehavior(\"/*\", new origins.S3Origin(this.bucket), {\n viewerProtocolPolicy:\n cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,\n });\n }\n\n // Create DNS record\n const record = new route53.ARecord(this, \"AliasRecord\", {\n recordName: host,\n target: route53.RecordTarget.fromAlias(\n new route53Targets.CloudFrontTarget(this.distribution),\n ),\n zone: hostedZone,\n });\n Tags.of(record).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n\n this.distributionDomainName = this.distribution.distributionDomainName;\n }\n }\n\n // Implement remaining IBucket methods by delegating to the bucket\n addEventNotification(\n event: s3.EventType,\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this.bucket.addEventNotification(event, dest, ...filters);\n }\n\n addObjectCreatedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this.bucket.addObjectCreatedNotification(dest, ...filters);\n }\n\n addObjectRemovedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this.bucket.addObjectRemovedNotification(dest, ...filters);\n }\n\n addToResourcePolicy(permission: PolicyStatement): AddToResourcePolicyResult {\n return this.bucket.addToResourcePolicy(permission);\n }\n\n arnForObjects(keyPattern: string): string {\n return this.bucket.arnForObjects(keyPattern);\n }\n\n grantDelete(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantDelete(identity, objectsKeyPattern);\n }\n\n grantPublicAccess(allowedActions: string, keyPrefix?: string): any {\n return keyPrefix\n ? this.bucket.grantPublicAccess(allowedActions, keyPrefix)\n : this.bucket.grantPublicAccess(allowedActions);\n }\n\n grantPut(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantPut(identity, objectsKeyPattern);\n }\n\n grantPutAcl(identity: any, objectsKeyPattern?: string): any {\n return this.bucket.grantPutAcl(identity, objectsKeyPattern);\n }\n\n grantRead(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantRead(identity, objectsKeyPattern);\n }\n\n grantReadWrite(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantReadWrite(identity, objectsKeyPattern);\n }\n\n grantWrite(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantWrite(identity, objectsKeyPattern);\n }\n\n s3UrlForObject(key?: string): string {\n return this.bucket.s3UrlForObject(key);\n }\n\n urlForObject(key?: string): string {\n return this.bucket.urlForObject(key);\n }\n\n virtualHostedUrlForObject(\n key?: string,\n options?: s3.VirtualHostedStyleUrlOptions,\n ): string {\n return this.bucket.virtualHostedUrlForObject(key, options);\n }\n\n transferAccelerationUrlForObject(key?: string): string {\n return this.bucket.transferAccelerationUrlForObject(key);\n }\n\n onCloudTrailEvent(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): any {\n return this.bucket.onCloudTrailEvent(id, options);\n }\n\n onCloudTrailPutObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): any {\n return this.bucket.onCloudTrailPutObject(id, options);\n }\n\n onCloudTrailWriteObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): any {\n return this.bucket.onCloudTrailWriteObject(id, options);\n }\n\n addCorsRule(rule: s3.CorsRule): void {\n this.bucket.addCorsRule(rule);\n }\n\n addInventory(inventory: s3.Inventory): void {\n this.bucket.addInventory(inventory);\n }\n\n addLifecycleRule(rule: s3.LifecycleRule): void {\n this.bucket.addLifecycleRule(rule);\n }\n\n addMetric(metric: s3.BucketMetrics): void {\n this.bucket.addMetric(metric);\n }\n\n enableEventBridgeNotification(): void {\n this.bucket.enableEventBridgeNotification();\n }\n\n addReplicationPolicy(policy: any): void {\n this.bucket.addReplicationPolicy(policy);\n }\n\n get stack(): any {\n return this.bucket.stack;\n }\n\n get env(): any {\n return this.bucket.env;\n }\n\n applyRemovalPolicy(policy: RemovalPolicy): void {\n this.bucket.applyRemovalPolicy(policy);\n }\n}\n"],"names":["CDK","Tags","Construct","mergeDomain","route53","acm","apiGateway","route53Targets","Stack","lambda","Duration","RemovalPolicy","secretsmanager","sqs","lambdaEventSources","s3","s3n","Fn","CfnOutput","SecretValue","LogGroup","RetentionDays","cdk","ServicePrincipal","FilterPattern","HostedZone","PermissionSetType","sso","isValidSubdomain","ConfigurationError","isValidHostname","Role","FederatedPrincipal","PolicyStatement","Effect","cloudfront","origins"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/helpers/constructEnvName.ts","../../../src/helpers/constructStackName.ts","../../../src/helpers/isEnv.ts","../../../src/helpers/stackTagger.ts","../../../src/JaypieLambda.ts","../../../src/JaypieApiGateway.ts","../../../src/JaypieStack.ts","../../../src/JaypieAppStack.ts","../../../src/JaypieQueuedLambda.ts","../../../src/JaypieBucketQueuedLambda.ts","../../../src/JaypieEnvSecret.ts","../../../src/JaypieDatadogSecret.ts","../../../src/JaypieExpressLambda.ts","../../../src/JaypieHostedZone.ts","../../../src/JaypieInfrastructureStack.ts","../../../src/JaypieMongoDbSecret.ts","../../../src/JaypieOpenAiSecret.ts","../../../src/JaypieSsoGroups.ts","../../../src/JaypieTraceSigningKeySecret.ts","../../../src/JaypieWebDeploymentBucket.ts"],"sourcesContent":["export function constructEnvName(\n name: string,\n opts?: { env?: string; key?: string; nonce?: string },\n) {\n const env = opts?.env ?? process.env.PROJECT_ENV ?? \"build\";\n const key = opts?.key ?? process.env.PROJECT_KEY ?? \"project\";\n const nonce = opts?.nonce ?? process.env.PROJECT_NONCE ?? \"cfe2\";\n return `${env}-${key}-${name}-${nonce}`;\n}\n","export function constructStackName(key?: string): string {\n if (!key) {\n return `cdk-${process.env.PROJECT_SPONSOR}-${process.env.PROJECT_KEY}-${process.env.PROJECT_ENV}-${process.env.PROJECT_NONCE}`;\n } else {\n return `cdk-${process.env.PROJECT_SPONSOR}-${process.env.PROJECT_KEY}-${process.env.PROJECT_ENV}-${process.env.PROJECT_NONCE}-${key}`;\n }\n}\n","import { CDK } from \"@jaypie/cdk\";\n\n/**\n * Check if the current environment matches the given environment\n */\nexport function isEnv(env: string): boolean {\n return process.env.PROJECT_ENV === env;\n}\n\n/**\n * Check if the current environment is production\n */\nexport function isProductionEnv(): boolean {\n return isEnv(CDK.ENV.PRODUCTION);\n}\n\n/**\n * Check if the current environment is sandbox\n */\nexport function isSandboxEnv(): boolean {\n return isEnv(CDK.ENV.SANDBOX);\n}\n","import { Stack, Tags } from \"aws-cdk-lib\";\nimport { constructStackName } from \"./constructStackName\";\n\nconst CDK = {\n CREATION: {\n CDK: \"cdk\",\n },\n ROLE: {\n STACK: \"stack\",\n },\n TAG: {\n BUILD_DATE: \"buildDate\",\n BUILD_HEX: \"buildHex\",\n BUILD_TIME: \"buildTime\",\n COMMIT: \"commit\",\n CREATION: \"creation\",\n ENV: \"env\",\n NONCE: \"nonce\",\n PROJECT: \"project\",\n ROLE: \"role\",\n SERVICE: \"service\",\n SPONSOR: \"sponsor\",\n STACK: \"stack\",\n STACK_SHA: \"stackSha\",\n VERSION: \"version\",\n },\n};\n\nexport function stackTagger(\n stack: Stack,\n { name }: { name?: string } = {},\n): boolean {\n const stackName = name || constructStackName();\n const version =\n process.env.npm_package_version || process.env.PROJECT_VERSION || null;\n\n if (process.env.PROJECT_COMMIT && process.env.PROJECT_COMMIT.length > 8) {\n Tags.of(stack).add(\n CDK.TAG.BUILD_HEX,\n process.env.PROJECT_COMMIT.slice(0, 8),\n );\n }\n Tags.of(stack).add(CDK.TAG.BUILD_DATE, new Date().toISOString());\n Tags.of(stack).add(CDK.TAG.BUILD_TIME, Date.now().toString());\n if (process.env.PROJECT_COMMIT)\n Tags.of(stack).add(CDK.TAG.COMMIT, process.env.PROJECT_COMMIT);\n Tags.of(stack).add(CDK.TAG.CREATION, CDK.CREATION.CDK);\n if (process.env.PROJECT_ENV)\n Tags.of(stack).add(CDK.TAG.ENV, process.env.PROJECT_ENV);\n if (process.env.PROJECT_NONCE)\n Tags.of(stack).add(CDK.TAG.NONCE, process.env.PROJECT_NONCE);\n if (process.env.PROJECT_KEY)\n Tags.of(stack).add(CDK.TAG.PROJECT, process.env.PROJECT_KEY);\n Tags.of(stack).add(CDK.TAG.ROLE, CDK.ROLE.STACK);\n if (process.env.PROJECT_SERVICE)\n Tags.of(stack).add(CDK.TAG.SERVICE, process.env.PROJECT_SERVICE);\n if (process.env.PROJECT_SPONSOR)\n Tags.of(stack).add(CDK.TAG.SPONSOR, process.env.PROJECT_SPONSOR);\n if (stackName) Tags.of(stack).add(CDK.TAG.STACK, stackName);\n if (version) Tags.of(stack).add(CDK.TAG.VERSION, version);\n\n return true;\n}\n","import { Construct } from \"constructs\";\nimport { Duration, Tags, Stack, RemovalPolicy } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport { CDK } from \"@jaypie/cdk\";\nimport * as iam from \"aws-cdk-lib/aws-iam\";\nimport * as cloudwatch from \"aws-cdk-lib/aws-cloudwatch\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { JaypieEnvSecret } from \"./JaypieEnvSecret.js\";\n\nexport interface JaypieLambdaProps {\n code: lambda.Code | string;\n datadogApiKeyArn?: string;\n environment?: { [key: string]: string };\n envSecrets?: { [key: string]: secretsmanager.ISecret };\n handler: string;\n layers?: lambda.ILayerVersion[];\n logRetention?: number;\n memorySize?: number;\n paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;\n paramsAndSecretsOptions?: {\n cacheSize?: number;\n logLevel?: lambda.ParamsAndSecretsLogLevel;\n parameterStoreTtl?: number;\n secretsManagerTtl?: number;\n };\n provisionedConcurrentExecutions?: number;\n reservedConcurrentExecutions?: number;\n roleTag?: string;\n runtime?: lambda.Runtime;\n secrets?: JaypieEnvSecret[];\n timeout?: Duration | number;\n vendorTag?: string;\n}\n\nexport class JaypieLambda extends Construct implements lambda.IFunction {\n private readonly _lambda: lambda.Function;\n private readonly _provisioned?: lambda.Alias;\n private readonly _code: lambda.Code;\n private readonly _reference: lambda.IFunction;\n\n constructor(scope: Construct, id: string, props: JaypieLambdaProps) {\n super(scope, id);\n\n const {\n code,\n datadogApiKeyArn,\n environment: initialEnvironment = {},\n envSecrets = {},\n handler = \"index.handler\",\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n roleTag = CDK.ROLE.PROCESSING,\n runtime = lambda.Runtime.NODEJS_22_X,\n secrets = [],\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n vendorTag,\n } = props;\n\n // Create a mutable copy of the environment variables\n let environment = { ...initialEnvironment };\n\n // Default environment values\n const defaultEnvValues: { [key: string]: string } = {\n AWS_LAMBDA_NODEJS_DISABLE_CALLBACK_WARNING: \"true\",\n };\n\n // Apply default environment values with user overrides\n Object.entries(defaultEnvValues).forEach(([key, defaultValue]) => {\n if (key in initialEnvironment) {\n const userValue = initialEnvironment[key];\n // If user passes a string, use that value\n if (typeof userValue === \"string\") {\n environment[key] = userValue;\n }\n // If user passes non-string falsy value, omit the key\n else if (!userValue) {\n delete environment[key];\n }\n // Ignore non-string truthy values (key already not present)\n } else {\n // No user override, use default value\n environment[key] = defaultValue;\n }\n });\n\n // Default environment variables from process.env if present\n const defaultEnvVars = [\n \"DATADOG_API_KEY_ARN\",\n \"LOG_LEVEL\",\n \"MODULE_LOGGER\",\n \"MODULE_LOG_LEVEL\",\n \"PROJECT_COMMIT\",\n \"PROJECT_ENV\",\n \"PROJECT_KEY\",\n \"PROJECT_SECRET\",\n \"PROJECT_SERVICE\",\n \"PROJECT_SPONSOR\",\n \"PROJECT_VERSION\",\n ];\n\n // Add default environment variables if they exist in process.env\n defaultEnvVars.forEach((envVar) => {\n if (process.env[envVar] && !environment[envVar]) {\n environment[envVar] = process.env[envVar]!;\n }\n });\n\n this._code = typeof code === \"string\" ? lambda.Code.fromAsset(code) : code;\n\n // Create a working copy of layers\n const resolvedLayers = [...layers];\n\n // Determine if we should add Datadog integration\n // Check for datadog API key ARN in different sources\n const resolvedDatadogApiKeyArn =\n datadogApiKeyArn ||\n process.env.DATADOG_API_KEY_ARN ||\n process.env.CDK_ENV_DATADOG_API_KEY_ARN;\n\n // Add Datadog integration if API key is available\n if (resolvedDatadogApiKeyArn) {\n // Add Datadog Node.js layer\n const datadogNodeLayer = lambda.LayerVersion.fromLayerVersionArn(\n this,\n \"DatadogNodeLayer\",\n `arn:aws:lambda:${Stack.of(this).region}:464622532012:layer:Datadog-Node20-x:${CDK.DATADOG.LAYER.NODE}`,\n );\n resolvedLayers.push(datadogNodeLayer);\n\n // Add Datadog Extension layer\n const datadogExtensionLayer = lambda.LayerVersion.fromLayerVersionArn(\n this,\n \"DatadogExtensionLayer\",\n `arn:aws:lambda:${Stack.of(this).region}:464622532012:layer:Datadog-Extension:${CDK.DATADOG.LAYER.EXTENSION}`,\n );\n resolvedLayers.push(datadogExtensionLayer);\n\n // Set Datadog environment variables\n Object.assign(environment, {\n DD_API_KEY_SECRET_ARN: resolvedDatadogApiKeyArn,\n DD_ENV: process.env.PROJECT_ENV || \"\",\n DD_SERVICE: process.env.PROJECT_SERVICE || \"\",\n DD_SITE: CDK.DATADOG.SITE,\n DD_TAGS: `${CDK.TAG.SPONSOR}:${process.env.PROJECT_SPONSOR || \"\"}`,\n });\n }\n\n // Configure ParamsAndSecrets layer\n let resolvedParamsAndSecrets:\n | lambda.ParamsAndSecretsLayerVersion\n | undefined = undefined;\n\n if (paramsAndSecrets !== false) {\n if (paramsAndSecrets instanceof lambda.ParamsAndSecretsLayerVersion) {\n resolvedParamsAndSecrets = paramsAndSecrets;\n } else {\n // Create default ParamsAndSecrets layer\n resolvedParamsAndSecrets =\n lambda.ParamsAndSecretsLayerVersion.fromVersion(\n lambda.ParamsAndSecretsVersions.V1_0_103,\n {\n cacheSize: paramsAndSecretsOptions?.cacheSize,\n logLevel:\n paramsAndSecretsOptions?.logLevel ||\n lambda.ParamsAndSecretsLogLevel.WARN,\n parameterStoreTtl: paramsAndSecretsOptions?.parameterStoreTtl\n ? Duration.seconds(paramsAndSecretsOptions.parameterStoreTtl)\n : undefined,\n secretsManagerTtl: paramsAndSecretsOptions?.secretsManagerTtl\n ? Duration.seconds(paramsAndSecretsOptions.secretsManagerTtl)\n : undefined,\n },\n );\n }\n }\n\n // Process secrets environment variables\n const secretsEnvironment = Object.entries(envSecrets).reduce(\n (acc, [key, secret]) => ({\n ...acc,\n [`SECRET_${key}`]: secret.secretName,\n }),\n {},\n );\n\n // Process JaypieEnvSecret array\n const jaypieSecretsEnvironment = secrets.reduce((acc, secret) => {\n if (secret.envKey) {\n return {\n ...acc,\n [`SECRET_${secret.envKey}`]: secret.secretName,\n };\n }\n return acc;\n }, {});\n\n // Create Lambda Function\n this._lambda = new lambda.Function(this, \"Function\", {\n code: this._code,\n environment: {\n ...environment,\n ...secretsEnvironment,\n ...jaypieSecretsEnvironment,\n },\n handler,\n layers: resolvedLayers,\n logRetention,\n memorySize,\n paramsAndSecrets: resolvedParamsAndSecrets,\n reservedConcurrentExecutions,\n runtime,\n timeout:\n typeof timeout === \"number\" ? Duration.seconds(timeout) : timeout,\n // Enable auto-publishing of versions when using provisioned concurrency\n currentVersionOptions:\n provisionedConcurrentExecutions !== undefined\n ? {\n removalPolicy: RemovalPolicy.RETAIN,\n description: \"Auto-published version for provisioned concurrency\",\n // Don't set provisioned concurrency here - it will be set on the alias\n }\n : undefined,\n });\n\n // Grant secret read permissions\n Object.values(envSecrets).forEach((secret) => {\n secret.grantRead(this._lambda);\n });\n\n // Grant read permissions for JaypieEnvSecrets\n secrets.forEach((secret) => {\n secret.grantRead(this._lambda);\n });\n\n // Grant Datadog API key read permission if applicable\n if (resolvedDatadogApiKeyArn) {\n const datadogApiKey = secretsmanager.Secret.fromSecretCompleteArn(\n this,\n \"DatadogApiKeyGrant\",\n resolvedDatadogApiKeyArn,\n );\n datadogApiKey.grantRead(this._lambda);\n }\n\n // Configure provisioned concurrency if specified\n if (provisionedConcurrentExecutions !== undefined) {\n // Use currentVersion which is auto-published with proper configuration\n const version = this._lambda.currentVersion;\n\n // Create alias for provisioned concurrency\n this._provisioned = new lambda.Alias(this, \"ProvisionedAlias\", {\n aliasName: \"provisioned\",\n version,\n provisionedConcurrentExecutions,\n });\n\n // Add explicit dependencies to ensure proper creation order\n this._provisioned.node.addDependency(version);\n }\n\n if (roleTag) {\n Tags.of(this._lambda).add(CDK.TAG.ROLE, roleTag);\n }\n if (vendorTag) {\n Tags.of(this._lambda).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n // Assign _reference based on provisioned state\n this._reference =\n this._provisioned !== undefined ? this._provisioned : this._lambda;\n }\n\n // Public accessors\n public get lambda(): lambda.Function {\n return this._lambda;\n }\n\n public get provisioned(): lambda.Alias | undefined {\n return this._provisioned;\n }\n\n public get code(): lambda.Code {\n return this._code;\n }\n\n // IFunction implementation\n public get functionArn(): string {\n return this._reference.functionArn;\n }\n\n public get functionName(): string {\n return this._reference.functionName;\n }\n\n public get grantPrincipal(): iam.IPrincipal {\n return this._reference.grantPrincipal;\n }\n\n public get role(): iam.IRole | undefined {\n return this._reference.role;\n }\n\n public get architecture(): lambda.Architecture {\n return this._reference.architecture;\n }\n\n public get connections(): import(\"aws-cdk-lib/aws-ec2\").Connections {\n return this._reference.connections;\n }\n\n public get isBoundToVpc(): boolean {\n return this._reference.isBoundToVpc;\n }\n\n public get latestVersion(): lambda.IVersion {\n return this._reference.latestVersion;\n }\n\n public get permissionsNode(): import(\"constructs\").Node {\n return this._reference.permissionsNode;\n }\n\n public get resourceArnsForGrantInvoke(): string[] {\n return this._reference.resourceArnsForGrantInvoke;\n }\n\n public addEventSource(source: lambda.IEventSource): void {\n this._reference.addEventSource(source);\n }\n\n public addEventSourceMapping(\n id: string,\n options: lambda.EventSourceMappingOptions,\n ): lambda.EventSourceMapping {\n return this._reference.addEventSourceMapping(id, options);\n }\n\n public addFunctionUrl(\n options?: lambda.FunctionUrlOptions,\n ): lambda.FunctionUrl {\n return this._reference.addFunctionUrl(options);\n }\n\n public addPermission(id: string, permission: lambda.Permission): void {\n this._reference.addPermission(id, permission);\n }\n\n public addToRolePolicy(statement: iam.PolicyStatement): void {\n this._reference.addToRolePolicy(statement);\n }\n\n public addEnvironment(\n key: string,\n value: string,\n options?: lambda.EnvironmentOptions,\n ): lambda.Function {\n return this._lambda.addEnvironment(key, value, options);\n }\n\n public configureAsyncInvoke(options: lambda.EventInvokeConfigOptions): void {\n this._reference.configureAsyncInvoke(options);\n }\n\n public grantInvoke(grantee: iam.IGrantable): iam.Grant {\n return this._reference.grantInvoke(grantee);\n }\n\n public grantInvokeCompositePrincipal(\n compositePrincipal: iam.CompositePrincipal,\n ): iam.Grant[] {\n return this._reference.grantInvokeCompositePrincipal(compositePrincipal);\n }\n\n public grantInvokeUrl(grantee: iam.IGrantable): iam.Grant {\n return this._reference.grantInvokeUrl(grantee);\n }\n\n public metric(\n metricName: string,\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._reference.metric(metricName, props);\n }\n\n public metricDuration(props?: cloudwatch.MetricOptions): cloudwatch.Metric {\n return this._reference.metricDuration(props);\n }\n\n public metricErrors(props?: cloudwatch.MetricOptions): cloudwatch.Metric {\n return this._reference.metricErrors(props);\n }\n\n public metricInvocations(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._reference.metricInvocations(props);\n }\n\n public metricThrottles(props?: cloudwatch.MetricOptions): cloudwatch.Metric {\n return this._reference.metricThrottles(props);\n }\n\n // Additional IFunction implementation\n public grantInvokeLatestVersion(grantee: iam.IGrantable): iam.Grant {\n return this._reference.grantInvokeLatestVersion(grantee);\n }\n\n public grantInvokeVersion(\n grantee: iam.IGrantable,\n version: lambda.Version,\n ): iam.Grant {\n return this._reference.grantInvokeVersion(grantee, version);\n }\n\n public get env() {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public get stack(): Stack {\n return this._reference.stack;\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._reference.applyRemovalPolicy(policy);\n }\n}\n","import { Construct } from \"constructs\";\nimport { RemovalPolicy, Stack, Tags } from \"aws-cdk-lib\";\nimport * as acm from \"aws-cdk-lib/aws-certificatemanager\";\nimport * as apiGateway from \"aws-cdk-lib/aws-apigateway\";\nimport * as route53 from \"aws-cdk-lib/aws-route53\";\nimport * as route53Targets from \"aws-cdk-lib/aws-route53-targets\";\nimport { CDK, mergeDomain } from \"@jaypie/cdk\";\nimport { constructEnvName } from \"./helpers\";\nimport { JaypieLambda } from \"./JaypieLambda\";\n\nexport interface JaypieApiGatewayProps extends apiGateway.LambdaRestApiProps {\n certificate?: boolean | acm.ICertificate;\n host?: string;\n name?: string;\n roleTag?: string;\n zone?: string | route53.IHostedZone;\n}\n\nexport class JaypieApiGateway extends Construct implements apiGateway.IRestApi {\n private readonly _api: apiGateway.LambdaRestApi;\n private readonly _certificate?: acm.ICertificate;\n private readonly _domainName?: apiGateway.DomainName;\n private readonly _host?: string;\n\n constructor(scope: Construct, id: string, props: JaypieApiGatewayProps) {\n super(scope, id);\n\n const {\n certificate = true,\n handler,\n host: propsHost,\n name,\n roleTag = CDK.ROLE.API,\n zone: propsZone,\n } = props;\n\n // Determine zone from props or environment\n let zone = propsZone;\n if (!zone && process.env.CDK_ENV_API_HOSTED_ZONE) {\n zone = process.env.CDK_ENV_API_HOSTED_ZONE;\n }\n\n // Determine host from props or environment\n let host = propsHost;\n if (!host) {\n if (process.env.CDK_ENV_API_HOST_NAME) {\n host = process.env.CDK_ENV_API_HOST_NAME;\n } else if (\n process.env.CDK_ENV_API_SUBDOMAIN &&\n process.env.CDK_ENV_API_HOSTED_ZONE\n ) {\n host = mergeDomain(\n process.env.CDK_ENV_API_SUBDOMAIN,\n process.env.CDK_ENV_API_HOSTED_ZONE,\n );\n }\n }\n\n const apiGatewayName = name || constructEnvName(\"ApiGateway\");\n const certificateName = constructEnvName(\"Certificate\");\n const apiDomainName = constructEnvName(\"ApiDomainName\");\n\n let hostedZone: route53.IHostedZone | undefined;\n let certificateToUse: acm.ICertificate | undefined;\n\n if (host && zone) {\n if (typeof zone === \"string\") {\n hostedZone = route53.HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: zone,\n });\n } else {\n hostedZone = zone;\n }\n\n if (certificate === true) {\n certificateToUse = new acm.Certificate(this, certificateName, {\n domainName: host,\n validation: acm.CertificateValidation.fromDns(hostedZone),\n });\n Tags.of(certificateToUse).add(CDK.TAG.ROLE, CDK.ROLE.HOSTING);\n } else if (typeof certificate === \"object\") {\n certificateToUse = certificate;\n }\n\n this._certificate = certificateToUse;\n this._host = host;\n }\n\n const {\n // * `...lambdaRestApiProps` cannot be moved to the first const destructuring because it needs to exclude the custom properties first.\n // Ignore the variables we already assigned to other properties\n /* eslint-disable @typescript-eslint/no-unused-vars */\n certificate: _certificate,\n host: _host,\n name: _name,\n roleTag: _roleTag,\n zone: _zone,\n handler: _handler,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...lambdaRestApiProps\n } = props;\n\n // Check if handler is a JaypieLambda instance and use provisioned alias if available\n let handlerToUse = handler;\n if (handler instanceof JaypieLambda && handler.provisioned) {\n handlerToUse = handler.provisioned;\n }\n\n this._api = new apiGateway.LambdaRestApi(this, apiGatewayName, {\n handler: handlerToUse,\n ...lambdaRestApiProps,\n });\n Tags.of(this._api).add(CDK.TAG.ROLE, roleTag);\n\n if (host && certificateToUse && hostedZone) {\n this._domainName = this._api.addDomainName(apiDomainName, {\n domainName: host,\n certificate: certificateToUse,\n });\n Tags.of(this._domainName).add(CDK.TAG.ROLE, roleTag);\n\n const record = new route53.ARecord(this, \"AliasRecord\", {\n recordName: host,\n target: route53.RecordTarget.fromAlias(\n new route53Targets.ApiGatewayDomain(this._domainName),\n ),\n zone: hostedZone,\n });\n Tags.of(record).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n }\n }\n\n public get api(): apiGateway.LambdaRestApi {\n return this._api;\n }\n\n public get url(): string {\n return this._api.url;\n }\n\n public get certificateArn(): string | undefined {\n return this._certificate?.certificateArn;\n }\n\n public get domainName(): string | undefined {\n return this._domainName?.domainName;\n }\n\n public get host(): string | undefined {\n return this._host;\n }\n\n public get restApiId(): string {\n return this._api.restApiId;\n }\n\n public get restApiName(): string {\n return this._api.restApiName;\n }\n\n public get restApiRootResourceId(): string {\n return this._api.restApiRootResourceId;\n }\n\n public get deploymentStage(): apiGateway.Stage {\n return this._api.deploymentStage;\n }\n\n public get domainNameAliasDomainName(): string | undefined {\n return this._domainName?.domainNameAliasDomainName;\n }\n\n public get domainNameAliasHostedZoneId(): string | undefined {\n return this._domainName?.domainNameAliasHostedZoneId;\n }\n\n public get root(): apiGateway.IResource {\n return this._api.root;\n }\n\n public get env() {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public get stack(): Stack {\n return this._api.stack;\n }\n\n public arnForExecuteApi(\n method?: string,\n path?: string,\n stage?: string,\n ): string {\n return this._api.arnForExecuteApi(method, path, stage);\n }\n\n public metric(\n metricName: string,\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metric(metricName, props);\n }\n\n public metricCacheHitCount(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricCacheHitCount(props);\n }\n\n public metricCacheMissCount(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricCacheMissCount(props);\n }\n\n public metricClientError(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricClientError(props);\n }\n\n public metricCount(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricCount(props);\n }\n\n public metricIntegrationLatency(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricIntegrationLatency(props);\n }\n\n public metricLatency(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricLatency(props);\n }\n\n public metricServerError(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._api.metricServerError(props);\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._api.applyRemovalPolicy(policy);\n }\n}\n","import { Stack, StackProps } from \"aws-cdk-lib\";\nimport { Construct } from \"constructs\";\nimport { constructStackName, stackTagger } from \"./helpers\";\n\nexport interface JaypieStackProps extends StackProps {\n key?: string;\n}\n\nexport class JaypieStack extends Stack {\n constructor(scope: Construct, id: string, props: JaypieStackProps = {}) {\n const { key, ...stackProps } = props;\n\n // Handle stackName\n if (!stackProps.stackName) {\n stackProps.stackName = constructStackName(key);\n }\n\n // Handle env\n stackProps.env = {\n account: process.env.CDK_DEFAULT_ACCOUNT,\n region: process.env.CDK_DEFAULT_REGION,\n ...stackProps.env,\n };\n\n super(scope, id, stackProps);\n\n // Apply tags\n stackTagger(this, { name: stackProps.stackName });\n }\n}\n","import { Construct } from \"constructs\";\nimport { JaypieStack, JaypieStackProps } from \"./JaypieStack\";\nimport { constructStackName } from \"./helpers\";\n\nexport class JaypieAppStack extends JaypieStack {\n constructor(scope: Construct, id: string, props: JaypieStackProps = {}) {\n const { key = \"app\", ...stackProps } = props;\n\n // Handle stackName\n if (!stackProps.stackName) {\n stackProps.stackName = constructStackName(key);\n }\n\n super(scope, id, { key, ...stackProps });\n }\n}\n","import { Construct } from \"constructs\";\nimport { Duration, Tags, Stack, RemovalPolicy } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport * as sqs from \"aws-cdk-lib/aws-sqs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport * as lambdaEventSources from \"aws-cdk-lib/aws-lambda-event-sources\";\nimport * as iam from \"aws-cdk-lib/aws-iam\";\nimport * as cloudwatch from \"aws-cdk-lib/aws-cloudwatch\";\nimport * as kms from \"aws-cdk-lib/aws-kms\";\nimport { JaypieLambda, JaypieLambdaProps } from \"./JaypieLambda.js\";\n\nexport interface JaypieQueuedLambdaProps extends JaypieLambdaProps {\n batchSize?: number;\n fifo?: boolean;\n visibilityTimeout?: Duration | number;\n}\n\nexport class JaypieQueuedLambda\n extends Construct\n implements lambda.IFunction, sqs.IQueue\n{\n private readonly _queue: sqs.Queue;\n private readonly _lambdaConstruct: JaypieLambda;\n\n constructor(scope: Construct, id: string, props: JaypieQueuedLambdaProps) {\n super(scope, id);\n\n const {\n batchSize = 1,\n code,\n environment = {},\n envSecrets = {},\n fifo = true,\n handler = \"index.handler\",\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n reservedConcurrentExecutions,\n roleTag,\n runtime = lambda.Runtime.NODEJS_22_X,\n secrets = [],\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n vendorTag,\n visibilityTimeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n } = props;\n\n // Create SQS Queue\n this._queue = new sqs.Queue(this, \"Queue\", {\n fifo,\n visibilityTimeout:\n typeof visibilityTimeout === \"number\"\n ? Duration.seconds(visibilityTimeout)\n : visibilityTimeout,\n });\n if (roleTag) {\n Tags.of(this._queue).add(CDK.TAG.ROLE, roleTag);\n }\n if (vendorTag) {\n Tags.of(this._queue).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n // Create Lambda with JaypieLambda\n this._lambdaConstruct = new JaypieLambda(this, \"Function\", {\n code,\n environment: {\n ...environment,\n CDK_ENV_QUEUE_URL: this._queue.queueUrl,\n },\n envSecrets,\n handler,\n layers,\n logRetention,\n memorySize,\n paramsAndSecrets,\n reservedConcurrentExecutions,\n roleTag,\n runtime,\n secrets,\n timeout,\n vendorTag,\n });\n\n // Set up queue and lambda integration\n this._queue.grantConsumeMessages(this._lambdaConstruct);\n this._queue.grantSendMessages(this._lambdaConstruct);\n this._lambdaConstruct.addEventSource(\n new lambdaEventSources.SqsEventSource(this._queue, {\n batchSize,\n }),\n );\n }\n\n // Public accessors\n public get queue(): sqs.Queue {\n return this._queue;\n }\n\n public get lambda(): lambda.Function {\n return this._lambdaConstruct.lambda;\n }\n\n public get code(): lambda.Code {\n return this._lambdaConstruct.code;\n }\n\n // IFunction implementation\n public get functionArn(): string {\n return this._lambdaConstruct.functionArn;\n }\n\n public get functionName(): string {\n return this._lambdaConstruct.functionName;\n }\n\n public get grantPrincipal(): import(\"aws-cdk-lib/aws-iam\").IPrincipal {\n return this._lambdaConstruct.grantPrincipal;\n }\n\n public get role(): import(\"aws-cdk-lib/aws-iam\").IRole | undefined {\n return this._lambdaConstruct.role;\n }\n\n public get architecture(): lambda.Architecture {\n return this._lambdaConstruct.architecture;\n }\n\n public get connections(): import(\"aws-cdk-lib/aws-ec2\").Connections {\n return this._lambdaConstruct.connections;\n }\n\n public get isBoundToVpc(): boolean {\n return this._lambdaConstruct.isBoundToVpc;\n }\n\n public get latestVersion(): lambda.IVersion {\n return this._lambdaConstruct.latestVersion;\n }\n\n public get permissionsNode(): import(\"constructs\").Node {\n return this._lambdaConstruct.permissionsNode;\n }\n\n public get resourceArnsForGrantInvoke(): string[] {\n return this._lambdaConstruct.resourceArnsForGrantInvoke;\n }\n\n public addEventSource(source: lambda.IEventSource): void {\n this._lambdaConstruct.addEventSource(source);\n }\n\n public addEventSourceMapping(\n id: string,\n options: lambda.EventSourceMappingOptions,\n ): lambda.EventSourceMapping {\n return this._lambdaConstruct.addEventSourceMapping(id, options);\n }\n\n public addFunctionUrl(\n options?: lambda.FunctionUrlOptions,\n ): lambda.FunctionUrl {\n return this._lambdaConstruct.addFunctionUrl(options);\n }\n\n public addPermission(id: string, permission: lambda.Permission): void {\n this._lambdaConstruct.addPermission(id, permission);\n }\n\n public addToRolePolicy(\n statement: import(\"aws-cdk-lib/aws-iam\").PolicyStatement,\n ): void {\n this._lambdaConstruct.addToRolePolicy(statement);\n }\n\n public configureAsyncInvoke(options: lambda.EventInvokeConfigOptions): void {\n this._lambdaConstruct.configureAsyncInvoke(options);\n }\n\n public grantInvoke(\n grantee: import(\"aws-cdk-lib/aws-iam\").IGrantable,\n ): import(\"aws-cdk-lib/aws-iam\").Grant {\n return this._lambdaConstruct.grantInvoke(grantee);\n }\n\n public grantInvokeCompositePrincipal(\n compositePrincipal: import(\"aws-cdk-lib/aws-iam\").CompositePrincipal,\n ): import(\"aws-cdk-lib/aws-iam\").Grant[] {\n return this._lambdaConstruct.grantInvokeCompositePrincipal(\n compositePrincipal,\n );\n }\n\n public grantInvokeUrl(\n grantee: import(\"aws-cdk-lib/aws-iam\").IGrantable,\n ): import(\"aws-cdk-lib/aws-iam\").Grant {\n return this._lambdaConstruct.grantInvokeUrl(grantee);\n }\n\n public metric(\n metricName: string,\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metric(metricName, props);\n }\n\n public metricDuration(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricDuration(props);\n }\n\n public metricErrors(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricErrors(props);\n }\n\n public metricInvocations(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricInvocations(props);\n }\n\n public metricThrottles(\n props?: import(\"aws-cdk-lib/aws-cloudwatch\").MetricOptions,\n ): import(\"aws-cdk-lib/aws-cloudwatch\").Metric {\n return this._lambdaConstruct.metricThrottles(props);\n }\n\n // Additional IFunction implementation\n public grantInvokeLatestVersion(grantee: iam.IGrantable): iam.Grant {\n return this._lambdaConstruct.grantInvokeLatestVersion(grantee);\n }\n\n public grantInvokeVersion(\n grantee: iam.IGrantable,\n version: lambda.Version,\n ): iam.Grant {\n return this._lambdaConstruct.grantInvokeVersion(grantee, version);\n }\n\n public get env() {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public get stack(): Stack {\n return Stack.of(this);\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._lambdaConstruct.applyRemovalPolicy(policy);\n this._queue.applyRemovalPolicy(policy);\n }\n\n // IQueue implementation\n public get fifo(): boolean {\n return this._queue.fifo;\n }\n\n public get queueArn(): string {\n return this._queue.queueArn;\n }\n\n public get queueName(): string {\n return this._queue.queueName;\n }\n\n public get queueUrl(): string {\n return this._queue.queueUrl;\n }\n\n public get encryptionMasterKey(): kms.IKey | undefined {\n return this._queue.encryptionMasterKey;\n }\n\n public addToResourcePolicy(\n statement: iam.PolicyStatement,\n ): iam.AddToResourcePolicyResult {\n return this._queue.addToResourcePolicy(statement);\n }\n\n public grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant {\n return this._queue.grant(grantee, ...actions);\n }\n\n public grantConsumeMessages(grantee: iam.IGrantable): iam.Grant {\n return this._queue.grantConsumeMessages(grantee);\n }\n\n public grantPurge(grantee: iam.IGrantable): iam.Grant {\n return this._queue.grantPurge(grantee);\n }\n\n public grantSendMessages(grantee: iam.IGrantable): iam.Grant {\n return this._queue.grantSendMessages(grantee);\n }\n\n // Queue metrics\n public metricApproximateAgeOfOldestMessage(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateAgeOfOldestMessage(props);\n }\n\n public metricApproximateNumberOfMessagesDelayed(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateNumberOfMessagesDelayed(props);\n }\n\n public metricApproximateNumberOfMessagesNotVisible(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateNumberOfMessagesNotVisible(props);\n }\n\n public metricApproximateNumberOfMessagesVisible(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricApproximateNumberOfMessagesVisible(props);\n }\n\n public metricNumberOfEmptyReceives(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfEmptyReceives(props);\n }\n\n public metricNumberOfMessagesDeleted(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfMessagesDeleted(props);\n }\n\n public metricNumberOfMessagesReceived(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfMessagesReceived(props);\n }\n\n public metricNumberOfMessagesSent(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricNumberOfMessagesSent(props);\n }\n\n public metricSentMessageSize(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._queue.metricSentMessageSize(props);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Tags, RemovalPolicy } from \"aws-cdk-lib\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\nimport * as s3n from \"aws-cdk-lib/aws-s3-notifications\";\nimport { CDK } from \"@jaypie/cdk\";\nimport * as iam from \"aws-cdk-lib/aws-iam\";\nimport * as cloudwatch from \"aws-cdk-lib/aws-cloudwatch\";\nimport {\n JaypieQueuedLambda,\n JaypieQueuedLambdaProps,\n} from \"./JaypieQueuedLambda.js\";\n\nexport interface JaypieBucketQueuedLambdaProps extends JaypieQueuedLambdaProps {\n bucketName?: string;\n bucketOptions?: s3.BucketProps;\n}\n\nexport class JaypieBucketQueuedLambda\n extends JaypieQueuedLambda\n implements s3.IBucket\n{\n private readonly _bucket: s3.Bucket;\n\n constructor(\n scope: Construct,\n id: string,\n props: JaypieBucketQueuedLambdaProps,\n ) {\n props.fifo = false; // S3 event notifications are not supported for FIFO queues\n super(scope, id, props);\n\n const { bucketName, roleTag, vendorTag, bucketOptions = {} } = props;\n\n // Create S3 Bucket\n this._bucket = new s3.Bucket(this, \"Bucket\", {\n bucketName: bucketOptions.bucketName || bucketName,\n removalPolicy: bucketOptions.removalPolicy || RemovalPolicy.RETAIN,\n ...bucketOptions,\n });\n\n // Add tags to bucket\n if (roleTag) {\n Tags.of(this._bucket).add(CDK.TAG.ROLE, roleTag);\n }\n if (vendorTag) {\n Tags.of(this._bucket).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n // Add an event notification from the bucket to the queue\n this._bucket.addEventNotification(\n s3.EventType.OBJECT_CREATED,\n new s3n.SqsDestination(this.queue),\n );\n\n // Grant the lambda access to the bucket\n this._bucket.grantReadWrite(this);\n\n // Add environment variable for bucket name\n this.lambda.addEnvironment(\"CDK_ENV_BUCKET_NAME\", this._bucket.bucketName);\n }\n\n // Public accessors\n public get bucket(): s3.Bucket {\n return this._bucket;\n }\n\n // IBucket implementation\n public get bucketArn(): string {\n return this._bucket.bucketArn;\n }\n\n public get bucketDomainName(): string {\n return this._bucket.bucketDomainName;\n }\n\n public get bucketDualStackDomainName(): string {\n return this._bucket.bucketDualStackDomainName;\n }\n\n public get bucketName(): string {\n return this._bucket.bucketName;\n }\n\n public get bucketRegionalDomainName(): string {\n return this._bucket.bucketRegionalDomainName;\n }\n\n public get bucketWebsiteDomainName(): string {\n return this._bucket.bucketWebsiteDomainName;\n }\n\n public get bucketWebsiteUrl(): string {\n return this._bucket.bucketWebsiteUrl;\n }\n\n public get encryptionKey(): undefined | import(\"aws-cdk-lib/aws-kms\").IKey {\n return this._bucket.encryptionKey;\n }\n\n public get isWebsite(): boolean {\n return this._bucket.isWebsite || false;\n }\n\n public get policy(): s3.BucketPolicy | undefined {\n return this._bucket.policy;\n }\n\n public addEventNotification(\n event: s3.EventType,\n dest: s3.IBucketNotificationDestination,\n filters?: s3.NotificationKeyFilter[],\n ): void {\n this._bucket.addEventNotification(event, dest, ...filters);\n }\n\n public addObjectCreatedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this._bucket.addObjectCreatedNotification(dest, ...filters);\n }\n\n public addObjectRemovedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this._bucket.addObjectRemovedNotification(dest, ...filters);\n }\n\n public addToResourcePolicy(\n permission: iam.PolicyStatement,\n ): iam.AddToResourcePolicyResult {\n return this._bucket.addToResourcePolicy(permission);\n }\n\n public arnForObjects(objectKeyPattern: string): string {\n return this._bucket.arnForObjects(objectKeyPattern);\n }\n\n public enableEventBridgeNotification(): void {\n this._bucket.enableEventBridgeNotification();\n }\n\n public grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant {\n return this._bucket.grant(grantee, ...actions);\n }\n\n public grantDelete(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantDelete(grantee, objectsKeyPattern);\n }\n\n public grantPublicAccess(\n keyPrefix?: string,\n ...allowedActions: string[]\n ): iam.Grant {\n return this._bucket.grantPublicAccess(keyPrefix, ...allowedActions);\n }\n\n public grantPut(grantee: iam.IGrantable, objectsKeyPattern?: any): iam.Grant {\n return this._bucket.grantPut(grantee, objectsKeyPattern);\n }\n\n public grantPutAcl(\n grantee: iam.IGrantable,\n objectsKeyPattern?: string,\n ): iam.Grant {\n return this._bucket.grantPutAcl(grantee, objectsKeyPattern);\n }\n\n public grantRead(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantRead(grantee, objectsKeyPattern);\n }\n\n public grantReadWrite(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantReadWrite(grantee, objectsKeyPattern);\n }\n\n public grantWrite(\n grantee: iam.IGrantable,\n objectsKeyPattern?: any,\n ): iam.Grant {\n return this._bucket.grantWrite(grantee, objectsKeyPattern);\n }\n\n public onCloudTrailEvent(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): import(\"aws-cdk-lib/aws-events\").Rule {\n return this._bucket.onCloudTrailEvent(id, options);\n }\n\n public onCloudTrailPutObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): import(\"aws-cdk-lib/aws-events\").Rule {\n return this._bucket.onCloudTrailPutObject(id, options);\n }\n\n public onCloudTrailWriteObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): import(\"aws-cdk-lib/aws-events\").Rule {\n return this._bucket.onCloudTrailWriteObject(id, options);\n }\n\n public s3UrlForObject(key?: string): string {\n return this._bucket.s3UrlForObject(key);\n }\n\n public transferAccelerationUrlForObject(\n key?: string,\n options?: s3.TransferAccelerationUrlOptions,\n ): string {\n return this._bucket.transferAccelerationUrlForObject(key, options);\n }\n\n public urlForObject(key?: string): string {\n return this._bucket.urlForObject(key);\n }\n\n public virtualHostedUrlForObject(\n key?: string,\n options?: s3.VirtualHostedStyleUrlOptions,\n ): string {\n return this._bucket.virtualHostedUrlForObject(key, options);\n }\n\n // Bucket metrics\n public metricAllRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricAllRequests(props);\n }\n\n public metricBucketSizeBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricBucketSizeBytes(props);\n }\n\n public metricDeleteRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricDeleteRequests(props);\n }\n\n public metricDownloadBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricDownloadBytes(props);\n }\n\n public metricFirstByteLatency(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricFirstByteLatency(props);\n }\n\n public metricGetRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricGetRequests(props);\n }\n\n public metricHeadRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricHeadRequests(props);\n }\n\n public metricHttpRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricHttpRequests(props);\n }\n\n public metricListRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricListRequests(props);\n }\n\n public metricNumberOfObjects(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricNumberOfObjects(props);\n }\n\n public metricPostRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricPostRequests(props);\n }\n\n public metricPutRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricPutRequests(props);\n }\n\n public metricSelectRequests(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricSelectRequests(props);\n }\n\n public metricSelectScannedBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricSelectScannedBytes(props);\n }\n\n public metricUploadBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricUploadBytes(props);\n }\n\n public metricSelectReturnedBytes(\n props?: cloudwatch.MetricOptions,\n ): cloudwatch.Metric {\n return this._bucket.metricSelectReturnedBytes(props);\n }\n\n // Override applyRemovalPolicy to apply to all resources\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n super.applyRemovalPolicy(policy);\n this._bucket.applyRemovalPolicy(policy);\n }\n}\n","import { Construct } from \"constructs\";\nimport {\n CfnOutput,\n Fn,\n SecretValue,\n Tags,\n RemovalPolicy,\n Stack,\n} from \"aws-cdk-lib\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { CDK } from \"@jaypie/cdk\";\nimport {\n ISecret,\n ISecretAttachmentTarget,\n RotationSchedule,\n RotationScheduleOptions,\n} from \"aws-cdk-lib/aws-secretsmanager\";\nimport { IKey } from \"aws-cdk-lib/aws-kms\";\nimport {\n Grant,\n IGrantable,\n PolicyStatement,\n AddToResourcePolicyResult,\n} from \"aws-cdk-lib/aws-iam\";\n\n// It is a consumer if the environment is ephemeral\nfunction checkEnvIsConsumer(env = process.env): boolean {\n return (\n env.PROJECT_ENV === CDK.ENV.PERSONAL ||\n !!env.CDK_ENV_PERSONAL ||\n /** @deprecated */ env.PROJECT_ENV === \"ephemeral\" ||\n /** @deprecated */ !!env.CDK_ENV_EPHEMERAL\n );\n}\n\nfunction checkEnvIsProvider(env = process.env): boolean {\n return env.PROJECT_ENV === CDK.ENV.SANDBOX;\n}\n\nfunction cleanName(name: string): string {\n return name.replace(/[^a-zA-Z0-9:-]/g, \"\");\n}\n\nfunction exportEnvName(name: string, env = process.env): string {\n let rawName;\n if (checkEnvIsProvider(env)) {\n rawName = `env-${env.PROJECT_ENV}-${env.PROJECT_KEY}-${name}`;\n // Clean the entire name to only allow alphanumeric, colons, and hyphens\n return cleanName(rawName);\n } else {\n if (checkEnvIsConsumer(env)) {\n rawName = `env-${CDK.ENV.SANDBOX}-${env.PROJECT_KEY}-${name}`;\n } else {\n rawName = `env-${env.PROJECT_ENV}-${env.PROJECT_KEY}-${name}`;\n }\n }\n return cleanName(rawName);\n}\n\nexport interface JaypieEnvSecretProps {\n consumer?: boolean;\n envKey?: string;\n export?: string;\n provider?: boolean;\n roleTag?: string;\n vendorTag?: string;\n value?: string;\n}\n\nexport class JaypieEnvSecret extends Construct implements ISecret {\n private readonly _envKey?: string;\n private readonly _secret: secretsmanager.ISecret;\n\n constructor(scope: Construct, id: string, props?: JaypieEnvSecretProps) {\n super(scope, id);\n\n const {\n consumer = checkEnvIsConsumer(),\n envKey,\n export: exportParam,\n provider = checkEnvIsProvider(),\n roleTag,\n vendorTag,\n value,\n } = props || {};\n\n this._envKey = envKey;\n\n let exportName;\n\n if (!exportParam) {\n exportName = exportEnvName(id);\n } else {\n exportName = cleanName(exportParam);\n }\n\n if (consumer) {\n const secretName = Fn.importValue(exportName);\n this._secret = secretsmanager.Secret.fromSecretNameV2(\n this,\n id,\n secretName,\n );\n\n // Add CfnOutput for consumer secrets\n new CfnOutput(this, `ConsumedName`, {\n value: this._secret.secretName,\n });\n } else {\n const secretValue =\n envKey && process.env[envKey] ? process.env[envKey] : value;\n\n const secretProps: secretsmanager.SecretProps = {\n secretStringValue: secretValue\n ? SecretValue.unsafePlainText(secretValue)\n : undefined,\n };\n\n this._secret = new secretsmanager.Secret(this, id, secretProps);\n\n if (roleTag) {\n Tags.of(this._secret).add(CDK.TAG.ROLE, roleTag);\n }\n\n if (vendorTag) {\n Tags.of(this._secret).add(CDK.TAG.VENDOR, vendorTag);\n }\n\n if (provider) {\n new CfnOutput(this, `ProvidedName`, {\n value: this._secret.secretName,\n exportName,\n });\n } else {\n new CfnOutput(this, `CreatedName`, {\n value: this._secret.secretName,\n });\n }\n }\n }\n\n // IResource implementation\n public get stack(): Stack {\n return Stack.of(this);\n }\n\n public get env(): { account: string; region: string } {\n return {\n account: Stack.of(this).account,\n region: Stack.of(this).region,\n };\n }\n\n public applyRemovalPolicy(policy: RemovalPolicy): void {\n this._secret.applyRemovalPolicy(policy);\n }\n\n // ISecret implementation\n public get secretArn(): string {\n return this._secret.secretArn;\n }\n\n public get secretName(): string {\n return this._secret.secretName;\n }\n\n public get secretFullArn(): string | undefined {\n return this._secret.secretFullArn;\n }\n\n public get encryptionKey(): IKey | undefined {\n return this._secret.encryptionKey;\n }\n\n public get secretValue(): SecretValue {\n return this._secret.secretValue;\n }\n\n public secretValueFromJson(key: string): SecretValue {\n return this._secret.secretValueFromJson(key);\n }\n\n public grantRead(grantee: IGrantable, versionStages?: string[]): Grant {\n return this._secret.grantRead(grantee, versionStages);\n }\n\n public grantWrite(grantee: IGrantable): Grant {\n return this._secret.grantWrite(grantee);\n }\n\n public addRotationSchedule(\n id: string,\n options: RotationScheduleOptions,\n ): RotationSchedule {\n return this._secret.addRotationSchedule(id, options);\n }\n\n public addToResourcePolicy(\n statement: PolicyStatement,\n ): AddToResourcePolicyResult {\n return this._secret.addToResourcePolicy(statement);\n }\n\n public denyAccountRootDelete(): void {\n this._secret.denyAccountRootDelete();\n }\n\n public attach(target: ISecretAttachmentTarget): ISecret {\n return this._secret.attach(target);\n }\n\n public get envKey(): string | undefined {\n return this._envKey;\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieDatadogSecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"MongoConnectionString\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"DATADOG_API_KEY\",\n roleTag: CDK.ROLE.MONITORING,\n vendorTag: CDK.VENDOR.DATADOG,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Duration } from \"aws-cdk-lib\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieLambda, JaypieLambdaProps } from \"./JaypieLambda.js\";\n\nexport class JaypieExpressLambda extends JaypieLambda {\n constructor(scope: Construct, id: string, props: JaypieLambdaProps) {\n super(scope, id, {\n timeout: Duration.seconds(CDK.DURATION.EXPRESS_API),\n roleTag: CDK.ROLE.API,\n ...props,\n });\n }\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport * as cdk from \"aws-cdk-lib\";\nimport { ServicePrincipal } from \"aws-cdk-lib/aws-iam\";\nimport {\n LogGroup,\n FilterPattern,\n RetentionDays,\n ILogGroup,\n} from \"aws-cdk-lib/aws-logs\";\nimport { HostedZone, IHostedZone } from \"aws-cdk-lib/aws-route53\";\nimport { Construct } from \"constructs\";\nimport { LambdaDestination } from \"aws-cdk-lib/aws-logs-destinations\";\n\nconst SERVICE = {\n ROUTE53: \"route53.amazonaws.com\",\n} as const;\n\ninterface JaypieHostedZoneProps {\n /**\n * The domain name for the hosted zone\n */\n zoneName: string;\n /**\n * The service tag value\n * @default CDK.SERVICE.INFRASTRUCTURE\n */\n service?: string;\n /**\n * Optional project tag value\n */\n project?: string;\n /**\n * Optional log destination\n */\n destination?: LambdaDestination;\n}\n\nexport class JaypieHostedZone extends Construct {\n public readonly hostedZone: IHostedZone;\n public readonly logGroup: ILogGroup;\n\n /**\n * Create a new hosted zone with query logging\n */\n constructor(scope: Construct, id: string, props: JaypieHostedZoneProps) {\n super(scope, id);\n\n const { destination, zoneName, project } = props;\n const service = props.service || CDK.SERVICE.INFRASTRUCTURE;\n\n // Create the log group\n this.logGroup = new LogGroup(this, \"LogGroup\", {\n logGroupName: process.env.PROJECT_NONCE\n ? `/aws/route53/${zoneName}-${process.env.PROJECT_NONCE}`\n : `/aws/route53/${zoneName}`,\n retention: RetentionDays.ONE_WEEK,\n });\n\n // Add tags\n cdk.Tags.of(this.logGroup).add(CDK.TAG.SERVICE, service);\n cdk.Tags.of(this.logGroup).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n if (project) {\n cdk.Tags.of(this.logGroup).add(CDK.TAG.PROJECT, project);\n }\n\n // Grant Route 53 permissions to write to the log group\n this.logGroup.grantWrite(new ServicePrincipal(SERVICE.ROUTE53));\n\n // Add destination if provided\n if (destination) {\n this.logGroup.addSubscriptionFilter(\"DatadogLambdaDestination\", {\n destination,\n filterPattern: FilterPattern.allEvents(),\n });\n }\n\n // Create the hosted zone\n this.hostedZone = new HostedZone(this, \"HostedZone\", {\n queryLogsLogGroupArn: this.logGroup.logGroupArn,\n zoneName,\n });\n\n // Add tags\n cdk.Tags.of(this.hostedZone).add(CDK.TAG.SERVICE, service);\n cdk.Tags.of(this.hostedZone).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n if (project) {\n cdk.Tags.of(this.hostedZone).add(CDK.TAG.PROJECT, project);\n }\n }\n}\n","import { Tags } from \"aws-cdk-lib\";\nimport { Construct } from \"constructs\";\nimport { JaypieStack, JaypieStackProps } from \"./JaypieStack\";\nimport { constructStackName } from \"./helpers\";\n\nconst CDK = {\n TAG: {\n STACK_SHA: \"stackSha\",\n },\n};\n\nexport class JaypieInfrastructureStack extends JaypieStack {\n constructor(scope: Construct, id: string, props: JaypieStackProps = {}) {\n const { key = \"infra\", ...stackProps } = props;\n\n // Handle stackName\n if (!stackProps.stackName) {\n stackProps.stackName = constructStackName(key);\n }\n\n super(scope, id, { key, ...stackProps });\n\n // Add infrastructure-specific tag\n if (process.env.CDK_ENV_INFRASTRUCTURE_STACK_SHA) {\n Tags.of(this).add(\n CDK.TAG.STACK_SHA,\n process.env.CDK_ENV_INFRASTRUCTURE_STACK_SHA,\n );\n }\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieMongoDbSecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"MongoConnectionString\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"MONGODB_URI\",\n roleTag: CDK.ROLE.STORAGE,\n vendorTag: CDK.VENDOR.MONGODB,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieOpenAiSecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"OpenAiApiKey\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"OPENAI_API_KEY\",\n roleTag: CDK.ROLE.PROCESSING,\n vendorTag: CDK.VENDOR.OPENAI,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Tags, Duration } from \"aws-cdk-lib\";\nimport * as sso from \"aws-cdk-lib/aws-sso\";\nimport { CDK } from \"@jaypie/cdk\";\n\n/**\n * Account categories for SSO group assignments\n */\nexport interface JaypieSsoAccountMap {\n development: string[];\n management: string[];\n operations: string[];\n production: string[];\n sandbox: string[];\n security: string[];\n stage: string[];\n}\n\n/**\n * Mapping of group types to Google Workspace group GUIDs\n */\nexport interface JaypieSsoGroupMap {\n administrators: string;\n analysts: string;\n developers: string;\n}\n\n/**\n * IAM Policy Statement structure for inline policies\n */\nexport interface PolicyStatement {\n Effect: \"Allow\" | \"Deny\";\n Action: string[] | string;\n Resource: string[] | string;\n Condition?: Record<string, unknown>;\n}\n\n/**\n * Properties for the JaypieSsoGroups construct\n */\nexport interface JaypieSsoGroupsProps {\n /**\n * ARN of the IAM Identity Center instance\n */\n instanceArn: string;\n\n /**\n * Mapping of account categories to AWS account IDs\n */\n accountMap: JaypieSsoAccountMap;\n\n /**\n * Mapping of group types to Google Workspace group GUIDs\n */\n groupMap: JaypieSsoGroupMap;\n\n /**\n * Additional inline policy statements to append to each group's permission set\n * Each group can have its own set of policy statements that will be merged\n * with the default policies.\n */\n inlinePolicyStatements?: {\n administrators?: PolicyStatement[];\n analysts?: PolicyStatement[];\n developers?: PolicyStatement[];\n };\n}\n\n/**\n * Permission set types with corresponding AWS managed policies\n */\nexport enum PermissionSetType {\n ADMINISTRATOR = \"Administrator\",\n ANALYST = \"Analyst\",\n DEVELOPER = \"Developer\",\n}\n\n/**\n * Construct to simplify AWS SSO group management.\n * This construct encapsulates the complexity of creating permission sets\n * and assigning them to groups across multiple AWS accounts.\n */\nexport class JaypieSsoGroups extends Construct {\n private readonly permissionSets: Record<\n PermissionSetType,\n sso.CfnPermissionSet\n > = {} as Record<PermissionSetType, sso.CfnPermissionSet>;\n private readonly instanceArn: string;\n private readonly props: JaypieSsoGroupsProps;\n\n constructor(scope: Construct, id: string, props: JaypieSsoGroupsProps) {\n super(scope, id);\n\n this.instanceArn = props.instanceArn;\n this.props = props;\n\n // Create the permission sets\n this.createAdministratorPermissionSet();\n this.createAnalystPermissionSet();\n this.createDeveloperPermissionSet();\n\n // Create the assignments\n this.createPermissionSetAssignments(props);\n }\n\n /**\n * Creates the Administrator permission set with AdministratorAccess policy\n * and billing access\n */\n private createAdministratorPermissionSet(): void {\n const defaultInlinePolicy = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:*\",\n \"budgets:*\",\n \"ce:*\",\n \"cost-optimization-hub:*\",\n ],\n Resource: \"*\",\n },\n ],\n };\n\n // Merge with any additional policy statements provided for administrators\n const mergedPolicy = this.mergeInlinePolicies(\n defaultInlinePolicy,\n this.props?.inlinePolicyStatements?.administrators,\n );\n\n const permissionSet = new sso.CfnPermissionSet(\n this,\n \"AdministratorPermissionSet\",\n {\n instanceArn: this.instanceArn,\n name: PermissionSetType.ADMINISTRATOR,\n description:\n \"Full administrative access to all AWS services and resources\",\n sessionDuration: Duration.hours(8).toIsoString(),\n managedPolicies: [\"arn:aws:iam::aws:policy/AdministratorAccess\"],\n inlinePolicy: mergedPolicy,\n },\n );\n\n Tags.of(permissionSet).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n\n this.permissionSets[PermissionSetType.ADMINISTRATOR] = permissionSet;\n }\n\n /**\n * Creates the Analyst permission set with ReadOnlyAccess policy\n * and limited write access\n */\n private createAnalystPermissionSet(): void {\n const defaultInlinePolicy = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:ViewBilling\",\n \"aws-portal:ViewAccount\",\n \"budgets:ViewBudget\",\n \"cloudwatch:PutDashboard\",\n \"cloudwatch:PutMetricData\",\n \"s3:PutObject\",\n \"s3:GetObject\",\n \"s3:ListBucket\",\n ],\n Resource: \"*\",\n },\n ],\n };\n\n // Merge with any additional policy statements provided for analysts\n const mergedPolicy = this.mergeInlinePolicies(\n defaultInlinePolicy,\n this.props?.inlinePolicyStatements?.analysts,\n );\n\n const permissionSet = new sso.CfnPermissionSet(\n this,\n \"AnalystPermissionSet\",\n {\n instanceArn: this.instanceArn,\n name: PermissionSetType.ANALYST,\n description:\n \"Read-only access with billing visibility and limited write access\",\n sessionDuration: Duration.hours(4).toIsoString(),\n managedPolicies: [\"arn:aws:iam::aws:policy/ReadOnlyAccess\"],\n inlinePolicy: mergedPolicy,\n },\n );\n\n Tags.of(permissionSet).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n\n this.permissionSets[PermissionSetType.ANALYST] = permissionSet;\n }\n\n /**\n * Creates the Developer permission set with SystemAdministrator policy\n * and expanded write access\n */\n private createDeveloperPermissionSet(): void {\n const defaultInlinePolicy = {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"cloudwatch:*\",\n \"logs:*\",\n \"lambda:*\",\n \"apigateway:*\",\n \"dynamodb:*\",\n \"s3:*\",\n \"sns:*\",\n \"sqs:*\",\n \"events:*\",\n \"ecr:*\",\n \"ecs:*\",\n \"codebuild:*\",\n ],\n Resource: \"*\",\n },\n {\n Effect: \"Deny\",\n Action: [\n \"iam:*User*\",\n \"iam:*Role*\",\n \"iam:*Policy*\",\n \"organizations:*\",\n \"account:*\",\n ],\n Resource: \"*\",\n },\n ],\n };\n\n // Merge with any additional policy statements provided for developers\n const mergedPolicy = this.mergeInlinePolicies(\n defaultInlinePolicy,\n this.props?.inlinePolicyStatements?.developers,\n );\n\n const permissionSet = new sso.CfnPermissionSet(\n this,\n \"DeveloperPermissionSet\",\n {\n instanceArn: this.instanceArn,\n name: PermissionSetType.DEVELOPER,\n description:\n \"System administrator access with expanded write permissions\",\n sessionDuration: Duration.hours(8).toIsoString(),\n managedPolicies: [\n \"arn:aws:iam::aws:policy/job-function/SystemAdministrator\",\n ],\n inlinePolicy: mergedPolicy,\n },\n );\n\n Tags.of(permissionSet).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n\n this.permissionSets[PermissionSetType.DEVELOPER] = permissionSet;\n }\n\n /**\n * Gets the permission set for the specified type\n */\n public getPermissionSet(type: PermissionSetType): sso.CfnPermissionSet {\n return this.permissionSets[type];\n }\n\n /**\n * Merges default inline policies with additional user-provided policy statements\n *\n * @param defaultPolicy - The default policy object with Version and Statement properties\n * @param additionalStatements - Optional additional policy statements to merge\n * @returns The merged policy object\n */\n private mergeInlinePolicies(\n defaultPolicy: Record<string, unknown>,\n additionalStatements?: PolicyStatement[],\n ): Record<string, unknown> {\n if (!additionalStatements || additionalStatements.length === 0) {\n return defaultPolicy;\n }\n\n // Create a deep copy of the default policy to avoid modifying the original\n const mergedPolicy = JSON.parse(JSON.stringify(defaultPolicy));\n\n // Add the additional statements to the existing statements\n mergedPolicy.Statement = [\n ...mergedPolicy.Statement,\n ...additionalStatements,\n ];\n\n return mergedPolicy;\n }\n\n /**\n * Creates assignments between permission sets, groups, and accounts\n * based on the provided configuration\n */\n private createPermissionSetAssignments(props: JaypieSsoGroupsProps): void {\n // Administrator assignments\n this.assignAdministratorPermissions(props);\n\n // Analyst assignments\n this.assignAnalystPermissions(props);\n\n // Developer assignments\n this.assignDeveloperPermissions(props);\n }\n\n /**\n * Assigns Administrator permissions to appropriate accounts\n */\n private assignAdministratorPermissions(props: JaypieSsoGroupsProps): void {\n const administratorGroup = props.groupMap.administrators;\n const administratorPermissionSet =\n this.permissionSets[PermissionSetType.ADMINISTRATOR];\n\n // Administrators get access to all accounts\n const allAccounts = [\n ...props.accountMap.development,\n ...props.accountMap.management,\n ...props.accountMap.operations,\n ...props.accountMap.production,\n ...props.accountMap.sandbox,\n ...props.accountMap.security,\n ...props.accountMap.stage,\n ];\n\n // Create assignments for each account\n allAccounts.forEach((accountId, index) => {\n const assignment = new sso.CfnAssignment(\n this,\n `AdministratorAssignment${index}`,\n {\n instanceArn: this.instanceArn,\n permissionSetArn: administratorPermissionSet.attrPermissionSetArn,\n principalId: administratorGroup,\n principalType: \"GROUP\",\n targetId: accountId,\n targetType: \"AWS_ACCOUNT\",\n },\n );\n\n Tags.of(assignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(assignment).add(\"Group\", \"administrators\");\n });\n }\n\n /**\n * Assigns Analyst permissions to appropriate accounts\n */\n private assignAnalystPermissions(props: JaypieSsoGroupsProps): void {\n const analystGroup = props.groupMap.analysts;\n const analystPermissionSet = this.permissionSets[PermissionSetType.ANALYST];\n\n // Analysts get access to development, management, sandbox, and stage accounts\n const analystAccounts = [\n ...props.accountMap.development,\n ...props.accountMap.management,\n ...props.accountMap.sandbox,\n ...props.accountMap.stage,\n ];\n\n // Create assignments for each account\n analystAccounts.forEach((accountId, index) => {\n const assignment = new sso.CfnAssignment(\n this,\n `AnalystAssignment${index}`,\n {\n instanceArn: this.instanceArn,\n permissionSetArn: analystPermissionSet.attrPermissionSetArn,\n principalId: analystGroup,\n principalType: \"GROUP\",\n targetId: accountId,\n targetType: \"AWS_ACCOUNT\",\n },\n );\n\n Tags.of(assignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(assignment).add(\"Group\", \"analysts\");\n });\n }\n\n /**\n * Assigns Developer permissions to appropriate accounts\n */\n private assignDeveloperPermissions(props: JaypieSsoGroupsProps): void {\n const developerGroup = props.groupMap.developers;\n const developerPermissionSet =\n this.permissionSets[PermissionSetType.DEVELOPER];\n\n // Developers get access to development, sandbox, and stage accounts\n const developerAccounts = [\n ...props.accountMap.development,\n ...props.accountMap.sandbox,\n ...props.accountMap.stage,\n ];\n\n // Create assignments for each account\n developerAccounts.forEach((accountId, index) => {\n const assignment = new sso.CfnAssignment(\n this,\n `DeveloperAssignment${index}`,\n {\n instanceArn: this.instanceArn,\n permissionSetArn: developerPermissionSet.attrPermissionSetArn,\n principalId: developerGroup,\n principalType: \"GROUP\",\n targetId: accountId,\n targetType: \"AWS_ACCOUNT\",\n },\n );\n\n Tags.of(assignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(assignment).add(\"Group\", \"developers\");\n });\n }\n}\n","import { Construct } from \"constructs\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { JaypieEnvSecret, JaypieEnvSecretProps } from \"./JaypieEnvSecret\";\n\nexport class JaypieTraceSigningKeySecret extends JaypieEnvSecret {\n constructor(\n scope: Construct,\n id = \"TraceSigningKey\",\n props?: JaypieEnvSecretProps,\n ) {\n const defaultProps: JaypieEnvSecretProps = {\n envKey: \"TRACE_SIGNING_KEY\",\n roleTag: CDK.ROLE.API,\n vendorTag: CDK.VENDOR.KNOWTRACE,\n ...props,\n };\n\n super(scope, id, defaultProps);\n }\n}\n","import {\n CDK,\n ConfigurationError,\n isValidHostname,\n isValidSubdomain,\n mergeDomain,\n} from \"@jaypie/cdk\";\nimport { CfnOutput, Duration, Fn, RemovalPolicy, Tags } from \"aws-cdk-lib\";\nimport * as acm from \"aws-cdk-lib/aws-certificatemanager\";\nimport * as cloudfront from \"aws-cdk-lib/aws-cloudfront\";\nimport * as origins from \"aws-cdk-lib/aws-cloudfront-origins\";\nimport {\n AddToResourcePolicyResult,\n Effect,\n FederatedPrincipal,\n Role,\n PolicyStatement,\n} from \"aws-cdk-lib/aws-iam\";\nimport * as route53 from \"aws-cdk-lib/aws-route53\";\nimport * as route53Targets from \"aws-cdk-lib/aws-route53-targets\";\nimport * as s3 from \"aws-cdk-lib/aws-s3\";\nimport * as kms from \"aws-cdk-lib/aws-kms\";\nimport { Construct } from \"constructs\";\nimport { constructEnvName, isProductionEnv } from \"./helpers\";\n\nexport interface JaypieWebDeploymentBucketProps extends s3.BucketProps {\n /**\n * SSL certificate for the CloudFront distribution\n * @default true (creates a new certificate)\n */\n certificate?: boolean | acm.ICertificate;\n /**\n * The domain name for the website\n * @default mergeDomain(CDK_ENV_WEB_SUBDOMAIN, CDK_ENV_WEB_HOSTED_ZONE || CDK_ENV_HOSTED_ZONE)\n */\n host?: string;\n /**\n * Optional bucket name\n */\n name?: string;\n /**\n * Role tag for tagging resources\n * @default CDK.ROLE.HOSTING\n */\n roleTag?: string;\n /**\n * The hosted zone for DNS records\n * @default CDK_ENV_WEB_HOSTED_ZONE || CDK_ENV_HOSTED_ZONE\n */\n zone?: string | route53.IHostedZone;\n}\n\nexport class JaypieWebDeploymentBucket extends Construct implements s3.IBucket {\n public readonly bucket: s3.Bucket;\n public readonly bucketArn: string;\n public readonly bucketDomainName: string;\n public readonly bucketDualStackDomainName: string;\n public readonly bucketName: string;\n public readonly bucketRegionalDomainName: string;\n public readonly bucketWebsiteDomainName: string;\n public readonly bucketWebsiteUrl: string;\n public readonly encryptionKey?: kms.IKey;\n public readonly isWebsite?: boolean;\n public readonly notificationsHandlerRole?: string;\n public readonly policy?: s3.BucketPolicy;\n public readonly deployRoleArn?: string;\n public readonly distributionDomainName?: string;\n public readonly certificate?: acm.ICertificate;\n public readonly distribution?: cloudfront.Distribution;\n\n constructor(\n scope: Construct,\n id: string,\n props: JaypieWebDeploymentBucketProps = {},\n ) {\n super(scope, id);\n\n const roleTag = props.roleTag || CDK.ROLE.HOSTING;\n\n // Environment variable validation\n if (\n process.env.CDK_ENV_WEB_SUBDOMAIN &&\n !isValidSubdomain(process.env.CDK_ENV_WEB_SUBDOMAIN)\n ) {\n throw new ConfigurationError(\n \"CDK_ENV_WEB_SUBDOMAIN is not a valid subdomain\",\n );\n }\n\n if (\n process.env.CDK_ENV_WEB_HOSTED_ZONE &&\n !isValidHostname(process.env.CDK_ENV_WEB_HOSTED_ZONE)\n ) {\n throw new ConfigurationError(\n \"CDK_ENV_WEB_HOSTED_ZONE is not a valid hostname\",\n );\n }\n\n if (\n process.env.CDK_ENV_HOSTED_ZONE &&\n !isValidHostname(process.env.CDK_ENV_HOSTED_ZONE)\n ) {\n throw new ConfigurationError(\n \"CDK_ENV_HOSTED_ZONE is not a valid hostname\",\n );\n }\n\n // Determine host from props or environment\n let host = props.host;\n if (!host) {\n try {\n host =\n process.env.CDK_ENV_WEB_HOST ||\n mergeDomain(\n process.env.CDK_ENV_WEB_SUBDOMAIN || \"\",\n process.env.CDK_ENV_WEB_HOSTED_ZONE ||\n process.env.CDK_ENV_HOSTED_ZONE ||\n \"\",\n );\n } catch {\n host = undefined;\n }\n }\n\n if (host && !isValidHostname(host)) {\n throw new ConfigurationError(\"Host is not a valid hostname\");\n }\n\n // Determine zone from props or environment\n const zone =\n props.zone ||\n process.env.CDK_ENV_WEB_HOSTED_ZONE ||\n process.env.CDK_ENV_HOSTED_ZONE;\n\n // Create the S3 bucket\n this.bucket = new s3.Bucket(this, \"DestinationBucket\", {\n accessControl: s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL,\n autoDeleteObjects: true,\n blockPublicAccess: s3.BlockPublicAccess.BLOCK_ACLS,\n bucketName: props.name || constructEnvName(\"web\"),\n publicReadAccess: true,\n removalPolicy: RemovalPolicy.DESTROY,\n versioned: false,\n websiteErrorDocument: \"index.html\",\n websiteIndexDocument: \"index.html\",\n ...props,\n });\n\n // Delegate IBucket properties to the bucket\n this.bucketArn = this.bucket.bucketArn;\n this.bucketDomainName = this.bucket.bucketDomainName;\n this.bucketDualStackDomainName = this.bucket.bucketDualStackDomainName;\n this.bucketName = this.bucket.bucketName;\n this.bucketRegionalDomainName = this.bucket.bucketRegionalDomainName;\n this.bucketWebsiteDomainName = this.bucket.bucketWebsiteDomainName;\n this.bucketWebsiteUrl = this.bucket.bucketWebsiteUrl;\n this.encryptionKey = this.bucket.encryptionKey;\n this.isWebsite = this.bucket.isWebsite;\n this.notificationsHandlerRole = undefined;\n this.policy = this.bucket.policy;\n\n Tags.of(this.bucket).add(CDK.TAG.ROLE, roleTag);\n\n // Create deployment role if repository is configured\n let repo: string | undefined;\n if (process.env.CDK_ENV_REPO) {\n repo = `repo:${process.env.CDK_ENV_REPO}:*`;\n }\n\n if (repo) {\n const bucketDeployRole = new Role(this, \"DestinationBucketDeployRole\", {\n assumedBy: new FederatedPrincipal(\n Fn.importValue(CDK.IMPORT.OIDC_PROVIDER),\n {\n StringLike: {\n \"token.actions.githubusercontent.com:sub\": repo,\n },\n },\n \"sts:AssumeRoleWithWebIdentity\",\n ),\n maxSessionDuration: Duration.hours(1),\n });\n Tags.of(bucketDeployRole).add(CDK.TAG.ROLE, CDK.ROLE.DEPLOY);\n\n // Allow the role to write to the bucket\n bucketDeployRole.addToPolicy(\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: [\n \"s3:DeleteObject\",\n \"s3:GetObject\",\n \"s3:ListObjectsV2\",\n \"s3:PutObject\",\n ],\n resources: [`${this.bucket.bucketArn}/*`],\n }),\n );\n bucketDeployRole.addToPolicy(\n new PolicyStatement({\n effect: Effect.ALLOW,\n actions: [\"s3:ListBucket\"],\n resources: [this.bucket.bucketArn],\n }),\n );\n\n // Allow the role to deploy CDK apps\n bucketDeployRole.addToPolicy(\n new PolicyStatement({\n actions: [\"cloudformation:DescribeStacks\"],\n effect: Effect.ALLOW,\n resources: [\"*\"], // TODO: restrict to this stack\n }),\n );\n\n this.deployRoleArn = bucketDeployRole.roleArn;\n\n // Output the deploy role ARN\n new CfnOutput(this, \"DestinationBucketDeployRoleArn\", {\n value: bucketDeployRole.roleArn,\n });\n }\n\n // Create CloudFront distribution and certificate if host and zone are provided\n if (host && zone) {\n const hostedZone =\n typeof zone === \"string\"\n ? route53.HostedZone.fromLookup(this, \"HostedZone\", {\n domainName: zone,\n })\n : zone;\n\n // Create certificate if not provided\n if (props.certificate !== false) {\n this.certificate =\n typeof props.certificate === \"object\"\n ? props.certificate\n : new acm.Certificate(this, \"Certificate\", {\n domainName: host,\n validation: acm.CertificateValidation.fromDns(hostedZone),\n });\n\n new CfnOutput(this, \"CertificateArn\", {\n value: this.certificate.certificateArn,\n });\n Tags.of(this.certificate).add(CDK.TAG.ROLE, roleTag);\n }\n\n // Create CloudFront distribution\n this.distribution = new cloudfront.Distribution(this, \"Distribution\", {\n defaultBehavior: {\n cachePolicy: cloudfront.CachePolicy.CACHING_DISABLED,\n origin: new origins.S3Origin(this.bucket),\n viewerProtocolPolicy:\n cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n },\n certificate: this.certificate,\n domainNames: [host],\n });\n Tags.of(this.distribution).add(CDK.TAG.ROLE, roleTag);\n\n // If this is production, enable caching on everything but index.html\n if (isProductionEnv()) {\n this.distribution.addBehavior(\"/*\", new origins.S3Origin(this.bucket), {\n viewerProtocolPolicy:\n cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,\n cachePolicy: cloudfront.CachePolicy.CACHING_OPTIMIZED,\n });\n }\n\n // Create DNS record\n const record = new route53.ARecord(this, \"AliasRecord\", {\n recordName: host,\n target: route53.RecordTarget.fromAlias(\n new route53Targets.CloudFrontTarget(this.distribution),\n ),\n zone: hostedZone,\n });\n Tags.of(record).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n\n this.distributionDomainName = this.distribution.distributionDomainName;\n }\n }\n\n // Implement remaining IBucket methods by delegating to the bucket\n addEventNotification(\n event: s3.EventType,\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this.bucket.addEventNotification(event, dest, ...filters);\n }\n\n addObjectCreatedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this.bucket.addObjectCreatedNotification(dest, ...filters);\n }\n\n addObjectRemovedNotification(\n dest: s3.IBucketNotificationDestination,\n ...filters: s3.NotificationKeyFilter[]\n ): void {\n this.bucket.addObjectRemovedNotification(dest, ...filters);\n }\n\n addToResourcePolicy(permission: PolicyStatement): AddToResourcePolicyResult {\n return this.bucket.addToResourcePolicy(permission);\n }\n\n arnForObjects(keyPattern: string): string {\n return this.bucket.arnForObjects(keyPattern);\n }\n\n grantDelete(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantDelete(identity, objectsKeyPattern);\n }\n\n grantPublicAccess(allowedActions: string, keyPrefix?: string): any {\n return keyPrefix\n ? this.bucket.grantPublicAccess(allowedActions, keyPrefix)\n : this.bucket.grantPublicAccess(allowedActions);\n }\n\n grantPut(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantPut(identity, objectsKeyPattern);\n }\n\n grantPutAcl(identity: any, objectsKeyPattern?: string): any {\n return this.bucket.grantPutAcl(identity, objectsKeyPattern);\n }\n\n grantRead(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantRead(identity, objectsKeyPattern);\n }\n\n grantReadWrite(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantReadWrite(identity, objectsKeyPattern);\n }\n\n grantWrite(identity: any, objectsKeyPattern?: any): any {\n return this.bucket.grantWrite(identity, objectsKeyPattern);\n }\n\n s3UrlForObject(key?: string): string {\n return this.bucket.s3UrlForObject(key);\n }\n\n urlForObject(key?: string): string {\n return this.bucket.urlForObject(key);\n }\n\n virtualHostedUrlForObject(\n key?: string,\n options?: s3.VirtualHostedStyleUrlOptions,\n ): string {\n return this.bucket.virtualHostedUrlForObject(key, options);\n }\n\n transferAccelerationUrlForObject(key?: string): string {\n return this.bucket.transferAccelerationUrlForObject(key);\n }\n\n onCloudTrailEvent(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): any {\n return this.bucket.onCloudTrailEvent(id, options);\n }\n\n onCloudTrailPutObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): any {\n return this.bucket.onCloudTrailPutObject(id, options);\n }\n\n onCloudTrailWriteObject(\n id: string,\n options?: s3.OnCloudTrailBucketEventOptions,\n ): any {\n return this.bucket.onCloudTrailWriteObject(id, options);\n }\n\n addCorsRule(rule: s3.CorsRule): void {\n this.bucket.addCorsRule(rule);\n }\n\n addInventory(inventory: s3.Inventory): void {\n this.bucket.addInventory(inventory);\n }\n\n addLifecycleRule(rule: s3.LifecycleRule): void {\n this.bucket.addLifecycleRule(rule);\n }\n\n addMetric(metric: s3.BucketMetrics): void {\n this.bucket.addMetric(metric);\n }\n\n enableEventBridgeNotification(): void {\n this.bucket.enableEventBridgeNotification();\n }\n\n addReplicationPolicy(policy: any): void {\n this.bucket.addReplicationPolicy(policy);\n }\n\n get stack(): any {\n return this.bucket.stack;\n }\n\n get env(): any {\n return this.bucket.env;\n }\n\n applyRemovalPolicy(policy: RemovalPolicy): void {\n this.bucket.applyRemovalPolicy(policy);\n }\n}\n"],"names":["CDK","Tags","Construct","lambda","Duration","Stack","RemovalPolicy","secretsmanager","mergeDomain","route53","acm","apiGateway","route53Targets","sqs","lambdaEventSources","s3","s3n","Fn","CfnOutput","SecretValue","LogGroup","RetentionDays","cdk","ServicePrincipal","FilterPattern","HostedZone","PermissionSetType","sso","isValidSubdomain","ConfigurationError","isValidHostname","Role","FederatedPrincipal","PolicyStatement","Effect","cloudfront","origins"],"mappings":"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"}
|