Files
welshman/packages/app/src/mutes.ts
T
2025-11-24 09:52:47 -08:00

40 lines
1.2 KiB
TypeScript

import {MUTES, asDecryptedEvent, readList} from "@welshman/util"
import {TrustedEvent, PublishedList} from "@welshman/util"
import {
deriveItemsByKey,
deriveItems,
makeForceLoadItem,
makeLoadItem,
makeDeriveItem,
getter,
} from "@welshman/store"
import {repository} from "./core.js"
import {ensurePlaintext} from "./plaintext.js"
import {makeOutboxLoader} from "./relayLists.js"
export const muteListsByPubkey = deriveItemsByKey<PublishedList>({
repository,
eventToItem: async (event: TrustedEvent) =>
readList(
asDecryptedEvent(event, {
content: await ensurePlaintext(event),
}),
),
filters: [{kinds: [MUTES]}],
getKey: mute => mute.event.pubkey,
})
export const muteLists = deriveItems(muteListsByPubkey)
export const getMuteListsByPubkey = getter(muteListsByPubkey)
export const getMuteLists = getter(muteLists)
export const getMuteList = (pubkey: string) => getMuteListsByPubkey().get(pubkey)
export const forceLoadMuteList = makeForceLoadItem(makeOutboxLoader(MUTES), getMuteList)
export const loadMuteList = makeLoadItem(makeOutboxLoader(MUTES), getMuteList)
export const deriveMuteList = makeDeriveItem(muteListsByPubkey, loadMuteList)