diff options
Diffstat (limited to 'tools/sync-browser-harness.js')
| -rw-r--r-- | tools/sync-browser-harness.js | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tools/sync-browser-harness.js b/tools/sync-browser-harness.js new file mode 100644 index 0000000..9ec3a45 --- /dev/null +++ b/tools/sync-browser-harness.js @@ -0,0 +1,30 @@ +import { NostrSync, publishOn } from '../src/nostr.js'; +import { SyncOutbox } from '../src/sync-outbox.js'; +import { adoptArkSnapshot } from '../src/features/ark.js'; +import { sha256 } from '@noble/hashes/sha256'; +import { bytesToHex } from '@noble/hashes/utils'; + +const identity = new NostrSync(); +identity.load('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'); +const relays = [location.origin.replace('http', 'ws') + '/relay']; +identity.setRelays(relays); +const outbox = new SyncOutbox({ storage: localStorage, send: (event, targets) => publishOn(targets, event) }); +const manager = { + state: { vtxos: [], movements: [], actions: [] }, + _save() { document.body.textContent = String(this.state.vtxos.filter(v => v.state === 'spendable').reduce((n, v) => n + v.amountSat, 0)); }, +}; +window.syncTest = { + save(arkState) { + const dtag = 'bitcoin-wallet:x:browser-test:ark'; + const state = { netName: 'mainnet', arkState }; + outbox.enqueue({ pubkey: identity.pk, dtag, relays, + digest: bytesToHex(sha256(new TextEncoder().encode(JSON.stringify(state)))), + sign: timestamp => identity.stateEvent(state, dtag, timestamp) }); + }, + async restore() { + for (const s of await identity.fetchAllStates()) adoptArkSnapshot(manager, s.state.arkState); + return manager.state; + }, + records: () => outbox.records().map(r => ({ acknowledged: r.acknowledged, id: r.event.id })), +}; +outbox.wake(); |
