From bc66fec77a047b4641ea8a81bf8aa60f64e73dff Mon Sep 17 00:00:00 2001 From: "Claude (Chronicler #61)" Date: Sun, 5 Apr 2026 10:34:44 +0000 Subject: [PATCH] feat: PostgreSQL session store Replaces MemoryStore with connect-pg-simple. Sessions now persist across Arbiter restarts. Table 'session' auto-created if missing. Signed-off-by: Claude (Chronicler #61) --- services/arbiter-3.0/src/index.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/services/arbiter-3.0/src/index.js b/services/arbiter-3.0/src/index.js index 4e020eb..3b0d25c 100644 --- a/services/arbiter-3.0/src/index.js +++ b/services/arbiter-3.0/src/index.js @@ -2,11 +2,13 @@ require('dotenv').config(); const express = require('express'); const expressLayouts = require('express-ejs-layouts'); const session = require('express-session'); +const PgSession = require('connect-pg-simple')(session); const passport = require('passport'); const DiscordStrategy = require('passport-discord').Strategy; const { Client, GatewayIntentBits, REST, Routes } = require('discord.js'); const csrf = require('csurf'); const cors = require('cors'); +const { Pool } = require('pg'); const authRoutes = require('./routes/auth'); const adminRoutes = require('./routes/admin/index'); @@ -16,6 +18,15 @@ const { registerEvents } = require('./discord/events'); const { linkCommand } = require('./discord/commands'); const { initCron } = require('./sync/cron'); +// PostgreSQL connection pool for sessions +const pgPool = 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 || 5432 +}); + // Initialize Discord Client const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers] }); registerEvents(client); @@ -64,6 +75,11 @@ app.use(express.urlencoded({ extended: true })); app.locals.client = client; app.use(session({ + store: new PgSession({ + pool: pgPool, + tableName: 'session', + createTableIfMissing: true + }), secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false,