98 lines
3.9 KiB
Markdown
98 lines
3.9 KiB
Markdown
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": "<eventid>",
|
|
"pubkey": "<monitor's pubkey>",
|
|
"created_at": "<created_at [some recent date ...]>",
|
|
"signature": "<signature>",
|
|
"content": "<optional nip 11 document>",
|
|
"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": "<eventid>",
|
|
"pubkey": "<monitor's pubkey>",
|
|
"created_at": "<created_at [some recent date ...]>",
|
|
"signature": "<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" ]
|
|
]
|
|
}
|
|
```
|