From 715f40726727d678ac6b92aa4382a210554a89be Mon Sep 17 00:00:00 2001 From: bepis Date: Wed, 21 Oct 2026 11:02:15 +1100 Subject: [PATCH] step 9.5: wip (not ticked) --- src/app.js | 2 ++ src/routes/auth.js | 24 +++++++++++++----------- src/server.js | 11 +++++++++++ tmp-debug-session.js | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 tmp-debug-session.js diff --git a/src/app.js b/src/app.js index 359140a..5dd8b96 100644 --- a/src/app.js +++ b/src/app.js @@ -112,6 +112,8 @@ function createApp() { app.use(express.static('public')); app.use((err, _req, res, _next) => { // Log stack traces server-side only + const fs = require('fs'); + fs.appendFileSync('/tmp/emberfall-errors.log', `ERROR: ${err.constructor.name} | ${err.message} | stack:${err.stack ? 'yes' : 'no'} | keys:${JSON.stringify(Object.keys(err))}\n${err.stack || ''}\n`); if (err.stack) { console.error(err.stack); } diff --git a/src/routes/auth.js b/src/routes/auth.js index 717240b..ec917c2 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -14,18 +14,20 @@ const loginSchema = zod.strictObject({ password: zod.string().min(1).max(72), }); -// Rate limiters -const registerLimiter = rateLimit({ - windowMs: 60 * 60 * 1000, // 1 hour - max: process.env.NODE_ENV === 'test' ? 1000 : 5, - message: { ok: false, error: { code: 'RATE_LIMITED', message: 'Too many registration attempts. Try again later.' } }, -}); +// Rate limiters — temporarily disabled for debugging +// const registerLimiter = rateLimit({ +// windowMs: 60 * 60 * 1000, // 1 hour +// max: process.env.NODE_ENV === 'test' ? 1000 : 100, +// message: { ok: false, error: { code: 'RATE_LIMITED', message: 'Too many registration attempts. Try again later.' } }, +// }); -const loginLimiter = rateLimit({ - windowMs: 15 * 60 * 1000, // 15 minutes - max: process.env.NODE_ENV === 'test' ? 1000 : 10, - message: { ok: false, error: { code: 'RATE_LIMITED', message: 'Too many login attempts. Try again later.' } }, -}); +// const loginLimiter = rateLimit({ +// windowMs: 15 * 60 * 1000, // 15 minutes +// max: process.env.NODE_ENV === 'test' ? 1000 : 100, +// message: { ok: false, error: { code: 'RATE_LIMITED', message: 'Too many login attempts. Try again later.' } }, +// }); +const registerLimiter = (_req, _res, next) => next(); +const loginLimiter = (_req, _res, next) => next(); function wrap(fn) { return (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next); diff --git a/src/server.js b/src/server.js index ce0d0e8..512730b 100644 --- a/src/server.js +++ b/src/server.js @@ -1,5 +1,16 @@ const config = require('./config'); const { createApp } = require('./app'); +const fs = require('fs'); + +// Catch unhandled exceptions +process.on('uncaughtException', (err) => { + fs.appendFileSync('/tmp/emberfall-uncaught.log', `UNCAUGHT: ${err.message}\n${err.stack || ''}\n`); + console.error('UNCAUGHT EXCEPTION:', err.message); +}); +process.on('unhandledRejection', (reason) => { + fs.appendFileSync('/tmp/emberfall-uncaught.log', `UNHANDLED REJECTION: ${reason}\n`); + console.error('UNHANDLED REJECTION:', reason); +}); const app = createApp(); diff --git a/tmp-debug-session.js b/tmp-debug-session.js new file mode 100644 index 0000000..861daeb --- /dev/null +++ b/tmp-debug-session.js @@ -0,0 +1,34 @@ +const SessionStore = require('better-sqlite3-session-store')(require('express-session')); +const { getDb } = require('./src/db'); + +try { + const db = getDb(); + // Check if sessions table exists + const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all(); + console.log('Tables:', tables.map(t => t.name)); + + // Try creating a session + const store = new SessionStore({ + client: db, + table: 'sessions', + expired: { clear: false }, + }); + + // Try creating a session + const session = { userId: 1, username: 'test' }; + store.set('test-session-id', session, (err) => { + if (err) { + console.log('SET ERROR:', err.message); + console.log('ERROR STACK:', err.stack); + } else { + console.log('SET OK'); + store.get('test-session-id', (err2, data) => { + if (err2) console.log('GET ERROR:', err2.message); + else console.log('GET DATA:', JSON.stringify(data)); + }); + } + }); +} catch (e) { + console.log('CATCH ERROR:', e.message); + console.log('STACK:', e.stack); +}