mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
Phase 0+1 of docs/bitcoin-connect-plan.md (#61). Adds Alby's Bitcoin Connect as a one-tap NWC connect front-end that feeds bitvid's EXISTING wallet pipeline; manual URI entry stays as the backup. - Vendored: pinned @getalby/[email protected].3 bundled by scripts/build-bitcoin-connect.mjs → vendor/bitcoin-connect.bundle.min.js (esbuild, browser ESM). crypto-shim aliases the L402-only `import('crypto')` bitvid never calls. `npm run build:bitcoin-connect` rebuilds it. - Flag: FEATURE_BITCOIN_CONNECT wired like FEATURE_AUDIO_INGEST (instance-config → config → constants). - UI: a "Connect wallet" button in the Wallet Connect pane (hidden unless the flag is on); the manual URI field stays below as the backup. - Controller: ProfileWalletController.handleBitcoinConnect() lazy-imports the bundle (only on click — the ~700KB never touches the main bundle), inits NWC-only with least-privilege requestMethods and persistConnection:false, then on onConnected extracts provider.client.nostrWalletConnectUrl → the SAME validate→save path as the manual field → disconnect() so bitvid solely holds the spending secret. The URI is never logged. NOTE: config/instance-config.js FEATURE_BITCOIN_CONNECT is TRUE for local testing only. Reset to false (shipping default) before pushing/deploying. Local commit; not pushed, not deployed. Co-Authored-By: Claude Opus 4.8 <[email protected]>
27 lines
988 B
JavaScript
27 lines
988 B
JavaScript
// Minimal browser shim for node's `crypto`, aliased in when bundling Bitcoin
|
|
// Connect (scripts/build-bitcoin-connect.mjs). The only place its deps reach for
|
|
// `crypto` is @getalby/lightning-tools' L402 macaroon helpers via a lazy
|
|
// `await import('crypto')` — a path bitvid's NWC connect/pay flow never calls.
|
|
// timingSafeEqual is implemented properly; the L402-only createHmac is stubbed so
|
|
// it fails loudly rather than silently misbehaving if ever reached.
|
|
export function timingSafeEqual(a, b) {
|
|
const ua = a instanceof Uint8Array ? a : new Uint8Array(a);
|
|
const ub = b instanceof Uint8Array ? b : new Uint8Array(b);
|
|
if (ua.length !== ub.length) {
|
|
return false;
|
|
}
|
|
let diff = 0;
|
|
for (let i = 0; i < ua.length; i += 1) {
|
|
diff |= ua[i] ^ ub[i];
|
|
}
|
|
return diff === 0;
|
|
}
|
|
|
|
export function createHmac() {
|
|
throw new Error(
|
|
"createHmac (L402 macaroons) is not available in the bitvid browser bundle",
|
|
);
|
|
}
|
|
|
|
export default { timingSafeEqual, createHmac };
|