From b65399f9b49e63e46a245ea99e3b2fd8696d0bf9 Mon Sep 17 00:00:00 2001 From: Sebastian Martinez Date: Thu, 22 Sep 2022 11:53:15 +0200 Subject: [PATCH] Handle subgraph API quota exhaustion We had to improve the logic when the subgraph API quota has been exhausted. Signed-off-by: Sebastian Martinez --- src/base/orgs/Org.ts | 18 +++++++++++++----- src/utils.ts | 15 +++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/base/orgs/Org.ts b/src/base/orgs/Org.ts index e8c7b0910..a57cb666b 100644 --- a/src/base/orgs/Org.ts +++ b/src/base/orgs/Org.ts @@ -203,16 +203,24 @@ export class Org { GetSafesByOwners, { owners: [owner] }, ); - const safes = safesByOwner.safes.reduce( - (prev: any, curr: Safe) => prev.concat(curr.id), - [], - ); + + let safes = []; + if (safesByOwner && safesByOwner.safes.length > 0) { + safes = safesByOwner.safes.reduce( + (prev: any, curr: Safe) => prev.concat(curr.id), + [], + ); + } + const orgsByOwner = await utils.querySubgraph( config.orgs.subgraph, GetOrgsByOwners, { owners: [...safes, owner] }, ); - const orgs: { id: string; owner: string }[] = [...orgsByOwner.orgs]; + let orgs: { id: string; owner: string }[] = []; + if (orgsByOwner && orgsByOwner.orgs) { + orgs = [...orgsByOwner.orgs]; + } return orgs.map(o => new Org(o.id, o.owner)); } diff --git a/src/utils.ts b/src/utils.ts index ae5217e11..29b453ff3 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -377,7 +377,7 @@ export async function querySubgraphWithRetry( query: string, variables: Record, retries = 3, -): Promise { +): Promise | null> { const response = await fetch(url, { method: "POST", headers: { @@ -393,11 +393,14 @@ export async function querySubgraphWithRetry( if (json.errors) { console.error("querySubgraph:", json.errors); - if (retries > 0) querySubgraphWithRetry(url, query, variables, retries - 1); - else return null; + if (retries > 0) { + return querySubgraphWithRetry(url, query, variables, retries - 1); + } else { + return null; + } + } else { + return json.data; } - - return json.data; } export const querySubgraph = cache.cached( @@ -589,7 +592,7 @@ export async function isSafe( addr: address.toLowerCase(), }); - return query.safe !== null ? true : false; + return query?.safe !== null ? true : false; } // Get a Gnosis Safe at an address.