AKA Profiles is a Chrome Extension, based on nos2x and adds support for multiple public / private key pairs.
The primary purpose is enabling web apps to request the signing of events using the locally stored private key, thereby eliminating the need to give the private key to web apps.
It also stores a list of your public keys, reducing copying / pasting of keys into various apps.
To install latest version, download V1.0.7-*.zip and extract files. Then search for "how to load unpacked extension in chrome".
Version 1.07 adds Most Recent Visits, allowing one click access to apps. Apps that have most recently requested getPublicKey() are shown first. This feature can be enable / disabled in Options.
- added NIP-44 support
- disable autocomplete for forms
- updated display names for kinds during permission request
- updated nostr-tools version
- during window.nostr.signEvent(event), if pubkey specified in event, sign event with corresponding private key instead of using current pubkey
- added new function window.nostr.getSharedPublicKeys that returns all public keys previously shared with client. Based on always allow getPublicKey() permission
- fixed issued where profile didn't change during permission ask
- updated to newer permission model in nos2x
- support for NIP-07 switching accounts
- removed support for signing delegation
- fixed screen width errors
Supported
- getPublicKey()
- signEvent(event)
- getRelays()
- nip04.encrypt()
- nip04.decrypt()
- window.nostr.on('accountChanged', accountChangedHandler)
These javascript functions are made available to web apps through injection of window.nostr
script element defined in nostr-provider.js
into the DOM.
AKA Profiles uses the same app permission model as nos2x
npm run build
The built extension files are written to dist
folder.
Install from Chrome Web Store,
Otherwise, use the files in the dist
folder after compiling:
- Open Chrome browser and paste
chrome://extensions
into the address bar. - Enable Developer mode by clicking Developer mode toggle (top right)
- Click Load Unpacked button in the menu bar.
- Select the
dist
folder. - Click the Extension icon in Chrome, and click AKA Profiles icon.
- Paste in your private key.
- "Add new profile..." is available in dropdown in top right
- Right click on AKA Profiles icon and select Options to revoke app permissions or to add preferred relays
If Access Request prompt dialog doesn't appear when loading a web page
- Check to see if it is already open, but got hidden behind the current window
- Ensure other signer extensions are not also enabled (e.g. nos2x, Alby)
To integrate, see the following compatible web apps
- Nostr.chat - repo
- Snort.social - repo
- nostra.me - repo
Search repositories for window.nostr.getPublicKey()
As much underlying code as possible was reused from nos2x
. For reference, this is how both AKA Profiles
and nos2x
processes application requests.
As specified in NIP-07, the browser extension's contentScript.js
injects nostr-provider.js script into element window.nostr
on page load. The calling application needs to wait for the insertion before accessing.
Functions like window.nostr.getPublicKey()
are defined in nostr-provider.js, and when called, post a message (window.postMessage
) with ext: "aka-profiles"
.
contentScript.js
, which runs in the context of the web page, listens for those messages, and in turn sends the message (browser.runtime.sendMessage
) to background.js
.
background.js
then processes the request, opening up a new window if user interaction is necessary. The result is then returned as as response back up the chain of message senders.