Files
website/NIP.md
Copilot 3868e088b4 Add NIP-86 relay management console (Relay Admin app) (#73)
* Initial plan

* Add NIP-86 protocol client library with tests

Co-authored-by: mroxso <24775431+mroxso@users.noreply.github.com>

* Add NIP-86 session hook and relay-admin app UI

Co-authored-by: mroxso <24775431+mroxso@users.noreply.github.com>

* Add integration tests, NIP.md, and apps.md docs for Relay Admin

Co-authored-by: mroxso <24775431+mroxso@users.noreply.github.com>

* Address review feedback on Relay Admin app

- sanitizeIconUrl() now only allows http:// for local relay hostnames
  (localhost/127.0.0.1/::1/*.local), matching its docstring and error
  message instead of accepting arbitrary http:// URLs.
- Scope the discovery-time cache clear to the previous session's own
  relay URL instead of removing every ['nip86'] query, so connecting in
  one Relay Admin window no longer disrupts other open windows.
- Use the AllowedPubkey type (not BannedPubkey) when mapping allowed-
  pubkey entries, since the structural overlap today made a real type
  mismatch invisible.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BYiUtZMQeA5RHggQw73wto

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: mroxso <24775431+mroxso@users.noreply.github.com>
Co-authored-by: highperfocused <highperfocused@pm.me>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-07 22:35:53 +02:00

1.7 KiB

NIPs and custom schemas

This project defines no custom event kinds. It implements and adopts the following protocols:

Implemented NIPs

  • NIP-86: Relay Management API (draft, optional) — the Relay Admin app (src/apps/relay-admin/) is a management client. Requests are JSON-RPC-like POSTs over HTTP(S) on the relay's own URI with the application/nostr+json+rpc content type, authorized with a NIP-98 event (kind 27235) whose u tag is the relay URL and whose payload tag binds it to the request body. The client treats supportedmethods as the source of truth and only calls methods the relay advertised; advertised names outside the standard method list are treated as relay-specific extensions and kept visually and semantically separate. No generic event-purge/delete method is assumed — NIP-86 does not define one.
  • NIP-98: HTTP Auth — used for NIP-86 authorization (with the NIP-86-required payload tag) and for Blossom uploads.
  • NIP-11: Relay Information Document — read at connect time to show relay identity in Relay Admin.

Adopted third-party kinds

  • Kind 777 ("Spell") — a third-party draft NIP from the Grimoire client, adopted as-is for interop. See docs/apps.md ("Spells are a third-party kind") and src/hooks/useSpells.ts.

Anything else (kinds 0, 1, 3, 5, 6, 16, 9802, 10002, 10003, 22242, 30023, 30311, 31337, 39701, …) follows the official NIPs as implemented in src/hooks/ and src/lib/.