diff options
| -rw-r--r-- | 01.md | 10 | ||||
| -rw-r--r-- | 11.md | 6 | ||||
| -rw-r--r-- | 15.md | 22 | ||||
| -rw-r--r-- | 45.md | 5 | ||||
| -rw-r--r-- | 52.md | 4 | ||||
| -rw-r--r-- | 58.md | 2 | ||||
| -rw-r--r-- | 75.md | 76 | ||||
| -rw-r--r-- | 94.md | 2 | ||||
| -rw-r--r-- | 98.md | 14 | ||||
| -rw-r--r-- | README.md | 9 |
10 files changed, 132 insertions, 18 deletions
| @@ -62,11 +62,13 @@ Each tag is an array of strings of arbitrary size, with some conventions around | |||
| 62 | 62 | ||
| 63 | The first element of the tag array is referred to as the tag _name_ or _key_ and the second as the tag _value_. So we can safely say that the event above has an `e` tag set to `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"`, an `alt` tag set to `"reply"` and so on. All elements after the second do not have a conventional name. | 63 | The first element of the tag array is referred to as the tag _name_ or _key_ and the second as the tag _value_. So we can safely say that the event above has an `e` tag set to `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"`, an `alt` tag set to `"reply"` and so on. All elements after the second do not have a conventional name. |
| 64 | 64 | ||
| 65 | This NIP defines 3 standard tags that can be used accross all event kinds with the same meaning. They are as follows: | 65 | This NIP defines 3 standard tags that can be used across all event kinds with the same meaning. They are as follows: |
| 66 | 66 | ||
| 67 | - The `e` tag, used to refer to an event: `["e", <32-bytes lowercase hex of the id of another event>, <recommended relay URL, optional>]` | 67 | - The `e` tag, used to refer to an event: `["e", <32-bytes lowercase hex of the id of another event>, <recommended relay URL, optional>]` |
| 68 | - The `p` tag, used to refer to another user: `["p", <32-bytes lowercase hex of a pubkey>, <recommended relay URL, optional>]` | 68 | - The `p` tag, used to refer to another user: `["p", <32-bytes lowercase hex of a pubkey>, <recommended relay URL, optional>]` |
| 69 | - The `a` tag, used to refer to a parameterized replaceable event: `["a", <kind integer>:<32-bytes lowercase hex of a pubkey>:<d tag value>, <recommended relay URL, optional>]` | 69 | - The `a` tag, used to refer to a (maybe parameterized) replaceable event |
| 70 | - for a parameterized replaceable event: `["a", <kind integer>:<32-bytes lowercase hex of a pubkey>:<d tag value>, <recommended relay URL, optional>]` | ||
| 71 | - for a non-parameterized replaceable event: `["a", <kind integer>:<32-bytes lowercase hex of a pubkey>:, <recommended relay URL, optional>]` | ||
| 70 | 72 | ||
| 71 | As a convention, all single-letter (only english alphabet letters: a-z, A-Z) key tags are expected to be indexed by relays, such that it is possible, for example, to query or subscribe to events that reference the event `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"` by using the `{"#e": "5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"}` filter. | 73 | As a convention, all single-letter (only english alphabet letters: a-z, A-Z) key tags are expected to be indexed by relays, such that it is possible, for example, to query or subscribe to events that reference the event `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"` by using the `{"#e": "5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"}` filter. |
| 72 | 74 | ||
| @@ -80,9 +82,9 @@ Kinds specify how clients should interpret the meaning of each event and the oth | |||
| 80 | And also a convention for kind ranges that allow for easier experimentation and flexibility of relay implementation: | 82 | And also a convention for kind ranges that allow for easier experimentation and flexibility of relay implementation: |
| 81 | 83 | ||
| 82 | - for kind `n` such that `1000 <= n < 10000`, events are **regular**, which means they're all expected to be stored by relays. | 84 | - for kind `n` such that `1000 <= n < 10000`, events are **regular**, which means they're all expected to be stored by relays. |
| 83 | - for kind `n` such that `10000 <= n < 20000 || k == 0 || k == 3`, events are **replaceable**, which means that, for each combination of `pubkey` and `kind`, only the latest event is expected to (SHOULD) be stored by relays, older versions are expected to be discarded. | 85 | - for kind `n` such that `10000 <= n < 20000 || n == 0 || n == 3`, events are **replaceable**, which means that, for each combination of `pubkey` and `kind`, only the latest event is expected to (SHOULD) be stored by relays, older versions are expected to be discarded. |
| 84 | - for kind `n` such that `20000 <= n < 30000`, events are **ephemeral**, which means they are not expected to be stored by relays. | 86 | - for kind `n` such that `20000 <= n < 30000`, events are **ephemeral**, which means they are not expected to be stored by relays. |
| 85 | - for kind `n` such that `30000 <= n < 40000`, events are **parameterized replaceable**, which means that, for each combination of `pubkey`, `kind` and the `d` tag, only the latest event is expected to be stored by relays, older versions are expected to be discarded. | 87 | - for kind `n` such that `30000 <= n < 40000`, events are **parameterized replaceable**, which means that, for each combination of `pubkey`, `kind` and the `d` tag's first value, only the latest event is expected to be stored by relays, older versions are expected to be discarded. |
| 86 | 88 | ||
| 87 | In case of replaceable events with the same timestamp, the event with the lowest id (first in lexical order) should be retained, and the other discarded. | 89 | In case of replaceable events with the same timestamp, the event with the lowest id (first in lexical order) should be retained, and the other discarded. |
| 88 | 90 | ||
| @@ -80,6 +80,8 @@ are rejected or fail immediately. | |||
| 80 | "min_pow_difficulty": 30, | 80 | "min_pow_difficulty": 30, |
| 81 | "auth_required": true, | 81 | "auth_required": true, |
| 82 | "payment_required": true, | 82 | "payment_required": true, |
| 83 | "created_at_lower_limit":31536000, | ||
| 84 | "created_at_upper_limit":3, | ||
| 83 | } | 85 | } |
| 84 | ... | 86 | ... |
| 85 | } | 87 | } |
| @@ -123,6 +125,10 @@ Even if set to False, authentication may be required for specific actions. | |||
| 123 | 125 | ||
| 124 | - `payment_required`: this relay requires payment before a new connection may perform any action. | 126 | - `payment_required`: this relay requires payment before a new connection may perform any action. |
| 125 | 127 | ||
| 128 | - `created_at_lower_limit`: 'created_at' lower limit as defined in [NIP-22](22.md) | ||
| 129 | |||
| 130 | - `created_at_upper_limit`: 'created_at' upper limit as defined in [NIP-22](22.md) | ||
| 131 | |||
| 126 | ### Event Retention ### | 132 | ### Event Retention ### |
| 127 | 133 | ||
| 128 | There may be a cost associated with storing data forever, so relays | 134 | There may be a cost associated with storing data forever, so relays |
| @@ -220,6 +220,28 @@ The below json goes in `content` of [NIP04](https://github.com/nostr-protocol/ni | |||
| 220 | "shipped": <Bool, true/false has been shipped>, | 220 | "shipped": <Bool, true/false has been shipped>, |
| 221 | } | 221 | } |
| 222 | ``` | 222 | ``` |
| 223 | ## Customize Marketplace | ||
| 224 | Create a customized user experience using the `naddr` from [NIP-19](https://github.com/nostr-protocol/nips/blob/master/19.md#shareable-identifiers-with-extra-metadata). The use of `naddr` enables easy sharing of marketplace events while incorporating a rich set of metadata. This metadata can include relays, merchant profiles, and more. Subsequently, it allows merchants to be grouped into a market, empowering the market creator to configure the marketplace's user interface and user experience, and share that marketplace. This customization can encompass elements such as market name, description, logo, banner, themes, and even color schemes, offering a tailored and unique marketplace experience. | ||
| 225 | |||
| 226 | ### Event `30019`: Create or update marketplace UI/UX | ||
| 227 | |||
| 228 | **Event Content**: | ||
| 229 | ```json | ||
| 230 | { | ||
| 231 | "name": <String (optional), market name>, | ||
| 232 | "about": <String (optional), market description>, | ||
| 233 | "ui": { | ||
| 234 | "picture": <String (optional), market logo image URL>, | ||
| 235 | "banner": <String (optional), market logo banner URL>, | ||
| 236 | "theme": <String (optional), market theme>, | ||
| 237 | "darkMode": <Bool, true/false> | ||
| 238 | }, | ||
| 239 | "merchants": <[String] (optional), array of pubkeys>, | ||
| 240 | ... | ||
| 241 | } | ||
| 242 | ``` | ||
| 243 | |||
| 244 | This event leverages naddr to enable comprehensive customization and sharing of marketplace configurations, fostering a unique and engaging marketplace environment. | ||
| 223 | 245 | ||
| 224 | ## Customer support events | 246 | ## Customer support events |
| 225 | 247 | ||
| @@ -21,6 +21,7 @@ This NIP defines the verb `COUNT`, which accepts a subscription id and filters a | |||
| 21 | ``` | 21 | ``` |
| 22 | 22 | ||
| 23 | Counts are returned using a `COUNT` response in the form `{"count": <integer>}`. Relays may use probabilistic counts to reduce compute requirements. | 23 | Counts are returned using a `COUNT` response in the form `{"count": <integer>}`. Relays may use probabilistic counts to reduce compute requirements. |
| 24 | In case a relay uses probabilistic counts, it MAY indicate it in the response with `approximate` key i.e. `{"count": <integer>, "approximate": <true|false>}`. | ||
| 24 | 25 | ||
| 25 | ``` | 26 | ``` |
| 26 | ["COUNT", <subscription_id>, {"count": <integer>}] | 27 | ["COUNT", <subscription_id>, {"count": <integer>}] |
| @@ -36,4 +37,8 @@ Examples: | |||
| 36 | # Count posts and reactions | 37 | # Count posts and reactions |
| 37 | ["COUNT", <subscription_id>, {"kinds": [1, 7], "authors": [<pubkey>]}] | 38 | ["COUNT", <subscription_id>, {"kinds": [1, 7], "authors": [<pubkey>]}] |
| 38 | ["COUNT", <subscription_id>, {"count": 5}] | 39 | ["COUNT", <subscription_id>, {"count": 5}] |
| 40 | |||
| 41 | # Count posts approximately | ||
| 42 | ["COUNT", <subscription_id>, {"kinds": [1]}] | ||
| 43 | ["COUNT", <subscription_id>, {"count": 93412452, "approximate": true}] | ||
| 39 | ``` | 44 | ``` |
| @@ -30,7 +30,7 @@ The list of tags are as follows: | |||
| 30 | * `start` (required) inclusive start date in ISO 8601 format (YYYY-MM-DD). Must be less than `end`, if it exists. | 30 | * `start` (required) inclusive start date in ISO 8601 format (YYYY-MM-DD). Must be less than `end`, if it exists. |
| 31 | * `end` (optional) exclusive end date in ISO 8601 format (YYYY-MM-DD). If omitted, the calendar event ends on the same date as `start`. | 31 | * `end` (optional) exclusive end date in ISO 8601 format (YYYY-MM-DD). If omitted, the calendar event ends on the same date as `start`. |
| 32 | * `location` (optional) location of the calendar event. e.g. address, GPS coordinates, meeting room name, link to video call | 32 | * `location` (optional) location of the calendar event. e.g. address, GPS coordinates, meeting room name, link to video call |
| 33 | * `g` (optional) [geohash](https://en.wikipedia.org/wiki/Geohash) to associate calendar event with a searchable physical location as suggested as an example by [NIP-12](12.md) | 33 | * `g` (optional) [geohash](https://en.wikipedia.org/wiki/Geohash) to associate calendar event with a searchable physical location |
| 34 | * `p` (optional, repeated) 32-bytes hex pubkey of a participant, optional recommended relay URL, and participant's role in the meeting | 34 | * `p` (optional, repeated) 32-bytes hex pubkey of a participant, optional recommended relay URL, and participant's role in the meeting |
| 35 | * `t` (optional, repeated) hashtag to categorize calendar event | 35 | * `t` (optional, repeated) hashtag to categorize calendar event |
| 36 | * `r` (optional, repeated) references / links to web pages, documents, video calls, recorded videos, etc. | 36 | * `r` (optional, repeated) references / links to web pages, documents, video calls, recorded videos, etc. |
| @@ -88,7 +88,7 @@ The list of tags are as follows: | |||
| 88 | * `start_tzid` (optional) time zone of the start timestamp, as defined by the IANA Time Zone Database. e.g., `America/Costa_Rica` | 88 | * `start_tzid` (optional) time zone of the start timestamp, as defined by the IANA Time Zone Database. e.g., `America/Costa_Rica` |
| 89 | * `end_tzid` (optional) time zone of the end timestamp, as defined by the IANA Time Zone Database. e.g., `America/Costa_Rica`. If omitted and `start_tzid` is provided, the time zone of the end timestamp is the same as the start timestamp. | 89 | * `end_tzid` (optional) time zone of the end timestamp, as defined by the IANA Time Zone Database. e.g., `America/Costa_Rica`. If omitted and `start_tzid` is provided, the time zone of the end timestamp is the same as the start timestamp. |
| 90 | * `location` (optional) location of the calendar event. e.g. address, GPS coordinates, meeting room name, link to video call | 90 | * `location` (optional) location of the calendar event. e.g. address, GPS coordinates, meeting room name, link to video call |
| 91 | * `g` (optional) [geohash](https://en.wikipedia.org/wiki/Geohash) to associate calendar event with a searchable physical location as suggested as an example by [NIP-12](12.md) | 91 | * `g` (optional) [geohash](https://en.wikipedia.org/wiki/Geohash) to associate calendar event with a searchable physical location |
| 92 | * `p` (optional, repeated) 32-bytes hex pubkey of a participant, optional recommended relay URL, and participant's role in the meeting | 92 | * `p` (optional, repeated) 32-bytes hex pubkey of a participant, optional recommended relay URL, and participant's role in the meeting |
| 93 | * `t` (optional, repeated) hashtag to categorize calendar event | 93 | * `t` (optional, repeated) hashtag to categorize calendar event |
| 94 | * `r` (optional, repeated) references / links to web pages, documents, video calls, recorded videos, etc. | 94 | * `r` (optional, repeated) references / links to web pages, documents, video calls, recorded videos, etc. |
| @@ -11,7 +11,7 @@ user profiles: | |||
| 11 | 11 | ||
| 12 | 1. A "Badge Definition" event is defined as a parameterized replaceable event with kind `30009` having a `d` tag with a value that uniquely identifies the badge (e.g. `bravery`) published by the badge issuer. Badge definitions can be updated. | 12 | 1. A "Badge Definition" event is defined as a parameterized replaceable event with kind `30009` having a `d` tag with a value that uniquely identifies the badge (e.g. `bravery`) published by the badge issuer. Badge definitions can be updated. |
| 13 | 13 | ||
| 14 | 2. A "Badge Award" event is a kind `8` event with a single `a` tag referencing a "Define Badge" event and one or more `p` tags, one for each pubkey the badge issuer wishes to award. Awarded badges are immutable and non-transferrable. | 14 | 2. A "Badge Award" event is a kind `8` event with a single `a` tag referencing a "Badge Definition" event and one or more `p` tags, one for each pubkey the badge issuer wishes to award. Awarded badges are immutable and non-transferrable. |
| 15 | 15 | ||
| 16 | 3. A "Profile Badges" event is defined as a parameterized replaceable event | 16 | 3. A "Profile Badges" event is defined as a parameterized replaceable event |
| 17 | with kind `30008` with a `d` tag with the value `profile_badges`. | 17 | with kind `30008` with a `d` tag with the value `profile_badges`. |
| @@ -0,0 +1,76 @@ | |||
| 1 | # NIP-75 | ||
| 2 | |||
| 3 | ## Zap Goals | ||
| 4 | |||
| 5 | `draft` `optional` `author:verbiricha` | ||
| 6 | |||
| 7 | This NIP defines an event for creating fundraising goals. Users can contribute funds towards the goal by zapping the goal event. | ||
| 8 | |||
| 9 | ## Nostr Event | ||
| 10 | |||
| 11 | A `kind:9041` event is used. | ||
| 12 | |||
| 13 | The `.content` contains a human-readable description of the goal. | ||
| 14 | |||
| 15 | The following tags are defined as REQUIRED. | ||
| 16 | |||
| 17 | - `amount` - target amount in milisats. | ||
| 18 | - `relays` - a list of relays the zaps to this goal will be sent to and tallied from. | ||
| 19 | |||
| 20 | Example event: | ||
| 21 | |||
| 22 | ```json | ||
| 23 | { | ||
| 24 | "kind": 9041, | ||
| 25 | "tags": [ | ||
| 26 | ["relays", "wss://alicerelay.example.com", "wss://bobrelay.example.com", ...], | ||
| 27 | ["amount", "210000"], | ||
| 28 | ], | ||
| 29 | "content": "Nostrasia travel expenses", | ||
| 30 | ...other fields | ||
| 31 | ``` | ||
| 32 | |||
| 33 | The following tags are OPTIONAL. | ||
| 34 | |||
| 35 | - `closed_at` - timestamp for determining which zaps are included in the tally. Zap receipts published after the `closed_at` timestamp SHOULD NOT count towards the goal progress. | ||
| 36 | |||
| 37 | ```json | ||
| 38 | { | ||
| 39 | "kind": 9041, | ||
| 40 | "tags": [ | ||
| 41 | ["relays", "wss://alicerelay.example.com", "wss://bobrelay.example.com", ...], | ||
| 42 | ["amount", "210000"], | ||
| 43 | ["closed_at", "<unix timestamp in seconds>"], | ||
| 44 | ], | ||
| 45 | "content": "Nostrasia travel expenses", | ||
| 46 | ...other fields | ||
| 47 | ``` | ||
| 48 | |||
| 49 | The goal MAY include an `r` or `a` tag linking to a URL or parameterized replaceable event. | ||
| 50 | |||
| 51 | The goal MAY include multiple beneficiary pubkeys by specifying [`zap` tags](57.md#appendix-g-zap-tag-on-other-events). | ||
| 52 | |||
| 53 | Parameterized replaceable events can link to a goal by using a `goal` tag specifying the event id and an optional relay hint. | ||
| 54 | |||
| 55 | ```json | ||
| 56 | { | ||
| 57 | "kind": 3XXXX, | ||
| 58 | "tags": [ | ||
| 59 | ... | ||
| 60 | ["goal", "<event id>", "<Relay URL (optional)>"], | ||
| 61 | ], | ||
| 62 | ...other fields | ||
| 63 | ``` | ||
| 64 | |||
| 65 | ## Client behavior | ||
| 66 | |||
| 67 | Clients MAY display funding goals on user profiles. | ||
| 68 | |||
| 69 | When zapping a goal event, clients MUST include the relays in the `relays` tag of the goal event in the zap request `relays` tag. | ||
| 70 | |||
| 71 | When zapping a parameterized replaceable event with a `goal` tag, clients SHOULD tag the goal event id in the `e` tag of the zap request. | ||
| 72 | |||
| 73 | ## Use cases | ||
| 74 | |||
| 75 | - Fundraising clients | ||
| 76 | - Adding funding goals to events such as long form posts, badges or live streams | ||
| @@ -13,7 +13,7 @@ The purpose of this NIP is to allow an organization and classification of shared | |||
| 13 | This NIP specifies the use of the `1063` event type, having in `content` a description of the file content, and a list of tags described below: | 13 | This NIP specifies the use of the `1063` event type, having in `content` a description of the file content, and a list of tags described below: |
| 14 | 14 | ||
| 15 | * `url` the url to download the file | 15 | * `url` the url to download the file |
| 16 | * `m` a string indicating the data type of the file. The MIME types format must be used (https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) | 16 | * `m` a string indicating the data type of the file. The [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) format must be used, and they should be lowercase. |
| 17 | * `"aes-256-gcm"` (optional) key and nonce for AES-GCM encryption with tagSize always 128bits | 17 | * `"aes-256-gcm"` (optional) key and nonce for AES-GCM encryption with tagSize always 128bits |
| 18 | * `x` containing the SHA-256 hexencoded string of the file. | 18 | * `x` containing the SHA-256 hexencoded string of the file. |
| 19 | * `size` (optional) size of file in bytes | 19 | * `size` (optional) size of file in bytes |
| @@ -6,9 +6,9 @@ HTTP Auth | |||
| 6 | 6 | ||
| 7 | `draft` `optional` `author:kieran` `author:melvincarvalho` | 7 | `draft` `optional` `author:kieran` `author:melvincarvalho` |
| 8 | 8 | ||
| 9 | This NIP defines an ephemerial event used to authorize requests to HTTP servers using nostr events. | 9 | This NIP defines an ephemeral event used to authorize requests to HTTP servers using nostr events. |
| 10 | 10 | ||
| 11 | This is useful for HTTP services which are build for Nostr and deal with Nostr user accounts. | 11 | This is useful for HTTP services which are built for Nostr and deal with Nostr user accounts. |
| 12 | 12 | ||
| 13 | ## Nostr event | 13 | ## Nostr event |
| 14 | 14 | ||
| @@ -16,7 +16,7 @@ A `kind 27235` (In reference to [RFC 7235](https://www.rfc-editor.org/rfc/rfc723 | |||
| 16 | 16 | ||
| 17 | The `content` SHOULD be empty. | 17 | The `content` SHOULD be empty. |
| 18 | 18 | ||
| 19 | The following tags are defined as REQUIRED. | 19 | The following tags MUST be included. |
| 20 | 20 | ||
| 21 | * `u` - absolute URL | 21 | * `u` - absolute URL |
| 22 | * `method` - HTTP Request Method | 22 | * `method` - HTTP Request Method |
| @@ -45,7 +45,7 @@ Example event: | |||
| 45 | 45 | ||
| 46 | Servers MUST perform the following checks in order to validate the event: | 46 | Servers MUST perform the following checks in order to validate the event: |
| 47 | 1. The `kind` MUST be `27235`. | 47 | 1. The `kind` MUST be `27235`. |
| 48 | 2. The `created_at` MUST be within a reasonable time window (suggestion 60 seconds). | 48 | 2. The `created_at` timestamp MUST be within a reasonable time window (suggestion 60 seconds). |
| 49 | 3. The `u` tag MUST be exactly the same as the absolute request URL (including query parameters). | 49 | 3. The `u` tag MUST be exactly the same as the absolute request URL (including query parameters). |
| 50 | 4. The `method` tag MUST be the same HTTP method used for the requested resource. | 50 | 4. The `method` tag MUST be the same HTTP method used for the requested resource. |
| 51 | 51 | ||
| @@ -53,11 +53,11 @@ When the request contains a body (as in POST/PUT/PATCH methods) clients SHOULD i | |||
| 53 | 53 | ||
| 54 | If one of the checks was to fail the server SHOULD respond with a 401 Unauthorized response code. | 54 | If one of the checks was to fail the server SHOULD respond with a 401 Unauthorized response code. |
| 55 | 55 | ||
| 56 | All other checks which server MAY do are OPTIONAL, and implementation specific. | 56 | Servers MAY perform additional implementation-specific validation checks. |
| 57 | 57 | ||
| 58 | ## Request Flow | 58 | ## Request Flow |
| 59 | 59 | ||
| 60 | Using the `Authorization` header, the `kind 27235` event MUST be `base64` encoded and use the Authorization scheme `Nostr` | 60 | Using the `Authorization` HTTP header, the `kind 27235` event MUST be `base64` encoded and use the Authorization scheme `Nostr` |
| 61 | 61 | ||
| 62 | Example HTTP Authorization header: | 62 | Example HTTP Authorization header: |
| 63 | ``` | 63 | ``` |
| @@ -65,4 +65,4 @@ Authorization: Nostr eyJpZCI6ImZlOTY0ZTc1ODkwMzM2MGYyOGQ4NDI0ZDA5MmRhODQ5NGVkMjA | |||
| 65 | ``` | 65 | ``` |
| 66 | 66 | ||
| 67 | ## Reference Implementations | 67 | ## Reference Implementations |
| 68 | - C# ASP.NET `AuthenticationHandler` [NostrAuth.cs](https://gist.github.com/v0l/74346ae530896115bfe2504c8cd018d3) \ No newline at end of file | 68 | - C# ASP.NET `AuthenticationHandler` [NostrAuth.cs](https://gist.github.com/v0l/74346ae530896115bfe2504c8cd018d3) |
| @@ -63,6 +63,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 63 | - [NIP-58: Badges](58.md) | 63 | - [NIP-58: Badges](58.md) |
| 64 | - [NIP-65: Relay List Metadata](65.md) | 64 | - [NIP-65: Relay List Metadata](65.md) |
| 65 | - [NIP-72: Moderated Communities](72.md) | 65 | - [NIP-72: Moderated Communities](72.md) |
| 66 | - [NIP-75: Zap Goals](75.md) | ||
| 66 | - [NIP-78: Application-specific data](78.md) | 67 | - [NIP-78: Application-specific data](78.md) |
| 67 | - [NIP-89: Recommended Application Handlers](89.md) | 68 | - [NIP-89: Recommended Application Handlers](89.md) |
| 68 | - [NIP-94: File Metadata](94.md) | 69 | - [NIP-94: File Metadata](94.md) |
| @@ -93,6 +94,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | |||
| 93 | | `1984` | Reporting | [56](56.md) | | 94 | | `1984` | Reporting | [56](56.md) | |
| 94 | | `1985` | Label | [32](32.md) | | 95 | | `1985` | Label | [32](32.md) | |
| 95 | | `4550` | Community Post Approval | [72](72.md) | | 96 | | `4550` | Community Post Approval | [72](72.md) | |
| 97 | | `9041` | Zap Goal | [75](75.md) | | ||
| 96 | | `9734` | Zap Request | [57](57.md) | | 98 | | `9734` | Zap Request | [57](57.md) | |
| 97 | | `9735` | Zap | [57](57.md) | | 99 | | `9735` | Zap | [57](57.md) | |
| 98 | | `10000` | Mute List | [51](51.md) | | 100 | | `10000` | Mute List | [51](51.md) | |
| @@ -159,12 +161,13 @@ Please update these lists when proposing NIPs introducing new event kinds. | |||
| 159 | | `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) | | 161 | | `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) | |
| 160 | | `a` | coordinates to an event | relay URL | [01](01.md) | | 162 | | `a` | coordinates to an event | relay URL | [01](01.md) | |
| 161 | | `d` | identifier | -- | [01](01.md) | | 163 | | `d` | identifier | -- | [01](01.md) | |
| 162 | | `alt` | Alt tag | -- | [31](31.md) | | 164 | | `alt` | summary | -- | [31](31.md) | |
| 163 | | `g` | geohash | -- | [52](52.md) | | 165 | | `g` | geohash | -- | [52](52.md) | |
| 164 | | `i` | identity | proof | [39](39.md) | | 166 | | `i` | identity | proof | [39](39.md) | |
| 165 | | `k` | kind number (string) | -- | [18](18.md), [72](72.md) | | 167 | | `k` | kind number (string) | -- | [18](18.md), [72](72.md) | |
| 166 | | `l` | label, label namespace | annotations | [32](32.md) | | 168 | | `l` | label, label namespace | annotations | [32](32.md) | |
| 167 | | `L` | label namespace | -- | [32](32.md) | | 169 | | `L` | label namespace | -- | [32](32.md) | |
| 170 | | `m` | MIME type | -- | [94](94.md) | | ||
| 168 | | `r` | a reference (URL, etc) | petname | | | 171 | | `r` | a reference (URL, etc) | petname | | |
| 169 | | `r` | relay url | marker | [65](65.md) | | 172 | | `r` | relay url | marker | [65](65.md) | |
| 170 | | `t` | hashtag | -- | | | 173 | | `t` | hashtag | -- | | |
| @@ -173,10 +176,10 @@ Please update these lists when proposing NIPs introducing new event kinds. | |||
| 173 | | `challenge` | challenge string | -- | [42](42.md) | | 176 | | `challenge` | challenge string | -- | [42](42.md) | |
| 174 | | `content-warning` | reason | -- | [36](36.md) | | 177 | | `content-warning` | reason | -- | [36](36.md) | |
| 175 | | `delegation` | pubkey, conditions, delegation token | -- | [26](26.md) | | 178 | | `delegation` | pubkey, conditions, delegation token | -- | [26](26.md) | |
| 176 | | `description` | badge description | -- | [58](58.md) | | 179 | | `description` | invoice/badge description | -- | [57](57.md), [58](58.md) | |
| 177 | | `description` | invoice description | -- | [57](57.md) | | ||
| 178 | | `emoji` | shortcode, image URL | -- | [30](30.md) | | 180 | | `emoji` | shortcode, image URL | -- | [30](30.md) | |
| 179 | | `expiration` | unix timestamp (string) | -- | [40](40.md) | | 181 | | `expiration` | unix timestamp (string) | -- | [40](40.md) | |
| 182 | | `goal` | event id (hex) | relay URL | [75](75.md) | | ||
| 180 | | `image` | image URL | dimensions in pixels | [23](23.md), [58](58.md) | | 183 | | `image` | image URL | dimensions in pixels | [23](23.md), [58](58.md) | |
| 181 | | `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | | 184 | | `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | |
| 182 | | `location` | location string | -- | [52](52.md), [99](99.md) | | 185 | | `location` | location string | -- | [52](52.md), [99](99.md) | |