From e66aba696c78a9cb99f5f257871ea7105828d53c Mon Sep 17 00:00:00 2001 From: Matt Jones <885417+jonesmac@users.noreply.github.com> Date: Wed, 3 Jan 2024 16:14:29 -0500 Subject: [PATCH] support passing multiple payload queries to indexing diviner --- .../src/hooks/support/usePollDiviners.tsx | 6 +++--- .../src/hooks/support/useTryDiviners.tsx | 12 ++++++------ .../src/interfaces/IndexedResultsConfig.ts | 2 +- .../src/story/manifest/components/TestSentinel.tsx | 2 +- .../manifest/components/UseFreshIndexedResult.tsx | 4 ++-- .../story/manifest/components/UseIndexedResults.tsx | 4 ++-- .../manifest/components/UseIndexedResultsNoPoll.tsx | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/sdk/packages/indexed-results/src/hooks/support/usePollDiviners.tsx b/packages/sdk/packages/indexed-results/src/hooks/support/usePollDiviners.tsx index b7e7db7f1a..d477f65bc3 100644 --- a/packages/sdk/packages/indexed-results/src/hooks/support/usePollDiviners.tsx +++ b/packages/sdk/packages/indexed-results/src/hooks/support/usePollDiviners.tsx @@ -18,7 +18,7 @@ export const usePollingFunction = ( functionToPoll?: FunctionToPoll, onResult?: (result: T[] | null) => void, ) => { - const { indexedQuery, processIndexedResults } = config ?? {} + const { indexedQueries, processIndexedResults } = config ?? {} const { isFresh } = processIndexedResults ?? {} const { maxDelay = 10_000, maxRetries, initialDelay = 100 } = pollDivinerConfig @@ -64,7 +64,7 @@ export const usePollingFunction = ( } onResult?.(result as T[] | null) } else { - console.warn('Exceeded maximum retries.', JSON.stringify(indexedQuery)) + console.warn('Exceeded maximum retries.', JSON.stringify(indexedQueries)) onResult?.(result as T[] | null) } } catch (e) { @@ -76,7 +76,7 @@ export const usePollingFunction = ( return await pollDivinersWithDelayInner(newDelay, functionToPoll) } }, - [activePolling, maxRetries, maxDelay, freshTest, indexedQuery, onResult], + [activePolling, maxRetries, maxDelay, freshTest, indexedQueries, onResult], ) /** A polling function that runs indefinitely on a set interval */ diff --git a/packages/sdk/packages/indexed-results/src/hooks/support/useTryDiviners.tsx b/packages/sdk/packages/indexed-results/src/hooks/support/useTryDiviners.tsx index a4dcfbf47e..37e7061c02 100644 --- a/packages/sdk/packages/indexed-results/src/hooks/support/useTryDiviners.tsx +++ b/packages/sdk/packages/indexed-results/src/hooks/support/useTryDiviners.tsx @@ -7,12 +7,12 @@ import { useFetchDivinersFromNode } from './useFetchDivinersFromNode' export const useTryDiviners = (config?: IndexedResultsConfig): (() => Promise) => { const { diviners } = useFetchDivinersFromNode(config) - const { indexedQuery, processIndexedResults } = config ?? {} + const { indexedQueries, processIndexedResults } = config ?? {} const parseIndexedResults = processIndexedResults?.parseIndexedResults const tryDiviner = useCallback( - async (diviner: DivinerInstance, indexedQuery: Payload, parseIndexedResults?: ProcessIndexedResults['parseIndexedResults']) => { - const divinedResult = await diviner.divine([indexedQuery]) + async (diviner: DivinerInstance, indexedQueries: Payload[], parseIndexedResults?: ProcessIndexedResults['parseIndexedResults']) => { + const divinedResult = await diviner.divine(indexedQueries) let results: Payload[] | undefined if (divinedResult) { results = parseIndexedResults ? await parseIndexedResults(divinedResult) : divinedResult @@ -26,8 +26,8 @@ export const useTryDiviners = (config?: IndexedResu let result: T[] | undefined | null let divinerCount = 0 if (diviners && diviners?.length > 0) { - while (divinerCount < diviners?.length && indexedQuery) { - const divinerResult = await tryDiviner(diviners[divinerCount], indexedQuery, parseIndexedResults) + while (divinerCount < diviners?.length && indexedQueries) { + const divinerResult = await tryDiviner(diviners[divinerCount], indexedQueries, parseIndexedResults) if (divinerResult && divinerResult?.length) { result = divinerResult as T[] break @@ -36,7 +36,7 @@ export const useTryDiviners = (config?: IndexedResu } return result ?? null } - }, [diviners, indexedQuery, parseIndexedResults, tryDiviner]) + }, [diviners, indexedQueries, parseIndexedResults, tryDiviner]) return tryDiviners } diff --git a/packages/sdk/packages/indexed-results/src/interfaces/IndexedResultsConfig.ts b/packages/sdk/packages/indexed-results/src/interfaces/IndexedResultsConfig.ts index 41887dd4cf..1850f5a03f 100644 --- a/packages/sdk/packages/indexed-results/src/interfaces/IndexedResultsConfig.ts +++ b/packages/sdk/packages/indexed-results/src/interfaces/IndexedResultsConfig.ts @@ -11,7 +11,7 @@ export interface IndexedResultsConfig { /** diviner that can check the the archivist for the latest results */ diviners: string[] /** query to search for indexed results */ - indexedQuery: Payload + indexedQueries: Payload[] /** Functions to process indexedResults */ processIndexedResults: ProcessIndexedResults /** Budget */ diff --git a/packages/sdk/packages/indexed-results/src/story/manifest/components/TestSentinel.tsx b/packages/sdk/packages/indexed-results/src/story/manifest/components/TestSentinel.tsx index b6e9c53a44..0fd1585d2b 100644 --- a/packages/sdk/packages/indexed-results/src/story/manifest/components/TestSentinel.tsx +++ b/packages/sdk/packages/indexed-results/src/story/manifest/components/TestSentinel.tsx @@ -17,7 +17,7 @@ const address = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D' const supportedTokenInterfaces = [ 'ERC721', - 'ERC1155', + // 'ERC1155', // Waiting on a Sentinel for these types // 'ERC721TokenReceiver', // 'ERC721Metadata', diff --git a/packages/sdk/packages/indexed-results/src/story/manifest/components/UseFreshIndexedResult.tsx b/packages/sdk/packages/indexed-results/src/story/manifest/components/UseFreshIndexedResult.tsx index 59da8bc128..f5c008633b 100644 --- a/packages/sdk/packages/indexed-results/src/story/manifest/components/UseFreshIndexedResult.tsx +++ b/packages/sdk/packages/indexed-results/src/story/manifest/components/UseFreshIndexedResult.tsx @@ -22,11 +22,11 @@ export const UseFreshIndexedResult: React.FC = ({ addres const [node] = useNode() const config: UseIndexedResultsConfig = useMemo(() => { - const indexedQuery = { address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface } + const indexedQueries = [{ address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }] const config: UseIndexedResultsConfig = { indexedResultsConfig: { diviners, - indexedQuery, + indexedQueries, processIndexedResults: { parseIndexedResults: async (payloads: Payload[]) => { return ( diff --git a/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResults.tsx b/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResults.tsx index 57c374c81e..7225c14860 100644 --- a/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResults.tsx +++ b/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResults.tsx @@ -11,11 +11,11 @@ export const UseIndexedResults: React.FC = ({ address, c const [archivist] = useArchivistFromNode('Archivist') const config = useMemo(() => { - const indexedQuery = { address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface } + const indexedQueries = [{ address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }] const config: UseIndexedResultsConfig = { indexedResultsConfig: { diviners, - indexedQuery, + indexedQueries, processIndexedResults: { parseIndexedResults: async (payloads: Payload[]) => { return await Promise.all( diff --git a/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResultsNoPoll.tsx b/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResultsNoPoll.tsx index 2b5fc647eb..45d0780dad 100644 --- a/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResultsNoPoll.tsx +++ b/packages/sdk/packages/indexed-results/src/story/manifest/components/UseIndexedResultsNoPoll.tsx @@ -11,11 +11,11 @@ export const UseIndexedResultsNoPoll: React.FC = ({ addr const [archivist] = useArchivistFromNode('Archivist') const config = useMemo(() => { - const indexedQuery = { address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface } + const indexedQueries = [{ address, chainId, implemented: true, schema: PayloadDivinerQuerySchema, tokenInterface }] const config: UseIndexedResultsConfig = { indexedResultsConfig: { diviners, - indexedQuery, + indexedQueries, processIndexedResults: { parseIndexedResults: async (payloads: Payload[]) => { return await Promise.all(