From b6c338376a31141a3cae1381efb079bae61e9590 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Fri, 27 Sep 2024 09:25:15 -0700 Subject: [PATCH] Wrap sync in app --- packages/app/src/sync.ts | 47 ++++++++++++++++++++++++++++++++++++++ packages/util/src/Relay.ts | 2 ++ 2 files changed, 49 insertions(+) create mode 100644 packages/app/src/sync.ts diff --git a/packages/app/src/sync.ts b/packages/app/src/sync.ts new file mode 100644 index 0000000..6f508f2 --- /dev/null +++ b/packages/app/src/sync.ts @@ -0,0 +1,47 @@ +import {flatten} from '@welshman/lib' +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 {relaysByUrl} from './relays' + +export const hasNegentropy = (url: string) => { + const p = relaysByUrl.get().get(url)?.profile + + if (p?.supported_nips?.includes(77)) return true + if (p?.software?.includes('strfry') && !p?.version?.match(/^0\./)) return true + + 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 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 sync = async (opts: SyncOpts) => + flatten( + await Promise.all( + opts.relays.map(relay => + hasNegentropy(relay) + ? baseSync({...opts, relays: [relay]}) + : syncWithoutNegentropy({...opts, relays: [relay]}) + ) + ) + ) + diff --git a/packages/util/src/Relay.ts b/packages/util/src/Relay.ts index edba3b1..a7d5245 100644 --- a/packages/util/src/Relay.ts +++ b/packages/util/src/Relay.ts @@ -16,6 +16,8 @@ export type RelayProfile = { name?: string pubkey?: string contact?: string + software?: string + version?: string description?: string supported_nips?: number[] limitation?: {