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.