Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/neilck/aka-extension
Nostr Signing Extension for Chrome supporting multiple key pairs.
https://github.com/neilck/aka-extension
extension-chrome nip-07 nos2x nostr
Last synced: about 1 month ago
JSON representation
Nostr Signing Extension for Chrome supporting multiple key pairs.
- Host: GitHub
- URL: https://github.com/neilck/aka-extension
- Owner: neilck
- Created: 2023-04-20T11:19:35.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-04-16T16:04:06.000Z (8 months ago)
- Last Synced: 2024-04-16T21:14:46.932Z (8 months ago)
- Topics: extension-chrome, nip-07, nos2x, nostr
- Language: TypeScript
- Homepage: https://chrome.google.com/webstore/detail/aka-profiles/ncmflpbbagcnakkolfpcpogheckolnad
- Size: 1.45 MB
- Stars: 20
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
- awesome-nostr - Aka Profile - extension.svg?style=social) - Nostr Signing Extension for Chrome supporting multiple key pairs based on nos2x. (NIP-07 Browser extensions / Client reviews and/or comparisons)
README
# AKA Profiles
![screenshot](docs/images/screenshot.png "AKA Profiles")
## Nostr signer extension with multiple keys
AKA Profiles is a [Chrome Extension](https://chrome.google.com/webstore/detail/aka-profiles/ncmflpbbagcnakkolfpcpogheckolnad), based on [nos2x](https://github.com/fiatjaf/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.
## Version 1.06
- fixed issued where profile didn't change during permission ask
## Version 1.05
- updated to newer permission model in nos2x
- support for NIP-07 switching accounts
- removed support for signing delegation
- fixed screen width errors**Supported**
[NIP-07](https://github.com/nostr-protocol/nips/blob/master/07.md)
- getPublicKey()
- signEvent()
- getRelays()[NIP-04](https://github.com/nostr-protocol/nips/blob/master/04.md)
- nip04.encrypt()
- nip04.decrypt()[NIP-07 switching accounts](https://github.com/nostr-protocol/nips/pull/701)
- 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
## User Guide
### Compiling
`npm run build`
The built extension files are written to `dist` folder.
### Installation
Install from [Chrome Web Store](https://chrome.google.com/webstore/detail/aka-profiles/ncmflpbbagcnakkolfpcpogheckolnad),
Otherwise, use the files in the `dist` folder after compiling:
1. Open Chrome browser and paste `chrome://extensions` into the address bar.
2. Enable Developer mode by clicking Developer mode toggle (top right)
3. Click Load Unpacked button in the menu bar.
4. Select the `dist` folder.
5. Click the Extension icon in Chrome, and click AKA Profiles icon.
6. Paste in your private key.### Tips
- "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 relaysIf 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)## Integration Examples
To integrate, see the following compatible web apps
- [Nostr.chat](https://nostr.chat) - [repo](https://github.com/NostrChat/NostrChat)
- [Snort.social](https://snort.social) - [repo](https://git.v0l.io/Kieran/snort)
- [nostra.me](https://nosta.me/) - [repo](https://github.com/GBKS/nosta-me)Search repositories for `window.nostr.getPublicKey()`
## Developer Notes
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](https://github.com/nostr-protocol/nips/blob/master/07.md), 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.