aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorAdrien Hopkins <[email protected]>2026-01-09 11:01:40 -0500
committerAdrien Hopkins <[email protected]>2026-01-09 11:01:40 -0500
commit33efd6bd8918d2fe0eac9ab5dd0a18f545c15879 (patch)
tree69a150e63b37f7f9b355dbcccf2e728222a3c09c /src/lib
parentb4d54e3eb924bb51f3f1e27e51b38f58480d5763 (diff)
downloadcoinos-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.ts40
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));
}