diff --git a/packages/agent-sdk/src/evm/safe.ts b/packages/agent-sdk/src/evm/safe.ts index c7c8c83..ed625ba 100644 --- a/packages/agent-sdk/src/evm/safe.ts +++ b/packages/agent-sdk/src/evm/safe.ts @@ -1,6 +1,7 @@ import { type Address, checksumAddress, parseUnits } from "viem"; import { type UserToken, ZerionAPI } from "zerion-sdk"; import { scientificToDecimal } from "../misc"; +import { getClient } from "near-safe"; export interface TokenBalance { tokenAddress: string | null; // null for native token @@ -53,6 +54,12 @@ export async function getSafeBalances( address: Address, zerionKey?: string, ): Promise { + const client = await getClient(chainId); + const codeAt = await client.getCode({ address }); + if (!codeAt) { + // Not a Safe - Get balances from Zerion. + return getZerionBalances(chainId, address, zerionKey); + } const baseUrl = safeTxServiceUrlFor(chainId); if (!baseUrl) { console.warn( diff --git a/packages/agent-sdk/tests/evm/safe.spec.ts b/packages/agent-sdk/tests/evm/safe.spec.ts index 0ad056e..083685e 100644 --- a/packages/agent-sdk/tests/evm/safe.spec.ts +++ b/packages/agent-sdk/tests/evm/safe.spec.ts @@ -1,4 +1,3 @@ -import { zeroAddress } from "viem"; import { getSafeBalances, flatSafeBalances, @@ -17,10 +16,6 @@ describe("getSafeBalances", () => { console.warn = originalWarn; }); - it("should throw error for unsupported chain ID", async () => { - await expect(getSafeBalances(999, zeroAddress)).resolves.toEqual([]); - }); - it("zerionToTokenBalance should transform scientific notation balance", () => { expect( zerionToTokenBalance({