diff options
| author | bndw <ben@bdw.to> | 2026-02-13 18:17:37 -0800 |
|---|---|---|
| committer | bndw <ben@bdw.to> | 2026-02-13 18:17:37 -0800 |
| commit | 3481c3273f8764bd0a0ab51183dc57f592fb616c (patch) | |
| tree | 8bef805f5f18420198a04bf87578bbc80b76ea40 /README.md | |
| parent | ecd4a2240dd443fd6949e6e1120a7ec971a024ca (diff) | |
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!
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 29 |
1 files changed, 20 insertions, 9 deletions
| @@ -24,10 +24,12 @@ make build-all # Build both | |||
| 24 | ```bash | 24 | ```bash |
| 25 | ./bin/relay | 25 | ./bin/relay |
| 26 | # or with custom settings: | 26 | # or with custom settings: |
| 27 | ./bin/relay -grpc-addr :50051 -db relay.db | 27 | ./bin/relay -grpc-addr :50051 -ws-addr :8080 -db relay.db |
| 28 | ``` | 28 | ``` |
| 29 | 29 | ||
| 30 | The relay will start listening on `:50051` (gRPC). | 30 | The relay will start: |
| 31 | - **gRPC** on `:50051` | ||
| 32 | - **WebSocket** (Nostr) on `:8080` | ||
| 31 | 33 | ||
| 32 | ### Test with Client | 34 | ### Test with Client |
| 33 | 35 | ||
| @@ -44,18 +46,22 @@ The relay will start listening on `:50051` (gRPC). | |||
| 44 | # - abc123...: Hello from gRPC client! | 46 | # - abc123...: Hello from gRPC client! |
| 45 | ``` | 47 | ``` |
| 46 | 48 | ||
| 47 | **With nak CLI:** | 49 | **With nak CLI (gRPC):** |
| 48 | ```bash | 50 | ```bash |
| 49 | # Pipe events from nak | 51 | # Pipe events from nak |
| 50 | nak event "Hello from nak!" | ./bin/testclient | 52 | nak event "Hello from nak!" | ./bin/testclient |
| 51 | 53 | ||
| 52 | # Or generate a signed event | 54 | # Or generate a signed event |
| 53 | nak event --sec <nsec> --kind 1 "My message" | ./bin/testclient | 55 | nak event --sec <nsec> --kind 1 "My message" | ./bin/testclient |
| 56 | ``` | ||
| 54 | 57 | ||
| 55 | # Output: | 58 | **With nak CLI (WebSocket/Nostr):** |
| 56 | # Read event from stdin: abc123... | 59 | ```bash |
| 57 | # Publishing event... | 60 | # Standard Nostr clients work out of the box! |
| 58 | # ✓ Event published successfully: abc123... | 61 | nak req -k 1 --limit 10 ws://localhost:8080 |
| 62 | |||
| 63 | # Publish via WebSocket | ||
| 64 | echo '{"kind":1,"content":"hello","tags":[]}' | nak event --sec <nsec> | nak publish ws://localhost:8080 | ||
| 59 | ``` | 65 | ``` |
| 60 | 66 | ||
| 61 | ## gRPC API | 67 | ## gRPC API |
| @@ -73,13 +79,18 @@ See [proto/nostr/v1/nostr.proto](proto/nostr/v1/nostr.proto) for the full API. | |||
| 73 | 79 | ||
| 74 | ## Current Status | 80 | ## Current Status |
| 75 | 81 | ||
| 76 | **Phase 1: gRPC Relay** | 82 | **Phase 1: Complete** ✅ |
| 77 | - ✅ SQLite storage with binary-first design | 83 | - ✅ SQLite storage with binary-first design |
| 78 | - ✅ Event validation (ID, signature) | 84 | - ✅ Event validation (ID, signature) |
| 79 | - ✅ gRPC publish/query API | 85 | - ✅ gRPC publish/query API |
| 80 | - ✅ Subscribe/streaming (real-time event delivery) | 86 | - ✅ Subscribe/streaming (real-time event delivery) |
| 81 | - ✅ Subscription management (filter matching, fan-out) | 87 | - ✅ Subscription management (filter matching, fan-out) |
| 82 | - ⏳ WebSocket server (planned for Nostr client compatibility) | 88 | - ✅ **WebSocket server (NIP-01) - standard Nostr clients work!** |
| 89 | |||
| 90 | **Compatible with:** | ||
| 91 | - Any gRPC client (custom or generated) | ||
| 92 | - Any Nostr client (Damus, Amethyst, Snort, Iris, Gossip, etc.) | ||
| 93 | - nak CLI for testing | ||
| 83 | 94 | ||
| 84 | ## Development | 95 | ## Development |
| 85 | 96 | ||
