nips/17.md

86 lines
2.5 KiB
Markdown
Raw Normal View History

2023-06-13 18:12:31 -04:00
NIP-17
======
Event Metadata
---------------
`draft` `optional` `author:arthurfranca`
Relays may attach event metadata to requested events.
## Motivation
To save relay bandwidth while helping clients show event metadata estimates faster.
## Fields
All fields are optional and live inside an extra nip17 key.
Some fields only make sense for a subset of kinds.
New fields may be added to this NIP later.
### Returned Event Example
```js
{
2023-07-18 18:04:43 -04:00
"kind": ..., // 1, 30023, 0, ...
2023-06-13 18:12:31 -04:00
..., // regular keys
"nip17": {
2023-07-04 09:46:35 -04:00
"country": "US", // ISO 3166-1 alpha-2 code extracted from NIP-32 label (geohash/country/... l tag) or detected by IP
2023-07-18 18:04:43 -04:00
"followers": 500, // sent with kind 0 events
2023-06-13 18:12:31 -04:00
"language": "en", // ISO 639-1 code of detected event.content language
2023-07-18 18:04:43 -04:00
"reactions": {
"+": 8, // kind 7 "+" reaction count (should be the sum of "+" and all emoji reactions)
"-": 0, // kind 7 "-" reaction count
"🤙️": 10 // kind 7 specific emoji reaction count
},
2023-07-18 17:18:53 -04:00
"relays": ["wss://relay.url"], // event found originally on these relays
2023-06-13 18:12:31 -04:00
"replies": 10, // direct descendant kind 1 reply count
"reposts": 20, // NIP-18 repost count
"views": 900, // request count from different IPs, device ids or pubkeys
"zaps": 7, // kind 9735 count
2023-07-18 18:04:43 -04:00
"zap_amount": 10000 // kind 9735 millisats amount sum
2023-06-13 18:12:31 -04:00
}
}
```
2023-07-04 09:46:35 -04:00
## Filter Extensions
2023-07-18 18:04:43 -04:00
Clients can use extra filter attributes when requesting events. They additional attributes
are limited to a subset of the NIP-17 fields and are namespaced in the `nip17` filter key.
2023-07-04 09:46:35 -04:00
Relays should use NIP-11 `supported_nip_extensions` when supporting an extension.
For example: { "supported_nips": [17], "supported_nip_extensions": ["nip17language", "nip17country"] }
2023-07-18 18:04:43 -04:00
### NIP-17country
Filter by country.
Example request: `["REQ", <sub_id>, { "kinds": [1], ..., "nip17": { "country": ["US", "GB"] } }]`
### NIP-17followers
Filter by number of followers.
Example request: `["REQ", <sub_id>, { "kinds": [0], ..., "nip17": { "followers": ">100000" } }]`
2023-07-04 09:46:35 -04:00
### NIP-17language
Filter by language.
2023-07-18 18:04:43 -04:00
Example request: `["REQ", <sub_id>, { "kinds": [1], ..., "nip17": { "language": ["en", "pt"] } }]`
2023-07-04 09:46:35 -04:00
2023-07-18 18:04:43 -04:00
### NIP-17reactions
2023-07-04 09:46:35 -04:00
2023-07-18 18:04:43 -04:00
Filter by number of reactions. Just `reactions.+` and `reactions.-` fields.
Example request: `["REQ", <sub_id>, { "kinds": [1], ..., "nip17": { "reactions.+": ">1000", "reactions.-": "<1000" } }]`
### NIP-17replies
Filter by number of replies.
2023-07-04 09:46:35 -04:00
2023-07-18 18:04:43 -04:00
Example request: `["REQ", <sub_id>, { "kinds": [1], ..., "nip17": { "replies": ">100" } }]`