aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorAdrien Hopkins <[email protected]>2026-01-09 09:44:24 -0500
committerAdrien Hopkins <[email protected]>2026-01-09 09:44:24 -0500
commitb4d54e3eb924bb51f3f1e27e51b38f58480d5763 (patch)
tree3663283498d2907aba678600c9ff21effef8677d /src/lib
parent9175c76d7f03c0c62323202fdab3e4ab35854855 (diff)
downloadcoinos-ui-b4d54e3eb924bb51f3f1e27e51b38f58480d5763.tar.gz
coinos-ui-b4d54e3eb924bb51f3f1e27e51b38f58480d5763.zip
Add button to mute/unmute account
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/nip07.ts11
-rw-r--r--src/lib/nip17.ts2
-rw-r--r--src/lib/nip51.ts35
3 files changed, 38 insertions, 10 deletions
diff --git a/src/lib/nip07.ts b/src/lib/nip07.ts
new file mode 100644
index 00000000..b93779dc
--- /dev/null
+++ b/src/lib/nip07.ts
@@ -0,0 +1,11 @@
+import { finalizeEvent } from 'nostr-tools/pure';
+import { getPrivateKey } from '$lib/nostr';
+
+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);
+ }
+}
diff --git a/src/lib/nip17.ts b/src/lib/nip17.ts
index 1a78eb5a..ce5654cf 100644
--- a/src/lib/nip17.ts
+++ b/src/lib/nip17.ts
@@ -4,7 +4,7 @@ import { finalizeEvent, getEventHash, generateSecretKey, getPublicKey } from 'no
import { SimplePool } from 'nostr-tools/pool';
import { unwrapEvent } from 'nostr-tools/nip17';
-import { sign, getPrivateKey } from '$lib/nostr';
+import { getPrivateKey } from '$lib/nostr';
import { relaysSupporting } from '$lib/nip11';
import { expired, expiration } from '$lib/nip40';
import { encrypt, u } from '$lib/nip44';
diff --git a/src/lib/nip51.ts b/src/lib/nip51.ts
index 142f0bbf..521ba60a 100644
--- a/src/lib/nip51.ts
+++ b/src/lib/nip51.ts
@@ -1,16 +1,27 @@
import { SimplePool } from 'nostr-tools/pool';
+import { verifyEvent } from 'nostr-tools/pure';
+import { signEvent } from '$lib/nip07';
const pool = new SimplePool();
import { PUBLIC_DM_RELAYS } from '$env/static/public';
const DM_RELAYS_LIST = PUBLIC_DM_RELAYS.split(',');
-// export const mute = async (pubkey: string, hidden: bool) => {
-
-// }
+export const mute = async (user: object, pubkey: string, hide: bool) => {
+ let { shown, hidden } = await getMuteLists(user);
+ if (hide) {
+ hidden.push(pubkey);
+ } else {
+ shown.push(pubkey);
+ }
+ await publishMuteList(user, shown, hidden);
+}
-// export const unmute = async (pubkey: string) => {
-
-// }
+export const unmute = async (user: object, pubkey: string) => {
+ let { shown, hidden } = await getMuteLists(user);
+ shown = shown.filter(p => p !== pubkey);
+ hidden = hidden.filter(p => p !== pubkey);
+ await publishMuteList(user, shown, hidden);
+}
export const mutedAccounts = async (user: object): Set<string> => {
const { shown, hidden } = await getMuteLists(user);
@@ -42,6 +53,12 @@ const getMuteLists = async (user: object): object => {
return { shown, hidden: [] };
}
-// const publishMuteList = async (shown: Array<string>, hidden: Array<string>) => {
-
-// }
+const publishMuteList = async (user: object, shown: Array<string>, hidden: Array<string>) => {
+ const event = await signEvent({
+ kind: 10000,
+ created_at: Math.floor(Date.now() / 1000),
+ tags: shown.map(p => ["p", p]),
+ content: ''
+ }, user);
+ return Promise.any(pool.publish(DM_RELAYS_LIST, event));
+}