Radish alpha
r
Radicle web interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Handle subgraph API quota exhaustion
Sebastian Martinez committed 3 years ago
commit b65399f9b49e63e46a245ea99e3b2fd8696d0bf9
parent 7d651309b2261e796171962547906d3c815506d2
2 files changed +22 -11
modified 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));
  }
modified src/utils.ts
@@ -377,7 +377,7 @@ export async function querySubgraphWithRetry(
  query: string,
  variables: Record<string, any>,
  retries = 3,
-
): Promise<null | any> {
+
): Promise<Record<string, any> | 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.