PageSourceSearch

https://armada.buzz/assets/useMuteList-DSGedOi-.js

js armada.buzz collected 2026-10-02 00:26:52 UTC 8,240 bytes, 1 lines download raw bytes

1import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{x as t}from"./vendor-nostr-B8luZNPL.js";import{$r as n}from"./lucide-icons-GmG7O7nz.js";import{U as r,V as i}from"./protocol-Cbby3CJU.js";import{S as a,b as o}from"./publishOutbox-eA4L7GmU.js";import{i as s,n as c,s as l}from"./vendor-tanstack-CZLUN3pe.js";import{t as u}from"./useCurrentUser-D4QnF4TO.js";import{t as d}from"./useToast-BaojZlzQ.js";import{d as f,t as p}from"./useAppContext-Dheo3zbF.js";import{t as m}from"./useNostrPublish-DaUWpAsr.js";var h=e(n(),1),g=new Set,_=(0,h.createContext)({mutedPubkeys:g,ready:!0,wireReady:!0,configReady:!0});function v(e,t){return t===void 0||e.created_at>t.created_at||e.created_at===t.created_at&&e.id<t.id}function y(e,t,n){let r;for(let i of e)i.pubkey!==t||i.kind!==n||v(i,r)&&(r=i);return r}async function b(e,t,n,r){try{return{events:await(await e).query([{authors:[t],kinds:n}],{signal:r}),available:!0}}catch{return{events:[],available:!1}}}function x(e,t){return e.created_at===t.updatedAt?t.eventId===void 0||e.id<t.eventId:e.created_at>t.updatedAt}var S=1e4,C=new Map;function w(e,t){for(let[n,r]of e)n===`p`&&r&&t.add(r)}async function T(e,t){if(!e)return{pubkeys:new Set,decryptFailed:!1};let n=new Set;if(w(e.tags,n),!e.content)return{pubkeys:n,decryptFailed:!1};if(!t?.nip44)return{pubkeys:n,decryptFailed:!0};let r=C.get(e.id);if(r)return r;let i=t.nip44,a=(async()=>{let t=new Set(n);try{let n=await i.decrypt(e.pubkey,e.content),r=JSON.parse(n);return Array.isArray(r)&&w(r.filter(e=>Array.isArray(e)),t),{pubkeys:t,decryptFailed:!1}}catch(n){return console.warn(`Failed to decrypt mute list private items:`,n),C.delete(e.id),{pubkeys:t,decryptFailed:!0}}})();return C.set(e.id,a),a}function E(e){return`mute-pubkeys:${e}`}var D=new Map;function O(e){if(Array.isArray(e))return{pubkeys:e.filter(e=>typeof e==`string`)};if(!e||typeof e!=`object`)return{pubkeys:[]};let t=e,n=Array.isArray(t.pubkeys)?t.pubkeys.filter(e=>typeof e==`string`):[],r=t.version;return{pubkeys:n,...typeof r?.id==`string`&&typeof r.created_at==`number`?{version:{id:r.id,created_at:r.created_at}}:{}}}function k(e){let t=D.get(e);if(t)return t;let n=i(E(e)).then(O).catch(()=>(D.delete(e),{pubkeys:[]}));return D.set(e,n),n}async function A(e,t,n){let i={pubkeys:[...t],...n?{version:{id:n.id,created_at:n.created_at}}:{}};D.set(e,Promise.resolve(i)),await r(E(e),i).catch(()=>void 0)}function j(){let{nostr:e}=t(),{user:n}=u(),{config:r}=p(),i=l(),c=(0,h.useMemo)(()=>a(f(r,n?.pubkey)).sort(),[r,n?.pubkey]),d=c.join(`,`),m=(0,h.useMemo)(()=>[`mute-list`,n?.pubkey,d],[n?.pubkey,d]),[g,_]=(0,h.useState)(null);(0,h.useEffect)(()=>{if(!n?.pubkey){_(null);return}let e=!1;return(async()=>{let t=await k(n.pubkey);e||_(t)})(),()=>{e=!0}},[n?.pubkey]);let b=s({queryKey:m,enabled:!!n?.pubkey,staleTime:300*1e3,queryFn:async({signal:t})=>{let r=n.pubkey,[i,a]=await Promise.all([o(e,c,[{kinds:[S],authors:[r],limit:1}],AbortSignal.any([t,AbortSignal.timeout(6e3)])),k(r)]),s=y(i.events,r,S),l=await T(s??null,n.signer),u=[...l.pubkeys],d=new Set(i.answered);return!(c.length>0&&c.every(e=>d.has(e)))||l.decryptFailed?{pubkeys:[...new Set([...a.pubkeys,...u])],wireReady:!1,configReady:a.version!==void 0}:!s||a.version&&v(a.version,s)?{pubkeys:a.pubkeys,wireReady:!0,configReady:!0}:!a.version&&a.pubkeys.some(e=>!l.pubkeys.has(e))?{pubkeys:[...new Set([...a.pubkeys,...u])],wireReady:!1,configReady:!0}:(A(r,u,s),{pubkeys:u,wireReady:!0,configReady:!0})}}),x=(0,h.useMemo)(()=>new Set(b.data?.wireReady?b.data.pubkeys:[...new Set([...g?.pubkeys??[],...b.data?.pubkeys??[]])]),[b.data,g]),C=!n?.pubkey||b.data!==void 0||g!==null,w=!n?.pubkey||b.data?.wireReady===!0,E=!n?.pubkey||b.data?.configReady===!0||g?.version!==void 0;return(0,h.useEffect)(()=>{b.data&&i.setQueryData(m,b.data)},[b.data,i,m]),(0,h.useMemo)(()=>({mutedPubkeys:x,ready:C,wireReady:w,configReady:E}),[x,C,w,E])}function M(){return(0,h.useContext)(_)}async function N(e,t){let n=e?e.tags.map(e=>[...e]):[];if(!e?.content||!t?.nip44)return{publicTags:n,privateTags:[],privateReadable:!0};try{let r=await t.nip44.decrypt(e.pubkey,e.content),i=JSON.parse(r);return{publicTags:n,privateTags:Array.isArray(i)?i.filter(e=>Array.isArray(e)).map(e=>[...e]):[],privateReadable:!0}}catch(e){return console.warn(`Failed to decrypt mute list private items:`,e),{publicTags:n,privateTags:[],privateReadable:!1}}}var P=Promise.resolve();function F(e){let t=P.then(e,e);return P=t.then(()=>void 0,()=>void 0),t}function I(e){let t=Math.floor(Date.now()/1e3);return e?Math.max(t,e.created_at+1):t}async function L(e,t){let{user:n,nostr:r,relays:a,publish:o}=e,s=(await r.group(a).query([{kinds:[1e4],authors:[n.pubkey],limit:1}],{signal:AbortSignal.timeout(6e3)})).sort((e,t)=>
1t.created_at-e.created_at)[0]??null;if(!s&&O(await i(E(n.pubkey))).pubkeys.length>0)throw Error(`Couldn't load your existing block list. Not saving, to avoid losing it.`);let{publicTags:c,privateTags:l,privateReadable:u}=await N(s,n.signer);if(!u)throw Error(`Couldn't read your existing block list. Not saving, to avoid losing it.`);let d=t({publicTags:c,privateTags:l});if(!d)return null;let f=``;if(d.privateTags.length>0||s?.content){if(!n.signer.nip44)throw Error(`Your signer can't encrypt the block list (NIP-44 required).`);f=await n.signer.nip44.encrypt(n.pubkey,JSON.stringify(d.privateTags))}let p=await o({kind:S,content:f,tags:d.publicTags,created_at:I(s),prev:s??void 0}),m=new Set;return w([...d.publicTags,...d.privateTags],m),{pubkeys:[...m],event:p}}function R(e,t){return(0,h.useMemo)(()=>B(e,t),[e,t])}var z=new WeakMap;function B(e,t){let n=z.get(e);n||z.set(e,n=new Map);let r=n.get(t??``);return r===void 0&&(r=a(f(e,t)).sort().join(`,`),n.set(t??``,r)),r}function V(){let{nostr:e}=t(),{user:n}=u(),{config:r}=p(),i=l(),a=m(),o=R(r,n?.pubkey),s=[`mute-list`,n?.pubkey,o];return c({onMutate:async e=>{if(!n)return;await i.cancelQueries({queryKey:s});let t=i.getQueryData(s);return i.setQueryData(s,(t={pubkeys:[],wireReady:!1,configReady:!1})=>({...t,pubkeys:t.pubkeys.includes(e)?t.pubkeys:[...t.pubkeys,e]})),{previous:t}},mutationFn:t=>F(async()=>{if(!n)throw Error(`You must be logged in to block someone.`);if(!n.signer.nip44)throw Error(`Your signer can't encrypt the block list (NIP-44 required).`);let o=await L({user:n,nostr:e,relays:r.appRelays,publish:a.mutateAsync},({publicTags:e,privateTags:n})=>[...e,...n].some(([e,n])=>e===`p`&&n===t)?null:{publicTags:e,privateTags:[...n,[`p`,t]]});o&&(i.setQueryData(s,{pubkeys:o.pubkeys,wireReady:!1,configReady:!0}),await A(n.pubkey,o.pubkeys,o.event))}),onError:(e,t,r)=>{n&&(r?.previous===void 0?i.removeQueries({queryKey:s,exact:!0}):i.setQueryData(s,r.previous))}})}function H(){let{nostr:e}=t(),{user:n}=u(),{config:r}=p(),i=l(),a=m(),o=R(r,n?.pubkey),s=[`mute-list`,n?.pubkey,o];return c({onMutate:async e=>{if(!n)return;await i.cancelQueries({queryKey:s});let t=i.getQueryData(s);return i.setQueryData(s,(t={pubkeys:[],wireReady:!1,configReady:!1})=>({...t,pubkeys:t.pubkeys.filter(t=>t!==e)})),{previous:t}},mutationFn:t=>F(async()=>{if(!n)throw Error(`You must be logged in to unblock someone.`);let o=([e,n])=>e===`p`&&n===t,c=await L({user:n,nostr:e,relays:r.appRelays,publish:a.mutateAsync},({publicTags:e,privateTags:t})=>[...e,...t].some(o)?{publicTags:e.filter(e=>!o(e)),privateTags:t.filter(e=>!o(e))}:null);c&&(i.setQueryData(s,{pubkeys:c.pubkeys,wireReady:!1,configReady:!0}),await A(n.pubkey,c.pubkeys,c.event))}),onError:(e,t,r)=>{n&&(r?.previous===void 0?i.removeQueries({queryKey:s,exact:!0}):i.setQueryData(s,r.previous))}})}function U(e){let{user:t}=u(),{mutedPubkeys:n}=M(),r=V(),i=H(),a=!!e&&n.has(e),o=!!e&&!!t&&e!==t.pubkey,s=r.isPending||i.isPending,c=(0,h.useCallback)(async()=>{if(!(!e||!o))try{a?(await i.mutateAsync(e),d({title:`Unblocked`,description:`You'll see this person again.`})):(await r.mutateAsync(e),d({title:`Blocked`,description:`You won't see this person anymore.`}))}catch(e){d({title:a?`Couldn't unblock`:`Couldn't block`,description:e instanceof Error?e.message:`Failed to update your block list.`,variant:`destructive`})}},[e,o,a,r,i]);return{muted:a,canMute:o,pending:s,label:a?`Unblock`:`Block`,toggle:c}}export{H as a,x as c,j as i,v as l,V as n,y as o,M as r,b as s,U as t,_ as u};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.