<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/test, branch master</title>
<subtitle>coinos server — legacy coinos.io backend (Lightning, on-chain, Liquid)</subtitle>
<id>https://git.coinos.io/coinos-server.git/atom?h=master</id>
<link rel='self' href='https://git.coinos.io/coinos-server.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/'/>
<updated>2026-09-16T11:53:22Z</updated>
<entry>
<title>ecash: redeem tokens by melting to the user's own invoice</title>
<updated>2026-09-16T11:53:22Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-16T11:53:22Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=c72fa2a5ccf1cc04073f9ff12606491971dadd36'/>
<id>urn:sha1:c72fa2a5ccf1cc04073f9ff12606491971dadd36</id>
<content type='text'>
Redeeming ecash is now a plain NUT-05 melt into a Lightning invoice owned
by the redeeming user, credited by the regular lightning listener. Drop
the house proof pool and its lock, the /mint and /melt routes, and the
special-casing of a mint account in NWC and payment routing. Tokens are
decoded against the mint's keyset list so short v1 ids resolve, and an
empty keyset list is never cached.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>nwc: enforce per-connection spend budgets + flag-gated incident containment</title>
<updated>2026-08-22T15:08:04Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-22T15:08:04Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=0bb7ab45344068ed8ea3cc77ad9f7c2a038bb45f'/>
<id>urn:sha1:0bb7ab45344068ed8ea3cc77ad9f7c2a038bb45f</id>
<content type='text'>
Thread the remaining allowance through every spend path (pay_invoice, pay,
pay_keysend, internal transfer) as maxTotal, and have debit() assert the spend
stays within it after it reloads the invoice and captures the tip — so a
delegated NWC credential can no longer exceed its configured budget, and a
mutated tip can't slip a small-budget check and drain via the internal path.
checkBudget now returns the remaining allowance alongside any error; a blank
budget is treated as deliberately unlimited and a positive budget requires a
known renewal period.

Add operator-controlled containment for a suspected credential disclosure, all
gated behind Redis flags with no hardcoded scope:
  nwc:disabled              fail every method closed
  nwc:credential-cutoff     retire connections created before an epoch
  nwc:quarantined           block an individual disclosed connection
  nwc:guard:dormant-keysend  quarantine the first keysend on a long-idle app

Fix an ownership check that read the bare pubkey instead of app:&lt;pubkey&gt;, which
let an authenticated user overwrite another connection's config, and validate
budget/fee/renewal inputs.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01XiwgmQKwKnRxUmVDd4xSf7
</content>
</entry>
<entry>
<title>test: regtest regression suite for the security-disclosure fixes</title>
<updated>2026-08-08T06:29:27Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-08T06:06:50Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=8fd55bea7d657a4b0f792cc70a5efc8ac1133bfb'/>
<id>urn:sha1:8fd55bea7d657a4b0f792cc70a5efc8ac1133bfb</id>
<content type='text'>
16 tests covering S1 (jwt.verify vs forged tokens), S2 (bcrypt cost 12 +
legacy detection), S3 (adminpass fails closed on omitted/empty password),
S5 (session cookie flags), S6 (atomic SET NX dedup), S7 (/upload auth),
fnd-003/004 (memo truncation), fnd-006 (deleteSelf sub-account guard),
and S8/fnd-007 (spend/cash mutex serialization). Black-box HTTP + redis
against the live regtest stack; run with `bun run test:regtest`.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>clean up unused files</title>
<updated>2018-03-16T05:25:40Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2018-03-16T05:25:40Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=112e9ec9b71c1930ca51d52db58acc58ee36088c'/>
<id>urn:sha1:112e9ec9b71c1930ca51d52db58acc58ee36088c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rename app to index</title>
<updated>2018-02-06T03:38:15Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2018-02-06T03:25:54Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=cf5a62c26205fa2e9e36d788d4bfb7ec9f96cc66'/>
<id>urn:sha1:cf5a62c26205fa2e9e36d788d4bfb7ec9f96cc66</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Ditch client code</title>
<updated>2017-01-22T03:46:49Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2017-01-22T03:46:49Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=ba5200b50692b889f59df9f37c913b3ef85045c8'/>
<id>urn:sha1:ba5200b50692b889f59df9f37c913b3ef85045c8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Initial Vueification</title>
<updated>2017-01-16T02:24:09Z</updated>
<author>
<name>Adam Soltys</name>
<email>asoltys@gmail.com</email>
</author>
<published>2017-01-16T02:24:09Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=7762ceaa7e2bb34f8758e17a4c8f512fa6a81b9e'/>
<id>urn:sha1:7762ceaa7e2bb34f8758e17a4c8f512fa6a81b9e</id>
<content type='text'>
</content>
</entry>
</feed>
