diff options
| author | Adam Soltys <[email protected]> | 2026-10-06 21:12:19 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-06 21:12:19 -0700 |
| commit | f53e70ed98eb723479b4276c5b621b599fe570a0 (patch) | |
| tree | 15a77563c946e5657e3f4de87e09f55cc2883211 /lib | |
| parent | 7727b97c71c11b4b65f47bcc68460ea981c1b22c (diff) | |
| download | coinos-server-f53e70ed98eb723479b4276c5b621b599fe570a0.tar.gz coinos-server-f53e70ed98eb723479b4276c5b621b599fe570a0.zip | |
payments: lowercase payreq before looking up our own invoices
An uppercase bolt11 for a coinos invoice missed the getInvoice lookup, so
it was paid over lightning to our own node instead of internally. The
listener then saw the sender's payment pointer for that bolt11 and skipped
crediting the recipient. Normalize in POST /payments and nwc pay_invoice.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/nwc.ts | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -634,7 +634,13 @@ const checkBudget = async (app, amount) => { const handle = (method, params, ev, app, user) => ({ async pay_invoice() { - const { invoice: pr, metadata, amount: reqAmountMsat } = params; + const { metadata, amount: reqAmountMsat } = params; + // Lowercase so getInvoice() finds our own invoices below (see create() + // in routes/payments.ts). + const pr = + typeof params.invoice === "string" + ? params.invoice.replace(/\s/g, "").toLowerCase() + : params.invoice; const { amount_msat, payee } = await ln.decode(pr); const { id } = await ln.getinfo(); // For an amountless bolt11, the invoice carries no amount — NIP-47 lets the |
