mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-11-09 22:09:06 -05:00
b8f2e14e6d
Invoking NIP-07 methods as a part of page-load event listener creates intermittent issues due to race conditions between the browser's extension script and the client's page scripts.
38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
NIP-07
|
|
======
|
|
|
|
`window.nostr` capability for web browsers
|
|
------------------------------------------
|
|
|
|
`draft` `optional` `author:fiatjaf`
|
|
|
|
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` and `sig` 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
|
|
```
|
|
|
|
### User experience recommendation
|
|
Due to the way browsers load the extensions, it may take some time for `window.nostr` object will be fully ready to accept requests. Hence, it is a good idea to run the first `window.nostr` interaction on a user action on the web page (like a button click), and not during the page load.
|
|
|
|
Calling the `window.nostr` based methods during the page load runs the risk of intermittent issues due to race conditions between the client page's script and the extension's script
|
|
|
|
### Implementation
|
|
|
|
- [horse](https://github.com/fiatjaf/horse) (Chrome and derivatives)
|
|
- [nos2x](https://github.com/fiatjaf/nos2x) (Chrome and derivatives)
|
|
- [Alby](https://getalby.com) (Chrome and derivatives, Firefox, Safari)
|
|
- [Blockcore](https://www.blockcore.net/wallet) (Chrome and derivatives)
|
|
- [nos2x-fox](https://diegogurpegui.com/nos2x-fox/) (Firefox)
|
|
- [Flamingo](https://www.getflamingo.org/) (Chrome and derivatives)
|