aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/nip07.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-01-28 22:51:34 -0800
committerAdam Soltys <[email protected]>2026-01-28 22:51:34 -0800
commit568a936e08586b7ac07b4c7adaf5bf9b8ef6ba2f (patch)
tree56a45c92cd37c8ba1d1d794d300af0462c86dbf3 /src/lib/nip07.ts
parent685d085596a1a20d2b5680cf8000313173bbe6fd (diff)
parent838f74effb5b45e545bf68a4659e1e36c14da81f (diff)
downloadcoinos-ui-nip17dm-fixes.tar.gz
coinos-ui-nip17dm-fixes.zip
Merge remote-tracking branch 'origin/nip17dm'nip17dm-fixes
# Conflicts: # .env.sample
Diffstat (limited to 'src/lib/nip07.ts')
-rw-r--r--src/lib/nip07.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/nip07.ts b/src/lib/nip07.ts
new file mode 100644
index 00000000..9f675950
--- /dev/null
+++ b/src/lib/nip07.ts
@@ -0,0 +1,42 @@
+import { bytesToHex } from '@noble/hashes/utils';
+import { finalizeEvent } from 'nostr-tools/pure';
+import { unwrapEvent } from 'nostr-tools/nip17';
+import { getPrivateKey } from '$lib/nostr';
+import * as libnip44 from '$lib/nip44';
+import { u } from '$lib/nip44';
+
+// Signs an event using NIP-07 if available, otherwise getPrivateKey()
+export const signEvent = async (event: object, user: object): object => {
+ if (await window.nostr.getPublicKey() === user.pubkey) {
+ return window.nostr.signEvent(event);
+ } else {
+ const sk = await getPrivateKey();
+ return finalizeEvent(event, sk);
+ }
+}
+
+// Encrypts an event in NIP-44 using NIP-07 if available, otherwise getPrivateKey()
+export const encrypt = async (json: object, user: object, receiverPK: string): string => {
+ if (await window.nostr.getPublicKey() === user.pubkey) {
+ return window.nostr.nip44.encrypt(
+ receiverPK, JSON.stringify(json));
+ } else {
+ const senderSK = await getPrivateKey();
+ const senderSKString = bytesToHex(senderSK);
+ const ckey = u.getConversationKey(senderSKString, receiverPK);
+ return libnip44.encrypt(JSON.stringify(json), ckey);
+ }
+}
+
+// Decrypts an event in NIP-44 using NIP-07 if available, otherwise getPrivateKey()
+export const decrypt = async (encrypted: string, user: object, receiverPK: string): object => {
+ if (await window.nostr.getPublicKey() === user.pubkey) {
+ return JSON.parse(await window.nostr.nip44.decrypt(
+ receiverPK, encrypted));
+ } else {
+ const senderSK = await getPrivateKey();
+ const senderSKString = bytesToHex(senderSK);
+ const ckey = u.getConversationKey(senderSKString, receiverPK);
+ return JSON.parse(libnip44.decrypt(encrypted, ckey));
+ }
+}