@jaypie/constructs 1.1.57 → 1.1.59

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.
@@ -0,0 +1,17 @@
1
+ import { IHostedZone } from "aws-cdk-lib/aws-route53";
2
+ import * as secretsmanager from "aws-cdk-lib/aws-secretsmanager";
3
+ import { Construct } from "constructs";
4
+ import { JaypieEnvSecret } from "./JaypieEnvSecret.js";
5
+ export interface JaypieNextjsProps {
6
+ datadogApiKeyArn?: string;
7
+ domainName?: string;
8
+ envSecrets?: {
9
+ [key: string]: secretsmanager.ISecret;
10
+ };
11
+ hostedZone?: IHostedZone | string;
12
+ nextjsPath?: string;
13
+ secrets?: JaypieEnvSecret[];
14
+ }
15
+ export declare class JaypieNextJs extends Construct {
16
+ constructor(scope: Construct, id: string, props?: JaypieNextjsProps);
17
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -6,7 +6,7 @@ export interface ResolveParamsAndSecretsOptions {
6
6
  parameterStoreTtl?: Duration;
7
7
  secretsManagerTtl?: Duration;
8
8
  }
9
- export declare const resolveParamsAndSecrets: ({ paramsAndSecrets, options, }: {
9
+ export declare const resolveParamsAndSecrets: ({ paramsAndSecrets, options, }?: {
10
10
  paramsAndSecrets?: lambda.ParamsAndSecretsLayerVersion | boolean;
11
11
  options?: ResolveParamsAndSecretsOptions;
12
12
  }) => lambda.ParamsAndSecretsLayerVersion | undefined;
@@ -19,6 +19,9 @@ var lambdaEventSources = require('aws-cdk-lib/aws-lambda-event-sources');
19
19
  var awsEvents = require('aws-cdk-lib/aws-events');
20
20
  var awsEventsTargets = require('aws-cdk-lib/aws-events-targets');
21
21
  var awsLogs = require('aws-cdk-lib/aws-logs');
22
+ var constructs$1 = require('@jaypie/constructs');
23
+ var cdkNextjsStandalone = require('cdk-nextjs-standalone');
24
+ var path = require('path');
22
25
  var awsCloudtrail = require('aws-cdk-lib/aws-cloudtrail');
23
26
  var awsSso = require('aws-cdk-lib/aws-sso');
24
27
  var awsSam = require('aws-cdk-lib/aws-sam');
@@ -54,6 +57,7 @@ var logDestinations__namespace = /*#__PURE__*/_interopNamespaceDefault(logDestin
54
57
  var s3n__namespace = /*#__PURE__*/_interopNamespaceDefault(s3n);
55
58
  var sqs__namespace = /*#__PURE__*/_interopNamespaceDefault(sqs);
56
59
  var lambdaEventSources__namespace = /*#__PURE__*/_interopNamespaceDefault(lambdaEventSources);
60
+ var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
57
61
  var cloudfront__namespace = /*#__PURE__*/_interopNamespaceDefault(cloudfront);
58
62
  var origins__namespace = /*#__PURE__*/_interopNamespaceDefault(origins);
59
63
 
@@ -389,10 +393,11 @@ function envHostname({ component, domain, env, subdomain, } = {}) {
389
393
  const resolvedComponent = component === "@" || component === "" ? undefined : component;
390
394
  const resolvedSubdomain = subdomain || process.env.CDK_ENV_SUBDOMAIN;
391
395
  const resolvedEnv = env || process.env.PROJECT_ENV;
396
+ const filteredEnv = resolvedEnv === CDK$2.ENV.PRODUCTION ? undefined : resolvedEnv;
392
397
  const parts = [
393
398
  resolvedComponent,
394
399
  resolvedSubdomain,
395
- resolvedEnv,
400
+ filteredEnv,
396
401
  resolvedDomain,
397
402
  ].filter((part) => part);
398
403
  return parts.join(".");
@@ -695,7 +700,7 @@ function resolveHostedZone(scope, { name = "HostedZone", zone = process.env.CDK_
695
700
  return zone;
696
701
  }
697
702
 
698
- const resolveParamsAndSecrets = ({ paramsAndSecrets, options, }) => {
703
+ const resolveParamsAndSecrets = ({ paramsAndSecrets, options, } = {}) => {
699
704
  if (paramsAndSecrets === false) {
700
705
  return;
701
706
  }
@@ -2191,6 +2196,81 @@ class JaypieMongoDbSecret extends JaypieEnvSecret {
2191
2196
  }
2192
2197
  }
2193
2198
 
2199
+ class JaypieNextJs extends constructs.Construct {
2200
+ constructor(scope, id, props) {
2201
+ super(scope, id);
2202
+ const domainName = props?.domainName || constructs$1.envHostname();
2203
+ const domainNameSanitized = domainName
2204
+ .replace(/\./g, "-")
2205
+ .replace(/[^a-zA-Z0-9]/g, "_");
2206
+ const envSecrets = props?.envSecrets || {};
2207
+ const nextjsPath = props?.nextjsPath?.startsWith("..")
2208
+ ? path__namespace.join(process.cwd(), props.nextjsPath)
2209
+ : props?.nextjsPath || path__namespace.join(process.cwd(), "..", "nextjs");
2210
+ const paramsAndSecrets = resolveParamsAndSecrets();
2211
+ const secrets = props?.secrets || [];
2212
+ // Process secrets environment variables
2213
+ const secretsEnvironment = Object.entries(envSecrets).reduce((acc, [key, secret]) => ({
2214
+ ...acc,
2215
+ [`SECRET_${key}`]: secret.secretName,
2216
+ }), {});
2217
+ // Process JaypieEnvSecret array
2218
+ const jaypieSecretsEnvironment = secrets.reduce((acc, secret) => {
2219
+ if (secret.envKey) {
2220
+ return {
2221
+ ...acc,
2222
+ [`SECRET_${secret.envKey}`]: secret.secretName,
2223
+ };
2224
+ }
2225
+ return acc;
2226
+ }, {});
2227
+ const nextjs = new cdkNextjsStandalone.Nextjs(this, "NextJsApp", {
2228
+ nextjsPath,
2229
+ domainProps: {
2230
+ domainName,
2231
+ hostedZone: constructs$1.resolveHostedZone(this, {
2232
+ zone: props?.hostedZone,
2233
+ }),
2234
+ },
2235
+ environment: {
2236
+ ...constructs$1.jaypieLambdaEnv(),
2237
+ ...secretsEnvironment,
2238
+ ...jaypieSecretsEnvironment,
2239
+ },
2240
+ overrides: {
2241
+ nextjsDistribution: {
2242
+ imageCachePolicyProps: {
2243
+ cachePolicyName: `NextJsImageCachePolicy-${domainNameSanitized}`,
2244
+ },
2245
+ serverCachePolicyProps: {
2246
+ cachePolicyName: `NextJsServerCachePolicy-${domainNameSanitized}`,
2247
+ },
2248
+ },
2249
+ nextjsImage: {
2250
+ functionProps: {
2251
+ paramsAndSecrets,
2252
+ },
2253
+ },
2254
+ nextjsServer: {
2255
+ functionProps: {
2256
+ paramsAndSecrets,
2257
+ },
2258
+ },
2259
+ },
2260
+ });
2261
+ addDatadogLayers(nextjs.imageOptimizationFunction);
2262
+ addDatadogLayers(nextjs.serverFunction.lambdaFunction);
2263
+ // Grant secret read permissions
2264
+ Object.values(envSecrets).forEach((secret) => {
2265
+ secret.grantRead(nextjs.serverFunction.lambdaFunction);
2266
+ });
2267
+ // Grant read permissions for JaypieEnvSecrets
2268
+ secrets.forEach((secret) => {
2269
+ secret.grantRead(nextjs.serverFunction.lambdaFunction);
2270
+ });
2271
+ }
2272
+ }
2273
+
2194
2274
  class JaypieOpenAiSecret extends JaypieEnvSecret {
2195
2275
  constructor(scope, id = "OpenAiApiKey", props) {
2196
2276
  const defaultProps = {
@@ -2929,6 +3009,7 @@ exports.JaypieHostedZone = JaypieHostedZone;
2929
3009
  exports.JaypieInfrastructureStack = JaypieInfrastructureStack;
2930
3010
  exports.JaypieLambda = JaypieLambda;
2931
3011
  exports.JaypieMongoDbSecret = JaypieMongoDbSecret;
3012
+ exports.JaypieNextJs = JaypieNextJs;
2932
3013
  exports.JaypieOpenAiSecret = JaypieOpenAiSecret;
2933
3014
  exports.JaypieOrganizationTrail = JaypieOrganizationTrail;
2934
3015
  exports.JaypieQueuedLambda = JaypieQueuedLambda;