From 1adc2f645cd722edeb10ca060d909aebd3ef7136 Mon Sep 17 00:00:00 2001 From: Zeke Hunter-Green Date: Tue, 23 Jan 2024 16:29:26 +0000 Subject: [PATCH] try to make lambda serve index.html Co-Authored-By: Marjan Kalanaki <15894063+marjisound@users.noreply.github.com> --- packages/api/.gitignore | 4 +- packages/api/index.html | 46 ++++++++++++++ packages/api/index.ts | 73 ++++++++++------------- packages/api/package.json | 1 + packages/cdk/lib/transcription-service.ts | 2 +- 5 files changed, 80 insertions(+), 46 deletions(-) create mode 100644 packages/api/index.html diff --git a/packages/api/.gitignore b/packages/api/.gitignore index 4c9265bc..2c25047a 100644 --- a/packages/api/.gitignore +++ b/packages/api/.gitignore @@ -1,5 +1,5 @@ # dependencies node_modules/ -./dist -./target \ No newline at end of file +dist/ +target/ \ No newline at end of file diff --git a/packages/api/index.html b/packages/api/index.html new file mode 100644 index 00000000..6bb86fdc --- /dev/null +++ b/packages/api/index.html @@ -0,0 +1,46 @@ + + + + + + + + + + + + + Transcribe + + + + +
+

Hello world

+
+ + + diff --git a/packages/api/index.ts b/packages/api/index.ts index e2dbeeab..9b022aac 100644 --- a/packages/api/index.ts +++ b/packages/api/index.ts @@ -1,73 +1,60 @@ -// import { -// APIGatewayProxyEvent, -// APIGatewayEventRequestContext, -// APIGatewayProxyCallback, -// APIGatewayProxyStructuredResultV2, -// } from 'aws-lambda'; import express from 'express'; -import asyncHandler from "express-async-handler"; -import serverlessExpress from "@codegenie/serverless-express"; +import asyncHandler from 'express-async-handler'; +import serverlessExpress from '@codegenie/serverless-express'; import bodyParser from 'body-parser'; - -// export const handler = ( -// event: APIGatewayProxyEvent, -// context: APIGatewayEventRequestContext, -// callback: APIGatewayProxyCallback, -// ): Promise => { -// const message = 'Hello World!'; -// console.log(message); -// console.log(event.body, context.accountId, callback.name); -// const result = { -// "isBase64Encoded": true, -// "statusCode": 200, -// "headers": { }, -// "body": message -// } -// return Promise.resolve(result); -// }; +import path from 'path'; const getApp = async () => { const app = express(); const apiRouter = express.Router(); - app.use(bodyParser.json({ limit: "40mb" })); + app.use(bodyParser.json({ limit: '40mb' })); apiRouter.get( - "/healthcheck", + '/healthcheck', asyncHandler(async (req, res) => { - res.send("It lives!") - }) + res.send('It lives!'); + }), ); - app.use("/api", apiRouter); + app.use('/api', apiRouter); + + if (process.env['AWS_EXECUTION_ENV'] !== undefined) { + app.use(express.static('frontend')); + app.get('/*', (req, res) => { + res.sendFile(path.resolve(__dirname, 'frontend', 'index.html')); + }); + } return app; -} +}; let api; -if (process.env["AWS_EXECUTION_ENV"] !== undefined){ - console.log("Running on lambda") +if (process.env['AWS_EXECUTION_ENV'] !== undefined) { + console.log('Running on lambda'); // eslint-disable-next-line @typescript-eslint/no-explicit-any - let serverlessExpressHandler: any - const serverlessHandler = getApp().then((app) => (serverlessExpressHandler = serverlessExpress({ app }).handler)); + let serverlessExpressHandler: any; + const serverlessHandler = getApp().then( + (app) => (serverlessExpressHandler = serverlessExpress({ app }).handler), + ); // eslint-disable-next-line @typescript-eslint/no-explicit-any api = async (event: any, context: any) => { if (!serverlessExpressHandler) { await serverlessHandler; } - return serverlessExpressHandler(event, context) - } + return serverlessExpressHandler(event, context); + }; } else { - console.log("running locally"); + console.log('running locally'); // Running locally. Start Express ourselves - const port = 9103 + const port = 9103; getApp().then((app) => { app.listen(port, () => { - console.log(`Server now listening on port: ${port}`) - }) - }) + console.log(`Server now listening on port: ${port}`); + }); + }); } -export { api } \ No newline at end of file +export { api }; diff --git a/packages/api/package.json b/packages/api/package.json index 1a0d4213..c68e6f87 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -5,6 +5,7 @@ "main": "index.js", "scripts": { "build": "esbuild --bundle --platform=node --target=node20 --outfile=dist/index.js index.ts", + "build-frontend": "mkdir -p dist/frontend; cp index.html dist/frontend/index.html", "package": "cd dist; mkdir -p ../target; zip -qr ../target/api.zip ./*" }, "keywords": [], diff --git a/packages/cdk/lib/transcription-service.ts b/packages/cdk/lib/transcription-service.ts index 58a5533b..ef792c67 100644 --- a/packages/cdk/lib/transcription-service.ts +++ b/packages/cdk/lib/transcription-service.ts @@ -13,7 +13,7 @@ export class TranscriptionService extends GuStack { new GuApiLambda(this, "transcription-service-api", { fileName: "api.zip", - handler: "index.api", + handler: "api/index.api", runtime: Runtime.NODEJS_20_X, monitoringConfiguration: { noMonitoring: true,