diff --git a/lambdas/cognito-messaging/Makefile b/lambdas/cognito-messaging/Makefile new file mode 100644 index 0000000000..2763229112 --- /dev/null +++ b/lambdas/cognito-messaging/Makefile @@ -0,0 +1,8 @@ +.PHONY: build-cognitomessaging +build-cognitomessaging: + pnpm clean:dist + pnpm install --ignore-scripts + pnpm bundle + cp package.json "$(ARTIFACTS_DIR)/" + mv dist "$(ARTIFACTS_DIR)/" + diff --git a/lambdas/cognito-messaging/package.json b/lambdas/cognito-messaging/package.json index c11cf7d49d..f2a7052fa5 100644 --- a/lambdas/cognito-messaging/package.json +++ b/lambdas/cognito-messaging/package.json @@ -7,7 +7,7 @@ "main": "dist/index.js", "source": "src/index.ts", "scripts": { - "build:aws": "pnpm clean:dist && pnpm bundle", + "build:aws": "sam build --build-in-source", "bundle": "ncc build ./src/index.ts -s -a", "clean:dist": "rm -fr dist && rm bundle.zip || true", "clean:node": "rm -rf ./node_modules/ || true", diff --git a/lambdas/cognito-messaging/src/index.ts b/lambdas/cognito-messaging/src/index.ts index 7f2b11cc65..db5ce47b69 100644 --- a/lambdas/cognito-messaging/src/index.ts +++ b/lambdas/cognito-messaging/src/index.ts @@ -1,5 +1,10 @@ import { Logger } from '@aws-lambda-powertools/logger' -import { type Callback, type Context, type CustomMessageTriggerEvent } from 'aws-lambda' +import { + type Callback, + type Context, + type CustomMessageTriggerEvent, + type CustomMessageTriggerHandler, +} from 'aws-lambda' const logger = new Logger({ serviceName: 'cognito-messaging' }) @@ -25,9 +30,9 @@ const clientMetadataDefaults = (triggerSource: CustomMessageTriggerEvent['trigge } } -export const handler = ( +export const handler: CustomMessageTriggerHandler = ( event: CustomMessageTriggerEvent, - context: Context, + _context: Context, callback: Callback ) => { const { triggerSource, userName, request, response } = event diff --git a/lambdas/cognito-messaging/template.yaml b/lambdas/cognito-messaging/template.yaml index 5616a3e196..baf07a447a 100644 --- a/lambdas/cognito-messaging/template.yaml +++ b/lambdas/cognito-messaging/template.yaml @@ -4,18 +4,27 @@ Description: Cognito custom messaging. Globals: Function: - Runtime: nodejs18.x - CodeUri: ./dist/ + Runtime: nodejs20.x + CodeUri: ./ Timeout: 5 Architectures: - - x86_64 + - arm64 Resources: cognitomessaging: Type: 'AWS::Serverless::Function' + DeletionPolicy: Retain + Metadata: + BuildMethod: makefile Properties: - Handler: index.handler + Handler: dist/index.handler FunctionName: 'cognito-messaging' MemorySize: 128 Role: >- arn:aws:iam::142495371698:role/service-role/cognito-messaging-role-icuffany + MessageLogGroup: + Type: AWS::Logs::LogGroup + DeletionPolicy: Retain + Properties: + LogGroupName: !Sub '/lambda/${cognitomessaging}' + RetentionInDays: 30 diff --git a/lambdas/cognito-messaging/tsconfig.json b/lambdas/cognito-messaging/tsconfig.json index 293c9efc37..3792466a96 100644 --- a/lambdas/cognito-messaging/tsconfig.json +++ b/lambdas/cognito-messaging/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "baseUrl": "./src", + "baseUrl": "./", "target": "es2020", "strict": true, "preserveConstEnums": true, diff --git a/lambdas/cognito-user-migrate/Makefile b/lambdas/cognito-user-migrate/Makefile index 02670c8b66..d2fb31c1aa 100644 --- a/lambdas/cognito-user-migrate/Makefile +++ b/lambdas/cognito-user-migrate/Makefile @@ -1,17 +1,12 @@ -# .PHONY: build-usermigrate - -# build-usermigrate: -# # turbo prune --scope=@weareinreach/aws-user-migrate --out-dir "$(ARTIFACTS_DIR)" -# cd packages/aws-user-migrate -# pnpm install --ignore-scripts -# rm -fr dist -# pnpm aws:db:generate --filter @weareinreach/aws-user-migrate -# pnpm bundle --filter @weareinreach/aws-user-migrate -# pnpm prune-clients --filter @weareinreach/aws-user-migrate -# cp -r dist "$(ARTIFACTS_DIR)/" - -# build-RuntimeDependenciesLayer: -# mkdir -p "$(ARTIFACTS_DIR)/nodejs" -# cp package.json package-lock.json "$(ARTIFACTS_DIR)/nodejs/" -# npm install --production --prefix "$(ARTIFACTS_DIR)/nodejs/" -# rm "$(ARTIFACTS_DIR)/nodejs/package.json" # to avoid rebuilding when changes aren't related to dependencies +.PHONY: build-usermigrate +build-usermigrate: + pnpm clean:dist + pnpm install --ignore-scripts + pnpm aws:db:generate + pnpm bundle + pnpm prune-clients + cp package.json "$(ARTIFACTS_DIR)/" + mv dist/client/* dist/ + rm -fr dist/client + mv dist "$(ARTIFACTS_DIR)/" + turbo db:generate --filter=@weareinreach/db diff --git a/lambdas/cognito-user-migrate/package.json b/lambdas/cognito-user-migrate/package.json index 37ce3a3036..0244e813be 100644 --- a/lambdas/cognito-user-migrate/package.json +++ b/lambdas/cognito-user-migrate/package.json @@ -7,9 +7,9 @@ "main": "dist/index.js", "source": "src/index.ts", "scripts": { - "aws:db:generate": "prisma generate --schema ../db/prisma/schema.prisma", - "build:aws": "./build.sh", - "bundle": "ncc build ./src/index.ts -s -a -d", + "aws:db:generate": "prisma generate --schema ../../packages/db/prisma/schema.prisma --generator aws", + "build:aws": "sam build --build-in-source", + "bundle": "ncc build ./src/index.ts -s -a -d --target es2020", "clean:dist": "rm -fr dist", "clean:node": "rm -rf ./node_modules/ || true", "deploy:aws": "aws lambda update-function-code --function-name user-migrate --zip-file fileb://bundle.zip", @@ -18,7 +18,7 @@ "lint": "eslint --cache .", "lint:fix": "eslint --cache --fix .", "package": "cd dist && zip -r bundle.zip *", - "prune-clients": "find ./dist/client -type f -not -name '*rhel*' -delete -print" + "prune-clients": "find ./dist/client -type f -not -name '*libquery_engine-linux-arm64-openssl-*' -delete -print" }, "dependencies": { "@aws-lambda-powertools/logger": "1.18.1", diff --git a/lambdas/cognito-user-migrate/src/client.ts b/lambdas/cognito-user-migrate/src/client.ts deleted file mode 100644 index bcdd93dbba..0000000000 --- a/lambdas/cognito-user-migrate/src/client.ts +++ /dev/null @@ -1,34 +0,0 @@ -// import { PrismaClient } from '@prisma/client' - -// import { logger } from './logger' - -// export const prisma = new PrismaClient({ -// log: [ -// { -// emit: 'event', -// level: 'query', -// }, -// { -// emit: 'event', -// level: 'error', -// }, -// { -// emit: 'event', -// level: 'info', -// }, -// { -// emit: 'event', -// level: 'warn', -// }, -// ], -// }) -// prisma.$on('query', (e) => logger.info({ message: JSON.stringify(e) })) -// prisma.$on('info', (e) => logger.info({ message: JSON.stringify(e) })) -// prisma.$on('error', (e) => logger.error({ message: JSON.stringify(e) })) -// prisma.$on('warn', (e) => logger.warn({ message: JSON.stringify(e) })) - -// export * from '@prisma/client' -// import { prisma } from '@weareinreach/db' - -// export { prisma } -export {} diff --git a/lambdas/cognito-user-migrate/src/getUser.ts b/lambdas/cognito-user-migrate/src/getUser.ts index d38bfbd767..e7e4bd7ba8 100644 --- a/lambdas/cognito-user-migrate/src/getUser.ts +++ b/lambdas/cognito-user-migrate/src/getUser.ts @@ -6,7 +6,6 @@ type GetUser = (email: string) => Promise export const getUser: GetUser = async (email) => { try { - // eslint-disable-next-line @typescript-eslint/return-await return await prisma.user.findUniqueOrThrow({ where: { email, diff --git a/lambdas/cognito-user-migrate/src/verifyUser.ts b/lambdas/cognito-user-migrate/src/verifyUser.ts index 914c22660c..32a34f0ada 100644 --- a/lambdas/cognito-user-migrate/src/verifyUser.ts +++ b/lambdas/cognito-user-migrate/src/verifyUser.ts @@ -12,7 +12,7 @@ export const verifyUser: VerifyUser = async (email, password) => { try { const userProfile = await prisma.user.findUniqueOrThrow({ where: { - email: email, + email, }, select: { id: true, @@ -37,7 +37,7 @@ export const verifyUser: VerifyUser = async (email, password) => { } return { valid: false } } catch (error) { - if (error instanceof Prisma.NotFoundError) { + if (error instanceof Prisma.PrismaClientKnownRequestError && error.code === 'P2025') { logger.error(`User not found: ${email}`) throw new Error(`User not found: ${email}`) } diff --git a/lambdas/cognito-user-migrate/template.yaml b/lambdas/cognito-user-migrate/template.yaml index 1ff3087ed4..3b47ab0b0e 100644 --- a/lambdas/cognito-user-migrate/template.yaml +++ b/lambdas/cognito-user-migrate/template.yaml @@ -4,18 +4,18 @@ Description: Cognito user migration script. Globals: Function: - Runtime: nodejs18.x - CodeUri: ./dist/ + Runtime: nodejs20.x + CodeUri: ./ Timeout: 60 MemorySize: 512 Architectures: - - x86_64 + - arm64 Resources: usermigrate: Type: 'AWS::Serverless::Function' - # Metadata: - # BuildMethod: makefile + Metadata: + BuildMethod: makefile Properties: FunctionName: 'cognito-user-migrate' Handler: dist/index.handler @@ -24,13 +24,8 @@ Resources: Variables: DATABASE_URL: '{{resolve:ssm:/prod/inreach-prod}}' DB_DIRECT_URL: '{{resolve:ssm:/prod/inreach-prod}}' - # runtimeDepsLayer: - # Type: AWS::Serverless::LayerVersion - # Metadata: - # BuildMethod: makefile - # Properties: - # LayerName: "usermigrate-dependencies" - # ContentUri: ./ - # CompatibleRuntimes: - # - nodejs18.x - # RetentionPolicy: Retain + MessageLogGroup: + Type: AWS::Logs::LogGroup + Properties: + LogGroupName: !Sub '/lambda/${usermigrate}' + RetentionInDays: 30 diff --git a/lambdas/cognito-user-migrate/tsconfig.json b/lambdas/cognito-user-migrate/tsconfig.json index 4a424eabc9..7cb01e516f 100644 --- a/lambdas/cognito-user-migrate/tsconfig.json +++ b/lambdas/cognito-user-migrate/tsconfig.json @@ -1,10 +1,10 @@ { "extends": "@weareinreach/config/tsconfig/base.json", "compilerOptions": { - "baseUrl": "./src", + "baseUrl": "./", "paths": { "~/*": ["./*"], - "~db/*": ["../../db/*"] + "~db/*": ["../../packages/db/*"] }, "target": "es2020", "strict": true, @@ -16,7 +16,7 @@ "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, - "isolatedModules": false + "isolatedModules": true }, "exclude": ["dist", "node_modules"], "include": ["./**/*.ts"] diff --git a/packages/db/package.json b/packages/db/package.json index 4eac5cbd6a..5b7d8d5641 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -12,8 +12,8 @@ "clean:zod": "rm -rf ./zod-schemas/* || true", "db:dataMigrate": "pnpm with-env tsx ./prisma/dataMigrationRunner.ts", "db:deploy": "pnpm with-env prisma migrate deploy", - "db:generate": "pnpm clean:zod && pnpm with-env prisma generate && prisma -v", - "db:generate:aws": "pnpm install && pnpm with-env prisma generate", + "db:generate": "pnpm clean:zod && pnpm with-env prisma generate --generator client && prisma -v", + "db:generate:aws": "pnpm with-env prisma generate --generator aws", "db:generate:kysely": "pnpm with-env kysely-codegen || true", "db:migrate": "pnpm with-env prisma migrate dev", "db:migrate:edit": "pnpm with-env prisma migrate dev --create-only --skip-seed", diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index c42584777f..2afd6df156 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -3,6 +3,12 @@ generator client { previewFeatures = ["fullTextSearch", "postgresqlExtensions", "tracing", "views", "driverAdapters", "nativeDistinct", "relationJoins"] } +generator aws { + provider = "prisma-client-js" + previewFeatures = ["fullTextSearch", "postgresqlExtensions", "tracing", "views", "driverAdapters", "nativeDistinct", "relationJoins"] + binaryTargets = ["linux-arm64-openssl-3.0.x"] +} + // generator zod { // provider = "zod-prisma-types" // output = "../zod-schemas"