diff --git a/src/packages/app-framework/src/credential-manager/get-app-token/appToken.ts b/src/packages/app-framework/src/credential-manager/get-app-token/appToken.ts index c63d188..4325cc7 100644 --- a/src/packages/app-framework/src/credential-manager/get-app-token/appToken.ts +++ b/src/packages/app-framework/src/credential-manager/get-app-token/appToken.ts @@ -7,7 +7,7 @@ import { } from 'aws-cdk-lib/aws-lambda'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface GitHubAppTokenProps { @@ -22,13 +22,7 @@ export class GitHubAppToken extends Construct { super(scope, id); // Create Lambda function for GetAppToken API this.lambdaHandler = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - // re2-wasm is used by the SSDK common library to do pattern validation, and uses - // a WASM module, so it's excluded from the bundle - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.APP_TABLE_NAME]: props.appTableName, [EnvironmentVariables.INSTALLATION_TABLE_NAME]: diff --git a/src/packages/app-framework/src/credential-manager/get-installation-access-token/index.ts b/src/packages/app-framework/src/credential-manager/get-installation-access-token/index.ts index 0e4b88d..8f61cef 100644 --- a/src/packages/app-framework/src/credential-manager/get-installation-access-token/index.ts +++ b/src/packages/app-framework/src/credential-manager/get-installation-access-token/index.ts @@ -8,7 +8,7 @@ import { } from 'aws-cdk-lib/aws-lambda'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface InstallationAcessTokenProps { @@ -25,11 +25,7 @@ export class InstallationAcessTokenGenerator extends Construct { ) { super(scope, id); this.lambdaHandler = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.APP_TABLE_NAME]: props.AppTable.tableName, [EnvironmentVariables.INSTALLATION_TABLE_NAME]: diff --git a/src/packages/app-framework/src/credential-manager/get-installation-data/index.ts b/src/packages/app-framework/src/credential-manager/get-installation-data/index.ts index 64a6ebb..c5be2e0 100644 --- a/src/packages/app-framework/src/credential-manager/get-installation-data/index.ts +++ b/src/packages/app-framework/src/credential-manager/get-installation-data/index.ts @@ -7,7 +7,7 @@ import { } from 'aws-cdk-lib/aws-lambda'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface InstallationCachedDataProps { @@ -32,11 +32,7 @@ export class InstallationCachedData extends Construct { super(scope, id); // Create Lambda function for handling installation data requests this.lambdaHandler = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.INSTALLATION_TABLE_NAME]: props.InstallationTable.tableName, diff --git a/src/packages/app-framework/src/credential-manager/get-installations/index.ts b/src/packages/app-framework/src/credential-manager/get-installations/index.ts index 2db050a..793e87f 100644 --- a/src/packages/app-framework/src/credential-manager/get-installations/index.ts +++ b/src/packages/app-framework/src/credential-manager/get-installations/index.ts @@ -7,7 +7,7 @@ import { } from 'aws-cdk-lib/aws-lambda'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface InstallationCachedDataProps { @@ -32,11 +32,7 @@ export class GetInstallations extends Construct { super(scope, id); // Create Lambda function for handling installation data requests this.lambdaHandler = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.INSTALLATION_TABLE_NAME]: props.InstallationTable.tableName, diff --git a/src/packages/app-framework/src/credential-manager/installation-tracker/index.ts b/src/packages/app-framework/src/credential-manager/installation-tracker/index.ts index 3473e4a..09b2613 100644 --- a/src/packages/app-framework/src/credential-manager/installation-tracker/index.ts +++ b/src/packages/app-framework/src/credential-manager/installation-tracker/index.ts @@ -5,7 +5,7 @@ import { LambdaFunction } from 'aws-cdk-lib/aws-events-targets'; import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface InstallationTrackerProps { @@ -22,11 +22,7 @@ export class InstallationTracker extends Construct { }); const installationTrackerFunction = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.APP_TABLE_NAME]: props.AppTable.tableName, [EnvironmentVariables.INSTALLATION_TABLE_NAME]: diff --git a/src/packages/app-framework/src/credential-manager/rate-limit-tracker/index.ts b/src/packages/app-framework/src/credential-manager/rate-limit-tracker/index.ts index d947be3..9f2a3a5 100644 --- a/src/packages/app-framework/src/credential-manager/rate-limit-tracker/index.ts +++ b/src/packages/app-framework/src/credential-manager/rate-limit-tracker/index.ts @@ -5,7 +5,7 @@ import { LambdaFunction } from 'aws-cdk-lib/aws-events-targets'; import { Effect, PolicyStatement } from 'aws-cdk-lib/aws-iam'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface RateLimitTrackerProps { @@ -20,11 +20,7 @@ export class RateLimitTracker extends Construct { super(scope, id); this.lambdaHandler = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.APP_TABLE_NAME]: props.AppTable.tableName, [EnvironmentVariables.INSTALLATION_TABLE_NAME]: diff --git a/src/packages/app-framework/src/credential-manager/refresh/index.ts b/src/packages/app-framework/src/credential-manager/refresh/index.ts index 93f21e1..7774441 100644 --- a/src/packages/app-framework/src/credential-manager/refresh/index.ts +++ b/src/packages/app-framework/src/credential-manager/refresh/index.ts @@ -8,7 +8,7 @@ import { } from 'aws-cdk-lib/aws-lambda'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { Construct } from 'constructs'; -import { LAMBDA_DEFAULTS } from '../../lambdaDefaults'; +import { LAMBDA_DEFAULTS_WITH_RE2_WASM } from '../../lambdaDefaults'; import { EnvironmentVariables, TAG_KEYS, TAG_VALUES } from '../constants'; export interface InstallationRefreshProps { @@ -23,11 +23,7 @@ export class InstallationRefresher extends Construct { super(scope, id); this.lambdaHandler = new NodejsFunction(this, 'handler', { - ...LAMBDA_DEFAULTS, - bundling: { - ...LAMBDA_DEFAULTS.bundling, - nodeModules: ['re2-wasm'], - }, + ...LAMBDA_DEFAULTS_WITH_RE2_WASM, environment: { [EnvironmentVariables.APP_TABLE_NAME]: props.AppTable.tableName, [EnvironmentVariables.INSTALLATION_TABLE_NAME]: diff --git a/src/packages/app-framework/src/lambdaDefaults.ts b/src/packages/app-framework/src/lambdaDefaults.ts index caedd26..d91d230 100644 --- a/src/packages/app-framework/src/lambdaDefaults.ts +++ b/src/packages/app-framework/src/lambdaDefaults.ts @@ -15,3 +15,24 @@ export const LAMBDA_DEFAULTS = { externalModules: [], }, }; + +// Bundling configuration for Lambdas that use re2-wasm +// re2-wasm is used by the SSDK common library to do pattern validation, and uses +// a WASM module, so it's excluded from the bundle and copied from local node_modules. +// Change this method once we figure out a better way to interact +// with the network-blocked builder system. +export const LAMBDA_DEFAULTS_WITH_RE2_WASM = { + ...LAMBDA_DEFAULTS, + bundling: { + ...LAMBDA_DEFAULTS.bundling, + externalModules: ['re2-wasm'], + commandHooks: { + beforeBundling: (): string[] => [], + beforeInstall: (): string[] => [], + afterBundling: (inputDir: string, outputDir: string): string[] => [ + `mkdir -p ${outputDir}/node_modules`, + `cp -r ${inputDir}/node_modules/re2-wasm ${outputDir}/node_modules/`, + ], + }, + }, +};