diff options
| author | Adam Soltys <[email protected]> | 2026-07-04 09:33:52 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-07-04 09:33:52 -0700 |
| commit | b7c5abd93868b97c25f52610510544764a3e44eb (patch) | |
| tree | ab2ae94ab10bb88d32dec24c9987f81ef3c7faf0 /build.js | |
| parent | 11b2a56a320bbd66b98991fd08478d154ff6c717 (diff) | |
| download | coinosv3-b7c5abd93868b97c25f52610510544764a3e44eb.tar.gz coinosv3-b7c5abd93868b97c25f52610510544764a3e44eb.zip | |
Features phase 2: gift/swap/ark primitives leave the core wallet
wallet.js drops from 2,762 to 2,374 lines and now exposes two generic
seams instead of feature code:
- registerCoinLock()/lockedCoinIds(): features contribute coin ids that
spending and the balance treat as unavailable (gift reservations).
- loadFeatureState()/saveFeatureState(): namespaced per-wallet persisted
state.
src/features/gifts-wallet.js takes the whole gift engine — reservation
sets, gift records, coin selection, the SIGHASH_SINGLE/NONE PSBT
builder, the compact codec, claim building, nostr-locked gifts — as an
installGiftWallet(wallet) instance install plus standalone exports.
Swap storage/key helpers (loadSwaps/saveSwaps/swapNode/nextSwapIndex)
install from swap.js; ark state storage installs from the ark feature.
The silent-payment scan worker only embeds when the sp feature ships
(wallet.js already tolerated its absence).
Minimal profile: 412KB, down from 476KB (full: 578KB). All suites pass:
ark UI e2e, ArkManager crash-resume, gift lifecycle, minimal smoke.
SP's engine (scanning, BIP-352 signing) stays in wallet.js — extracting
it safely wants an SP e2e harness on this stack first.
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QFAcD4V284DvYZZHP7Rxxy
Diffstat (limited to 'build.js')
| -rw-r--r-- | build.js | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -177,7 +177,10 @@ export async function buildHtml({ minify = true, pwa = minify, features = proces let js = await result.outputs[0].text(); // Guard against a literal </script> inside the bundle closing our tag early. js = js.replaceAll('</script', '<\\/script'); - const workerB64 = Buffer.from(await buildSpWorker({ minify })).toString('base64'); + // The silent-payment scan worker only ships when the sp feature does. + const workerB64 = enabledFeatures(features).includes('sp') + ? Buffer.from(await buildSpWorker({ minify })).toString('base64') + : ''; const css = await Bun.file('./src/style.css').text(); return `<!doctype html> @@ -193,7 +196,7 @@ ${pwa ? PWA_HEAD : ''}<style>${css}</style> </head> <body> <div id="app"></div> -<script>globalThis.__SP_WORKER__=${JSON.stringify(workerB64)}</script> +${workerB64 ? `<script>globalThis.__SP_WORKER__=${JSON.stringify(workerB64)}</script>` : ''} <script>${js}</script> ${pwa ? SW_REGISTER + '\n' : ''}</body> </html>`; |
