nips/43.md
2024-10-16 10:43:45 -07:00

1.9 KiB

NIP-43

Relay Access Requests

draft optional

This NIP defines a way for clients to request admission to relays enforcing authentication as defined in NIP 42 by signing an ephemeral event.

Join Request

This NIP defines kind 28934 events which are intended to allow clients to request admission to a relay. It MUST have a claim tag containing an invite code.

The event's created_at MUST be now, plus or minus a few minutes. Clients MAY send a claim at any time, but MUST check for relay support via NIP 11. This is to avoid non-compliant relays broadcasting invites to subscribers.

This event should be sent to a relay using the standard EVENT verb.

{
  "kind": 28934,
  "tags": [
    ["claim", "<invite code>"]
  ],
  // ...other fields
}

Upon receiving a claim, a relay MUST notify the client as to what the status of the claim is using an OK message. Failed claims SHOULD use the same standard "restricted: " prefix specified by NIP 42.

Some examples:

["OK", <event-id>, false, "restricted: That invite code is expired."]
["OK", <event-id>, false, "restricted: That is an invalid invite code."]
["OK", <event-id>, true, "claim-ignored: You are already a member of this relay."]
["OK", <event-id>, true, "claim-accepted: Welcome to wss://relay.bunk.skunk!"]

Invite Request

Users may request a claim string from a relay by making a request for kind 28935 events. These events MUST NOT be considered valid unless signed by the same pubkey as exists in the relay's NIP 11 document.

{
  "kind": 28935,
  "tags": [
    ["claim", "<invite code>"]
  ],
  // ...other fields
}

Note that these events are in the ephemeral range, which means relays must explicitly opt-in to this behavior by generating claims on the fly when requested. This allows relays to improve security by issuing a different claim for each request, only issuing claims to certain users, or expiring claims.