From 6da937507cf67614aacd1fc4d1704d2138436d98 Mon Sep 17 00:00:00 2001 From: arthurfranca Date: Fri, 22 Sep 2023 10:49:27 -0300 Subject: [PATCH] Pick just 3 fields and filters as required --- 17.md | 82 +++++++++++++++++++++++++---------------------------------- 1 file changed, 35 insertions(+), 47 deletions(-) diff --git a/17.md b/17.md index 56f53be4..67753991 100644 --- a/17.md +++ b/17.md @@ -10,76 +10,64 @@ Relays may attach event metadata to requested events. ## Motivation -To save relay bandwidth while helping clients show event metadata estimates faster. +To save relay and client bandwidth. ## 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. +All extra fields live inside an extra `meta` key. ### Returned Event Example ```js { "kind": ..., // 1, 30023, 0, ... - ..., // regular keys - "nip17": { - "country": "US", // ISO 3166-1 alpha-2 code extracted from NIP-32 label (geohash/country/... l tag) or detected by IP - "followers": 500, // sent with kind 0 events - "language": "en", // ISO 639-1 code of detected event.content language - "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 - }, - "relays": ["wss://relay.url"], // event found originally on these relays + ..., // regular event fields + "meta": { + // v REQUIRED v + "isRoot": true, // true when the event holds no `e` nor `a` tags + "language": "en", // ISO 639-1 code of detected using event.content language + // ISO 3166-1 alpha-2 code. Detection strategies: + // - detected by IP + // - extracted from "g" (geohash) tag + // - selecting one of the countries that use the detected "language" as the main one + "country": "US", + // ^ REQUIRED ^ + + // v OPTIONAL v "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 + "followers": 500, // sent with kind 0 events; the value is 0 otherwise "zaps": 7, // kind 9735 count - "zap_amount": 10000 // kind 9735 millisats amount sum + "zap_amount": 10000, // kind 9735 millisats amount sum + "reactions": { + "+": 12, // kind 7 "+" reaction count (should be the sum of "+" and all emoji reactions) + "-": 3, // kind 7 "-" reaction count + "🤙️": 10 // kind 7 specific emoji reaction count + }, + "relays": ["wss://relay.url"] // event found originally on these relays + // ^ OPTIONAL ^ } } ``` -## Filter Extensions +## Filters -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. +Relays MUST support extra `REQ` message's filter attributes inside the `meta` field. Multiple +fields inside the `meta` key are considered "AND" conditions. -Relays should use NIP-11 `supported_nip_extensions` when supporting an extension. +#### Is Root -For example: { "supported_nips": [17], "supported_nip_extensions": ["nip17language", "nip17country"] } +`["REQ", , { "kinds": [1], ..., "meta": { "isRoot": false } }]` -### NIP-17country +### Language -Filter by country. +The array is considered "OR" condition. -Example request: `["REQ", , { "kinds": [1], ..., "nip17": { "country": ["US", "GB"] } }]` +`["REQ", , { "kinds": [1], ..., "meta": { "language": ["en", "pt"] } }]` -### NIP-17followers +#### Country -Filter by number of followers. +The array is considered "OR" condition. -Example request: `["REQ", , { "kinds": [0], ..., "nip17": { "followers": ">100000" } }]` - -### NIP-17language - -Filter by language. - -Example request: `["REQ", , { "kinds": [1], ..., "nip17": { "language": ["en", "pt"] } }]` - -### NIP-17reactions - -Filter by number of reactions. Just `reactions.+` and `reactions.-` fields. - -Example request: `["REQ", , { "kinds": [1], ..., "nip17": { "reactions.+": ">1000", "reactions.-": "<1000" } }]` - -### NIP-17replies - -Filter by number of replies. - -Example request: `["REQ", , { "kinds": [1], ..., "nip17": { "replies": ">100" } }]` +`["REQ", , { "kinds": [1], ..., "meta": { "country": ["US", "GB"] } }]`