- JavaScript 100%
Standing rule from the owner, 2026-09-19: no em dashes, anywhere. It is not
cosmetic. Blaze is Python 2.7 and refuses non-ASCII source without a PEP 263
declaration; it died on startup this morning with
SyntaxError: Non-ASCII character '\xe2' ... but no encoding declared
the first time the stack ran from the forge clones, because the legacy tree's
copies had been mojibaked down to ASCII and the CODA copies had not.
Swept every repo. 31,105 characters across 399 files: 10,184 em dashes, plus
en dashes, curly quotes, ellipses, arrows, section signs, box-drawing, math
symbols, check marks and emoji. Also repaired already-mojibaked sequences
(the 'a-EUR-quote' triples) in archived docs - those were corrupted em dashes
from an earlier encoding accident.
Deliberately NOT touched:
- anthem-api/localization and gameconfig, anthem-postgres/seed_data: the
accents in fr-fr.json and the game strings are CONTENT, and this pass would
have corrupted them.
- .json generally, for the same reason.
- Leading UTF-8 BOMs on MSBuild project files, vendored MinHook sources and
one SQL schema. Those are format markers, not typography; all 31 are
leading, none mid-file.
Verified after the sweep: every Blaze .py compiles under Python 2.7 and
'import BlazeMain_Client' succeeds; both registry YAMLs parse; the gameserver
suite is 1649 passed / 1 failed, the same single pre-existing failure
(test_damage_decode) as before; the DLL builds clean Release|x64; the launcher
still resolves 'repo : F:\anthem\coda\_stack\' with preflight ok.
|
||
|---|---|---|
| gameconfig | ||
| localization | ||
| middleware | ||
| node_modules | ||
| .DS_Store | ||
| .gitignore | ||
| api_reimplementaton.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Anthem BIGS API
A Node.js HTTP server reimplementing EA's "BIGS" backend services for
Anthem (hosts like use2-ant04-live01-bigs-<service>-pub.biowareonline.net
in the original traffic). Handles character, inventory, loadout, skin,
playercard, leaderboard, expedition, activity, mtx, unlock, quest,
gameconfig, localization, telemetry, inbox, OAuth, and WebSocket event
streaming. All persistent state lives in Postgres (anthem schema).
Works alongside the Blaze TCP server on port 10041.
Requirements
- Node.js 18+
- PostgreSQL 14+ (tested against 18)
pgnpm package
Setup
# 1. Install node deps
npm install
# 2. Create database + schema
createdb anthem_v1
psql "postgres://postgres:<password>@localhost:5432/anthem_v1" \
-f postgres/anthem_backend_schema.sql
# 3. Seed the quest catalog + captured reward payloads
psql "postgres://postgres:<password>@localhost:5432/anthem_v1" \
-f postgres/seed_quest_definitions.sql
psql "postgres://postgres:<password>@localhost:5432/anthem_v1" \
-f postgres/seed_quest_reward_snapshots.sql
# 4. Load gameconfig + localization JSONs into the snapshot tables
DATABASE_URL="postgres://postgres:<password>@localhost:5432/anthem_v1" \
node tools/load_gameconfig_snapshots.js
Running
DATABASE_URL="postgres://postgres:<password>@localhost:5432/anthem_v1" \
npm start
Default bind: 0.0.0.0:47873. Override with ANTHEM_BIND_HOST /
ANTHEM_BIND_PORT.
Point the Anthem client at this server
The client resolves EA's BioWare hostnames through DNS. Redirect every
*.biowareonline.net and the EA QoS / EBS endpoints to this server's
IP via hosts, a local DNS resolver, or an equivalent mechanism. TLS
is expected on :443, so either front this server with a TLS proxy
using the self-signed cert from the Blaze repo's crt/ directory or
run the server behind a trusted local cert.
Repo layout
api_reimplementaton.js Main HTTP + WebSocket server. Every route lives here.
package.json Only external dep: pg (node-postgres).
gameconfig/ Seed data for anthem.gameconfig_snapshots.
config.json Feature flags (bools/floats/ints/strings).
loottables.json Drop tables by rarity/difficulty (~280 KB).
recipes.json Crafting recipes (~550 KB).
salvage.json Salvage yield tables (~630 KB).
infusions.json Infusion matrix (~450 KB).
tuning.json Balance numbers.
factionrewards.json Faction rep -> reward tables.
mutators.json Mutator rotation metadata.
initialweatherstates.json Opening weather state map.
weather.json, weatherevents.json Weather runtime state.
questreward.json Legacy 404 stub (per-quest rewards now
live in postgres/seed_quest_reward_snapshots.sql).
localization/ Seed data for anthem.localization_snapshots.
en-us.json, fr-fr.json, ... Live-strings bundles per language.
postgres/
anthem_backend_schema.sql All tables, indexes, triggers.
seed_quest_definitions.sql Launch-bay quest catalog.
seed_quest_reward_snapshots.sql Per-quest reward payloads.
seed_data/questreward_catalog.json Raw source catalog (reproducible).
tools/
load_gameconfig_snapshots.js Pushes gameconfig/* + localization/*
JSON files into Postgres. Idempotent.
Route families
Full per-endpoint reference including DB effects is documented inside
the handler docstrings in api_reimplementaton.js. Summary:
| Family | Purpose |
|---|---|
/connect/token, /token, /redirector/* |
OAuth / server-locator / CA-certs |
/api/character/* |
Character CRUD, persistence, play-time, appearance, favorites |
/api/playercard/* |
Playercard read / write / per-expedition view |
/api/loadout/* |
Loadouts (CRUD + default) and skins (Forge-committed) |
/api/inventory/* |
Items, salvage, craft, mark-seen, backpack resolution |
/api/expedition/*, /api/activity/* |
Expedition state, challenges, faction contribution |
/api/unlock/* |
Unlock catalog + mark-viewed |
/api/mtx/* |
Featured Store offers, claims, balances, buyOffers |
/api/leaderboards/* |
Leaderboard reads + filter/rankrange queries |
/api/gameconfig/* |
Game configuration snapshots (feature flags, balance, etc.) |
/api/gameconfig/questreward/<id> |
Per-quest reward payload |
/api/character/quests/available |
Launch-bay available-expeditions list |
/api/localization/<lang>/livestrings |
Localization strings |
/api/v2/products/*/users/*/messages |
Companion-App inbox |
/events (HTTP + WS) |
Telemetry ingest + EBS WebSocket broadcast |
/pinEvents, /em/*, /bugsentry/* |
EA pin/campaign-manager/crash telemetry |
/eadp.qoscoordinator.* |
QoS gRPC stub |
Telemetry -> DB
Everything the client tells the server about itself - match events, hardware
info (MAC, platform, locale, build version), pin events, crash reports,
campaign-manager triggerids - gets persisted to
anthem.event_ingest_log (persona_id, character_id, event_payload JSONB)
with a _source tag in the JSONB so queries can filter by origin.
-- hardware seen per player
SELECT DISTINCT persona_id,
event_payload->'EventPayload'->>'Platform',
event_payload->'EventPayload'->>'MacAddress',
event_payload->'EventPayload'->>'BuildVersion'
FROM anthem.event_ingest_log
WHERE event_payload->'EventPayload' ? 'MacAddress';
License / credits
Private-server reimplementation for preservation and development purposes. Not affiliated with Electronic Arts or BioWare.