From f27a64250eca20470475205efc346b761b81d143 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Fri, 27 Sep 2024 12:13:20 -0700 Subject: [PATCH] Refine sync, move repository publish to global onEvent --- packages/app/src/context.ts | 1 + packages/app/src/index.ts | 1 + packages/app/src/sync.ts | 64 ++++++++++++++++++++----------------- packages/net/src/Sync.ts | 2 +- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/packages/app/src/context.ts b/packages/app/src/context.ts index 3079839..21ff29c 100644 --- a/packages/app/src/context.ts +++ b/packages/app/src/context.ts @@ -23,6 +23,7 @@ export const getDefaultNetContext = (overrides: Partial = {}) => ({ onAuth: onAuth, onEvent: (url: string, event: TrustedEvent) => { tracker.track(event.id, url) + repository.publish(event) // Eagerly load profiles since they're critical to UX if (event.kind !== WRAP) { diff --git a/packages/app/src/index.ts b/packages/app/src/index.ts index 3fa01f4..c85d700 100644 --- a/packages/app/src/index.ts +++ b/packages/app/src/index.ts @@ -12,6 +12,7 @@ export * from './relaySelections' export * from './router' export * from './session' export * from './storage' +export * from './sync' export * from './tags' export * from './thunk' export * from './topics' diff --git a/packages/app/src/sync.ts b/packages/app/src/sync.ts index 6f508f2..95c9ce0 100644 --- a/packages/app/src/sync.ts +++ b/packages/app/src/sync.ts @@ -1,6 +1,7 @@ -import {flatten} from '@welshman/lib' +import type {Filter} from '@welshman/util' +import {isSignedEvent} from '@welshman/util' import {push as basePush, pull as basePull, sync as baseSync, pushWithoutNegentropy, pullWithoutNegentropy, syncWithoutNegentropy} from "@welshman/net" -import type {PullOpts, PushOpts, SyncOpts} from "@welshman/net" +import {repository} from './core' import {relaysByUrl} from './relays' export const hasNegentropy = (url: string) => { @@ -12,36 +13,41 @@ export const hasNegentropy = (url: string) => { return false } -export const pull = async (opts: PullOpts) => - flatten( - await Promise.all( - opts.relays.map(relay => - hasNegentropy(relay) - ? basePull({...opts, relays: [relay]}) - : pullWithoutNegentropy({...opts, relays: [relay]}) - ) - ) +export type AppSyncOpts = { + relays: string[] + filters: Filter[] +} + +export const pull = async ({relays, filters}: AppSyncOpts) => + await Promise.all( + relays.map(async relay => { + const events = repository.query(filters) + + await hasNegentropy(relay) + ? basePull({filters, events, relays: [relay]}) + : pullWithoutNegentropy({filters, relays: [relay]}) + }) ) -export const push = async (opts: PushOpts) => - flatten( - await Promise.all( - opts.relays.map(relay => - hasNegentropy(relay) - ? basePush({...opts, relays: [relay]}) - : pushWithoutNegentropy({...opts, relays: [relay]}) - ) - ) +export const push = async ({relays, filters}: AppSyncOpts) => + await Promise.all( + relays.map(async relay => { + const events = repository.query(filters).filter(isSignedEvent) + + await hasNegentropy(relay) + ? basePush({filters, events, relays: [relay]}) + : pushWithoutNegentropy({events, relays: [relay]}) + }) ) -export const sync = async (opts: SyncOpts) => - flatten( - await Promise.all( - opts.relays.map(relay => - hasNegentropy(relay) - ? baseSync({...opts, relays: [relay]}) - : syncWithoutNegentropy({...opts, relays: [relay]}) - ) - ) +export const sync = async ({relays, filters}: AppSyncOpts) => + await Promise.all( + relays.map(async relay => { + const events = repository.query(filters).filter(isSignedEvent) + + await hasNegentropy(relay) + ? baseSync({filters, events, relays: [relay]}) + : syncWithoutNegentropy({filters, events, relays: [relay]}) + }) ) diff --git a/packages/net/src/Sync.ts b/packages/net/src/Sync.ts index b53e802..4994c79 100644 --- a/packages/net/src/Sync.ts +++ b/packages/net/src/Sync.ts @@ -169,7 +169,7 @@ export const pullWithoutNegentropy = async ({relays, filters, onEvent}: PullWith subscribe({ relays, filters: filters - .filter(filter => filter.since && filter.since > until) + .filter(filter => !filter.since || filter.since > until) .map(filter => ({...filter, until})), closeOnEose: true, onClose: () => {