flotilla/src/app/repository.ts

47 lines
1.8 KiB
TypeScript
Raw Normal View History

import {
deriveArray,
deriveDeduplicated,
deriveEventsAsc,
deriveEventsById,
deriveEventsByIdForUrl,
deriveEventsDesc,
getEventsByIdForUrl,
makeDeriveEvent,
} from "@welshman/store"
import {deriveRelay, repository, tracker} from "@welshman/app"
import {sortEventsDesc} from "@welshman/util"
import type {Filter} from "@welshman/util"
import {load} from "@welshman/net"
2026-06-23 23:30:54 +00:00
import {filter, first, spec} from "@welshman/lib"
import {derived} from "svelte/store"
export const deriveEvent = makeDeriveEvent({
repository,
includeDeleted: true,
onDerive: (filters: Filter[], relays: string[]) => load({filters, relays}),
})
export const deriveEvents = (filters: Filter[] = [{}]) =>
deriveEventsDesc(deriveEventsById({repository, filters}))
export const getEventsForUrl = (url: string, filters: Filter[] = [{}]) =>
getEventsByIdForUrl({url, tracker, repository, filters}).values()
export const deriveEventsForUrl = (url: string, filters: Filter[] = [{}]) =>
deriveArray(deriveEventsByIdForUrl({url, tracker, repository, filters}))
export const deriveEventsForUrlAsc = (url: string, filters: Filter[] = [{}]) =>
deriveEventsAsc(deriveEventsByIdForUrl({url, tracker, repository, filters}))
export const deriveEventsForUrlDesc = (url: string, filters: Filter[] = [{}]) =>
deriveEventsDesc(deriveEventsByIdForUrl({url, tracker, repository, filters}))
export const deriveLatestEventForUrl = (url: string, filters: Filter[] = [{}]) =>
deriveDeduplicated(deriveEventsByIdForUrl({url, tracker, repository, filters}), $eventsById =>
first(sortEventsDesc($eventsById.values())),
)
export const deriveRelaySignedEvents = (url: string, filters: Filter[] = [{}]) =>
2026-06-23 23:30:54 +00:00
derived([deriveRelay(url), deriveEventsForUrl(url, filters)], ([relay, events]) =>
filter(spec({pubkey: relay?.self}), events),
)