diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/invoices.js | 14 | ||||
| -rw-r--r-- | lib/lightning.js | 3 | ||||
| -rw-r--r-- | lib/payments.js | 9 |
3 files changed, 17 insertions, 9 deletions
diff --git a/lib/invoices.js b/lib/invoices.js index 0bb57714..8ac49a79 100644 --- a/lib/invoices.js +++ b/lib/invoices.js @@ -36,6 +36,8 @@ export let generate = async ({ invoice, user, sender, memo }) => { if (fiat) amount = Math.round((SATS * fiat) / rate); if (amount < 0) fail("invalid amount"); + let id = v4(); + let hash, text; if (type === types.lightning) { let r = await ln.invoice({ @@ -52,7 +54,7 @@ export let generate = async ({ invoice, user, sender, memo }) => { hash = await bc.getNewAddress(); text = bip21(hash, invoice); } else if (type === types.internal) { - hash = v4(); + hash = id; } else { fail("unrecognized type"); } @@ -62,6 +64,7 @@ export let generate = async ({ invoice, user, sender, memo }) => { created: Date.now(), currency, hash, + id, rate, pending: 0, received: 0, @@ -75,16 +78,17 @@ export let generate = async ({ invoice, user, sender, memo }) => { webhook }; - l("creating invoice", user.username, amount, tip, currency, invoice.hash); + l("creating invoice", id, user.username, amount, tip, currency, invoice.hash); - await s(`invoice:${hash}`, invoice); - await db.lPush(`${user.id}:invoices`, hash); + await s(`invoice:${hash}`, id); + await s(`invoice:${id}`, invoice); + await db.lPush(`${user.id}:invoices`, id); if (request_id) { let request = await g(`request:${request_id}`); if (request) { let { invoice_id: prev } = request; - request.invoice_id = hash; + request.invoice_id = id; await s(`request:${request_id}`, request); if (!prev) emit(request.requester_id, "invoice", invoice); diff --git a/lib/lightning.js b/lib/lightning.js index 0c5fd75e..1788fd12 100644 --- a/lib/lightning.js +++ b/lib/lightning.js @@ -27,7 +27,8 @@ export async function listenForLightning() { if (!preimage) return; - let invoice = await g(`invoice:${bolt11}`); + let id = await g(`invoice:${bolt11}`); + let invoice = await g(`invoice:${id}`); if (!invoice) return warn("received lightning with no invoice", bolt11); let payment = await g(`payment:${bolt11}`); diff --git a/lib/payments.js b/lib/payments.js index 19d044e2..733e04ce 100644 --- a/lib/payments.js +++ b/lib/payments.js @@ -38,7 +38,8 @@ export let debit = async ( let rate = store.rates[currency]; - let invoice = await g(`invoice:${hash}`); + let iid = await g(`invoice:${hash}`); + let invoice = await g(`invoice:${iid}`); if (invoice) { ref = invoice.uid; @@ -91,6 +92,7 @@ export let debit = async ( hash, ourfee, memo, + iid, uid, confirmed: true, rate, @@ -113,7 +115,8 @@ export let debit = async ( export let credit = async (hash, amount, memo, ref, type = types.internal) => { amount = parseInt(amount) || 0; - let invoice = await g(`invoice:${hash}`); + let iid = await g(`invoice:${hash}`); + let invoice = await g(`invoice:${iid}`); if (!invoice) return warn("failed to credit", hash, ", invoice not found"); let { tip } = invoice; @@ -170,7 +173,7 @@ export let credit = async (hash, amount, memo, ref, type = types.internal) => { if ([types.bitcoin, types.lightning].includes(type)) m.incrBy(`credit:${type}:${uid}`, Math.round(amount * config.fee)); - m.set(`invoice:${hash}`, JSON.stringify(invoice)) + m.set(`invoice:${iid}`, JSON.stringify(invoice)) .set(`payment:${p.id}`, JSON.stringify(p)) .lPush(`${uid}:payments`, p.id) .incrBy(`${balance}:${uid}`, amount) |
