-
Notifications
You must be signed in to change notification settings - Fork 0
Import
- left rail
$ importfield (280px rail, not route, not overlay) - top-right
[ sync / import ]->import addon (wb1!) - settings -> import (same decoder)
- hotkey
ianywhere. opens rail tab if collapsed.
- click import or
i. must be user gesture fornavigator.clipboard.readText(). - if clipboard
wb1!length>10 -> autofill preview. 0 paste needed. - else textarea focused "paste wb1! here ctrl+v" -> debounce 150ms -> preview.
- preview sentence (rail cannot hold 8 cols): "6 chars, 1 over 3d, enter to import" rows with dots, hover per-section.
- enter confirms -> POST
/api/addon/import{ bundle:"wb1!..." }-> D1character_addon_cache/warband_bank_cacheupsert per user_id+char_key. - receipt one line per char dot+gold printed in waves like
$output, held 6s, decayed 4 steps, removed. block returns to original height. - nothing reloads. only line stamped. reload would discard receipt (what overlay did).
client-side before d1 write:
- not wb1! -> if wb0! "that's camp dna, not inventory, use share tab" else "doesn't look like wb1!, run /warband copy again"
-
20 chars or >1mb decoded -> "too large, try single char"
- missing chars not deleted -> keeps old snapshot aging red. staleness lowers confidence, never deletes.
- 1 char 39kb json 8.6kb wire, 6 154kb/26kb, 20 cap 474kb/73kb. 4-7kb figure is slim no per-item.
src/lib/warband-import.ts pure, testable via vitest, no dom/d1:
-
WIRE_PREFIX='wb1!',DNA_PREFIX='wb0!',MAX_CHARACTERS=20,MAX_DECODED_BYTES=1_048_576 - base64url -> bytes ->
DecompressionStream('deflate-raw')notdeflate(zlib header addon does not emit, use raw orpako.inflateRaw) - throws on bad.
web tests src/__tests__/warband-import.test.ts. addon vectors docs/contract/vectors/v1-min.wb1.
any element whose raw text begins // inside astro expression deleted from output silently. compiler reads as line comment. no error.
fix: never write literal // in .cmt text. mark is .cmt::before css. literal doubles when renders and deletes when does not. always defect.
- https user gesture required. warband.pro https so chrome/edge ok.
- never polling readText, only inside click.
- dont auto-submit. user confirms after seeing staleness.
- firefox/safari stricter -> fallback textarea ctrl+v.
after confirm scorer re-reads consumables rollup (tonight.ts, warband-import.ts types). freshness influences block vs grey.
Maintained alongside Warband.pro App and Addon. Syncs on push. Companion for Warband.pro. MIT. Draft version 0 until CurseForge live.
Start
Integration
Internals