-
Notifications
You must be signed in to change notification settings - Fork 0
Contract
Law for addon Lua and web D1. Any field change bumps version and requires web importer update same day.
wb1! + base64url( raw-deflate( json ) )
No newline, single line. WoW EditBox is large but avoids whitespace.
-
wb0!Camp DNA share URL, existing -
wb1!Inventory and lockouts, this repo v1 -
wb2!Reserved
One envelope for 1 and 20 characters so decoder has no branch.
{
"v":1,
"addon":"1.0.0",
"exportedAt":1724001234,
"gameVersion":"12.1.0",
"interface":120100,
"bundle":{"count":3,"freshestSeenAt":1724001200,"oldestSeenAt":1723980000},
"characters":[ ... ]
}Character fields: guid, name, realm slug, faction, class, level, gold, bags[], bank[], reagentBank, Warband bank root, mail, auctions, currencies[], professions[], cooldowns[], instances[], bosses killed boolean in encounter order plus name, world bosses[], keystone{}, runs[], score, weekly Vault map, consumables rolled up phial/potion/food/rune, seenAt stamps.
All _at times are Unix seconds UTC from time(), not milliseconds. Null if never seen. Web converts.
- Bank never opened:
free=null,items=[]-> unknown versus empty. UI prints "Not opened" not "0 free". - Warband bank
seenByGuid-> web "by Vocnar" credit line. Payload root plus own D1 table avoids repeating 5 tabs across 6 characters (about 22 KB saved, deflate 32 KB window cannot fold copies). -
currencies.maxQuantity0 = no cap,weeklyMax0 = not weekly-capped. - Consumables derived cache for Tonight Plan speed. Absent = unknown not zero (prevents hard block on 0 Phials when we did not look).
- Items inventory only, no equips (API has it). Link optional.
- Not
LibDeflate:EncodeForPrint. That uses own 6-bit alphabet neither Base64 nor Base64url, swap+/for-_cannot make itatobreadable. Addon carries real RFC 4648 Section 5 encoder. - Raw deflate not zlib.
CompressDeflateemits bare stream no header,DecompressionStream('deflate')rejects. Must use'deflate-raw'orpako.inflateRaw.
- 20 characters (DoS protection)
- 1 MB decoded not 25 KB. Measured: 1 full 39 KB JSON 8.6 KB wire, 6 154 KB / 26 KB, 20 474 KB / 73 KB. Enforced chunk-by-chunk during inflate not after (bomb mitigation).
- Validated
v==1, array 1..20, each guid + name +seenAt.lastSeen.
Wire: LibDeflate level 9 -> base64url strip = -> prefix.
- Section absent -> never seen -> unknown -> grey, not delete
- Character missing from bundle -> not gone -> old snapshot aging red
- Consumables absent until ID table filled -> absent not zero
docs/contract/vectors/v1-min.jsonv1-min.wb1- Planned
v1-full.json,v1-6.jsonplus CIcheck-contract-vectors
Root plus warband_bank_cache one row per user. Each character seenAt.warbank for dots. seenByName credit line.
Single wb1! version strict. Any field change bumps prefix and breaks paste if sides disagree. Web checks prefix first.
Spec lives in addon repo, enforced in app warband-import.ts.
Maintained alongside Warband.pro App and Addon. Syncs on push. Companion for Warband.pro. MIT. Draft version 0 until CurseForge live.
Start
Integration
Internals