<feed xmlns='http://www.w3.org/2005/Atom'>
<title>coinos-server.git/lib/whitelist.ts, 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-10-08T19:15:15Z</updated>
<entry>
<title>users: keep the encrypted nostr key and 2FA seed away from bearer tokens</title>
<updated>2026-10-08T19:15:15Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-10-08T19:15:15Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=5df9bc39ac48fdf1b19b00b9b457f9ebc1ee157c'/>
<id>urn:sha1:5df9bc39ac48fdf1b19b00b9b457f9ebc1ee157c</id>
<content type='text'>
/me and user emits return a hasnsec flag instead of the encrypted key, which
is now only sent with a password login or registration. /otpsecret refuses
once 2FA is enabled, and disabling 2FA rotates the seed.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>security: drop the admin endpoint surface and land pending hardening</title>
<updated>2026-09-14T03:44:48Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-09-14T03:44:48Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=d8a361bdcfaa8cc5b39d9675e74b0e1d2e42be2c'/>
<id>urn:sha1:d8a361bdcfaa8cc5b39d9675e74b0e1d2e42be2c</id>
<content type='text'>
Removes the admin-gated endpoints and the account flags they set, plus a
batch of hardening that had accumulated uncommitted in the tree. These were
deployed and verified together, so they land as one change.

admin surface:
  - drop POST /hidepay, POST /unlimit and GET /users, their handlers, and
    the now-unused admin preValidation export
  - `unlimited` was only ever written, never read; `hidepay` only appeared
    in output projections. Both flags go, along with their whitelist,
    public-fields and type entries.

request log:
  - redactBody now recurses. It only masked top-level keys, so a body that
    nests credentials one level down wrote them to the log in plaintext,
    and pin fields were not on the list at all.

payments:
  - sendOnchain/build gate `aid` through requireAccount, so a caller can
    only spend from an account it owns
  - sendOnchain signs only a tx we composed, matched against a short-lived
    per-account build receipt
  - raise xpay retry_for to 60s; route-finding preferred a drained zero-fee
    hop and burned the whole budget on it. check()'s reversal window keeps
    its 2x margin.

ecash / invoices / webhooks:
  - resolve a token's mint through the IP-pinning fetcher instead of plain
    fetch, closing an unauthenticated SSRF path into the internal network
  - reject non-positive amounts before the balance write
  - /sign requires the caller to own the address, rather than signing under
    any address the hot wallet controls
  - webhook delivery no longer disables TLS verification; the body carries
    the merchant's shared secret

registration:
  - refuse a username the v3 registrar holds unless the caller's own nostr
    key is the holder (lib/names.ts)

liquid:
  - honour the deposit kill switch at invoice generation and at credit

elements image:
  - pin 23.3.4 and verify the release tarball checksum

Co-Authored-By: Claude Opus 5 (1M context) &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_0112TGi9GGNWqji1XQ5jZRzc
</content>
</entry>
<entry>
<title>Let a migrated account hand its address to coinos v3</title>
<updated>2026-08-03T20:20:36Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-08-03T20:04:36Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=fb63b96ec90e32bc8adc5b77b2735097dde16bbd'/>
<id>urn:sha1:fb63b96ec90e32bc8adc5b77b2735097dde16bbd</id>
<content type='text'>
A `migrated` flag on the user, settable through /user and visible on the
public user endpoint. It changes exactly one thing: lnurlp for that
username defers to the names registrar, so payments to name@coinos.io
arrive in the person's v3 wallet. The account itself is untouched — same
username, same history, still usable here — which is why this is a flag
and not a rename or a shutdown.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
</content>
</entry>
<entry>
<title>remove nwc field</title>
<updated>2026-04-01T23:06:12Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2026-04-01T23:06:12Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=15b94857f6f917f032968c0d052b1d387cb99cca'/>
<id>urn:sha1:15b94857f6f917f032968c0d052b1d387cb99cca</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fresh attribute</title>
<updated>2025-07-10T19:37:05Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-07-10T19:25:09Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=81a7608330f3cb3eae513429b61a8611267547a3'/>
<id>urn:sha1:81a7608330f3cb3eae513429b61a8611267547a3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>auto pay</title>
<updated>2025-07-08T17:17:45Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-07-08T17:17:45Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=0ffadeb380f0f9bfec4b52f96ef5d362c1f3297b'/>
<id>urn:sha1:0ffadeb380f0f9bfec4b52f96ef5d362c1f3297b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>locked balance</title>
<updated>2025-05-12T19:36:28Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-05-12T19:36:28Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=f85ae08db1dd6471d9e2d5edc28025684d0f3af4'/>
<id>urn:sha1:f85ae08db1dd6471d9e2d5edc28025684d0f3af4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>remove salt and cipher</title>
<updated>2025-01-08T03:57:48Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-01-08T03:57:48Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=6cda2011da9e7fc53b728dacd023271604574f99'/>
<id>urn:sha1:6cda2011da9e7fc53b728dacd023271604574f99</id>
<content type='text'>
</content>
</entry>
<entry>
<title>picture not profile</title>
<updated>2025-01-01T00:52:14Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2025-01-01T00:52:14Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=e2db9a0e0fad4cb107e1bb4fee32b0618f6bae26'/>
<id>urn:sha1:e2db9a0e0fad4cb107e1bb4fee32b0618f6bae26</id>
<content type='text'>
</content>
</entry>
<entry>
<title>user picture and about</title>
<updated>2024-12-31T23:21:44Z</updated>
<author>
<name>Adam Soltys</name>
<email>adam@coinos.io</email>
</author>
<published>2024-12-31T23:21:44Z</published>
<link rel='alternate' type='text/html' href='https://git.coinos.io/coinos-server.git/commit/?id=e2eb8a2b1a99afc8d6bc5c7a8124496ecde865c7'/>
<id>urn:sha1:e2eb8a2b1a99afc8d6bc5c7a8124496ecde865c7</id>
<content type='text'>
</content>
</entry>
</feed>
