nostr: add Nostr sign module
This commit is contained in:
parent
1b199dfd9f
commit
84ca2a269d
|
@ -0,0 +1,52 @@
|
||||||
|
import {
|
||||||
|
type Event,
|
||||||
|
type EventTemplate,
|
||||||
|
generatePrivateKey,
|
||||||
|
getPublicKey as _getPublicKey,
|
||||||
|
finishEvent,
|
||||||
|
nip04 as _nip04,
|
||||||
|
} from 'nostr-tools';
|
||||||
|
|
||||||
|
/** localStorage key for the Nostr private key (if not using NIP-07). */
|
||||||
|
const LOCAL_KEY = 'soapbox:nostr:privateKey';
|
||||||
|
|
||||||
|
/** Get the private key from the browser, or generate one. */
|
||||||
|
const getPrivateKey = (): string => {
|
||||||
|
const local = localStorage.getItem(LOCAL_KEY);
|
||||||
|
|
||||||
|
if (!local) {
|
||||||
|
const key = generatePrivateKey();
|
||||||
|
localStorage.setItem(LOCAL_KEY, key);
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
return local;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Get the user's public key from NIP-07, or generate one. */
|
||||||
|
async function getPublicKey(): Promise<string> {
|
||||||
|
return window.nostr ? window.nostr.getPublicKey() : _getPublicKey(getPrivateKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Sign an event with NIP-07, or the locally generated key. */
|
||||||
|
async function signEvent<K extends number>(event: EventTemplate<K>): Promise<Event<K>> {
|
||||||
|
return window.nostr ? window.nostr.signEvent(event) as Promise<Event<K>> : finishEvent(event, getPrivateKey()) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Crypto function with NIP-07, or the local key. */
|
||||||
|
const nip04 = {
|
||||||
|
/** Encrypt with NIP-07, or the local key. */
|
||||||
|
encrypt: async (pubkey: string, content: string) => {
|
||||||
|
return window.nostr?.nip04
|
||||||
|
? window.nostr.nip04.encrypt(pubkey, content)
|
||||||
|
: _nip04.encrypt(getPrivateKey(), pubkey, content);
|
||||||
|
},
|
||||||
|
/** Decrypt with NIP-07, or the local key. */
|
||||||
|
decrypt: async (pubkey: string, content: string) => {
|
||||||
|
return window.nostr?.nip04
|
||||||
|
? window.nostr.nip04.decrypt(pubkey, content)
|
||||||
|
: _nip04.decrypt(getPrivateKey(), pubkey, content);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export { getPublicKey, signEvent, nip04 };
|
Loading…
Reference in New Issue