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

44 lines
1.3 KiB
TypeScript

import {MESSAGING_RELAYS, asDecryptedEvent, readList} from "@welshman/util"
import {TrustedEvent} from "@welshman/util"
import {
deriveItemsByKey,
deriveItems,
makeForceLoadItem,
makeLoadItem,
makeDeriveItem,
getter,
} from "@welshman/store"
import {repository} from "./core.js"
import {makeOutboxLoader} from "./relayLists.js"
export const messagingRelayListsByPubkey = deriveItemsByKey({
repository,
eventToItem: (event: TrustedEvent) => readList(asDecryptedEvent(event)),
filters: [{kinds: [MESSAGING_RELAYS]}],
getKey: messagingRelayLists => messagingRelayLists.event.pubkey,
})
export const messagingRelayLists = deriveItems(messagingRelayListsByPubkey)
export const getMessagingRelayListsByPubkey = getter(messagingRelayListsByPubkey)
export const getMessagingRelayLists = getter(messagingRelayLists)
export const getMessagingRelayList = (pubkey: string) =>
getMessagingRelayListsByPubkey().get(pubkey)
export const forceLoadMessagingRelayList = makeForceLoadItem(
makeOutboxLoader(MESSAGING_RELAYS),
getMessagingRelayList,
)
export const loadMessagingRelayList = makeLoadItem(
makeOutboxLoader(MESSAGING_RELAYS),
getMessagingRelayList,
)
export const deriveMessagingRelayList = makeDeriveItem(
messagingRelayListsByPubkey,
loadMessagingRelayList,
)