From 49c9f37229c470b2072f3336a5e1927f0243f41d Mon Sep 17 00:00:00 2001 From: zmeyer44 Date: Thu, 1 Feb 2024 11:12:47 +0000 Subject: updated read me --- README.md | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index 6b83490..0d4805c 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-57: Lightning Zaps](57.md) - [NIP-58: Badges](58.md) - [NIP-65: Relay List Metadata](65.md) +- [NIP-71: Video Events](71.md) - [NIP-72: Moderated Communities](72.md) - [NIP-75: Zap Goals](75.md) - [NIP-78: Application-specific data](78.md) @@ -128,6 +129,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `30002` | Relay sets | [51](51.md) | | `30003` | Bookmark sets | [51](51.md) | | `30004` | Curation sets | [51](51.md) | +| `30005` | Video sets | [51](51.md) | | `30008` | Profile Badges | [58](58.md) | | `30009` | Badge Definition | [58](58.md) | | `30015` | Interest sets | [51](51.md) | @@ -147,6 +149,9 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `31925` | Calendar Event RSVP | [52](52.md) | | `31989` | Handler recommendation | [89](89.md) | | `31990` | Handler information | [89](89.md) | +| `34235` | Video Event | [71](71.md) | +| `34236` | Short-form Portrait Video Event | [71](71.md) | +| `34237` | Video View Event | [71](71.md) | | `34550` | Community Definition | [72](72.md) | [nostrocket]: https://github.com/nostrocket/NIPS/blob/main/Problems.md -- cgit v1.2.3 From cc6ac4f0b6d1779929dd7346536807699c21d6b2 Mon Sep 17 00:00:00 2001 From: zmeyer44 Date: Thu, 1 Feb 2024 11:14:59 +0000 Subject: making the format a bit nicer --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 0d4805c..1c2f806 100644 --- a/README.md +++ b/README.md @@ -149,9 +149,9 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `31925` | Calendar Event RSVP | [52](52.md) | | `31989` | Handler recommendation | [89](89.md) | | `31990` | Handler information | [89](89.md) | -| `34235` | Video Event | [71](71.md) | -| `34236` | Short-form Portrait Video Event | [71](71.md) | -| `34237` | Video View Event | [71](71.md) | +| `34235` | Video Event | [71](71.md) | +| `34236` | Short-form Portrait Video Event | [71](71.md) | +| `34237` | Video View Event | [71](71.md) | | `34550` | Community Definition | [72](72.md) | [nostrocket]: https://github.com/nostrocket/NIPS/blob/main/Problems.md -- cgit v1.2.3 From dda408f48774eb41f116aad8024a84e73ab894ac Mon Sep 17 00:00:00 2001 From: kieran Date: Thu, 16 May 2024 15:29:09 +0100 Subject: update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index b3736ea..8847888 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,8 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `1971` | Problem Tracker | [nostrocket][nostrocket] | | `1984` | Reporting | [56](56.md) | | `1985` | Label | [32](32.md) | +| `2003` | Torrent | [35](35.md) | +| `2004` | Torrent Comment | [35](35.md) | | `4550` | Community Post Approval | [72](72.md) | | `5000`-`5999` | Job Request | [90](90.md) | | `6000`-`6999` | Job Result | [90](90.md) | -- cgit v1.2.3 From 744b788427ce56d1cde99c5ccf4739bcaa8c75fb Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Wed, 22 May 2024 21:21:44 +0900 Subject: README: add NIP-35 and `e` tag pubkey --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index d45a42b..d93469f 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-31: Dealing with Unknown Events](31.md) - [NIP-32: Labeling](32.md) - [NIP-34: `git` stuff](34.md) +- [NIP-35: Torrents](35.md) - [NIP-36: Sensitive Content](36.md) - [NIP-38: User Statuses](38.md) - [NIP-39: External Identities in Profiles](39.md) @@ -224,7 +225,7 @@ Please update these lists when proposing NIPs introducing new event kinds. | name | value | other parameters | NIP | | ----------------- | ------------------------------------ | -------------------- | ------------------------------------- | -| `e` | event id (hex) | relay URL, marker | [01](01.md), [10](10.md) | +| `e` | event id (hex) | relay URL, marker, pubkey (hex) | [01](01.md), [10](10.md) | | `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) | | `a` | coordinates to an event | relay URL | [01](01.md) | | `d` | identifier | -- | [01](01.md) | -- cgit v1.2.3 From 12655c739c489beab33cb264c8f6298aadddd955 Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Wed, 22 May 2024 21:28:00 +0900 Subject: Format tags table --- README.md | 96 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index d93469f..e430f13 100644 --- a/README.md +++ b/README.md @@ -223,54 +223,54 @@ Please update these lists when proposing NIPs introducing new event kinds. ## Standardized Tags -| name | value | other parameters | NIP | -| ----------------- | ------------------------------------ | -------------------- | ------------------------------------- | -| `e` | event id (hex) | relay URL, marker, pubkey (hex) | [01](01.md), [10](10.md) | -| `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) | -| `a` | coordinates to an event | relay URL | [01](01.md) | -| `d` | identifier | -- | [01](01.md) | -| `g` | geohash | -- | [52](52.md) | -| `i` | identity | proof | [39](39.md) | -| `k` | kind number (string) | -- | [18](18.md), [25](25.md), [72](72.md) | -| `l` | label, label namespace | annotations | [32](32.md) | -| `L` | label namespace | -- | [32](32.md) | -| `m` | MIME type | -- | [94](94.md) | -| `q` | event id (hex) | relay URL | [18](18.md) | -| `r` | a reference (URL, etc) | petname | | -| `r` | relay url | marker | [65](65.md) | -| `t` | hashtag | -- | | -| `alt` | summary | -- | [31](31.md) | -| `amount` | millisatoshis, stringified | -- | [57](57.md) | -| `bolt11` | `bolt11` invoice | -- | [57](57.md) | -| `challenge` | challenge string | -- | [42](42.md) | -| `client` | name, address | relay URL | [89](89.md) | -| `clone` | git clone URL | -- | [34](34.md) | -| `content-warning` | reason | -- | [36](36.md) | -| `delegation` | pubkey, conditions, delegation token | -- | [26](26.md) | -| `description` | description | -- | [34](34.md), [57](57.md), [58](58.md) | -| `emoji` | shortcode, image URL | -- | [30](30.md) | -| `encrypted` | -- | -- | [90](90.md) | -| `expiration` | unix timestamp (string) | -- | [40](40.md) | -| `goal` | event id (hex) | relay URL | [75](75.md) | -| `image` | image URL | dimensions in pixels | [23](23.md), [58](58.md) | -| `imeta` | inline metadata | -- | [92](92.md) | -| `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | -| `location` | location string | -- | [52](52.md), [99](99.md) | -| `name` | name | -- | [34](34.md), [58](58.md) | -| `nonce` | random | -- | [13](13.md) | -| `preimage` | hash of `bolt11` invoice | -- | [57](57.md) | -| `price` | price | currency, frequency | [99](99.md) | -| `proxy` | external ID | protocol | [48](48.md) | -| `published_at` | unix timestamp (string) | -- | [23](23.md) | -| `relay` | relay url | -- | [42](42.md), [17](17.md) | -| `relays` | relay list | -- | [57](57.md) | -| `server` | file storage server url | -- | [96](96.md) | -| `subject` | subject | -- | [14](14.md), [17](17.md) | -| `summary` | article summary | -- | [23](23.md) | -| `thumb` | badge thumbnail | dimensions in pixels | [58](58.md) | -| `title` | article title | -- | [23](23.md) | -| `web` | webpage URL | -- | [34](34.md) | -| `zap` | pubkey (hex), relay URL | weight | [57](57.md) | +| name | value | other parameters | NIP | +| ----------------- | ------------------------------------ | ------------------------------- | ------------------------------------- | +| `e` | event id (hex) | relay URL, marker, pubkey (hex) | [01](01.md), [10](10.md) | +| `p` | pubkey (hex) | relay URL, petname | [01](01.md), [02](02.md) | +| `a` | coordinates to an event | relay URL | [01](01.md) | +| `d` | identifier | -- | [01](01.md) | +| `g` | geohash | -- | [52](52.md) | +| `i` | identity | proof | [39](39.md) | +| `k` | kind number (string) | -- | [18](18.md), [25](25.md), [72](72.md) | +| `l` | label, label namespace | annotations | [32](32.md) | +| `L` | label namespace | -- | [32](32.md) | +| `m` | MIME type | -- | [94](94.md) | +| `q` | event id (hex) | relay URL | [18](18.md) | +| `r` | a reference (URL, etc) | petname | | +| `r` | relay url | marker | [65](65.md) | +| `t` | hashtag | -- | | +| `alt` | summary | -- | [31](31.md) | +| `amount` | millisatoshis, stringified | -- | [57](57.md) | +| `bolt11` | `bolt11` invoice | -- | [57](57.md) | +| `challenge` | challenge string | -- | [42](42.md) | +| `client` | name, address | relay URL | [89](89.md) | +| `clone` | git clone URL | -- | [34](34.md) | +| `content-warning` | reason | -- | [36](36.md) | +| `delegation` | pubkey, conditions, delegation token | -- | [26](26.md) | +| `description` | description | -- | [34](34.md), [57](57.md), [58](58.md) | +| `emoji` | shortcode, image URL | -- | [30](30.md) | +| `encrypted` | -- | -- | [90](90.md) | +| `expiration` | unix timestamp (string) | -- | [40](40.md) | +| `goal` | event id (hex) | relay URL | [75](75.md) | +| `image` | image URL | dimensions in pixels | [23](23.md), [58](58.md) | +| `imeta` | inline metadata | -- | [92](92.md) | +| `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | +| `location` | location string | -- | [52](52.md), [99](99.md) | +| `name` | name | -- | [34](34.md), [58](58.md) | +| `nonce` | random | -- | [13](13.md) | +| `preimage` | hash of `bolt11` invoice | -- | [57](57.md) | +| `price` | price | currency, frequency | [99](99.md) | +| `proxy` | external ID | protocol | [48](48.md) | +| `published_at` | unix timestamp (string) | -- | [23](23.md) | +| `relay` | relay url | -- | [42](42.md), [17](17.md) | +| `relays` | relay list | -- | [57](57.md) | +| `server` | file storage server url | -- | [96](96.md) | +| `subject` | subject | -- | [14](14.md), [17](17.md) | +| `summary` | article summary | -- | [23](23.md) | +| `thumb` | badge thumbnail | dimensions in pixels | [58](58.md) | +| `title` | article title | -- | [23](23.md) | +| `web` | webpage URL | -- | [34](34.md) | +| `zap` | pubkey (hex), relay URL | weight | [57](57.md) | ## Criteria for acceptance of NIPs -- cgit v1.2.3 From 0cb9b605190cb3a821b8d24d27e495bbfe92c09d Mon Sep 17 00:00:00 2001 From: hodlbod Date: Thu, 23 May 2024 20:31:36 -0700 Subject: Add CIP-01 (#1251) * Add CIP-01 * Rename cip to nud --------- Co-authored-by: Jon Staab --- README.md | 2 ++ 1 file changed, 2 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index e430f13..d5b6219 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `30617` | Repository announcements | [34](34.md) | | `30818` | Wiki article | [54](54.md) | | `30819` | Redirects | [54](54.md) | +| `31890` | Feed | [NUD: Custom Feeds](https://wikifreedia.xyz/cip-01/97c70a44366a6535c1) | | `31922` | Date-Based Calendar Event | [52](52.md) | | `31923` | Time-Based Calendar Event | [52](52.md) | | `31924` | Calendar | [52](52.md) | @@ -192,6 +193,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `34550` | Community Definition | [72](72.md) | | `39000-9` | Group metadata events | [29](29.md) | +[NUD: Custom Feeds]: https://wikifreedia.xyz/cip-01/97c70a44366a6535c1 [nostrocket]: https://github.com/nostrocket/NIPS/blob/main/Problems.md [lnpub]: https://github.com/shocknet/Lightning.Pub/blob/master/proto/autogenerated/client.md -- cgit v1.2.3 From 765c7313979af899cbc3b6b582b415a41e71904d Mon Sep 17 00:00:00 2001 From: /dev/fd0 <147166694+1440000bytes@users.noreply.github.com> Date: Sun, 26 May 2024 10:58:14 +0000 Subject: add joinstr event kind in README (#1257) * add joinstr event kind * remove extra spaces * change kind number Co-authored-by: fiatjaf_ --------- Co-authored-by: fiatjaf_ --- README.md | 2 ++ 1 file changed, 2 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index d5b6219..b058952 100644 --- a/README.md +++ b/README.md @@ -192,10 +192,12 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `34237` | Video View Event | [71](71.md) | | `34550` | Community Definition | [72](72.md) | | `39000-9` | Group metadata events | [29](29.md) | +| `2022` | Coinjoin Pool | [joinstr][joinstr] | [NUD: Custom Feeds]: https://wikifreedia.xyz/cip-01/97c70a44366a6535c1 [nostrocket]: https://github.com/nostrocket/NIPS/blob/main/Problems.md [lnpub]: https://github.com/shocknet/Lightning.Pub/blob/master/proto/autogenerated/client.md +[joinstr]: https://gitlab.com/1440000bytes/joinstr/-/blob/main/NIP.md ## Message types -- cgit v1.2.3 From a649a75e5a7dbd958a3066f914af8854d022440a Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Sun, 26 May 2024 23:57:05 +0900 Subject: README: fix order of kinds --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index b058952..0709a48 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `1985` | Label | [32](32.md) | | `2003` | Torrent | [35](35.md) | | `2004` | Torrent Comment | [35](35.md) | +| `2022` | Coinjoin Pool | [joinstr][joinstr] | | `4550` | Community Post Approval | [72](72.md) | | `5000`-`5999` | Job Request | [90](90.md) | | `6000`-`6999` | Job Result | [90](90.md) | @@ -192,7 +193,6 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `34237` | Video View Event | [71](71.md) | | `34550` | Community Definition | [72](72.md) | | `39000-9` | Group metadata events | [29](29.md) | -| `2022` | Coinjoin Pool | [joinstr][joinstr] | [NUD: Custom Feeds]: https://wikifreedia.xyz/cip-01/97c70a44366a6535c1 [nostrocket]: https://github.com/nostrocket/NIPS/blob/main/Problems.md -- cgit v1.2.3 From deb00734930f18e5d9440a6a459ead28f639cbd2 Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Mon, 27 May 2024 12:40:01 +0900 Subject: README: add `nonce` tag difficulty --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index 0709a48..f0af4f0 100644 --- a/README.md +++ b/README.md @@ -261,7 +261,7 @@ Please update these lists when proposing NIPs introducing new event kinds. | `lnurl` | `bech32` encoded `lnurl` | -- | [57](57.md) | | `location` | location string | -- | [52](52.md), [99](99.md) | | `name` | name | -- | [34](34.md), [58](58.md) | -| `nonce` | random | -- | [13](13.md) | +| `nonce` | random | difficulty | [13](13.md) | | `preimage` | hash of `bolt11` invoice | -- | [57](57.md) | | `price` | price | currency, frequency | [99](99.md) | | `proxy` | external ID | protocol | [48](48.md) | -- cgit v1.2.3 From 8199b795716a253655db5f7cce7463202e0d47d0 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Mon, 27 May 2024 08:31:29 -0700 Subject: Raise bar for NIP implementation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index f0af4f0..ffa6393 100644 --- a/README.md +++ b/README.md @@ -278,7 +278,7 @@ Please update these lists when proposing NIPs introducing new event kinds. ## Criteria for acceptance of NIPs -1. They should be implemented in at least two clients and one relay -- when applicable. +1. They should be fully implemented in at least two clients and one relay -- when applicable. 2. They should make sense. 3. They should be optional and backwards-compatible: care must be taken such that clients and relays that choose to not implement them do not stop working when interacting with the ones that choose to. 4. There should be no more than one way of doing the same thing. -- cgit v1.2.3 From fcc1b0baf653d70402b2f379eeb5d881885aae00 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 2 Jun 2024 16:38:01 -0500 Subject: Link `r` tag in the README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index ffa6393..c9368af 100644 --- a/README.md +++ b/README.md @@ -240,7 +240,7 @@ Please update these lists when proposing NIPs introducing new event kinds. | `L` | label namespace | -- | [32](32.md) | | `m` | MIME type | -- | [94](94.md) | | `q` | event id (hex) | relay URL | [18](18.md) | -| `r` | a reference (URL, etc) | petname | | +| `r` | a reference (URL, etc) | petname | [24](24.md) | | `r` | relay url | marker | [65](65.md) | | `t` | hashtag | -- | | | `alt` | summary | -- | [31](31.md) | -- cgit v1.2.3 From 23d605140bdbe6ccc43c6ebbcd2412a05ff262fa Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Tue, 4 Jun 2024 10:57:24 +0900 Subject: README: add NIP-100 to list --- README.md | 1 + 1 file changed, 1 insertion(+) (limited to 'README.md') diff --git a/README.md b/README.md index c9368af..bd78784 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-96: HTTP File Storage Integration](96.md) - [NIP-98: HTTP Auth](98.md) - [NIP-99: Classified Listings](99.md) +- [NIP-100: Android Signer Application](100.md) ## Event Kinds | kind | description | NIP | -- cgit v1.2.3 From a6dfc7b5e513ea3070abcded3608b28e4d4a1512 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 5 Jun 2024 15:24:43 -0300 Subject: fix broken nip number. --- 100.md | 538 -------------------------------------------------------------- 55.md | 538 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 539 insertions(+), 539 deletions(-) delete mode 100644 100.md create mode 100644 55.md (limited to 'README.md') diff --git a/100.md b/100.md deleted file mode 100644 index 4a304c3..0000000 --- a/100.md +++ /dev/null @@ -1,538 +0,0 @@ -# NIP-100 - -## Android Signer Application - -`draft` `optional` - -This NIP describes a method for 2-way communication between an Android signer and any Nostr client on Android. The Android signer is an Android Application and the client can be a web client or an Android application. - -# Usage for Android applications - -The Android signer uses Intents and Content Resolvers to communicate between applications. - -To be able to use the Android signer in your application you should add this to your AndroidManifest.xml: - -```xml - - - - - - - -``` - -Then you can use this function to check if there's a signer application installed: - -```kotlin -fun isExternalSignerInstalled(context: Context): Boolean { - val intent = - Intent().apply { - action = Intent.ACTION_VIEW - data = Uri.parse("nostrsigner:") - } - val infos = context.packageManager.queryIntentActivities(intent, 0) - return infos.size > 0 -} -``` - -## Using Intents - -To get the result back from the Signer Application you should use `registerForActivityResult` or `rememberLauncherForActivityResult` in Kotlin. If you are using another framework check the documentation of your framework or a third party library to get the result. - -```kotlin -val launcher = rememberLauncherForActivityResult( - contract = ActivityResultContracts.StartActivityForResult(), - onResult = { result -> - if (result.resultCode != Activity.RESULT_OK) { - Toast.makeText( - context, - "Sign request rejected", - Toast.LENGTH_SHORT - ).show() - } else { - val signature = activityResult.data?.getStringExtra("signature") - // Do something with signature ... - } - } -) -``` - -Create the Intent using the **nostrsigner** scheme: - -```kotlin -val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$content")) -``` - -Set the Signer package name: - -```kotlin -intent.`package` = "com.example.signer" -``` - -Send the Intent: - -```kotlin -launcher.launch(intent) -``` - -### Methods - -- **get_public_key** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "get_public_key") - // You can send some default permissions for the user to authorize for ever - val permissions = listOf( - Permission( - type = "sign_event", - kind = 22242 - ), - Permission( - type = "nip44_decrypt" - ) - ) - intent.putExtra("permissions", permissions.toJson()) - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **npub** in the signature field - - ```kotlin - val npub = intent.data?.getStringExtra("signature") - // The package name of the signer application - val packageName = intent.data?.getStringExtra("package") - ``` - -- **sign_event** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$eventJson")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "sign_event") - // To handle results when not waiting between intents - intent.putExtra("id", event.id) - // Send the current logged in user npub - intent.putExtra("current_user", npub) - - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **signature**, **id** and **event** fields - - ```kotlin - val signature = intent.data?.getStringExtra("signature") - // The id you sent - val id = intent.data?.getStringExtra("id") - val signedEventJson = intent.data?.getStringExtra("event") - ``` - -- **nip04_encrypt** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$plaintext")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "nip04_encrypt") - // to control the result in your application in case you are not waiting the result before sending another intent - intent.putExtra("id", "some_id") - // Send the current logged in user npub - intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) - // Send the hex pubKey that will be used for encrypting the data - intent.putExtra("pubKey", pubKey) - - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **signature** and **id** fields - - ```kotlin - val encryptedText = intent.data?.getStringExtra("signature") - // the id you sent - val id = intent.data?.getStringExtra("id") - ``` - -- **nip44_encrypt** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$plaintext")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "nip44_encrypt") - // to control the result in your application in case you are not waiting the result before sending another intent - intent.putExtra("id", "some_id") - // Send the current logged in user npub - intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) - // Send the hex pubKey that will be used for encrypting the data - intent.putExtra("pubKey", pubKey) - - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **signature** and **id** fields - - ```kotlin - val encryptedText = intent.data?.getStringExtra("signature") - // the id you sent - val id = intent.data?.getStringExtra("id") - ``` - -- **nip04_decrypt** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$encryptedText")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "nip04_decrypt") - // to control the result in your application in case you are not waiting the result before sending another intent - intent.putExtra("id", "some_id") - // Send the current logged in user npub - intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) - // Send the hex pubKey that will be used for decrypting the data - intent.putExtra("pubKey", pubKey) - - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **signature** and **id** fields - - ```kotlin - val plainText = intent.data?.getStringExtra("signature") - // the id you sent - val id = intent.data?.getStringExtra("id") - ``` - -- **nip44_decrypt** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$encryptedText")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "nip04_decrypt") - // to control the result in your application in case you are not waiting the result before sending another intent - intent.putExtra("id", "some_id") - // Send the current logged in user npub - intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) - // Send the hex pubKey that will be used for decrypting the data - intent.putExtra("pubKey", pubKey) - - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **signature** and **id** fields - - ```kotlin - val plainText = intent.data?.getStringExtra("signature") - // the id you sent - val id = intent.data?.getStringExtra("id") - ``` - -- **decrypt_zap_event** - - params: - - ```kotlin - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$eventJson")) - intent.`package` = "com.example.signer" - intent.putExtra("type", "decrypt_zap_event") - // to control the result in your application in case you are not waiting the result before sending another intent - intent.putExtra("id", "some_id") - // Send the current logged in user npub - intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) - context.startActivity(intent) - ``` - - result: - - If the user approved intent it will return the **signature** and **id** fields - - ```kotlin - val eventJson = intent.data?.getStringExtra("signature") - // the id you sent - val id = intent.data?.getStringExtra("id") - ``` - -## Using Content Resolver - -To get the result back from Signer Application you should use contentResolver.query in Kotlin. If you are using another framework check the documentation of your framework or a third party library to get the result. - -If the user did not check the "remember my choice" option, the npub is not in Signer Application or the signer type is not recognized the `contentResolver` will return null - -For the SIGN_EVENT type Signer Application returns two columns "signature" and "event". The column event is the signed event json - -For the other types Signer Application returns the column "signature" - -If the user chose to always reject the event, signer application will return the column "rejected" and you should not open signer application - -### Methods - -- **get_public_key** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.GET_PUBLIC_KEY"), - listOf("login"), - null, - null, - null - ) - ``` - - result: - - Will return the **npub** in the signature column - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - if (index < 0) return - val npub = it.getString(index) - } - ``` - -- **sign_event** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.SIGN_EVENT"), - listOf("$eventJson", "", "${logged_in_user_npub}"), - null, - null, - null - ) - ``` - - result: - - Will return the **signature** and the **event** columns - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - val indexJson = it.getColumnIndex("event") - val signature = it.getString(index) - val eventJson = it.getString(indexJson) - } - ``` - -- **nip04_encrypt** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.NIP04_ENCRYPT"), - listOf("$plainText", "${hex_pub_key}", "${logged_in_user_npub}"), - null, - null, - null - ) - ``` - - result: - - Will return the **signature** column - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - val encryptedText = it.getString(index) - } - ``` - -- **nip44_encrypt** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.NIP44_ENCRYPT"), - listOf("$plainText", "${hex_pub_key}", "${logged_in_user_npub}"), - null, - null, - null - ) - ``` - - result: - - Will return the **signature** column - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - val encryptedText = it.getString(index) - } - ``` - -- **nip04_decrypt** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.NIP04_DECRYPT"), - listOf("$encryptedText", "${hex_pub_key}", "${logged_in_user_npub}"), - null, - null, - null - ) - ``` - - result: - - Will return the **signature** column - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - val encryptedText = it.getString(index) - } - ``` - -- **nip44_decrypt** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.NIP44_DECRYPT"), - listOf("$encryptedText", "${hex_pub_key}", "${logged_in_user_npub}"), - null, - null, - null - ) - ``` - - result: - - Will return the **signature** column - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - val encryptedText = it.getString(index) - } - ``` - -- **decrypt_zap_event** - - params: - - ```kotlin - val result = context.contentResolver.query( - Uri.parse("content://com.example.signer.DECRYPT_ZAP_EVENT"), - listOf("$eventJson", "", "${logged_in_user_npub}"), - null, - null, - null - ) - ``` - - result: - - Will return the **signature** column - - ```kotlin - if (result == null) return - - if (result.moveToFirst()) { - val index = it.getColumnIndex("signature") - val eventJson = it.getString(index) - } - ``` - -# Usage for Web Applications - -Since web applications can't receive a result from the intent, you should add a modal to paste the signature or the event json or create a callback url. - -If you send the callback url parameter, Signer Application will send the result to the url. - -If you don't send a callback url, Signer Application will copy the result to the clipboard. - -You can configure the `returnType` to be **signature** or **event**. - -Android intents and browser urls have limitations, so if you are using the `returnType` of **event** consider using the parameter **compressionType=gzip** that will return "Signer1" + Base64 gzip encoded event json - -## Methods - -- **get_public_key** - - params: - - ```js - window.href = `nostrsigner:?compressionType=none&returnType=signature&type=get_public_key&callbackUrl=https://example.com/?event=`; - ``` - -- **sign_event** - - params: - - ```js - window.href = `nostrsigner:${eventJson}?compressionType=none&returnType=signature&type=sign_event&callbackUrl=https://example.com/?event=`; - ``` - -- **nip04_encrypt** - - params: - - ```js - window.href = `nostrsigner:${plainText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip04_encrypt&callbackUrl=https://example.com/?event=`; - ``` - -- **nip44_encrypt** - - params: - - ```js - window.href = `nostrsigner:${plainText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip44_encrypt&callbackUrl=https://example.com/?event=`; - ``` - -- **nip04_decrypt** - - params: - - ```js - window.href = `nostrsigner:${encryptedText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip04_decrypt&callbackUrl=https://example.com/?event=`; - ``` - -- **nip44_decrypt** - - params: - - ```js - window.href = `nostrsigner:${encryptedText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip44_decrypt&callbackUrl=https://example.com/?event=`; - ``` - -- **decrypt_zap_event** - - params: - - ```js - window.href = `nostrsigner:${eventJson}?compressionType=none&returnType=signature&type=decrypt_zap_event&callbackUrl=https://example.com/?event=`; - ``` - -## Example - -```js - - - - - - Document - - -

