From 8e6423f4887bc87f000bf881af1d2e16d6905c4b Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Thu, 5 Sep 2024 15:29:53 -0700 Subject: [PATCH] Prefer dufflepud if enabled --- packages/app/src/collection.ts | 6 +---- packages/app/src/handles.ts | 32 +++++++++++--------------- packages/app/src/zappers.ts | 42 +++++++++++++++------------------- 3 files changed, 32 insertions(+), 48 deletions(-) diff --git a/packages/app/src/collection.ts b/packages/app/src/collection.ts index 59d5ff5..136d089 100644 --- a/packages/app/src/collection.ts +++ b/packages/app/src/collection.ts @@ -20,13 +20,9 @@ export const collection = ({ const loadAttempts = new Map() const loadItem = async (key: string, ...args: LoadArgs) => { - const item = undefined//indexStore.get().get(key) + const item = indexStore.get().get(key) const freshness = getFreshness(name, key) - if (name === 'zappers' && key === '6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93') { - console.log(item) - } - // If we have an item, reload anyway if it's stale. If not, retry with exponential backoff if (item) { loadAttempts.delete(key) diff --git a/packages/app/src/handles.ts b/packages/app/src/handles.ts index 07c3b02..461796d 100644 --- a/packages/app/src/handles.ts +++ b/packages/app/src/handles.ts @@ -47,29 +47,23 @@ export const fetchHandles = async (nip05s: string[]) => { const base = ctx.app.dufflepudUrl! const handlesByNip05 = new Map() - // Attempt fetching directly first - const results = await Promise.all( - nip05s.map(async nip05 => ({nip05, info: await queryProfile(nip05)})) - ) - - const dufflepudNip05s: string[] = [] - - // If we got a response, great, if not (due to CORS), proxy via dufflepud - for (const {nip05, info} of results) { - if (info) { - handlesByNip05.set(nip05, info) - } else { - dufflepudNip05s.push(nip05) - } - } - - // Fetch via dufflepud if we have an endpoint - if (base && dufflepudNip05s.length > 0) { - const res: any = await postJson(`${base}/handle/info`, {handles: dufflepudNip05s}) + // Use dufflepud if we it's set up to protect user privacy, otherwise fetch directly + if (base) { + const res: any = await postJson(`${base}/handle/info`, {handles: nip05s}) for (const {handle: nip05, info} of res?.data || []) { handlesByNip05.set(nip05, info) } + } else { + const results = await Promise.all( + nip05s.map(async nip05 => ({nip05, info: await queryProfile(nip05)})) + ) + + for (const {nip05, info} of results) { + if (info) { + handlesByNip05.set(nip05, info) + } + } } return handlesByNip05 diff --git a/packages/app/src/zappers.ts b/packages/app/src/zappers.ts index 1946133..c80ec04 100644 --- a/packages/app/src/zappers.ts +++ b/packages/app/src/zappers.ts @@ -12,34 +12,28 @@ export const fetchZappers = async (lnurls: string[]) => { const base = ctx.app.dufflepudUrl! const zappersByLnurl = new Map() - // Attempt fetching directly first - const results = await Promise.all( - lnurls.map(async lnurl => { - const hexUrl = tryCatch(() => bech32ToHex(lnurl)) - const info = hexUrl ? await fetchJson(hexUrl) : undefined - - return {lnurl, hexUrl, info} - }) - ) - - const dufflepudLnurls: string[] = [] - - // If we got a response, great, if not (due to CORS), proxy via dufflepud - for (const {lnurl, hexUrl, info} of results) { - if (info) { - zappersByLnurl.set(lnurl, info) - } else if (hexUrl) { - dufflepudLnurls.push(hexUrl) - } - } - - // Fetch via dufflepud if we have an endpoint - if (base && dufflepudLnurls.length > 0) { - const res: any = await postJson(`${base}/zapper/info`, {lnurls: dufflepudLnurls}) + // Use dufflepud if we it's set up to protect user privacy, otherwise fetch directly + if (base) { + const res: any = await postJson(`${base}/zapper/info`, {lnurls}) for (const {lnurl, info} of res?.data || []) { tryCatch(() => zappersByLnurl.set(hexToBech32("lnurl", lnurl), info)) } + } else { + const results = await Promise.all( + lnurls.map(async lnurl => { + const hexUrl = tryCatch(() => bech32ToHex(lnurl)) + const info = hexUrl ? await fetchJson(hexUrl) : undefined + + return {lnurl, hexUrl, info} + }) + ) + + for (const {lnurl, info} of results) { + if (info) { + zappersByLnurl.set(lnurl, info) + } + } } return zappersByLnurl