Commit Graph
17 Commits
Author SHA1 Message Date
branderson 33b99cafd5 feat(scripts): seed Flashpoint Ultimate before extracting
--seed-ratio and --seed-hours keep aria2c seeding after the download,
stopping at whichever limit comes first, before extraction starts; this
needs no extra disk. The README asks people to seed and explains
long-term seeding with --keep-archives. Re-running with --torrent once
extraction has begun no longer downloads the deleted archives again.
2026-10-13 21:49:27 -07:00
branderson dd60c49dda docs: state hosting requirements and the legal position up front
The README opens with storage, CPU and HTTPS requirements, including the
per-player cost of streaming, and explains Flashpoint's legal standing.
Setup now uses the torrent and Infinity archive from Flashpoint's site,
and the streaming docs reflect the app proxying /stream/.
2026-10-13 21:12:03 -07:00
branderson 4130adfe58 docs: document Dotcom Arcade, streaming, proxy sign-in and saves
A new README for the combined project with setup from the Flashpoint
Ultimate torrent. New feature docs for streaming, proxy sign-in and
game saves; deployment, upgrade and streaming READMEs updated for the
single compose file; the project renamed throughout.
2026-10-13 19:31:06 -07:00
DarkraiseandGitHub 837415a3dd chor: add demo link and registration details
Added demo link and registration information to README.
2026-08-13 22:45:20 +07:00
Darkraise 3b11e3898d docs(readme): surface the 1.0.32 breaking change up front
The upgrade notice sat below the install walkthrough, where an existing
user pulling a new image would never look.

Add an alert directly under the header and move the Upgrading section
above Getting Started, listing what a pre-1.0.32 deployment must change.
2026-08-12 10:11:15 +07:00
Darkraise 1973adabca docs: add upgrade guide for the single-image deployment
Deployments on 1.0.31 or earlier cannot take an image update without
changing their compose file and .env, and nothing in the repo said so.

Document the migration from the two-container setup to the single
flashpoint-web image, the environment variables added, removed, and
changed since 1.0.31, and per-version release notes for 1.0.32-1.0.36.
Link it from the README and both documentation indexes.
2026-08-12 10:02:15 +07:00
Darkraise 9a32471f61 fix(docker): mount Flashpoint read-write by default
The shipped compose mounted the Flashpoint directory read-only, so every write
the app makes to it failed: recording downloaded state in flashpoint.sqlite,
saving downloaded game data under Data/Games, and metadata sync. The Downloaded
page marked nothing and the reconciler warned on every boot.

Drop :ro from both compose files and the README's snippet, and correct the docs
that described the mount as read-only.
2026-08-12 03:12:57 +07:00
Darkraise d1d885d302 docs(readme): add minimal working env example, refresh stale sections 2026-08-11 22:14:16 +07:00
Darkraise 3ba60aedf9 refactor(docker): build and ship a single API + UI image
Collapse the separate backend (Node) and frontend (nginx) images into
one image where the Express backend serves the built React app in
addition to the API and game content, so deployment is a single
container and one origin.

- Add a root Dockerfile with frontend-builder + backend-builder stages
  producing one runtime image; remove backend/ and frontend/ Dockerfiles,
  the nginx config, and the frontend entrypoint
- Serve the frontend dist and SPA fallback from Express (config.serveFrontend
  / FRONTEND_DIST_PATH), before auth/maintenance so the shell always loads and
  before the API 404 so client routes resolve to index.html
- Port the SPA-oriented CSP from nginx into Helmet, gated on serveFrontend;
  keep the strict API-only policy otherwise
- Reduce both compose files to a single flashpoint-web service on WEB_PORT
  -> 3100; drop API_PORT, BACKEND_HOST, BACKEND_PORT
- Build one image in the release workflow instead of a two-service matrix
- Update .env.example, README, workflow README, and env var docs

Also add .gitattributes (*.sh eol=lf) and normalize the entrypoint line
endings — without it, Windows checkouts bake CRLF into the image and the
shebang fails with "no such file or directory".
2026-08-11 16:02:06 +07:00
Darkraise ee9c2a296f fix: harden security, improve type safety, and clean up code
- Pin DNS resolution to prevent SSRF rebinding between
  check and connect (GameDataDownloader)
- Fail-closed on realpath failure in GameZipServer
- Zip Slip validation before extraction (RuffleService)
- Escape LIKE wildcards in ActivityService queries
- Sanitize sort order to prevent SQL injection
- Whitelist sort order instead of passing raw user input
- Add headersSent guard to global error handler
- Remove cookie from CGI allowed headers, sanitize
  content-type against null/CR/LF injection
- Revoke refresh tokens on password change and user
  deactivation
- Wrap role/user uniqueness checks in transactions
  (TOCTOU fix)
- Fix concurrent ZIP mount race with deferred promise
  and double-close prevention via _manuallyClosed flag
- Handle client disconnect in collectRequestBody
- Tighten nginx CSP, repeat headers in location blocks,
  hide server version, pin nginx:1.27-alpine
- Fix health check endpoint path in backend Dockerfile
- Use wget instead of curl for frontend health checks
- Replace any types with proper types across backend
  and frontend
- Replace || with ?? for config/form defaults
- Replace hardcoded Tailwind colors with theme tokens
- Replace console.log/error with logger in ErrorReporter
  and ChartErrorBoundary
- Conditionally render AddToPlaylistModal to avoid
  hidden instances
- Add NaN guards for parseInt in GameBrowseLayout
- Standardize query key for publicSettings
- Simplify README to Docker-first quickstart with wiki
  link
- Fix license to GPL-3.0 in backend package.json
- Slow down particle animation speed
- Add Zod max-length limits on playlist/error schemas
- Ensure positive limit in parsePaginationQuery
- Validate settings category param against allowlist
- Fix static/parameterized route ordering in favorites
- Add asyncHandler to game-zip wildcard route
- Close readline/stream on error in getRecentErrors
- Add .catch() on fire-and-forget syncAndReload
- Fix LazyBackgroundImage cleanup on unmount
- Store NetworkStatusIndicator timeout in ref
- Add Flash/SWF condition to random game query
2026-02-09 09:17:18 +07:00
Darkraise 96cf4a5b00 feat: revamp the game serving feature 2026-02-07 23:36:45 +07:00
Darkraise 8cde8a98eb feat: add CGI/PHP support for legacy Flashpoint games 2026-02-05 17:23:18 +07:00
Darkraise a263db1a2f feat: add admin-configurable domain settings 2026-02-04 05:34:01 +07:00
Darkraise e41154ad6d chore: documents cleanup 2026-02-03 14:59:00 +07:00
Darkraise da7c965491 chore: add readme and update documents 2026-02-03 10:42:28 +07:00
Darkraise 0a3272d613 feat: polish the features and enhance UI/UX 2026-01-23 00:49:12 +07:00
DarkraiseandGitHub fc191fd61c Initial commit 2026-01-13 10:09:15 +07:00