import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{ki as t}from"./lucide-icons-BjbcRgLk.js";import{t as n}from"./dist-DPmmj29U.js";import{u as r}from"./esm-CRVqHnq2.js";import{h as i,t as a}from"./useQuery-CQCUTxAw.js";import{t as o}from"./useMutation-Du3NQIud.js";import{t as s}from"./useAppContext-ZpOJAKgd.js";import{t as c}from"./fetchFreshEvent-Kkz3MzZN.js";import{t as l}from"./useCurrentUser-boOMG5Xx.js";import{t as u}from"./useNostrPublish-D1pQ9KV-.js";import{t as d}from"./nostrId-DcIQ4FCD.js";import{t as f}from"./storageKey-Hu6452Ya.js";var p=e(t(),1);function m(e){return f(e,`muteListCache`)}function h(e,t){try{let n=localStorage.getItem(e);if(!n)return;let r=JSON.parse(n);return r.pubkey!==t||!Array.isArray(r.items)?void 0:r.items}catch{return}}function g(e,t,n){try{localStorage.setItem(m(e),JSON.stringify({pubkey:t,items:n}))}catch{}}function _(e){let t=[];for(let n of e){let[e,r]=n;if(r)switch(e){case`p`:d(r)&&t.push({type:`pubkey`,value:r});break;case`t`:t.push({type:`hashtag`,value:r});break;case`word`:t.push({type:`word`,value:r});break;case`e`:d(r)&&t.push({type:`thread`,value:r});break}}return t}function v(e){return e.includes(`?iv=`)}async function y(e,t,n){if(!e)return null;try{return v(e)?t.nip04?await t.nip04.decrypt(n,e):(console.warn(`Mute list uses NIP-04 encryption but signer does not support nip04`),null):t.nip44?await t.nip44.decrypt(n,e):(console.warn(`Mute list uses NIP-44 encryption but signer does not support nip44`),null)}catch(e){return console.error(`Failed to decrypt mute list content:`,e),null}}async function b(e,t,n){if(!e)return[];let r=_(e.tags),i=[];if(e.content){let r=await y(e.content,t,n);if(r)try{i=_(JSON.parse(r))}catch(e){console.error(`Failed to parse decrypted mute list content:`,e)}}let a=new Set,o=[];for(let e of[...r,...i]){let t=`${e.type}:${e.value}`;a.has(t)||(a.add(t),o.push(e))}return o}var x=[];function S(){let{nostr:e}=n(),{user:t}=l(),{config:r}=s(),d=i(),{mutateAsync:f}=u(),_=m(r.appId),v=t?.pubkey,y=(0,p.useMemo)(()=>v?h(_,v):void 0,[_,v]),S=a({queryKey:[`muteList`,t?.pubkey],queryFn:async()=>{if(!t)return null;let n={kinds:[1e4],authors:[t.pubkey],limit:1},r=await e.query([n]);return r.length===0?null:r[0]},enabled:!!t,staleTime:300*1e3}),T=a({queryKey:[`muteItems`,S.data?.id],queryFn:async()=>{let e=S.data;if(!e||!t)return[];let n=await b(e,t.signer,t.pubkey);return g(r.appId,t.pubkey,n),n},enabled:!!S.data&&!!t,placeholderData:y}),E=o({mutationFn:async n=>{if(!t)throw Error(`User not logged in`);let i=n.value;if(n.type===`pubkey`){let e=C(n.value);if(!e)throw Error(`Invalid pubkey: ${n.value}`);i=e}else if(n.type===`thread`){let e=w(n.value);if(!e)throw Error(`Invalid event id: ${n.value}`);i=e}let a=await c(e,{kinds:[1e4],authors:[t.pubkey]}),o=await b(a,t.signer,t.pubkey),s=o.some(e=>e.type===n.type&&e.value===i)?o:[...o,{...n,value:i}];g(r.appId,t.pubkey,s),S.data?.id&&d.setQueryData([`muteItems`,S.data.id],s),await k(s,a)},onSuccess:()=>{d.invalidateQueries({queryKey:[`muteList`,t?.pubkey]})}}),D=o({mutationFn:async n=>{if(!t)throw Error(`User not logged in`);let i=await c(e,{kinds:[1e4],authors:[t.pubkey]}),a=(await b(i,t.signer,t.pubkey)).filter(e=>!(e.type===n.type&&e.value===n.value));g(r.appId,t.pubkey,a),S.data?.id&&d.setQueryData([`muteItems`,S.data.id],a),await k(a,i)},onSuccess:()=>{d.invalidateQueries({queryKey:[`muteList`,t?.pubkey]})}}),O=o({mutationFn:async n=>{if(!t)throw Error(`User not logged in`);let i=new Set;for(let e of n){if(!e)continue;let t=C(e);t&&i.add(t)}let a=await c(e,{kinds:[1e4],authors:[t.pubkey]}),o=await b(a,t.signer,t.pubkey),s=new Set(o.filter(e=>e.type===`pubkey`).map(e=>e.value)),l=[];for(let e of i)s.has(e)||l.push({type:`pubkey`,value:e});if(l.length===0)return 0;let u=[...o,...l];return g(r.appId,t.pubkey,u),S.data?.id&&d.setQueryData([`muteItems`,S.data.id],u),await k(u,a),l.length},onSuccess:()=>{d.invalidateQueries({queryKey:[`muteList`,t?.pubkey]})}}),k=async(e,n)=>{if(!t)throw Error(`User not logged in`);if(!t.signer.nip44)throw Error(`NIP-44 encryption not supported`);let r=[];for(let t of e){let e=[t.type===`pubkey`?`p`:t.type===`hashtag`?`t`:t.type===`word`?`word`:`e`,t.value];r.push(e)}let i=JSON.stringify(r),a=await t.signer.nip44.encrypt(t.pubkey,i);await f({kind:1e4,content:a,tags:[],prev:n??void 0})};return{muteList:S.data,muteItems:T.data??x,isLoading:S.isLoading||T.isLoading,isError:S.isError||T.isError,error:S.error||T.error,addMute:E,removeMute:D,muteManyPubkeys:O,isMuted:(e,t)=>(T.data||[]).some(n=>n.type===e&&n.value===t),mutedPubkeys:()=>(T.data||[]).filter(e=>e.type===`pubkey`).map(e=>e.value),mutedHashtags:()=>(T.data||[]).filter(e=>e.type===`hashtag`).map(e=>e.value),mutedWords:()=>(T.data||[]).filter(e=>e.type===`word`).map(e=>e.value),mutedThreads:()=>(T.data||[]).filter(e=>e.type===`thread`).map(e=>e.value)}}function C(e){if(d(e))return e;if(e.startsWith(`npub1`)||e.startsWith(`nprofile1`))try{let t=r.decode(e);if(t.type===`npub`)return t.data;if(t.type===`nprofile`)return t.data.pubkey}catch(e){console.warn(`Failed to decode npub/nprofile:`,e)}}function w(e){if(d(e))return e;if(e.startsWith(`note1`)||e.startsWith(`nevent1`))try{let t=r.decode(e);if(t.type===`note`)return t.data;if(t.type===`nevent`)return t.data.id}catch(e){console.warn(`Failed to decode note/nevent:`,e)}}export{g as n,S as r,_ as t};