NIP-66 ====== Relay Discovery and Liveness Monitoring ------------------- `draft` `optional` This NIP defines events for relay discovery and the announcement of relay monitors. ## Relay Discovery Events `30166` relay discovery events document relay characteristics inferred either from a relay's [NIP 11](https://github.com/nostr-protocol/nips/blob/master/11.md) document, or via probing. Information corresponding to field in a relay's NIP 11 document MAY contradict actual values if monitors find that a different policy is implemented than is advertised. `content` MAY include the stringified JSON of the relay's NIP-11 informational document. The only required tag is the `d` tag, which MUST be set to the relay's [normalized](https://datatracker.ietf.org/doc/html/rfc3986#section-6) URL. For relays not accessible via URL, a hex-encoded pubkey MAY be used instead. Other tags include: - `rtt-open` - The relay's open round-trip time in milliseconds. - `rtt-read` - The relay's read round-trip time in milliseconds. - `rtt-write` - The relay's write round-trip time in milliseconds. - `n` - The relay's network type. SHOULD be one of `clearnet`, `tor`, `i2p`, `loki` - `T` - The relay type. Enumerated [relay type](https://github.com/nostr-protocol/nips/issues/1282) formatted as `PascalCase`, e.g. `PrivateInbox` - `N` - NIPs supported by the relay - `R` - Keys corresponding to requirements per [NIP 11](https://github.com/nostr-protocol/nips/blob/master/11.md)'s `limitations` array, including `auth`, `writes`, `pow`, and `payment`. False values should be specified using a `!` prefix, for example `!auth`. - `t` - A topic associated with this relay - `k` - Accepted and unaccepted kinds (false values prepended by `!`) - `g` - A [NIP-52](https://github.com/nostr-protocol/nips/blob/master/52.md) geohash Tags with more than one value should be repeated, rather than putting all values in a single tag, for example `[["t", "cats"], ["t", "dogs"]]`, rather than `[["t", "cats", "dogs"]]`. Example: ```json { "id": "", "pubkey": "", "created_at": "", "signature": "", "content": "", "kind": 30166, "tags": [ ["d","wss://some.relay/"], ["n", "clearnet"], ["N", "40"], ["N", "33"], ["R", "!payment"], ["R", "auth"], ["g", "ww8p1r4t8"], ["l", "en", "ISO-639-1"], ["t", "nsfw" ], ["rtt-open", 234 ] ] } ``` ## Relay Monitor Announcements Kind `10166` relay monitor announcements advertise the author's intent to publish `30166` events. This event is optional and is intended for monitors who intend to provide monitoring services at a regular and predictable frequency. Tags include: - `frequency` - The frequency in seconds at which the monitor publishes events. - `timeout` (optional) - The timeout values for various checks conducted by a monitor. Index `1` is the monitor's timeout in milliseconds. Index `2` describes what test the timeout is used for. If no index `2` is provided, it is inferred that the timeout provided applies to all tests. - `c` - a lowercase string describing the checks conducted by a monitor. Examples include `open`, `read`, `write`, `auth`, `nip11`, `dns`, and `geo`. - `g` - [NIP-52](https://github.com/nostr-protocol/nips/blob/master/11.md) geohash tag Monitors SHOULD also publish a `kind 0` profile and a `kind 10002` relay selections event. Example: ```json { "id": "", "pubkey": "", "created_at": "", "signature": "", "content": "", "tags": [ [ "timeout", "open", "5000" ], [ "timeout", "read", "3000" ], [ "timeout", "write", "3000" ], [ "timeout", "nip11", "3000" ], [ "frequency", "3600" ], [ "c", "ws" ], [ "c", "nip11" ], [ "c", "ssl" ], [ "c", "dns" ], [ "c", "geo" ] [ "g", "ww8p1r4t8" ] ] } ```