<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/routes/lnurl.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-05-18T06:49:22Z</updated>
<entry>
<title>fix lnurl description_hash mismatch when sender provides a comment</title>
<updated>2026-05-18T06:49:22Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-05-18T06:49:22Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=d5395a81e5475af3a41c2715f58cab6b487a5795'/>
<id>urn:sha1:d5395a81e5475af3a41c2715f58cab6b487a5795</id>
<content type='text'>
The bolt11 description_hash is computed from the metadata JSON, which
was being constructed with the sender's `comment` substituted into
text/plain. Wallets verify description_hash against the metadata they
received in the lnurl-pay response, so injecting the comment into the
hash made the verification fail — the invoice would settle but
description_hash verification would reject it as inconsistent.

Keep metadata canonical ("Paying user@host") so the description_hash
the wallet receives matches what they verify against. The comment is
still preserved as the human-readable memo on the invoice record.

Co-Authored-By: Claude Opus 4.7 (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>add LNURL-withdraw endpoints for fund-based NFC payments</title>
<updated>2026-03-09T05:23:17Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-09T05:23:17Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=ac05ab09314eebd1d939d9b032ddcb16446e294c'/>
<id>urn:sha1:ac05ab09314eebd1d939d9b032ddcb16446e294c</id>
<content type='text'>
Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>bump nodemon</title>
<updated>2026-03-02T06:36:10Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-03-02T06:36:10Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=63c3c56fd75743c971196aa5609c56a91312af2b'/>
<id>urn:sha1:63c3c56fd75743c971196aa5609c56a91312af2b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix typescript issues</title>
<updated>2026-02-28T23:16:20Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-02-28T23:16:20Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=32f01e3e328db0006a55c6324625b49d60244b66'/>
<id>urn:sha1:32f01e3e328db0006a55c6324625b49d60244b66</id>
<content type='text'>
</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>consult archive for older payments</title>
<updated>2026-01-30T20:31:59Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2026-01-30T20:31:59Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=edd76a99a90d56ab641c48b95dd5891558baa133'/>
<id>urn:sha1:edd76a99a90d56ab641c48b95dd5891558baa133</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rotate server key</title>
<updated>2025-09-30T04:50:57Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-09-30T04:47:18Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=481dec5b1cfa2a085dda500ce0c390b38cb4a8b0'/>
<id>urn:sha1:481dec5b1cfa2a085dda500ce0c390b38cb4a8b0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>only record invoice if amount is defined</title>
<updated>2025-08-01T04:45:58Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-08-01T04:45:58Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=f1fa75ee43bad1f9c5ea06f4160cfee9847a035f'/>
<id>urn:sha1:f1fa75ee43bad1f9c5ea06f4160cfee9847a035f</id>
<content type='text'>
</content>
</entry>
</feed>
