diff options
| author | Adam Soltys <[email protected]> | 2026-05-17 23:38:53 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-05-17 23:38:53 -0700 |
| commit | 6992af9bc03822dea71b59604f03d34a91511264 (patch) | |
| tree | a11a7484fa8ef2f7c42b1268e59e44b021a65d57 /lib/upload.js.map | |
| parent | a574e774318a37bfc1e5c638a3d83e3fb9c180d2 (diff) | |
| download | coinos-server-6992af9bc03822dea71b59604f03d34a91511264.tar.gz coinos-server-6992af9bc03822dea71b59604f03d34a91511264.zip | |
sendLightning / sendKeysend: only reverse when CLN reports the payment failed
The catch blocks for ln.xpay and ln.keysend reversed the user's debit
whenever the RPC call threw, regardless of the actual payment state in
CLN. If the RPC errored transiently while the payment was still pending,
the user's balance got refunded — and then the lightning payment could
still complete, leaving the user with both the refund and the outgoing
sats.
Both call sites now mirror the safe check() logic:
const failed = !pays.length || pays.every((p) => p.status === "failed");
if (completed) finalize ...
else if (failed) reverse ...
// else (pending) leave the debit; check() reconciles when CLN settles.
If listpays itself errors, log via warn() and skip the reverse — the
debit stays in the pending set and check() will retry.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Diffstat (limited to 'lib/upload.js.map')
0 files changed, 0 insertions, 0 deletions
