aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/Pin.svelte
Commit message (Expand)AuthorAgeFilesLines
* change component importsAdam Soltys2023-12-011-1/+1
* prettierAdam Soltys2023-12-011-47/+51
* password resetAdam Soltys2023-03-221-1/+1
* pin code refactorAdam Soltys2023-03-211-17/+45
* internal payment fixesAdam Soltys2023-02-081-1/+1
* prompt for pot creationAdam Soltys2023-02-071-1/+1
* new pinpad componentAdam Soltys2023-02-061-11/+15
* prettierAdam Soltys2023-01-311-1/+1
* sveltekit 1.0Adam Soltys2023-01-251-1/+2
* broadcast profile settings to nostrAdam Soltys2022-12-271-2/+2
* password prompt and pin fixesAdam Soltys2022-12-241-0/+3
* refactor settingsAdam Soltys2022-11-091-1/+2
* keep socket connection aliveAdam Soltys2022-10-311-1/+0
* regular pin input for nowAdam Soltys2022-10-261-16/+4
* focus next empty input for pinAdam Soltys2022-10-261-1/+1
* pin expiryAdam Soltys2022-10-251-10/+3
* send pinAdam Soltys2022-10-251-4/+2
* pin codeAdam Soltys2022-10-241-0/+44
resolveTxtValidated(label); } catch (e) { if (/^no TXT record/.test(e.message)) return null; throw e; } const uris = res.txts.filter((t) => /^bitcoin:/i.test(t)); if (!uris.length) return null; // BIP-353: multiple bitcoin: TXT records at one label are invalid if (uris.length > 1) throw new Error('multiple payment records, invalid'); return uris[0]; } // A pasted payment name: optional ₿, user@domain with a real-looking TLD. export function parsePaymentName(text) { const m = String(text || '').trim().match(/^₿?\s*([a-z0-9._-]{1,64})@([a-z0-9-]+(?:\.[a-z0-9-]+)+)$/i); return m ? { name: m[1].toLowerCase(), domain: m[2].toLowerCase() } : null; } // bitcoin:<onchain?>?ark=...&lno=...&sp=... → { onchain, params } export function parseBip21(uri) { const m = String(uri || '').match(/^bitcoin:([^?]*)(?:\?(.*))?$/i); if (!m) return null; const params = {}; for (const kv of (m[2] || '').split('&')) { if (!kv) continue; const eq = kv.indexOf('='); if (eq < 0) continue; params[decodeURIComponent(kv.slice(0, eq)).toLowerCase()] = decodeURIComponent(kv.slice(eq + 1)); } return { onchain: m[1] ? decodeURIComponent(m[1]) : '', params }; }