* feat(gateway): hashed key store with grant + hot reload
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(gateway): channel registry + aiohttp app (keyed auth, whoami, per-channel ws/proxy)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(gateway): manage_keys CLI (add/list/revoke)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(gateway): retire srebot_external, run relay-gateway under PM2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(gateway): point ecosystem + README at relay-gateway
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss): replay outbox producer for relay gateway
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss): forward processed games to relay outbox
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss-api): db helpers, app skeleton, info endpoint, fixtures
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss-api): player, games, history, search endpoints
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss-api): live, match, scoreboard, matches-search, maps
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss-api): filter-required leaderboards (players/vehicles/stats)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tss-api): tournament list/detail/standings/matches
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat: wire tss upstream through gateway + tssbot-api PM2 app
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
- Make .env the single source of truth for runtime config. Remove all
`env:` blocks from SREBOT/ecosystem.config.js and TSSBOT/ecosystem.config.js
so values can't silently shadow .env. Both ecosystem files load .env via
`require('dotenv').config()` and PM2 inherits the resolved environment.
- Rename SREBOT_STORAGE_VOL_PATH → STORAGE_VOL_PATH across all readers
(BOT/utils.py, BOT/receiver_bridge.py, BOT/render_recap.py, server.js,
web/server.js, dateindex.js, scripts/*, srebot.service, tests/, README,
and both .env files). STORAGE is shared between SREBOT and TSSBOT, so the
variable shouldn't carry one bot's prefix.
- Rename per-process PORT env vars to disambiguated names so .env can be
the source of truth without collisions:
PORT (api) → SREBOT_API_PORT (server.js)
PORT (web) → SREBOT_WEB_PORT (web/server.js)
WEBHOOK_PORT → SREBOT_WEBHOOK_PORT (github_webhook_updater.py)
SREBOT_EXTERNAL_HOST/PORT/UPSTREAM_URL were already uniquely named;
they just move from ecosystem env to .env.
- TSSBOT/.env: drop GITHUB_WEBHOOK_SECRET (only srebot-webhook consumes it)
and the stale SREBOT_DEPLOY_PATH. SREBOT/.env: also drop the obsolete
SREBOT_DEPLOY_PATH (ecosystem now hardcodes __dirname).
- ecosystem.config.js no longer references SREBOT_DEPLOY_PATH; deploy path
is always __dirname of the ecosystem file.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR #1223 only staged the deletions of the old paths because the new
top-level directories were still untracked when the commit was authored.
This commit adds the actual restructured tree: SREBOT/ (existing bot),
SHARED/ (vromfs, data_parser, ICONS/MAPS/FONTS, DAGOR_FILES,
update_game_files), and TSSBOT/ (skeleton).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>