@getalby/lightning-tools 4.2.1 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -8
- package/dist/index.cjs +1 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.modern.js +1 -2
- package/dist/index.module.js +1 -2
- package/dist/index.umd.js +1 -2
- package/dist/invoice.d.ts +3 -4
- package/dist/invoice.test.d.ts +0 -1
- package/dist/l402/index.d.ts +0 -1
- package/dist/l402/parse.d.ts +0 -1
- package/dist/l402/parse.test.d.ts +0 -1
- package/dist/lightning-address.d.ts +0 -1
- package/dist/lightning-address.test.d.ts +0 -1
- package/dist/podcasting2/boostagrams.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/utils/fiat.d.ts +0 -1
- package/dist/utils/hex.d.ts +1 -0
- package/dist/utils/invoice.d.ts +1 -2
- package/dist/utils/keysend.d.ts +0 -1
- package/dist/utils/lnurl.d.ts +1 -2
- package/dist/utils/lnurl.test.d.ts +0 -1
- package/dist/utils/nostr.d.ts +1 -2
- package/dist/utils/sha256.d.ts +1 -0
- package/dist/utils/storage.d.ts +0 -1
- package/package.json +4 -8
- package/dist/index.browser.js +0 -1834
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.modern.js.map +0 -1
- package/dist/index.module.js.map +0 -1
- package/dist/index.umd.js.map +0 -1
- package/dist/invoice.d.ts.map +0 -1
- package/dist/invoice.test.d.ts.map +0 -1
- package/dist/l402/index.d.ts.map +0 -1
- package/dist/l402/parse.d.ts.map +0 -1
- package/dist/l402/parse.test.d.ts.map +0 -1
- package/dist/lightning-address.d.ts.map +0 -1
- package/dist/lightning-address.test.d.ts.map +0 -1
- package/dist/podcasting2/boostagrams.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/fiat.d.ts.map +0 -1
- package/dist/utils/invoice.d.ts.map +0 -1
- package/dist/utils/keysend.d.ts.map +0 -1
- package/dist/utils/lnurl.d.ts.map +0 -1
- package/dist/utils/lnurl.test.d.ts.map +0 -1
- package/dist/utils/nostr.d.ts.map +0 -1
- package/dist/utils/storage.d.ts.map +0 -1
- package/dist/window.d.ts +0 -2
- package/dist/window.d.ts.map +0 -1
- package/dist/window.js +0 -3
package/dist/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/storage.ts","../src/l402/index.ts","../src/l402/parse.ts","../src/podcasting2/boostagrams.ts","../src/utils/keysend.ts","../src/utils/lnurl.ts","../src/invoice.ts","../src/utils/invoice.ts","../src/utils/nostr.ts","../src/lightning-address.ts","../src/utils/fiat.ts"],"sourcesContent":["export class MemoryStorage {\n storage;\n\n constructor(initial?: Record<string, unknown>) {\n this.storage = initial || {};\n }\n\n getItem(key: string) {\n return this.storage[key];\n }\n\n setItem(key: string, value: unknown) {\n this.storage[key] = value;\n }\n}\n\nexport class NoStorage {\n constructor(initial?: unknown) {}\n\n getItem(key: string) {\n return null;\n }\n\n setItem(key: string, value: unknown) {}\n}\n\nexport default MemoryStorage;\n","import MemoryStorage from \"../utils/storage\";\nimport { WebLNProvider } from \"@webbtc/webln-types\";\nimport { parseL402 } from \"./parse\";\n\nexport * as storage from \"../utils/storage\";\nconst memoryStorage = new MemoryStorage();\n\nconst HEADER_KEY = \"L402\"; // we have to update this to L402 at some point\n\nexport const fetchWithL402 = async (\n url: string,\n fetchArgs: RequestInit,\n options: {\n headerKey?: string;\n webln?: WebLNProvider;\n store?: Storage;\n },\n) => {\n if (!options) {\n options = {};\n }\n const headerKey = options.headerKey || HEADER_KEY;\n const webln: WebLNProvider = options.webln || globalThis.webln;\n if (!webln) {\n throw new Error(\"WebLN is missing\");\n }\n const store = options.store || memoryStorage;\n if (!fetchArgs) {\n fetchArgs = {};\n }\n fetchArgs.cache = \"no-store\";\n fetchArgs.mode = \"cors\";\n if (!fetchArgs.headers) {\n fetchArgs.headers = {};\n }\n const cachedL402Data = store.getItem(url);\n if (cachedL402Data) {\n const data = JSON.parse(cachedL402Data);\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${data.token}:${data.preimage}`;\n return await fetch(url, fetchArgs);\n }\n\n fetchArgs.headers[\"Accept-Authenticate\"] = headerKey;\n const initResp = await fetch(url, fetchArgs);\n const header = initResp.headers.get(\"www-authenticate\");\n if (!header) {\n return initResp;\n }\n\n const details = parseL402(header);\n const token = details.token || details.macaroon;\n const inv = details.invoice;\n\n await webln.enable();\n const invResp = await webln.sendPayment(inv);\n\n store.setItem(\n url,\n JSON.stringify({\n token: token,\n preimage: invResp.preimage,\n }),\n );\n\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${token}:${invResp.preimage}`;\n return await fetch(url, fetchArgs);\n};\n\nexport default fetchWithL402;\n","export const parseL402 = (input: string): Record<string, string> => {\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 = {};\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 return keyValuePairs;\n};\n","import { WebLNProvider } from \"@webbtc/webln-types\";\n\ntype BoostOptions = {\n webln?: unknown;\n};\n\ntype BoostArguments = {\n destination: string;\n customKey?: string;\n customValue?: string;\n amount?: number;\n boost: Boost;\n};\n\ntype WeblnBoostParams = {\n destination: string;\n amount: number;\n customRecords: Record<string, string>;\n};\n\nexport type Boost = {\n action: string;\n value_msat: number;\n value_msat_total: number;\n app_name: string;\n app_version: string;\n feedId: string;\n podcast: string;\n episode: string;\n ts: number;\n name: string;\n sender_name: string;\n};\n\nexport const boost = async (args: BoostArguments, options?: BoostOptions) => {\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\nexport default boost;\n","import type { KeysendResponse } from \"../types\";\n\nconst TAG_KEYSEND = \"keysend\";\n\nexport type KeySendRawData = {\n tag: string;\n status: string;\n customData: { customKey: string; customValue: string }[];\n pubkey: string;\n};\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\n if (\n !(\"customKey\" in data.customData[0]) ||\n data.customData[0][\"customKey\"] != \"696969\"\n )\n throw new Error(\"Unable to find customKey\");\n\n if (\n !(\"customValue\" in data.customData[0]) ||\n !data.customData[0][\"customValue\"]\n )\n throw new Error(\"Unable to find customValue\");\n\n if (!data.pubkey) throw new Error(\"Pubkey does not exist\");\n\n const destination = data.pubkey;\n const customKey = data.customData[0][\"customKey\"];\n const customValue = data.customData[0][\"customValue\"];\n\n return {\n destination,\n customKey,\n customValue,\n };\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\n\nimport type {\n LUD18ServicePayerData,\n LnUrlPayResponse,\n LnUrlRawData,\n} from \"../types\";\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 = (data: LnUrlRawData): 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 = sha256(data.metadata + \"\").toString(Hex);\n } catch {\n metadata = [];\n metadataHash = sha256(\"[]\").toString(Hex);\n }\n\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 \"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 description,\n image,\n payerData,\n commentAllowed: Number(data.commentAllowed) || 0,\n rawData: data,\n allowsNostr: data.allowsNostr || false,\n };\n};\n","import { decodeInvoice } from \"./utils/invoice\";\nimport Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { InvoiceArgs } from \"./types\";\n\nexport default class Invoice {\n paymentRequest: string;\n paymentHash: string;\n preimage: string | null;\n verify: string | null;\n satoshi: number;\n expiry: number; // expiry in seconds (not a timestamp)\n timestamp: number; // created date in seconds\n createdDate: Date;\n expiryDate: Date;\n description: string | 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.timestamp = decodedInvoice.timestamp;\n this.expiry = decodedInvoice.expiry;\n this.createdDate = new Date(this.timestamp * 1000);\n this.expiryDate = new Date((this.timestamp + this.expiry) * 1000);\n this.description = decodedInvoice.description ?? null;\n this.verify = args.verify ?? null;\n this.preimage = args.preimage ?? 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 try {\n const preimageHash = sha256(Hex.parse(preimage)).toString(Hex);\n return this.paymentHash === preimageHash;\n } catch {\n return false;\n }\n }\n\n async verifyPayment(): Promise<boolean> {\n if (!this.verify) throw new Error(\"LNURL verify not available\");\n const result = await fetch(this.verify);\n const json = await result.json();\n if (json.preimage) {\n this.preimage = json.preimage;\n }\n\n return json.settled;\n }\n}\n","import { decode } from \"light-bolt11-decoder\";\n\ntype DecodedInvoice = {\n paymentHash: string;\n satoshi: number;\n timestamp: number;\n expiry: number;\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 const amountTag = decoded.sections.find((value) => value.name === \"amount\");\n\n if (amountTag?.name !== \"amount\" || amountTag.value === undefined)\n return null;\n\n const satoshi = parseInt(amountTag.value) / 1000; // millisats\n\n const expiryTag = decoded.sections.find((value) => value.name === \"expiry\");\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 if (expiryTag?.name !== \"expiry\" || expiryTag.value === undefined)\n return null;\n\n const expiry = expiryTag.value;\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 timestamp,\n expiry,\n description,\n };\n } catch {\n return null;\n }\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { Event, NostrResponse, ZapArgs, ZapOptions } from \"../types\";\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 sha256(serializeEvent(event)).toString(Hex);\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","import { KeySendRawData, parseKeysendResponse } from \"./utils/keysend\";\nimport { isUrl, isValidAmount, parseLnUrlPayResponse } from \"./utils/lnurl\";\nimport Invoice from \"./invoice\";\nimport {\n InvoiceArgs,\n LnUrlPayResponse,\n LnUrlRawData,\n NostrResponse,\n RequestInvoiceArgs,\n ZapArgs,\n ZapOptions,\n} from \"./types\";\nimport { generateZapEvent, parseNostrResponse } from \"./utils/nostr\";\nimport type { Boost } from \"./podcasting2/boostagrams\";\nimport { boost as booster } from \"./podcasting2/boostagrams\";\nimport { WebLNProvider, SendPaymentResponse } from \"@webbtc/webln-types\";\nimport { KeysendResponse } from \"./types\";\n\nconst 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 default 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 result = await fetch(\n `${this.options.proxy}/lightning-address-details?${new URLSearchParams({\n ln: this.address,\n }).toString()}`,\n );\n const json = await result.json();\n\n this.parseResponse(json.lnurlp, json.keysend, json.nostr);\n }\n\n async fetchWithoutProxy() {\n if (!this.domain || !this.username) {\n return;\n }\n const lnurlResult = await fetch(this.lnurlpUrl());\n const keysendResult = await fetch(this.keysendUrl());\n const nostrResult = await fetch(this.nostrUrl());\n\n let lnurlData: LnUrlRawData | undefined;\n if (lnurlResult.ok) {\n lnurlData = await lnurlResult.json();\n }\n let keysendData: KeySendRawData | undefined;\n if (keysendResult.ok) {\n keysendData = await keysendResult.json();\n }\n let nostrData: NostrResponse | undefined;\n if (nostrResult.ok) {\n nostrData = await nostrResult.json();\n }\n\n this.parseResponse(lnurlData, keysendData, nostrData);\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 invoiceResult = await fetch(\n `${this.options.proxy}/generate-invoice?${new URLSearchParams({\n ln: this.address,\n ...params,\n }).toString()}`,\n );\n const json = await invoiceResult.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 invoiceResult = await fetch(callbackUrl.toString());\n data = await invoiceResult.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\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 booster(\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 parseResponse(\n lnurlpData: LnUrlRawData | undefined,\n keysendData: KeySendRawData | undefined,\n nostrData: NostrResponse | undefined,\n ) {\n if (lnurlpData) {\n this.lnurlpData = parseLnUrlPayResponse(lnurlpData);\n }\n if (keysendData) {\n this.keysendData = parseKeysendResponse(keysendData);\n }\n if (nostrData) {\n [this.nostrData, this.nostrPubkey, this.nostrRelays] = parseNostrResponse(\n nostrData,\n this.username,\n );\n }\n }\n}\n","const numSatsInBtc = 100_000_000;\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 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":["MemoryStorage","initial","storage","this","getItem","key","setItem","value","NoStorage","memoryStorage","fetchWithL402","url","fetchArgs","options","_exit2","_temp3","_result","headers","headerKey","fetch","then","initResp","header","get","details","input","match","string","replace","trim","keyValuePairs","regex","exec","parseL402","token","macaroon","inv","invoice","Promise","resolve","webln","enable","sendPayment","invResp","store","JSON","stringify","preimage","globalThis","Error","cache","mode","_temp4","cachedL402Data","data","parse","_await$fetch","e","reject","boost","args","keysend","amount","Math","floor","value_msat","weblnParams","destination","customRecords","customKey","customValue","URL_REGEX","test","_ref","min","max","Invoice","paymentRequest","paymentHash","verify","satoshi","expiry","timestamp","createdDate","expiryDate","description","pr","decodedInvoice","decoded","decode","sections","hashTag","find","name","amountTag","undefined","parseInt","timestampTag","expiryTag","descriptionTag","_unused","decodeInvoice","Date","_decodedInvoice$descr","_args$verify","_args$preimage","isPaid","_this2","validatePreimage","verifyPayment","_proto","sha256","Hex","toString","preimageHash","_this4","result","json","settled","generateZapEvent","comment","p","relays","nostr","nostrTags","concat","push","getPublicKey","pubkey","nostrEvent","created_at","now","kind","tags","content","id","getEventHash","signEvent","event","Array","isArray","i","length","tag","j","serializeEvent","evt","validateEvent","parseNostrResponse","nostrData","username","nostrPubkey","nostrRelays","_nostrData$names","names","_nostrData$relays","LN_ADDRESS_REGEX","LightningAddress","address","domain","lnurlpData","keysendData","proxy","Object","assign","toLowerCase","getWebLN","fetchWithProxy","fetchWithoutProxy","URLSearchParams","ln","parseResponse","lnurlp","_this6","lnurlpUrl","lnurlResult","keysendUrl","keysendResult","nostrUrl","nostrResult","_temp6","_temp2","lnurlData","_temp","ok","_nostrResult$json","_keysendResult$json","_lnurlResult$json","_temp5","generateInvoice","params","_temp9","invoiceArgs","_this8","_extends","invoiceResult","callback","isUrl","callbackUrl","search","_invoiceResult$json","_temp10","requestInvoice","_this10","msat","_this10$lnurlpData","commentAllowed","isValidAmount","invoiceParams","payerdata","_this12","_this12$keysendData","booster","zapInvoice","_this14","allowsNostr","_this14$lnurlpData","zapParams","zap","_invoice","_sendPayment","call","metadata","metadataHash","ceil","Number","minSendable","maxSendable","_metadata$i","k","v","identifier","image","payerData","URL","hostname","_unused2","fixed","rawData","parseLnUrlPayResponse","status","customData","parseKeysendResponse","_parseNostrResponse","getFiatBtcRate","currency","response","rate_float","getFiatValue","rate","_ref2","_ref3","locale","fiatValue","toLocaleString","style"],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,WAAW,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AACpE,cAAc,SAAS,CAAC"}
|
package/dist/index.modern.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/utils/storage.ts","../src/l402/index.ts","../src/l402/parse.ts","../src/podcasting2/boostagrams.ts","../src/utils/keysend.ts","../src/utils/lnurl.ts","../src/invoice.ts","../src/utils/invoice.ts","../src/utils/nostr.ts","../src/lightning-address.ts","../src/utils/fiat.ts"],"sourcesContent":["export class MemoryStorage {\n storage;\n\n constructor(initial?: Record<string, unknown>) {\n this.storage = initial || {};\n }\n\n getItem(key: string) {\n return this.storage[key];\n }\n\n setItem(key: string, value: unknown) {\n this.storage[key] = value;\n }\n}\n\nexport class NoStorage {\n constructor(initial?: unknown) {}\n\n getItem(key: string) {\n return null;\n }\n\n setItem(key: string, value: unknown) {}\n}\n\nexport default MemoryStorage;\n","import MemoryStorage from \"../utils/storage\";\nimport { WebLNProvider } from \"@webbtc/webln-types\";\nimport { parseL402 } from \"./parse\";\n\nexport * as storage from \"../utils/storage\";\nconst memoryStorage = new MemoryStorage();\n\nconst HEADER_KEY = \"L402\"; // we have to update this to L402 at some point\n\nexport const fetchWithL402 = async (\n url: string,\n fetchArgs: RequestInit,\n options: {\n headerKey?: string;\n webln?: WebLNProvider;\n store?: Storage;\n },\n) => {\n if (!options) {\n options = {};\n }\n const headerKey = options.headerKey || HEADER_KEY;\n const webln: WebLNProvider = options.webln || globalThis.webln;\n if (!webln) {\n throw new Error(\"WebLN is missing\");\n }\n const store = options.store || memoryStorage;\n if (!fetchArgs) {\n fetchArgs = {};\n }\n fetchArgs.cache = \"no-store\";\n fetchArgs.mode = \"cors\";\n if (!fetchArgs.headers) {\n fetchArgs.headers = {};\n }\n const cachedL402Data = store.getItem(url);\n if (cachedL402Data) {\n const data = JSON.parse(cachedL402Data);\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${data.token}:${data.preimage}`;\n return await fetch(url, fetchArgs);\n }\n\n fetchArgs.headers[\"Accept-Authenticate\"] = headerKey;\n const initResp = await fetch(url, fetchArgs);\n const header = initResp.headers.get(\"www-authenticate\");\n if (!header) {\n return initResp;\n }\n\n const details = parseL402(header);\n const token = details.token || details.macaroon;\n const inv = details.invoice;\n\n await webln.enable();\n const invResp = await webln.sendPayment(inv);\n\n store.setItem(\n url,\n JSON.stringify({\n token: token,\n preimage: invResp.preimage,\n }),\n );\n\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${token}:${invResp.preimage}`;\n return await fetch(url, fetchArgs);\n};\n\nexport default fetchWithL402;\n","export const parseL402 = (input: string): Record<string, string> => {\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 = {};\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 return keyValuePairs;\n};\n","import { WebLNProvider } from \"@webbtc/webln-types\";\n\ntype BoostOptions = {\n webln?: unknown;\n};\n\ntype BoostArguments = {\n destination: string;\n customKey?: string;\n customValue?: string;\n amount?: number;\n boost: Boost;\n};\n\ntype WeblnBoostParams = {\n destination: string;\n amount: number;\n customRecords: Record<string, string>;\n};\n\nexport type Boost = {\n action: string;\n value_msat: number;\n value_msat_total: number;\n app_name: string;\n app_version: string;\n feedId: string;\n podcast: string;\n episode: string;\n ts: number;\n name: string;\n sender_name: string;\n};\n\nexport const boost = async (args: BoostArguments, options?: BoostOptions) => {\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\nexport default boost;\n","import type { KeysendResponse } from \"../types\";\n\nconst TAG_KEYSEND = \"keysend\";\n\nexport type KeySendRawData = {\n tag: string;\n status: string;\n customData: { customKey: string; customValue: string }[];\n pubkey: string;\n};\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\n if (\n !(\"customKey\" in data.customData[0]) ||\n data.customData[0][\"customKey\"] != \"696969\"\n )\n throw new Error(\"Unable to find customKey\");\n\n if (\n !(\"customValue\" in data.customData[0]) ||\n !data.customData[0][\"customValue\"]\n )\n throw new Error(\"Unable to find customValue\");\n\n if (!data.pubkey) throw new Error(\"Pubkey does not exist\");\n\n const destination = data.pubkey;\n const customKey = data.customData[0][\"customKey\"];\n const customValue = data.customData[0][\"customValue\"];\n\n return {\n destination,\n customKey,\n customValue,\n };\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\n\nimport type {\n LUD18ServicePayerData,\n LnUrlPayResponse,\n LnUrlRawData,\n} from \"../types\";\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 = (data: LnUrlRawData): 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 = sha256(data.metadata + \"\").toString(Hex);\n } catch {\n metadata = [];\n metadataHash = sha256(\"[]\").toString(Hex);\n }\n\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 \"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 description,\n image,\n payerData,\n commentAllowed: Number(data.commentAllowed) || 0,\n rawData: data,\n allowsNostr: data.allowsNostr || false,\n };\n};\n","import { decodeInvoice } from \"./utils/invoice\";\nimport Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { InvoiceArgs } from \"./types\";\n\nexport default class Invoice {\n paymentRequest: string;\n paymentHash: string;\n preimage: string | null;\n verify: string | null;\n satoshi: number;\n expiry: number; // expiry in seconds (not a timestamp)\n timestamp: number; // created date in seconds\n createdDate: Date;\n expiryDate: Date;\n description: string | 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.timestamp = decodedInvoice.timestamp;\n this.expiry = decodedInvoice.expiry;\n this.createdDate = new Date(this.timestamp * 1000);\n this.expiryDate = new Date((this.timestamp + this.expiry) * 1000);\n this.description = decodedInvoice.description ?? null;\n this.verify = args.verify ?? null;\n this.preimage = args.preimage ?? 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 try {\n const preimageHash = sha256(Hex.parse(preimage)).toString(Hex);\n return this.paymentHash === preimageHash;\n } catch {\n return false;\n }\n }\n\n async verifyPayment(): Promise<boolean> {\n if (!this.verify) throw new Error(\"LNURL verify not available\");\n const result = await fetch(this.verify);\n const json = await result.json();\n if (json.preimage) {\n this.preimage = json.preimage;\n }\n\n return json.settled;\n }\n}\n","import { decode } from \"light-bolt11-decoder\";\n\ntype DecodedInvoice = {\n paymentHash: string;\n satoshi: number;\n timestamp: number;\n expiry: number;\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 const amountTag = decoded.sections.find((value) => value.name === \"amount\");\n\n if (amountTag?.name !== \"amount\" || amountTag.value === undefined)\n return null;\n\n const satoshi = parseInt(amountTag.value) / 1000; // millisats\n\n const expiryTag = decoded.sections.find((value) => value.name === \"expiry\");\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 if (expiryTag?.name !== \"expiry\" || expiryTag.value === undefined)\n return null;\n\n const expiry = expiryTag.value;\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 timestamp,\n expiry,\n description,\n };\n } catch {\n return null;\n }\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { Event, NostrResponse, ZapArgs, ZapOptions } from \"../types\";\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 sha256(serializeEvent(event)).toString(Hex);\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","import { KeySendRawData, parseKeysendResponse } from \"./utils/keysend\";\nimport { isUrl, isValidAmount, parseLnUrlPayResponse } from \"./utils/lnurl\";\nimport Invoice from \"./invoice\";\nimport {\n InvoiceArgs,\n LnUrlPayResponse,\n LnUrlRawData,\n NostrResponse,\n RequestInvoiceArgs,\n ZapArgs,\n ZapOptions,\n} from \"./types\";\nimport { generateZapEvent, parseNostrResponse } from \"./utils/nostr\";\nimport type { Boost } from \"./podcasting2/boostagrams\";\nimport { boost as booster } from \"./podcasting2/boostagrams\";\nimport { WebLNProvider, SendPaymentResponse } from \"@webbtc/webln-types\";\nimport { KeysendResponse } from \"./types\";\n\nconst 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 default 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 result = await fetch(\n `${this.options.proxy}/lightning-address-details?${new URLSearchParams({\n ln: this.address,\n }).toString()}`,\n );\n const json = await result.json();\n\n this.parseResponse(json.lnurlp, json.keysend, json.nostr);\n }\n\n async fetchWithoutProxy() {\n if (!this.domain || !this.username) {\n return;\n }\n const lnurlResult = await fetch(this.lnurlpUrl());\n const keysendResult = await fetch(this.keysendUrl());\n const nostrResult = await fetch(this.nostrUrl());\n\n let lnurlData: LnUrlRawData | undefined;\n if (lnurlResult.ok) {\n lnurlData = await lnurlResult.json();\n }\n let keysendData: KeySendRawData | undefined;\n if (keysendResult.ok) {\n keysendData = await keysendResult.json();\n }\n let nostrData: NostrResponse | undefined;\n if (nostrResult.ok) {\n nostrData = await nostrResult.json();\n }\n\n this.parseResponse(lnurlData, keysendData, nostrData);\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 invoiceResult = await fetch(\n `${this.options.proxy}/generate-invoice?${new URLSearchParams({\n ln: this.address,\n ...params,\n }).toString()}`,\n );\n const json = await invoiceResult.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 invoiceResult = await fetch(callbackUrl.toString());\n data = await invoiceResult.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\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 booster(\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 parseResponse(\n lnurlpData: LnUrlRawData | undefined,\n keysendData: KeySendRawData | undefined,\n nostrData: NostrResponse | undefined,\n ) {\n if (lnurlpData) {\n this.lnurlpData = parseLnUrlPayResponse(lnurlpData);\n }\n if (keysendData) {\n this.keysendData = parseKeysendResponse(keysendData);\n }\n if (nostrData) {\n [this.nostrData, this.nostrPubkey, this.nostrRelays] = parseNostrResponse(\n nostrData,\n this.username,\n );\n }\n }\n}\n","const numSatsInBtc = 100_000_000;\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 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":["MemoryStorage","constructor","initial","this","storage","getItem","key","setItem","value","memoryStorage","fetchWithL402","async","url","fetchArgs","options","headerKey","webln","globalThis","Error","store","cache","mode","headers","cachedL402Data","data","JSON","parse","token","preimage","fetch","header","initResp","get","details","input","string","replace","trim","keyValuePairs","regex","match","exec","parseL402","macaroon","inv","invoice","enable","invResp","sendPayment","stringify","boost","args","keysend","amount","Math","floor","value_msat","weblnParams","destination","customRecords","customKey","customValue","response","URL_REGEX","test","isValidAmount","min","max","Invoice","_decodedInvoice$descr","_args$verify","_args$preimage","paymentRequest","paymentHash","verify","satoshi","expiry","timestamp","createdDate","expiryDate","description","pr","decodedInvoice","decoded","decode","sections","hashTag","find","name","amountTag","undefined","parseInt","expiryTag","timestampTag","descriptionTag","_unused","decodeInvoice","Date","validatePreimage","verifyPayment","sha256","Hex","toString","preimageHash","result","json","settled","generateZapEvent","comment","p","e","relays","nostr","nostrTags","push","nostrEvent","pubkey","getPublicKey","created_at","now","kind","tags","content","id","getEventHash","signEvent","event","Array","isArray","i","length","tag","j","serializeEvent","evt","validateEvent","nostrData","username","nostrPubkey","nostrRelays","_nostrData$names","_nostrData$relays","names","LN_ADDRESS_REGEX","LightningAddress","address","domain","lnurlpData","keysendData","proxy","Object","assign","toLowerCase","getWebLN","fetchWithProxy","fetchWithoutProxy","URLSearchParams","ln","parseResponse","lnurlp","lnurlpUrl","keysendResult","keysendUrl","nostrResult","nostrUrl","lnurlData","lnurlResult","ok","params","invoiceResult","callback","isUrl","callbackUrl","URL","search","invoiceArgs","msat","commentAllowed","invoiceParams","payerdata","generateInvoice","booster","allowsNostr","zapParams","zapInvoice","ceil","Number","minSendable","maxSendable","metadata","metadataHash","image","identifier","k","v","payerData","hostname","_unused2","fixed","rawData","parseLnUrlPayResponse","status","customData","parseKeysendResponse","parseNostrResponse","getFiatBtcRate","currency","rate_float","numSatsInBtc","rate","locale","getFiatValue","toLocaleString","style"],"mappings":"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"}
|
package/dist/index.module.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.js","sources":["../src/utils/storage.ts","../src/l402/index.ts","../src/l402/parse.ts","../src/podcasting2/boostagrams.ts","../src/utils/keysend.ts","../src/utils/lnurl.ts","../src/invoice.ts","../src/utils/invoice.ts","../src/utils/nostr.ts","../src/lightning-address.ts","../src/utils/fiat.ts"],"sourcesContent":["export class MemoryStorage {\n storage;\n\n constructor(initial?: Record<string, unknown>) {\n this.storage = initial || {};\n }\n\n getItem(key: string) {\n return this.storage[key];\n }\n\n setItem(key: string, value: unknown) {\n this.storage[key] = value;\n }\n}\n\nexport class NoStorage {\n constructor(initial?: unknown) {}\n\n getItem(key: string) {\n return null;\n }\n\n setItem(key: string, value: unknown) {}\n}\n\nexport default MemoryStorage;\n","import MemoryStorage from \"../utils/storage\";\nimport { WebLNProvider } from \"@webbtc/webln-types\";\nimport { parseL402 } from \"./parse\";\n\nexport * as storage from \"../utils/storage\";\nconst memoryStorage = new MemoryStorage();\n\nconst HEADER_KEY = \"L402\"; // we have to update this to L402 at some point\n\nexport const fetchWithL402 = async (\n url: string,\n fetchArgs: RequestInit,\n options: {\n headerKey?: string;\n webln?: WebLNProvider;\n store?: Storage;\n },\n) => {\n if (!options) {\n options = {};\n }\n const headerKey = options.headerKey || HEADER_KEY;\n const webln: WebLNProvider = options.webln || globalThis.webln;\n if (!webln) {\n throw new Error(\"WebLN is missing\");\n }\n const store = options.store || memoryStorage;\n if (!fetchArgs) {\n fetchArgs = {};\n }\n fetchArgs.cache = \"no-store\";\n fetchArgs.mode = \"cors\";\n if (!fetchArgs.headers) {\n fetchArgs.headers = {};\n }\n const cachedL402Data = store.getItem(url);\n if (cachedL402Data) {\n const data = JSON.parse(cachedL402Data);\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${data.token}:${data.preimage}`;\n return await fetch(url, fetchArgs);\n }\n\n fetchArgs.headers[\"Accept-Authenticate\"] = headerKey;\n const initResp = await fetch(url, fetchArgs);\n const header = initResp.headers.get(\"www-authenticate\");\n if (!header) {\n return initResp;\n }\n\n const details = parseL402(header);\n const token = details.token || details.macaroon;\n const inv = details.invoice;\n\n await webln.enable();\n const invResp = await webln.sendPayment(inv);\n\n store.setItem(\n url,\n JSON.stringify({\n token: token,\n preimage: invResp.preimage,\n }),\n );\n\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${token}:${invResp.preimage}`;\n return await fetch(url, fetchArgs);\n};\n\nexport default fetchWithL402;\n","export const parseL402 = (input: string): Record<string, string> => {\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 = {};\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 return keyValuePairs;\n};\n","import { WebLNProvider } from \"@webbtc/webln-types\";\n\ntype BoostOptions = {\n webln?: unknown;\n};\n\ntype BoostArguments = {\n destination: string;\n customKey?: string;\n customValue?: string;\n amount?: number;\n boost: Boost;\n};\n\ntype WeblnBoostParams = {\n destination: string;\n amount: number;\n customRecords: Record<string, string>;\n};\n\nexport type Boost = {\n action: string;\n value_msat: number;\n value_msat_total: number;\n app_name: string;\n app_version: string;\n feedId: string;\n podcast: string;\n episode: string;\n ts: number;\n name: string;\n sender_name: string;\n};\n\nexport const boost = async (args: BoostArguments, options?: BoostOptions) => {\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\nexport default boost;\n","import type { KeysendResponse } from \"../types\";\n\nconst TAG_KEYSEND = \"keysend\";\n\nexport type KeySendRawData = {\n tag: string;\n status: string;\n customData: { customKey: string; customValue: string }[];\n pubkey: string;\n};\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\n if (\n !(\"customKey\" in data.customData[0]) ||\n data.customData[0][\"customKey\"] != \"696969\"\n )\n throw new Error(\"Unable to find customKey\");\n\n if (\n !(\"customValue\" in data.customData[0]) ||\n !data.customData[0][\"customValue\"]\n )\n throw new Error(\"Unable to find customValue\");\n\n if (!data.pubkey) throw new Error(\"Pubkey does not exist\");\n\n const destination = data.pubkey;\n const customKey = data.customData[0][\"customKey\"];\n const customValue = data.customData[0][\"customValue\"];\n\n return {\n destination,\n customKey,\n customValue,\n };\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\n\nimport type {\n LUD18ServicePayerData,\n LnUrlPayResponse,\n LnUrlRawData,\n} from \"../types\";\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 = (data: LnUrlRawData): 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 = sha256(data.metadata + \"\").toString(Hex);\n } catch {\n metadata = [];\n metadataHash = sha256(\"[]\").toString(Hex);\n }\n\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 \"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 description,\n image,\n payerData,\n commentAllowed: Number(data.commentAllowed) || 0,\n rawData: data,\n allowsNostr: data.allowsNostr || false,\n };\n};\n","import { decodeInvoice } from \"./utils/invoice\";\nimport Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { InvoiceArgs } from \"./types\";\n\nexport default class Invoice {\n paymentRequest: string;\n paymentHash: string;\n preimage: string | null;\n verify: string | null;\n satoshi: number;\n expiry: number; // expiry in seconds (not a timestamp)\n timestamp: number; // created date in seconds\n createdDate: Date;\n expiryDate: Date;\n description: string | 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.timestamp = decodedInvoice.timestamp;\n this.expiry = decodedInvoice.expiry;\n this.createdDate = new Date(this.timestamp * 1000);\n this.expiryDate = new Date((this.timestamp + this.expiry) * 1000);\n this.description = decodedInvoice.description ?? null;\n this.verify = args.verify ?? null;\n this.preimage = args.preimage ?? 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 try {\n const preimageHash = sha256(Hex.parse(preimage)).toString(Hex);\n return this.paymentHash === preimageHash;\n } catch {\n return false;\n }\n }\n\n async verifyPayment(): Promise<boolean> {\n if (!this.verify) throw new Error(\"LNURL verify not available\");\n const result = await fetch(this.verify);\n const json = await result.json();\n if (json.preimage) {\n this.preimage = json.preimage;\n }\n\n return json.settled;\n }\n}\n","import { decode } from \"light-bolt11-decoder\";\n\ntype DecodedInvoice = {\n paymentHash: string;\n satoshi: number;\n timestamp: number;\n expiry: number;\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 const amountTag = decoded.sections.find((value) => value.name === \"amount\");\n\n if (amountTag?.name !== \"amount\" || amountTag.value === undefined)\n return null;\n\n const satoshi = parseInt(amountTag.value) / 1000; // millisats\n\n const expiryTag = decoded.sections.find((value) => value.name === \"expiry\");\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 if (expiryTag?.name !== \"expiry\" || expiryTag.value === undefined)\n return null;\n\n const expiry = expiryTag.value;\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 timestamp,\n expiry,\n description,\n };\n } catch {\n return null;\n }\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { Event, NostrResponse, ZapArgs, ZapOptions } from \"../types\";\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 sha256(serializeEvent(event)).toString(Hex);\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","import { KeySendRawData, parseKeysendResponse } from \"./utils/keysend\";\nimport { isUrl, isValidAmount, parseLnUrlPayResponse } from \"./utils/lnurl\";\nimport Invoice from \"./invoice\";\nimport {\n InvoiceArgs,\n LnUrlPayResponse,\n LnUrlRawData,\n NostrResponse,\n RequestInvoiceArgs,\n ZapArgs,\n ZapOptions,\n} from \"./types\";\nimport { generateZapEvent, parseNostrResponse } from \"./utils/nostr\";\nimport type { Boost } from \"./podcasting2/boostagrams\";\nimport { boost as booster } from \"./podcasting2/boostagrams\";\nimport { WebLNProvider, SendPaymentResponse } from \"@webbtc/webln-types\";\nimport { KeysendResponse } from \"./types\";\n\nconst 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 default 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 result = await fetch(\n `${this.options.proxy}/lightning-address-details?${new URLSearchParams({\n ln: this.address,\n }).toString()}`,\n );\n const json = await result.json();\n\n this.parseResponse(json.lnurlp, json.keysend, json.nostr);\n }\n\n async fetchWithoutProxy() {\n if (!this.domain || !this.username) {\n return;\n }\n const lnurlResult = await fetch(this.lnurlpUrl());\n const keysendResult = await fetch(this.keysendUrl());\n const nostrResult = await fetch(this.nostrUrl());\n\n let lnurlData: LnUrlRawData | undefined;\n if (lnurlResult.ok) {\n lnurlData = await lnurlResult.json();\n }\n let keysendData: KeySendRawData | undefined;\n if (keysendResult.ok) {\n keysendData = await keysendResult.json();\n }\n let nostrData: NostrResponse | undefined;\n if (nostrResult.ok) {\n nostrData = await nostrResult.json();\n }\n\n this.parseResponse(lnurlData, keysendData, nostrData);\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 invoiceResult = await fetch(\n `${this.options.proxy}/generate-invoice?${new URLSearchParams({\n ln: this.address,\n ...params,\n }).toString()}`,\n );\n const json = await invoiceResult.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 invoiceResult = await fetch(callbackUrl.toString());\n data = await invoiceResult.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\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 booster(\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 parseResponse(\n lnurlpData: LnUrlRawData | undefined,\n keysendData: KeySendRawData | undefined,\n nostrData: NostrResponse | undefined,\n ) {\n if (lnurlpData) {\n this.lnurlpData = parseLnUrlPayResponse(lnurlpData);\n }\n if (keysendData) {\n this.keysendData = parseKeysendResponse(keysendData);\n }\n if (nostrData) {\n [this.nostrData, this.nostrPubkey, this.nostrRelays] = parseNostrResponse(\n nostrData,\n this.username,\n );\n }\n }\n}\n","const numSatsInBtc = 100_000_000;\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 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":["MemoryStorage","initial","storage","this","getItem","key","setItem","value","NoStorage","memoryStorage","fetchWithL402","url","fetchArgs","options","_exit2","_temp3","_result","headers","headerKey","fetch","then","initResp","header","get","details","input","match","string","replace","trim","keyValuePairs","regex","exec","parseL402","token","macaroon","inv","invoice","Promise","resolve","webln","enable","sendPayment","invResp","store","JSON","stringify","preimage","globalThis","Error","cache","mode","_temp4","cachedL402Data","data","parse","_await$fetch","e","reject","boost","args","keysend","amount","Math","floor","value_msat","weblnParams","destination","customRecords","customKey","customValue","URL_REGEX","test","_ref","min","max","Invoice","paymentRequest","paymentHash","verify","satoshi","expiry","timestamp","createdDate","expiryDate","description","pr","decodedInvoice","decoded","decode","sections","hashTag","find","name","amountTag","undefined","parseInt","timestampTag","expiryTag","descriptionTag","_unused","decodeInvoice","Date","_decodedInvoice$descr","_args$verify","_args$preimage","isPaid","_this2","validatePreimage","verifyPayment","_proto","sha256","Hex","toString","preimageHash","_this4","result","json","settled","generateZapEvent","comment","p","relays","nostr","nostrTags","concat","push","getPublicKey","pubkey","nostrEvent","created_at","now","kind","tags","content","id","getEventHash","signEvent","event","Array","isArray","i","length","tag","j","serializeEvent","evt","validateEvent","parseNostrResponse","nostrData","username","nostrPubkey","nostrRelays","_nostrData$names","names","_nostrData$relays","LN_ADDRESS_REGEX","LightningAddress","address","domain","lnurlpData","keysendData","proxy","Object","assign","toLowerCase","getWebLN","fetchWithProxy","fetchWithoutProxy","URLSearchParams","ln","parseResponse","lnurlp","_this6","lnurlpUrl","lnurlResult","keysendUrl","keysendResult","nostrUrl","nostrResult","_temp6","_temp2","lnurlData","_temp","ok","_nostrResult$json","_keysendResult$json","_lnurlResult$json","_temp5","generateInvoice","params","_temp9","invoiceArgs","_this8","_extends","invoiceResult","callback","isUrl","callbackUrl","search","_invoiceResult$json","_temp10","requestInvoice","_this10","msat","_this10$lnurlpData","commentAllowed","isValidAmount","invoiceParams","payerdata","_this12","_this12$keysendData","booster","zapInvoice","_this14","allowsNostr","_this14$lnurlpData","zapParams","zap","_invoice","_sendPayment","call","metadata","metadataHash","ceil","Number","minSendable","maxSendable","_metadata$i","k","v","identifier","image","payerData","URL","hostname","_unused2","fixed","rawData","parseLnUrlPayResponse","status","customData","parseKeysendResponse","_parseNostrResponse","getFiatBtcRate","currency","response","rate_float","getFiatValue","rate","_ref2","_ref3","locale","fiatValue","toLocaleString","style"],"mappings":"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"}
|
package/dist/index.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/utils/storage.ts","../src/l402/index.ts","../src/l402/parse.ts","../src/podcasting2/boostagrams.ts","../src/utils/keysend.ts","../src/utils/lnurl.ts","../src/invoice.ts","../src/utils/invoice.ts","../src/utils/nostr.ts","../src/lightning-address.ts","../src/utils/fiat.ts"],"sourcesContent":["export class MemoryStorage {\n storage;\n\n constructor(initial?: Record<string, unknown>) {\n this.storage = initial || {};\n }\n\n getItem(key: string) {\n return this.storage[key];\n }\n\n setItem(key: string, value: unknown) {\n this.storage[key] = value;\n }\n}\n\nexport class NoStorage {\n constructor(initial?: unknown) {}\n\n getItem(key: string) {\n return null;\n }\n\n setItem(key: string, value: unknown) {}\n}\n\nexport default MemoryStorage;\n","import MemoryStorage from \"../utils/storage\";\nimport { WebLNProvider } from \"@webbtc/webln-types\";\nimport { parseL402 } from \"./parse\";\n\nexport * as storage from \"../utils/storage\";\nconst memoryStorage = new MemoryStorage();\n\nconst HEADER_KEY = \"L402\"; // we have to update this to L402 at some point\n\nexport const fetchWithL402 = async (\n url: string,\n fetchArgs: RequestInit,\n options: {\n headerKey?: string;\n webln?: WebLNProvider;\n store?: Storage;\n },\n) => {\n if (!options) {\n options = {};\n }\n const headerKey = options.headerKey || HEADER_KEY;\n const webln: WebLNProvider = options.webln || globalThis.webln;\n if (!webln) {\n throw new Error(\"WebLN is missing\");\n }\n const store = options.store || memoryStorage;\n if (!fetchArgs) {\n fetchArgs = {};\n }\n fetchArgs.cache = \"no-store\";\n fetchArgs.mode = \"cors\";\n if (!fetchArgs.headers) {\n fetchArgs.headers = {};\n }\n const cachedL402Data = store.getItem(url);\n if (cachedL402Data) {\n const data = JSON.parse(cachedL402Data);\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${data.token}:${data.preimage}`;\n return await fetch(url, fetchArgs);\n }\n\n fetchArgs.headers[\"Accept-Authenticate\"] = headerKey;\n const initResp = await fetch(url, fetchArgs);\n const header = initResp.headers.get(\"www-authenticate\");\n if (!header) {\n return initResp;\n }\n\n const details = parseL402(header);\n const token = details.token || details.macaroon;\n const inv = details.invoice;\n\n await webln.enable();\n const invResp = await webln.sendPayment(inv);\n\n store.setItem(\n url,\n JSON.stringify({\n token: token,\n preimage: invResp.preimage,\n }),\n );\n\n fetchArgs.headers[\n \"Authorization\"\n ] = `${headerKey} ${token}:${invResp.preimage}`;\n return await fetch(url, fetchArgs);\n};\n\nexport default fetchWithL402;\n","export const parseL402 = (input: string): Record<string, string> => {\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 = {};\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 return keyValuePairs;\n};\n","import { WebLNProvider } from \"@webbtc/webln-types\";\n\ntype BoostOptions = {\n webln?: unknown;\n};\n\ntype BoostArguments = {\n destination: string;\n customKey?: string;\n customValue?: string;\n amount?: number;\n boost: Boost;\n};\n\ntype WeblnBoostParams = {\n destination: string;\n amount: number;\n customRecords: Record<string, string>;\n};\n\nexport type Boost = {\n action: string;\n value_msat: number;\n value_msat_total: number;\n app_name: string;\n app_version: string;\n feedId: string;\n podcast: string;\n episode: string;\n ts: number;\n name: string;\n sender_name: string;\n};\n\nexport const boost = async (args: BoostArguments, options?: BoostOptions) => {\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\nexport default boost;\n","import type { KeysendResponse } from \"../types\";\n\nconst TAG_KEYSEND = \"keysend\";\n\nexport type KeySendRawData = {\n tag: string;\n status: string;\n customData: { customKey: string; customValue: string }[];\n pubkey: string;\n};\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\n if (\n !(\"customKey\" in data.customData[0]) ||\n data.customData[0][\"customKey\"] != \"696969\"\n )\n throw new Error(\"Unable to find customKey\");\n\n if (\n !(\"customValue\" in data.customData[0]) ||\n !data.customData[0][\"customValue\"]\n )\n throw new Error(\"Unable to find customValue\");\n\n if (!data.pubkey) throw new Error(\"Pubkey does not exist\");\n\n const destination = data.pubkey;\n const customKey = data.customData[0][\"customKey\"];\n const customValue = data.customData[0][\"customValue\"];\n\n return {\n destination,\n customKey,\n customValue,\n };\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\n\nimport type {\n LUD18ServicePayerData,\n LnUrlPayResponse,\n LnUrlRawData,\n} from \"../types\";\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 = (data: LnUrlRawData): 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 = sha256(data.metadata + \"\").toString(Hex);\n } catch {\n metadata = [];\n metadataHash = sha256(\"[]\").toString(Hex);\n }\n\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 \"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 description,\n image,\n payerData,\n commentAllowed: Number(data.commentAllowed) || 0,\n rawData: data,\n allowsNostr: data.allowsNostr || false,\n };\n};\n","import { decodeInvoice } from \"./utils/invoice\";\nimport Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { InvoiceArgs } from \"./types\";\n\nexport default class Invoice {\n paymentRequest: string;\n paymentHash: string;\n preimage: string | null;\n verify: string | null;\n satoshi: number;\n expiry: number; // expiry in seconds (not a timestamp)\n timestamp: number; // created date in seconds\n createdDate: Date;\n expiryDate: Date;\n description: string | 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.timestamp = decodedInvoice.timestamp;\n this.expiry = decodedInvoice.expiry;\n this.createdDate = new Date(this.timestamp * 1000);\n this.expiryDate = new Date((this.timestamp + this.expiry) * 1000);\n this.description = decodedInvoice.description ?? null;\n this.verify = args.verify ?? null;\n this.preimage = args.preimage ?? 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 try {\n const preimageHash = sha256(Hex.parse(preimage)).toString(Hex);\n return this.paymentHash === preimageHash;\n } catch {\n return false;\n }\n }\n\n async verifyPayment(): Promise<boolean> {\n if (!this.verify) throw new Error(\"LNURL verify not available\");\n const result = await fetch(this.verify);\n const json = await result.json();\n if (json.preimage) {\n this.preimage = json.preimage;\n }\n\n return json.settled;\n }\n}\n","import { decode } from \"light-bolt11-decoder\";\n\ntype DecodedInvoice = {\n paymentHash: string;\n satoshi: number;\n timestamp: number;\n expiry: number;\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 const amountTag = decoded.sections.find((value) => value.name === \"amount\");\n\n if (amountTag?.name !== \"amount\" || amountTag.value === undefined)\n return null;\n\n const satoshi = parseInt(amountTag.value) / 1000; // millisats\n\n const expiryTag = decoded.sections.find((value) => value.name === \"expiry\");\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 if (expiryTag?.name !== \"expiry\" || expiryTag.value === undefined)\n return null;\n\n const expiry = expiryTag.value;\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 timestamp,\n expiry,\n description,\n };\n } catch {\n return null;\n }\n};\n","import Hex from \"crypto-js/enc-hex.js\";\nimport sha256 from \"crypto-js/sha256.js\";\nimport { Event, NostrResponse, ZapArgs, ZapOptions } from \"../types\";\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 sha256(serializeEvent(event)).toString(Hex);\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","import { KeySendRawData, parseKeysendResponse } from \"./utils/keysend\";\nimport { isUrl, isValidAmount, parseLnUrlPayResponse } from \"./utils/lnurl\";\nimport Invoice from \"./invoice\";\nimport {\n InvoiceArgs,\n LnUrlPayResponse,\n LnUrlRawData,\n NostrResponse,\n RequestInvoiceArgs,\n ZapArgs,\n ZapOptions,\n} from \"./types\";\nimport { generateZapEvent, parseNostrResponse } from \"./utils/nostr\";\nimport type { Boost } from \"./podcasting2/boostagrams\";\nimport { boost as booster } from \"./podcasting2/boostagrams\";\nimport { WebLNProvider, SendPaymentResponse } from \"@webbtc/webln-types\";\nimport { KeysendResponse } from \"./types\";\n\nconst 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 default 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 result = await fetch(\n `${this.options.proxy}/lightning-address-details?${new URLSearchParams({\n ln: this.address,\n }).toString()}`,\n );\n const json = await result.json();\n\n this.parseResponse(json.lnurlp, json.keysend, json.nostr);\n }\n\n async fetchWithoutProxy() {\n if (!this.domain || !this.username) {\n return;\n }\n const lnurlResult = await fetch(this.lnurlpUrl());\n const keysendResult = await fetch(this.keysendUrl());\n const nostrResult = await fetch(this.nostrUrl());\n\n let lnurlData: LnUrlRawData | undefined;\n if (lnurlResult.ok) {\n lnurlData = await lnurlResult.json();\n }\n let keysendData: KeySendRawData | undefined;\n if (keysendResult.ok) {\n keysendData = await keysendResult.json();\n }\n let nostrData: NostrResponse | undefined;\n if (nostrResult.ok) {\n nostrData = await nostrResult.json();\n }\n\n this.parseResponse(lnurlData, keysendData, nostrData);\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 invoiceResult = await fetch(\n `${this.options.proxy}/generate-invoice?${new URLSearchParams({\n ln: this.address,\n ...params,\n }).toString()}`,\n );\n const json = await invoiceResult.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 invoiceResult = await fetch(callbackUrl.toString());\n data = await invoiceResult.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\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 booster(\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 parseResponse(\n lnurlpData: LnUrlRawData | undefined,\n keysendData: KeySendRawData | undefined,\n nostrData: NostrResponse | undefined,\n ) {\n if (lnurlpData) {\n this.lnurlpData = parseLnUrlPayResponse(lnurlpData);\n }\n if (keysendData) {\n this.keysendData = parseKeysendResponse(keysendData);\n }\n if (nostrData) {\n [this.nostrData, this.nostrPubkey, this.nostrRelays] = parseNostrResponse(\n nostrData,\n this.username,\n );\n }\n }\n}\n","const numSatsInBtc = 100_000_000;\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 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":["MemoryStorage","initial","storage","this","getItem","key","setItem","value","NoStorage","memoryStorage","fetchWithL402","url","fetchArgs","options","_exit2","_temp3","_result","headers","headerKey","fetch","then","initResp","header","get","details","input","match","string","replace","trim","keyValuePairs","regex","exec","parseL402","token","macaroon","inv","invoice","Promise","resolve","webln","enable","sendPayment","invResp","store","JSON","stringify","preimage","globalThis","Error","cache","mode","_temp4","cachedL402Data","data","parse","_await$fetch","e","reject","boost","args","keysend","amount","Math","floor","value_msat","weblnParams","destination","customRecords","customKey","customValue","URL_REGEX","test","_ref","min","max","Invoice","paymentRequest","paymentHash","verify","satoshi","expiry","timestamp","createdDate","expiryDate","description","pr","decodedInvoice","decoded","decode","sections","hashTag","find","name","amountTag","undefined","parseInt","timestampTag","expiryTag","descriptionTag","_unused","decodeInvoice","Date","_decodedInvoice$descr","_args$verify","_args$preimage","isPaid","_this2","validatePreimage","verifyPayment","_proto","sha256","Hex","toString","preimageHash","_this4","result","json","settled","generateZapEvent","comment","p","relays","nostr","nostrTags","concat","push","getPublicKey","pubkey","nostrEvent","created_at","now","kind","tags","content","id","getEventHash","signEvent","event","Array","isArray","i","length","tag","j","serializeEvent","evt","validateEvent","parseNostrResponse","nostrData","username","nostrPubkey","nostrRelays","_nostrData$names","names","_nostrData$relays","LN_ADDRESS_REGEX","LightningAddress","address","domain","lnurlpData","keysendData","proxy","Object","assign","toLowerCase","getWebLN","fetchWithProxy","fetchWithoutProxy","URLSearchParams","ln","parseResponse","lnurlp","_this6","lnurlpUrl","lnurlResult","keysendUrl","keysendResult","nostrUrl","nostrResult","_temp6","_temp2","lnurlData","_temp","ok","_nostrResult$json","_keysendResult$json","_lnurlResult$json","_temp5","generateInvoice","params","_temp9","invoiceArgs","_this8","_extends","invoiceResult","callback","isUrl","callbackUrl","search","_invoiceResult$json","_temp10","requestInvoice","_this10","msat","_this10$lnurlpData","commentAllowed","isValidAmount","invoiceParams","payerdata","_this12","_this12$keysendData","booster","zapInvoice","_this14","allowsNostr","_this14$lnurlpData","zapParams","zap","_invoice","_sendPayment","call","metadata","metadataHash","ceil","Number","minSendable","maxSendable","_metadata$i","k","v","identifier","image","payerData","URL","hostname","_unused2","fixed","rawData","parseLnUrlPayResponse","status","customData","parseKeysendResponse","_parseNostrResponse","getFiatBtcRate","currency","response","rate_float","getFiatValue","rate","_ref2","_ref3","locale","fiatValue","toLocaleString","style"],"mappings":"wjBAGE,WAAA,SAAAA,EAAYC,QAFZC,aAAO,EAGLC,KAAKD,QAAUD,GAAW,CAAA,CAC5B,CAAC,IAEDG,EAAAA,EAAAA,UASF,OATEA,EAAAA,QAAA,SAAQC,GACN,OAAOF,KAAKD,QAAQG,EACtB,EAEAC,EAAAA,QAAA,SAAQD,EAAaE,GACnBJ,KAAKD,QAAQG,GAAOE,CACtB,EAGFP,CAAA,CAbE,4DAcA,WAAA,SAAAQ,EAAYP,IAAqB,IAEjCG,EAAAA,EAAAA,UAIuC,OAJvCA,EAAAA,QAAA,SAAQC,GACN,OACF,IAAA,IAEAC,QAAA,SAAQD,EAAaE,GAAkB,EAAAC,CAAA,CANvC,cCZiBC,EAAG,IAAIT,EAIbU,WACXC,EACAC,EACAC,GAKE,IAAA,IAoDgCC,EApDhCC,EAAA,SAAAC,GAAA,OAAAF,EAAAE,GA2BFJ,EAAUK,QAAQ,uBAAyBC,kBACpBC,MAAMR,EAAKC,IAAUQ,KAAA,SAAtCC,GACN,IAAMC,EAASD,EAASJ,QAAQM,IAAI,oBACpC,IAAKD,EACH,OAAOD,EAGT,IAAaG,ECnDU,SAACC,GAYxB,IAVA,IAOIC,EAPEC,EAASF,EAAMG,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,IAAIC,OAGvDC,EAAgB,CAAE,EAGlBC,EAAQ,uCAI0B,QAAhCL,EAAQK,EAAMC,KAAKL,KAGzBG,EAAcJ,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAMA,EAAM,GAG1D,QACF,CDgCkBO,CAAUX,GACfY,EAAGV,EAAQU,OAASV,EAAQW,SAC9BC,EAAGZ,EAAQa,QAAQ,OAAAC,QAAAC,QAEtBC,EAAMC,UAAQrB,KAAA,WAAA,OAAAkB,QAAAC,QACEC,EAAME,YAAYN,IAAIhB,KAAA,SAAtCuB,GAY0C,OAVhDC,EAAMtC,QACJK,EACAkC,KAAKC,UAAU,CACbZ,MAAOA,EACPa,SAAUJ,EAAQI,YAItBnC,EAAUK,QACO,cACVC,EAAS,IAAIgB,EAAK,IAAIS,EAAQI,yBACxB5B,MAAMR,EAAKC,GAAU,EAAA,EAAA,GAAA,EAnD7BC,IACHA,EAAU,CACX,GACD,MAAkBA,EAAQK,WAdT,OAeXsB,EAAuB3B,EAAQ2B,OAASQ,WAAWR,MACzD,IAAKA,EACH,MAAUS,IAAAA,MAAM,oBAElB,IAAWL,EAAG/B,EAAQ+B,OAASnC,EAC1BG,IACHA,EAAY,CAAA,GAEdA,EAAUsC,MAAQ,WAClBtC,EAAUuC,KAAO,OACZvC,EAAUK,UACbL,EAAUK,QAAU,CACrB,GACD,MAAuB2B,EAAMxC,QAAQO,GAAKyC,EAAA,WAAA,GACtCC,EACF,CAAA,IAAUC,EAAGT,KAAKU,MAAMF,GAG0B,OAFlDzC,EAAUK,QACO,cACVC,EAAaoC,IAAAA,EAAKpB,UAASoB,EAAKP,yBAC1B5B,MAAMR,EAAKC,IAAUQ,KAAA,SAAAoC,GAAA,OAAA1C,EAAA,EAAA0C,CAAA,EAAA,CAAA,CANM,GAMN,OAAAlB,QAAAC,QAAAa,GAAAA,EAAAhC,KAAAgC,EAAAhC,KAAAL,GAAAA,EAAAqC,GA6BrC,CAAA,MAAAK,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,yDEpCYE,EAAAA,SAAeC,EAAsB/C,GAAsB,IACtE,IAAQ8C,EAAUC,EAAVD,MACH9C,IACHA,EAAU,CACX,GACD,MAA6BA,EAAQ2B,OAASQ,WAAWR,MAEzD,IAAKA,EACH,MAAM,IAASS,MAAC,uBAElB,IAAKT,EAAMqB,QACT,MAAM,IAASZ,MAAC,mDAGlB,IAAMa,EAASF,EAAKE,QAAUC,KAAKC,MAAML,EAAMM,WAAa,KAE3CC,EAAqB,CACpCC,YAAaP,EAAKO,YAClBL,OAAQA,EACRM,cAAe,CACb,QAAWvB,KAAKC,UAAUa,KAK7B,OAFGC,EAAKS,WAAaT,EAAKU,cACzBJ,EAAYE,cAAcR,EAAKS,WAAaT,EAAKU,6BAE7C9B,EAAMC,iDACWD,EAAMqB,QAAQK,GAAY,EAElD,CAAA,MAAAT,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,2QC7DD,MCQE,+JAEmB,SAAC9C,GACpB,QAAKA,GACW4D,EAACC,KAAK7D,EACxB,IAE6B,SAAH8D,GACxBX,IAAAA,IAAAA,OAQA,OAAOA,EAAS,GAAKA,GAPrBY,EAAAA,KAOsCZ,GANnCW,EAAHE,GAOF,iBCVE,WAAA,SAAAC,EAAYhB,aAEV,QAbFiB,oBAAc,EAAA1E,KACd2E,iBAAW,EAAA3E,KACX4C,cACAgC,EAAAA,KAAAA,YACAC,EAAAA,KAAAA,oBACAC,YAAM,EAAA9E,KACN+E,eACAC,EAAAA,KAAAA,wBACAC,gBAAU,EAAAjF,KACVkF,iBAAW,EAGTlF,KAAK0E,eAAiBjB,EAAK0B,IACtBnF,KAAK0E,eACR,MAAU5B,IAAAA,MAAM,2BAElB,IAAoBsC,ECZK,SAC3BV,GAEA,IAAKA,EAAgB,OAAO,KAE5B,IACE,IAAMW,EAAUC,EAAAA,OAAOZ,GACvB,IAAKW,IAAYA,EAAQE,SAAU,YAEnC,IAAaC,EAAGH,EAAQE,SAASE,KAC/B,SAACrF,GAAK,MAAoB,iBAAVA,EAACsF,IAAuB,GAG1C,GAAsB,kBAAlBF,MAAAA,OAAAA,EAAAA,EAASE,QAA4BF,EAAQpF,MAAO,YAExD,IAAiBuE,EAAGa,EAAQpF,MAEbuF,EAAGN,EAAQE,SAASE,KAAK,SAACrF,GAAK,MAAoB,WAAVA,EAACsF,IAAiB,GAE1E,GAAwB,YAApBC,MAAAA,OAAAA,EAAAA,EAAWD,YAAyCE,IAApBD,EAAUvF,MAC5C,OAAO,KAET,IAAMyE,EAAUgB,SAASF,EAAUvF,OAAS,MAE1BiF,EAAQE,SAASE,KAAK,SAACrF,GAAUA,MAAe,WAAfA,EAAMsF,IAAiB,GAExDI,EAAGT,EAAQE,SAASE,KACpC,SAACrF,GAAK,MAAoB,cAAVA,EAACsF,IAAoB,GAGvC,GAA2B,eAAvBI,MAAAA,OAAAA,EAAAA,EAAcJ,QAAyBI,EAAa1F,MAAO,OAAO,KAEtE,IAAe2E,EAAGe,EAAa1F,MAE/B,GAAwB,YAApB2F,MAAAA,OAAAA,EAAAA,EAAWL,YAAyCE,IAApBG,EAAU3F,MAC5C,YAEF,IAAY0E,EAAGiB,EAAU3F,MAEL4F,EAAGX,EAAQE,SAASE,KACtC,SAACrF,GAAK,MAAoB,gBAAVA,EAACsF,IAAsB,GAQzC,MAAO,CACLf,YAAAA,EACAE,QAAAA,EACAE,UAAAA,EACAD,OAAAA,EACAI,YATyB,iBAAzBc,MAAAA,OAAAA,EAAAA,EAAgBN,MACE,MAAdM,OAAc,EAAdA,EAAgB5F,WAChBwF,EAWP,CAFC,MAAMK,GACN,OAAO,IACR,CACH,CD9C2BC,CAAclG,KAAK0E,gBAC1C,IAAKU,EACH,MAAM,IAAStC,MAAC,oCAElB9C,KAAK2E,YAAcS,EAAeT,YAClC3E,KAAK6E,QAAUO,EAAeP,QAC9B7E,KAAK+E,UAAYK,EAAeL,UAChC/E,KAAK8E,OAASM,EAAeN,OAC7B9E,KAAKgF,YAAc,IAAImB,KAAsB,IAAjBnG,KAAK+E,WACjC/E,KAAKiF,WAAa,IAAQkB,KAAkC,KAAhCnG,KAAK+E,UAAY/E,KAAK8E,SAClD9E,KAAKkF,YAA4C,SAA9BE,EAAeF,aAAekB,EAAA,KACjDpG,KAAK4E,OAAwB,OAAlByB,EAAG5C,EAAKmB,QAAUyB,EAAA,KAC7BrG,KAAK4C,SAA4B,OAApB0D,EAAG7C,EAAKb,UAAY0D,EAAA,IACnC,CAAC,IAEKC,EAAAA,EAAAA,iBAAAA,EAAAA,OAAM,WAAA,IAAA,IAAAC,EACNxG,KAAJ,GAAIwG,EAAK5D,SAAU,OAAOT,QAAAC,QAAAoE,EAAKC,iBAAiBD,EAAK5D,WAChD,GAAI4D,EAAK5B,OACC,OAAAzC,QAAAC,QAAAoE,EAAKE,iBAElB,MAAM,IAAS5D,MAAC,2BAEnB,CAAA,MAAAQ,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,EAAAqD,EAEDF,iBAAA,SAAiB7D,GACf,IAAKA,IAAa5C,KAAK2E,YAAa,OAAY,EAEhD,IACE,MAAqBiC,EAAM,QAACC,EAAG,QAACzD,MAAMR,IAAWkE,SAASD,WAC1D,OAAW7G,KAAC2E,cAAgBoC,CAG7B,CAFC,MAAAd,GACA,OAAO,CACR,CACH,IAEMS,cAAa,WAAA,IACZ,IAAAM,EAAAhH,KAAL,IAAKgH,EAAKpC,OAAQ,MAAU9B,IAAAA,MAAM,8BAA8B,OAAAX,QAAAC,QAC3CpB,MAAMgG,EAAKpC,SAA1BqC,KAAAA,SAAAA,0BACaA,EAAOC,QAAMjG,KAAA,SAA1BiG,GAKN,OAJIA,EAAKtE,WACPoE,EAAKpE,SAAWsE,EAAKtE,UAGZsE,EAACC,OAAQ,EACtB,GAAC,sCAjDD,GEboBC,WAAgB9C,EAEpC5D,GADEmE,IAAAA,IAAAA,QAASwC,EAAO/C,EAAP+C,QAASC,EAAAA,EAAAA,EAAGhE,EAACgB,EAADhB,EAAGiE,EAAAA,EAAAA,gBAC1B7G,IAAAA,EAAsB,CAAA,GAAE,IAExB,IAAW8G,EAAG9G,EAAQ8G,OAAS3E,WAAW2E,MAC1C,IAAKA,EACH,MAAM,IAAS1E,MAAC,iDAGlB,IAAe2E,EAAG,EACf,UAAQC,OAAKH,GACd,CAAC,SAAU1C,EAAQiC,aAOpB,OALGQ,GACFG,EAAUE,KAAK,CAAC,IAAKL,IAEnBhE,GACFmE,EAAUE,KAAK,CAAC,IAAKrE,IAGFkE,QAAAA,QAAAA,EAAMI,8BAArBC,GAEN,IAAgBC,EAAU,CACxBD,OAAAA,EACAE,WAAYnE,KAAKC,MAAMsC,KAAK6B,MAAQ,KACpCC,KAAM,KACNC,KAAMT,EACNU,QAAgB,MAAPd,EAAAA,EAAW,IAGmB,OAAzCS,EAAWM,GAAKC,EAAaP,GAChBN,QAAAA,QAAAA,EAAMc,UAAUR,GAAW,EACzC,CAAA,MAAAxE,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,EAEK,WAAwBiF,GAC5B,GAA6B,iBAAbA,EAACJ,QAAsB,OAAY,EACnD,GAAgC,iBAAhBI,EAACR,WAAyB,OAAY,EAKtD,IAAKS,MAAMC,QAAQF,EAAML,MAAO,OAAO,EACvC,IAAK,MAAQ,EAAGQ,EAAIH,EAAML,KAAKS,OAAQD,IAAK,CAC1C,IAASE,EAAGL,EAAML,KAAKQ,GACvB,IAAKF,MAAMC,QAAQG,GAAM,OAAO,EAChC,IAAK,MAAQ,EAAGC,EAAID,EAAID,OAAQE,IAC9B,GAAsB,mBAAPA,GAAiB,OACjC,CACF,CAED,OAAO,CACT,CAEM,SAAwBC,EAACC,GAC7B,IAAKC,EAAcD,GACjB,MAAM,IAASjG,MAAC,0DAElB,OAAOJ,KAAKC,UAAU,CACpB,EACAoG,EAAIlB,OACJkB,EAAIhB,WACJgB,EAAId,KACJc,EAAIb,KACJa,EAAIZ,SAER,UAE4BE,EAACE,GAC3B,SAAa,QAACO,EAAeP,IAAQzB,SAASD,EAAG,QACnD,UAEkCoC,EAChCC,EACAC,GAEA,IAAmCC,EAC/BC,MAMJ,OALIF,GAAYD,IAEdG,GADAD,EAA6B,OAAlBE,EAAGJ,EAAUK,YAAK,EAAfD,EAAkBH,IACJ,OAAAD,EAAAA,EAAU3B,aAAV,EAAAiC,EAAmBJ,QAAexD,GAGzD,CAACsD,EAAWE,EAAaC,EAClC,gHCrEMI,EACJ,oKASmBC,eAanB,WAAA,SAAAA,EAAYC,EAAiBjJ,GAAiCV,KAZ9D2J,aAAO,EAAA3J,KACPU,aAAO,EAAAV,KACPmJ,cAAQ,EAAAnJ,KACR4J,YACA/B,EAAAA,KAAAA,YACAgC,EAAAA,KAAAA,uBACAC,iBAAW,EAAA9J,KACXkJ,eAAS,EAAAlJ,KACToJ,iBACAC,EAAAA,KAAAA,iBACAhH,EAAAA,KAAAA,WAGE,EAAArC,KAAK2J,QAAUA,EACf3J,KAAKU,QAAU,CAAEqJ,MAtBQ,iCAuBzB/J,KAAKU,QAAUsJ,OAAOC,OAAOjK,KAAKU,QAASA,GAC3CV,KAAKoD,QACLpD,KAAKqC,MAAQrC,KAAKU,QAAQ2B,KAC5B,CAAC,IAEDe,EAAAA,EAAAA,iBAAAA,EAAAA,MAAA,WACE,IAAM6D,EAASwC,EAAiB5H,KAAK7B,KAAK2J,QAAQO,eAC9CjD,IACFjH,KAAKmJ,SAAWlC,EAAO,GACvBjH,KAAK4J,OAAS3C,EAAO,GAEzB,EAACN,EAEDwD,SAAA,WACE,OAAWnK,KAACqC,OAASQ,WAAWR,KAClC,IAEMrB,MAAK,WAAA,IACL,IAAAwF,EAAAxG,KAAJ,OACEmC,QAAAC,QADEoE,EAAK9F,QAAQqJ,MACRvD,EAAK4D,iBAEL5D,EAAK6D,oBAIVD,CAFL,MAEKA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,eAAc,WAAA,IAAA,IAAApD,EAEbhH,KADgBgB,OAAAA,QAAAA,QAAAA,MAChBgG,EAAKtG,QAAQqJ,MAAmC,8BAAA,IAAmBO,gBAAC,CACrEC,GAAIvD,EAAK2C,UACR7C,2BAHCG,GAAM,OAAA9E,QAAAC,QAKO6E,EAAOC,QAApBA,KAAAA,SAAAA,GAENF,EAAKwD,cAActD,EAAKuD,OAAQvD,EAAKxD,QAASwD,EAAKM,MAAO,EAC5D,GAAC,sCAEK6C,kBAAiB,WAAA,IAChB,IAAAK,EAAA1K,KAAL,OAAK0K,EAAKd,QAAWc,EAAKvB,yBAGAnI,MAAM0J,EAAKC,cAAY1J,KAAA,SAA3C2J,GAAW,OAAAzI,QAAAC,QACWpB,MAAM0J,EAAKG,eAAa5J,KAAA,SAA9C6J,GAAa,OAAA3I,QAAAC,QACOpB,MAAM0J,EAAKK,aAAW9J,KAAA,SAA1C+J,GAAW,SAAAC,IAAA,SAAAhI,IAAA,SAAAiI,IAejBR,EAAKF,cAAcW,EAAWrB,EAAaZ,EAAW,CALtD,IAAIA,EAAqCkC,EAAA,WAAA,GACrCJ,EAAYK,GAAE,OAAAlJ,QAAAC,QACE4I,EAAY9D,QAAMjG,KAAA,SAAAqK,GAApCpC,EAASoC,CAA4B,EANvC,CAIyC,GAJzC,OAAAF,GAAAA,EAAAnK,KAAAmK,EAAAnK,KAAAiK,GAAAA,GAAA,CAAA,MAA4CtK,EAAA,WAAA,GACxCkK,EAAcO,GAAE,OAAAlJ,QAAAC,QACE0I,EAAc5D,QAAMjG,KAAA,SAAAsK,GAAxCzB,EAAWyB,CAA8B,EAN3C,CAI4C,GAJ5C,OAAA3K,GAAAA,EAAAK,KAAAL,EAAAK,KAAAgC,GAAAA,GAAA,CAAA,IAAuCkI,kBACnCP,EAAYS,GAAE,OAAAlJ,QAAAC,QACEwI,EAAY1D,QAAMjG,KAAA,SAAAuK,GAApCL,EAAqCK,CAAA,EAAA,IAAA,OAAAC,GAAAA,EAAAxK,KAAAwK,EAAAxK,KAAAgK,GAAAA,GAAA,EAAA,EAAA,GAPtC9I,QAAAC,SAmBF,CAAA,MAAAkB,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,EAAAqD,EAEDgE,UAAA,WACE,iBAAkB3K,KAAK4J,OAAM,uBAAuB5J,KAAKmJ,QAC3D,IAEA0B,WAAA,WACE,MAAkB,WAAA7K,KAAK4J,+BAA8B5J,KAAKmJ,QAC5D,EAEA4B,EAAAA,SAAA,WACE,MAAkB,WAAA/K,KAAK4J,OAAsC,gCAAA5J,KAAKmJ,QACpE,EAEMuC,EAAAA,gBAAgBC,SAAAA,GAA8B,IAAA,IAC1CxI,EAD0CyI,EAAA,SAAA/K,GAuBlD,IAAM6D,EAAiBvB,GAAQA,EAAKgC,IAAMhC,EAAKgC,GAAG2B,WAClD,IAAKpC,EAAgB,UAAe5B,MAAC,+BAErC,IAAiB+I,EAAgB,CAAE1G,GAAIT,GAGvC,OAFIvB,GAAQA,EAAKyB,SAAQiH,EAAYjH,OAASzB,EAAKyB,OAAOkC,YAE/CrC,IAAAA,EAAQoH,EAAa,EA3B5BC,EAAA9L,qBAAA8L,EAAKpL,QAAQqJ,MACa/I,OAAAA,QAAAA,QAAAA,MACvB8K,EAAKpL,QAAQqJ,MAA0B,qBAAA,IAAmBO,gBAAAyB,EAAA,CAC3DxB,GAAIuB,EAAKnC,SACNgC,IACF7E,aACJ7F,KAAA,SALK+K,GAMaA,OAAAA,QAAAA,QAAAA,EAAc9E,QAAMjG,KAAA,SAAjCiG,GACN/D,EAAO+D,EAAKhF,OAAQ,EAEpB,GAAA,IAAK4J,EAAKjC,WACR,MAAM,IAAS/G,MAAC,uDAElB,IAAKgJ,EAAKjC,WAAWoC,WAAaC,EAAMJ,EAAKjC,WAAWoC,UACtD,MAAM,UAAU,+CAClB,IAAME,EAAc,QAAQL,EAAKjC,WAAWoC,UACgB,OAA5DE,EAAYC,OAAS,IAAI9B,gBAAgBqB,GAAQ7E,WAAW3E,QAAAC,QAChCpB,MAAMmL,EAAYrF,aAAxCkF,KAAAA,SAAAA,GACOA,OAAAA,QAAAA,QAAAA,EAAc9E,QAAMjG,KAAA,SAAAoL,GAAjClJ,EAAkCkJ,CAAA,EAAA,EAAA,IAAA,OAAAlK,QAAAC,QAAAkK,GAAAA,EAAArL,KAAAqL,EAAArL,KAAA2K,GAAAA,IAUrC,CAAA,MAAAtI,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,EAAAqD,EAEK4F,eAAc,SAAC9I,GAAwB,UACtCzD,KAAL,IAAKwM,EAAK3C,WACR,MAAU/G,IAAAA,MAAM,uDAElB,IAAM2J,EAAsB,IAAfhJ,EAAKoB,QACmB6H,EAAAF,EAAK3C,WAAlC8C,EAAAA,EAAAA,eAER,IAAKC,EAAc,CAAEjJ,OAAQ8I,EAAMlI,IAFXA,EAAAA,IAEgBC,IAFRkI,EAAHlI,MAG3B,MAAM,IAAS1B,MAAC,kBAClB,GACEW,EAAK4D,SACLsF,GACAA,EAAiB,GACjBlJ,EAAK4D,QAAQsB,OAASgE,EAEtB,MAAU7J,IAAAA,MACsB6J,8BAAAA,0BAGlC,IAAmBE,EAIf,CAAElJ,OAAQ8I,EAAK3F,YAKnB,OAJIrD,EAAK4D,UAASwF,EAAcxF,QAAU5D,EAAK4D,SAC3C5D,EAAKqJ,YACPD,EAAcC,UAAYpK,KAAKC,UAAUc,EAAKqJ,YAEhD3K,QAAAC,QAAOoK,EAAKd,gBAAgBmB,GAGxBrJ,CAFL,MAEKA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,eAAMA,EAAcG,YAAAA,IAAAA,EAAiB,GAAC,IAAA,IAAAoJ,EACrC/M,KAAL,IAAK+M,EAAKjD,YACR,MAAUhH,IAAAA,MAAM,wDAElB,MAAgDiK,EAAKjD,YAA7C9F,EAAAA,EAAAA,YAAaE,IAAAA,UAAWC,EAAW6I,EAAX7I,YACrB9B,EAAG0K,EAAK5C,WACnB,IAAK9H,EACH,MAAUS,IAAAA,MAAM,uBAElB,OAAOmK,QAAAA,QAAAA,EACL,CACEjJ,YAAAA,EACAE,UAAAA,EACAC,YAAAA,EACAR,OAAAA,EACAH,MAAAA,GAEF,CAAEnB,MAAAA,IAIA6K,CAFL,MAEKA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,WAEJxM,SAAAA,EAAAA,GADEmE,IAAAA,IAAAA,QAASwC,EAAO/C,EAAP+C,QAASE,EAAMjD,EAANiD,OAAQjE,EAAAA,EAAAA,WAC5B5C,IAAAA,EAAsB,CAAA,GAAE,IAEnB,IAAAyM,EAAAnN,KAAL,IAAKmN,EAAKtD,WACR,MAAM,IAAS/G,MAAC,uDAElB,IAAKqK,EAAK/D,YACR,MAAM,UAAU,2BAElB,IAAM9B,EAAI6F,EAAK/D,YACLqD,EAAa,IAAV5H,IACqBsI,EAAKtD,WAA/BuD,EAAAA,EAAAA,YAER,IAAKR,EAAc,CAAEjJ,OAAQ8I,EAAMlI,MAFdA,IAEmBC,IAFX6I,EAAH7I,MAGxB,MAAM,UAAU,kBAClB,IAAK4I,EAAa,MAAUtK,IAAAA,MAAM,uCAAuC,OAErDsE,QAAAA,QAAAA,EAClB,CACEvC,QAAS4H,EACTpF,QAAAA,EACAC,EAAAA,EACAhE,EAAAA,EACAiE,OAAAA,GAEF7G,IARI6H,KAAAA,SAAAA,GAUN,IAAM+E,EAA+C,CACnD3J,OAAQ8I,EAAK3F,WACbU,MAAO9E,KAAKC,UAAU4F,IACtB,OAEoBpG,QAAAC,QAAA+K,EAAKzB,gBAAgB4B,KAE5C,CAAA,MAAAhK,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,EAAAqD,EAEK4G,IAAG,SACP9J,EACA/C,QAAAA,IAAAA,IAAAA,EAAsB,CAAA,GAAE,IAER,IAAVwB,EAAUlC,KAAKkN,WAAWzJ,EAAM/C,GAChC2B,EADUrC,KACGmK,WACnB,IAAK9H,EACH,MAAUS,IAAAA,MAAM,uBACjB,OAAAX,QAAAC,QACKC,EAAMC,gCACKD,EAAME,YAAW,OAAAJ,QAAAC,QAAQF,GAA1CjB,KAAA,SAAAuM,GACA,OADcC,EAAAC,KAAGrL,EAAkBmL,EAAgB9I,eACnC,EAAA,EAGV8F,CAFP,MAEOA,GAAAA,OAAAA,QAAAA,OAAAA,EAAAA,CAAAA,EAAAA,EAAAA,cAAA,SACNX,EACAC,EACAZ,GAQA,GANIW,IACF7J,KAAK6J,WJjO0B,SAAC1G,GACpC,GAJsB,eAIlBA,EAAKyF,IACP,MAAU9F,IAAAA,MAAM,8BAElB,OAAkBK,EAAK8I,SAAW,IAAIvK,OACtC,IAAKwK,EAAMD,GAAW,MAAM,IAASnJ,MAAC,gCAEtC,IAII6K,EACAC,EALKrJ,EAAGX,KAAKiK,KAAKC,OAAO3K,EAAK4K,aAAe,IAC3CvJ,EAAMZ,KAAKC,MAAMiK,OAAO3K,EAAK6K,cACnC,IAAMzJ,IAAOC,GAAQD,EAAMC,EAAK,MAAM,IAAS1B,MAAC,8BAIhD,IACE6K,EAAWjL,KAAKU,MAAMD,EAAKwK,SAAW,IACtCC,EAAehH,EAAM,QAACzD,EAAKwK,SAAW,IAAI7G,SAASD,UAIpD,CAHC,SACA8G,EAAW,GACXC,EAAehH,UAAO,MAAME,SAASD,EAAG,QACzC,CAKD,IAHA,MAAY,GACG3B,EAAG,KACD,GACPwD,EAAG,EAAGA,EAAIiF,EAAShF,OAAQD,IAAK,CACxC,IAAAuF,EAAeN,EAASjF,GAAjBwF,EAAGC,EAAAA,GAAAA,OACV,OAAQD,GACN,IAAK,aACHhJ,EAAciJ,EACd,MACF,IAAK,kBACHC,EAAaD,EACb,MACF,IAAK,mBACL,IAAK,oBACHE,EAAQ,QAAUH,EAAI,IAAMC,EAGjC,CACD,IAE8BvE,EAFf0E,EAAGnL,EAAKmL,UAGvB,IACE1E,EAAS,IAAI2E,IAAItC,GAAUuC,QAK7B,CAJE,MAAAC,GAIF,CAAA,MAAO,CACLxC,SAAAA,EACAyC,MAAOnK,IAAQC,EACfD,IAAAA,EACAC,IAAAA,EACAoF,OAAAA,EACA+D,SAAAA,EACAC,aAAAA,EACAQ,WAAAA,EACAlJ,YAAAA,EACAmJ,MAAAA,EACAC,UAAAA,EACA3B,eAAgBmB,OAAO3K,EAAKwJ,iBAAmB,EAC/CgC,QAASxL,EACTiK,YAAajK,EAAKiK,cAAe,EAErC,CIiKwBwB,CAAsB/E,IAEtCC,IACF9J,KAAK8J,YLzPyB,SAAC3G,GACnC,GAVkB,YAUdA,EAAKyF,IAAqB,MAAM,IAAS9F,MAAC,0BAC9C,GAAoB,OAAhBK,EAAK0L,OAAiB,UAAe/L,MAAC,yBAE1C,KACI,gBAAoBgM,WAAW,KACE,UAAnC3L,EAAK2L,WAAW,GAAc,UAE9B,UAAehM,MAAC,4BAElB,KACI,gBAAiBK,EAAK2L,WAAW,MAClC3L,EAAK2L,WAAW,GAAgB,YAEjC,MAAUhM,IAAAA,MAAM,8BAElB,IAAKK,EAAK0E,OAAQ,MAAU/E,IAAAA,MAAM,yBAMlC,MAAO,CACLkB,YALkBb,EAAK0E,OAMvB3D,UALgBf,EAAK2L,WAAW,GAAc,UAM9C3K,YALkBhB,EAAK2L,WAAW,GAAgB,YAOtD,CK8NyBC,CAAqBjF,IAEtCZ,EAAW,CAAA,IAAA8F,EAC0C/F,EACrDC,EACAlJ,KAAKmJ,UAFNnJ,KAAKkJ,UAAS8F,EAAA,GAAEhP,KAAKoJ,YAAa4F,EAAA,GAAAhP,KAAKqJ,YAAW2F,EAAA,EAIpD,CACH,IAnOA,KCvCWC,SAAwBC,GAAgB,IACnD,IAAM1O,EACJ,iCAAmC0O,EAAShF,cAAgB,QAAQ,OAAA/H,QAAAC,QAC/CpB,MAAMR,IAAvB2O,KAAAA,SAAAA,0BACaA,EAASjI,QAAMjG,KAAA,SAA5BkC,GAEN,SAAYiM,WARO,GAQmB,IACvC,CAAA,MAAA9L,GAAA,OAAAnB,QAAAoB,OAAAD,EAAA,CAAA,EAEY+L,WAAY/K,OAChBO,EAAAP,EAAPO,QACQ,OAAA1C,QAAAC,QAKW6M,IALnBC,WAK2CjO,KAAA,SAArCqO,GAEN,cAAczK,GAAWyK,CAAK,EAChC,6EAE4BC,OACpB5L,EAAA4L,EAAN5L,8BAMmBsL,EALnBC,EAAAA,WAK2CjO,KAAA,SAArCqO,GAEN,YAAYzL,MAAMiK,OAAOnK,GAAU2L,EAAM,EAC3C,iCAEkCE,OAEhCN,IAAAA,SACAO,EAAAA,EAAAA,OAQC,OAFIA,IACHA,EAAS,MACVtN,QAAAC,QACuBiN,EAAa,CAAExK,QAXhC2K,EAAP3K,QAWgDqK,SAAAA,KAA1CQ,KAAAA,SAAAA,GACN,OAAOA,EAAUC,eAAeF,EAAQ,CACtCG,MAAO,WACPV,SAAAA,GACC,EACL"}
|
package/dist/invoice.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../src/invoice.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,IAAI,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEf,IAAI,EAAE,WAAW;IAoBvB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAWrC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;CAUxC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.test.d.ts","sourceRoot":"","sources":["../src/invoice.test.ts"],"names":[],"mappings":""}
|
package/dist/l402/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/l402/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAK5C,eAAO,MAAM,aAAa,QACnB,MAAM,aACA,WAAW,WACb;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,sBAsDF,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
package/dist/l402/parse.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/l402/parse.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,OAAO,MAAM,EAAE,MAAM,CAmB9D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse.test.d.ts","sourceRoot":"","sources":["../../src/l402/parse.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lightning-address.d.ts","sourceRoot":"","sources":["../src/lightning-address.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAEL,gBAAgB,EAEhB,aAAa,EACb,kBAAkB,EAClB,OAAO,EACP,UAAU,EACX,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK1C,eAAO,MAAM,aAAa,kCAAkC,CAAC;AAE7D,KAAK,uBAAuB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,uBAAuB,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACzC,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,aAAa,GAAG,SAAS,CAAC;IACrC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB;IAQ9D,KAAK;IAQL,QAAQ;IAIF,KAAK;IAQL,cAAc;IAWd,iBAAiB;IAwBvB,SAAS;IAIT,UAAU;IAIV,QAAQ;IAIF,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCjE,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+B1D,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,MAAU;IAqBtC,UAAU,CACd,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EACxC,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,OAAO,CAAC;IAkCb,GAAG,CACP,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,mBAAmB,CAAC;IAW/B,OAAO,CAAC,aAAa;CAkBtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lightning-address.test.d.ts","sourceRoot":"","sources":["../src/lightning-address.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boostagrams.d.ts","sourceRoot":"","sources":["../../src/podcasting2/boostagrams.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAQF,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,KAAK,SAAgB,cAAc,YAAY,YAAY,+DA6BvE,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/fiat.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fiat.d.ts","sourceRoot":"","sources":["../../src/utils/fiat.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,aAAoB,MAAM,KAAG,QAAQ,MAAM,CAOrE,CAAC;AAEF,eAAO,MAAM,YAAY;aAId,MAAM,GAAG,MAAM;cACd,MAAM;qBAKjB,CAAC;AAEF,eAAO,MAAM,eAAe;YAIlB,MAAM,GAAG,MAAM;cACb,MAAM;qBAKjB,CAAC;AAEF,eAAO,MAAM,qBAAqB;aAKvB,MAAM,GAAG,MAAM;cACd,MAAM;YACR,MAAM;qBAUf,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/utils/invoice.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,aAAa,mBACR,MAAM,KACrB,cAAc,GAAG,IAwDnB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keysend.d.ts","sourceRoot":"","sources":["../../src/utils/keysend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,oBAAoB,SAAU,cAAc,KAAG,eA2B3D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lnurl.d.ts","sourceRoot":"","sources":["../../src/utils/lnurl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAChB,YAAY,EACb,MAAM,UAAU,CAAC;AAKlB,eAAO,MAAM,KAAK,QAAS,MAAM,GAAG,IAAI,kBAGvC,CAAC;AAEF,eAAO,MAAM,aAAa;YAKhB,MAAM;SACT,MAAM;SACN,MAAM;MACT,OAEH,CAAC;AAKF,eAAO,MAAM,qBAAqB,SAAU,YAAY,KAAG,gBAgE1D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lnurl.test.d.ts","sourceRoot":"","sources":["../../src/utils/lnurl.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nostr.d.ts","sourceRoot":"","sources":["../../src/utils/nostr.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAErE,wBAAsB,gBAAgB,CACpC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAC3C,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,KAAK,CAAC,CA6BhB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAiBnD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAYjD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEjD;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,sEAU7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utils/storage.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAa;IACxB,OAAO,MAAC;gBAEI,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAGpC;AAED,qBAAa,SAAS;gBACR,OAAO,CAAC,EAAE,OAAO;IAE7B,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CACpC;AAED,eAAe,aAAa,CAAC"}
|
package/dist/window.d.ts
DELETED
package/dist/window.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../src/window.js"],"names":[],"mappings":""}
|
package/dist/window.js
DELETED