{"version":3,"sources":["../src/zap-request.ts","../src/nwc.ts","../src/zap-receipt.ts","../src/webln.ts","../src/lnbits.ts"],"names":["hexToBytes","SimplePool","getPublicKey","nip04","finalizeEvent"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { EventTemplate } from \"nostr-tools\";\nimport type { NostrSigner } from \"@nostr-wot/signers\";\n\n/**\n * NIP-57 zap request (kind 9734).\n *\n * Flow:\n *   1. Caller looks up the recipient's lud16 (lightning address) and\n *      fetches their LNURL-pay endpoint.\n *   2. The endpoint advertises `allowsNostr: true` and a `nostrPubkey`.\n *   3. Caller builds a zap request event signed by the zapper, encodes\n *      it as a `nostr` query parameter on the LNURL callback, gets back\n *      a bolt11 invoice.\n *   4. Caller pays the invoice (via NWC, WebLN, or a wallet).\n *   5. The recipient receives a kind 9735 zap receipt published by the\n *      LNURL provider, containing the original zap request as a tag.\n */\n\nexport interface ZapRequestArgs {\n  /** Recipient's hex pubkey. */\n  recipientPubkey: string;\n  /** Amount in millisatoshis. */\n  amountMsats: number;\n  /** Optional comment (zap note). */\n  comment?: string;\n  /** Relays where the recipient should look for the zap receipt. */\n  relays: string[];\n  /** Optional event id being zapped (zap a specific note). */\n  eventId?: string;\n  /** Optional addr/kind tags for replaceable events. */\n  addrTag?: string;\n}\n\n/**\n * Build + sign a NIP-57 zap request event. Returns the signed event,\n * which the caller appends to the LNURL callback as `nostr=...`.\n *\n * Validates two NIP-57 requirements that the spec calls out explicitly:\n *   - `relays` must be non-empty (the LNURL provider needs at least one\n *     relay to publish the kind 9735 receipt to).\n *   - `amountMsats` must be a positive integer.\n */\nexport async function buildZapRequest(\n  signer: NostrSigner,\n  args: ZapRequestArgs,\n): Promise<{ event: import(\"nostr-tools\").Event; encoded: string }> {\n  if (!Number.isFinite(args.amountMsats) || args.amountMsats <= 0) {\n    throw new Error(\"amountMsats must be a positive number\");\n  }\n  if (!args.relays || args.relays.length === 0) {\n    throw new Error(\"relays must not be empty (NIP-57 requires at least one relay)\");\n  }\n\n  const tags: string[][] = [\n    [\"p\", args.recipientPubkey],\n    [\"amount\", String(args.amountMsats)],\n    [\"relays\", ...args.relays],\n  ];\n  if (args.eventId) tags.push([\"e\", args.eventId]);\n  if (args.addrTag) tags.push([\"a\", args.addrTag]);\n\n  const template: EventTemplate = {\n    kind: 9734,\n    created_at: Math.floor(Date.now() / 1000),\n    tags,\n    content: args.comment ?? \"\",\n  };\n  const event = await signer.signEvent(template);\n  const encoded = encodeURIComponent(JSON.stringify(event));\n  return { event, encoded };\n}\n\n/**\n * Resolve a lightning address (`name@domain.com`) to its LNURL-pay\n * metadata. Returns null if the address is unreachable or doesn't\n * support Nostr zaps.\n */\nexport async function fetchLnurlPayMetadata(\n  lud16: string,\n  fetchImpl: typeof fetch = fetch,\n): Promise<{\n  callback: string;\n  minSendable: number;\n  maxSendable: number;\n  metadata: string;\n  allowsNostr: boolean;\n  nostrPubkey?: string;\n} | null> {\n  const [name, domain] = lud16.split(\"@\");\n  if (!name || !domain) return null;\n  const url = `https://${domain}/.well-known/lnurlp/${name}`;\n  try {\n    const res = await fetchImpl(url);\n    if (!res.ok) return null;\n    const data = await res.json();\n    return data as ReturnType<typeof fetchLnurlPayMetadata> extends Promise<infer T> ? T : never;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Full zap pipeline: lud16 → LNURL → invoice. Caller pays the returned\n * `pr` (bolt11 invoice) via their wallet.\n */\nexport async function requestZapInvoice(\n  signer: NostrSigner,\n  options: ZapRequestArgs & { lud16: string; fetchImpl?: typeof fetch },\n): Promise<{ invoice: string; zapRequest: import(\"nostr-tools\").Event }> {\n  const lnurl = await fetchLnurlPayMetadata(options.lud16, options.fetchImpl);\n  if (!lnurl) throw new Error(`Could not resolve LNURL-pay for ${options.lud16}`);\n  if (!lnurl.allowsNostr) throw new Error(`${options.lud16} does not accept Nostr zaps`);\n\n  const { event, encoded } = await buildZapRequest(signer, options);\n  const callback = new URL(lnurl.callback);\n  callback.searchParams.set(\"amount\", String(options.amountMsats));\n  callback.searchParams.set(\"nostr\", encoded);\n  if (options.comment) callback.searchParams.set(\"comment\", options.comment);\n\n  const fetchImpl = options.fetchImpl ?? fetch;\n  const res = await fetchImpl(callback.toString());\n  if (!res.ok) throw new Error(`LNURL callback returned ${res.status}`);\n  const body = await res.json();\n  if (!body.pr) throw new Error(\"LNURL callback did not return an invoice\");\n  return { invoice: body.pr as string, zapRequest: event };\n}\n","import {\n  finalizeEvent,\n  generateSecretKey,\n  getPublicKey,\n  nip04,\n  SimplePool,\n  type Event,\n} from \"nostr-tools\";\nimport { hexToBytes } from \"@noble/hashes/utils\";\n\n/**\n * Nostr Wallet Connect (NIP-47).\n *\n * The wallet daemon advertises a connection URI that includes:\n *   - `nostrwalletconnect://<wallet-pubkey>?relay=...&secret=...`\n *\n * The client encrypts kind 23194 requests via NIP-04 to the wallet\n * pubkey, publishes them to the wallet's relay, and waits for the\n * matching kind 23195 response.\n *\n * This client supports the standard NWC methods: `pay_invoice`,\n * `make_invoice`, `lookup_invoice`, `list_transactions`, `get_balance`,\n * `get_info`. Custom methods can be invoked via `call(method, params)`.\n */\n\nexport const NWC_REQUEST_KIND = 23194;\nexport const NWC_RESPONSE_KIND = 23195;\n\nexport interface NWCConnection {\n  walletPubkey: string;\n  relay: string;\n  clientSecretKey: Uint8Array;\n}\n\nexport function parseNwcUri(uri: string): NWCConnection {\n  const url = new URL(uri.replace(/^nostr\\+walletconnect:/, \"nostrwalletconnect:\"));\n  if (url.protocol !== \"nostrwalletconnect:\") {\n    throw new Error(`Expected nostrwalletconnect: URI, got ${url.protocol}`);\n  }\n  const walletPubkey = url.hostname || url.pathname.replace(/^\\/\\//, \"\").split(\"?\")[0]!;\n  const relay = url.searchParams.get(\"relay\");\n  const secret = url.searchParams.get(\"secret\");\n  if (!walletPubkey) throw new Error(\"NWC URI missing wallet pubkey\");\n  if (!relay) throw new Error(\"NWC URI missing relay parameter\");\n  if (!secret) throw new Error(\"NWC URI missing secret parameter\");\n  return {\n    walletPubkey,\n    relay,\n    clientSecretKey: hexToBytes(secret),\n  };\n}\n\nexport type NwcResult<T = unknown> = { result: T; result_type: string } | { error: { code: string; message: string } };\n\nexport class NwcClient {\n  readonly #conn: NWCConnection;\n  readonly #pool: SimplePool;\n  readonly #clientPk: string;\n\n  constructor(connection: NWCConnection, pool?: SimplePool) {\n    this.#conn = connection;\n    this.#pool = pool ?? new SimplePool();\n    this.#clientPk = getPublicKey(connection.clientSecretKey);\n  }\n\n  static fromUri(uri: string, pool?: SimplePool): NwcClient {\n    return new NwcClient(parseNwcUri(uri), pool);\n  }\n\n  async payInvoice(invoice: string): Promise<{ preimage: string; fees_paid?: number }> {\n    return this.call(\"pay_invoice\", { invoice });\n  }\n\n  async makeInvoice(amountSats: number, description?: string): Promise<{ invoice: string; payment_hash: string }> {\n    return this.call(\"make_invoice\", {\n      amount: amountSats * 1000, // msats\n      description: description ?? \"\",\n    });\n  }\n\n  async getBalance(): Promise<{ balance: number }> {\n    return this.call(\"get_balance\", {});\n  }\n\n  async getInfo(): Promise<{\n    alias: string;\n    color: string;\n    pubkey: string;\n    network: string;\n    block_height: number;\n    methods: string[];\n  }> {\n    return this.call(\"get_info\", {});\n  }\n\n  async lookupInvoice(payment_hash: string): Promise<{\n    invoice?: string;\n    settled?: boolean;\n    settled_at?: number;\n    amount?: number;\n  }> {\n    return this.call(\"lookup_invoice\", { payment_hash });\n  }\n\n  /**\n   * Generic call. Returns the wallet's `result` payload or throws an\n   * Error with `code` and `message` from the wallet on failure.\n   */\n  async call<T = unknown>(method: string, params: Record<string, unknown>): Promise<T> {\n    const payload = JSON.stringify({ method, params });\n    const ciphertext = await nip04.encrypt(\n      this.#conn.clientSecretKey,\n      this.#conn.walletPubkey,\n      payload,\n    );\n    const reqEvent = finalizeEvent(\n      {\n        kind: NWC_REQUEST_KIND,\n        created_at: Math.floor(Date.now() / 1000),\n        tags: [[\"p\", this.#conn.walletPubkey]],\n        content: ciphertext,\n      },\n      this.#conn.clientSecretKey,\n    );\n\n    const responsePromise = this.#waitForResponse(reqEvent.id);\n    await Promise.allSettled(this.#pool.publish([this.#conn.relay], reqEvent));\n    const response = await responsePromise;\n\n    const decrypted = await nip04.decrypt(\n      this.#conn.clientSecretKey,\n      this.#conn.walletPubkey,\n      response.content,\n    );\n    const parsed = JSON.parse(decrypted) as NwcResult<T>;\n    if (\"error\" in parsed) {\n      throw new Error(`NWC ${method}: ${parsed.error.code} — ${parsed.error.message}`);\n    }\n    return parsed.result;\n  }\n\n  #waitForResponse(requestId: string): Promise<Event> {\n    return new Promise((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        try {\n          sub.close();\n        } catch {\n          /* noop */\n        }\n        reject(new Error(`NWC request ${requestId.slice(0, 8)}… timed out`));\n      }, 30_000);\n\n      const sub = this.#pool.subscribeMany(\n        [this.#conn.relay],\n        {\n          kinds: [NWC_RESPONSE_KIND],\n          authors: [this.#conn.walletPubkey],\n          \"#p\": [this.#clientPk],\n          \"#e\": [requestId],\n        },\n        {\n          onevent: (event: Event) => {\n            clearTimeout(timeout);\n            try {\n              sub.close();\n            } catch {\n              /* noop */\n            }\n            resolve(event);\n          },\n          oneose: () => undefined,\n        },\n      );\n    });\n  }\n}\n","// packages/wallet/src/zap-receipt.ts\n// Pure validator for NIP-57 kind 9735 zap-receipt events. Returns the\n// canonical sender + amount when the receipt is well-formed and\n// recipient-matched, else null. Caller is responsible for verifying the\n// signature (callers are responsible for verification); this validator focuses\n// on payload-shape and recipient checks.\n\nexport interface RawNostrEvent {\n  kind: number;\n  pubkey: string;\n  tags: string[][];\n  content: string;\n  id: string;\n  sig: string;\n  created_at: number;\n}\n\nexport interface ValidatedZapReceipt {\n  senderPubkey: string;\n  amountMsat: number;\n  bolt11: string;\n  messageId?: string;\n  comment?: string;\n  /** The id of the receipt event (for de-dup). */\n  receiptId: string;\n  /** The signer of the receipt — the recipient's LNURL provider. */\n  providerPubkey: string;\n}\n\nfunction getTag(ev: RawNostrEvent, name: string): string[] | undefined {\n  return ev.tags.find((t) => t[0] === name);\n}\n\nexport function validateZapReceipt(\n  event: RawNostrEvent,\n  expectedRecipient: string,\n  trustedProviderPubkeys?: Set<string>,\n): ValidatedZapReceipt | null {\n  if (event.kind !== 9735) return null;\n\n  const pTag = getTag(event, 'p');\n  if (!pTag || pTag[1] !== expectedRecipient) return null;\n\n  const bolt11Tag = getTag(event, 'bolt11');\n  if (!bolt11Tag || typeof bolt11Tag[1] !== 'string' || bolt11Tag[1].length === 0) return null;\n\n  const descTag = getTag(event, 'description');\n  if (!descTag || typeof descTag[1] !== 'string') return null;\n\n  let zapRequest: RawNostrEvent | null = null;\n  try {\n    zapRequest = JSON.parse(descTag[1]) as RawNostrEvent;\n  } catch {\n    return null;\n  }\n  if (!zapRequest || zapRequest.kind !== 9734 || typeof zapRequest.pubkey !== 'string') return null;\n\n  const zrPTag = getTag(zapRequest, 'p');\n  if (!zrPTag || zrPTag[1] !== expectedRecipient) return null;\n\n  const amountTag = getTag(zapRequest, 'amount');\n  if (!amountTag) return null;\n  const amountMsat = parseInt(amountTag[1] ?? '', 10);\n  if (!Number.isFinite(amountMsat) || amountMsat <= 0) return null;\n\n  if (trustedProviderPubkeys && !trustedProviderPubkeys.has(event.pubkey)) return null;\n\n  const messageIdTag = getTag(event, 'e') ?? getTag(zapRequest, 'e');\n  return {\n    senderPubkey: zapRequest.pubkey,\n    amountMsat,\n    bolt11: bolt11Tag[1],\n    messageId: messageIdTag?.[1],\n    comment: zapRequest.content || undefined,\n    receiptId: event.id,\n    providerPubkey: event.pubkey,\n  };\n}\n","// packages/wallet/src/webln.ts\n// Generic NIP-57 + WebLN zap helper. Resolves a Lightning Address (lud16),\n// builds a signed kind 9734 zap-request event, fetches a BOLT11 invoice from\n// the LNURL callback (with `nostr=<encoded zap request>`), and pays it via\n// `window.webln`.\n//\n// Why this lives in the SDK: WebLN is the lowest-friction zap path that\n// doesn't require NWC provisioning — any user with Alby (or another WebLN\n// extension) can zap immediately. The flow is pure NIP-57 plumbing with no\n// app-specific state, so reusing it across nostr-wot apps is trivial.\n\nimport type { NostrSigner } from \"@nostr-wot/signers\";\nimport { buildZapRequest, fetchLnurlPayMetadata } from \"./zap-request\";\n\ninterface WebLNProvider {\n  enable(): Promise<void>;\n  sendPayment(invoice: string): Promise<{ preimage: string }>;\n}\n\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n  interface Window {\n    webln?: WebLNProvider;\n  }\n}\n\nexport function isWebLNAvailable(): boolean {\n  return typeof window !== \"undefined\" && !!window.webln;\n}\n\nexport interface WebLNZapOptions {\n  signer: NostrSigner;\n  recipientPubkey: string;\n  /** Recipient Lightning Address (lud16, e.g. `alice@example.com`). */\n  recipientLud16: string;\n  /** Optional event id being zapped — omit to send a user-zap (no `e` tag). */\n  eventId?: string;\n  /** Amount in sats. Converted to msats internally. */\n  amountSats: number;\n  /** Relays to include in the zap-request `relays` tag. Defaults applied if empty. */\n  relays: string[];\n  /** Optional comment included both in the zap-request content and as LNURL `comment`. */\n  comment?: string;\n  /** Optional `fetch` override — useful for tests. */\n  fetchImpl?: typeof fetch;\n}\n\n/**\n * Send a zap to `recipientLud16` for `amountSats` via WebLN.\n *\n * Throws if WebLN is unavailable, the lud16 doesn't accept Nostr zaps, or\n * the amount is outside the LNURL provider's `min/maxSendable` window.\n */\nexport async function zapViaWebLN(opts: WebLNZapOptions): Promise<{ preimage: string }> {\n  if (!isWebLNAvailable()) throw new Error(\"No WebLN extension found (try Alby).\");\n  const webln = window.webln!;\n  await webln.enable();\n\n  const fetchImpl = opts.fetchImpl ?? fetch;\n  const lnurl = await fetchLnurlPayMetadata(opts.recipientLud16, fetchImpl);\n  if (!lnurl) throw new Error(`Could not resolve LNURL-pay for ${opts.recipientLud16}`);\n  if (!lnurl.allowsNostr) throw new Error(`${opts.recipientLud16} does not accept Nostr zaps`);\n\n  const amountMsats = opts.amountSats * 1000;\n  if (amountMsats < lnurl.minSendable || amountMsats > lnurl.maxSendable) {\n    throw new Error(\n      `Amount out of range (${Math.ceil(lnurl.minSendable / 1000)}–${Math.floor(lnurl.maxSendable / 1000)} sats).`,\n    );\n  }\n\n  const relays = opts.relays.length > 0 ? opts.relays : [\"wss://relay.damus.io\", \"wss://nos.lol\"];\n  const { event, encoded } = await buildZapRequest(opts.signer, {\n    recipientPubkey: opts.recipientPubkey,\n    amountMsats,\n    relays,\n    eventId: opts.eventId,\n    comment: opts.comment,\n  });\n\n  const callback = new URL(lnurl.callback);\n  callback.searchParams.set(\"amount\", String(amountMsats));\n  callback.searchParams.set(\"nostr\", encoded);\n  if (opts.comment) callback.searchParams.set(\"comment\", opts.comment);\n\n  const res = await fetchImpl(callback.toString());\n  if (!res.ok) throw new Error(`LNURL callback returned ${res.status}`);\n  const body = (await res.json()) as { pr?: string; reason?: string };\n  if (!body.pr) throw new Error(body.reason ?? \"LNURL callback did not return an invoice\");\n\n  // Touch `event` so users have a chance to inspect it via the return value\n  // if needed (currently we just pay and forget — receipts come back via\n  // useZapReceipts).\n  void event;\n\n  return webln.sendPayment(body.pr);\n}\n","// packages/wallet/src/lnbits.ts\n// LNbits → NWC URI converter. Most LNbits installs expose the built-in NWC\n// service plugin which mints connection URIs from the admin key. Generic and\n// reusable across any nostr-wot app that lets users plug in their LNbits\n// instance.\n\nexport interface LnbitsToNwcResult {\n  nwcUri: string;\n}\n\n/**\n * Convert an LNbits instance URL + admin key into an NWC URI by calling the\n * LNbits NWC service plugin's pairing endpoint.\n *\n * Throws with friendly messages on the common failure modes:\n *   - 404: NWC plugin not enabled on this LNbits instance\n *   - 401/403: invalid admin key\n *   - other non-2xx: surfaced as `LNbits returned <status>`\n */\nexport async function lnbitsToNwc(\n  instanceUrl: string,\n  adminKey: string,\n  fetchImpl: typeof fetch = fetch,\n): Promise<LnbitsToNwcResult> {\n  if (!instanceUrl?.trim()) throw new Error(\"LNbits URL is required\");\n  if (!adminKey?.trim()) throw new Error(\"LNbits admin key is required\");\n  const base = instanceUrl.trim().replace(/\\/+$/, \"\");\n  // The NWC service plugin path on LNbits.\n  const url = `${base}/nostrwalletconnect/api/v1/pairing`;\n  const res = await fetchImpl(url, {\n    headers: { \"X-Api-Key\": adminKey.trim(), \"Content-Type\": \"application/json\" },\n  });\n  if (res.status === 404) throw new Error(\"LNbits NWC plugin not enabled on this instance\");\n  if (res.status === 401 || res.status === 403) throw new Error(\"Invalid LNbits admin key\");\n  if (!res.ok) throw new Error(`LNbits returned ${res.status}`);\n  const body = (await res.json()) as { uri?: string };\n  if (!body.uri) throw new Error(\"LNbits NWC response missing uri\");\n  return { nwcUri: body.uri };\n}\n"]}