flotilla/src/app/repository.ts

64 lines
2 KiB
TypeScript
Raw Normal View History

import {derived} from "svelte/store"
2026-07-28 16:16:26 +00:00
import {filter, spec} from "@welshman/lib"
import type {Filter, TrustedEvent} from "@welshman/util"
import * as store from "@welshman/store"
import {Network, Relays} from "@welshman/app"
import {app, fromApp} from "@app/core"
// Events
export const deriveEvent = (idOrAddress: string, relays: string[] = []) =>
fromApp($app =>
store.makeDeriveEvent({
repository: $app.repository,
includeDeleted: true,
onDerive: (filters: Filter[], hints: string[]) =>
$app.use(Network).load({filters, relays: hints}),
})(idOrAddress, relays),
)
export const deriveEventsById = (filters: Filter[] = [{}]) =>
fromApp($app => store.deriveEventsById({repository: $app.repository, filters}))
export const deriveEvents = (filters: Filter[] = [{}]) =>
2026-07-28 16:16:26 +00:00
store.deriveEventsDesc(deriveEventsById(filters))
2026-07-28 16:16:26 +00:00
export const deriveIsDeleted = (event: TrustedEvent) =>
fromApp($app => store.deriveIsDeleted($app.repository, event))
2026-07-28 16:16:26 +00:00
// Events on a relay
2026-07-28 16:16:26 +00:00
export const getEventsForUrl = (url: string, filters: Filter[] = [{}]) =>
store
.getEventsByIdForUrl({
url,
filters,
tracker: app.get().tracker,
repository: app.get().repository,
})
.values()
2026-07-28 16:16:26 +00:00
export const deriveEventsByIdForUrl = (url: string, filters: Filter[] = [{}]) =>
fromApp($app =>
store.deriveEventsByIdForUrl({
url,
filters,
tracker: $app.tracker,
repository: $app.repository,
}),
)
export const deriveEventsForUrl = (url: string, filters: Filter[] = [{}]) =>
store.deriveArray(deriveEventsByIdForUrl(url, filters))
2026-07-28 16:16:26 +00:00
export const deriveEventsByIdByUrl = (filters: Filter[] = [{}]) =>
fromApp($app =>
store.deriveEventsByIdByUrl({filters, tracker: $app.tracker, repository: $app.repository}),
)
export const deriveRelaySignedEvents = (url: string, filters: Filter[] = [{}]) =>
2026-07-28 16:16:26 +00:00
derived(
[fromApp($app => $app.use(Relays).one(url)), deriveEventsForUrl(url, filters)],
([$relay, $events]) => filter(spec({pubkey: $relay?.self}), $events as TrustedEvent[]),
)