From 5a1847a0690ea7c626137e2065fa63a4cd6207ca Mon Sep 17 00:00:00 2001 From: Max Wofford Date: Tue, 9 Jul 2024 16:09:46 -0400 Subject: [PATCH] Add framework for new api service --- Procfile | 2 ++ package-lock.json | 36 ++++++++++++++++++++++++++++++++++++ package.json | 4 +++- src/api.ts | 2 ++ src/lib/bolt.ts | 3 +++ 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 Procfile create mode 100644 src/api.ts diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..8cf5d7dd --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ +web: npm run start +api: npm run start_api \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c2d8ec40..c6b79575 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "dotenv": "^16.4.5", "dotenv-cli": "^7.4.2", "express": "^4.19.2", + "express-http-proxy": "^2.0.0", "express-rate-limit": "^7.3.1", "get-urls": "^12.1.0", "lowdb": "^7.0.1", @@ -1543,6 +1544,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, "node_modules/esbuild": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", @@ -1647,6 +1654,35 @@ "node": ">= 0.10.0" } }, + "node_modules/express-http-proxy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/express-http-proxy/-/express-http-proxy-2.0.0.tgz", + "integrity": "sha512-TXxcPFTWVUMSEmyM6iX2sT/JtmqhqngTq29P+eXTVFdtxZrTmM8THUYK59rUXiln0FfPGvxEpGRnVrgvHksXDw==", + "license": "MIT", + "dependencies": { + "debug": "^3.0.1", + "es6-promise": "^4.1.1", + "raw-body": "^2.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/express-http-proxy/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/express-http-proxy/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/express-rate-limit": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.3.1.tgz", diff --git a/package.json b/package.json index 59932053..7321bbae 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "prisma_deploy": "prisma migrate deploy", "debug": "npm run prisma_deploy && tsx ./src/entry.ts", "debug_reset": "prisma migrate reset", - "start": "npm run prisma_deploy && tsx ./src/entry.ts" + "start": "npm run prisma_deploy && tsx ./src/entry.ts", + "start_api": "tsx ./src/api.ts" }, "repository": { "type": "git", @@ -30,6 +31,7 @@ "dotenv": "^16.4.5", "dotenv-cli": "^7.4.2", "express": "^4.19.2", + "express-http-proxy": "^2.0.0", "express-rate-limit": "^7.3.1", "get-urls": "^12.1.0", "lowdb": "^7.0.1", diff --git a/src/api.ts b/src/api.ts new file mode 100644 index 00000000..e2293f7d --- /dev/null +++ b/src/api.ts @@ -0,0 +1,2 @@ +const API_PORT = process.env.API_PORT || 5678; +// do your server stuff here... \ No newline at end of file diff --git a/src/lib/bolt.ts b/src/lib/bolt.ts index e118e836..ce02d92c 100644 --- a/src/lib/bolt.ts +++ b/src/lib/bolt.ts @@ -1,5 +1,6 @@ import bolt, { SlackViewAction, SlackViewMiddlewareArgs } from '@slack/bolt'; import bodyParser from 'body-parser'; +import proxy from 'express-http-proxy'; import { AllMiddlewareArgs, Middleware, SlackAction, SlackActionMiddlewareArgs, SlackCommandMiddlewareArgs } from "@slack/bolt"; import { StringIndexed } from "@slack/bolt/dist/types/helpers.js"; @@ -29,6 +30,8 @@ export const app = new bolt.App({ express.use(bodyParser.json()); +app.use('/api', proxy('locahost:5678')); + app.error(async (error) => { if (!error.original) { emitter.emit('error', { error });