From 845020ff1ebfcbcb2e637724777ba06725df5550 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:39:26 +0530 Subject: [PATCH 01/12] chore(deps): install connect-pg-simple --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 75600d83..c3c4cb04 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "body-parser": "^1.20.3", "buffer": "^6.0.3", "bullmq": "^5.12.15", + "connect-pg-simple": "^10.0.0", "connect-redis": "^8.0.1", "cookie-parser": "^1.4.6", "cors": "^2.8.5", From d3486fa06d1674963fbf6a428ab7476d0d5231d3 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:47:00 +0530 Subject: [PATCH 02/12] chore(deps): npm i --save-dev @types/connect-pg-simple --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index c3c4cb04..d9818fcc 100644 --- a/package.json +++ b/package.json @@ -104,6 +104,7 @@ ] }, "devDependencies": { + "@types/connect-pg-simple": "^7.0.3", "@types/cookie-parser": "^1.4.7", "@types/express": "^4.17.13", "@types/js-cookie": "^3.0.6", From 7b3dedca252bd2d436aee4648d97458627cfb9c7 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:49:19 +0530 Subject: [PATCH 03/12] feat: create pg pool --- server/src/server.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/src/server.ts b/server/src/server.ts index 3d39e985..8dfe48f9 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -18,6 +18,8 @@ import { fork } from 'child_process'; import { capture } from "./utils/analytics"; import swaggerUi from 'swagger-ui-express'; import swaggerSpec from './swagger/config'; +import connectPgSimple from 'connect-pg-simple'; +import pg from 'pg'; import session from 'express-session'; @@ -30,6 +32,15 @@ app.use(cors({ })); app.use(express.json()); +const { Pool } = pg; +const pool = new Pool({ + user: process.env.DB_USER, + host: process.env.DB_HOST, + database: process.env.DB_NAME, + password: process.env.DB_PASSWORD, + port: process.env.DB_PORT, +}); + app.use( session({ From 7f1a1f2c1a3536a7d696199e7eb5c6a3969f8a8e Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:49:59 +0530 Subject: [PATCH 04/12] fix: parse DB_PORT value to a number --- server/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/server.ts b/server/src/server.ts index 8dfe48f9..85842e89 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -38,7 +38,7 @@ const pool = new Pool({ host: process.env.DB_HOST, database: process.env.DB_NAME, password: process.env.DB_PASSWORD, - port: process.env.DB_PORT, + port: process.env.DB_PORT ? parseInt(process.env.DB_PORT, 10) : undefined, }); From a4dd0e583112cccbe1c601c01422cc1943c2d17e Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:50:26 +0530 Subject: [PATCH 05/12] feat: initialize pg session --- server/src/server.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/server.ts b/server/src/server.ts index 85842e89..11e1eeca 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -41,6 +41,7 @@ const pool = new Pool({ port: process.env.DB_PORT ? parseInt(process.env.DB_PORT, 10) : undefined, }); +const PgSession = connectPgSimple(session); app.use( session({ From c63f1279745a8491205091f18a3e89a834226b3b Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:52:37 +0530 Subject: [PATCH 06/12] feat: pass PgSession as store for express session --- server/src/server.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/server.ts b/server/src/server.ts index 11e1eeca..1ece654c 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -45,6 +45,9 @@ const PgSession = connectPgSimple(session); app.use( session({ + store: new PgSession({ + pool: pool, + }), secret: 'mx-session', resave: false, // Do not resave the session if it hasn't changed saveUninitialized: true, // Save new sessions From e1c9e9b16c330edcf2b21e15fe05df68d81c1f90 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:52:57 +0530 Subject: [PATCH 07/12] feat: session table --- server/src/server.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/server.ts b/server/src/server.ts index 1ece654c..99acc0d7 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -47,6 +47,7 @@ app.use( session({ store: new PgSession({ pool: pool, + tableName: 'session', }), secret: 'mx-session', resave: false, // Do not resave the session if it hasn't changed From 4b38bcfd0ff432432b214165fb6c32d75ebc1c41 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:54:44 +0530 Subject: [PATCH 08/12] feat: set 1 day maxAge session expiration --- server/src/server.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/server/src/server.ts b/server/src/server.ts index 99acc0d7..c6f77e26 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -52,7 +52,10 @@ app.use( secret: 'mx-session', resave: false, // Do not resave the session if it hasn't changed saveUninitialized: true, // Save new sessions - cookie: { secure: false }, // Set to true if using HTTPS + cookie: { + secure: false, // Set to true if using HTTPS + maxAge: 24 * 60 * 60 * 1000, // 1-day session expiration + }, }) ); From 1562fd099dc6c84b3243b9a36e65ee48f43204d4 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 13:55:01 +0530 Subject: [PATCH 09/12] fix: format --- server/src/server.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/server.ts b/server/src/server.ts index c6f77e26..d7cf3045 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -52,7 +52,7 @@ app.use( secret: 'mx-session', resave: false, // Do not resave the session if it hasn't changed saveUninitialized: true, // Save new sessions - cookie: { + cookie: { secure: false, // Set to true if using HTTPS maxAge: 24 * 60 * 60 * 1000, // 1-day session expiration }, @@ -178,7 +178,7 @@ process.on('SIGINT', async () => { } catch (error: any) { console.error('Error updating runs:', error); } - + if (!isProduction) { if (workerProcess) workerProcess.kill(); if (recordingWorkerProcess) recordingWorkerProcess.kill(); From ba2702651ef3304f8118c374c2f5062ba376f2ec Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 14:07:40 +0530 Subject: [PATCH 10/12] feat: create table if missing --- server/src/server.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/server.ts b/server/src/server.ts index d7cf3045..446e302a 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -48,6 +48,7 @@ app.use( store: new PgSession({ pool: pool, tableName: 'session', + createTableIfMissing: true, }), secret: 'mx-session', resave: false, // Do not resave the session if it hasn't changed From 0adf37099c2e25012103c9e01ba4548821204a27 Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 14:08:54 +0530 Subject: [PATCH 11/12] feat: close pg pool after application shutdown --- server/src/server.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/src/server.ts b/server/src/server.ts index 446e302a..36d35fa0 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -180,6 +180,14 @@ process.on('SIGINT', async () => { console.error('Error updating runs:', error); } + try { + console.log('Closing PostgreSQL connection pool...'); + await pool.end(); + console.log('PostgreSQL connection pool closed'); + } catch (error) { + console.error('Error closing PostgreSQL connection pool:', error); + } + if (!isProduction) { if (workerProcess) workerProcess.kill(); if (recordingWorkerProcess) recordingWorkerProcess.kill(); From 62e6c36a32993002d0e991a598eeb8ae5424f47d Mon Sep 17 00:00:00 2001 From: amhsirak Date: Sun, 23 Mar 2025 14:09:04 +0530 Subject: [PATCH 12/12] fix: format --- server/src/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/server.ts b/server/src/server.ts index 36d35fa0..10e33525 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -183,7 +183,7 @@ process.on('SIGINT', async () => { try { console.log('Closing PostgreSQL connection pool...'); await pool.end(); - console.log('PostgreSQL connection pool closed'); + console.log('PostgreSQL connection pool closed'); } catch (error) { console.error('Error closing PostgreSQL connection pool:', error); }