ditto/src/storages/hydrate.ts

29 lines
896 B
TypeScript
Raw Normal View History

2024-01-23 14:06:16 -06:00
import { type NStore } from '@/deps.ts';
import { type DittoEvent } from '@/interfaces/DittoEvent.ts';
import { type DittoFilter } from '@/interfaces/DittoFilter.ts';
interface HydrateEventOpts {
events: DittoEvent[];
filters: DittoFilter[];
2024-01-23 14:06:16 -06:00
storage: NStore;
2024-01-04 02:09:23 -06:00
signal?: AbortSignal;
}
/** Hydrate event relationships using the provided storage. */
async function hydrateEvents(opts: HydrateEventOpts): Promise<DittoEvent[]> {
2024-01-04 02:09:23 -06:00
const { events, filters, storage, signal } = opts;
if (filters.some((filter) => filter.relations?.includes('author'))) {
const pubkeys = new Set([...events].map((event) => event.pubkey));
2024-01-23 14:06:16 -06:00
const authors = await storage.query([{ kinds: [0], authors: [...pubkeys] }], { signal });
for (const event of events) {
event.author = authors.find((author) => author.pubkey === event.pubkey);
}
}
return events;
}
export { hydrateEvents };