diff options
| author | Adrien Hopkins <[email protected]> | 2026-01-09 11:01:40 -0500 |
|---|---|---|
| committer | Adrien Hopkins <[email protected]> | 2026-01-09 11:01:40 -0500 |
| commit | 33efd6bd8918d2fe0eac9ab5dd0a18f545c15879 (patch) | |
| tree | 69a150e63b37f7f9b355dbcccf2e728222a3c09c /src/lib | |
| parent | b4d54e3eb924bb51f3f1e27e51b38f58480d5763 (diff) | |
| download | coinos-ui-33efd6bd8918d2fe0eac9ab5dd0a18f545c15879.tar.gz coinos-ui-33efd6bd8918d2fe0eac9ab5dd0a18f545c15879.zip | |
Preserve non-'p' tags in mute lists
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/nip51.ts | 40 |
1 files changed, 15 insertions, 25 deletions
diff --git a/src/lib/nip51.ts b/src/lib/nip51.ts index 521ba60a..81a1a9d3 100644 --- a/src/lib/nip51.ts +++ b/src/lib/nip51.ts @@ -8,29 +8,26 @@ const DM_RELAYS_LIST = PUBLIC_DM_RELAYS.split(','); 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); - } + shown.push(["p", pubkey]); await publishMuteList(user, shown, hidden); } +const tagMatches = (tag: string[], pubkey: string): bool => + tag.length >= 2 && tag[0] === "p" && tag[1] === pubkey; + 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); + shown = shown.filter(tag => !tagMatches(tag, pubkey)); await publishMuteList(user, shown, hidden); } export const mutedAccounts = async (user: object): Set<string> => { - const { shown, hidden } = await getMuteLists(user); + const { shown } = await getMuteLists(user); let muted = new Set<string>(); - for (const pubkey of shown) { - muted.add(pubkey); - } - for (const pubkey of hidden) { - muted.add(pubkey); + for (const tag of shown) { + if (tag.length >= 2 && tag[0] === "p") { + muted.add(tag[1]); + } } return muted; } @@ -40,25 +37,18 @@ const getMuteLists = async (user: object): object => { DM_RELAYS_LIST, { kinds: [10000], "authors": [user.pubkey], limit: 1 } ); if (listEvents.length == 0) { - return { shown: [], hidden: [] }; - } - - let shown = []; - for (const tag of listEvents[0].tags) { - if (tag.length >= 2 && tag[0] == "p") { - shown.push(tag[1]); - } + return { shown: [], hidden: "" }; } - return { shown, hidden: [] }; + return { shown: listEvents[0].tags, hidden: listEvents[0].content }; } -const publishMuteList = async (user: object, shown: Array<string>, hidden: Array<string>) => { +const publishMuteList = async (user: object, shown: Array<string>, hidden: string) => { const event = await signEvent({ kind: 10000, created_at: Math.floor(Date.now() / 1000), - tags: shown.map(p => ["p", p]), - content: '' + tags: shown, + content: hidden }, user); return Promise.any(pool.publish(DM_RELAYS_LIST, event)); } |
