NIP-37: Improving Draft events (#2016)

This commit is contained in:
Vitor Pamplona
2025-10-15 16:09:36 -04:00
committed by GitHub
parent d54c426709
commit 7b24bf803f

39
37.md
View File

@@ -1,50 +1,57 @@
NIP-37 NIP-37
====== ======
Draft Events Draft Wraps
------------ -----------
`draft` `optional` `draft` `optional`
This NIP defines kind `31234` as a private wrap for drafts of any other event kind. This NIP defines kind `31234` as an encrypted storage for unsigned draft events of any other kind.
The draft event is JSON-stringified, [NIP44-encrypted](44.md) to the signer's public key and placed inside the `.content` of the event. The draft is JSON-stringified, [NIP44-encrypted](44.md) to the signer's public key and placed inside the `.content`.
An additional `k` tag identifies the kind of the draft event. `k` tags identify the kind of the draft.
```js ```js
{ {
"kind": 31234, "kind": 31234,
"tags": [ "tags": [
["d", "<identifier>"], ["d", "<identifier>"],
["k", "<kind of the draft event>"], ["k", "<kind of the draft event>"], // required
["e", "<anchor event event id>", "<relay-url>"], ["expiration", "now + 90 days"] // recommended
["a", "<anchor event address>", "<relay-url>"],
], ],
"content": nip44Encrypt(JSON.stringify(draft_event)), "content": nip44Encrypt(JSON.stringify(draft_event)),
// other fields // other fields
} }
``` ```
A blanked `.content` means this draft has been deleted by a client but relays still have the event. A blanked `.content` field signals that the draft has been deleted.
Tags `e` and `a` identify one or more anchor events, such as parent events on replies. [NIP-40](40.md) `expiration` tags are recommended.
Clients SHOULD publish kind `31234` events to relays listed on kind `10013` below.
## Relay List for Private Content ## Relay List for Private Content
Kind `10013` indicates the user's preferred relays to store private events like Drafts. The event MUST include a list of `relay` URLs in private tags. Private tags are JSON Stringified, NIP-44-encrypted to the signer's keys and placed inside the .content of the event. Kind `10013` indicates the user's preferred relays to store private events like Draft Wraps.
The event MUST include a list of `relay` URLs in private tags. Private tags are JSON Stringified, [NIP44-encrypted](44.md) to the signer's keys and placed inside the .content of the event.
```js ```js
{ {
"kind": 10013, "kind": 10013,
"tags": [], "tags": [],
"content": nip44Encrypt(JSON.stringify([ "content": nip44Encrypt(
["relay", "wss://myrelay.mydomain.com"] JSON.stringify(
])) [
["relay", "wss://myrelay.mydomain.com"]
]
)
)
//...other fields //...other fields
} }
``` ```
Relays listed in this event SHOULD be authed and only allow downloads to events signed by the authed user. It's recommended that Private Storage relays SHOULD be [NIP-42](42.md)-authed and only allow downloads of events signed by the authed user.
Clients SHOULD publish kind `10013` events to the author's [NIP-65](65.md) `write` relays. Clients MUST publish kind `10013` events to the author's [NIP-65](65.md) `write` relays.