• JavaScript 100%
Find a file
shinji a69c635a3a Replace non-ASCII typography with ASCII throughout
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.
2026-09-19 10:51:00 +02:00
gameconfig freeplay: matchmaking resolves with correct UX animations 2026-04-21 15:42:56 +02:00
localization freeplay: matchmaking resolves with correct UX animations 2026-04-21 15:42:56 +02:00
middleware Replace non-ASCII typography with ASCII throughout 2026-09-19 10:51:00 +02:00
node_modules Baseline - Anthem private server (broken state) 2026-04-03 10:43:41 +02:00
.DS_Store Baseline - Anthem private server (broken state) 2026-04-03 10:43:41 +02:00
.gitignore Replace non-ASCII typography with ASCII throughout 2026-09-19 10:51:00 +02:00
api_reimplementaton.js Replace non-ASCII typography with ASCII throughout 2026-09-19 10:51:00 +02:00
package-lock.json Baseline - Anthem private server (broken state) 2026-04-03 10:43:41 +02:00
package.json Repo cleanup: move legacy/unused paths into unused/ 2026-04-18 12:10:20 +02:00
README.md Replace non-ASCII typography with ASCII throughout 2026-09-19 10:51:00 +02:00

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)
  • pg npm 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.