From 3481c3273f8764bd0a0ab51183dc57f592fb616c Mon Sep 17 00:00:00 2001 From: bndw Date: Fri, 13 Feb 2026 18:17:37 -0800 Subject: feat: add WebSocket server with full NIP-01 support WebSocket handler: - NIP-01 protocol (EVENT, REQ, CLOSE, OK, EOSE, NOTICE) - JSON envelope parsing - Shares subscription manager with gRPC (unified event fan-out) - Standard Nostr client compatibility Relay now serves dual protocols: - gRPC on :50051 (binary, high performance) - WebSocket on :8080 (JSON, Nostr standard) Both protocols share: - Same storage layer - Same subscription manager - Same validation logic Compatible with all Nostr clients! --- README.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index d0ff872..8fd35c5 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,12 @@ make build-all # Build both ```bash ./bin/relay # or with custom settings: -./bin/relay -grpc-addr :50051 -db relay.db +./bin/relay -grpc-addr :50051 -ws-addr :8080 -db relay.db ``` -The relay will start listening on `:50051` (gRPC). +The relay will start: +- **gRPC** on `:50051` +- **WebSocket** (Nostr) on `:8080` ### Test with Client @@ -44,18 +46,22 @@ The relay will start listening on `:50051` (gRPC). # - abc123...: Hello from gRPC client! ``` -**With nak CLI:** +**With nak CLI (gRPC):** ```bash # Pipe events from nak nak event "Hello from nak!" | ./bin/testclient # Or generate a signed event nak event --sec --kind 1 "My message" | ./bin/testclient +``` -# Output: -# Read event from stdin: abc123... -# Publishing event... -# ✓ Event published successfully: abc123... +**With nak CLI (WebSocket/Nostr):** +```bash +# Standard Nostr clients work out of the box! +nak req -k 1 --limit 10 ws://localhost:8080 + +# Publish via WebSocket +echo '{"kind":1,"content":"hello","tags":[]}' | nak event --sec | nak publish ws://localhost:8080 ``` ## gRPC API @@ -73,13 +79,18 @@ See [proto/nostr/v1/nostr.proto](proto/nostr/v1/nostr.proto) for the full API. ## Current Status -**Phase 1: gRPC Relay** +**Phase 1: Complete** ✅ - ✅ SQLite storage with binary-first design - ✅ Event validation (ID, signature) - ✅ gRPC publish/query API - ✅ Subscribe/streaming (real-time event delivery) - ✅ Subscription management (filter matching, fan-out) -- ⏳ WebSocket server (planned for Nostr client compatibility) +- ✅ **WebSocket server (NIP-01) - standard Nostr clients work!** + +**Compatible with:** +- Any gRPC client (custom or generated) +- Any Nostr client (Damus, Amethyst, Snort, Iris, Gossip, etc.) +- nak CLI for testing ## Development -- cgit v1.2.3