Files
Toju/server

Server

Node/TypeScript signaling server for MetoYou / Toju. This package owns the public server-directory API, join-request flows, websocket runtime, and server-side persistence.

Install

  1. Run cd server.
  2. Run npm install.

Commands

  • npm run dev starts the server with ts-node-dev reload.
  • npm run build compiles TypeScript to dist/.
  • npm run start runs the compiled server.
  • From the repository root, npm run server:dev, npm run server:build, and npm run server:start call the same package commands.

Runtime Config

  • The server loads the repository-root .env file on startup.
  • SSL can override the effective HTTP protocol, and PORT can override the effective port.
  • DB_PATH can override the SQLite database file location.
  • data/variables.json is normalized on startup and stores klipyApiKey, rawgApiKey, releaseManifestUrl, serverPort, serverProtocol, serverHost, serverTag, and linkPreview. When serverTag is empty, GET /api/health falls back to the server's public URL.
  • openApiDocs.enabled in data/variables.json, or OPENAPI_DOCS_ENABLED=true, exposes the plugin support OpenAPI document at /api/openapi.json and a small docs page at /api/docs. It is disabled by default. Plugin support is metadata-only: the server stores install requirements and event definitions, but arbitrary plugin data persistence is disabled.
  • RAWG_API_KEY can override rawgApiKey for the /api/games/match now-playing metadata resolver. Successful matches include a preferred store link from RAWG store metadata, with Steam selected first when available. Negative game-match results are stored in the SQLite game_match_misses table so non-game process names do not repeatedly consume RAWG quota.
  • Mobile push dispatch uses optional credentials from the repository-root .env file (see .env.example): FCM_SERVICE_ACCOUNT_PATH or FCM_SERVICE_ACCOUNT_JSON for Android, and APNS_KEY_PATH / APNS_KEY_ID / APNS_TEAM_ID (+ optional APNS_BUNDLE_ID, APNS_USE_SANDBOX) for iOS. Device tokens are stored in the SQLite device_tokens table via POST /api/users/device-tokens.
  • Packaged server builds store metoyou.sqlite in the OS app-data directory by default so upgrades do not overwrite runtime data. On first start, the server copies forward legacy packaged databases that still live beside the executable.
  • When HTTPS is enabled, certificates are read from the repository .certs/ directory.

Structure

Path Description
src/index.ts Bootstrap and server startup
src/app/ Express app composition
src/routes/ REST API routes
src/websocket/ WebSocket runtime and signaling transport
src/cqrs/ Command/query handlers
src/config/ Runtime config loading and normalization
src/db/, src/entities/, src/migrations/ Persistence layer
data/ Runtime data files such as variables.json

Notes

  • dist/ and ../dist-server/ are generated output.
  • See AGENTS.md for package-specific editing guidance.