{ "name": "flashpoint-web-backend", "version": "1.0.0", "description": "Backend API for Flashpoint Archive web application", "main": "dist/server.js", "scripts": { "dev": "tsx watch src/server.ts", "kill-port": "node scripts/kill-port.js", "build": "tsc", "start": "node dist/server.js", "typecheck": "tsc --noEmit", "lint": "eslint src --ext .ts", "format": "prettier --write \"src/**/*.{ts,js,json}\"", "format:check": "prettier --check \"src/**/*.{ts,js,json}\"", "test": "vitest", "fix-paths": "tsx scripts/fix-absolute-paths.ts" }, "keywords": [ "flashpoint", "archive", "games", "api" ], "author": "", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/auto-instrumentations-node": "^0.69.0", "@opentelemetry/exporter-metrics-otlp-http": "^0.211.0", "@opentelemetry/exporter-trace-otlp-http": "^0.211.0", "@opentelemetry/resources": "^2.5.0", "@opentelemetry/sdk-node": "^0.211.0", "@opentelemetry/semantic-conventions": "^1.39.0", "adm-zip": "^0.5.16", "axios": "^1.13.2", "bcrypt": "^6.0.0", "better-sqlite3": "^12.6.0", "cheerio": "^1.1.2", "compression": "^1.7.4", "cookie-parser": "^1.4.7", "cors": "^2.8.5", "cron-parser": "^5.5.0", "dotenv": "^16.4.5", "express": "^4.18.3", "express-rate-limit": "^7.1.5", "helmet": "^7.1.0", "http-proxy-middleware": "^2.0.6", "jsonwebtoken": "^9.0.3", "lru-cache": "^11.2.5", "node-cron": "^4.2.1", "node-stream-zip": "^1.15.0", "winston": "^3.11.0", "zod": "^3.22.4" }, "devDependencies": { "@types/adm-zip": "^0.5.7", "@types/bcrypt": "^6.0.0", "@types/better-sqlite3": "^7.6.13", "@types/cheerio": "^0.22.35", "@types/compression": "^1.7.5", "@types/cookie-parser": "^1.4.10", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/jsonwebtoken": "^9.0.10", "@types/mime-types": "^3.0.1", "@types/node": "^20.11.25", "@types/node-cron": "^3.0.11", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", "eslint": "^8.57.0", "tsx": "^4.7.1", "typescript": "^5.4.2", "vitest": "^1.3.1" }, "engines": { "node": ">=20.0.0" } }