diff options
| author | Adam Soltys <[email protected]> | 2026-05-31 23:28:12 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-05-31 23:28:12 -0700 |
| commit | a664af99dfee8267a960fd22cbab852681198de2 (patch) | |
| tree | 31daf8030a9cb8929dab4d561d579f6c042afb5f /lib/register.js.map | |
| parent | 7841b2d61830f13260e46d24ce69f24b2dbcea29 (diff) | |
| download | coinos-server-a664af99dfee8267a960fd22cbab852681198de2.tar.gz coinos-server-a664af99dfee8267a960fd22cbab852681198de2.zip | |
ln: time out short-lived RPCs so a hung cl reconnects without restart
A unix-domain RPC socket has no TCP keepalive, so if cl goes
unresponsive while the socket stays open (zombie/half-open), an awaited
call hangs forever — the "stuck spinner past /pay/bob, no error"
symptom. Nothing threw, so the existing reconnect-on-error path never
fired and only an app restart recovered it.
Wrap short-lived calls in a 30s Promise.race timeout (matching
health.ts). A timeout rejects with ETIMEDOUT, now part of isSocketDied,
so the client is dropped and the next call reconnects — no process
restart. Long-polls (waitanyinvoice et al), in-flight payments
(pay/xpay/sendpay/keysend), and bolt12 round-trips (fetchinvoice/
sendinvoice/offer) are exempt: timing those out client-side would risk
leaked debits or break intentional blocking.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Diffstat (limited to 'lib/register.js.map')
0 files changed, 0 insertions, 0 deletions
