{"version":3,"file":"index.cjs","sources":["../../node_modules/@noble/hashes/esm/_assert.js","../../node_modules/@noble/hashes/esm/utils.js","../../node_modules/@noble/hashes/esm/_sha2.js","../../node_modules/@noble/hashes/esm/sha256.js","../../node_modules/@scure/base/lib/index.js","../../node_modules/light-bolt11-decoder/bolt11.js","../../src/bolt11/utils.ts","../../src/bolt11/Invoice.ts","../../src/lnurl/utils.ts","../../src/podcasting2/boostagrams.ts","../../src/lnurl/LightningAddress.ts","../../src/402/utils.ts","../../src/402/l402/utils.ts","../../src/402/l402/l402.ts","../../src/402/x402/utils.ts","../../src/402/x402/x402.ts","../../src/402/mpp/utils.ts","../../src/402/mpp/mpp.ts","../../src/402/fetch402.ts","../../src/402/l402/server/l402.ts","../../src/402/l402/server/utils.ts","../../src/fiat/fiat.ts"],"sourcesContent":["function number(n) {\n    if (!Number.isSafeInteger(n) || n < 0)\n        throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n    if (typeof b !== 'boolean')\n        throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n    if (!(b instanceof Uint8Array))\n        throw new Error('Expected Uint8Array');\n    if (lengths.length > 0 && !lengths.includes(b.length))\n        throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n    if (typeof hash !== 'function' || typeof hash.create !== 'function')\n        throw new Error('Hash should be wrapped by utils.wrapConstructor');\n    number(hash.outputLen);\n    number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n    if (instance.destroyed)\n        throw new Error('Hash instance has been destroyed');\n    if (checkFinished && instance.finished)\n        throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n    bytes(out);\n    const min = instance.outputLen;\n    if (out.length < min) {\n        throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n    }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n    throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n    if (!u8a(bytes))\n        throw new Error('Uint8Array expected');\n    // pre-caching improves the speed 6x\n    let hex = '';\n    for (let i = 0; i < bytes.length; i++) {\n        hex += hexes[bytes[i]];\n    }\n    return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n    if (typeof hex !== 'string')\n        throw new Error('hex string expected, got ' + typeof hex);\n    const len = hex.length;\n    if (len % 2)\n        throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n    const array = new Uint8Array(len / 2);\n    for (let i = 0; i < array.length; i++) {\n        const j = i * 2;\n        const hexByte = hex.slice(j, j + 2);\n        const byte = Number.parseInt(hexByte, 16);\n        if (Number.isNaN(byte) || byte < 0)\n            throw new Error('Invalid byte sequence');\n        array[i] = byte;\n    }\n    return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n    let ts = Date.now();\n    for (let i = 0; i < iters; i++) {\n        cb(i);\n        // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n        const diff = Date.now() - ts;\n        if (diff >= 0 && diff < tick)\n            continue;\n        await nextTick();\n        ts += diff;\n    }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n    if (typeof str !== 'string')\n        throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n    return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n    if (typeof data === 'string')\n        data = utf8ToBytes(data);\n    if (!u8a(data))\n        throw new Error(`expected Uint8Array, got ${typeof data}`);\n    return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n    const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n    let pad = 0; // walk through each item, ensure they have proper type\n    arrays.forEach((a) => {\n        if (!u8a(a))\n            throw new Error('Uint8Array expected');\n        r.set(a, pad);\n        pad += a.length;\n    });\n    return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n    // Safe version that clones internal state\n    clone() {\n        return this._cloneInto();\n    }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n    if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n        throw new Error('Options should be object or undefined');\n    const merged = Object.assign(defaults, opts);\n    return merged;\n}\nexport function wrapConstructor(hashCons) {\n    const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n    const tmp = hashCons();\n    hashC.outputLen = tmp.outputLen;\n    hashC.blockLen = tmp.blockLen;\n    hashC.create = () => hashCons();\n    return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n    const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n    const tmp = hashCons({});\n    hashC.outputLen = tmp.outputLen;\n    hashC.blockLen = tmp.blockLen;\n    hashC.create = (opts) => hashCons(opts);\n    return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n    const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n    const tmp = hashCons({});\n    hashC.outputLen = tmp.outputLen;\n    hashC.blockLen = tmp.blockLen;\n    hashC.create = (opts) => hashCons(opts);\n    return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n    if (crypto && typeof crypto.getRandomValues === 'function') {\n        return crypto.getRandomValues(new Uint8Array(bytesLength));\n    }\n    throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","import { exists, output } from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n    if (typeof view.setBigUint64 === 'function')\n        return view.setBigUint64(byteOffset, value, isLE);\n    const _32n = BigInt(32);\n    const _u32_max = BigInt(0xffffffff);\n    const wh = Number((value >> _32n) & _u32_max);\n    const wl = Number(value & _u32_max);\n    const h = isLE ? 4 : 0;\n    const l = isLE ? 0 : 4;\n    view.setUint32(byteOffset + h, wh, isLE);\n    view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n    constructor(blockLen, outputLen, padOffset, isLE) {\n        super();\n        this.blockLen = blockLen;\n        this.outputLen = outputLen;\n        this.padOffset = padOffset;\n        this.isLE = isLE;\n        this.finished = false;\n        this.length = 0;\n        this.pos = 0;\n        this.destroyed = false;\n        this.buffer = new Uint8Array(blockLen);\n        this.view = createView(this.buffer);\n    }\n    update(data) {\n        exists(this);\n        const { view, buffer, blockLen } = this;\n        data = toBytes(data);\n        const len = data.length;\n        for (let pos = 0; pos < len;) {\n            const take = Math.min(blockLen - this.pos, len - pos);\n            // Fast path: we have at least one block in input, cast it to view and process\n            if (take === blockLen) {\n                const dataView = createView(data);\n                for (; blockLen <= len - pos; pos += blockLen)\n                    this.process(dataView, pos);\n                continue;\n            }\n            buffer.set(data.subarray(pos, pos + take), this.pos);\n            this.pos += take;\n            pos += take;\n            if (this.pos === blockLen) {\n                this.process(view, 0);\n                this.pos = 0;\n            }\n        }\n        this.length += data.length;\n        this.roundClean();\n        return this;\n    }\n    digestInto(out) {\n        exists(this);\n        output(out, this);\n        this.finished = true;\n        // Padding\n        // We can avoid allocation of buffer for padding completely if it\n        // was previously not allocated here. But it won't change performance.\n        const { buffer, view, blockLen, isLE } = this;\n        let { pos } = this;\n        // append the bit '1' to the message\n        buffer[pos++] = 0b10000000;\n        this.buffer.subarray(pos).fill(0);\n        // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n        if (this.padOffset > blockLen - pos) {\n            this.process(view, 0);\n            pos = 0;\n        }\n        // Pad until full block byte with zeros\n        for (let i = pos; i < blockLen; i++)\n            buffer[i] = 0;\n        // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n        // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n        // So we just write lowest 64 bits of that value.\n        setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n        this.process(view, 0);\n        const oview = createView(out);\n        const len = this.outputLen;\n        // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n        if (len % 4)\n            throw new Error('_sha2: outputLen should be aligned to 32bit');\n        const outLen = len / 4;\n        const state = this.get();\n        if (outLen > state.length)\n            throw new Error('_sha2: outputLen bigger than state');\n        for (let i = 0; i < outLen; i++)\n            oview.setUint32(4 * i, state[i], isLE);\n    }\n    digest() {\n        const { buffer, outputLen } = this;\n        this.digestInto(buffer);\n        const res = buffer.slice(0, outputLen);\n        this.destroy();\n        return res;\n    }\n    _cloneInto(to) {\n        to || (to = new this.constructor());\n        to.set(...this.get());\n        const { blockLen, buffer, length, finished, destroyed, pos } = this;\n        to.length = length;\n        to.pos = pos;\n        to.finished = finished;\n        to.destroyed = destroyed;\n        if (length % blockLen)\n            to.buffer.set(buffer);\n        return to;\n    }\n}\n//# sourceMappingURL=_sha2.js.map","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n    0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n    0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n    0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n    0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n    0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n    0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n    0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */ new Uint32Array([\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2 {\n    constructor() {\n        super(64, 32, 8, false);\n        // We cannot use array here since array allows indexing by variable\n        // which means optimizer/compiler cannot use registers.\n        this.A = IV[0] | 0;\n        this.B = IV[1] | 0;\n        this.C = IV[2] | 0;\n        this.D = IV[3] | 0;\n        this.E = IV[4] | 0;\n        this.F = IV[5] | 0;\n        this.G = IV[6] | 0;\n        this.H = IV[7] | 0;\n    }\n    get() {\n        const { A, B, C, D, E, F, G, H } = this;\n        return [A, B, C, D, E, F, G, H];\n    }\n    // prettier-ignore\n    set(A, B, C, D, E, F, G, H) {\n        this.A = A | 0;\n        this.B = B | 0;\n        this.C = C | 0;\n        this.D = D | 0;\n        this.E = E | 0;\n        this.F = F | 0;\n        this.G = G | 0;\n        this.H = H | 0;\n    }\n    process(view, offset) {\n        // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n        for (let i = 0; i < 16; i++, offset += 4)\n            SHA256_W[i] = view.getUint32(offset, false);\n        for (let i = 16; i < 64; i++) {\n            const W15 = SHA256_W[i - 15];\n            const W2 = SHA256_W[i - 2];\n            const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n            const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n            SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n        }\n        // Compression function main loop, 64 rounds\n        let { A, B, C, D, E, F, G, H } = this;\n        for (let i = 0; i < 64; i++) {\n            const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n            const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n            const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n            const T2 = (sigma0 + Maj(A, B, C)) | 0;\n            H = G;\n            G = F;\n            F = E;\n            E = (D + T1) | 0;\n            D = C;\n            C = B;\n            B = A;\n            A = (T1 + T2) | 0;\n        }\n        // Add the compressed chunk to the current hash value\n        A = (A + this.A) | 0;\n        B = (B + this.B) | 0;\n        C = (C + this.C) | 0;\n        D = (D + this.D) | 0;\n        E = (E + this.E) | 0;\n        F = (F + this.F) | 0;\n        G = (G + this.G) | 0;\n        H = (H + this.H) | 0;\n        this.set(A, B, C, D, E, F, G, H);\n    }\n    roundClean() {\n        SHA256_W.fill(0);\n    }\n    destroy() {\n        this.set(0, 0, 0, 0, 0, 0, 0, 0);\n        this.buffer.fill(0);\n    }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n    constructor() {\n        super();\n        this.A = 0xc1059ed8 | 0;\n        this.B = 0x367cd507 | 0;\n        this.C = 0x3070dd17 | 0;\n        this.D = 0xf70e5939 | 0;\n        this.E = 0xffc00b31 | 0;\n        this.F = 0x68581511 | 0;\n        this.G = 0x64f98fa7 | 0;\n        this.H = 0xbefa4fa4 | 0;\n        this.outputLen = 28;\n    }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map","\"use strict\";\n/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bytes = exports.stringToBytes = exports.str = exports.bytesToString = exports.hex = exports.utf8 = exports.bech32m = exports.bech32 = exports.base58check = exports.base58xmr = exports.base58xrp = exports.base58flickr = exports.base58 = exports.base64url = exports.base64 = exports.base32crockford = exports.base32hex = exports.base32 = exports.base16 = exports.utils = exports.assertNumber = void 0;\nfunction assertNumber(n) {\n    if (!Number.isSafeInteger(n))\n        throw new Error(`Wrong integer: ${n}`);\n}\nexports.assertNumber = assertNumber;\nfunction chain(...args) {\n    const wrap = (a, b) => (c) => a(b(c));\n    const encode = Array.from(args)\n        .reverse()\n        .reduce((acc, i) => (acc ? wrap(acc, i.encode) : i.encode), undefined);\n    const decode = args.reduce((acc, i) => (acc ? wrap(acc, i.decode) : i.decode), undefined);\n    return { encode, decode };\n}\nfunction alphabet(alphabet) {\n    return {\n        encode: (digits) => {\n            if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n                throw new Error('alphabet.encode input should be an array of numbers');\n            return digits.map((i) => {\n                assertNumber(i);\n                if (i < 0 || i >= alphabet.length)\n                    throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);\n                return alphabet[i];\n            });\n        },\n        decode: (input) => {\n            if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n                throw new Error('alphabet.decode input should be array of strings');\n            return input.map((letter) => {\n                if (typeof letter !== 'string')\n                    throw new Error(`alphabet.decode: not string element=${letter}`);\n                const index = alphabet.indexOf(letter);\n                if (index === -1)\n                    throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`);\n                return index;\n            });\n        },\n    };\n}\nfunction join(separator = '') {\n    if (typeof separator !== 'string')\n        throw new Error('join separator should be string');\n    return {\n        encode: (from) => {\n            if (!Array.isArray(from) || (from.length && typeof from[0] !== 'string'))\n                throw new Error('join.encode input should be array of strings');\n            for (let i of from)\n                if (typeof i !== 'string')\n                    throw new Error(`join.encode: non-string input=${i}`);\n            return from.join(separator);\n        },\n        decode: (to) => {\n            if (typeof to !== 'string')\n                throw new Error('join.decode input should be string');\n            return to.split(separator);\n        },\n    };\n}\nfunction padding(bits, chr = '=') {\n    assertNumber(bits);\n    if (typeof chr !== 'string')\n        throw new Error('padding chr should be string');\n    return {\n        encode(data) {\n            if (!Array.isArray(data) || (data.length && typeof data[0] !== 'string'))\n                throw new Error('padding.encode input should be array of strings');\n            for (let i of data)\n                if (typeof i !== 'string')\n                    throw new Error(`padding.encode: non-string input=${i}`);\n            while ((data.length * bits) % 8)\n                data.push(chr);\n            return data;\n        },\n        decode(input) {\n            if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n                throw new Error('padding.encode input should be array of strings');\n            for (let i of input)\n                if (typeof i !== 'string')\n                    throw new Error(`padding.decode: non-string input=${i}`);\n            let end = input.length;\n            if ((end * bits) % 8)\n                throw new Error('Invalid padding: string should have whole number of bytes');\n            for (; end > 0 && input[end - 1] === chr; end--) {\n                if (!(((end - 1) * bits) % 8))\n                    throw new Error('Invalid padding: string has too much padding');\n            }\n            return input.slice(0, end);\n        },\n    };\n}\nfunction normalize(fn) {\n    if (typeof fn !== 'function')\n        throw new Error('normalize fn should be function');\n    return { encode: (from) => from, decode: (to) => fn(to) };\n}\nfunction convertRadix(data, from, to) {\n    if (from < 2)\n        throw new Error(`convertRadix: wrong from=${from}, base cannot be less than 2`);\n    if (to < 2)\n        throw new Error(`convertRadix: wrong to=${to}, base cannot be less than 2`);\n    if (!Array.isArray(data))\n        throw new Error('convertRadix: data should be array');\n    if (!data.length)\n        return [];\n    let pos = 0;\n    const res = [];\n    const digits = Array.from(data);\n    digits.forEach((d) => {\n        assertNumber(d);\n        if (d < 0 || d >= from)\n            throw new Error(`Wrong integer: ${d}`);\n    });\n    while (true) {\n        let carry = 0;\n        let done = true;\n        for (let i = pos; i < digits.length; i++) {\n            const digit = digits[i];\n            const digitBase = from * carry + digit;\n            if (!Number.isSafeInteger(digitBase) ||\n                (from * carry) / from !== carry ||\n                digitBase - digit !== from * carry) {\n                throw new Error('convertRadix: carry overflow');\n            }\n            carry = digitBase % to;\n            digits[i] = Math.floor(digitBase / to);\n            if (!Number.isSafeInteger(digits[i]) || digits[i] * to + carry !== digitBase)\n                throw new Error('convertRadix: carry overflow');\n            if (!done)\n                continue;\n            else if (!digits[i])\n                pos = i;\n            else\n                done = false;\n        }\n        res.push(carry);\n        if (done)\n            break;\n    }\n    for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n        res.push(0);\n    return res.reverse();\n}\nconst gcd = (a, b) => (!b ? a : gcd(b, a % b));\nconst radix2carry = (from, to) => from + (to - gcd(from, to));\nfunction convertRadix2(data, from, to, padding) {\n    if (!Array.isArray(data))\n        throw new Error('convertRadix2: data should be array');\n    if (from <= 0 || from > 32)\n        throw new Error(`convertRadix2: wrong from=${from}`);\n    if (to <= 0 || to > 32)\n        throw new Error(`convertRadix2: wrong to=${to}`);\n    if (radix2carry(from, to) > 32) {\n        throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n    }\n    let carry = 0;\n    let pos = 0;\n    const mask = 2 ** to - 1;\n    const res = [];\n    for (const n of data) {\n        assertNumber(n);\n        if (n >= 2 ** from)\n            throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n        carry = (carry << from) | n;\n        if (pos + from > 32)\n            throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n        pos += from;\n        for (; pos >= to; pos -= to)\n            res.push(((carry >> (pos - to)) & mask) >>> 0);\n        carry &= 2 ** pos - 1;\n    }\n    carry = (carry << (to - pos)) & mask;\n    if (!padding && pos >= from)\n        throw new Error('Excess padding');\n    if (!padding && carry)\n        throw new Error(`Non-zero padding: ${carry}`);\n    if (padding && pos > 0)\n        res.push(carry >>> 0);\n    return res;\n}\nfunction radix(num) {\n    assertNumber(num);\n    return {\n        encode: (bytes) => {\n            if (!(bytes instanceof Uint8Array))\n                throw new Error('radix.encode input should be Uint8Array');\n            return convertRadix(Array.from(bytes), 2 ** 8, num);\n        },\n        decode: (digits) => {\n            if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n                throw new Error('radix.decode input should be array of strings');\n            return Uint8Array.from(convertRadix(digits, num, 2 ** 8));\n        },\n    };\n}\nfunction radix2(bits, revPadding = false) {\n    assertNumber(bits);\n    if (bits <= 0 || bits > 32)\n        throw new Error('radix2: bits should be in (0..32]');\n    if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n        throw new Error('radix2: carry overflow');\n    return {\n        encode: (bytes) => {\n            if (!(bytes instanceof Uint8Array))\n                throw new Error('radix2.encode input should be Uint8Array');\n            return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n        },\n        decode: (digits) => {\n            if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n                throw new Error('radix2.decode input should be array of strings');\n            return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n        },\n    };\n}\nfunction unsafeWrapper(fn) {\n    if (typeof fn !== 'function')\n        throw new Error('unsafeWrapper fn should be function');\n    return function (...args) {\n        try {\n            return fn.apply(null, args);\n        }\n        catch (e) { }\n    };\n}\nfunction checksum(len, fn) {\n    assertNumber(len);\n    if (typeof fn !== 'function')\n        throw new Error('checksum fn should be function');\n    return {\n        encode(data) {\n            if (!(data instanceof Uint8Array))\n                throw new Error('checksum.encode: input should be Uint8Array');\n            const checksum = fn(data).slice(0, len);\n            const res = new Uint8Array(data.length + len);\n            res.set(data);\n            res.set(checksum, data.length);\n            return res;\n        },\n        decode(data) {\n            if (!(data instanceof Uint8Array))\n                throw new Error('checksum.decode: input should be Uint8Array');\n            const payload = data.slice(0, -len);\n            const newChecksum = fn(payload).slice(0, len);\n            const oldChecksum = data.slice(-len);\n            for (let i = 0; i < len; i++)\n                if (newChecksum[i] !== oldChecksum[i])\n                    throw new Error('Invalid checksum');\n            return payload;\n        },\n    };\n}\nexports.utils = { alphabet, chain, checksum, radix, radix2, join, padding };\nexports.base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\nexports.base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\nexports.base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\nexports.base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\nexports.base64 = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\nexports.base64url = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\nconst genBase58 = (abc) => chain(radix(58), alphabet(abc), join(''));\nexports.base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\nexports.base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\nexports.base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\nexports.base58xmr = {\n    encode(data) {\n        let res = '';\n        for (let i = 0; i < data.length; i += 8) {\n            const block = data.subarray(i, i + 8);\n            res += exports.base58.encode(block).padStart(XMR_BLOCK_LEN[block.length], '1');\n        }\n        return res;\n    },\n    decode(str) {\n        let res = [];\n        for (let i = 0; i < str.length; i += 11) {\n            const slice = str.slice(i, i + 11);\n            const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n            const block = exports.base58.decode(slice);\n            for (let j = 0; j < block.length - blockLen; j++) {\n                if (block[j] !== 0)\n                    throw new Error('base58xmr: wrong padding');\n            }\n            res = res.concat(Array.from(block.slice(block.length - blockLen)));\n        }\n        return Uint8Array.from(res);\n    },\n};\nconst base58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), exports.base58);\nexports.base58check = base58check;\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\n    const b = pre >> 25;\n    let chk = (pre & 0x1ffffff) << 5;\n    for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n        if (((b >> i) & 1) === 1)\n            chk ^= POLYMOD_GENERATORS[i];\n    }\n    return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\n    const len = prefix.length;\n    let chk = 1;\n    for (let i = 0; i < len; i++) {\n        const c = prefix.charCodeAt(i);\n        if (c < 33 || c > 126)\n            throw new Error(`Invalid prefix (${prefix})`);\n        chk = bech32Polymod(chk) ^ (c >> 5);\n    }\n    chk = bech32Polymod(chk);\n    for (let i = 0; i < len; i++)\n        chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n    for (let v of words)\n        chk = bech32Polymod(chk) ^ v;\n    for (let i = 0; i < 6; i++)\n        chk = bech32Polymod(chk);\n    chk ^= encodingConst;\n    return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false));\n}\nfunction genBech32(encoding) {\n    const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n    const _words = radix2(5);\n    const fromWords = _words.decode;\n    const toWords = _words.encode;\n    const fromWordsUnsafe = unsafeWrapper(fromWords);\n    function encode(prefix, words, limit = 90) {\n        if (typeof prefix !== 'string')\n            throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`);\n        if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))\n            throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`);\n        const actualLength = prefix.length + 7 + words.length;\n        if (limit !== false && actualLength > limit)\n            throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n        prefix = prefix.toLowerCase();\n        return `${prefix}1${BECH_ALPHABET.encode(words)}${bechChecksum(prefix, words, ENCODING_CONST)}`;\n    }\n    function decode(str, limit = 90) {\n        if (typeof str !== 'string')\n            throw new Error(`bech32.decode input should be string, not ${typeof str}`);\n        if (str.length < 8 || (limit !== false && str.length > limit))\n            throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`);\n        const lowered = str.toLowerCase();\n        if (str !== lowered && str !== str.toUpperCase())\n            throw new Error(`String must be lowercase or uppercase`);\n        str = lowered;\n        const sepIndex = str.lastIndexOf('1');\n        if (sepIndex === 0 || sepIndex === -1)\n            throw new Error(`Letter \"1\" must be present between prefix and data only`);\n        const prefix = str.slice(0, sepIndex);\n        const _words = str.slice(sepIndex + 1);\n        if (_words.length < 6)\n            throw new Error('Data must be at least 6 characters long');\n        const words = BECH_ALPHABET.decode(_words).slice(0, -6);\n        const sum = bechChecksum(prefix, words, ENCODING_CONST);\n        if (!_words.endsWith(sum))\n            throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n        return { prefix, words };\n    }\n    const decodeUnsafe = unsafeWrapper(decode);\n    function decodeToBytes(str) {\n        const { prefix, words } = decode(str, false);\n        return { prefix, words, bytes: fromWords(words) };\n    }\n    return { encode, decode, decodeToBytes, decodeUnsafe, fromWords, fromWordsUnsafe, toWords };\n}\nexports.bech32 = genBech32('bech32');\nexports.bech32m = genBech32('bech32m');\nexports.utf8 = {\n    encode: (data) => new TextDecoder().decode(data),\n    decode: (str) => new TextEncoder().encode(str),\n};\nexports.hex = chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n    if (typeof s !== 'string' || s.length % 2)\n        throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n    return s.toLowerCase();\n}));\nconst CODERS = {\n    utf8: exports.utf8, hex: exports.hex, base16: exports.base16, base32: exports.base32, base64: exports.base64, base64url: exports.base64url, base58: exports.base58, base58xmr: exports.base58xmr\n};\nconst coderTypeError = `Invalid encoding type. Available types: ${Object.keys(CODERS).join(', ')}`;\nconst bytesToString = (type, bytes) => {\n    if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n        throw new TypeError(coderTypeError);\n    if (!(bytes instanceof Uint8Array))\n        throw new TypeError('bytesToString() expects Uint8Array');\n    return CODERS[type].encode(bytes);\n};\nexports.bytesToString = bytesToString;\nexports.str = exports.bytesToString;\nconst stringToBytes = (type, str) => {\n    if (!CODERS.hasOwnProperty(type))\n        throw new TypeError(coderTypeError);\n    if (typeof str !== 'string')\n        throw new TypeError('stringToBytes() expects string');\n    return CODERS[type].decode(str);\n};\nexports.stringToBytes = stringToBytes;\nexports.bytes = exports.stringToBytes;\n","const {bech32, hex, utf8} = require('@scure/base')\n\n// defaults for encode; default timestamp is current time at call\nconst DEFAULTNETWORK = {\n  // default network is bitcoin\n  bech32: 'bc',\n  pubKeyHash: 0x00,\n  scriptHash: 0x05,\n  validWitnessVersions: [0]\n}\nconst TESTNETWORK = {\n  bech32: 'tb',\n  pubKeyHash: 0x6f,\n  scriptHash: 0xc4,\n  validWitnessVersions: [0]\n}\nconst SIGNETNETWORK = {\n  bech32: 'tbs',\n  pubKeyHash: 0x6f,\n  scriptHash: 0xc4,\n  validWitnessVersions: [0]\n}\nconst REGTESTNETWORK = {\n  bech32: 'bcrt',\n  pubKeyHash: 0x6f,\n  scriptHash: 0xc4,\n  validWitnessVersions: [0]\n}\nconst SIMNETWORK = {\n  bech32: 'sb',\n  pubKeyHash: 0x3f,\n  scriptHash: 0x7b,\n  validWitnessVersions: [0]\n}\n\nconst FEATUREBIT_ORDER = [\n  'option_data_loss_protect',\n  'initial_routing_sync',\n  'option_upfront_shutdown_script',\n  'gossip_queries',\n  'var_onion_optin',\n  'gossip_queries_ex',\n  'option_static_remotekey',\n  'payment_secret',\n  'basic_mpp',\n  'option_support_large_channel'\n]\n\nconst DIVISORS = {\n  m: BigInt(1e3),\n  u: BigInt(1e6),\n  n: BigInt(1e9),\n  p: BigInt(1e12)\n}\n\nconst MAX_MILLISATS = BigInt('2100000000000000000')\n\nconst MILLISATS_PER_BTC = BigInt(1e11)\n\nconst TAGCODES = {\n  payment_hash: 1,\n  payment_secret: 16,\n  description: 13,\n  payee: 19,\n  description_hash: 23, // commit to longer descriptions (used by lnurl-pay)\n  expiry: 6, // default: 3600 (1 hour)\n  min_final_cltv_expiry: 24, // default: 9\n  fallback_address: 9,\n  route_hint: 3, // for extra routing info (private etc.)\n  feature_bits: 5,\n  metadata: 27\n}\n\n// reverse the keys and values of TAGCODES and insert into TAGNAMES\nconst TAGNAMES = {}\nfor (let i = 0, keys = Object.keys(TAGCODES); i < keys.length; i++) {\n  const currentName = keys[i]\n  const currentCode = TAGCODES[keys[i]].toString()\n  TAGNAMES[currentCode] = currentName\n}\n\nconst TAGPARSERS = {\n  1: words => hex.encode(bech32.fromWordsUnsafe(words)), // 256 bits\n  16: words => hex.encode(bech32.fromWordsUnsafe(words)), // 256 bits\n  13: words => utf8.encode(bech32.fromWordsUnsafe(words)), // string variable length\n  19: words => hex.encode(bech32.fromWordsUnsafe(words)), // 264 bits\n  23: words => hex.encode(bech32.fromWordsUnsafe(words)), // 256 bits\n  27: words => hex.encode(bech32.fromWordsUnsafe(words)), // variable\n  6: wordsToIntBE, // default: 3600 (1 hour)\n  24: wordsToIntBE, // default: 9\n  3: routingInfoParser, // for extra routing info (private etc.)\n  5: featureBitsParser // keep feature bits as array of 5 bit words\n}\n\nfunction getUnknownParser(tagCode) {\n  return words => ({\n    tagCode: parseInt(tagCode),\n    words: bech32.encode('unknown', words, Number.MAX_SAFE_INTEGER)\n  })\n}\n\nfunction wordsToIntBE(words) {\n  return words.reverse().reduce((total, item, index) => {\n    return total + item * Math.pow(32, index)\n  }, 0)\n}\n\n// first convert from words to buffer, trimming padding where necessary\n// parse in 51 byte chunks. See encoder for details.\nfunction routingInfoParser(words) {\n  const routes = []\n  let pubkey,\n    shortChannelId,\n    feeBaseMSats,\n    feeProportionalMillionths,\n    cltvExpiryDelta\n  let routesBuffer = bech32.fromWordsUnsafe(words)\n  while (routesBuffer.length > 0) {\n    pubkey = hex.encode(routesBuffer.slice(0, 33)) // 33 bytes\n    shortChannelId = hex.encode(routesBuffer.slice(33, 41)) // 8 bytes\n    feeBaseMSats = parseInt(hex.encode(routesBuffer.slice(41, 45)), 16) // 4 bytes\n    feeProportionalMillionths = parseInt(\n      hex.encode(routesBuffer.slice(45, 49)),\n      16\n    ) // 4 bytes\n    cltvExpiryDelta = parseInt(hex.encode(routesBuffer.slice(49, 51)), 16) // 2 bytes\n\n    routesBuffer = routesBuffer.slice(51)\n\n    routes.push({\n      pubkey,\n      short_channel_id: shortChannelId,\n      fee_base_msat: feeBaseMSats,\n      fee_proportional_millionths: feeProportionalMillionths,\n      cltv_expiry_delta: cltvExpiryDelta\n    })\n  }\n  return routes\n}\n\nfunction featureBitsParser(words) {\n  const bools = words\n    .slice()\n    .reverse()\n    .map(word => [\n      !!(word & 0b1),\n      !!(word & 0b10),\n      !!(word & 0b100),\n      !!(word & 0b1000),\n      !!(word & 0b10000)\n    ])\n    .reduce((finalArr, itemArr) => finalArr.concat(itemArr), [])\n  while (bools.length < FEATUREBIT_ORDER.length * 2) {\n    bools.push(false)\n  }\n\n  const featureBits = {}\n\n  FEATUREBIT_ORDER.forEach((featureName, index) => {\n    let status\n    if (bools[index * 2]) {\n      status = 'required'\n    } else if (bools[index * 2 + 1]) {\n      status = 'supported'\n    } else {\n      status = 'unsupported'\n    }\n    featureBits[featureName] = status\n  })\n\n  const extraBits = bools.slice(FEATUREBIT_ORDER.length * 2)\n  featureBits.extra_bits = {\n    start_bit: FEATUREBIT_ORDER.length * 2,\n    bits: extraBits,\n    has_required: extraBits.reduce(\n      (result, bit, index) =>\n        index % 2 !== 0 ? result || false : result || bit,\n      false\n    )\n  }\n\n  return featureBits\n}\n\nfunction hrpToMillisat(hrpString, outputString) {\n  let divisor, value\n  if (hrpString.slice(-1).match(/^[munp]$/)) {\n    divisor = hrpString.slice(-1)\n    value = hrpString.slice(0, -1)\n  } else if (hrpString.slice(-1).match(/^[^munp0-9]$/)) {\n    throw new Error('Not a valid multiplier for the amount')\n  } else {\n    value = hrpString\n  }\n\n  if (!value.match(/^\\d+$/))\n    throw new Error('Not a valid human readable amount')\n\n  const valueBN = BigInt(value)\n\n  const millisatoshisBN = divisor\n    ? (valueBN * MILLISATS_PER_BTC) / DIVISORS[divisor]\n    : valueBN * MILLISATS_PER_BTC\n\n  if (\n    (divisor === 'p' && !(valueBN % BigInt(10) === BigInt(0))) ||\n    millisatoshisBN > MAX_MILLISATS\n  ) {\n    throw new Error('Amount is outside of valid range')\n  }\n\n  return outputString ? millisatoshisBN.toString() : millisatoshisBN\n}\n\n// decode will only have extra comments that aren't covered in encode comments.\n// also if anything is hard to read I'll comment.\nfunction decode(paymentRequest, network) {\n  if (typeof paymentRequest !== 'string')\n    throw new Error('Lightning Payment Request must be string')\n  if (paymentRequest.slice(0, 2).toLowerCase() !== 'ln')\n    throw new Error('Not a proper lightning payment request')\n\n  const sections = []\n  const decoded = bech32.decode(paymentRequest, Number.MAX_SAFE_INTEGER)\n  paymentRequest = paymentRequest.toLowerCase()\n  const prefix = decoded.prefix\n  let words = decoded.words\n  let letters = paymentRequest.slice(prefix.length + 1)\n  let sigWords = words.slice(-104)\n  words = words.slice(0, -104)\n\n  // Without reverse lookups, can't say that the multipier at the end must\n  // have a number before it, so instead we parse, and if the second group\n  // doesn't have anything, there's a good chance the last letter of the\n  // coin type got captured by the third group, so just re-regex without\n  // the number.\n  let prefixMatches = prefix.match(/^ln(\\S+?)(\\d*)([a-zA-Z]?)$/)\n  if (prefixMatches && !prefixMatches[2])\n    prefixMatches = prefix.match(/^ln(\\S+)$/)\n  if (!prefixMatches) {\n    throw new Error('Not a proper lightning payment request')\n  }\n\n  // \"ln\" section\n  sections.push({\n    name: 'lightning_network',\n    letters: 'ln'\n  })\n\n  // \"bc\" section\n  const bech32Prefix = prefixMatches[1]\n  let coinNetwork\n  if (!network) {\n    switch (bech32Prefix) {\n      case DEFAULTNETWORK.bech32:\n        coinNetwork = DEFAULTNETWORK\n        break\n      case TESTNETWORK.bech32:\n        coinNetwork = TESTNETWORK\n        break\n      case SIGNETNETWORK.bech32:\n        coinNetwork = SIGNETNETWORK\n        break\n      case REGTESTNETWORK.bech32:\n        coinNetwork = REGTESTNETWORK\n        break\n      case SIMNETWORK.bech32:\n        coinNetwork = SIMNETWORK\n        break\n    }\n  } else {\n    if (\n      network.bech32 === undefined ||\n      network.pubKeyHash === undefined ||\n      network.scriptHash === undefined ||\n      !Array.isArray(network.validWitnessVersions)\n    )\n      throw new Error('Invalid network')\n    coinNetwork = network\n  }\n  if (!coinNetwork || coinNetwork.bech32 !== bech32Prefix) {\n    throw new Error('Unknown coin bech32 prefix')\n  }\n  sections.push({\n    name: 'coin_network',\n    letters: bech32Prefix,\n    value: coinNetwork\n  })\n\n  // amount section\n  const value = prefixMatches[2]\n  let millisatoshis\n  if (value) {\n    const divisor = prefixMatches[3]\n    millisatoshis = hrpToMillisat(value + divisor, true)\n    sections.push({\n      name: 'amount',\n      letters: prefixMatches[2] + prefixMatches[3],\n      value: millisatoshis\n    })\n  } else {\n    millisatoshis = null\n  }\n\n  // \"1\" separator\n  sections.push({\n    name: 'separator',\n    letters: '1'\n  })\n\n  // timestamp\n  const timestamp = wordsToIntBE(words.slice(0, 7))\n  words = words.slice(7) // trim off the left 7 words\n  sections.push({\n    name: 'timestamp',\n    letters: letters.slice(0, 7),\n    value: timestamp\n  })\n  letters = letters.slice(7)\n\n  let tagName, parser, tagLength, tagWords\n  // we have no tag count to go on, so just keep hacking off words\n  // until we have none.\n  while (words.length > 0) {\n    const tagCode = words[0].toString()\n    tagName = TAGNAMES[tagCode] || 'unknown_tag'\n    parser = TAGPARSERS[tagCode] || getUnknownParser(tagCode)\n    words = words.slice(1)\n\n    tagLength = wordsToIntBE(words.slice(0, 2))\n    words = words.slice(2)\n\n    tagWords = words.slice(0, tagLength)\n    words = words.slice(tagLength)\n\n    sections.push({\n      name: tagName,\n      tag: letters[0],\n      letters: letters.slice(0, 1 + 2 + tagLength),\n      value: parser(tagWords) // see: parsers for more comments\n    })\n    letters = letters.slice(1 + 2 + tagLength)\n  }\n\n  // signature\n  sections.push({\n    name: 'signature',\n    letters: letters.slice(0, 104),\n    value: hex.encode(bech32.fromWordsUnsafe(sigWords))\n  })\n  letters = letters.slice(104)\n\n  // checksum\n  sections.push({\n    name: 'checksum',\n    letters: letters\n  })\n\n  let result = {\n    paymentRequest,\n    sections,\n\n    get expiry() {\n      let exp = sections.find(s => s.name === 'expiry')\n      if (exp) return getValue('timestamp') + exp.value\n    },\n\n    get route_hints() {\n      return sections.filter(s => s.name === 'route_hint').map(s => s.value)\n    }\n  }\n\n  for (let name in TAGCODES) {\n    if (name === 'route_hint') {\n      // route hints can be multiple, so this won't work for them\n      continue\n    }\n\n    Object.defineProperty(result, name, {\n      get() {\n        return getValue(name)\n      }\n    })\n  }\n\n  return result\n\n  function getValue(name) {\n    let section = sections.find(s => s.name === name)\n    return section ? section.value : undefined\n  }\n}\n\nmodule.exports = {\n  decode,\n  hrpToMillisat\n}\n","import { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\nimport { decode } from \"light-bolt11-decoder\";\n\n// from https://stackoverflow.com/a/50868276\nexport const fromHexString = (hexString: string) =>\n  Uint8Array.from(\n    hexString.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16)),\n  );\n\ntype DecodedInvoice = {\n  paymentHash: string;\n  satoshi: number;\n  millisatoshi: number;\n  amountRaw: string;\n  timestamp: number;\n  expiry: number | undefined;\n  description: string | undefined;\n};\n\nexport const decodeInvoice = (\n  paymentRequest: string,\n): DecodedInvoice | null => {\n  if (!paymentRequest) return null;\n\n  try {\n    const decoded = decode(paymentRequest);\n    if (!decoded || !decoded.sections) return null;\n\n    const hashTag = decoded.sections.find(\n      (value) => value.name === \"payment_hash\",\n    );\n\n    if (hashTag?.name !== \"payment_hash\" || !hashTag.value) return null;\n\n    const paymentHash = hashTag.value;\n\n    let satoshi = 0;\n    let millisatoshi = 0;\n    let amountRaw = \"0\";\n\n    const amountTag = decoded.sections.find((value) => value.name === \"amount\");\n\n    if (amountTag?.name === \"amount\" && amountTag.value) {\n      amountRaw = amountTag.value;\n      millisatoshi = parseInt(amountTag.value);\n      satoshi = parseInt(amountTag.value) / 1000; // millisats\n    }\n\n    const timestampTag = decoded.sections.find(\n      (value) => value.name === \"timestamp\",\n    );\n\n    if (timestampTag?.name !== \"timestamp\" || !timestampTag.value) return null;\n\n    const timestamp = timestampTag.value;\n\n    let expiry: number | undefined;\n    const expiryTag = decoded.sections.find((value) => value.name === \"expiry\");\n\n    if (expiryTag?.name === \"expiry\") {\n      expiry = expiryTag.value;\n    }\n\n    const descriptionTag = decoded.sections.find(\n      (value) => value.name === \"description\",\n    );\n\n    const description =\n      descriptionTag?.name === \"description\"\n        ? descriptionTag?.value\n        : undefined;\n\n    return {\n      paymentHash,\n      satoshi,\n      millisatoshi,\n      amountRaw,\n      timestamp,\n      expiry,\n      description,\n    };\n  } catch {\n    return null;\n  }\n};\n\nexport function validatePreimage(\n  preimage: string,\n  paymentHash: string,\n): boolean {\n  try {\n    if (!/^[0-9a-fA-F]{64}$/.test(preimage)) return false;\n    if (!/^[0-9a-fA-F]{64}$/.test(paymentHash)) return false;\n    const preimageHash = bytesToHex(sha256(fromHexString(preimage)));\n    return paymentHash === preimageHash;\n  } catch {\n    return false;\n  }\n}\n","import { InvoiceArgs, SuccessAction } from \"./types\";\nimport { decodeInvoice, validatePreimage } from \"./utils\";\n\nexport class Invoice {\n  paymentRequest: string;\n  paymentHash: string;\n  preimage: string | null;\n  verify: string | null;\n  satoshi: number;\n  millisatoshi: number;\n  amountRaw: string;\n  expiry: number | undefined; // expiry in seconds (not a timestamp)\n  timestamp: number; // created date in seconds\n  createdDate: Date;\n  expiryDate: Date | undefined;\n  description: string | null;\n  successAction: SuccessAction | null;\n\n  constructor(args: InvoiceArgs) {\n    this.paymentRequest = args.pr;\n    if (!this.paymentRequest) {\n      throw new Error(\"Invalid payment request\");\n    }\n    const decodedInvoice = decodeInvoice(this.paymentRequest);\n    if (!decodedInvoice) {\n      throw new Error(\"Failed to decode payment request\");\n    }\n    this.paymentHash = decodedInvoice.paymentHash;\n    this.satoshi = decodedInvoice.satoshi;\n    this.millisatoshi = decodedInvoice.millisatoshi;\n    this.amountRaw = decodedInvoice.amountRaw;\n    this.timestamp = decodedInvoice.timestamp;\n    this.expiry = decodedInvoice.expiry;\n    this.createdDate = new Date(this.timestamp * 1000);\n    this.expiryDate = this.expiry\n      ? new Date((this.timestamp + this.expiry) * 1000)\n      : undefined;\n    this.description = decodedInvoice.description ?? null;\n    this.verify = args.verify ?? null;\n    this.preimage = args.preimage ?? null;\n    this.successAction = args.successAction ?? null;\n  }\n\n  async isPaid(): Promise<boolean> {\n    if (this.preimage) return this.validatePreimage(this.preimage);\n    else if (this.verify) {\n      return await this.verifyPayment();\n    } else {\n      throw new Error(\"Could not verify payment\");\n    }\n  }\n\n  validatePreimage(preimage: string): boolean {\n    if (!preimage || !this.paymentHash) return false;\n\n    return validatePreimage(preimage, this.paymentHash);\n  }\n\n  async verifyPayment(): Promise<boolean> {\n    try {\n      if (!this.verify) {\n        throw new Error(\"LNURL verify not available\");\n      }\n      const response = await fetch(this.verify);\n      if (!response.ok) {\n        throw new Error(\n          `Verification request failed: ${response.status} ${response.statusText}`,\n        );\n      }\n      const json = await response.json();\n      if (json.preimage) {\n        this.preimage = json.preimage;\n      }\n\n      return json.settled;\n    } catch (error) {\n      console.error(\"Failed to check LNURL-verify\", error);\n      return false;\n    }\n  }\n\n  hasExpired() {\n    const { expiryDate } = this;\n    if (expiryDate) {\n      return expiryDate.getTime() < Date.now();\n    }\n    return false;\n  }\n}\n","import {\n  KeySendRawData,\n  KeysendResponse,\n  Event,\n  NostrResponse,\n  ZapArgs,\n  ZapOptions,\n  LUD18ServicePayerData,\n  LnUrlPayResponse,\n  LnUrlRawData,\n} from \"./types\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\n\nconst TAG_KEYSEND = \"keysend\";\n\nexport const parseKeysendResponse = (data: KeySendRawData): KeysendResponse => {\n  if (data.tag !== TAG_KEYSEND) throw new Error(\"Invalid keysend params\");\n  if (data.status !== \"OK\") throw new Error(\"Keysend status not OK\");\n  if (!data.pubkey) throw new Error(\"Pubkey does not exist\");\n\n  const destination = data.pubkey;\n  let customKey, customValue;\n\n  if (data.customData && data.customData[0]) {\n    customKey = data.customData[0].customKey;\n    customValue = data.customData[0].customValue;\n  }\n\n  return {\n    destination,\n    customKey,\n    customValue,\n  };\n};\n\nexport async function generateZapEvent(\n  { satoshi, comment, p, e, relays }: ZapArgs,\n  options: ZapOptions = {},\n): Promise<Event> {\n  const nostr = options.nostr || globalThis.nostr;\n  if (!nostr) {\n    throw new Error(\"nostr option or window.nostr is not available\");\n  }\n\n  const nostrTags = [\n    [\"relays\", ...relays],\n    [\"amount\", satoshi.toString()],\n  ];\n  if (p) {\n    nostrTags.push([\"p\", p]);\n  }\n  if (e) {\n    nostrTags.push([\"e\", e]);\n  }\n\n  const pubkey = await nostr.getPublicKey();\n\n  const nostrEvent: Event = {\n    pubkey,\n    created_at: Math.floor(Date.now() / 1000),\n    kind: 9734,\n    tags: nostrTags,\n    content: comment ?? \"\",\n  };\n\n  nostrEvent.id = getEventHash(nostrEvent);\n  return await nostr.signEvent(nostrEvent);\n}\n\nexport function validateEvent(event: Event): boolean {\n  if (typeof event.content !== \"string\") return false;\n  if (typeof event.created_at !== \"number\") return false;\n  // ignore these checks because if the pubkey is not set we add it to the event. same for the ID.\n  // if (typeof event.pubkey !== \"string\") return false;\n  // if (!event.pubkey.match(/^[a-f0-9]{64}$/)) return false;\n\n  if (!Array.isArray(event.tags)) return false;\n  for (let i = 0; i < event.tags.length; i++) {\n    const tag = event.tags[i];\n    if (!Array.isArray(tag)) return false;\n    for (let j = 0; j < tag.length; j++) {\n      if (typeof tag[j] === \"object\") return false;\n    }\n  }\n\n  return true;\n}\n\nexport function serializeEvent(evt: Event): string {\n  if (!validateEvent(evt))\n    throw new Error(\"can't serialize event with wrong or missing properties\");\n\n  return JSON.stringify([\n    0,\n    evt.pubkey,\n    evt.created_at,\n    evt.kind,\n    evt.tags,\n    evt.content,\n  ]);\n}\n\nexport function getEventHash(event: Event): string {\n  return bytesToHex(sha256(serializeEvent(event)));\n}\n\nexport function parseNostrResponse(\n  nostrData: NostrResponse,\n  username: string | undefined,\n) {\n  let nostrPubkey: string | undefined;\n  let nostrRelays: string[] | undefined;\n  if (username && nostrData) {\n    nostrPubkey = nostrData.names?.[username];\n    nostrRelays = nostrPubkey ? nostrData.relays?.[nostrPubkey] : undefined;\n  }\n\n  return [nostrData, nostrPubkey, nostrRelays] as const;\n}\n\nconst URL_REGEX =\n  /((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[\\w]*))?)/;\n\nexport const isUrl = (url: string | null): url is string => {\n  if (!url) return false;\n  return URL_REGEX.test(url);\n};\n\nexport const isValidAmount = ({\n  amount,\n  min,\n  max,\n}: {\n  amount: number;\n  min: number;\n  max: number;\n}): boolean => {\n  return amount > 0 && amount >= min && amount <= max;\n};\n\nconst TAG_PAY_REQUEST = \"payRequest\";\n\n// From: https://github.com/dolcalmi/lnurl-pay/blob/main/src/request-pay-service-params.ts\nexport const parseLnUrlPayResponse = async (\n  data: LnUrlRawData,\n): Promise<LnUrlPayResponse> => {\n  if (data.tag !== TAG_PAY_REQUEST)\n    throw new Error(\"Invalid pay service params\");\n\n  const callback = (data.callback + \"\").trim();\n  if (!isUrl(callback)) throw new Error(\"Callback must be a valid url\");\n\n  const min = Math.ceil(Number(data.minSendable || 0));\n  const max = Math.floor(Number(data.maxSendable));\n  if (!(min && max) || min > max) throw new Error(\"Invalid pay service params\");\n\n  let metadata: Array<Array<string>>;\n  let metadataHash: string;\n  try {\n    metadata = JSON.parse(data.metadata + \"\");\n    metadataHash = bytesToHex(sha256(data.metadata + \"\"));\n  } catch {\n    metadata = [];\n    metadataHash = bytesToHex(sha256(\"[]\"));\n  }\n\n  let email = \"\";\n  let image = \"\";\n  let description = \"\";\n  let identifier = \"\";\n  for (let i = 0; i < metadata.length; i++) {\n    const [k, v] = metadata[i];\n    switch (k) {\n      case \"text/plain\":\n        description = v;\n        break;\n      case \"text/identifier\":\n        identifier = v;\n        break;\n      case \"text/email\":\n        email = v;\n        break;\n      case \"image/png;base64\":\n      case \"image/jpeg;base64\":\n        image = \"data:\" + k + \",\" + v;\n        break;\n    }\n  }\n  const payerData = data.payerData as LUD18ServicePayerData | undefined;\n\n  let domain: string | undefined;\n  try {\n    domain = new URL(callback).hostname;\n  } catch {\n    // fail silently and let domain remain undefined if callback is not a valid URL\n  }\n\n  return {\n    callback,\n    fixed: min === max,\n    min,\n    max,\n    domain,\n    metadata,\n    metadataHash,\n    identifier,\n    email,\n    description,\n    image,\n    payerData,\n    commentAllowed: Number(data.commentAllowed) || 0,\n    rawData: data,\n    allowsNostr: data.allowsNostr || false,\n  };\n};\n","import { WebLNProvider } from \"@webbtc/webln-types\";\nimport { BoostArguments, BoostOptions, WeblnBoostParams } from \"./types\";\n\nexport const sendBoostagram = async (\n  args: BoostArguments,\n  options?: BoostOptions,\n) => {\n  const { boost } = args;\n  if (!options) {\n    options = {};\n  }\n  const webln: WebLNProvider = options.webln || globalThis.webln;\n\n  if (!webln) {\n    throw new Error(\"WebLN not available\");\n  }\n  if (!webln.keysend) {\n    throw new Error(\"Keysend not available in current WebLN provider\");\n  }\n\n  const amount = args.amount || Math.floor(boost.value_msat / 1000);\n\n  const weblnParams: WeblnBoostParams = {\n    destination: args.destination,\n    amount: amount,\n    customRecords: {\n      \"7629169\": JSON.stringify(boost),\n    },\n  };\n  if (args.customKey && args.customValue) {\n    weblnParams.customRecords[args.customKey] = args.customValue;\n  }\n  await webln.enable();\n  const response = await webln.keysend(weblnParams);\n  return response;\n};\n","import { SendPaymentResponse, WebLNProvider } from \"@webbtc/webln-types\";\nimport { Invoice, InvoiceArgs } from \"../bolt11\";\nimport { Boost, sendBoostagram } from \"../podcasting2\";\nimport {\n  KeysendResponse,\n  LnUrlPayResponse,\n  LnUrlRawData,\n  NostrResponse,\n  RequestInvoiceArgs,\n  ZapArgs,\n  ZapOptions,\n  KeySendRawData,\n} from \"./types\";\nimport {\n  generateZapEvent,\n  parseKeysendResponse,\n  parseNostrResponse,\n  isUrl,\n  isValidAmount,\n  parseLnUrlPayResponse,\n} from \"./utils\";\n\nexport const LN_ADDRESS_REGEX =\n  /^((?:[^<>()[\\]\\\\.,;:\\s@\"]+(?:\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(?:\".+\"))@((?:\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(?:(?:[a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport const DEFAULT_PROXY = \"https://api.getalby.com/lnurl\";\n\ntype LightningAddressOptions = {\n  proxy?: string | false;\n  webln?: WebLNProvider;\n};\n\nexport class LightningAddress {\n  address: string;\n  options: LightningAddressOptions;\n  username: string | undefined;\n  domain: string | undefined;\n  pubkey: string | undefined;\n  lnurlpData: LnUrlPayResponse | undefined;\n  keysendData: KeysendResponse | undefined;\n  nostrData: NostrResponse | undefined;\n  nostrPubkey: string | undefined;\n  nostrRelays: string[] | undefined;\n  webln: WebLNProvider | undefined;\n\n  constructor(address: string, options?: LightningAddressOptions) {\n    this.address = address;\n    this.options = { proxy: DEFAULT_PROXY };\n    this.options = Object.assign(this.options, options);\n    this.parse();\n    this.webln = this.options.webln;\n  }\n\n  parse() {\n    const result = LN_ADDRESS_REGEX.exec(this.address.toLowerCase());\n    if (result) {\n      this.username = result[1];\n      this.domain = result[2];\n    }\n  }\n\n  getWebLN() {\n    return this.webln || globalThis.webln;\n  }\n\n  async fetch() {\n    if (this.options.proxy) {\n      return this.fetchWithProxy();\n    } else {\n      return this.fetchWithoutProxy();\n    }\n  }\n\n  async fetchWithProxy() {\n    const response = await fetch(\n      `${this.options.proxy}/lightning-address-details?${new URLSearchParams({\n        ln: this.address,\n      }).toString()}`,\n    );\n    if (!response.ok) {\n      throw new Error(\n        `Failed to fetch lnurl info: ${response.status} ${response.statusText}`,\n      );\n    }\n\n    const json = await response.json();\n\n    await this.parseLnUrlPayResponse(json.lnurlp);\n    this.parseKeysendResponse(json.keysend);\n    this.parseNostrResponse(json.nostr);\n  }\n\n  async fetchWithoutProxy() {\n    if (!this.domain || !this.username) {\n      return;\n    }\n\n    await Promise.all([\n      this.fetchLnurlData(),\n      this.fetchKeysendData(),\n      this.fetchNostrData(),\n    ]);\n  }\n\n  async fetchLnurlData() {\n    const lnurlResult = await fetch(this.lnurlpUrl());\n    if (lnurlResult.ok) {\n      const lnurlData = await lnurlResult.json();\n      await this.parseLnUrlPayResponse(lnurlData);\n    }\n  }\n\n  async fetchKeysendData() {\n    const keysendResult = await fetch(this.keysendUrl());\n    if (keysendResult.ok) {\n      const keysendData = await keysendResult.json();\n      this.parseKeysendResponse(keysendData);\n    }\n  }\n\n  async fetchNostrData() {\n    const nostrResult = await fetch(this.nostrUrl());\n    if (nostrResult.ok) {\n      const nostrData = await nostrResult.json();\n      this.parseNostrResponse(nostrData);\n    }\n  }\n\n  lnurlpUrl() {\n    return `https://${this.domain}/.well-known/lnurlp/${this.username}`;\n  }\n\n  keysendUrl() {\n    return `https://${this.domain}/.well-known/keysend/${this.username}`;\n  }\n\n  nostrUrl() {\n    return `https://${this.domain}/.well-known/nostr.json?name=${this.username}`;\n  }\n\n  async generateInvoice(params: Record<string, string>): Promise<Invoice> {\n    let data;\n    if (this.options.proxy) {\n      const invoiceResponse = await fetch(\n        `${this.options.proxy}/generate-invoice?${new URLSearchParams({\n          ln: this.address,\n          ...params,\n        }).toString()}`,\n      );\n      if (!invoiceResponse.ok) {\n        throw new Error(\n          `Failed to generate invoice: ${invoiceResponse.status} ${invoiceResponse.statusText}`,\n        );\n      }\n      const json = await invoiceResponse.json();\n      data = json.invoice;\n    } else {\n      if (!this.lnurlpData) {\n        throw new Error(\"No lnurlpData available. Please call fetch() first.\");\n      }\n      if (!this.lnurlpData.callback || !isUrl(this.lnurlpData.callback))\n        throw new Error(\"Valid callback does not exist in lnurlpData\");\n      const callbackUrl = new URL(this.lnurlpData.callback);\n      callbackUrl.search = new URLSearchParams(params).toString();\n      const invoiceResponse = await fetch(callbackUrl.toString());\n      if (!invoiceResponse.ok) {\n        throw new Error(\n          `Failed to generate invoice: ${invoiceResponse.status} ${invoiceResponse.statusText}`,\n        );\n      }\n      data = await invoiceResponse.json();\n    }\n\n    const paymentRequest = data && data.pr && data.pr.toString();\n    if (!paymentRequest) throw new Error(\"Invalid pay service invoice\");\n\n    const invoiceArgs: InvoiceArgs = { pr: paymentRequest };\n    if (data && data.verify) invoiceArgs.verify = data.verify.toString();\n    if (data && data.successAction && typeof data.successAction === \"object\") {\n      const { tag, message, description, url } = data.successAction;\n      if (tag === \"message\") {\n        invoiceArgs.successAction = { tag, message };\n      } else if (tag === \"url\") {\n        invoiceArgs.successAction = { tag, description, url };\n      }\n    }\n\n    return new Invoice(invoiceArgs);\n  }\n\n  async requestInvoice(args: RequestInvoiceArgs): Promise<Invoice> {\n    if (!this.lnurlpData) {\n      throw new Error(\"No lnurlpData available. Please call fetch() first.\");\n    }\n    const msat = args.satoshi * 1000;\n    const { commentAllowed, min, max } = this.lnurlpData;\n\n    if (!isValidAmount({ amount: msat, min, max }))\n      throw new Error(\"Invalid amount\");\n    if (\n      args.comment &&\n      commentAllowed &&\n      commentAllowed > 0 &&\n      args.comment.length > commentAllowed\n    )\n      throw new Error(\n        `The comment length must be ${commentAllowed} characters or fewer`,\n      );\n\n    const invoiceParams: {\n      amount: string;\n      comment?: string;\n      payerdata?: string;\n    } = { amount: msat.toString() };\n    if (args.comment) invoiceParams.comment = args.comment;\n    if (args.payerdata)\n      invoiceParams.payerdata = JSON.stringify(args.payerdata);\n\n    return this.generateInvoice(invoiceParams);\n  }\n\n  async boost(boost: Boost, amount: number = 0) {\n    if (!this.keysendData) {\n      throw new Error(\"No keysendData available. Please call fetch() first.\");\n    }\n    const { destination, customKey, customValue } = this.keysendData;\n    const webln = this.getWebLN();\n    if (!webln) {\n      throw new Error(\"WebLN not available\");\n    }\n    return sendBoostagram(\n      {\n        destination,\n        customKey,\n        customValue,\n        amount,\n        boost,\n      },\n      { webln },\n    );\n  }\n\n  async zapInvoice(\n    { satoshi, comment, relays, e }: ZapArgs,\n    options: ZapOptions = {},\n  ): Promise<Invoice> {\n    if (!this.lnurlpData) {\n      throw new Error(\"No lnurlpData available. Please call fetch() first.\");\n    }\n    if (!this.nostrPubkey) {\n      throw new Error(\"Nostr Pubkey is missing\");\n    }\n    const p = this.nostrPubkey;\n    const msat = satoshi * 1000;\n    const { allowsNostr, min, max } = this.lnurlpData;\n\n    if (!isValidAmount({ amount: msat, min, max }))\n      throw new Error(\"Invalid amount\");\n    if (!allowsNostr) throw new Error(\"Your provider does not support zaps\");\n\n    const event = await generateZapEvent(\n      {\n        satoshi: msat,\n        comment,\n        p,\n        e,\n        relays,\n      },\n      options,\n    );\n    const zapParams: { amount: string; nostr: string } = {\n      amount: msat.toString(),\n      nostr: JSON.stringify(event),\n    };\n\n    const invoice = await this.generateInvoice(zapParams);\n    return invoice;\n  }\n\n  async zap(\n    args: ZapArgs,\n    options: ZapOptions = {},\n  ): Promise<SendPaymentResponse> {\n    const invoice = this.zapInvoice(args, options);\n    const webln = this.getWebLN();\n    if (!webln) {\n      throw new Error(\"WebLN not available\");\n    }\n    await webln.enable();\n    const response = webln.sendPayment((await invoice).paymentRequest);\n    return response;\n  }\n\n  private async parseLnUrlPayResponse(lnurlpData: LnUrlRawData | undefined) {\n    if (lnurlpData) {\n      this.lnurlpData = await parseLnUrlPayResponse(lnurlpData);\n    }\n  }\n\n  private parseKeysendResponse(keysendData: KeySendRawData | undefined) {\n    if (keysendData) {\n      this.keysendData = parseKeysendResponse(keysendData);\n    }\n  }\n\n  private parseNostrResponse(nostrData: NostrResponse | undefined) {\n    if (nostrData) {\n      [this.nostrData, this.nostrPubkey, this.nostrRelays] = parseNostrResponse(\n        nostrData,\n        this.username,\n      );\n    }\n  }\n}\n","import { Invoice } from \"../bolt11/Invoice\";\n\nexport interface Wallet {\n  payInvoice(args: { invoice: string }): Promise<{ preimage: string }>;\n}\n\nexport function createGuardedWallet(\n  wallet: Wallet,\n  maxAmountSats: number,\n): Wallet {\n  return {\n    payInvoice: async (args: { invoice: string }) => {\n      const invoice = new Invoice({ pr: args.invoice });\n      if (invoice.satoshi > maxAmountSats) {\n        throw new Error(\n          `Invoice amount (${invoice.satoshi} sats) exceeds maxAmount (${maxAmountSats} sats)`,\n        );\n      }\n      return wallet.payInvoice(args);\n    },\n  };\n}\n","interface WwwAuthenticatePayload {\n  token: string;\n  invoice: string;\n  [key: string]: string; // Allows any other string properties\n}\n\n/**\n * Client: parse \"www-authenticate\" header from server response\n * @param input\n * @returns details from the header value (token or macaroon, invoice)\n */\nexport const parseL402 = (input: string): WwwAuthenticatePayload => {\n  // Remove the L402 and LSAT identifiers\n  const string = input.replace(\"L402\", \"\").replace(\"LSAT\", \"\").trim();\n\n  // Initialize an object to store the key-value pairs\n  const keyValuePairs: Record<string, string> = {};\n\n  // Regular expression to match key and (quoted or unquoted) value\n  const regex = /(\\w+)=(\"([^\"]*)\"|'([^']*)'|([^,]*))/g;\n  let match;\n\n  // Use regex to find all key-value pairs\n  while ((match = regex.exec(string)) !== null) {\n    // Key is always match[1]\n    // Value is either match[3] (double-quoted), match[4] (single-quoted), or match[5] (unquoted)\n    keyValuePairs[match[1]] = match[3] || match[4] || match[5];\n  }\n\n  if (!keyValuePairs[\"token\"] && keyValuePairs[\"macaroon\"]) {\n    // fallback to old naming\n    keyValuePairs[\"token\"] = keyValuePairs[\"macaroon\"];\n    delete keyValuePairs[\"macaroon\"];\n  }\n\n  if (\n    !(\"token\" in keyValuePairs) ||\n    typeof keyValuePairs[\"token\"] !== \"string\"\n  ) {\n    throw new Error(\"No macaroon or token found in www-authenticate header\");\n  }\n  if (\n    !(\"invoice\" in keyValuePairs) ||\n    typeof keyValuePairs[\"invoice\"] !== \"string\"\n  ) {\n    throw new Error(\"No invoice found in www-authenticate header\");\n  }\n\n  return keyValuePairs as WwwAuthenticatePayload;\n};\n","import { Wallet } from \"../utils\";\nimport { parseL402 } from \"./utils\";\n\nexport const handleL402Payment = async (\n  l402Header: string,\n  url: string,\n  fetchArgs: RequestInit,\n  headers: Headers,\n  wallet: Wallet,\n): Promise<Response> => {\n  const details = parseL402(l402Header);\n  const token = details.token || details.macaroon;\n  const invoice = details.invoice;\n\n  if (!token) {\n    throw new Error(\"L402: missing token/macaroon in WWW-Authenticate header\");\n  }\n  if (!invoice) {\n    throw new Error(\"L402: missing invoice in WWW-Authenticate header\");\n  }\n\n  const invResp = await wallet.payInvoice({ invoice });\n  headers.set(\"Authorization\", `L402 ${token}:${invResp.preimage}`);\n  return fetch(url, fetchArgs);\n};\n\nexport const fetchWithL402 = async (\n  url: string,\n  fetchArgs: RequestInit,\n  options: {\n    wallet: Wallet;\n  },\n) => {\n  const wallet = options.wallet;\n  if (!wallet) {\n    throw new Error(\"wallet is missing\");\n  }\n  if (!fetchArgs) {\n    fetchArgs = {};\n  }\n  fetchArgs.cache = \"no-store\";\n  fetchArgs.mode = \"cors\";\n  const headers = new Headers(fetchArgs.headers ?? undefined);\n  fetchArgs.headers = headers;\n\n  const initResp = await fetch(url, fetchArgs);\n  const header = initResp.headers.get(\"www-authenticate\");\n  if (!header) {\n    return initResp;\n  }\n\n  return handleL402Payment(header, url, fetchArgs, headers, wallet);\n};\n","export interface X402Requirements {\n  scheme: string;\n  network: string;\n  extra: {\n    invoice: string;\n    paymentMethod?: string;\n    [key: string]: unknown;\n  };\n  [key: string]: unknown;\n}\n\nexport const buildX402PaymentSignature = (\n  scheme: string,\n  network: string,\n  invoice: string,\n  requirements: X402Requirements,\n): string => {\n  const json = JSON.stringify({\n    x402Version: 2,\n    scheme,\n    network,\n    payload: { invoice },\n    accepted: requirements,\n  });\n  // btoa only handles latin1; encode via UTF-8 to be safe\n  return btoa(unescape(encodeURIComponent(json)));\n};\n","import { Wallet } from \"../utils\";\nimport { buildX402PaymentSignature, X402Requirements } from \"./utils\";\nimport { Invoice } from \"../../bolt11\";\n\nconst decodeX402Header = (\n  x402Header: string,\n): { accepts: X402Requirements[] } => {\n  let parsed: { accepts?: unknown[] };\n  try {\n    parsed = JSON.parse(decodeURIComponent(escape(atob(x402Header))));\n  } catch (_) {\n    throw new Error(\n      \"x402: invalid PAYMENT-REQUIRED header (not valid base64-encoded JSON)\",\n    );\n  }\n\n  if (!Array.isArray(parsed.accepts) || parsed.accepts.length === 0) {\n    throw new Error(\n      \"x402: PAYMENT-REQUIRED header contains no payment options\",\n    );\n  }\n  return { accepts: parsed.accepts as X402Requirements[] };\n};\n\n/**\n * Probe a PAYMENT-REQUIRED header for a lightning-payable offer without\n * throwing. Returns the matching requirements, or null if the header has no\n * lightning entry (e.g. USDC-only endpoints) or is malformed. Used by the\n * top-level fetch402 dispatcher to decide whether to attempt payment or hand\n * the 402 back to the caller.\n */\nexport const findX402LightningRequirements = (\n  x402Header: string,\n): X402Requirements | null => {\n  let accepts: X402Requirements[];\n  try {\n    ({ accepts } = decodeX402Header(x402Header));\n  } catch (_) {\n    return null;\n  }\n  const requirements = accepts.find(\n    (e) => e?.extra?.paymentMethod === \"lightning\",\n  );\n  if (!requirements?.extra?.invoice) return null;\n  return requirements;\n};\n\nexport const handleX402Payment = async (\n  x402Header: string,\n  url: string,\n  fetchArgs: RequestInit,\n  headers: Headers,\n  wallet: Wallet,\n): Promise<Response> => {\n  const { accepts } = decodeX402Header(x402Header);\n\n  const requirements = accepts.find(\n    (e) => e?.extra?.paymentMethod === \"lightning\",\n  );\n  if (!requirements) {\n    throw new Error(\n      \"x402: unsupported x402 network, only Bitcoin lightning network is supported.\",\n    );\n  }\n  if (!requirements.extra?.invoice) {\n    throw new Error(\"x402: payment requirements missing lightning invoice\");\n  }\n\n  const invoice = new Invoice({ pr: requirements.extra.invoice });\n  if (invoice.amountRaw != requirements.amount) {\n    throw new Error(\n      `Invalid invoice amount: ${invoice.amountRaw}. expected ${requirements.amount}`,\n    );\n  }\n\n  await wallet.payInvoice!({ invoice: invoice.paymentRequest });\n\n  headers.set(\n    \"payment-signature\",\n    buildX402PaymentSignature(\n      requirements.scheme,\n      requirements.network,\n      invoice.paymentRequest,\n      requirements,\n    ),\n  );\n  return fetch(url, fetchArgs);\n};\n\nexport const fetchWithX402 = async (\n  url: string,\n  fetchArgs: RequestInit,\n  options: { wallet: Wallet },\n) => {\n  const wallet = options.wallet;\n  if (!fetchArgs) {\n    fetchArgs = {};\n  }\n  fetchArgs.cache = \"no-store\";\n  fetchArgs.mode = \"cors\";\n  const headers = new Headers(fetchArgs.headers ?? undefined);\n  fetchArgs.headers = headers;\n\n  const initResp = await fetch(url, fetchArgs);\n  const header = initResp.headers.get(\"PAYMENT-REQUIRED\");\n  if (!header) {\n    return initResp;\n  }\n\n  return handleX402Payment(header, url, fetchArgs, headers, wallet);\n};\n","export interface MppChallenge {\n  id: string;\n  realm: string;\n  method: string;\n  intent: string;\n  request: string;\n  expires?: string;\n}\n\nexport interface MppChargeRequest {\n  amount: string;\n  currency: string;\n  description?: string;\n  recipient?: string;\n  externalId?: string;\n  methodDetails: {\n    invoice: string;\n    paymentHash?: string;\n    network?: string;\n  };\n}\n\n/**\n * Parse a `WWW-Authenticate: Payment …` header produced by a\n * draft-lightning-charge-00 server. Expected format:\n *\n *   Payment id=\"<id>\", realm=\"<realm>\", method=\"lightning\",\n *           intent=\"charge\", request=\"<base64url>\" [, expires=\"<rfc3339>\"]\n *\n * Returns null when the header is not a Payment lightning/charge challenge.\n */\nexport const parseMppChallenge = (header: string): MppChallenge | null => {\n  if (!header.trimStart().toLowerCase().startsWith(\"payment\")) {\n    return null;\n  }\n  const rest = header\n    .slice(header.toLowerCase().indexOf(\"payment\") + \"payment\".length)\n    .trim();\n  const result: Record<string, string> = {};\n  const regex = /(\\w+)=(\"([^\"]*)\"|'([^']*)'|([^,\\s]*))/g;\n  let match;\n  while ((match = regex.exec(rest)) !== null) {\n    result[match[1]] = match[3] ?? match[4] ?? match[5] ?? \"\";\n  }\n\n  if (\n    result.method !== \"lightning\" ||\n    result.intent !== \"charge\" ||\n    !result.id ||\n    !result.realm ||\n    !result.request\n  ) {\n    return null;\n  }\n\n  return {\n    id: result.id,\n    realm: result.realm,\n    method: result.method,\n    intent: result.intent,\n    request: result.request,\n    ...(result.expires ? { expires: result.expires } : {}),\n  };\n};\n\n/** Decode a base64url string (no padding required) to a UTF-8 string. */\nexport const decodeBase64url = (input: string): string => {\n  const base64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const binary = atob(base64);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return new TextDecoder(\"utf-8\").decode(bytes);\n};\n\n/** Encode a UTF-8 string to base64url without padding. */\nconst encodeBase64url = (input: string): string => {\n  const bytes = new TextEncoder().encode(input);\n  let binary = \"\";\n  for (let i = 0; i < bytes.length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n};\n\n/**\n * JSON Canonicalization Scheme (RFC 8785).\n * Produces compact JSON with object keys sorted lexicographically.\n */\nconst jcs = (value: unknown): string => {\n  if (value === null || typeof value !== \"object\") {\n    return JSON.stringify(value);\n  }\n  if (Array.isArray(value)) {\n    return \"[\" + (value as unknown[]).map(jcs).join(\",\") + \"]\";\n  }\n  const keys = Object.keys(value as object).sort();\n  return (\n    \"{\" +\n    keys\n      .map(\n        (k) =>\n          JSON.stringify(k) + \":\" + jcs((value as Record<string, unknown>)[k]),\n      )\n      .join(\",\") +\n    \"}\"\n  );\n};\n\n/**\n * Build the base64url-encoded credential token for the `Authorization` header.\n *\n * Per the spec the credential is a JCS-serialised JSON object that echoes all\n * challenge auth-params (id, realm, method, intent, request, expires) and\n * carries the HTLC preimage that proves payment:\n *\n *   {\n *     \"challenge\": { \"id\": \"…\", \"intent\": \"charge\",\n *                    \"method\": \"lightning\", \"realm\": \"…\", \"request\": \"…\" },\n *     \"payload\":   { \"preimage\": \"<64-char lowercase hex>\" }\n *   }\n *\n * Keys are sorted lexicographically at every level per JCS.\n */\nexport const buildMppCredential = (\n  challenge: MppChallenge,\n  preimage: string,\n  source?: string,\n): string => {\n  const challengeEcho: Record<string, string> = {\n    id: challenge.id,\n    intent: challenge.intent,\n    method: challenge.method,\n    realm: challenge.realm,\n    request: challenge.request,\n  };\n  if (challenge.expires) {\n    challengeEcho.expires = challenge.expires;\n  }\n\n  const credential: Record<string, unknown> = {\n    challenge: challengeEcho,\n    payload: { preimage },\n  };\n  if (source) {\n    credential.source = source;\n  }\n\n  return encodeBase64url(jcs(credential));\n};\n\n/**\n * Construct a `WWW-Authenticate` header for testing / server implementations.\n *\n * The auth scheme is `Payment` per [I-D.httpauth-payment].\n */\nexport const makeMppWwwAuthenticateHeader = (args: {\n  id: string;\n  realm: string;\n  request: string;\n  expires?: string;\n}): string => {\n  let header =\n    `Payment id=\"${args.id}\", realm=\"${args.realm}\", method=\"lightning\",` +\n    ` intent=\"charge\", request=\"${args.request}\"`;\n  if (args.expires) {\n    header += `, expires=\"${args.expires}\"`;\n  }\n  return header;\n};\n\n/** Encode an MppChargeRequest as a base64url string suitable for the `request` auth-param. */\nexport const encodeMppChargeRequest = (request: MppChargeRequest): string =>\n  encodeBase64url(jcs(request));\n","import { Wallet } from \"../utils\";\nimport {\n  buildMppCredential,\n  decodeBase64url,\n  MppChargeRequest,\n  parseMppChallenge,\n} from \"./utils\";\n\n/**\n * Handle a `WWW-Authenticate: Payment …` challenge produced by a\n * draft-lightning-charge-00 server.\n *\n * Flow:\n *  1. Parse the challenge from the header.\n *  2. Decode the `request` auth-param to find the BOLT11 invoice.\n *  3. Pay the invoice via the wallet; receive the HTLC preimage.\n *  4. Build the `Authorization: Payment <credential>` header.\n *  5. Retry the original request with the credential.\n */\nexport const handleMppChargePayment = async (\n  wwwAuthHeader: string,\n  url: string,\n  fetchArgs: RequestInit,\n  headers: Headers,\n  wallet: Wallet,\n): Promise<Response> => {\n  const challenge = parseMppChallenge(wwwAuthHeader);\n  if (!challenge) {\n    throw new Error(\n      \"mpp: invalid or unsupported WWW-Authenticate challenge (expected Payment method=lightning intent=charge)\",\n    );\n  }\n\n  let request: MppChargeRequest;\n  try {\n    request = JSON.parse(decodeBase64url(challenge.request));\n  } catch (_) {\n    throw new Error(\n      \"mpp: invalid request auth-param (not valid base64url-encoded JSON)\",\n    );\n  }\n\n  const invoice = request.methodDetails?.invoice;\n  if (!invoice) {\n    throw new Error(\"mpp: missing invoice in charge request\");\n  }\n\n  const invResp = await wallet.payInvoice({ invoice });\n\n  // Per spec: Authorization: Payment <base64url-token>  (single token, no wrapper)\n  const credential = buildMppCredential(challenge, invResp.preimage);\n  headers.set(\"Authorization\", `Payment ${credential}`);\n\n  return fetch(url, fetchArgs);\n};\n\n/**\n * Fetch a resource protected by the draft-lightning-charge-00 payment\n * authentication protocol.\n *\n * On a `402 Payment Required` response that carries a\n * `WWW-Authenticate: Payment method=\"lightning\" intent=\"charge\" …` header\n * the function pays the embedded BOLT11 invoice and retries with the\n * resulting preimage as the credential.\n *\n * Note: lightning-charge uses consume-once challenge semantics – each\n * challenge embeds a fresh invoice, so paid credentials cannot be reused.\n * The `store` option is accepted for API consistency but is not used.\n */\nexport const fetchWithMpp = async (\n  url: string,\n  fetchArgs: RequestInit,\n  options: { wallet: Wallet },\n): Promise<Response> => {\n  const wallet = options.wallet;\n  if (!wallet) {\n    throw new Error(\"wallet is missing\");\n  }\n  if (!fetchArgs) {\n    fetchArgs = {};\n  }\n  fetchArgs.cache = \"no-store\";\n  fetchArgs.mode = \"cors\";\n  const headers = new Headers(fetchArgs.headers ?? undefined);\n  fetchArgs.headers = headers;\n\n  const initResp = await fetch(url, fetchArgs);\n  const wwwAuthHeader = initResp.headers.get(\"www-authenticate\");\n  if (\n    !wwwAuthHeader ||\n    !wwwAuthHeader.trimStart().toLowerCase().startsWith(\"payment\")\n  ) {\n    return initResp;\n  }\n\n  return handleMppChargePayment(wwwAuthHeader, url, fetchArgs, headers, wallet);\n};\n","import { Wallet, createGuardedWallet } from \"./utils\";\nimport { handleL402Payment } from \"./l402/l402\";\nimport { findX402LightningRequirements, handleX402Payment } from \"./x402/x402\";\nimport { handleMppChargePayment } from \"./mpp/mpp\";\nimport { parseMppChallenge } from \"./mpp/utils\";\n\nexport const fetch402 = async (\n  url: string,\n  fetchArgs: RequestInit,\n  options: {\n    wallet: Wallet;\n    maxAmount?: number;\n  },\n) => {\n  const wallet = options.maxAmount\n    ? createGuardedWallet(options.wallet, options.maxAmount)\n    : options.wallet;\n  if (!fetchArgs) {\n    fetchArgs = {};\n  }\n  fetchArgs.cache = \"no-store\";\n  fetchArgs.mode = \"cors\";\n  const headers = new Headers(fetchArgs.headers ?? undefined);\n  fetchArgs.headers = headers;\n\n  const initResp = await fetch(url, fetchArgs);\n\n  // L402 / LSAT: dedicated scheme, dispatch directly.\n  const wwwAuthHeader = initResp.headers.get(\"www-authenticate\");\n  if (wwwAuthHeader) {\n    const trimmed = wwwAuthHeader.trimStart().toLowerCase();\n    if (trimmed.startsWith(\"l402\") || trimmed.startsWith(\"lsat\")) {\n      return handleL402Payment(wwwAuthHeader, url, fetchArgs, headers, wallet);\n    }\n  }\n\n  // A server may advertise multiple payment options at once (e.g. an MPP\n  // USDC challenge in WWW-Authenticate alongside an x402 PAYMENT-REQUIRED\n  // header that lists both USDC and lightning). Try each lightning-payable\n  // handler in turn; only if none matches do we hand the original 402 back\n  // to the caller so they can decide what to do with non-lightning offers.\n\n  // 1. MPP-lightning challenge (Payment method=\"lightning\" intent=\"charge\").\n  //    parseMppChallenge returns null for any other method, which lets us\n  //    fall through to x402 instead of throwing.\n  if (wwwAuthHeader && parseMppChallenge(wwwAuthHeader)) {\n    return handleMppChargePayment(\n      wwwAuthHeader,\n      url,\n      fetchArgs,\n      headers,\n      wallet,\n    );\n  }\n\n  // 2. x402 PAYMENT-REQUIRED with a lightning entry in `accepts`.\n  const x402Header = initResp.headers.get(\"PAYMENT-REQUIRED\");\n  if (x402Header && findX402LightningRequirements(x402Header)) {\n    return handleX402Payment(x402Header, url, fetchArgs, headers, wallet);\n  }\n\n  return initResp;\n};\n","export type MacaroonPayload<T> = T & {\n  paymentHash: string; // hex — SHA256 of the preimage\n};\n\nexport async function issueL402Macaroon<T extends Record<string, unknown>>(\n  secret: string,\n  paymentHash: string,\n  params?: T,\n): Promise<string> {\n  if (\n    params !== undefined &&\n    Object.prototype.hasOwnProperty.call(params, \"paymentHash\")\n  ) {\n    throw new Error(\"paymentHash is reserved\");\n  }\n  const payload = { ...params, paymentHash } as MacaroonPayload<T>;\n  const encoded = Buffer.from(JSON.stringify(payload)).toString(\"base64url\");\n  const mac = await sign(secret, encoded);\n  return `${encoded}.${mac}`;\n}\n\nexport async function verifyL402Macaroon<T = unknown>(\n  secret: string,\n  token: string,\n): Promise<MacaroonPayload<T>> {\n  const { timingSafeEqual } = await import(\"crypto\");\n  const dotIndex = token.lastIndexOf(\".\");\n  if (dotIndex === -1) throw new Error(\"Invalid macaroon token\");\n\n  const encoded = token.slice(0, dotIndex);\n  const mac = token.slice(dotIndex + 1);\n\n  // Constant-time comparison to prevent timing attacks\n  const expectedMac = await sign(secret, encoded);\n  try {\n    if (\n      !timingSafeEqual(Buffer.from(mac, \"hex\"), Buffer.from(expectedMac, \"hex\"))\n    ) {\n      throw new Error(\"Invalid macaroon token\");\n    }\n  } catch (e) {\n    throw new Error(\"Invalid macaroon token\");\n  }\n\n  try {\n    const parsed: unknown = JSON.parse(\n      Buffer.from(encoded, \"base64url\").toString(\"utf8\"),\n    );\n    if (\n      parsed === null ||\n      typeof parsed !== \"object\" ||\n      Array.isArray(parsed) ||\n      typeof (parsed as Record<string, unknown>).paymentHash !== \"string\"\n    ) {\n      throw new Error(\"Invalid macaroon payload\");\n    }\n    return parsed as MacaroonPayload<T>;\n  } catch {\n    throw new Error(\"Invalid macaroon token\");\n  }\n}\n\nasync function sign(secret: string, payload: string): Promise<string> {\n  const { createHmac } = await import(\"crypto\");\n  return createHmac(\"sha256\", secret).update(payload).digest(\"hex\");\n}\n","/**\n * Server: create a WWW-Authenticate header for a given macaroon and invoice\n * @param args the macaroon/token and invoice generated for the client's request\n * @returns the header value\n */\nexport const makeL402AuthenticateHeader = (args: {\n  token?: string;\n  invoice: string;\n}) => {\n  if (!args.token) {\n    throw new Error(\"token must be provided\");\n  }\n\n  return `L402 version=\"0\" token=\"${args.token}\", invoice=\"${args.invoice}\"`;\n};\n\n/**\n * Server: parse \"authorization\" header sent from client\n * @param input value from authorization header\n * @returns the macaroon and preimage\n */\nexport function parseL402Authorization(\n  input: string,\n): { token: string; preimage: string } | null {\n  // Backwards compat: LSAT was the former name of L402\n  const normalized = input.replace(/^LSAT /, \"L402 \");\n  const prefix = \"L402 \";\n  if (!normalized.startsWith(prefix)) return null;\n  const credentials = normalized.slice(prefix.length);\n  const colonIndex = credentials.indexOf(\":\");\n  if (colonIndex === -1) {\n    throw new Error(\"Invalid authorization header value\");\n  }\n  return {\n    token: credentials.slice(0, colonIndex),\n    preimage: credentials.slice(colonIndex + 1),\n  };\n}\n","const numSatsInBtc = 100_000_000;\n\nexport interface FiatCurrency {\n  code: string;\n  name: string;\n  symbol: string;\n  priority: number;\n}\n\nexport const getFiatCurrencies = async (): Promise<FiatCurrency[]> => {\n  const url = \"https://getalby.com/api/rates\";\n  const response = await fetch(url);\n\n  if (!response.ok) {\n    throw new Error(\n      `Failed to fetch currencies: ${response.status} ${response.statusText}`,\n    );\n  }\n\n  const data = await response.json();\n  const mappedCurrencies: FiatCurrency[] = Object.entries(data)\n    .filter(([code]) => code.toUpperCase() !== \"BTC\")\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    .map(([code, details]: any) => ({\n      code: code.toUpperCase(),\n      name: details.name,\n      priority: details.priority,\n      symbol: details.symbol,\n    }))\n    .sort((a, b) => a.name.localeCompare(b.name))\n    .sort((a, b) => a.priority - b.priority) as FiatCurrency[];\n\n  return mappedCurrencies;\n};\n\nexport const getFiatBtcRate = async (currency: string): Promise<number> => {\n  const url =\n    \"https://getalby.com/api/rates/\" + currency.toLowerCase() + \".json\";\n  const response = await fetch(url);\n\n  if (!response.ok) {\n    throw new Error(\n      `Failed to fetch rate: ${response.status} ${response.statusText}`,\n    );\n  }\n\n  const data = await response.json();\n\n  return data.rate_float / numSatsInBtc;\n};\n\nexport const getFiatValue = async ({\n  satoshi,\n  currency,\n}: {\n  satoshi: number | string;\n  currency: string;\n}) => {\n  const rate = await getFiatBtcRate(currency);\n\n  return Number(satoshi) * rate;\n};\n\nexport const getSatoshiValue = async ({\n  amount,\n  currency,\n}: {\n  amount: number | string;\n  currency: string;\n}) => {\n  const rate = await getFiatBtcRate(currency);\n\n  return Math.floor(Number(amount) / rate);\n};\n\nexport const getFormattedFiatValue = async ({\n  satoshi,\n  currency,\n  locale,\n}: {\n  satoshi: number | string;\n  currency: string;\n  locale: string;\n}) => {\n  if (!locale) {\n    locale = \"en\";\n  }\n  const fiatValue = await getFiatValue({ satoshi, currency });\n  return fiatValue.toLocaleString(locale, {\n    style: \"currency\",\n    currency,\n  });\n};\n"],"names":["require$$0","decode"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5]}