@jaypie/constructs 1.1.51 → 1.1.52
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/JaypieGitHubDeployRole.d.ts +1 -1
- package/dist/cjs/JaypieHostedZone.d.ts +6 -1
- package/dist/cjs/index.cjs +45 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/JaypieGitHubDeployRole.d.ts +1 -1
- package/dist/esm/JaypieHostedZone.d.ts +6 -1
- package/dist/esm/index.js +49 -6
- 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/addDatadogLayers.ts","../../../src/helpers/constructEnvName.ts","../../../src/helpers/constructStackName.ts","../../../src/helpers/constructTagger.ts","../../../src/helpers/envHostname.ts","../../../src/helpers/isEnv.ts","../../../src/helpers/jaypieLambdaEnv.ts","../../../src/helpers/resolveDatadogForwarderFunction.ts","../../../src/helpers/resolveDatadogLayers.ts","../../../src/helpers/resolveDatadogLoggingDestination.ts","../../../src/helpers/resolveHostedZone.ts","../../../src/helpers/resolveParamsAndSecrets.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/JaypieDnsRecord.ts","../../../src/JaypieGitHubDeployRole.ts","../../../src/JaypieExpressLambda.ts","../../../src/JaypieHostedZone.ts","../../../src/JaypieInfrastructureStack.ts","../../../src/JaypieMongoDbSecret.ts","../../../src/JaypieOpenAiSecret.ts","../../../src/JaypieSsoPermissions.ts","../../../src/JaypieSsoSyncApplication.ts","../../../src/JaypieTraceSigningKeySecret.ts","../../../src/JaypieWebDeploymentBucket.ts"],"sourcesContent":["import * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { DatadogLambda } from \"datadog-cdk-constructs-v2\";\n\nexport interface AddDatadogLayerOptions {\n datadogApiKeyArn?: string;\n}\n\nexport function addDatadogLayers(\n lambdaFunction: lambda.Function,\n options: AddDatadogLayerOptions = {},\n): boolean {\n const datadogApiKeyArn = options?.datadogApiKeyArn;\n\n const resolvedDatadogApiKeyArn =\n datadogApiKeyArn ||\n process.env.DATADOG_API_KEY_ARN ||\n process.env.CDK_ENV_DATADOG_API_KEY_ARN;\n if (!resolvedDatadogApiKeyArn) {\n return false;\n }\n\n // Define Datadog environment variables\n const datadogEnvVars = {\n DD_API_KEY_SECRET_ARN: resolvedDatadogApiKeyArn,\n DD_ENHANCED_METRICS: \"true\",\n DD_ENV: process.env.PROJECT_ENV || \"\",\n DD_PROFILING_ENABLED: \"false\",\n DD_SERVERLESS_APPSEC_ENABLED: \"false\",\n DD_SERVICE: process.env.PROJECT_SERVICE || \"\",\n DD_SITE: CDK.DATADOG.SITE,\n DD_TAGS: `${CDK.TAG.SPONSOR}:${process.env.PROJECT_SPONSOR || \"\"}`,\n DD_TRACE_OTEL_ENABLED: \"false\",\n };\n\n // Add environment variables only if they don't already exist\n Object.entries(datadogEnvVars).forEach(([key, value]) => {\n lambdaFunction.addEnvironment(key, value);\n });\n\n const datadogApiKeySecret: secretsmanager.ISecret =\n secretsmanager.Secret.fromSecretCompleteArn(\n lambdaFunction,\n \"DatadogApiKey\",\n resolvedDatadogApiKeyArn,\n );\n const datadogLambda = new DatadogLambda(lambdaFunction, \"DatadogLambda\", {\n apiKeySecret: datadogApiKeySecret, // apiKeySecret auto-grants secret access to the added lambdas\n nodeLayerVersion: CDK.DATADOG.LAYER.NODE,\n extensionLayerVersion: CDK.DATADOG.LAYER.EXTENSION,\n env: process.env.PROJECT_ENV,\n service: process.env.PROJECT_SERVICE,\n version: process.env.PROJECT_VERSION,\n });\n datadogLambda.addLambdaFunctions([lambdaFunction]);\n\n return true;\n}\n","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\"; // This default is intentionally short. It is not a special value but should not be changed.\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 { Construct } from \"constructs\";\nimport { 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 constructTagger(\n construct: Construct,\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(construct).add(\n CDK.TAG.BUILD_HEX,\n process.env.PROJECT_COMMIT.slice(0, 8),\n );\n }\n Tags.of(construct).add(CDK.TAG.BUILD_DATE, new Date().toISOString());\n Tags.of(construct).add(CDK.TAG.BUILD_TIME, Date.now().toString());\n if (process.env.PROJECT_COMMIT)\n Tags.of(construct).add(CDK.TAG.COMMIT, process.env.PROJECT_COMMIT);\n Tags.of(construct).add(CDK.TAG.CREATION, CDK.CREATION.CDK);\n if (process.env.PROJECT_ENV)\n Tags.of(construct).add(CDK.TAG.ENV, process.env.PROJECT_ENV);\n if (process.env.PROJECT_NONCE)\n Tags.of(construct).add(CDK.TAG.NONCE, process.env.PROJECT_NONCE);\n if (process.env.PROJECT_KEY)\n Tags.of(construct).add(CDK.TAG.PROJECT, process.env.PROJECT_KEY);\n Tags.of(construct).add(CDK.TAG.ROLE, CDK.ROLE.STACK);\n if (process.env.PROJECT_SERVICE)\n Tags.of(construct).add(CDK.TAG.SERVICE, process.env.PROJECT_SERVICE);\n if (process.env.PROJECT_SPONSOR)\n Tags.of(construct).add(CDK.TAG.SPONSOR, process.env.PROJECT_SPONSOR);\n if (stackName) Tags.of(construct).add(CDK.TAG.STACK, stackName);\n if (version) Tags.of(construct).add(CDK.TAG.VERSION, version);\n\n return true;\n}\n","import { ConfigurationError } from \"@jaypie/cdk\";\n\nexport function envHostname({\n component,\n domain,\n env,\n subdomain,\n}: {\n component?: string;\n domain?: string;\n env?: string;\n subdomain?: string;\n} = {}) {\n const resolvedDomain =\n domain || process.env.CDK_ENV_DOMAIN || process.env.CDK_ENV_HOSTED_ZONE;\n\n if (!resolvedDomain) {\n throw new ConfigurationError(\n \"No hostname `domain` provided. Set CDK_ENV_DOMAIN or CDK_ENV_HOSTED_ZONE to use environment domain\",\n );\n }\n\n const resolvedComponent =\n component === \"@\" || component === \"\" ? undefined : component;\n const resolvedSubdomain = subdomain || process.env.CDK_ENV_SUBDOMAIN;\n const resolvedEnv = env || process.env.PROJECT_ENV;\n\n const parts = [\n resolvedComponent,\n resolvedSubdomain,\n resolvedEnv,\n resolvedDomain,\n ].filter((part) => part);\n\n return parts.join(\".\");\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","export interface JaypieLambdaEnvOptions {\n initialEnvironment?: { [key: string]: string };\n}\n\nexport function jaypieLambdaEnv(options: JaypieLambdaEnvOptions = {}): {\n [key: string]: string;\n} {\n const { initialEnvironment = {} } = options;\n\n // Start with empty environment - we'll only add valid values\n let environment: { [key: string]: string } = {};\n\n // First, add all valid string values from initialEnvironment\n Object.entries(initialEnvironment).forEach(([key, value]) => {\n if (typeof value === \"string\") {\n environment[key] = value;\n }\n });\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, it's already added above\n // If user passes non-string falsy value, omit the key\n if (!userValue) {\n delete environment[key];\n }\n // Ignore non-string truthy values (key not added)\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_CHAOS\",\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 return environment;\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport * as cdk from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport { Construct } from \"constructs\";\n\nconst DEFAULT_FUNCTION_NAME = \"DatadogForwarderFunction\";\n\n// Cache to store resolved functions\n// Using nested structure to support multiple functions per scope with automatic GC\nconst functionCache = new WeakMap<Construct, Map<string, lambda.IFunction>>();\n\nexport interface ResolveDatadogForwarderFunctionOptions {\n import?: string;\n name?: string;\n}\n\nexport function resolveDatadogForwarderFunction(\n scope: Construct,\n options?: ResolveDatadogForwarderFunctionOptions,\n): lambda.IFunction {\n const { import: importValue, name } = options || {};\n\n const functionName = name || DEFAULT_FUNCTION_NAME;\n const importKey = importValue || CDK.IMPORT.DATADOG_LOG_FORWARDER;\n\n // Create a cache key based on name and import\n const cacheKey = `${functionName}:${importKey}`;\n\n // Get or create scope cache\n let scopeCache = functionCache.get(scope);\n if (!scopeCache) {\n scopeCache = new Map<string, lambda.IFunction>();\n functionCache.set(scope, scopeCache);\n }\n\n // Return cached function if it exists\n const cachedFunction = scopeCache.get(cacheKey);\n if (cachedFunction) {\n return cachedFunction;\n }\n\n // Create and cache the function\n const func = lambda.Function.fromFunctionArn(\n scope,\n functionName,\n cdk.Fn.importValue(importKey),\n );\n scopeCache.set(cacheKey, func);\n\n return func;\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport { Stack } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport { Construct } from \"constructs\";\n\nexport interface ResolveDatadogLayerOptions {\n datadogApiKeyArn?: string;\n uniqueId?: string;\n}\n\nexport function resolveDatadogLayers(\n scope: Construct,\n options: ResolveDatadogLayerOptions = {},\n): lambda.ILayerVersion[] | undefined {\n const { datadogApiKeyArn, uniqueId } = options;\n\n let resolvedRegion = Stack.of(scope).region || \"us-east-1\";\n\n // Resolve the Datadog API key ARN from multiple sources\n const resolvedDatadogApiKeyArn =\n datadogApiKeyArn ||\n process.env.DATADOG_API_KEY_ARN ||\n process.env.CDK_ENV_DATADOG_API_KEY_ARN;\n\n // Return null if no API key is found\n if (!resolvedDatadogApiKeyArn) {\n return undefined;\n }\n\n const layerIdSuffix =\n uniqueId || process.env.PROJECT_NONCE || Date.now().toString();\n\n // Create Datadog Node.js layer\n const datadogNodeLayer = lambda.LayerVersion.fromLayerVersionArn(\n scope,\n `DatadogNodeLayer-${layerIdSuffix}`,\n `arn:aws:lambda:${resolvedRegion}:464622532012:layer:Datadog-Node20-x:${CDK.DATADOG.LAYER.NODE}`,\n );\n\n // Create Datadog Extension layer\n const datadogExtensionLayer = lambda.LayerVersion.fromLayerVersionArn(\n scope,\n `DatadogExtensionLayer-${layerIdSuffix}`,\n `arn:aws:lambda:${resolvedRegion}:464622532012:layer:Datadog-Extension:${CDK.DATADOG.LAYER.EXTENSION}`,\n );\n\n return [datadogNodeLayer, datadogExtensionLayer];\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport * as logDestinations from \"aws-cdk-lib/aws-logs-destinations\";\nimport { Construct } from \"constructs\";\n\nimport {\n resolveDatadogForwarderFunction,\n ResolveDatadogForwarderFunctionOptions,\n} from \"./resolveDatadogForwarderFunction\";\n\nconst DEFAULT_FUNCTION_NAME = \"DatadogForwarderFunction\";\n\n// Cache to store resolved logging destinations\n// Using nested structure to support multiple destinations per scope with automatic GC\nconst destinationCache = new WeakMap<\n Construct,\n Map<string, logDestinations.LambdaDestination>\n>();\n\nexport function resolveDatadogLoggingDestination(\n scope: Construct,\n options?: ResolveDatadogForwarderFunctionOptions,\n): logDestinations.LambdaDestination {\n const { import: importValue, name } = options || {};\n\n // Create a cache key based on name and import (same as forwarder function)\n const functionName = name || DEFAULT_FUNCTION_NAME;\n const importKey = importValue || CDK.IMPORT.DATADOG_LOG_FORWARDER;\n const cacheKey = `${functionName}:${importKey}`;\n\n // Get or create scope cache\n let scopeCache = destinationCache.get(scope);\n if (!scopeCache) {\n scopeCache = new Map<string, logDestinations.LambdaDestination>();\n destinationCache.set(scope, scopeCache);\n }\n\n // Return cached destination if it exists\n const cachedDestination = scopeCache.get(cacheKey);\n if (cachedDestination) {\n return cachedDestination;\n }\n\n // Resolve the Datadog forwarder function\n const datadogForwarderFunction = resolveDatadogForwarderFunction(\n scope,\n options,\n );\n\n // Create and cache the logging destination\n const datadogLoggingDestination = new logDestinations.LambdaDestination(\n datadogForwarderFunction,\n );\n scopeCache.set(cacheKey, datadogLoggingDestination);\n\n return datadogLoggingDestination;\n}\n","import { Construct } from \"constructs\";\nimport * as route53 from \"aws-cdk-lib/aws-route53\";\nimport { ConfigurationError } from \"@jaypie/cdk\";\n\nexport function resolveHostedZone(\n scope: Construct,\n {\n name = \"HostedZone\",\n zone = process.env.CDK_ENV_HOSTED_ZONE,\n }: {\n name?: string;\n zone?: string | route53.IHostedZone;\n } = {},\n): route53.IHostedZone {\n if (!zone) {\n throw new ConfigurationError(\n \"No `zone` provided. Set CDK_ENV_HOSTED_ZONE to use environment zone\",\n );\n }\n\n if (typeof zone === \"string\") {\n return route53.HostedZone.fromLookup(scope, name, {\n domainName: zone,\n });\n }\n return zone;\n}\n","import { Duration } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\n\nexport interface ResolveParamsAndSecretsOptions {\n cacheSize?: number;\n logLevel?: lambda.ParamsAndSecretsLogLevel;\n parameterStoreTtl?: Duration;\n secretsManagerTtl?: Duration;\n}\n\nexport const resolveParamsAndSecrets = ({\n paramsAndSecrets,\n options,\n}: {\n paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;\n options?: ResolveParamsAndSecretsOptions;\n}) => {\n if (paramsAndSecrets === false) {\n return;\n }\n\n let resolvedParamsAndSecrets: lambda.ParamsAndSecretsLayerVersion;\n if (paramsAndSecrets instanceof lambda.ParamsAndSecretsLayerVersion) {\n resolvedParamsAndSecrets = paramsAndSecrets;\n } else {\n const resolvedOptions = options || {};\n resolvedParamsAndSecrets = lambda.ParamsAndSecretsLayerVersion.fromVersion(\n lambda.ParamsAndSecretsVersions.V1_0_103,\n {\n cacheSize: resolvedOptions.cacheSize,\n logLevel:\n resolvedOptions.logLevel || lambda.ParamsAndSecretsLogLevel.WARN,\n parameterStoreTtl: resolvedOptions.parameterStoreTtl,\n secretsManagerTtl: resolvedOptions.secretsManagerTtl,\n },\n );\n }\n\n return resolvedParamsAndSecrets;\n};\n\nexport default resolveParamsAndSecrets;\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, resolveHostedZone } 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 hostedZone = resolveHostedZone(this, { zone });\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 public get restApiRef(): apiGateway.RestApiReference {\n return {\n restApiId: this._api.restApiId,\n };\n }\n}\n","import { Stack, StackProps } from \"aws-cdk-lib\";\nimport { Construct } from \"constructs\";\nimport { constructStackName, constructTagger } 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 constructTagger(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, Stack, RemovalPolicy, Tags } 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 ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { JaypieEnvSecret } from \"./JaypieEnvSecret.js\";\nimport {\n addDatadogLayers,\n jaypieLambdaEnv,\n resolveParamsAndSecrets,\n} from \"./helpers/index.js\";\n\nexport interface JaypieLambdaProps {\n allowAllOutbound?: boolean;\n allowPublicSubnet?: boolean;\n architecture?: lambda.Architecture;\n code: lambda.Code | string;\n datadogApiKeyArn?: string;\n deadLetterQueue?: import(\"aws-cdk-lib/aws-sqs\").IQueue;\n deadLetterQueueEnabled?: boolean;\n deadLetterTopic?: import(\"aws-cdk-lib/aws-sns\").ITopic;\n description?: string;\n environment?: { [key: string]: string };\n envSecrets?: { [key: string]: secretsmanager.ISecret };\n ephemeralStorageSize?: import(\"aws-cdk-lib\").Size;\n filesystem?: lambda.FileSystem;\n handler: string;\n initialPolicy?: iam.PolicyStatement[];\n layers?: lambda.ILayerVersion[];\n logRetention?: number;\n logRetentionRole?: iam.IRole;\n logRetentionRetryOptions?: lambda.LogRetentionRetryOptions;\n maxEventAge?: Duration;\n memorySize?: number;\n paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;\n paramsAndSecretsOptions?: {\n cacheSize?: number;\n logLevel?: lambda.ParamsAndSecretsLogLevel;\n parameterStoreTtl?: Duration;\n secretsManagerTtl?: Duration;\n };\n profiling?: boolean;\n profilingGroup?: import(\"aws-cdk-lib/aws-codeguruprofiler\").IProfilingGroup;\n provisionedConcurrentExecutions?: number;\n reservedConcurrentExecutions?: number;\n retryAttempts?: number;\n roleTag?: string;\n runtime?: lambda.Runtime;\n runtimeManagementMode?: lambda.RuntimeManagementMode;\n secrets?: JaypieEnvSecret[];\n securityGroups?: ec2.ISecurityGroup[];\n timeout?: Duration | number;\n tracing?: lambda.Tracing;\n vendorTag?: string;\n vpc?: ec2.IVpc;\n vpcSubnets?: ec2.SubnetSelection;\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 _reference: lambda.IFunction;\n\n constructor(scope: Construct, id: string, props: JaypieLambdaProps) {\n super(scope, id);\n\n const {\n allowAllOutbound,\n allowPublicSubnet,\n architecture = lambda.Architecture.X86_64,\n code,\n datadogApiKeyArn,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment: initialEnvironment = {},\n envSecrets = {},\n ephemeralStorageSize,\n filesystem,\n handler = \"index.handler\",\n initialPolicy,\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n profiling,\n profilingGroup,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n retryAttempts,\n roleTag = CDK.ROLE.PROCESSING,\n runtime = lambda.Runtime.NODEJS_22_X,\n runtimeManagementMode,\n secrets = [],\n securityGroups,\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n tracing,\n vendorTag,\n vpc,\n vpcSubnets,\n } = props;\n\n // Get base environment with defaults\n const environment = jaypieLambdaEnv({ initialEnvironment });\n\n const codeAsset =\n typeof code === \"string\" ? lambda.Code.fromAsset(code) : code;\n\n // Create a working copy of layers\n const resolvedLayers = [...layers];\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 // Add ParamsAndSecrets layer if configured\n const resolvedParamsAndSecrets = resolveParamsAndSecrets({\n paramsAndSecrets,\n options: paramsAndSecretsOptions,\n });\n\n // Create Lambda Function\n this._lambda = new lambda.Function(this, \"Function\", {\n allowAllOutbound,\n allowPublicSubnet,\n architecture,\n code: codeAsset,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment: {\n ...environment,\n ...secretsEnvironment,\n ...jaypieSecretsEnvironment,\n },\n ephemeralStorageSize,\n filesystem,\n handler,\n initialPolicy,\n layers: resolvedLayers,\n logRetention,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize,\n paramsAndSecrets: resolvedParamsAndSecrets,\n profiling,\n profilingGroup,\n reservedConcurrentExecutions,\n retryAttempts,\n runtime,\n runtimeManagementMode,\n securityGroups,\n timeout:\n typeof timeout === \"number\" ? Duration.seconds(timeout) : timeout,\n tracing,\n vpc,\n vpcSubnets,\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 addDatadogLayers(this._lambda, { datadogApiKeyArn });\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 // 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 reference(): lambda.IFunction {\n return this._reference;\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 get functionRef(): lambda.FunctionReference {\n return {\n functionArn: this._reference.functionArn,\n functionName: this._reference.functionName,\n };\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 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 grantInvokeLatestVersion(grantee: iam.IGrantable): iam.Grant {\n return this._reference.grantInvokeLatestVersion(grantee);\n }\n\n public grantInvokeVersion(\n grantee: iam.IGrantable,\n version: lambda.IVersion,\n ): iam.Grant {\n return this._reference.grantInvokeVersion(grantee, version);\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 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 public addEnvironment(key: string, value: string): void {\n this._lambda.addEnvironment(key, value);\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 allowAllOutbound,\n allowPublicSubnet,\n architecture,\n batchSize = 1,\n code,\n datadogApiKeyArn,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment = {},\n envSecrets = {},\n ephemeralStorageSize,\n fifo = true,\n filesystem,\n handler = \"index.handler\",\n initialPolicy,\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n profiling,\n profilingGroup,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n retryAttempts,\n roleTag,\n runtime = lambda.Runtime.NODEJS_22_X,\n runtimeManagementMode,\n secrets = [],\n securityGroups,\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n tracing,\n vendorTag,\n visibilityTimeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n vpc,\n vpcSubnets,\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 allowAllOutbound,\n allowPublicSubnet,\n architecture,\n code,\n datadogApiKeyArn,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment: {\n ...environment,\n CDK_ENV_QUEUE_URL: this._queue.queueUrl,\n },\n envSecrets,\n ephemeralStorageSize,\n filesystem,\n handler,\n initialPolicy,\n layers,\n logRetention,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n profiling,\n profilingGroup,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n retryAttempts,\n roleTag,\n runtime,\n runtimeManagementMode,\n secrets,\n securityGroups,\n timeout,\n tracing,\n vendorTag,\n vpc,\n vpcSubnets,\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 // 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 get functionRef(): lambda.FunctionReference {\n return this._lambdaConstruct.functionRef;\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 public addEnvironment(key: string, value: string): void {\n this._lambdaConstruct.addEnvironment(key, value);\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 {\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 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 public grantReplicationPermission(\n identity: iam.IGrantable,\n props: any,\n ): iam.Grant {\n return this._bucket.grantReplicationPermission(identity, props);\n }\n\n public addReplicationPolicy(policy: any): void {\n this._bucket.addReplicationPolicy(policy);\n }\n\n public get bucketRef(): s3.BucketReference {\n return {\n bucketArn: this._bucket.bucketArn,\n bucketName: this._bucket.bucketName,\n };\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 generateSecretString?: secretsmanager.SecretStringGenerator;\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 generateSecretString,\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 generateSecretString,\n secretStringValue: !generateSecretString && 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 { CDK, ConfigurationError } from \"@jaypie/cdk\";\nimport * as cdk from \"aws-cdk-lib\";\nimport {\n ARecord,\n CnameRecord,\n IHostedZone,\n MxRecord,\n NsRecord,\n RecordTarget,\n TxtRecord,\n} from \"aws-cdk-lib/aws-route53\";\nimport { Construct } from \"constructs\";\n\nimport { resolveHostedZone } from \"./helpers/resolveHostedZone\";\n\nexport interface JaypieDnsRecordProps {\n /**\n * Optional comment to add to the DNS record\n */\n comment?: string;\n /**\n * Optional record name (subdomain). If not provided, creates record at zone apex\n */\n recordName?: string;\n /**\n * Time to live for the DNS record\n * @default CDK.DNS.CONFIG.TTL (5 minutes)\n */\n ttl?: cdk.Duration;\n /**\n * The DNS record type (A, CNAME, MX, NS, TXT)\n */\n type: string;\n /**\n * Values for the DNS record. Format depends on record type:\n * - A: Array of IPv4 addresses (e.g., [\"1.2.3.4\", \"5.6.7.8\"])\n * - CNAME: Single domain name as first element (e.g., [\"example.com\"])\n * - MX: Array of objects with priority and hostName (e.g., [{priority: 10, hostName: \"mail.example.com\"}])\n * - NS: Array of name server addresses (e.g., [\"ns1.example.com\", \"ns2.example.com\"])\n * - TXT: Array of text values (e.g., [\"v=spf1 include:example.com ~all\"])\n */\n values: string[] | Array<{ hostName: string; priority: number }>;\n /**\n * The hosted zone where the record will be created.\n * Can be either:\n * - A string (zone name) - will lookup the hosted zone by domain name\n * - An IHostedZone object - will use the provided zone directly\n */\n zone: string | IHostedZone;\n}\n\nexport class JaypieDnsRecord extends Construct {\n public readonly record:\n | ARecord\n | CnameRecord\n | MxRecord\n | NsRecord\n | TxtRecord;\n\n constructor(scope: Construct, id: string, props: JaypieDnsRecordProps) {\n super(scope, id);\n\n const { comment, recordName, type, values } = props;\n const ttl = props.ttl || cdk.Duration.seconds(CDK.DNS.CONFIG.TTL);\n\n // Resolve the hosted zone (supports both string and IHostedZone)\n const zone = resolveHostedZone(scope, {\n name: `${id}HostedZone`,\n zone: props.zone,\n });\n\n // Common properties for all record types\n const baseProps = {\n comment,\n recordName,\n ttl,\n zone,\n };\n\n // Create the appropriate record based on type\n switch (type) {\n case CDK.DNS.RECORD.A: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"A record requires at least one IP address\",\n );\n }\n this.record = new ARecord(this, \"Record\", {\n ...baseProps,\n target: RecordTarget.fromIpAddresses(...(values as string[])),\n });\n break;\n }\n\n case CDK.DNS.RECORD.CNAME: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\"CNAME record requires a domain name\");\n }\n this.record = new CnameRecord(this, \"Record\", {\n ...baseProps,\n domainName: (values as string[])[0],\n });\n break;\n }\n\n case CDK.DNS.RECORD.MX: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"MX record requires at least one mail server\",\n );\n }\n this.record = new MxRecord(this, \"Record\", {\n ...baseProps,\n values: values as Array<{ hostName: string; priority: number }>,\n });\n break;\n }\n\n case CDK.DNS.RECORD.NS: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"NS record requires at least one name server\",\n );\n }\n this.record = new NsRecord(this, \"Record\", {\n ...baseProps,\n values: values as string[],\n });\n break;\n }\n\n case CDK.DNS.RECORD.TXT: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"TXT record requires at least one value\",\n );\n }\n this.record = new TxtRecord(this, \"Record\", {\n ...baseProps,\n values: values as string[],\n });\n break;\n }\n\n default:\n throw new ConfigurationError(\n `Unsupported DNS record type: ${type}. Supported types: A, CNAME, MX, NS, TXT`,\n );\n }\n\n // Add standard tags to the DNS record\n cdk.Tags.of(this.record).add(CDK.TAG.SERVICE, CDK.SERVICE.INFRASTRUCTURE);\n cdk.Tags.of(this.record).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n }\n}\n","import { CfnOutput, Duration, Fn, Stack, Tags } from \"aws-cdk-lib\";\nimport {\n Effect,\n FederatedPrincipal,\n PolicyStatement,\n Role,\n} from \"aws-cdk-lib/aws-iam\";\nimport { Construct } from \"constructs\";\nimport { CDK, ConfigurationError } from \"@jaypie/cdk\";\n\nexport interface JaypieGitHubDeployRoleProps {\n oidcProviderArn?: string;\n output?: boolean | string;\n repoRestriction?: string;\n}\n\nexport class JaypieGitHubDeployRole extends Construct {\n private readonly _role: Role;\n\n constructor(\n scope: Construct,\n id: string,\n props: JaypieGitHubDeployRoleProps = {},\n ) {\n super(scope, id);\n\n const {\n oidcProviderArn = Fn.importValue(CDK.IMPORT.OIDC_PROVIDER),\n output = true,\n repoRestriction: propsRepoRestriction,\n } = props;\n\n // Extract account ID from the scope\n const accountId = Stack.of(this).account;\n\n // Resolve repoRestriction from props or environment variables\n let repoRestriction = propsRepoRestriction;\n if (!repoRestriction) {\n const envRepo = process.env.CDK_ENV_REPO || process.env.PROJECT_REPO;\n if (!envRepo) {\n throw new ConfigurationError(\n \"No repoRestriction provided. Set repoRestriction prop, CDK_ENV_REPO, or PROJECT_REPO environment variable\",\n );\n }\n // Extract organization from owner/repo format and create org-wide restriction\n const organization = envRepo.split(\"/\")[0];\n repoRestriction = `repo:${organization}/*:*`;\n }\n\n // Create the IAM role\n this._role = new Role(this, \"GitHubActionsRole\", {\n assumedBy: new FederatedPrincipal(\n oidcProviderArn,\n {\n StringLike: {\n \"token.actions.githubusercontent.com:sub\": repoRestriction,\n },\n },\n \"sts:AssumeRoleWithWebIdentity\",\n ),\n maxSessionDuration: Duration.hours(1),\n path: \"/\",\n });\n Tags.of(this._role).add(CDK.TAG.ROLE, CDK.ROLE.DEPLOY);\n\n // Allow the role to access the GitHub OIDC provider\n this._role.addToPolicy(\n new PolicyStatement({\n actions: [\"sts:AssumeRoleWithWebIdentity\"],\n resources: [`arn:aws:iam::${accountId}:oidc-provider/*`],\n }),\n );\n\n // Allow the role to deploy CDK apps\n this._role.addToPolicy(\n new PolicyStatement({\n actions: [\n \"cloudformation:CreateStack\",\n \"cloudformation:DeleteStack\",\n \"cloudformation:DescribeStackEvents\",\n \"cloudformation:DescribeStackResource\",\n \"cloudformation:DescribeStackResources\",\n \"cloudformation:DescribeStacks\",\n \"cloudformation:GetTemplate\",\n \"cloudformation:SetStackPolicy\",\n \"cloudformation:UpdateStack\",\n \"cloudformation:ValidateTemplate\",\n \"iam:PassRole\",\n \"route53:ListHostedZones*\",\n \"s3:GetObject\",\n \"s3:ListBucket\",\n ],\n effect: Effect.ALLOW,\n resources: [\"*\"],\n }),\n );\n\n this._role.addToPolicy(\n new PolicyStatement({\n actions: [\"iam:PassRole\", \"sts:AssumeRole\"],\n effect: Effect.ALLOW,\n resources: [\n \"arn:aws:iam::*:role/cdk-hnb659fds-deploy-role-*\",\n \"arn:aws:iam::*:role/cdk-hnb659fds-file-publishing-*\",\n \"arn:aws:iam::*:role/cdk-readOnlyRole\",\n ],\n }),\n );\n\n // Export the ARN of the role\n if (output !== false) {\n const outputId =\n typeof output === \"string\" ? output : \"GitHubActionsRoleArn\";\n new CfnOutput(this, outputId, {\n value: this._role.roleArn,\n });\n }\n }\n\n public get role(): Role {\n return this._role;\n }\n\n public get roleArn(): string {\n return this._role.roleArn;\n }\n\n public get roleName(): string {\n return this._role.roleName;\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 FilterPattern,\n ILogGroup,\n LogGroup,\n RetentionDays,\n} from \"aws-cdk-lib/aws-logs\";\nimport { LambdaDestination } from \"aws-cdk-lib/aws-logs-destinations\";\nimport { HostedZone, IHostedZone } from \"aws-cdk-lib/aws-route53\";\nimport { Construct } from \"constructs\";\n\nimport { resolveDatadogLoggingDestination } from \"./helpers/resolveDatadogLoggingDestination\";\nimport { JaypieDnsRecord, JaypieDnsRecordProps } from \"./JaypieDnsRecord\";\n\nconst SERVICE = {\n ROUTE53: \"route53.amazonaws.com\",\n} as const;\n\n/**\n * DNS record configuration for JaypieHostedZone\n * Omits 'zone' since it will be automatically set to the created hosted zone\n */\nexport interface JaypieHostedZoneRecordProps\n extends Omit<JaypieDnsRecordProps, \"zone\"> {\n /**\n * Optional ID for the DNS record construct\n * @default Generated from record type and name\n */\n id?: string;\n}\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 * Log destination configuration\n * - LambdaDestination: Use a specific Lambda destination\n * - true: Use Datadog logging destination (default)\n * - false: Do not use a destination\n * @default true\n */\n destination?: LambdaDestination | boolean;\n /**\n * Optional DNS records to create for this hosted zone\n * Each record will be created as a JaypieDnsRecord construct\n */\n records?: JaypieHostedZoneRecordProps[];\n}\n\nexport class JaypieHostedZone extends Construct {\n public readonly hostedZone: IHostedZone;\n public readonly logGroup: ILogGroup;\n public readonly dnsRecords: JaypieDnsRecord[];\n\n /**\n * Create a new hosted zone with query logging and optional DNS records\n */\n constructor(scope: Construct, id: string, props: JaypieHostedZoneProps) {\n super(scope, id);\n\n const { zoneName, project } = props;\n const destination = props.destination ?? true;\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 based on configuration\n if (destination !== false) {\n const lambdaDestination =\n destination === true\n ? resolveDatadogLoggingDestination(scope)\n : destination;\n\n this.logGroup.addSubscriptionFilter(\"DatadogLambdaDestination\", {\n destination: lambdaDestination,\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 // Create DNS records if provided\n this.dnsRecords = [];\n if (props.records) {\n props.records.forEach((recordConfig, index) => {\n const { id, ...recordProps } = recordConfig;\n // Generate a default ID if not provided\n const recordId =\n id ||\n `${recordProps.type}${recordProps.recordName ? `-${recordProps.recordName}` : \"\"}-${index}`;\n\n const dnsRecord = new JaypieDnsRecord(this, recordId, {\n ...recordProps,\n zone: this.hostedZone,\n });\n\n this.dnsRecords.push(dnsRecord);\n });\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 { Duration, Tags } from \"aws-cdk-lib\";\nimport { CfnAssignment, CfnPermissionSet } from \"aws-cdk-lib/aws-sso\";\nimport { ManagedPolicy } from \"aws-cdk-lib/aws-iam\";\nimport { CDK, ConfigurationError } from \"@jaypie/cdk\";\n\n/**\n * Mapping of account IDs to permission set names\n * Key: AWS account ID\n * Value: Array of permission set names to assign to this account\n */\nexport interface AccountAssignments {\n [accountId: string]: string[];\n}\n\n/**\n * Properties for the JaypieSsoPermissions construct\n */\nexport interface JaypieSsoPermissionsProps {\n /**\n * ARN of the IAM Identity Center instance\n * If not provided, falls back to CDK_ENV_IAM_IDENTITY_CENTER_ARN\n * If neither is set, SSO setup will be skipped\n */\n iamIdentityCenterArn?: string;\n\n /**\n * Google Workspace group GUID for administrators\n * Example: \"b4c8b438-4031-7000-782d-5046945fb956\"\n */\n administratorGroupId?: string;\n\n /**\n * Google Workspace group GUID for analysts\n * Example: \"2488f4e8-d061-708e-abe1-c315f0e30005\"\n */\n analystGroupId?: string;\n\n /**\n * Google Workspace group GUID for developers\n * Example: \"b438a4f8-e0e1-707c-c6e8-21841daf9ad1\"\n */\n developerGroupId?: string;\n\n /**\n * Account assignments for administrator group\n * Maps account IDs to arrays of permission set names\n * Example:\n * {\n * \"211125635435\": [\"Administrator\", \"Analyst\"],\n * \"381492033431\": [\"Administrator\"],\n * }\n */\n administratorAccountAssignments?: AccountAssignments;\n\n /**\n * Account assignments for analyst group\n * Maps account IDs to arrays of permission set names\n * Example:\n * {\n * \"211125635435\": [\"Analyst\"],\n * \"381492033431\": [\"Analyst\"],\n * }\n */\n analystAccountAssignments?: AccountAssignments;\n\n /**\n * Account assignments for developer group\n * Maps account IDs to arrays of permission set names\n * Example:\n * {\n * \"211125635435\": [\"Developer\"],\n * }\n */\n developerAccountAssignments?: AccountAssignments;\n}\n\n/**\n * JaypieSsoPermissions Construct\n *\n * Creates and manages AWS IAM Identity Center (SSO) permission sets and assignments\n *\n * @example\n * const permissionSets = new JaypieSsoPermissions(this, \"PermissionSets\", {\n * iamIdentityCenterArn: \"arn:aws:sso:::instance/...\",\n * administratorGroupId: \"b4c8b438-4031-7000-782d-5046945fb956\",\n * analystGroupId: \"2488f4e8-d061-708e-abe1-c315f0e30005\",\n * developerGroupId: \"b438a4f8-e0e1-707c-c6e8-21841daf9ad1\",\n * administratorAccountAssignments: {\n * \"211125635435\": [\"Administrator\", \"Analyst\", \"Developer\"],\n * \"381492033431\": [\"Administrator\", \"Analyst\"],\n * },\n * analystAccountAssignments: {\n * \"211125635435\": [\"Analyst\", \"Developer\"],\n * \"381492033431\": [],\n * },\n * developerAccountAssignments: {\n * \"211125635435\": [\"Analyst\", \"Developer\"],\n * \"381492033431\": [],\n * },\n * });\n */\nexport class JaypieSsoPermissions extends Construct {\n public readonly administratorPermissionSet?: CfnPermissionSet;\n public readonly analystPermissionSet?: CfnPermissionSet;\n public readonly developerPermissionSet?: CfnPermissionSet;\n\n constructor(scope: Construct, id: string, props: JaypieSsoPermissionsProps) {\n super(scope, id);\n\n const {\n iamIdentityCenterArn: iamIdentityCenterArnProp,\n administratorGroupId,\n analystGroupId,\n developerGroupId,\n administratorAccountAssignments,\n analystAccountAssignments,\n developerAccountAssignments,\n } = props;\n\n const iamIdentityCenterArn =\n iamIdentityCenterArnProp || process.env.CDK_ENV_IAM_IDENTITY_CENTER_ARN;\n\n if (!iamIdentityCenterArn) {\n // If no IAM Identity Center ARN provided, skip SSO setup\n return;\n }\n\n //\n // Permission Sets\n //\n\n this.administratorPermissionSet = new CfnPermissionSet(\n this,\n \"AdministratorPermissionSet\",\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n name: \"Administrator\",\n\n // Optional\n description: \"Unrestricted access\",\n inlinePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:ViewUsage\",\n \"aws-portal:ViewBilling\",\n \"budgets:*\",\n \"cur:DescribeReportDefinitions\",\n \"cur:PutReportDefinition\",\n \"cur:DeleteReportDefinition\",\n \"cur:ModifyReportDefinition\",\n ],\n Resource: \"*\",\n },\n ],\n },\n managedPolicies: [\n ManagedPolicy.fromAwsManagedPolicyName(\"AdministratorAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"AWSManagementConsoleBasicUserAccess\",\n ).managedPolicyArn,\n ],\n sessionDuration: Duration.hours(1).toIsoString(),\n tags: [\n {\n key: CDK.TAG.SERVICE,\n value: CDK.SERVICE.SSO,\n },\n {\n key: CDK.TAG.ROLE,\n value: CDK.ROLE.SECURITY,\n },\n ],\n },\n );\n\n this.analystPermissionSet = new CfnPermissionSet(\n this,\n \"AnalystPermissionSet\",\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n name: \"Analyst\",\n\n // Optional\n description: \"Read-only access; may expand to limited write access\",\n inlinePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:ViewUsage\",\n \"aws-portal:ViewBilling\",\n \"budgets:Describe*\",\n \"budgets:View*\",\n \"ce:Get*\",\n \"ce:List*\",\n \"cloudformation:Describe*\",\n \"cloudformation:Get*\",\n \"cloudformation:List*\",\n \"cloudwatch:BatchGet*\",\n \"cloudwatch:Get*\",\n \"cloudwatch:List*\",\n \"cost-optimization-hub:Get*\",\n \"cost-optimization-hub:List*\",\n \"ec2:Describe*\",\n \"ec2:Get*\",\n \"ec2:List*\",\n \"ec2:Search*\",\n \"iam:Get*\",\n \"iam:List*\",\n \"iam:PassRole\",\n \"lambda:Get*\",\n \"lambda:List*\",\n \"logs:Describe*\",\n \"logs:Get*\",\n \"logs:List*\",\n \"pipes:Describe*\",\n \"pipes:List*\",\n \"s3:Get*\",\n \"s3:List*\",\n \"secretsmanager:GetRandomPassword\",\n \"secretsmanager:GetResourcePolicy\",\n \"secretsmanager:List*\",\n \"securityhub:Describe*\",\n \"securityhub:Get*\",\n \"securityhub:List*\",\n \"servicecatalog:Describe*\",\n \"sns:Get*\",\n \"sns:List*\",\n \"sqs:Get*\",\n \"sqs:List*\",\n \"states:Describe*\",\n \"states:Get*\",\n \"states:List*\",\n \"tag:*\",\n \"xray:*\",\n ],\n Resource: \"*\",\n },\n ],\n },\n managedPolicies: [\n ManagedPolicy.fromAwsManagedPolicyName(\"AmazonQDeveloperAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"AWSManagementConsoleBasicUserAccess\",\n ).managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\"ReadOnlyAccess\")\n .managedPolicyArn,\n ],\n sessionDuration: Duration.hours(12).toIsoString(),\n tags: [\n {\n key: CDK.TAG.SERVICE,\n value: CDK.SERVICE.SSO,\n },\n {\n key: CDK.TAG.ROLE,\n value: CDK.ROLE.SECURITY,\n },\n ],\n },\n );\n\n this.developerPermissionSet = new CfnPermissionSet(\n this,\n \"DeveloperPermissionSet\",\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n name: \"Developer\",\n\n // Optional\n description: \"Administrative access with limited restrictions\",\n inlinePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"budgets:*\",\n \"ce:*\",\n \"cloudformation:*\",\n \"cloudwatch:*\",\n \"cost-optimization-hub:*\",\n \"ec2:*\",\n \"iam:Get*\",\n \"iam:List*\",\n \"iam:PassRole\",\n \"lambda:*\",\n \"logs:*\",\n \"pipes:*\",\n \"s3:*\",\n \"secretsmanager:*\",\n \"securityhub:*\",\n \"servicecatalog:*\",\n \"sns:*\",\n \"sqs:*\",\n \"states:*\",\n \"tag:*\",\n \"xray:*\",\n ],\n Resource: \"*\",\n },\n ],\n },\n managedPolicies: [\n ManagedPolicy.fromAwsManagedPolicyName(\"AmazonQDeveloperAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"AWSManagementConsoleBasicUserAccess\",\n ).managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\"ReadOnlyAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"job-function/SystemAdministrator\",\n ).managedPolicyArn,\n ],\n sessionDuration: Duration.hours(4).toIsoString(),\n tags: [\n {\n key: CDK.TAG.SERVICE,\n value: CDK.SERVICE.SSO,\n },\n {\n key: CDK.TAG.ROLE,\n value: CDK.ROLE.SECURITY,\n },\n ],\n },\n );\n\n // Map permission set names to their ARNs and labels\n const permissionSetMap: Record<string, { arn: string; label: string }> = {\n Administrator: {\n arn: this.administratorPermissionSet.attrPermissionSetArn,\n label: \"Administrator\",\n },\n Analyst: {\n arn: this.analystPermissionSet.attrPermissionSetArn,\n label: \"Analyst\",\n },\n Developer: {\n arn: this.developerPermissionSet.attrPermissionSetArn,\n label: \"Developer\",\n },\n };\n\n //\n // Assignments\n //\n\n // Helper function to create assignments for a group\n const createAssignments = (\n groupId: string | undefined,\n accountAssignments: AccountAssignments | undefined,\n ) => {\n if (!groupId || !accountAssignments) {\n return; // Skip if group ID or assignments not provided\n }\n\n Object.keys(accountAssignments).forEach((accountId) => {\n const permissionSetNames = accountAssignments[accountId];\n\n permissionSetNames.forEach((permissionSetName) => {\n const permissionSet = permissionSetMap[permissionSetName];\n\n if (!permissionSet) {\n throw new ConfigurationError(\n `Unknown permission set: ${permissionSetName}. Valid options: ${Object.keys(permissionSetMap).join(\", \")}`,\n );\n }\n\n const accountAssignment = new CfnAssignment(\n this,\n `AccountAssignment-${accountId}-${permissionSet.label}Role-${groupId}Group`,\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n permissionSetArn: permissionSet.arn,\n principalId: groupId,\n principalType: CDK.PRINCIPAL_TYPE.GROUP,\n targetId: accountId,\n targetType: CDK.TARGET_TYPE.AWS_ACCOUNT,\n },\n );\n Tags.of(accountAssignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(accountAssignment).add(CDK.TAG.ROLE, CDK.ROLE.SECURITY);\n });\n });\n };\n\n // Create assignments for each group\n createAssignments(administratorGroupId, administratorAccountAssignments);\n createAssignments(analystGroupId, analystAccountAssignments);\n createAssignments(developerGroupId, developerAccountAssignments);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Stack, Tags } from \"aws-cdk-lib\";\nimport { CfnApplication } from \"aws-cdk-lib/aws-sam\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { ConfigurationError } from \"@jaypie/errors\";\n\n//\n//\n// Constants\n//\n\nconst DEFAULT_APPLICATION_ID =\n \"arn:aws:serverlessrepo:us-east-2:004480582608:applications/SSOSync\";\nconst DEFAULT_APPLICATION_VERSION = \"2.3.3\";\nconst DEFAULT_GOOGLE_GROUP_MATCH = \"name:AWS*\";\n\n//\n//\n// Types\n//\n\nexport interface JaypieSsoSyncApplicationProps {\n googleAdminEmail?: string;\n googleAdminEmailEnvKey?: string;\n googleCredentials?: string;\n googleCredentialsEnvKey?: string;\n googleGroupMatch?: string;\n googleGroupMatchEnvKey?: string;\n identityStoreId?: string;\n identityStoreIdEnvKey?: string;\n scimEndpointAccessToken?: string;\n scimEndpointAccessTokenEnvKey?: string;\n scimEndpointUrl?: string;\n scimEndpointUrlEnvKey?: string;\n semanticVersion?: string;\n semanticVersionEnvKey?: string;\n ssoSyncApplicationId?: string;\n tags?: { [key: string]: string };\n}\n\n//\n//\n// Class\n//\n\nexport class JaypieSsoSyncApplication extends Construct {\n private readonly _application: CfnApplication;\n\n constructor(\n scope: Construct,\n id = \"SsoSyncApplication\",\n props: JaypieSsoSyncApplicationProps = {},\n ) {\n super(scope, id);\n\n const {\n googleAdminEmail,\n googleAdminEmailEnvKey = \"CDK_ENV_SSOSYNC_GOOGLE_ADMIN_EMAIL\",\n googleCredentials,\n googleCredentialsEnvKey = \"CDK_ENV_SSOSYNC_GOOGLE_CREDENTIALS\",\n googleGroupMatch,\n googleGroupMatchEnvKey = \"CDK_ENV_SSOSYNC_GOOGLE_GROUP_MATCH\",\n identityStoreId,\n identityStoreIdEnvKey = \"CDK_ENV_SSOSYNC_IDENTITY_STORE_ID\",\n scimEndpointAccessToken,\n scimEndpointAccessTokenEnvKey = \"CDK_ENV_SCIM_ENDPOINT_ACCESS_TOKEN\",\n scimEndpointUrl,\n scimEndpointUrlEnvKey = \"CDK_ENV_SSOSYNC_SCIM_ENDPOINT_URL\",\n semanticVersion,\n semanticVersionEnvKey = \"CDK_ENV_SSOSYNC_SEMANTIC_VERSION\",\n ssoSyncApplicationId = DEFAULT_APPLICATION_ID,\n tags,\n } = props;\n\n // Resolve all values from props or environment variables\n const resolvedGoogleAdminEmail =\n googleAdminEmail || process.env[googleAdminEmailEnvKey];\n const resolvedGoogleCredentials =\n googleCredentials || process.env[googleCredentialsEnvKey];\n const resolvedGoogleGroupMatch =\n googleGroupMatch ||\n process.env[googleGroupMatchEnvKey] ||\n DEFAULT_GOOGLE_GROUP_MATCH;\n const resolvedIdentityStoreId =\n identityStoreId || process.env[identityStoreIdEnvKey];\n const resolvedScimEndpointAccessToken =\n scimEndpointAccessToken || process.env[scimEndpointAccessTokenEnvKey];\n const resolvedScimEndpointUrl =\n scimEndpointUrl || process.env[scimEndpointUrlEnvKey];\n const resolvedSemanticVersion =\n semanticVersion ||\n process.env[semanticVersionEnvKey] ||\n DEFAULT_APPLICATION_VERSION;\n\n // Validate required parameters\n const missingParams: string[] = [];\n\n if (!resolvedGoogleAdminEmail) {\n missingParams.push(\n `googleAdminEmail or ${googleAdminEmailEnvKey} environment variable`,\n );\n }\n if (!resolvedGoogleCredentials) {\n missingParams.push(\n `googleCredentials or ${googleCredentialsEnvKey} environment variable`,\n );\n }\n if (!resolvedIdentityStoreId) {\n missingParams.push(\n `identityStoreId or ${identityStoreIdEnvKey} environment variable`,\n );\n }\n if (!resolvedScimEndpointAccessToken) {\n missingParams.push(\n `scimEndpointAccessToken or ${scimEndpointAccessTokenEnvKey} environment variable`,\n );\n }\n if (!resolvedScimEndpointUrl) {\n missingParams.push(\n `scimEndpointUrl or ${scimEndpointUrlEnvKey} environment variable`,\n );\n }\n\n if (missingParams.length > 0) {\n throw new ConfigurationError(\n `JaypieSsoSyncApplication missing required configuration: ${missingParams.join(\", \")}`,\n );\n }\n\n // Create the SSO Sync Application\n // Type assertion is safe because we validated all required values above\n this._application = new CfnApplication(this, \"Application\", {\n location: {\n applicationId: ssoSyncApplicationId,\n semanticVersion: resolvedSemanticVersion,\n },\n parameters: {\n GoogleAdminEmail: resolvedGoogleAdminEmail!,\n GoogleCredentials: resolvedGoogleCredentials!,\n GoogleGroupMatch: resolvedGoogleGroupMatch,\n IdentityStoreID: resolvedIdentityStoreId!,\n Region: Stack.of(this).region,\n SCIMEndpointAccessToken: resolvedScimEndpointAccessToken!,\n SCIMEndpointUrl: resolvedScimEndpointUrl!,\n },\n });\n\n // Add tags\n const defaultTags = {\n [CDK.TAG.ROLE]: CDK.ROLE.SECURITY,\n };\n\n const allTags = { ...defaultTags, ...tags };\n Object.entries(allTags).forEach(([key, value]) => {\n Tags.of(this._application).add(key, value);\n });\n }\n\n public get application(): CfnApplication {\n return this._application;\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 grantReplicationPermission(identity: any, props: any): any {\n return this.bucket.grantReplicationPermission(identity, props);\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 get bucketRef(): s3.BucketReference {\n return {\n bucketArn: this.bucket.bucketArn,\n bucketName: this.bucket.bucketName,\n };\n }\n}\n"],"names":["CDK","secretsmanager","DatadogLambda","Tags","ConfigurationError","DEFAULT_FUNCTION_NAME","lambda","cdk","Stack","logDestinations","route53","Construct","mergeDomain","acm","apiGateway","route53Targets","Duration","RemovalPolicy","sqs","lambdaEventSources","s3","s3n","Fn","CfnOutput","SecretValue","ARecord","RecordTarget","CnameRecord","MxRecord","NsRecord","TxtRecord","Role","FederatedPrincipal","PolicyStatement","Effect","LogGroup","RetentionDays","ServicePrincipal","FilterPattern","HostedZone","CfnPermissionSet","ManagedPolicy","CfnAssignment","CfnApplication","isValidSubdomain","isValidHostname","cloudfront","origins"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/helpers/addDatadogLayers.ts","../../../src/helpers/constructEnvName.ts","../../../src/helpers/constructStackName.ts","../../../src/helpers/constructTagger.ts","../../../src/helpers/envHostname.ts","../../../src/helpers/isEnv.ts","../../../src/helpers/jaypieLambdaEnv.ts","../../../src/helpers/resolveDatadogForwarderFunction.ts","../../../src/helpers/resolveDatadogLayers.ts","../../../src/helpers/resolveDatadogLoggingDestination.ts","../../../src/helpers/resolveHostedZone.ts","../../../src/helpers/resolveParamsAndSecrets.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/JaypieDnsRecord.ts","../../../src/JaypieGitHubDeployRole.ts","../../../src/JaypieExpressLambda.ts","../../../src/JaypieHostedZone.ts","../../../src/JaypieInfrastructureStack.ts","../../../src/JaypieMongoDbSecret.ts","../../../src/JaypieOpenAiSecret.ts","../../../src/JaypieSsoPermissions.ts","../../../src/JaypieSsoSyncApplication.ts","../../../src/JaypieTraceSigningKeySecret.ts","../../../src/JaypieWebDeploymentBucket.ts"],"sourcesContent":["import * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { DatadogLambda } from \"datadog-cdk-constructs-v2\";\n\nexport interface AddDatadogLayerOptions {\n datadogApiKeyArn?: string;\n}\n\nexport function addDatadogLayers(\n lambdaFunction: lambda.Function,\n options: AddDatadogLayerOptions = {},\n): boolean {\n const datadogApiKeyArn = options?.datadogApiKeyArn;\n\n const resolvedDatadogApiKeyArn =\n datadogApiKeyArn ||\n process.env.DATADOG_API_KEY_ARN ||\n process.env.CDK_ENV_DATADOG_API_KEY_ARN;\n if (!resolvedDatadogApiKeyArn) {\n return false;\n }\n\n // Define Datadog environment variables\n const datadogEnvVars = {\n DD_API_KEY_SECRET_ARN: resolvedDatadogApiKeyArn,\n DD_ENHANCED_METRICS: \"true\",\n DD_ENV: process.env.PROJECT_ENV || \"\",\n DD_PROFILING_ENABLED: \"false\",\n DD_SERVERLESS_APPSEC_ENABLED: \"false\",\n DD_SERVICE: process.env.PROJECT_SERVICE || \"\",\n DD_SITE: CDK.DATADOG.SITE,\n DD_TAGS: `${CDK.TAG.SPONSOR}:${process.env.PROJECT_SPONSOR || \"\"}`,\n DD_TRACE_OTEL_ENABLED: \"false\",\n };\n\n // Add environment variables only if they don't already exist\n Object.entries(datadogEnvVars).forEach(([key, value]) => {\n lambdaFunction.addEnvironment(key, value);\n });\n\n const datadogApiKeySecret: secretsmanager.ISecret =\n secretsmanager.Secret.fromSecretCompleteArn(\n lambdaFunction,\n \"DatadogApiKey\",\n resolvedDatadogApiKeyArn,\n );\n const datadogLambda = new DatadogLambda(lambdaFunction, \"DatadogLambda\", {\n apiKeySecret: datadogApiKeySecret, // apiKeySecret auto-grants secret access to the added lambdas\n nodeLayerVersion: CDK.DATADOG.LAYER.NODE,\n extensionLayerVersion: CDK.DATADOG.LAYER.EXTENSION,\n env: process.env.PROJECT_ENV,\n service: process.env.PROJECT_SERVICE,\n version: process.env.PROJECT_VERSION,\n });\n datadogLambda.addLambdaFunctions([lambdaFunction]);\n\n return true;\n}\n","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\"; // This default is intentionally short. It is not a special value but should not be changed.\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 { Construct } from \"constructs\";\nimport { 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 constructTagger(\n construct: Construct,\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(construct).add(\n CDK.TAG.BUILD_HEX,\n process.env.PROJECT_COMMIT.slice(0, 8),\n );\n }\n Tags.of(construct).add(CDK.TAG.BUILD_DATE, new Date().toISOString());\n Tags.of(construct).add(CDK.TAG.BUILD_TIME, Date.now().toString());\n if (process.env.PROJECT_COMMIT)\n Tags.of(construct).add(CDK.TAG.COMMIT, process.env.PROJECT_COMMIT);\n Tags.of(construct).add(CDK.TAG.CREATION, CDK.CREATION.CDK);\n if (process.env.PROJECT_ENV)\n Tags.of(construct).add(CDK.TAG.ENV, process.env.PROJECT_ENV);\n if (process.env.PROJECT_NONCE)\n Tags.of(construct).add(CDK.TAG.NONCE, process.env.PROJECT_NONCE);\n if (process.env.PROJECT_KEY)\n Tags.of(construct).add(CDK.TAG.PROJECT, process.env.PROJECT_KEY);\n Tags.of(construct).add(CDK.TAG.ROLE, CDK.ROLE.STACK);\n if (process.env.PROJECT_SERVICE)\n Tags.of(construct).add(CDK.TAG.SERVICE, process.env.PROJECT_SERVICE);\n if (process.env.PROJECT_SPONSOR)\n Tags.of(construct).add(CDK.TAG.SPONSOR, process.env.PROJECT_SPONSOR);\n if (stackName) Tags.of(construct).add(CDK.TAG.STACK, stackName);\n if (version) Tags.of(construct).add(CDK.TAG.VERSION, version);\n\n return true;\n}\n","import { ConfigurationError } from \"@jaypie/cdk\";\n\nexport function envHostname({\n component,\n domain,\n env,\n subdomain,\n}: {\n component?: string;\n domain?: string;\n env?: string;\n subdomain?: string;\n} = {}) {\n const resolvedDomain =\n domain || process.env.CDK_ENV_DOMAIN || process.env.CDK_ENV_HOSTED_ZONE;\n\n if (!resolvedDomain) {\n throw new ConfigurationError(\n \"No hostname `domain` provided. Set CDK_ENV_DOMAIN or CDK_ENV_HOSTED_ZONE to use environment domain\",\n );\n }\n\n const resolvedComponent =\n component === \"@\" || component === \"\" ? undefined : component;\n const resolvedSubdomain = subdomain || process.env.CDK_ENV_SUBDOMAIN;\n const resolvedEnv = env || process.env.PROJECT_ENV;\n\n const parts = [\n resolvedComponent,\n resolvedSubdomain,\n resolvedEnv,\n resolvedDomain,\n ].filter((part) => part);\n\n return parts.join(\".\");\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","export interface JaypieLambdaEnvOptions {\n initialEnvironment?: { [key: string]: string };\n}\n\nexport function jaypieLambdaEnv(options: JaypieLambdaEnvOptions = {}): {\n [key: string]: string;\n} {\n const { initialEnvironment = {} } = options;\n\n // Start with empty environment - we'll only add valid values\n let environment: { [key: string]: string } = {};\n\n // First, add all valid string values from initialEnvironment\n Object.entries(initialEnvironment).forEach(([key, value]) => {\n if (typeof value === \"string\") {\n environment[key] = value;\n }\n });\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, it's already added above\n // If user passes non-string falsy value, omit the key\n if (!userValue) {\n delete environment[key];\n }\n // Ignore non-string truthy values (key not added)\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_CHAOS\",\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 return environment;\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport * as cdk from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport { Construct } from \"constructs\";\n\nconst DEFAULT_FUNCTION_NAME = \"DatadogForwarderFunction\";\n\n// Cache to store resolved functions\n// Using nested structure to support multiple functions per scope with automatic GC\nconst functionCache = new WeakMap<Construct, Map<string, lambda.IFunction>>();\n\nexport interface ResolveDatadogForwarderFunctionOptions {\n import?: string;\n name?: string;\n}\n\nexport function resolveDatadogForwarderFunction(\n scope: Construct,\n options?: ResolveDatadogForwarderFunctionOptions,\n): lambda.IFunction {\n const { import: importValue, name } = options || {};\n\n const functionName = name || DEFAULT_FUNCTION_NAME;\n const importKey = importValue || CDK.IMPORT.DATADOG_LOG_FORWARDER;\n\n // Create a cache key based on name and import\n const cacheKey = `${functionName}:${importKey}`;\n\n // Get or create scope cache\n let scopeCache = functionCache.get(scope);\n if (!scopeCache) {\n scopeCache = new Map<string, lambda.IFunction>();\n functionCache.set(scope, scopeCache);\n }\n\n // Return cached function if it exists\n const cachedFunction = scopeCache.get(cacheKey);\n if (cachedFunction) {\n return cachedFunction;\n }\n\n // Create and cache the function\n const func = lambda.Function.fromFunctionArn(\n scope,\n functionName,\n cdk.Fn.importValue(importKey),\n );\n scopeCache.set(cacheKey, func);\n\n return func;\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport { Stack } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\nimport { Construct } from \"constructs\";\n\nexport interface ResolveDatadogLayerOptions {\n datadogApiKeyArn?: string;\n uniqueId?: string;\n}\n\nexport function resolveDatadogLayers(\n scope: Construct,\n options: ResolveDatadogLayerOptions = {},\n): lambda.ILayerVersion[] | undefined {\n const { datadogApiKeyArn, uniqueId } = options;\n\n let resolvedRegion = Stack.of(scope).region || \"us-east-1\";\n\n // Resolve the Datadog API key ARN from multiple sources\n const resolvedDatadogApiKeyArn =\n datadogApiKeyArn ||\n process.env.DATADOG_API_KEY_ARN ||\n process.env.CDK_ENV_DATADOG_API_KEY_ARN;\n\n // Return null if no API key is found\n if (!resolvedDatadogApiKeyArn) {\n return undefined;\n }\n\n const layerIdSuffix =\n uniqueId || process.env.PROJECT_NONCE || Date.now().toString();\n\n // Create Datadog Node.js layer\n const datadogNodeLayer = lambda.LayerVersion.fromLayerVersionArn(\n scope,\n `DatadogNodeLayer-${layerIdSuffix}`,\n `arn:aws:lambda:${resolvedRegion}:464622532012:layer:Datadog-Node20-x:${CDK.DATADOG.LAYER.NODE}`,\n );\n\n // Create Datadog Extension layer\n const datadogExtensionLayer = lambda.LayerVersion.fromLayerVersionArn(\n scope,\n `DatadogExtensionLayer-${layerIdSuffix}`,\n `arn:aws:lambda:${resolvedRegion}:464622532012:layer:Datadog-Extension:${CDK.DATADOG.LAYER.EXTENSION}`,\n );\n\n return [datadogNodeLayer, datadogExtensionLayer];\n}\n","import { CDK } from \"@jaypie/cdk\";\nimport * as logDestinations from \"aws-cdk-lib/aws-logs-destinations\";\nimport { Construct } from \"constructs\";\n\nimport {\n resolveDatadogForwarderFunction,\n ResolveDatadogForwarderFunctionOptions,\n} from \"./resolveDatadogForwarderFunction\";\n\nconst DEFAULT_FUNCTION_NAME = \"DatadogForwarderFunction\";\n\n// Cache to store resolved logging destinations\n// Using nested structure to support multiple destinations per scope with automatic GC\nconst destinationCache = new WeakMap<\n Construct,\n Map<string, logDestinations.LambdaDestination>\n>();\n\nexport function resolveDatadogLoggingDestination(\n scope: Construct,\n options?: ResolveDatadogForwarderFunctionOptions,\n): logDestinations.LambdaDestination {\n const { import: importValue, name } = options || {};\n\n // Create a cache key based on name and import (same as forwarder function)\n const functionName = name || DEFAULT_FUNCTION_NAME;\n const importKey = importValue || CDK.IMPORT.DATADOG_LOG_FORWARDER;\n const cacheKey = `${functionName}:${importKey}`;\n\n // Get or create scope cache\n let scopeCache = destinationCache.get(scope);\n if (!scopeCache) {\n scopeCache = new Map<string, logDestinations.LambdaDestination>();\n destinationCache.set(scope, scopeCache);\n }\n\n // Return cached destination if it exists\n const cachedDestination = scopeCache.get(cacheKey);\n if (cachedDestination) {\n return cachedDestination;\n }\n\n // Resolve the Datadog forwarder function\n const datadogForwarderFunction = resolveDatadogForwarderFunction(\n scope,\n options,\n );\n\n // Create and cache the logging destination\n const datadogLoggingDestination = new logDestinations.LambdaDestination(\n datadogForwarderFunction,\n );\n scopeCache.set(cacheKey, datadogLoggingDestination);\n\n return datadogLoggingDestination;\n}\n","import { Construct } from \"constructs\";\nimport * as route53 from \"aws-cdk-lib/aws-route53\";\nimport { ConfigurationError } from \"@jaypie/cdk\";\n\nexport function resolveHostedZone(\n scope: Construct,\n {\n name = \"HostedZone\",\n zone = process.env.CDK_ENV_HOSTED_ZONE,\n }: {\n name?: string;\n zone?: string | route53.IHostedZone;\n } = {},\n): route53.IHostedZone {\n if (!zone) {\n throw new ConfigurationError(\n \"No `zone` provided. Set CDK_ENV_HOSTED_ZONE to use environment zone\",\n );\n }\n\n if (typeof zone === \"string\") {\n return route53.HostedZone.fromLookup(scope, name, {\n domainName: zone,\n });\n }\n return zone;\n}\n","import { Duration } from \"aws-cdk-lib\";\nimport * as lambda from \"aws-cdk-lib/aws-lambda\";\n\nexport interface ResolveParamsAndSecretsOptions {\n cacheSize?: number;\n logLevel?: lambda.ParamsAndSecretsLogLevel;\n parameterStoreTtl?: Duration;\n secretsManagerTtl?: Duration;\n}\n\nexport const resolveParamsAndSecrets = ({\n paramsAndSecrets,\n options,\n}: {\n paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;\n options?: ResolveParamsAndSecretsOptions;\n}) => {\n if (paramsAndSecrets === false) {\n return;\n }\n\n let resolvedParamsAndSecrets: lambda.ParamsAndSecretsLayerVersion;\n if (paramsAndSecrets instanceof lambda.ParamsAndSecretsLayerVersion) {\n resolvedParamsAndSecrets = paramsAndSecrets;\n } else {\n const resolvedOptions = options || {};\n resolvedParamsAndSecrets = lambda.ParamsAndSecretsLayerVersion.fromVersion(\n lambda.ParamsAndSecretsVersions.V1_0_103,\n {\n cacheSize: resolvedOptions.cacheSize,\n logLevel:\n resolvedOptions.logLevel || lambda.ParamsAndSecretsLogLevel.WARN,\n parameterStoreTtl: resolvedOptions.parameterStoreTtl,\n secretsManagerTtl: resolvedOptions.secretsManagerTtl,\n },\n );\n }\n\n return resolvedParamsAndSecrets;\n};\n\nexport default resolveParamsAndSecrets;\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, resolveHostedZone } 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 hostedZone = resolveHostedZone(this, { zone });\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 public get restApiRef(): apiGateway.RestApiReference {\n return {\n restApiId: this._api.restApiId,\n };\n }\n}\n","import { Stack, StackProps } from \"aws-cdk-lib\";\nimport { Construct } from \"constructs\";\nimport { constructStackName, constructTagger } 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 constructTagger(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, Stack, RemovalPolicy, Tags } 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 ec2 from \"aws-cdk-lib/aws-ec2\";\nimport * as secretsmanager from \"aws-cdk-lib/aws-secretsmanager\";\nimport { JaypieEnvSecret } from \"./JaypieEnvSecret.js\";\nimport {\n addDatadogLayers,\n jaypieLambdaEnv,\n resolveParamsAndSecrets,\n} from \"./helpers/index.js\";\n\nexport interface JaypieLambdaProps {\n allowAllOutbound?: boolean;\n allowPublicSubnet?: boolean;\n architecture?: lambda.Architecture;\n code: lambda.Code | string;\n datadogApiKeyArn?: string;\n deadLetterQueue?: import(\"aws-cdk-lib/aws-sqs\").IQueue;\n deadLetterQueueEnabled?: boolean;\n deadLetterTopic?: import(\"aws-cdk-lib/aws-sns\").ITopic;\n description?: string;\n environment?: { [key: string]: string };\n envSecrets?: { [key: string]: secretsmanager.ISecret };\n ephemeralStorageSize?: import(\"aws-cdk-lib\").Size;\n filesystem?: lambda.FileSystem;\n handler: string;\n initialPolicy?: iam.PolicyStatement[];\n layers?: lambda.ILayerVersion[];\n logRetention?: number;\n logRetentionRole?: iam.IRole;\n logRetentionRetryOptions?: lambda.LogRetentionRetryOptions;\n maxEventAge?: Duration;\n memorySize?: number;\n paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;\n paramsAndSecretsOptions?: {\n cacheSize?: number;\n logLevel?: lambda.ParamsAndSecretsLogLevel;\n parameterStoreTtl?: Duration;\n secretsManagerTtl?: Duration;\n };\n profiling?: boolean;\n profilingGroup?: import(\"aws-cdk-lib/aws-codeguruprofiler\").IProfilingGroup;\n provisionedConcurrentExecutions?: number;\n reservedConcurrentExecutions?: number;\n retryAttempts?: number;\n roleTag?: string;\n runtime?: lambda.Runtime;\n runtimeManagementMode?: lambda.RuntimeManagementMode;\n secrets?: JaypieEnvSecret[];\n securityGroups?: ec2.ISecurityGroup[];\n timeout?: Duration | number;\n tracing?: lambda.Tracing;\n vendorTag?: string;\n vpc?: ec2.IVpc;\n vpcSubnets?: ec2.SubnetSelection;\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 _reference: lambda.IFunction;\n\n constructor(scope: Construct, id: string, props: JaypieLambdaProps) {\n super(scope, id);\n\n const {\n allowAllOutbound,\n allowPublicSubnet,\n architecture = lambda.Architecture.X86_64,\n code,\n datadogApiKeyArn,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment: initialEnvironment = {},\n envSecrets = {},\n ephemeralStorageSize,\n filesystem,\n handler = \"index.handler\",\n initialPolicy,\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n profiling,\n profilingGroup,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n retryAttempts,\n roleTag = CDK.ROLE.PROCESSING,\n runtime = lambda.Runtime.NODEJS_22_X,\n runtimeManagementMode,\n secrets = [],\n securityGroups,\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n tracing,\n vendorTag,\n vpc,\n vpcSubnets,\n } = props;\n\n // Get base environment with defaults\n const environment = jaypieLambdaEnv({ initialEnvironment });\n\n const codeAsset =\n typeof code === \"string\" ? lambda.Code.fromAsset(code) : code;\n\n // Create a working copy of layers\n const resolvedLayers = [...layers];\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 // Add ParamsAndSecrets layer if configured\n const resolvedParamsAndSecrets = resolveParamsAndSecrets({\n paramsAndSecrets,\n options: paramsAndSecretsOptions,\n });\n\n // Create Lambda Function\n this._lambda = new lambda.Function(this, \"Function\", {\n allowAllOutbound,\n allowPublicSubnet,\n architecture,\n code: codeAsset,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment: {\n ...environment,\n ...secretsEnvironment,\n ...jaypieSecretsEnvironment,\n },\n ephemeralStorageSize,\n filesystem,\n handler,\n initialPolicy,\n layers: resolvedLayers,\n logRetention,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize,\n paramsAndSecrets: resolvedParamsAndSecrets,\n profiling,\n profilingGroup,\n reservedConcurrentExecutions,\n retryAttempts,\n runtime,\n runtimeManagementMode,\n securityGroups,\n timeout:\n typeof timeout === \"number\" ? Duration.seconds(timeout) : timeout,\n tracing,\n vpc,\n vpcSubnets,\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 addDatadogLayers(this._lambda, { datadogApiKeyArn });\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 // 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 reference(): lambda.IFunction {\n return this._reference;\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 get functionRef(): lambda.FunctionReference {\n return {\n functionArn: this._reference.functionArn,\n functionName: this._reference.functionName,\n };\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 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 grantInvokeLatestVersion(grantee: iam.IGrantable): iam.Grant {\n return this._reference.grantInvokeLatestVersion(grantee);\n }\n\n public grantInvokeVersion(\n grantee: iam.IGrantable,\n version: lambda.IVersion,\n ): iam.Grant {\n return this._reference.grantInvokeVersion(grantee, version);\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 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 public addEnvironment(key: string, value: string): void {\n this._lambda.addEnvironment(key, value);\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 allowAllOutbound,\n allowPublicSubnet,\n architecture,\n batchSize = 1,\n code,\n datadogApiKeyArn,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment = {},\n envSecrets = {},\n ephemeralStorageSize,\n fifo = true,\n filesystem,\n handler = \"index.handler\",\n initialPolicy,\n layers = [],\n logRetention = CDK.LAMBDA.LOG_RETENTION,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize = CDK.LAMBDA.MEMORY_SIZE,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n profiling,\n profilingGroup,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n retryAttempts,\n roleTag,\n runtime = lambda.Runtime.NODEJS_22_X,\n runtimeManagementMode,\n secrets = [],\n securityGroups,\n timeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n tracing,\n vendorTag,\n visibilityTimeout = Duration.seconds(CDK.DURATION.LAMBDA_WORKER),\n vpc,\n vpcSubnets,\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 allowAllOutbound,\n allowPublicSubnet,\n architecture,\n code,\n datadogApiKeyArn,\n deadLetterQueue,\n deadLetterQueueEnabled,\n deadLetterTopic,\n description,\n environment: {\n ...environment,\n CDK_ENV_QUEUE_URL: this._queue.queueUrl,\n },\n envSecrets,\n ephemeralStorageSize,\n filesystem,\n handler,\n initialPolicy,\n layers,\n logRetention,\n logRetentionRole,\n logRetentionRetryOptions,\n maxEventAge,\n memorySize,\n paramsAndSecrets,\n paramsAndSecretsOptions,\n profiling,\n profilingGroup,\n provisionedConcurrentExecutions,\n reservedConcurrentExecutions,\n retryAttempts,\n roleTag,\n runtime,\n runtimeManagementMode,\n secrets,\n securityGroups,\n timeout,\n tracing,\n vendorTag,\n vpc,\n vpcSubnets,\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 // 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 get functionRef(): lambda.FunctionReference {\n return this._lambdaConstruct.functionRef;\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 public addEnvironment(key: string, value: string): void {\n this._lambdaConstruct.addEnvironment(key, value);\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 {\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 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 public grantReplicationPermission(\n identity: iam.IGrantable,\n props: any,\n ): iam.Grant {\n return this._bucket.grantReplicationPermission(identity, props);\n }\n\n public addReplicationPolicy(policy: any): void {\n this._bucket.addReplicationPolicy(policy);\n }\n\n public get bucketRef(): s3.BucketReference {\n return {\n bucketArn: this._bucket.bucketArn,\n bucketName: this._bucket.bucketName,\n };\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 generateSecretString?: secretsmanager.SecretStringGenerator;\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 generateSecretString,\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 generateSecretString,\n secretStringValue: !generateSecretString && 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 { CDK, ConfigurationError } from \"@jaypie/cdk\";\nimport * as cdk from \"aws-cdk-lib\";\nimport {\n ARecord,\n CnameRecord,\n IHostedZone,\n MxRecord,\n NsRecord,\n RecordTarget,\n TxtRecord,\n} from \"aws-cdk-lib/aws-route53\";\nimport { Construct } from \"constructs\";\n\nimport { resolveHostedZone } from \"./helpers/resolveHostedZone\";\n\nexport interface JaypieDnsRecordProps {\n /**\n * Optional comment to add to the DNS record\n */\n comment?: string;\n /**\n * Optional record name (subdomain). If not provided, creates record at zone apex\n */\n recordName?: string;\n /**\n * Time to live for the DNS record\n * @default CDK.DNS.CONFIG.TTL (5 minutes)\n */\n ttl?: cdk.Duration;\n /**\n * The DNS record type (A, CNAME, MX, NS, TXT)\n */\n type: string;\n /**\n * Values for the DNS record. Format depends on record type:\n * - A: Array of IPv4 addresses (e.g., [\"1.2.3.4\", \"5.6.7.8\"])\n * - CNAME: Single domain name as first element (e.g., [\"example.com\"])\n * - MX: Array of objects with priority and hostName (e.g., [{priority: 10, hostName: \"mail.example.com\"}])\n * - NS: Array of name server addresses (e.g., [\"ns1.example.com\", \"ns2.example.com\"])\n * - TXT: Array of text values (e.g., [\"v=spf1 include:example.com ~all\"])\n */\n values: string[] | Array<{ hostName: string; priority: number }>;\n /**\n * The hosted zone where the record will be created.\n * Can be either:\n * - A string (zone name) - will lookup the hosted zone by domain name\n * - An IHostedZone object - will use the provided zone directly\n */\n zone: string | IHostedZone;\n}\n\nexport class JaypieDnsRecord extends Construct {\n public readonly record:\n | ARecord\n | CnameRecord\n | MxRecord\n | NsRecord\n | TxtRecord;\n\n constructor(scope: Construct, id: string, props: JaypieDnsRecordProps) {\n super(scope, id);\n\n const { comment, recordName, type, values } = props;\n const ttl = props.ttl || cdk.Duration.seconds(CDK.DNS.CONFIG.TTL);\n\n // Resolve the hosted zone (supports both string and IHostedZone)\n const zone = resolveHostedZone(scope, {\n name: `${id}HostedZone`,\n zone: props.zone,\n });\n\n // Common properties for all record types\n const baseProps = {\n comment,\n recordName,\n ttl,\n zone,\n };\n\n // Create the appropriate record based on type\n switch (type) {\n case CDK.DNS.RECORD.A: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"A record requires at least one IP address\",\n );\n }\n this.record = new ARecord(this, \"Record\", {\n ...baseProps,\n target: RecordTarget.fromIpAddresses(...(values as string[])),\n });\n break;\n }\n\n case CDK.DNS.RECORD.CNAME: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\"CNAME record requires a domain name\");\n }\n this.record = new CnameRecord(this, \"Record\", {\n ...baseProps,\n domainName: (values as string[])[0],\n });\n break;\n }\n\n case CDK.DNS.RECORD.MX: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"MX record requires at least one mail server\",\n );\n }\n this.record = new MxRecord(this, \"Record\", {\n ...baseProps,\n values: values as Array<{ hostName: string; priority: number }>,\n });\n break;\n }\n\n case CDK.DNS.RECORD.NS: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"NS record requires at least one name server\",\n );\n }\n this.record = new NsRecord(this, \"Record\", {\n ...baseProps,\n values: values as string[],\n });\n break;\n }\n\n case CDK.DNS.RECORD.TXT: {\n if (!Array.isArray(values) || values.length === 0) {\n throw new ConfigurationError(\n \"TXT record requires at least one value\",\n );\n }\n this.record = new TxtRecord(this, \"Record\", {\n ...baseProps,\n values: values as string[],\n });\n break;\n }\n\n default:\n throw new ConfigurationError(\n `Unsupported DNS record type: ${type}. Supported types: A, CNAME, MX, NS, TXT`,\n );\n }\n\n // Add standard tags to the DNS record\n cdk.Tags.of(this.record).add(CDK.TAG.SERVICE, CDK.SERVICE.INFRASTRUCTURE);\n cdk.Tags.of(this.record).add(CDK.TAG.ROLE, CDK.ROLE.NETWORKING);\n }\n}\n","import { CfnOutput, Duration, Fn, Stack, Tags } from \"aws-cdk-lib\";\nimport {\n Effect,\n FederatedPrincipal,\n PolicyStatement,\n Role,\n} from \"aws-cdk-lib/aws-iam\";\nimport { Construct } from \"constructs\";\nimport { CDK, ConfigurationError } from \"@jaypie/cdk\";\n\nexport interface JaypieGitHubDeployRoleProps {\n oidcProviderArn?: string;\n output?: boolean | string;\n repoRestriction?: string;\n}\n\nexport class JaypieGitHubDeployRole extends Construct {\n private readonly _role: Role;\n\n constructor(\n scope: Construct,\n id: string = \"GitHubDeployRole\",\n props: JaypieGitHubDeployRoleProps = {},\n ) {\n super(scope, id);\n\n const {\n oidcProviderArn = Fn.importValue(CDK.IMPORT.OIDC_PROVIDER),\n output = true,\n repoRestriction: propsRepoRestriction,\n } = props;\n\n // Extract account ID from the scope\n const accountId = Stack.of(this).account;\n\n // Resolve repoRestriction from props or environment variables\n let repoRestriction = propsRepoRestriction;\n if (!repoRestriction) {\n const envRepo = process.env.CDK_ENV_REPO || process.env.PROJECT_REPO;\n if (!envRepo) {\n throw new ConfigurationError(\n \"No repoRestriction provided. Set repoRestriction prop, CDK_ENV_REPO, or PROJECT_REPO environment variable\",\n );\n }\n // Extract organization from owner/repo format and create org-wide restriction\n const organization = envRepo.split(\"/\")[0];\n repoRestriction = `repo:${organization}/*:*`;\n }\n\n // Create the IAM role\n this._role = new Role(this, \"GitHubActionsRole\", {\n assumedBy: new FederatedPrincipal(\n oidcProviderArn,\n {\n StringLike: {\n \"token.actions.githubusercontent.com:sub\": repoRestriction,\n },\n },\n \"sts:AssumeRoleWithWebIdentity\",\n ),\n maxSessionDuration: Duration.hours(1),\n path: \"/\",\n });\n Tags.of(this._role).add(CDK.TAG.ROLE, CDK.ROLE.DEPLOY);\n\n // Allow the role to access the GitHub OIDC provider\n this._role.addToPolicy(\n new PolicyStatement({\n actions: [\"sts:AssumeRoleWithWebIdentity\"],\n resources: [`arn:aws:iam::${accountId}:oidc-provider/*`],\n }),\n );\n\n // Allow the role to deploy CDK apps\n this._role.addToPolicy(\n new PolicyStatement({\n actions: [\n \"cloudformation:CreateStack\",\n \"cloudformation:DeleteStack\",\n \"cloudformation:DescribeStackEvents\",\n \"cloudformation:DescribeStackResource\",\n \"cloudformation:DescribeStackResources\",\n \"cloudformation:DescribeStacks\",\n \"cloudformation:GetTemplate\",\n \"cloudformation:SetStackPolicy\",\n \"cloudformation:UpdateStack\",\n \"cloudformation:ValidateTemplate\",\n \"iam:PassRole\",\n \"route53:ListHostedZones*\",\n \"s3:GetObject\",\n \"s3:ListBucket\",\n ],\n effect: Effect.ALLOW,\n resources: [\"*\"],\n }),\n );\n\n this._role.addToPolicy(\n new PolicyStatement({\n actions: [\"iam:PassRole\", \"sts:AssumeRole\"],\n effect: Effect.ALLOW,\n resources: [\n \"arn:aws:iam::*:role/cdk-hnb659fds-deploy-role-*\",\n \"arn:aws:iam::*:role/cdk-hnb659fds-file-publishing-*\",\n \"arn:aws:iam::*:role/cdk-readOnlyRole\",\n ],\n }),\n );\n\n // Export the ARN of the role\n if (output !== false) {\n const outputId =\n typeof output === \"string\" ? output : \"GitHubActionsRoleArn\";\n new CfnOutput(this, outputId, {\n value: this._role.roleArn,\n });\n }\n }\n\n public get role(): Role {\n return this._role;\n }\n\n public get roleArn(): string {\n return this._role.roleArn;\n }\n\n public get roleName(): string {\n return this._role.roleName;\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 FilterPattern,\n ILogGroup,\n LogGroup,\n RetentionDays,\n} from \"aws-cdk-lib/aws-logs\";\nimport { LambdaDestination } from \"aws-cdk-lib/aws-logs-destinations\";\nimport { HostedZone, IHostedZone } from \"aws-cdk-lib/aws-route53\";\nimport { Construct } from \"constructs\";\n\nimport { resolveDatadogLoggingDestination } from \"./helpers/resolveDatadogLoggingDestination\";\nimport { JaypieDnsRecord, JaypieDnsRecordProps } from \"./JaypieDnsRecord\";\n\nconst SERVICE = {\n ROUTE53: \"route53.amazonaws.com\",\n} as const;\n\n/**\n * Check if a string is a valid hostname\n */\nfunction isValidHostname(str: string): boolean {\n // Check if it contains a dot and matches hostname pattern\n if (!str.includes(\".\")) return false;\n\n // Basic hostname validation: alphanumeric, hyphens, dots\n // Each label must start and end with alphanumeric\n const hostnameRegex = /^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,}$/i;\n return hostnameRegex.test(str);\n}\n\n/**\n * DNS record configuration for JaypieHostedZone\n * Omits 'zone' since it will be automatically set to the created hosted zone\n */\nexport interface JaypieHostedZoneRecordProps\n extends Omit<JaypieDnsRecordProps, \"zone\"> {\n /**\n * Optional ID for the DNS record construct\n * @default Generated from record type and name\n */\n id?: string;\n}\n\ninterface JaypieHostedZoneProps {\n /**\n * Optional construct ID\n * @default `${zoneName}-HostedZone`\n */\n id?: string;\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 * Log destination configuration\n * - LambdaDestination: Use a specific Lambda destination\n * - true: Use Datadog logging destination (default)\n * - false: Do not use a destination\n * @default true\n */\n destination?: LambdaDestination | boolean;\n /**\n * Optional DNS records to create for this hosted zone\n * Each record will be created as a JaypieDnsRecord construct\n */\n records?: JaypieHostedZoneRecordProps[];\n}\n\nexport class JaypieHostedZone extends Construct {\n public readonly hostedZone: IHostedZone;\n public readonly logGroup: ILogGroup;\n public readonly dnsRecords: JaypieDnsRecord[];\n\n /**\n * Create a new hosted zone with query logging and optional DNS records\n */\n constructor(\n scope: Construct,\n idOrProps: string | JaypieHostedZoneProps,\n propsOrRecords?: JaypieHostedZoneProps | JaypieHostedZoneRecordProps[],\n ) {\n // Handle overloaded constructor signatures\n let props: JaypieHostedZoneProps;\n let id: string;\n\n if (typeof idOrProps === \"string\") {\n // If it's a valid hostname, treat it as zoneName\n if (isValidHostname(idOrProps)) {\n // Third param can be props object or records array\n if (Array.isArray(propsOrRecords)) {\n props = { zoneName: idOrProps, records: propsOrRecords };\n } else {\n props = propsOrRecords || { zoneName: idOrProps };\n // Set zoneName if not already set\n if (!props.zoneName) {\n props = { ...props, zoneName: idOrProps };\n }\n }\n // Use id from props if provided, otherwise derive from zoneName\n id = props.id || `${idOrProps}-HostedZone`;\n } else {\n // Otherwise treat it as an explicit id\n props = propsOrRecords as JaypieHostedZoneProps;\n id = idOrProps;\n }\n } else {\n // idOrProps is props\n props = idOrProps;\n id = props.id || `${props.zoneName}-HostedZone`;\n }\n\n super(scope, id);\n\n const { zoneName, project } = props;\n const destination = props.destination ?? true;\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 based on configuration\n if (destination !== false) {\n const lambdaDestination =\n destination === true\n ? resolveDatadogLoggingDestination(scope)\n : destination;\n\n this.logGroup.addSubscriptionFilter(\"DatadogLambdaDestination\", {\n destination: lambdaDestination,\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 // Create DNS records if provided\n this.dnsRecords = [];\n if (props.records) {\n props.records.forEach((recordConfig, index) => {\n const { id, ...recordProps } = recordConfig;\n // Generate a default ID if not provided\n const recordId =\n id ||\n `${recordProps.type}${recordProps.recordName ? `-${recordProps.recordName}` : \"\"}-${index}`;\n\n const dnsRecord = new JaypieDnsRecord(this, recordId, {\n ...recordProps,\n zone: this.hostedZone,\n });\n\n this.dnsRecords.push(dnsRecord);\n });\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 { Duration, Tags } from \"aws-cdk-lib\";\nimport { CfnAssignment, CfnPermissionSet } from \"aws-cdk-lib/aws-sso\";\nimport { ManagedPolicy } from \"aws-cdk-lib/aws-iam\";\nimport { CDK, ConfigurationError } from \"@jaypie/cdk\";\n\n/**\n * Mapping of account IDs to permission set names\n * Key: AWS account ID\n * Value: Array of permission set names to assign to this account\n */\nexport interface AccountAssignments {\n [accountId: string]: string[];\n}\n\n/**\n * Properties for the JaypieSsoPermissions construct\n */\nexport interface JaypieSsoPermissionsProps {\n /**\n * ARN of the IAM Identity Center instance\n * If not provided, falls back to CDK_ENV_IAM_IDENTITY_CENTER_ARN\n * If neither is set, SSO setup will be skipped\n */\n iamIdentityCenterArn?: string;\n\n /**\n * Google Workspace group GUID for administrators\n * Example: \"b4c8b438-4031-7000-782d-5046945fb956\"\n */\n administratorGroupId?: string;\n\n /**\n * Google Workspace group GUID for analysts\n * Example: \"2488f4e8-d061-708e-abe1-c315f0e30005\"\n */\n analystGroupId?: string;\n\n /**\n * Google Workspace group GUID for developers\n * Example: \"b438a4f8-e0e1-707c-c6e8-21841daf9ad1\"\n */\n developerGroupId?: string;\n\n /**\n * Account assignments for administrator group\n * Maps account IDs to arrays of permission set names\n * Example:\n * {\n * \"211125635435\": [\"Administrator\", \"Analyst\"],\n * \"381492033431\": [\"Administrator\"],\n * }\n */\n administratorAccountAssignments?: AccountAssignments;\n\n /**\n * Account assignments for analyst group\n * Maps account IDs to arrays of permission set names\n * Example:\n * {\n * \"211125635435\": [\"Analyst\"],\n * \"381492033431\": [\"Analyst\"],\n * }\n */\n analystAccountAssignments?: AccountAssignments;\n\n /**\n * Account assignments for developer group\n * Maps account IDs to arrays of permission set names\n * Example:\n * {\n * \"211125635435\": [\"Developer\"],\n * }\n */\n developerAccountAssignments?: AccountAssignments;\n}\n\n/**\n * JaypieSsoPermissions Construct\n *\n * Creates and manages AWS IAM Identity Center (SSO) permission sets and assignments\n *\n * @example\n * const permissionSets = new JaypieSsoPermissions(this, \"PermissionSets\", {\n * iamIdentityCenterArn: \"arn:aws:sso:::instance/...\",\n * administratorGroupId: \"b4c8b438-4031-7000-782d-5046945fb956\",\n * analystGroupId: \"2488f4e8-d061-708e-abe1-c315f0e30005\",\n * developerGroupId: \"b438a4f8-e0e1-707c-c6e8-21841daf9ad1\",\n * administratorAccountAssignments: {\n * \"211125635435\": [\"Administrator\", \"Analyst\", \"Developer\"],\n * \"381492033431\": [\"Administrator\", \"Analyst\"],\n * },\n * analystAccountAssignments: {\n * \"211125635435\": [\"Analyst\", \"Developer\"],\n * \"381492033431\": [],\n * },\n * developerAccountAssignments: {\n * \"211125635435\": [\"Analyst\", \"Developer\"],\n * \"381492033431\": [],\n * },\n * });\n */\nexport class JaypieSsoPermissions extends Construct {\n public readonly administratorPermissionSet?: CfnPermissionSet;\n public readonly analystPermissionSet?: CfnPermissionSet;\n public readonly developerPermissionSet?: CfnPermissionSet;\n\n constructor(scope: Construct, id: string, props: JaypieSsoPermissionsProps) {\n super(scope, id);\n\n const {\n iamIdentityCenterArn: iamIdentityCenterArnProp,\n administratorGroupId,\n analystGroupId,\n developerGroupId,\n administratorAccountAssignments,\n analystAccountAssignments,\n developerAccountAssignments,\n } = props;\n\n const iamIdentityCenterArn =\n iamIdentityCenterArnProp || process.env.CDK_ENV_IAM_IDENTITY_CENTER_ARN;\n\n if (!iamIdentityCenterArn) {\n // If no IAM Identity Center ARN provided, skip SSO setup\n return;\n }\n\n //\n // Permission Sets\n //\n\n this.administratorPermissionSet = new CfnPermissionSet(\n this,\n \"AdministratorPermissionSet\",\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n name: \"Administrator\",\n\n // Optional\n description: \"Unrestricted access\",\n inlinePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:ViewUsage\",\n \"aws-portal:ViewBilling\",\n \"budgets:*\",\n \"cur:DescribeReportDefinitions\",\n \"cur:PutReportDefinition\",\n \"cur:DeleteReportDefinition\",\n \"cur:ModifyReportDefinition\",\n ],\n Resource: \"*\",\n },\n ],\n },\n managedPolicies: [\n ManagedPolicy.fromAwsManagedPolicyName(\"AdministratorAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"AWSManagementConsoleBasicUserAccess\",\n ).managedPolicyArn,\n ],\n sessionDuration: Duration.hours(1).toIsoString(),\n tags: [\n {\n key: CDK.TAG.SERVICE,\n value: CDK.SERVICE.SSO,\n },\n {\n key: CDK.TAG.ROLE,\n value: CDK.ROLE.SECURITY,\n },\n ],\n },\n );\n\n this.analystPermissionSet = new CfnPermissionSet(\n this,\n \"AnalystPermissionSet\",\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n name: \"Analyst\",\n\n // Optional\n description: \"Read-only access; may expand to limited write access\",\n inlinePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"aws-portal:ViewUsage\",\n \"aws-portal:ViewBilling\",\n \"budgets:Describe*\",\n \"budgets:View*\",\n \"ce:Get*\",\n \"ce:List*\",\n \"cloudformation:Describe*\",\n \"cloudformation:Get*\",\n \"cloudformation:List*\",\n \"cloudwatch:BatchGet*\",\n \"cloudwatch:Get*\",\n \"cloudwatch:List*\",\n \"cost-optimization-hub:Get*\",\n \"cost-optimization-hub:List*\",\n \"ec2:Describe*\",\n \"ec2:Get*\",\n \"ec2:List*\",\n \"ec2:Search*\",\n \"iam:Get*\",\n \"iam:List*\",\n \"iam:PassRole\",\n \"lambda:Get*\",\n \"lambda:List*\",\n \"logs:Describe*\",\n \"logs:Get*\",\n \"logs:List*\",\n \"pipes:Describe*\",\n \"pipes:List*\",\n \"s3:Get*\",\n \"s3:List*\",\n \"secretsmanager:GetRandomPassword\",\n \"secretsmanager:GetResourcePolicy\",\n \"secretsmanager:List*\",\n \"securityhub:Describe*\",\n \"securityhub:Get*\",\n \"securityhub:List*\",\n \"servicecatalog:Describe*\",\n \"sns:Get*\",\n \"sns:List*\",\n \"sqs:Get*\",\n \"sqs:List*\",\n \"states:Describe*\",\n \"states:Get*\",\n \"states:List*\",\n \"tag:*\",\n \"xray:*\",\n ],\n Resource: \"*\",\n },\n ],\n },\n managedPolicies: [\n ManagedPolicy.fromAwsManagedPolicyName(\"AmazonQDeveloperAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"AWSManagementConsoleBasicUserAccess\",\n ).managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\"ReadOnlyAccess\")\n .managedPolicyArn,\n ],\n sessionDuration: Duration.hours(12).toIsoString(),\n tags: [\n {\n key: CDK.TAG.SERVICE,\n value: CDK.SERVICE.SSO,\n },\n {\n key: CDK.TAG.ROLE,\n value: CDK.ROLE.SECURITY,\n },\n ],\n },\n );\n\n this.developerPermissionSet = new CfnPermissionSet(\n this,\n \"DeveloperPermissionSet\",\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n name: \"Developer\",\n\n // Optional\n description: \"Administrative access with limited restrictions\",\n inlinePolicy: {\n Version: \"2012-10-17\",\n Statement: [\n {\n Effect: \"Allow\",\n Action: [\n \"budgets:*\",\n \"ce:*\",\n \"cloudformation:*\",\n \"cloudwatch:*\",\n \"cost-optimization-hub:*\",\n \"ec2:*\",\n \"iam:Get*\",\n \"iam:List*\",\n \"iam:PassRole\",\n \"lambda:*\",\n \"logs:*\",\n \"pipes:*\",\n \"s3:*\",\n \"secretsmanager:*\",\n \"securityhub:*\",\n \"servicecatalog:*\",\n \"sns:*\",\n \"sqs:*\",\n \"states:*\",\n \"tag:*\",\n \"xray:*\",\n ],\n Resource: \"*\",\n },\n ],\n },\n managedPolicies: [\n ManagedPolicy.fromAwsManagedPolicyName(\"AmazonQDeveloperAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"AWSManagementConsoleBasicUserAccess\",\n ).managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\"ReadOnlyAccess\")\n .managedPolicyArn,\n ManagedPolicy.fromAwsManagedPolicyName(\n \"job-function/SystemAdministrator\",\n ).managedPolicyArn,\n ],\n sessionDuration: Duration.hours(4).toIsoString(),\n tags: [\n {\n key: CDK.TAG.SERVICE,\n value: CDK.SERVICE.SSO,\n },\n {\n key: CDK.TAG.ROLE,\n value: CDK.ROLE.SECURITY,\n },\n ],\n },\n );\n\n // Map permission set names to their ARNs and labels\n const permissionSetMap: Record<string, { arn: string; label: string }> = {\n Administrator: {\n arn: this.administratorPermissionSet.attrPermissionSetArn,\n label: \"Administrator\",\n },\n Analyst: {\n arn: this.analystPermissionSet.attrPermissionSetArn,\n label: \"Analyst\",\n },\n Developer: {\n arn: this.developerPermissionSet.attrPermissionSetArn,\n label: \"Developer\",\n },\n };\n\n //\n // Assignments\n //\n\n // Helper function to create assignments for a group\n const createAssignments = (\n groupId: string | undefined,\n accountAssignments: AccountAssignments | undefined,\n ) => {\n if (!groupId || !accountAssignments) {\n return; // Skip if group ID or assignments not provided\n }\n\n Object.keys(accountAssignments).forEach((accountId) => {\n const permissionSetNames = accountAssignments[accountId];\n\n permissionSetNames.forEach((permissionSetName) => {\n const permissionSet = permissionSetMap[permissionSetName];\n\n if (!permissionSet) {\n throw new ConfigurationError(\n `Unknown permission set: ${permissionSetName}. Valid options: ${Object.keys(permissionSetMap).join(\", \")}`,\n );\n }\n\n const accountAssignment = new CfnAssignment(\n this,\n `AccountAssignment-${accountId}-${permissionSet.label}Role-${groupId}Group`,\n {\n // Required\n instanceArn: iamIdentityCenterArn,\n permissionSetArn: permissionSet.arn,\n principalId: groupId,\n principalType: CDK.PRINCIPAL_TYPE.GROUP,\n targetId: accountId,\n targetType: CDK.TARGET_TYPE.AWS_ACCOUNT,\n },\n );\n Tags.of(accountAssignment).add(CDK.TAG.SERVICE, CDK.SERVICE.SSO);\n Tags.of(accountAssignment).add(CDK.TAG.ROLE, CDK.ROLE.SECURITY);\n });\n });\n };\n\n // Create assignments for each group\n createAssignments(administratorGroupId, administratorAccountAssignments);\n createAssignments(analystGroupId, analystAccountAssignments);\n createAssignments(developerGroupId, developerAccountAssignments);\n }\n}\n","import { Construct } from \"constructs\";\nimport { Stack, Tags } from \"aws-cdk-lib\";\nimport { CfnApplication } from \"aws-cdk-lib/aws-sam\";\nimport { CDK } from \"@jaypie/cdk\";\nimport { ConfigurationError } from \"@jaypie/errors\";\n\n//\n//\n// Constants\n//\n\nconst DEFAULT_APPLICATION_ID =\n \"arn:aws:serverlessrepo:us-east-2:004480582608:applications/SSOSync\";\nconst DEFAULT_APPLICATION_VERSION = \"2.3.3\";\nconst DEFAULT_GOOGLE_GROUP_MATCH = \"name:AWS*\";\n\n//\n//\n// Types\n//\n\nexport interface JaypieSsoSyncApplicationProps {\n googleAdminEmail?: string;\n googleAdminEmailEnvKey?: string;\n googleCredentials?: string;\n googleCredentialsEnvKey?: string;\n googleGroupMatch?: string;\n googleGroupMatchEnvKey?: string;\n identityStoreId?: string;\n identityStoreIdEnvKey?: string;\n scimEndpointAccessToken?: string;\n scimEndpointAccessTokenEnvKey?: string;\n scimEndpointUrl?: string;\n scimEndpointUrlEnvKey?: string;\n semanticVersion?: string;\n semanticVersionEnvKey?: string;\n ssoSyncApplicationId?: string;\n tags?: { [key: string]: string };\n}\n\n//\n//\n// Class\n//\n\nexport class JaypieSsoSyncApplication extends Construct {\n private readonly _application: CfnApplication;\n\n constructor(\n scope: Construct,\n id = \"SsoSyncApplication\",\n props: JaypieSsoSyncApplicationProps = {},\n ) {\n super(scope, id);\n\n const {\n googleAdminEmail,\n googleAdminEmailEnvKey = \"CDK_ENV_SSOSYNC_GOOGLE_ADMIN_EMAIL\",\n googleCredentials,\n googleCredentialsEnvKey = \"CDK_ENV_SSOSYNC_GOOGLE_CREDENTIALS\",\n googleGroupMatch,\n googleGroupMatchEnvKey = \"CDK_ENV_SSOSYNC_GOOGLE_GROUP_MATCH\",\n identityStoreId,\n identityStoreIdEnvKey = \"CDK_ENV_SSOSYNC_IDENTITY_STORE_ID\",\n scimEndpointAccessToken,\n scimEndpointAccessTokenEnvKey = \"CDK_ENV_SCIM_ENDPOINT_ACCESS_TOKEN\",\n scimEndpointUrl,\n scimEndpointUrlEnvKey = \"CDK_ENV_SSOSYNC_SCIM_ENDPOINT_URL\",\n semanticVersion,\n semanticVersionEnvKey = \"CDK_ENV_SSOSYNC_SEMANTIC_VERSION\",\n ssoSyncApplicationId = DEFAULT_APPLICATION_ID,\n tags,\n } = props;\n\n // Resolve all values from props or environment variables\n const resolvedGoogleAdminEmail =\n googleAdminEmail || process.env[googleAdminEmailEnvKey];\n const resolvedGoogleCredentials =\n googleCredentials || process.env[googleCredentialsEnvKey];\n const resolvedGoogleGroupMatch =\n googleGroupMatch ||\n process.env[googleGroupMatchEnvKey] ||\n DEFAULT_GOOGLE_GROUP_MATCH;\n const resolvedIdentityStoreId =\n identityStoreId || process.env[identityStoreIdEnvKey];\n const resolvedScimEndpointAccessToken =\n scimEndpointAccessToken || process.env[scimEndpointAccessTokenEnvKey];\n const resolvedScimEndpointUrl =\n scimEndpointUrl || process.env[scimEndpointUrlEnvKey];\n const resolvedSemanticVersion =\n semanticVersion ||\n process.env[semanticVersionEnvKey] ||\n DEFAULT_APPLICATION_VERSION;\n\n // Validate required parameters\n const missingParams: string[] = [];\n\n if (!resolvedGoogleAdminEmail) {\n missingParams.push(\n `googleAdminEmail or ${googleAdminEmailEnvKey} environment variable`,\n );\n }\n if (!resolvedGoogleCredentials) {\n missingParams.push(\n `googleCredentials or ${googleCredentialsEnvKey} environment variable`,\n );\n }\n if (!resolvedIdentityStoreId) {\n missingParams.push(\n `identityStoreId or ${identityStoreIdEnvKey} environment variable`,\n );\n }\n if (!resolvedScimEndpointAccessToken) {\n missingParams.push(\n `scimEndpointAccessToken or ${scimEndpointAccessTokenEnvKey} environment variable`,\n );\n }\n if (!resolvedScimEndpointUrl) {\n missingParams.push(\n `scimEndpointUrl or ${scimEndpointUrlEnvKey} environment variable`,\n );\n }\n\n if (missingParams.length > 0) {\n throw new ConfigurationError(\n `JaypieSsoSyncApplication missing required configuration: ${missingParams.join(\", \")}`,\n );\n }\n\n // Create the SSO Sync Application\n // Type assertion is safe because we validated all required values above\n this._application = new CfnApplication(this, \"Application\", {\n location: {\n applicationId: ssoSyncApplicationId,\n semanticVersion: resolvedSemanticVersion,\n },\n parameters: {\n GoogleAdminEmail: resolvedGoogleAdminEmail!,\n GoogleCredentials: resolvedGoogleCredentials!,\n GoogleGroupMatch: resolvedGoogleGroupMatch,\n IdentityStoreID: resolvedIdentityStoreId!,\n Region: Stack.of(this).region,\n SCIMEndpointAccessToken: resolvedScimEndpointAccessToken!,\n SCIMEndpointUrl: resolvedScimEndpointUrl!,\n },\n });\n\n // Add tags\n const defaultTags = {\n [CDK.TAG.ROLE]: CDK.ROLE.SECURITY,\n };\n\n const allTags = { ...defaultTags, ...tags };\n Object.entries(allTags).forEach(([key, value]) => {\n Tags.of(this._application).add(key, value);\n });\n }\n\n public get application(): CfnApplication {\n return this._application;\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 grantReplicationPermission(identity: any, props: any): any {\n return this.bucket.grantReplicationPermission(identity, props);\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 get bucketRef(): s3.BucketReference {\n return {\n bucketArn: this.bucket.bucketArn,\n bucketName: this.bucket.bucketName,\n };\n }\n}\n"],"names":["CDK","secretsmanager","DatadogLambda","Tags","ConfigurationError","DEFAULT_FUNCTION_NAME","lambda","cdk","Stack","logDestinations","route53","Construct","mergeDomain","acm","apiGateway","route53Targets","Duration","RemovalPolicy","sqs","lambdaEventSources","s3","s3n","Fn","CfnOutput","SecretValue","ARecord","RecordTarget","CnameRecord","MxRecord","NsRecord","TxtRecord","Role","FederatedPrincipal","PolicyStatement","Effect","LogGroup","RetentionDays","ServicePrincipal","FilterPattern","HostedZone","CfnPermissionSet","ManagedPolicy","CfnAssignment","CfnApplication","isValidSubdomain","isValidHostname","cloudfront","origins"],"mappings":"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"}
|