<feed xmlns='http://www.w3.org/2005/Atom'>
<title>muxstr.git/internal/handler, branch main</title>
<subtitle>Nostr relay with gRPC, HTTP/JSON, and WebSocket interfaces</subtitle>
<id>https://code.northwest.io/muxstr.git/atom?h=main</id>
<link rel='self' href='https://code.northwest.io/muxstr.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/'/>
<updated>2026-03-08T16:58:35+00:00</updated>
<entry>
<title>Add ephemeral event support (kinds 20000-29999)</title>
<updated>2026-03-08T16:58:35+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-03-08T16:58:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=975acc2bf48ddbd98d58864ba04f95b2fcca6803'/>
<id>urn:sha1:975acc2bf48ddbd98d58864ba04f95b2fcca6803</id>
<content type='text'>
Per NIP-01, ephemeral events are broadcast to subscribers but not
persisted to storage. This enables real-time features like typing
indicators without bloating the database.

Also adds typing-indicators.md spec for kind 20001.
</content>
</entry>
<entry>
<title>Make allowed event kinds configurable</title>
<updated>2026-03-08T02:34:25+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-03-08T02:34:25+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=4522797a0cf378cc44485ed77a01dee9643b6ebe'/>
<id>urn:sha1:4522797a0cf378cc44485ed77a01dee9643b6ebe</id>
<content type='text'>
Replaces hardcoded kind allowlist in isAllowedKind with a configurable
allowed_kinds list in relay config. Empty list allows all kinds. Default
matches previous hardcoded list. Wired through SetAllowedKinds on the
handler.
</content>
</entry>
<entry>
<title>NIP-11: make relay info configurable</title>
<updated>2026-02-22T22:08:54+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-22T22:08:54+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=5195d8031b7930069ba5441a6cd1e7a59c21c546'/>
<id>urn:sha1:5195d8031b7930069ba5441a6cd1e7a59c21c546</id>
<content type='text'>
- Add relay config section (name, description, pubkey, contact, icon)
- Wire config to NIP-11 handler
- AuthRequired/RestrictedWrites now reflect actual auth config
- Add NIP-42 to supported_nips list
- Update example config
</content>
</entry>
<entry>
<title>Link to about tab on codehost</title>
<updated>2026-02-18T00:46:58+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-18T00:46:58+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=3b760256768e45ddb2965aab2a60f11327972e63'/>
<id>urn:sha1:3b760256768e45ddb2965aab2a60f11327972e63</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix source code link URL</title>
<updated>2026-02-17T03:07:03+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T03:07:03+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=6a160cd573b7be5bc4d7b646cdfa72098e78a004'/>
<id>urn:sha1:6a160cd573b7be5bc4d7b646cdfa72098e78a004</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add source code link to index page</title>
<updated>2026-02-17T03:05:59+00:00</updated>
<author>
<name>Clawd</name>
<email>ai@clawd.bot</email>
</author>
<published>2026-02-17T03:05:59+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=895676b863209532d7da47e827f8c7c0cd1fa8a9'/>
<id>urn:sha1:895676b863209532d7da47e827f8c7c0cd1fa8a9</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: migrate nostr dependency to code.northwest.io</title>
<updated>2026-02-16T20:04:20+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-02-16T20:04:20+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=02d6819ebfdc5b18d65c83c4077a040466960bac'/>
<id>urn:sha1:02d6819ebfdc5b18d65c83c4077a040466960bac</id>
<content type='text'>
Updated all import references from northwest.io/nostr to code.northwest.io/nostr and removed the local replace directive from go.mod. The module is now resolved from the published repository.
</content>
</entry>
<entry>
<title>fix: track rate limit hits in metrics</title>
<updated>2026-02-16T01:10:49+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-02-16T01:10:49+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=4909a9f9d23ad969a03676d87087c1edad632a5d'/>
<id>urn:sha1:4909a9f9d23ad969a03676d87087c1edad632a5d</id>
<content type='text'>
- Added RecordRateLimitHit to MetricsRecorder interface
- Call RecordRateLimitHit when EVENT or REQ is rate limited
- Allows dashboard to show accurate rate limiting statistics
- Previously rate limits were applied but not tracked
</content>
</entry>
<entry>
<title>fix: move rate limiting before auth checks</title>
<updated>2026-02-16T01:08:21+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-02-16T01:08:21+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=fa8b4bb939430ba9c48fb4d3ba2b0e9095e229d3'/>
<id>urn:sha1:fa8b4bb939430ba9c48fb4d3ba2b0e9095e229d3</id>
<content type='text'>
- Rate limiting now happens immediately after parsing
- Prevents spam from wasting resources on auth validation
- Protects against DoS from unauthenticated request floods
- IP-based rate limits now apply to all spam, not just authenticated users
</content>
</entry>
<entry>
<title>feat: track authorized (authenticated + successful) requests</title>
<updated>2026-02-15T18:31:06+00:00</updated>
<author>
<name>bndw</name>
<email>ben@bdw.to</email>
</author>
<published>2026-02-15T18:31:06+00:00</published>
<link rel='alternate' type='text/html' href='https://code.northwest.io/muxstr.git/commit/?id=f658ef072394ff9fd28244ad475859c210e8ec16'/>
<id>urn:sha1:f658ef072394ff9fd28244ad475859c210e8ec16</id>
<content type='text'>
Add 'authorized' status for requests that complete successfully after
authentication. This complements the existing 'unauthenticated' (pre-auth)
status tracking.

Now the dashboard shows:
- Authorized: Authenticated requests that succeeded
- Unauthorized: Authenticated requests rejected (not in allowlist)
- Pre-Auth: Requests sent before authentication

This gives full visibility into the auth flow:
1. Challenges: How many clients authenticated
2. Authorized: How many authenticated requests succeeded
3. Unauthorized: How many were rejected despite valid auth
4. Pre-Auth: How many tried before authenticating

Updated metrics:
- requests_total{status="authorized"} - authenticated successes
- requests_total{status="ok"} - unauthenticated successes (when no auth)
</content>
</entry>
</feed>
