diff --git a/packages/agent-sdk/src/evm/safe.ts b/packages/agent-sdk/src/evm/safe.ts index ba27459..821ad78 100644 --- a/packages/agent-sdk/src/evm/safe.ts +++ b/packages/agent-sdk/src/evm/safe.ts @@ -74,31 +74,39 @@ export async function getSafeBalances( if (!response.ok) { if (response.status === 404) { console.warn(`Safe not found for ${address}`); - if (!zerionKey) { - return []; - } - console.info("Zerion Key provided - using Zerion"); - // Not a Safe, try Zerion - try { - const zerion = new ZerionAPI(zerionKey); - // TODO(bh2smith): This is not super efficient, but it works for now. - // Zerion API has its own network filter (but its not by chainID). - const balances = await zerion.ui.getUserBalances(address, { - options: { supportedChains: [chainId] }, - }); - return zerionToTokenBalances(balances.tokens); - } catch (error) { - console.error("Error fetching Zerion balances:", error); - return []; - } } throw new Error(`HTTP error! status: ${response.status}`); } + const data: TokenBalance[] = await response.json(); + console.log(`Retrieved ${data.length} balances`); + return data; + } catch (error) { + console.warn("Error fetching Safe balances:", error); + return getZerionBalances(chainId, address, zerionKey); + } +} - return await response.json(); +async function getZerionBalances( + chainId: number, + address: Address, + zerionKey?: string, +): Promise { + if (!zerionKey) { + return []; + } + console.info("Zerion Key provided - using Zerion"); + // Not a Safe, try Zerion + try { + const zerion = new ZerionAPI(zerionKey); + // TODO(bh2smith): This is not super efficient, but it works for now. + // Zerion API has its own network filter (but its not by chainID). + const balances = await zerion.ui.getUserBalances(address, { + options: { supportedChains: [chainId] }, + }); + return zerionToTokenBalances(balances.tokens); } catch (error) { - console.error("Error fetching Safe balances:", error); - throw error; + console.error("Error fetching Zerion balances:", error); + return []; } }