diff --git a/.env-example b/.env-example new file mode 100644 index 00000000..4ef3863f --- /dev/null +++ b/.env-example @@ -0,0 +1,7 @@ +ENVIRONMENT=dev +LOG_LEVEL=debug +SAVE_LOGS= +PORT=3000 +INTERNAL_PORT=3001 +CONFIG_PATH=./config +API_VERSION=v1 \ No newline at end of file diff --git a/server/environment.ts b/server/environment.ts index ccfdc146..744cf3d7 100644 --- a/server/environment.ts +++ b/server/environment.ts @@ -6,6 +6,7 @@ const environmentSchema = z.object({ LOG_LEVEL: z.string(), SAVE_LOGS: z.string().transform((val) => val === "true"), PORT: z.string(), + INTERNAL_PORT: z.string(), CONFIG_PATH: z.string(), API_VERSION: z.string(), }); @@ -15,6 +16,7 @@ const environment = { LOG_LEVEL: (process.env.LOG_LEVEL as string) || "debug", SAVE_LOGS: (process.env.SAVE_LOGS as string) || "false", PORT: (process.env.PORT as string) || "3000", + INTERNAL_PORT: (process.env.INTERNAL_PORT as string) || "3001", CONFIG_PATH: process.env.CONFIG_PATH as string, API_VERSION: process.env.API_VERSION as string, }; diff --git a/server/index.ts b/server/index.ts index db0e73ef..1d014ea5 100644 --- a/server/index.ts +++ b/server/index.ts @@ -5,52 +5,64 @@ import environment from "@server/environment"; import logger from "@server/logger"; import helmet from "helmet"; import cors from "cors"; -import unauth from "@server/routers/unauth"; +import internal from "@server/routers/internal"; +import external from "@server/routers/external"; import Database from 'better-sqlite3'; import { drizzle } from 'drizzle-orm/better-sqlite3'; const dev = environment.ENVIRONMENT !== "prod"; const app = next({ dev }); const handle = app.getRequestHandler(); -const port = environment.PORT; - +const mainPort = environment.PORT; +const internalPort = environment.INTERNAL_PORT; let db: Database.Database; app.prepare().then(() => { // Open the SQLite database connection const sqlite = new Database(`${environment.CONFIG_PATH}/db/db.sqlite`, { verbose: console.log }); const db = drizzle(sqlite); - - const server = express(); - server.use(helmet()); - server.use(cors()); + // Main server + const mainServer = express(); + mainServer.use(helmet()); + mainServer.use(cors()); - // Run migrations (if you're using Drizzle's migration system) - // migrate(db, { migrationsFolder: './drizzle' }); - // Middleware to attach the database to the request - server.use((req, res, next) => { - (req as any).db = db; - next(); + mainServer.use((req, res, next) => { + (req as any).db = db; + next(); }); - + const prefix = `/api/${environment.API_VERSION}`; - - server.use(prefix, express.json(), unauth); - + mainServer.use(prefix, express.json(), external); // We are using NEXT from here on - server.all("*", (req: Request, res: Response) => { + mainServer.all("*", (req: Request, res: Response) => { const parsedUrl = parse(req.url!, true); handle(req, res, parsedUrl); }); - server.listen(port, (err?: any) => { - if (err) { - throw err; - } - logger.info(`Server is running on http://localhost:${port}`); + mainServer.listen(mainPort, (err?: any) => { + if (err) throw err; + logger.info(`Main server is running on http://localhost:${mainPort}`); + }); + + // Internal server + const internalServer = express(); + internalServer.use(helmet()); + internalServer.use(cors()); + + // Middleware to attach the database to the request + internalServer.use((req, res, next) => { + (req as any).db = db; + next(); + }); + + internalServer.use(prefix, express.json(), internal); + + internalServer.listen(internalPort, (err?: any) => { + if (err) throw err; + logger.info(`Internal server is running on http://localhost:${internalPort}`); }); }); diff --git a/server/routers/unauth.ts b/server/routers/external.ts similarity index 86% rename from server/routers/unauth.ts rename to server/routers/external.ts index 8479c18d..637b58dc 100644 --- a/server/routers/unauth.ts +++ b/server/routers/external.ts @@ -10,8 +10,6 @@ unauth.get("/", (_, res) => { res.status(200).json({ message: "Healthy" }); }); -unauth.use("/badger", badger); -unauth.use("/gerbil", badger); unauth.use("/newt", badger); unauth.use("/pangolin", badger); diff --git a/server/routers/internal.ts b/server/routers/internal.ts new file mode 100644 index 00000000..539ffa99 --- /dev/null +++ b/server/routers/internal.ts @@ -0,0 +1,16 @@ +import { Router } from "express"; +import badger from "./badger/badger"; +import gerbil from "./gerbil/gerbil"; +import newt from "./newt/newt"; +import pangolin from "./pangolin/pangolin"; + +const unauth = Router(); + +unauth.get("/", (_, res) => { + res.status(200).json({ message: "Healthy" }); +}); + +unauth.use("/badger", badger); +unauth.use("/gerbil", badger); + +export default unauth;