thePR0M3TH3AN and Claude Fable 5
e84a7e1c0e
TS port slice 9: relay transport + nostr sync/restore — Milestone 5 complete
...
- core RelayPool over the platform WebSocket (global in Node 22+/browsers,
no dependency): multi-relay publish with per-relay OK collection, fetch
aggregation until EOSE with dedupe and signature verification on ingest,
connect timeouts, dead-relay tolerance.
- Sync flows mirroring nostr/snapshot.py: publishSnapshot (chunk events ->
manifest with HMAC identity + nonce), fetchLatestSnapshot (newest-first,
per-chunk hash verify, falls through incomplete manifests), publishDelta,
fetchDeltasSince (created_at replay order).
- CLI nostr group: get-pubkey (matches app-1237 fixture npub), list/add/
remove-relay (config-backed, ws:// validation, last-relay guard), sync
(publish local vault), restore (snapshot + delta merge -> local vault).
- Tested against an in-process NIP-01 mock relay: core round trip incl.
corrupted-chunk rejection, and CLI end-to-end sync -> destroy local
vault -> restore with secrets intact. Transport tests are Node-only
(jsdom WebSocket can't connect; real browsers come with Milestone 6).
- 151 core + 32 CLI tests green. Milestone 5 CLI surface is complete.
Co-Authored-By: Claude Fable 5 <[email protected] >
2026-08-14 14:51:18 -04:00
thePR0M3TH3AN and Claude Fable 5
6d6ad5e2c5
TS port slice 2: entry schemas, password KDF, legacy vault formats
...
- Zod schemas for all 9 entry kinds (schema_version 4): validate and
roundtrip the Python EntryManager-generated fixture unchanged; refuse
future schema versions.
- Password KDF parity: PBKDF2-SHA256 (NFKD+strip, fingerprint salt, 50k/100k
iters) and Argon2id via @noble/hashes, both fixture-verified.
- Legacy vault decrypt chain matching EncryptionManager.decrypt_data:
V3 GCM -> V2 GCM -> V2-header-over-Fernet -> raw Fernet (decrypt-only),
plus the JSON kdf/ct file wrapper with bare-ciphertext fallback; the
parent-seed file decrypts end-to-end from password.
- Fixture generator grows password_kdf.json and legacy_payloads.json
(pinned IVs/nonces, fixture-only).
- 100 parity tests green in Node and jsdom.
Co-Authored-By: Claude Fable 5 <[email protected] >
2026-08-13 10:23:56 -04:00
thePR0M3TH3AN and Claude Fable 5
f720d16208
TS port first slice: fixture generator, js/ workspace, P0 derivation parity
...
- scripts/generate_ts_port_fixtures.py: deterministic fixtures from public
test mnemonics (passwords v1+v2, BIP-39/85, TOTP, Nostr keys, managed
seeds, fingerprints, index keys, entry schemas, V3 vault payload).
Byte-identical across runs; v1 values match the frozen entropy-integrity
vectors.
- js/: pnpm workspace with @seedpass/core and @seedpass/test-vectors.
Core implements BIP-85, password gen v1 (frozen) + v2, TOTP, Nostr keys,
fingerprints, vault index key, and V3 AES-GCM decrypt using only
noble/scure crypto + WebCrypto. Strict TS, no Node/DOM deps in core.
- 82 parity tests pass in Node and a jsdom browser-like environment.
- docs/typescript_port_compatibility_matrix.md tracks per-area status.
Co-Authored-By: Claude Fable 5 <[email protected] >
2026-08-13 10:16:08 -04:00