44 lines
1.5 KiB
JavaScript
44 lines
1.5 KiB
JavaScript
import { deletePayment } from 'ln-service'
|
|
import { INVOICE_RETENTION_DAYS } from '@/lib/constants'
|
|
|
|
export async function autoDropBolt11s ({ models, lnd }) {
|
|
const retention = `${INVOICE_RETENTION_DAYS} days`
|
|
|
|
// This query will update the withdrawls and return what the hash and bol11 values were before the update
|
|
const invoices = await models.$queryRaw`
|
|
WITH to_be_updated AS (
|
|
SELECT id, hash, bolt11
|
|
FROM "Withdrawl"
|
|
WHERE "userId" IN (SELECT id FROM users WHERE "autoDropBolt11s")
|
|
AND now() > created_at + ${retention}::INTERVAL
|
|
AND hash IS NOT NULL
|
|
AND status IS NOT NULL
|
|
), updated_rows AS (
|
|
UPDATE "Withdrawl"
|
|
SET hash = NULL, bolt11 = NULL, preimage = NULL
|
|
FROM to_be_updated
|
|
WHERE "Withdrawl".id = to_be_updated.id)
|
|
SELECT * FROM to_be_updated;`
|
|
|
|
if (invoices.length > 0) {
|
|
for (const invoice of invoices) {
|
|
try {
|
|
await deletePayment({ id: invoice.hash, lnd })
|
|
} catch (error) {
|
|
console.error(`Error removing invoice with hash ${invoice.hash}:`, error)
|
|
await models.withdrawl.update({
|
|
where: { id: invoice.id },
|
|
data: { hash: invoice.hash, bolt11: invoice.bolt11, preimage: invoice.preimage }
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
await models.$queryRaw`
|
|
UPDATE "DirectPayment"
|
|
SET hash = NULL, bolt11 = NULL, preimage = NULL
|
|
WHERE "receiverId" IN (SELECT id FROM users WHERE "autoDropBolt11s")
|
|
AND now() > created_at + ${retention}::INTERVAL
|
|
AND hash IS NOT NULL`
|
|
}
|