A proxy that sets the username header twice, as when Authentik's nginx snippet and the documented lines are both present, made Node join the values into "brad, brad" and create an account of that name instead of signing in brad. Read each occurrence separately: identical repeats count once, and conflicting ones are refused. The docs now note Authentik's snippet already sets the headers.
Flashpoint Web Backend
Node.js/Express API server for the Flashpoint Archive web application.
Features
- RESTful API for game metadata
- Direct SQLite database access (read-only)
- Integrated game content serving (proxy + ZIP)
- Image and logo serving
- Playlist management
- Platform and tag endpoints
Quick Start
# Install dependencies
npm install
# Configure environment
cp .env.example .env
# Start development server
npm run dev
Server runs on http://localhost:3100
API Endpoints
See ../../api-specification.md for complete API documentation.
Core Endpoints
GET /health- Health checkGET /api/games- List gamesGET /api/games/:id- Get game detailsGET /api/platforms- List platformsGET /api/tags- List tagsGET /api/playlists- List playlists
Architecture
src/
├── routes/ # Express route handlers
├── services/ # Business logic layer
├── game/ # Integrated game service (proxy, ZIP, CGI)
├── middleware/ # Express middleware
├── utils/ # Helper functions
├── config.ts # Configuration management
└── server.ts # Application entry point
Database
Uses sql.js (pure JavaScript SQLite) for direct read-only access to:
D:\Flashpoint\Data\flashpoint.sqlite
No native compilation required! sql.js is a WebAssembly-based SQLite implementation that works without Visual Studio or build tools.
Schema includes tables for games, platforms, tags, and more.
Development
npm run dev # Start with hot reload (tsx)
npm run build # Compile TypeScript
npm run start # Run compiled version
npm run typecheck # Type checking only
npm run lint # ESLint
Environment Variables
Required:
FLASHPOINT_PATH- Path to Flashpoint installationFLASHPOINT_DB_PATH- Path to SQLite database
Optional:
PORT- Server port (default: 3100)NODE_ENV- Environment (development/production)DOMAIN- Frontend origin (default: http://localhost:5173)
See .env.example for all options.