<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/lib/lightning.ts, branch staging</title>
<subtitle>coinos server — legacy coinos.io backend (Lightning, on-chain, Liquid)</subtitle>
<id>https://git.coinos.io/coinos-server.git/atom?h=staging</id>
<link rel='self' href='https://git.coinos.io/coinos-server.git/atom?h=staging'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/'/>
<updated>2026-06-17T14:48:18Z</updated>
<entry>
<title>lightning: watchdog only recycles on real backlog, not normal idle</title>
<updated>2026-06-17T14:48:18Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-06-14T19:45:44Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=0a1450ada9c20499fa86a619ee36176f717d5414'/>
<id>urn:sha1:0a1450ada9c20499fa86a619ee36176f717d5414</id>
<content type='text'>
Port of master 7b71c96b, refining the zombie-listener watchdog staging
adopted in 7c34b431. Treating "waitanyinvoice blocked &gt; 5min while cl is
alive" as a stall false-fires during normal quiet periods (~26x in 6h on
master 2026-06-07) and needlessly recycles the cl listen socket. Instead,
when blocked past the threshold, probe cl on the MAIN socket with
waitanyinvoice(pay_index, 2s server-side timeout): an invoice returned
means a real backlog the wedged listener missed -&gt; recycle; a timeout
(CLN 904) means the listener is just idle -&gt; leave it alone.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>ark: skip refresh when ark unconfigured; document LN listener watchdog</title>
<updated>2026-06-15T17:00:47Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2026-06-15T17:00:47Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=9595de876df5264846227f6f80a7306df9154278'/>
<id>urn:sha1:9595de876df5264846227f6f80a7306df9154278</id>
<content type='text'>
Guard refreshArkWallet against running when config.ark.arkPrivateKey is
unset, and add a comment explaining the ensureListenerAlive watchdog's
zombie-socket recovery.

Co-Authored-By: Claude Opus 4.8 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>ln/lightning: watchdog recycles zombie receive-listener socket</title>
<updated>2026-06-08T22:49:26Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2026-06-08T22:49:26Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=7c34b4312c8aafc7643a5192d54daea14cfc1559'/>
<id>urn:sha1:7c34b4312c8aafc7643a5192d54daea14cfc1559</id>
<content type='text'>
Port of master bd1ece3 to staging. When cl restarts (e.g. autoheal after a
healthcheck timeout), the app's waitanyinvoice long-poll can hang on the now-dead
listen socket: listenerActive stays true forever, nothing restarts it, and
incoming lightning payments silently stop crediting until a manual app restart.
The per-call RPC timeout can't catch this — waitanyinvoice is meant to block.

ensureListenerAlive (run every 120s) now also detects a stalled listener — active
but blocked in waitanyinvoice for &gt;5min — probes cl via the main socket (getinfo),
and only if cl is actually alive treats the listen socket as a zombie: bumps a
listenerEpoch, calls lnListen.reset() (new: drops the proxy socket so the next
call reconnects), and re-arms. The epoch guard makes the wedged invocation bow out
when its waitanyinvoice finally rejects, so we never run two listeners or
double-credit.

Co-Authored-By: Claude Opus 4.8 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: blocked address protection, LNURL proxy, replay timestamps</title>
<updated>2026-03-28T06:58:56Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-28T06:58:51Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=a574e774318a37bfc1e5c638a3d83e3fb9c180d2'/>
<id>urn:sha1:a574e774318a37bfc1e5c638a3d83e3fb9c180d2</id>
<content type='text'>
- Add lib/changeid.ts for in-process account rekeying
- Block sends to addresses in redis blocked_addresses set, auto-rekey on attempt
- Add created param to credit() for accurate replay timestamps
- Add paid_at to replay() for correct payment dates
- Add /lnurl/proxy endpoint for server-side LNURL callback fetching

Co-Authored-By: Claude Opus 4.6 (1M context) &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>migrate to hono</title>
<updated>2026-02-28T22:14:30Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-02-28T22:14:30Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=a1632ae402d11fdd7ffc360de97c55e0b4fad677'/>
<id>urn:sha1:a1632ae402d11fdd7ffc360de97c55e0b4fad677</id>
<content type='text'>
</content>
</entry>
<entry>
<title>formatting</title>
<updated>2026-02-24T21:18:42Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-02-24T21:18:42Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=ad7b09b43323d0ffc0a8ddabb43e4838a184c697'/>
<id>urn:sha1:ad7b09b43323d0ffc0a8ddabb43e4838a184c697</id>
<content type='text'>
</content>
</entry>
<entry>
<title>custodial ark sends</title>
<updated>2026-02-14T23:46:01Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-02-14T23:46:01Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=526b21bc668c453250ebce8dece9ba330bac0133'/>
<id>urn:sha1:526b21bc668c453250ebce8dece9ba330bac0133</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tigerbeetle</title>
<updated>2026-02-06T17:00:09Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-02-05T07:13:33Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb'/>
<id>urn:sha1:1ebc40afc14a75d7fe157b2c6c20ffea9dedb5eb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>health check</title>
<updated>2026-02-06T16:55:45Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2026-02-06T16:55:45Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=9089698e8df9d0c09c165c45eb6b05335a818699'/>
<id>urn:sha1:9089698e8df9d0c09c165c45eb6b05335a818699</id>
<content type='text'>
</content>
</entry>
<entry>
<title>sendinvoice support</title>
<updated>2025-09-18T21:42:13Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-09-18T21:42:13Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=8c7fa95d44aabd38fadc3ef955d835ad3379ec6c'/>
<id>urn:sha1:8c7fa95d44aabd38fadc3ef955d835ad3379ec6c</id>
<content type='text'>
</content>
</entry>
</feed>