Test

- - - - -``` diff --git a/55.md b/55.md new file mode 100644 index 0000000..4565e8c --- /dev/null +++ b/55.md @@ -0,0 +1,538 @@ +# NIP-55 + +## Android Signer Application + +`draft` `optional` + +This NIP describes a method for 2-way communication between an Android signer and any Nostr client on Android. The Android signer is an Android Application and the client can be a web client or an Android application. + +# Usage for Android applications + +The Android signer uses Intents and Content Resolvers to communicate between applications. + +To be able to use the Android signer in your application you should add this to your AndroidManifest.xml: + +```xml + + + + + + + +``` + +Then you can use this function to check if there's a signer application installed: + +```kotlin +fun isExternalSignerInstalled(context: Context): Boolean { + val intent = + Intent().apply { + action = Intent.ACTION_VIEW + data = Uri.parse("nostrsigner:") + } + val infos = context.packageManager.queryIntentActivities(intent, 0) + return infos.size > 0 +} +``` + +## Using Intents + +To get the result back from the Signer Application you should use `registerForActivityResult` or `rememberLauncherForActivityResult` in Kotlin. If you are using another framework check the documentation of your framework or a third party library to get the result. + +```kotlin +val launcher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult(), + onResult = { result -> + if (result.resultCode != Activity.RESULT_OK) { + Toast.makeText( + context, + "Sign request rejected", + Toast.LENGTH_SHORT + ).show() + } else { + val signature = activityResult.data?.getStringExtra("signature") + // Do something with signature ... + } + } +) +``` + +Create the Intent using the **nostrsigner** scheme: + +```kotlin +val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$content")) +``` + +Set the Signer package name: + +```kotlin +intent.`package` = "com.example.signer" +``` + +Send the Intent: + +```kotlin +launcher.launch(intent) +``` + +### Methods + +- **get_public_key** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "get_public_key") + // You can send some default permissions for the user to authorize for ever + val permissions = listOf( + Permission( + type = "sign_event", + kind = 22242 + ), + Permission( + type = "nip44_decrypt" + ) + ) + intent.putExtra("permissions", permissions.toJson()) + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **npub** in the signature field + + ```kotlin + val npub = intent.data?.getStringExtra("signature") + // The package name of the signer application + val packageName = intent.data?.getStringExtra("package") + ``` + +- **sign_event** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$eventJson")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "sign_event") + // To handle results when not waiting between intents + intent.putExtra("id", event.id) + // Send the current logged in user npub + intent.putExtra("current_user", npub) + + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **signature**, **id** and **event** fields + + ```kotlin + val signature = intent.data?.getStringExtra("signature") + // The id you sent + val id = intent.data?.getStringExtra("id") + val signedEventJson = intent.data?.getStringExtra("event") + ``` + +- **nip04_encrypt** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$plaintext")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "nip04_encrypt") + // to control the result in your application in case you are not waiting the result before sending another intent + intent.putExtra("id", "some_id") + // Send the current logged in user npub + intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) + // Send the hex pubKey that will be used for encrypting the data + intent.putExtra("pubKey", pubKey) + + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **signature** and **id** fields + + ```kotlin + val encryptedText = intent.data?.getStringExtra("signature") + // the id you sent + val id = intent.data?.getStringExtra("id") + ``` + +- **nip44_encrypt** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$plaintext")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "nip44_encrypt") + // to control the result in your application in case you are not waiting the result before sending another intent + intent.putExtra("id", "some_id") + // Send the current logged in user npub + intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) + // Send the hex pubKey that will be used for encrypting the data + intent.putExtra("pubKey", pubKey) + + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **signature** and **id** fields + + ```kotlin + val encryptedText = intent.data?.getStringExtra("signature") + // the id you sent + val id = intent.data?.getStringExtra("id") + ``` + +- **nip04_decrypt** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$encryptedText")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "nip04_decrypt") + // to control the result in your application in case you are not waiting the result before sending another intent + intent.putExtra("id", "some_id") + // Send the current logged in user npub + intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) + // Send the hex pubKey that will be used for decrypting the data + intent.putExtra("pubKey", pubKey) + + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **signature** and **id** fields + + ```kotlin + val plainText = intent.data?.getStringExtra("signature") + // the id you sent + val id = intent.data?.getStringExtra("id") + ``` + +- **nip44_decrypt** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$encryptedText")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "nip04_decrypt") + // to control the result in your application in case you are not waiting the result before sending another intent + intent.putExtra("id", "some_id") + // Send the current logged in user npub + intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) + // Send the hex pubKey that will be used for decrypting the data + intent.putExtra("pubKey", pubKey) + + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **signature** and **id** fields + + ```kotlin + val plainText = intent.data?.getStringExtra("signature") + // the id you sent + val id = intent.data?.getStringExtra("id") + ``` + +- **decrypt_zap_event** + - params: + + ```kotlin + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("nostrsigner:$eventJson")) + intent.`package` = "com.example.signer" + intent.putExtra("type", "decrypt_zap_event") + // to control the result in your application in case you are not waiting the result before sending another intent + intent.putExtra("id", "some_id") + // Send the current logged in user npub + intent.putExtra("current_user", account.keyPair.pubKey.toNpub()) + context.startActivity(intent) + ``` + - result: + - If the user approved intent it will return the **signature** and **id** fields + + ```kotlin + val eventJson = intent.data?.getStringExtra("signature") + // the id you sent + val id = intent.data?.getStringExtra("id") + ``` + +## Using Content Resolver + +To get the result back from Signer Application you should use contentResolver.query in Kotlin. If you are using another framework check the documentation of your framework or a third party library to get the result. + +If the user did not check the "remember my choice" option, the npub is not in Signer Application or the signer type is not recognized the `contentResolver` will return null + +For the SIGN_EVENT type Signer Application returns two columns "signature" and "event". The column event is the signed event json + +For the other types Signer Application returns the column "signature" + +If the user chose to always reject the event, signer application will return the column "rejected" and you should not open signer application + +### Methods + +- **get_public_key** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.GET_PUBLIC_KEY"), + listOf("login"), + null, + null, + null + ) + ``` + - result: + - Will return the **npub** in the signature column + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + if (index < 0) return + val npub = it.getString(index) + } + ``` + +- **sign_event** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.SIGN_EVENT"), + listOf("$eventJson", "", "${logged_in_user_npub}"), + null, + null, + null + ) + ``` + - result: + - Will return the **signature** and the **event** columns + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + val indexJson = it.getColumnIndex("event") + val signature = it.getString(index) + val eventJson = it.getString(indexJson) + } + ``` + +- **nip04_encrypt** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.NIP04_ENCRYPT"), + listOf("$plainText", "${hex_pub_key}", "${logged_in_user_npub}"), + null, + null, + null + ) + ``` + - result: + - Will return the **signature** column + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + val encryptedText = it.getString(index) + } + ``` + +- **nip44_encrypt** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.NIP44_ENCRYPT"), + listOf("$plainText", "${hex_pub_key}", "${logged_in_user_npub}"), + null, + null, + null + ) + ``` + - result: + - Will return the **signature** column + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + val encryptedText = it.getString(index) + } + ``` + +- **nip04_decrypt** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.NIP04_DECRYPT"), + listOf("$encryptedText", "${hex_pub_key}", "${logged_in_user_npub}"), + null, + null, + null + ) + ``` + - result: + - Will return the **signature** column + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + val encryptedText = it.getString(index) + } + ``` + +- **nip44_decrypt** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.NIP44_DECRYPT"), + listOf("$encryptedText", "${hex_pub_key}", "${logged_in_user_npub}"), + null, + null, + null + ) + ``` + - result: + - Will return the **signature** column + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + val encryptedText = it.getString(index) + } + ``` + +- **decrypt_zap_event** + - params: + + ```kotlin + val result = context.contentResolver.query( + Uri.parse("content://com.example.signer.DECRYPT_ZAP_EVENT"), + listOf("$eventJson", "", "${logged_in_user_npub}"), + null, + null, + null + ) + ``` + - result: + - Will return the **signature** column + + ```kotlin + if (result == null) return + + if (result.moveToFirst()) { + val index = it.getColumnIndex("signature") + val eventJson = it.getString(index) + } + ``` + +# Usage for Web Applications + +Since web applications can't receive a result from the intent, you should add a modal to paste the signature or the event json or create a callback url. + +If you send the callback url parameter, Signer Application will send the result to the url. + +If you don't send a callback url, Signer Application will copy the result to the clipboard. + +You can configure the `returnType` to be **signature** or **event**. + +Android intents and browser urls have limitations, so if you are using the `returnType` of **event** consider using the parameter **compressionType=gzip** that will return "Signer1" + Base64 gzip encoded event json + +## Methods + +- **get_public_key** + - params: + + ```js + window.href = `nostrsigner:?compressionType=none&returnType=signature&type=get_public_key&callbackUrl=https://example.com/?event=`; + ``` + +- **sign_event** + - params: + + ```js + window.href = `nostrsigner:${eventJson}?compressionType=none&returnType=signature&type=sign_event&callbackUrl=https://example.com/?event=`; + ``` + +- **nip04_encrypt** + - params: + + ```js + window.href = `nostrsigner:${plainText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip04_encrypt&callbackUrl=https://example.com/?event=`; + ``` + +- **nip44_encrypt** + - params: + + ```js + window.href = `nostrsigner:${plainText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip44_encrypt&callbackUrl=https://example.com/?event=`; + ``` + +- **nip04_decrypt** + - params: + + ```js + window.href = `nostrsigner:${encryptedText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip04_decrypt&callbackUrl=https://example.com/?event=`; + ``` + +- **nip44_decrypt** + - params: + + ```js + window.href = `nostrsigner:${encryptedText}?pubKey=${hex_pub_key}&compressionType=none&returnType=signature&type=nip44_decrypt&callbackUrl=https://example.com/?event=`; + ``` + +- **decrypt_zap_event** + - params: + + ```js + window.href = `nostrsigner:${eventJson}?compressionType=none&returnType=signature&type=decrypt_zap_event&callbackUrl=https://example.com/?event=`; + ``` + +## Example + +```js + + + + + + Document + + +

Test

+ + + + +``` diff --git a/README.md b/README.md index bd78784..de85654 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-52: Calendar Events](52.md) - [NIP-53: Live Activities](53.md) - [NIP-54: Wiki](54.md) +- [NIP-55: Android Signer Application](100.md) - [NIP-56: Reporting](56.md) - [NIP-57: Lightning Zaps](57.md) - [NIP-58: Badges](58.md) @@ -85,7 +86,6 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-96: HTTP File Storage Integration](96.md) - [NIP-98: HTTP Auth](98.md) - [NIP-99: Classified Listings](99.md) -- [NIP-100: Android Signer Application](100.md) ## Event Kinds | kind | description | NIP | -- cgit v1.2.3 From ffe8c6699b2070589d3b677dfe94b83f7714354d Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Thu, 6 Jun 2024 09:57:54 +0900 Subject: README: update remark --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index de85654..18fae53 100644 --- a/README.md +++ b/README.md @@ -224,8 +224,6 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `AUTH` | used to send authentication challenges | [42](42.md) | | `COUNT` | used to send requested event counts to clients | [45](45.md) | -Please update these lists when proposing NIPs introducing new event kinds. - ## Standardized Tags | name | value | other parameters | NIP | @@ -277,6 +275,8 @@ Please update these lists when proposing NIPs introducing new event kinds. | `web` | webpage URL | -- | [34](34.md) | | `zap` | pubkey (hex), relay URL | weight | [57](57.md) | +Please update these lists when proposing new NIPs. + ## Criteria for acceptance of NIPs 1. They should be fully implemented in at least two clients and one relay -- when applicable. -- cgit v1.2.3 From e49f1349913d657ad5177282ba20f570d55dc16a Mon Sep 17 00:00:00 2001 From: Satochip Date: Thu, 6 Jun 2024 15:11:52 +0200 Subject: Update README.md Correct wrng link for NIP-55 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index 18fae53..87c5cb3 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos - [NIP-52: Calendar Events](52.md) - [NIP-53: Live Activities](53.md) - [NIP-54: Wiki](54.md) -- [NIP-55: Android Signer Application](100.md) +- [NIP-55: Android Signer Application](55.md) - [NIP-56: Reporting](56.md) - [NIP-57: Lightning Zaps](57.md) - [NIP-58: Badges](58.md) -- cgit v1.2.3 From ee114a1dacf85133f80ffd54f68eae46cd95e67d Mon Sep 17 00:00:00 2001 From: Asai Toshiya Date: Sat, 8 Jun 2024 23:05:18 +0900 Subject: README: remove `l` tag annotations --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index 87c5cb3..99c4245 100644 --- a/README.md +++ b/README.md @@ -235,7 +235,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos | `g` | geohash | -- | [52](52.md) | | `i` | identity | proof | [39](39.md) | | `k` | kind number (string) | -- | [18](18.md), [25](25.md), [72](72.md) | -| `l` | label, label namespace | annotations | [32](32.md) | +| `l` | label, label namespace | -- | [32](32.md) | | `L` | label namespace | -- | [32](32.md) | | `m` | MIME type | -- | [94](94.md) | | `q` | event id (hex) | relay URL | [18](18.md) | -- cgit v1.2.3