nips/07.md
2023-02-10 23:54:59 -05:00

2.2 KiB

NIP-07

window.nostr capability for web browsers

draft optional author:fiatjaf author:ursuscamp

The window.nostr object may be made available by web browsers or extensions and websites or web-apps may make use of it after checking its availability.

That object must define the following methods:

async window.nostr.getPublicKey(): string // returns a public key as hex
async window.nostr.signEvent(event: Event): Event // takes an event object, adds `id`, `pubkey`, `sig`, and optional `delegation` tag and returns it

Aside from these two basic above, the following functions can also be implemented optionally:

async window.nostr.getRelays(): { [url: string]: {read: boolean, write: boolean} } // returns a basic map of relay urls to relay policies
async window.nostr.nip04.encrypt(pubkey, plaintext): string // returns ciphertext and iv as specified in nip-04
async window.nostr.nip04.decrypt(pubkey, ciphertext): string // takes ciphertext and iv as specified in nip-04

NIP-26 Considerations

Delegation can be supported in an extension by allowing the user to create a delegatee identity and storing the information necessary to construct the delegation tag, such as the signed token. There is no need for the extension to store the delegator's private key.

When operating with a delegated identity, an extension must return the delegator's public key from the getPublicKey method, so that the user may see their normal feed upon login. Additionally, during signEvent, the extension must modify the event by inserting the delegatee's pubkey, append a valid delegation tag to the end of the tags list and recalculate the event id, prior to signing the event.

The client, upon receiving the returned event, need only check for the presence of a delegation tag to determine how to handle the event. The client must accept the id, pubkey, sig and delegation tag from the signed delegation event.

Implementation