From 6a09bd3d36f911b28cdfcec431363ff40ae80dd9 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Thu, 11 Dec 2025 17:19:14 -0300 Subject: [PATCH 1/9] chore(balance-gql-to-rest): initial commit --- apps/api-gateway/src/resolvers/item.ts | 1 - apps/api-gateway/src/resolvers/rest.ts | 4 +- .../controllers/account-balance/account.ts | 35 +++++++ .../api/controllers/account-balance/index.ts | 2 + .../controllers/account-balance/listing.ts | 65 +++++++++++++ apps/indexer/src/api/index.ts | 20 ++-- .../src/api/mappers/account-balance/index.ts | 78 +++++++++++++++ .../repositories/account-balance/listing.ts | 94 +++++++++++++++++++ .../account-balance/variations.ts | 2 +- .../src/api/services/account-balance/index.ts | 1 + .../api/services/account-balance/listing.ts | 59 ++++++++++++ 11 files changed, 352 insertions(+), 9 deletions(-) create mode 100644 apps/indexer/src/api/controllers/account-balance/account.ts create mode 100644 apps/indexer/src/api/controllers/account-balance/listing.ts create mode 100644 apps/indexer/src/api/repositories/account-balance/listing.ts create mode 100644 apps/indexer/src/api/services/account-balance/listing.ts diff --git a/apps/api-gateway/src/resolvers/item.ts b/apps/api-gateway/src/resolvers/item.ts index bc08d62c2..40f9fca30 100644 --- a/apps/api-gateway/src/resolvers/item.ts +++ b/apps/api-gateway/src/resolvers/item.ts @@ -1,6 +1,5 @@ const daoItemQueries = [ "account", - "accountBalance", "accountPower", "daoMetricsDayBucket", "delegation", diff --git a/apps/api-gateway/src/resolvers/rest.ts b/apps/api-gateway/src/resolvers/rest.ts index 0e832aec1..9a0e07867 100644 --- a/apps/api-gateway/src/resolvers/rest.ts +++ b/apps/api-gateway/src/resolvers/rest.ts @@ -1,5 +1,7 @@ const daoItemQueries = [ - 'accountInteractions', + "accountBalance", + "accountBalances", + "accountInteractions", "compareActiveSupply", "compareAverageTurnout", "compareCexSupply", diff --git a/apps/indexer/src/api/controllers/account-balance/account.ts b/apps/indexer/src/api/controllers/account-balance/account.ts new file mode 100644 index 000000000..6bc2f2f54 --- /dev/null +++ b/apps/indexer/src/api/controllers/account-balance/account.ts @@ -0,0 +1,35 @@ +import { createRoute, OpenAPIHono as Hono } from "@hono/zod-openapi"; +import { AccountBalanceService } from "@/api/services"; +import { + AccountBalanceResponseMapper, + AccountBalanceResponseSchema, +} from "@/api/mappers"; +import { Address } from "viem"; + +export function accountBalance(app: Hono, service: AccountBalanceService) { + app.openapi( + createRoute({ + method: "get", + operationId: "accountBalance", + path: "/account-balance/:accountId", + summary: "Get account balance", + description: "Returns account balance", + tags: ["transactions"], + responses: { + 200: { + description: "Successfully retrieved account balance", + content: { + "application/json": { + schema: AccountBalanceResponseSchema, + }, + }, + }, + }, + }), + async (context) => { + const accountId = context.req.param("accountId"); + const result = await service.getAccountBalance(accountId as Address); + return context.json(AccountBalanceResponseMapper(result)); + }, + ); +} diff --git a/apps/indexer/src/api/controllers/account-balance/index.ts b/apps/indexer/src/api/controllers/account-balance/index.ts index 58f1265b2..6a4c77325 100644 --- a/apps/indexer/src/api/controllers/account-balance/index.ts +++ b/apps/indexer/src/api/controllers/account-balance/index.ts @@ -1,3 +1,5 @@ export * from "./historical-balances"; export * from "./interactions"; export * from "./variations"; +export * from "./listing"; +export * from "./account"; diff --git a/apps/indexer/src/api/controllers/account-balance/listing.ts b/apps/indexer/src/api/controllers/account-balance/listing.ts new file mode 100644 index 000000000..782eaf1bc --- /dev/null +++ b/apps/indexer/src/api/controllers/account-balance/listing.ts @@ -0,0 +1,65 @@ +import { createRoute, OpenAPIHono as Hono } from "@hono/zod-openapi"; +import { AccountBalanceService } from "@/api/services"; +import { + AccountBalancesRequestSchema, + AccountBalancesResponseMapper, + AccountBalancesResponseSchema, +} from "@/api/mappers"; +import { Address } from "viem"; + +export function accountBalances(app: Hono, service: AccountBalanceService) { + app.openapi( + createRoute({ + method: "get", + operationId: "accountBalances", + path: "/account-balances", + summary: "Get account balances", + description: "Returns account balances", + tags: ["transactions"], + request: { + query: AccountBalancesRequestSchema, + }, + responses: { + 200: { + description: "Successfully retrieved account balances", + content: { + "application/json": { + schema: AccountBalancesResponseSchema, + }, + }, + }, + }, + }), + async (context) => { + const { + includeAddresses, + excludeAddresses, + includeDelegates, + excludeDelegates, + balanceLessThan, + balanceGreaterThan, + limit, + skip, + orderDirection, + } = context.req.valid("query"); + + const result = await service.getAccountBalances( + skip, + limit, + orderDirection, + includeAddresses as Address[], + excludeAddresses as Address[], + includeDelegates as Address[], + excludeDelegates as Address[], + { + minAmount: balanceGreaterThan, + maxAmount: balanceLessThan, + }, + ); + + return context.json( + AccountBalancesResponseMapper(result.items, result.totalCount), + ); + }, + ); +} diff --git a/apps/indexer/src/api/index.ts b/apps/indexer/src/api/index.ts index 15b73b3be..b40496f04 100644 --- a/apps/indexer/src/api/index.ts +++ b/apps/indexer/src/api/index.ts @@ -23,13 +23,15 @@ import { accountBalanceVariations, dao, accountInteractions, + accountBalances, + accountBalance, } from "@/api/controllers"; import { docs } from "@/api/docs"; import { env } from "@/env"; import { DaoCache } from "@/api/cache/dao-cache"; import { DelegationPercentageRepository, - AccountBalanceRepository, + BalanceVariationsRepository, DrizzleRepository, NFTPriceRepository, TokenRepository, @@ -55,9 +57,11 @@ import { BalanceVariationsService, HistoricalBalancesService, DaoService, + AccountBalanceService, } from "@/api/services"; import { CONTRACT_ADDRESSES } from "@/lib/constants"; import { DaoIdEnum } from "@/lib/enums"; +import { AccountBalanceRepository } from "./repositories/account-balance/listing"; const app = new Hono({ defaultHook: (result, c) => { @@ -108,6 +112,7 @@ const delegationPercentageRepo = new DelegationPercentageRepository(); const delegationPercentageService = new DelegationPercentageService( delegationPercentageRepo, ); +const balanceVariationsRepo = new BalanceVariationsRepository(); const accountBalanceRepo = new AccountBalanceRepository(); const accountInteractionRepo = new AccountInteractionsRepository(); const transactionsService = new TransactionsService(transactionsRepo); @@ -119,10 +124,11 @@ const votingPowerService = new VotingPowerService( ); const daoCache = new DaoCache(); const daoService = new DaoService(daoClient, daoCache, env.CHAIN_ID); -const accountBalanceService = new BalanceVariationsService( - accountBalanceRepo, +const balanceVariationsService = new BalanceVariationsService( + balanceVariationsRepo, accountInteractionRepo, ); +const accountBalanceService = new AccountBalanceService(accountBalanceRepo); if (env.DUNE_API_URL && env.DUNE_API_KEY) { const duneClient = new DuneService(env.DUNE_API_URL, env.DUNE_API_KEY); @@ -158,15 +164,17 @@ historicalBalances( app, env.DAO_ID, new HistoricalVotingPowerService(votingPowerRepo), - new HistoricalBalancesService(accountBalanceRepo), + new HistoricalBalancesService(balanceVariationsRepo), ); transactions(app, transactionsService); lastUpdate(app); delegationPercentage(app, delegationPercentageService); votingPower(app, votingPowerService); votingPowerVariations(app, votingPowerService); -accountBalanceVariations(app, accountBalanceService); -accountInteractions(app, accountBalanceService); +accountBalanceVariations(app, balanceVariationsService); +accountBalance(app, accountBalanceService); +accountBalances(app, accountBalanceService); +accountInteractions(app, balanceVariationsService); dao(app, daoService); docs(app); diff --git a/apps/indexer/src/api/mappers/account-balance/index.ts b/apps/indexer/src/api/mappers/account-balance/index.ts index 1cb90b816..bf1723d07 100644 --- a/apps/indexer/src/api/mappers/account-balance/index.ts +++ b/apps/indexer/src/api/mappers/account-balance/index.ts @@ -5,6 +5,77 @@ import { PERCENTAGE_NO_BASELINE } from "@/api/mappers/constants"; import { CONTRACT_ADDRESSES } from "@/lib/constants"; import { calculateHistoricalBlockNumber } from "@/lib/blockTime"; +export const AccountBalancesRequestSchema = z.object({ + // TODO: Validate + limit: z.coerce + .number() + .int() + .min(1, "Limit must be a positive integer") + .max(100, "Limit cannot exceed 100") + .optional() + .default(20), + skip: z.coerce + .number() + .int() + .min(0, "Skip must be a non-negative integer") + .optional() + .default(0), + orderDirection: z.enum(["asc", "desc"]).optional().default("desc"), + includeAddresses: z.array(z.string()).optional().default([]), + excludeAddresses: z.array(z.string()).optional().default([]), + includeDelegates: z.array(z.string()).optional().default([]), + excludeDelegates: z.array(z.string()).optional().default([]), + balanceGreaterThan: z + .string() + .transform((val) => BigInt(val)) + .optional(), + balanceLessThan: z + .string() + .transform((val) => BigInt(val)) + .optional(), +}); + +export const AccountBalanceResponseSchema = z.object({ + accountId: z.string(), + balance: z.string(), + tokenId: z.string(), + delegate: z.string(), +}); + +export const AccountBalancesResponseSchema = z.object({ + items: z.array(AccountBalanceResponseSchema), + totalCount: z.number(), +}); + +export type AccountBalancesResponse = z.infer< + typeof AccountBalancesResponseSchema +>; + +export type AccountBalanceResponse = z.infer< + typeof AccountBalanceResponseSchema +>; + +export const AccountBalancesResponseMapper = ( + items: DBAccountBalance[], + totalCount: bigint, +): AccountBalancesResponse => { + return { + totalCount: Number(totalCount), + items: items.map((item) => AccountBalanceResponseMapper(item)), + }; +}; + +export const AccountBalanceResponseMapper = ( + item: DBAccountBalance, +): AccountBalanceResponse => { + return { + accountId: item.accountId, + balance: item.balance.toString(), + tokenId: item.tokenId, + delegate: item.delegate, + }; +}; + export const AccountBalanceVariationsRequestSchema = z.object({ days: z .enum(DaysOpts) @@ -95,6 +166,13 @@ export type DBAccountInteraction = DBAccountBalanceVariation & { transferCount: bigint; }; +export type DBAccountBalance = { + accountId: Address; + delegate: string; + tokenId: string; + balance: bigint; +}; + export interface AccountInteractions { interactionCount: number; interactions: DBAccountInteraction[]; diff --git a/apps/indexer/src/api/repositories/account-balance/listing.ts b/apps/indexer/src/api/repositories/account-balance/listing.ts new file mode 100644 index 000000000..415ca1004 --- /dev/null +++ b/apps/indexer/src/api/repositories/account-balance/listing.ts @@ -0,0 +1,94 @@ +import { AmountFilter, DBAccountBalance } from "@/api/mappers"; +import { and, asc, desc, eq, gte, inArray, not, SQL, sql } from "drizzle-orm"; +import { db } from "ponder:api"; +import { accountBalance } from "ponder:schema"; +import { Address } from "viem"; + +export class AccountBalanceRepository { + async getAccountBalances( + skip: number, + limit: number, + orderDirection: "asc" | "desc", + includeAddresses: Address[], + excludeAddresses: Address[], + includeDelegates: Address[], + excludeDelegates: Address[], + amountfilter: AmountFilter, + ): Promise<{ + items: DBAccountBalance[]; + totalCount: bigint; + }> { + const filter = this.filterToSql( + includeAddresses, + excludeAddresses, + includeDelegates, + excludeDelegates, + amountfilter, + ); + + const baseQuery = db.select().from(accountBalance).where(filter); + + const totalCount = await db + .select({ + count: sql`COUNT(*)`.as("count"), + }) + .from(baseQuery.as("subquery")); + + const page = await baseQuery + .orderBy( + orderDirection === "desc" + ? desc(accountBalance.balance) + : asc(accountBalance.balance), + ) + .offset(skip) + .limit(limit); + + return { + items: page, + totalCount: BigInt(totalCount[0]?.count ?? 0), + }; + } + + async getAccountBalance( + accountId: Address, + ): Promise { + const [result] = await db + .select() + .from(accountBalance) + .where(eq(accountBalance.accountId, accountId)) + .limit(1); + + return result; + } + + private filterToSql( + includeAddresses: Address[], + excludeAddresses: Address[], + includeDelegates: Address[], + excludeDelegates: Address[], + amountfilter: AmountFilter, + ): SQL | undefined { + const conditions = []; + + if (includeAddresses.length) { + conditions.push(inArray(accountBalance.accountId, includeAddresses)); + } + if (excludeAddresses.length) { + conditions.push(not(inArray(accountBalance.accountId, excludeAddresses))); + } + if (includeDelegates.length) { + conditions.push(inArray(accountBalance.delegate, includeDelegates)); + } + if (excludeDelegates.length) { + conditions.push(not(inArray(accountBalance.delegate, excludeDelegates))); + } + if (amountfilter.minAmount) { + gte(accountBalance.balance, BigInt(amountfilter.minAmount)); + } + if (amountfilter.maxAmount) { + gte(accountBalance.balance, BigInt(amountfilter.maxAmount)); + } + + return and(...conditions); + } +} diff --git a/apps/indexer/src/api/repositories/account-balance/variations.ts b/apps/indexer/src/api/repositories/account-balance/variations.ts index df64ae922..fbcb5f75f 100644 --- a/apps/indexer/src/api/repositories/account-balance/variations.ts +++ b/apps/indexer/src/api/repositories/account-balance/variations.ts @@ -4,7 +4,7 @@ import { transfer, accountBalance } from "ponder:schema"; import { DBAccountBalanceVariation, DBHistoricalBalance } from "@/api/mappers"; import { Address } from "viem"; -export class AccountBalanceRepository { +export class BalanceVariationsRepository { async getHistoricalBalances( addresses: Address[], timestamp: number, diff --git a/apps/indexer/src/api/services/account-balance/index.ts b/apps/indexer/src/api/services/account-balance/index.ts index cb880d8c5..2844f789f 100644 --- a/apps/indexer/src/api/services/account-balance/index.ts +++ b/apps/indexer/src/api/services/account-balance/index.ts @@ -1,2 +1,3 @@ export * from "./historical"; export * from "./variations"; +export * from "./listing"; diff --git a/apps/indexer/src/api/services/account-balance/listing.ts b/apps/indexer/src/api/services/account-balance/listing.ts new file mode 100644 index 000000000..3d13cbd23 --- /dev/null +++ b/apps/indexer/src/api/services/account-balance/listing.ts @@ -0,0 +1,59 @@ +import { AmountFilter, DBAccountBalance } from "@/api/mappers"; +import { Address } from "viem"; + +interface AccountBalanceRepository { + getAccountBalances( + skip: number, + limit: number, + orderDirection: "asc" | "desc", + includeAddresses: Address[], + excludeAddresses: Address[], + includeDelegates: Address[], + excludeDelegates: Address[], + amountfilter: AmountFilter, + ): Promise<{ + items: DBAccountBalance[]; + totalCount: bigint; + }>; + + getAccountBalance(accountId: Address): Promise; +} + +export class AccountBalanceService { + constructor(private readonly repo: AccountBalanceRepository) {} + + async getAccountBalances( + skip: number, + limit: number, + orderDirection: "asc" | "desc", + includeAddresses: Address[], + excludeAddresses: Address[], + includeDelegates: Address[], + excludeDelegates: Address[], + amountFilter: AmountFilter, + ): Promise<{ + items: DBAccountBalance[]; + totalCount: bigint; + }> { + return await this.repo.getAccountBalances( + skip, + limit, + orderDirection, + includeAddresses, + excludeAddresses, + includeDelegates, + excludeDelegates, + amountFilter, + ); + } + + async getAccountBalance(accountId: Address): Promise { + const result = await this.repo.getAccountBalance(accountId); + + if (!result) { + throw new Error("Not found"); // Review error handling + } + + return result; + } +} From 2b291a1286be7764aa8c319255953ff8ba05b701 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Thu, 11 Dec 2025 17:34:09 -0300 Subject: [PATCH 2/9] chore(balance-gql-to-rest): minor corrections --- apps/api-gateway/src/resolvers/list.ts | 1 - apps/indexer/src/api/controllers/account-balance/account.ts | 2 +- apps/indexer/src/api/services/account-balance/listing.ts | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/api-gateway/src/resolvers/list.ts b/apps/api-gateway/src/resolvers/list.ts index 32772408e..929094b2f 100644 --- a/apps/api-gateway/src/resolvers/list.ts +++ b/apps/api-gateway/src/resolvers/list.ts @@ -1,6 +1,5 @@ const daoListQueries = [ - 'accountBalances', 'accountPowers', 'accounts', 'daoMetricsDayBuckets', diff --git a/apps/indexer/src/api/controllers/account-balance/account.ts b/apps/indexer/src/api/controllers/account-balance/account.ts index 6bc2f2f54..ecae9add1 100644 --- a/apps/indexer/src/api/controllers/account-balance/account.ts +++ b/apps/indexer/src/api/controllers/account-balance/account.ts @@ -11,7 +11,7 @@ export function accountBalance(app: Hono, service: AccountBalanceService) { createRoute({ method: "get", operationId: "accountBalance", - path: "/account-balance/:accountId", + path: "/account-balances/:accountId", summary: "Get account balance", description: "Returns account balance", tags: ["transactions"], diff --git a/apps/indexer/src/api/services/account-balance/listing.ts b/apps/indexer/src/api/services/account-balance/listing.ts index 3d13cbd23..8f8896926 100644 --- a/apps/indexer/src/api/services/account-balance/listing.ts +++ b/apps/indexer/src/api/services/account-balance/listing.ts @@ -51,7 +51,7 @@ export class AccountBalanceService { const result = await this.repo.getAccountBalance(accountId); if (!result) { - throw new Error("Not found"); // Review error handling + throw new Error("Account not found"); } return result; From 0df2ed048a40e38e10a32ebe7d0ae81c7f538847 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Fri, 12 Dec 2025 14:23:06 -0300 Subject: [PATCH 3/9] fix: partial code review change request --- .../controllers/account-balance/account.ts | 2 +- .../controllers/account-balance/listing.ts | 11 +++++----- .../src/api/mappers/account-balance/index.ts | 22 ++++++++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/apps/indexer/src/api/controllers/account-balance/account.ts b/apps/indexer/src/api/controllers/account-balance/account.ts index ecae9add1..a9de0735b 100644 --- a/apps/indexer/src/api/controllers/account-balance/account.ts +++ b/apps/indexer/src/api/controllers/account-balance/account.ts @@ -14,7 +14,7 @@ export function accountBalance(app: Hono, service: AccountBalanceService) { path: "/account-balances/:accountId", summary: "Get account balance", description: "Returns account balance", - tags: ["transactions"], + tags: ["account-balances"], responses: { 200: { description: "Successfully retrieved account balance", diff --git a/apps/indexer/src/api/controllers/account-balance/listing.ts b/apps/indexer/src/api/controllers/account-balance/listing.ts index 782eaf1bc..717243adc 100644 --- a/apps/indexer/src/api/controllers/account-balance/listing.ts +++ b/apps/indexer/src/api/controllers/account-balance/listing.ts @@ -5,7 +5,6 @@ import { AccountBalancesResponseMapper, AccountBalancesResponseSchema, } from "@/api/mappers"; -import { Address } from "viem"; export function accountBalances(app: Hono, service: AccountBalanceService) { app.openapi( @@ -15,7 +14,7 @@ export function accountBalances(app: Hono, service: AccountBalanceService) { path: "/account-balances", summary: "Get account balances", description: "Returns account balances", - tags: ["transactions"], + tags: ["account-balances"], request: { query: AccountBalancesRequestSchema, }, @@ -47,10 +46,10 @@ export function accountBalances(app: Hono, service: AccountBalanceService) { skip, limit, orderDirection, - includeAddresses as Address[], - excludeAddresses as Address[], - includeDelegates as Address[], - excludeDelegates as Address[], + includeAddresses, + excludeAddresses, + includeDelegates, + excludeDelegates, { minAmount: balanceGreaterThan, maxAmount: balanceLessThan, diff --git a/apps/indexer/src/api/mappers/account-balance/index.ts b/apps/indexer/src/api/mappers/account-balance/index.ts index bf1723d07..1176f6946 100644 --- a/apps/indexer/src/api/mappers/account-balance/index.ts +++ b/apps/indexer/src/api/mappers/account-balance/index.ts @@ -1,6 +1,6 @@ import { DaoIdEnum, DaysEnum, DaysOpts } from "@/lib/enums"; import { z } from "@hono/zod-openapi"; -import { Address } from "viem"; +import { Address, isAddress } from "viem"; import { PERCENTAGE_NO_BASELINE } from "@/api/mappers/constants"; import { CONTRACT_ADDRESSES } from "@/lib/constants"; import { calculateHistoricalBlockNumber } from "@/lib/blockTime"; @@ -21,10 +21,22 @@ export const AccountBalancesRequestSchema = z.object({ .optional() .default(0), orderDirection: z.enum(["asc", "desc"]).optional().default("desc"), - includeAddresses: z.array(z.string()).optional().default([]), - excludeAddresses: z.array(z.string()).optional().default([]), - includeDelegates: z.array(z.string()).optional().default([]), - excludeDelegates: z.array(z.string()).optional().default([]), + includeAddresses: z + .array(z.string().refine((addr) => isAddress(addr))) + .optional() + .default([]), + excludeAddresses: z + .array(z.string().refine((addr) => isAddress(addr))) + .optional() + .default([]), + includeDelegates: z + .array(z.string().refine((addr) => isAddress(addr))) + .optional() + .default([]), + excludeDelegates: z + .array(z.string().refine((addr) => isAddress(addr))) + .optional() + .default([]), balanceGreaterThan: z .string() .transform((val) => BigInt(val)) From d04b0b1029305f404782f95fb34fceeebe1fc108 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Fri, 12 Dec 2025 15:00:17 -0300 Subject: [PATCH 4/9] fix: query filters --- .../controllers/account-balance/listing.ts | 20 ++++++------ apps/indexer/src/api/index.ts | 2 +- .../src/api/mappers/account-balance/index.ts | 12 ++----- .../repositories/account-balance/listing.ts | 32 ++++++++----------- .../api/services/account-balance/listing.ts | 21 ++++++------ 5 files changed, 38 insertions(+), 49 deletions(-) diff --git a/apps/indexer/src/api/controllers/account-balance/listing.ts b/apps/indexer/src/api/controllers/account-balance/listing.ts index 717243adc..2699df978 100644 --- a/apps/indexer/src/api/controllers/account-balance/listing.ts +++ b/apps/indexer/src/api/controllers/account-balance/listing.ts @@ -5,8 +5,13 @@ import { AccountBalancesResponseMapper, AccountBalancesResponseSchema, } from "@/api/mappers"; +import { DaoIdEnum } from "@/lib/enums"; -export function accountBalances(app: Hono, service: AccountBalanceService) { +export function accountBalances( + app: Hono, + daoId: DaoIdEnum, + service: AccountBalanceService, +) { app.openapi( createRoute({ method: "get", @@ -31,10 +36,8 @@ export function accountBalances(app: Hono, service: AccountBalanceService) { }), async (context) => { const { - includeAddresses, - excludeAddresses, - includeDelegates, - excludeDelegates, + addresses, + delegates, balanceLessThan, balanceGreaterThan, limit, @@ -43,13 +46,12 @@ export function accountBalances(app: Hono, service: AccountBalanceService) { } = context.req.valid("query"); const result = await service.getAccountBalances( + daoId, skip, limit, orderDirection, - includeAddresses, - excludeAddresses, - includeDelegates, - excludeDelegates, + addresses, + delegates, { minAmount: balanceGreaterThan, maxAmount: balanceLessThan, diff --git a/apps/indexer/src/api/index.ts b/apps/indexer/src/api/index.ts index b40496f04..e2b0ba96d 100644 --- a/apps/indexer/src/api/index.ts +++ b/apps/indexer/src/api/index.ts @@ -173,7 +173,7 @@ votingPower(app, votingPowerService); votingPowerVariations(app, votingPowerService); accountBalanceVariations(app, balanceVariationsService); accountBalance(app, accountBalanceService); -accountBalances(app, accountBalanceService); +accountBalances(app, env.DAO_ID, accountBalanceService); accountInteractions(app, balanceVariationsService); dao(app, daoService); docs(app); diff --git a/apps/indexer/src/api/mappers/account-balance/index.ts b/apps/indexer/src/api/mappers/account-balance/index.ts index 1176f6946..dbf411ff3 100644 --- a/apps/indexer/src/api/mappers/account-balance/index.ts +++ b/apps/indexer/src/api/mappers/account-balance/index.ts @@ -21,19 +21,11 @@ export const AccountBalancesRequestSchema = z.object({ .optional() .default(0), orderDirection: z.enum(["asc", "desc"]).optional().default("desc"), - includeAddresses: z + addresses: z .array(z.string().refine((addr) => isAddress(addr))) .optional() .default([]), - excludeAddresses: z - .array(z.string().refine((addr) => isAddress(addr))) - .optional() - .default([]), - includeDelegates: z - .array(z.string().refine((addr) => isAddress(addr))) - .optional() - .default([]), - excludeDelegates: z + delegates: z .array(z.string().refine((addr) => isAddress(addr))) .optional() .default([]), diff --git a/apps/indexer/src/api/repositories/account-balance/listing.ts b/apps/indexer/src/api/repositories/account-balance/listing.ts index 415ca1004..8051b5fe2 100644 --- a/apps/indexer/src/api/repositories/account-balance/listing.ts +++ b/apps/indexer/src/api/repositories/account-balance/listing.ts @@ -9,20 +9,18 @@ export class AccountBalanceRepository { skip: number, limit: number, orderDirection: "asc" | "desc", - includeAddresses: Address[], + addresses: Address[], + delegates: Address[], excludeAddresses: Address[], - includeDelegates: Address[], - excludeDelegates: Address[], amountfilter: AmountFilter, ): Promise<{ items: DBAccountBalance[]; totalCount: bigint; }> { const filter = this.filterToSql( - includeAddresses, + addresses, + delegates, excludeAddresses, - includeDelegates, - excludeDelegates, amountfilter, ); @@ -62,25 +60,18 @@ export class AccountBalanceRepository { } private filterToSql( - includeAddresses: Address[], + addresses: Address[], + delegates: Address[], excludeAddresses: Address[], - includeDelegates: Address[], - excludeDelegates: Address[], amountfilter: AmountFilter, ): SQL | undefined { const conditions = []; - if (includeAddresses.length) { - conditions.push(inArray(accountBalance.accountId, includeAddresses)); + if (addresses.length) { + conditions.push(inArray(accountBalance.accountId, addresses)); } - if (excludeAddresses.length) { - conditions.push(not(inArray(accountBalance.accountId, excludeAddresses))); - } - if (includeDelegates.length) { - conditions.push(inArray(accountBalance.delegate, includeDelegates)); - } - if (excludeDelegates.length) { - conditions.push(not(inArray(accountBalance.delegate, excludeDelegates))); + if (delegates.length) { + conditions.push(inArray(accountBalance.delegate, delegates)); } if (amountfilter.minAmount) { gte(accountBalance.balance, BigInt(amountfilter.minAmount)); @@ -88,6 +79,9 @@ export class AccountBalanceRepository { if (amountfilter.maxAmount) { gte(accountBalance.balance, BigInt(amountfilter.maxAmount)); } + if (excludeAddresses.length) { + conditions.push(not(inArray(accountBalance.accountId, excludeAddresses))); + } return and(...conditions); } diff --git a/apps/indexer/src/api/services/account-balance/listing.ts b/apps/indexer/src/api/services/account-balance/listing.ts index 8f8896926..5a0f6c125 100644 --- a/apps/indexer/src/api/services/account-balance/listing.ts +++ b/apps/indexer/src/api/services/account-balance/listing.ts @@ -1,4 +1,6 @@ import { AmountFilter, DBAccountBalance } from "@/api/mappers"; +import { TreasuryAddresses } from "@/lib/constants"; +import { DaoIdEnum } from "@/lib/enums"; import { Address } from "viem"; interface AccountBalanceRepository { @@ -6,10 +8,9 @@ interface AccountBalanceRepository { skip: number, limit: number, orderDirection: "asc" | "desc", - includeAddresses: Address[], + addresses: Address[], + delegates: Address[], excludeAddresses: Address[], - includeDelegates: Address[], - excludeDelegates: Address[], amountfilter: AmountFilter, ): Promise<{ items: DBAccountBalance[]; @@ -23,26 +24,26 @@ export class AccountBalanceService { constructor(private readonly repo: AccountBalanceRepository) {} async getAccountBalances( + daoId: DaoIdEnum, skip: number, limit: number, orderDirection: "asc" | "desc", - includeAddresses: Address[], - excludeAddresses: Address[], - includeDelegates: Address[], - excludeDelegates: Address[], + addresses: Address[], + delegates: Address[], amountFilter: AmountFilter, ): Promise<{ items: DBAccountBalance[]; totalCount: bigint; }> { + const excludeAddresses = Object.values(TreasuryAddresses[daoId]); + return await this.repo.getAccountBalances( skip, limit, orderDirection, - includeAddresses, + addresses, + delegates, excludeAddresses, - includeDelegates, - excludeDelegates, amountFilter, ); } From 2225c2cfb20ca5a7041dcb3ad84aefee4553ab23 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Sun, 21 Dec 2025 22:20:27 -0300 Subject: [PATCH 5/9] chore(balance-gql-to-rest): standardize structure and endpoint names --- apps/api-gateway/src/resolvers/rest.ts | 18 +++++----- .../controllers/account-balance/account.ts | 35 ------------------- .../api/controllers/account-balance/index.ts | 1 - .../controllers/account-balance/listing.ts | 31 ++++++++++++++++ apps/indexer/src/api/index.ts | 2 -- apps/indexer/src/api/mappers/index.ts | 1 + apps/indexer/src/api/mappers/shared.ts | 4 +++ 7 files changed, 45 insertions(+), 47 deletions(-) delete mode 100644 apps/indexer/src/api/controllers/account-balance/account.ts create mode 100644 apps/indexer/src/api/mappers/shared.ts diff --git a/apps/api-gateway/src/resolvers/rest.ts b/apps/api-gateway/src/resolvers/rest.ts index 9a0e07867..5932ea344 100644 --- a/apps/api-gateway/src/resolvers/rest.ts +++ b/apps/api-gateway/src/resolvers/rest.ts @@ -1,5 +1,6 @@ const daoItemQueries = [ - "accountBalance", + "accountBalanceByAccountId", + "accountBalanceVariations", "accountBalances", "accountInteractions", "compareActiveSupply", @@ -13,23 +14,22 @@ const daoItemQueries = [ "compareTotalSupply", "compareTreasury", "compareVotes", + "dao", + "delegationPercentageByDay", "getTotalAssets", "getVotingPower", - "historicalTokenData", - "proposalsActivity", "historicalBalances", + "historicalTokenData", "historicalVotingPower", - "proposals", - "transactions", "lastUpdate", "proposal", - "votingPowers", "proposalNonVoters", + "proposals", + "proposalsActivity", "token", + "transactions", "votingPowerVariations", - "accountBalanceVariations", - "delegationPercentageByDay", - "dao", + "votingPowers", ]; export const restResolvers = daoItemQueries.reduce((acc, fieldName) => { diff --git a/apps/indexer/src/api/controllers/account-balance/account.ts b/apps/indexer/src/api/controllers/account-balance/account.ts deleted file mode 100644 index a9de0735b..000000000 --- a/apps/indexer/src/api/controllers/account-balance/account.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { createRoute, OpenAPIHono as Hono } from "@hono/zod-openapi"; -import { AccountBalanceService } from "@/api/services"; -import { - AccountBalanceResponseMapper, - AccountBalanceResponseSchema, -} from "@/api/mappers"; -import { Address } from "viem"; - -export function accountBalance(app: Hono, service: AccountBalanceService) { - app.openapi( - createRoute({ - method: "get", - operationId: "accountBalance", - path: "/account-balances/:accountId", - summary: "Get account balance", - description: "Returns account balance", - tags: ["account-balances"], - responses: { - 200: { - description: "Successfully retrieved account balance", - content: { - "application/json": { - schema: AccountBalanceResponseSchema, - }, - }, - }, - }, - }), - async (context) => { - const accountId = context.req.param("accountId"); - const result = await service.getAccountBalance(accountId as Address); - return context.json(AccountBalanceResponseMapper(result)); - }, - ); -} diff --git a/apps/indexer/src/api/controllers/account-balance/index.ts b/apps/indexer/src/api/controllers/account-balance/index.ts index 6a4c77325..4b01e2803 100644 --- a/apps/indexer/src/api/controllers/account-balance/index.ts +++ b/apps/indexer/src/api/controllers/account-balance/index.ts @@ -2,4 +2,3 @@ export * from "./historical-balances"; export * from "./interactions"; export * from "./variations"; export * from "./listing"; -export * from "./account"; diff --git a/apps/indexer/src/api/controllers/account-balance/listing.ts b/apps/indexer/src/api/controllers/account-balance/listing.ts index 2699df978..756b638de 100644 --- a/apps/indexer/src/api/controllers/account-balance/listing.ts +++ b/apps/indexer/src/api/controllers/account-balance/listing.ts @@ -5,6 +5,11 @@ import { AccountBalancesResponseMapper, AccountBalancesResponseSchema, } from "@/api/mappers"; +import { + AccountBalanceResponseMapper, + AccountBalanceResponseSchema, +} from "@/api/mappers"; +import { Address } from "viem"; import { DaoIdEnum } from "@/lib/enums"; export function accountBalances( @@ -63,4 +68,30 @@ export function accountBalances( ); }, ); + + app.openapi( + createRoute({ + method: "get", + operationId: "accountBalanceByAccountId", + path: "/account-balances/:accountId", + summary: "Get account balance", + description: "Returns account balance", + tags: ["account-balances"], + responses: { + 200: { + description: "Successfully retrieved account balance", + content: { + "application/json": { + schema: AccountBalanceResponseSchema, + }, + }, + }, + }, + }), + async (context) => { + const accountId = context.req.param("accountId"); + const result = await service.getAccountBalance(accountId as Address); + return context.json(AccountBalanceResponseMapper(result)); + }, + ); } diff --git a/apps/indexer/src/api/index.ts b/apps/indexer/src/api/index.ts index ae89574db..8569d7a7b 100644 --- a/apps/indexer/src/api/index.ts +++ b/apps/indexer/src/api/index.ts @@ -24,7 +24,6 @@ import { dao, accountInteractions, accountBalances, - accountBalance, } from "@/api/controllers"; import { docs } from "@/api/docs"; import { env } from "@/env"; @@ -182,7 +181,6 @@ delegationPercentage(app, delegationPercentageService); votingPower(app, votingPowerService); votingPowerVariations(app, votingPowerService); accountBalanceVariations(app, balanceVariationsService); -accountBalance(app, accountBalanceService); accountBalances(app, env.DAO_ID, accountBalanceService); accountInteractions(app, balanceVariationsService); dao(app, daoService); diff --git a/apps/indexer/src/api/mappers/index.ts b/apps/indexer/src/api/mappers/index.ts index a40f25bdd..35f8b0def 100644 --- a/apps/indexer/src/api/mappers/index.ts +++ b/apps/indexer/src/api/mappers/index.ts @@ -6,3 +6,4 @@ export * from "./token"; export * from "./delegation-percentage"; export * from "./account-balance"; export * from "./dao"; +export * from "./shared"; diff --git a/apps/indexer/src/api/mappers/shared.ts b/apps/indexer/src/api/mappers/shared.ts new file mode 100644 index 000000000..fe5be8b2d --- /dev/null +++ b/apps/indexer/src/api/mappers/shared.ts @@ -0,0 +1,4 @@ +export type AmountFilter = { + minAmount: number | bigint | undefined; + maxAmount: number | bigint | undefined; +}; From a62f581594d1aa4d7d78cb51d75bdc1dfcaca1ff Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Mon, 22 Dec 2025 17:09:48 -0300 Subject: [PATCH 6/9] chore(balance-gql-to-rest): adjust historical balances endpoint --- .../api/controllers/account-balance/historical-balances.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/indexer/src/api/controllers/account-balance/historical-balances.ts b/apps/indexer/src/api/controllers/account-balance/historical-balances.ts index f33a9500f..2380b8d25 100644 --- a/apps/indexer/src/api/controllers/account-balance/historical-balances.ts +++ b/apps/indexer/src/api/controllers/account-balance/historical-balances.ts @@ -19,11 +19,11 @@ export function historicalBalances( createRoute({ method: "get", operationId: "historicalBalances", - path: "/historical-balances", + path: "/account-balances/historical", summary: "Get historical token balances", description: "Fetch historical token balances for multiple addresses at a specific time period using multicall", - tags: ["historical-onchain"], + tags: ["account-balances"], request: { query: z.object({ addresses: z From ad5749d00accfefae2715ae101f45b8ed7bbd2c9 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Tue, 6 Jan 2026 15:19:18 -0300 Subject: [PATCH 7/9] chore(port-balance-query-to-rest): fix balance endpoints --- apps/api-gateway/meshrc.ts | 10 +- apps/api-gateway/package.json | 1 + apps/api-gateway/schema.graphql | 135 ++-- .../controllers/account-balance/listing.ts | 11 +- pnpm-lock.yaml | 606 ++++++++---------- 5 files changed, 359 insertions(+), 404 deletions(-) diff --git a/apps/api-gateway/meshrc.ts b/apps/api-gateway/meshrc.ts index 8dd2aff78..bd52a6e9b 100644 --- a/apps/api-gateway/meshrc.ts +++ b/apps/api-gateway/meshrc.ts @@ -27,6 +27,14 @@ export default processConfig( }, }, transforms: [ + { + filterSchema: { + filters: [ + 'Query.!{accountBalance}', + 'Query.!{accountBalances}' + ] + } + }, { rename: { renames: [ @@ -57,7 +65,7 @@ export default processConfig( ]; }), ], - additionalTypeDefs:` + additionalTypeDefs: ` type AverageDelegationPercentageItem { date: String! high: String! diff --git a/apps/api-gateway/package.json b/apps/api-gateway/package.json index 99225c7c2..0b18244ac 100644 --- a/apps/api-gateway/package.json +++ b/apps/api-gateway/package.json @@ -30,6 +30,7 @@ "@graphql-mesh/openapi": "^0.109.8", "@graphql-mesh/runtime": "^0.106.3", "@graphql-mesh/transform-rename": "^0.105.7", + "@graphql-mesh/transform-filter-schema": "^0.104.18", "@graphql-mesh/types": "^0.104.3", "dotenv": "^16.5.0", "graphql": "^16.11.0" diff --git a/apps/api-gateway/schema.graphql b/apps/api-gateway/schema.graphql index 72942fe55..fcab23e91 100644 --- a/apps/api-gateway/schema.graphql +++ b/apps/api-gateway/schema.graphql @@ -11,16 +11,14 @@ directive @httpOperation(subgraph: String, path: String, operationSpecificHeader directive @transport(subgraph: String, kind: String, location: String, headers: [[String]], queryStringOptions: ObjMap, queryParams: [[String]]) repeatable on SCHEMA type Query { - """Get property data for a specific token""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/token`\nGet property data for a specific token\n" token(currency: queryInput_token_currency = usd): token_200_response tokens(where: tokenFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): tokenPage! account(id: String!): account accounts(where: accountFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): accountPage! - accountBalance(accountId: String!, tokenId: String!): accountBalance - accountBalances(where: accountBalanceFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): accountBalancePage! accountPower(accountId: String!): accountPower accountPowers(where: accountPowerFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): accountPowerPage! - votingPowerHistory(transactionHash: String!, accountId: String!): votingPowerHistory + votingPowerHistory(transactionHash: String!, accountId: String!, logIndex: Float!): votingPowerHistory votingPowerHistorys(where: votingPowerHistoryFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): votingPowerHistoryPage! delegation(transactionHash: String!, delegatorAccountId: String!, delegateAccountId: String!): delegation delegations(where: delegationFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): delegationPage! @@ -38,72 +36,61 @@ type Query { tokenPrices(where: tokenPriceFilter, orderBy: String, orderDirection: String, before: String, after: String, limit: Int): tokenPricePage! _meta: Meta - """Get total assets""" - totalAssets(days: queryInput_totalAssets_days = _7d): [query_totalAssets_items] - - """Get historical market data for a specific token""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/token/historical-data`\nGet historical market data for a specific token\n" historicalTokenData(skip: NonNegativeInt, limit: Float = 365): [query_historicalTokenData_items] - """Compare total supply between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/total-supply/compare`\nCompare total supply between periods\n" compareTotalSupply(days: queryInput_compareTotalSupply_days = _90d): compareTotalSupply_200_response - """Compare delegated supply between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/delegated-supply/compare`\nCompare delegated supply between periods\n" compareDelegatedSupply(days: queryInput_compareDelegatedSupply_days = _90d): compareDelegatedSupply_200_response - """Compare circulating supply between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/circulating-supply/compare`\nCompare circulating supply between periods\n" compareCirculatingSupply(days: queryInput_compareCirculatingSupply_days = _90d): compareCirculatingSupply_200_response - """Compare treasury between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/treasury/compare`\nCompare treasury between periods\n" compareTreasury(days: queryInput_compareTreasury_days = _90d): compareTreasury_200_response - """Compare cex supply between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/cex-supply/compare`\nCompare cex supply between periods\n" compareCexSupply(days: queryInput_compareCexSupply_days = _90d): compareCexSupply_200_response - """Compare dex supply between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/dex-supply/compare`\nCompare dex supply between periods\n" compareDexSupply(days: queryInput_compareDexSupply_days = _90d): compareDexSupply_200_response - """Compare lending supply between periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/lending-supply/compare`\nCompare lending supply between periods\n" compareLendingSupply(days: queryInput_compareLendingSupply_days = _90d): compareLendingSupply_200_response - """Get active token supply for DAO""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/active-supply/compare`\nGet active token supply for DAO\n" compareActiveSupply(days: queryInput_compareActiveSupply_days = _90d): compareActiveSupply_200_response - """Compare number of proposals between time periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/proposals/compare`\nCompare number of proposals between time periods\n" compareProposals(days: queryInput_compareProposals_days = _90d): compareProposals_200_response - """Compare number of votes between time periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/votes/compare`\nCompare number of votes between time periods\n" compareVotes(days: queryInput_compareVotes_days = _90d): compareVotes_200_response - """Compare average turnout between time periods""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/average-turnout/compare`\nCompare average turnout between time periods\n" compareAverageTurnout(days: queryInput_compareAverageTurnout_days = _90d): compareAverageTurnout_200_response - """ - Returns proposal activity data including voting history, win rates, and detailed proposal information for the specified delegate within the given time window - """ + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/proposals-activity`\nReturns proposal activity data including voting history, win rates, and detailed proposal information for the specified delegate within the given time window\n" proposalsActivity(address: String!, fromDate: NonNegativeInt, skip: NonNegativeInt, limit: PositiveInt = 10, orderBy: queryInput_proposalsActivity_orderBy = timestamp, orderDirection: queryInput_proposalsActivity_orderDirection = desc, userVoteFilter: queryInput_proposalsActivity_userVoteFilter): proposalsActivity_200_response - """Returns a list of proposal""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/proposals`\nReturns a list of proposal\n" proposals(skip: NonNegativeInt, limit: PositiveInt = 10, orderDirection: queryInput_proposals_orderDirection = desc, status: JSON, fromDate: Float, fromEndDate: Float, includeOptimisticProposals: queryInput_proposals_includeOptimisticProposals = TRUE): proposals_200_response - """Returns a single proposal by its ID""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/proposals/{args.id}`\nReturns a single proposal by its ID\n" proposal(id: String!): proposal_200_response - """Returns the active delegates that did not vote on a given proposal""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/proposals/{args.id}/non-voters`\nReturns the active delegates that did not vote on a given proposal\n" proposalNonVoters(id: String!, skip: NonNegativeInt, limit: PositiveInt = 10, orderDirection: queryInput_proposalNonVoters_orderDirection = desc, addresses: JSON): proposalNonVoters_200_response - """ - Fetch historical token balances for multiple addresses at a specific time period using multicall - """ + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/account-balances/historical`\nFetch historical token balances for multiple addresses at a specific time period using multicall\n" historicalBalances(addresses: JSON!, days: queryInput_historicalBalances_days = _7d): [query_historicalBalances_items] - """ - Fetch historical voting power for multiple addresses at a specific time period using multicall - """ + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/historical-voting-power`\nFetch historical voting power for multiple addresses at a specific time period using multicall\n" historicalVotingPower(addresses: JSON!, days: queryInput_historicalVotingPower_days = _7d, fromDate: Float): [query_historicalVotingPower_items] - """ - Get transactions with their associated transfers and delegations, with optional filtering and sorting - """ + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/transactions`\nGet transactions with their associated transfers and delegations, with optional filtering and sorting\n" transactions( limit: PositiveInt = 50 offset: NonNegativeInt @@ -125,32 +112,31 @@ type Query { includes: JSON ): transactions_200_response - """Get the last update time""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/last-update`\nGet the last update time\n" lastUpdate(chart: queryInput_lastUpdate_chart!): lastUpdate_200_response - """Get delegation percentage day buckets with forward-fill""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/delegation-percentage`\nGet delegation percentage day buckets with forward-fill\n" delegationPercentageByDay(startDate: String, endDate: String, orderDirection: queryInput_delegationPercentageByDay_orderDirection = asc, limit: NonNegativeInt = 365, after: String, before: String): delegationPercentageByDay_200_response - """Returns a list of voting power changes""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/voting-powers`\nReturns a list of voting power changes\n" votingPowers(account: String!, skip: NonNegativeInt, limit: PositiveInt = 10, orderBy: queryInput_votingPowers_orderBy = timestamp, orderDirection: queryInput_votingPowers_orderDirection = desc, minDelta: String, maxDelta: String): votingPowers_200_response - """ - Returns a mapping of the biggest changes to voting power associated by delegate address - """ + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/voting-power/variations`\nReturns a mapping of the biggest changes to voting power associated by delegate address\n" votingPowerVariations(days: queryInput_votingPowerVariations_days = _90d, limit: PositiveInt = 20, skip: NonNegativeInt, orderDirection: queryInput_votingPowerVariations_orderDirection = desc): votingPowerVariations_200_response - """ - Returns a mapping of the biggest variations to account balances associated by account address - """ + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/account-balance/variations`\nReturns a mapping of the biggest variations to account balances associated by account address\n" accountBalanceVariations(days: queryInput_accountBalanceVariations_days = _90d, limit: PositiveInt = 20, skip: NonNegativeInt, orderDirection: queryInput_accountBalanceVariations_orderDirection = desc): accountBalanceVariations_200_response - """ - Returns a mapping of the largest interactions between accounts. - Positive amounts signify net token transfers FROM , whilst negative amounts refer to net transfers TO - """ - accountInteractions(days: queryInput_accountInteractions_days = _90d, limit: PositiveInt = 20, skip: NonNegativeInt, orderDirection: queryInput_accountInteractions_orderDirection = desc, accountId: String!, minAmount: String, maxAmount: String): accountInteractions_200_response + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/account-balances`\nReturns account balances\n" + accountBalances(limit: PositiveInt = 20, skip: NonNegativeInt, orderDirection: queryInput_accountBalances_orderDirection = desc, addresses: [String] = [], delegates: [String] = [], balanceGreaterThan: String, balanceLessThan: String): accountBalances_200_response - """Returns current governance parameters for this DAO""" + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/account-balances/{args.accountId}`\nReturns account balance\n" + accountBalanceByAccountId(accountId: String!): accountBalanceByAccountId_200_response + + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/account-balance/interactions`\nReturns a mapping of the largest interactions between accounts. \nPositive amounts signify net token transfers FROM , whilst negative amounts refer to net transfers TO \n" + accountInteractions(days: queryInput_accountInteractions_days = _90d, limit: PositiveInt = 20, skip: NonNegativeInt, orderDirection: queryInput_accountInteractions_orderDirection = desc, accountId: String!, minAmount: String, maxAmount: String, orderBy: queryInput_accountInteractions_orderBy = count, address: String): accountInteractions_200_response + + "\n>**Method**: `GET`\n>**Base URL**: `http://localhost:42069`\n>**Path**: `/dao`\nReturns current governance parameters for this DAO\n" dao: dao_200_response """ @@ -358,7 +344,6 @@ type accountPower { proposalsCount: Int! delegationsCount: Int! lastVoteTimestamp: BigInt! - firstVoteTimestamp: BigInt account: account } @@ -474,14 +459,6 @@ input accountPowerFilter { lastVoteTimestamp_lt: BigInt lastVoteTimestamp_gte: BigInt lastVoteTimestamp_lte: BigInt - firstVoteTimestamp: BigInt - firstVoteTimestamp_not: BigInt - firstVoteTimestamp_in: [BigInt] - firstVoteTimestamp_not_in: [BigInt] - firstVoteTimestamp_gt: BigInt - firstVoteTimestamp_lt: BigInt - firstVoteTimestamp_gte: BigInt - firstVoteTimestamp_lte: BigInt } type delegationPage { @@ -1339,19 +1316,6 @@ input tokenPriceFilter { timestamp_lte: BigInt } -type query_totalAssets_items { - totalAssets: String! - date: String! -} - -enum queryInput_totalAssets_days { - _7d - _30d - _90d - _180d - _365d -} - type query_historicalTokenData_items { price: String! timestamp: Float! @@ -1893,6 +1857,30 @@ enum queryInput_accountBalanceVariations_orderDirection { desc } +type accountBalances_200_response { + items: [query_accountBalances_items_items]! + totalCount: Float! +} + +type query_accountBalances_items_items { + accountId: String! + balance: String! + tokenId: String! + delegate: String! +} + +enum queryInput_accountBalances_orderDirection { + asc + desc +} + +type accountBalanceByAccountId_200_response { + accountId: String! + balance: String! + tokenId: String! + delegate: String! +} + type accountInteractions_200_response { period: query_accountInteractions_period! totalCount: Float! @@ -1925,6 +1913,11 @@ enum queryInput_accountInteractions_orderDirection { desc } +enum queryInput_accountInteractions_orderBy { + volume + count +} + type dao_200_response { id: String! chainId: Float! diff --git a/apps/indexer/src/api/controllers/account-balance/listing.ts b/apps/indexer/src/api/controllers/account-balance/listing.ts index 756b638de..47904322a 100644 --- a/apps/indexer/src/api/controllers/account-balance/listing.ts +++ b/apps/indexer/src/api/controllers/account-balance/listing.ts @@ -1,4 +1,4 @@ -import { createRoute, OpenAPIHono as Hono } from "@hono/zod-openapi"; +import { createRoute, OpenAPIHono as Hono, z } from "@hono/zod-openapi"; import { AccountBalanceService } from "@/api/services"; import { AccountBalancesRequestSchema, @@ -9,7 +9,7 @@ import { AccountBalanceResponseMapper, AccountBalanceResponseSchema, } from "@/api/mappers"; -import { Address } from "viem"; +import { Address, isAddress } from "viem"; import { DaoIdEnum } from "@/lib/enums"; export function accountBalances( @@ -73,10 +73,15 @@ export function accountBalances( createRoute({ method: "get", operationId: "accountBalanceByAccountId", - path: "/account-balances/:accountId", + path: "/account-balances/{accountId}", summary: "Get account balance", description: "Returns account balance", tags: ["account-balances"], + request: { + params: z.object({ + accountId: z.string().refine((addr) => isAddress(addr)), + }), + }, responses: { 200: { description: "Successfully retrieved account balance", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d3acaf26..dad5b3fc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -60,7 +60,7 @@ importers: version: 0.108.20(graphql@16.12.0) "@graphql-mesh/graphql": specifier: ^0.104.3 - version: 0.104.18(@types/node@24.10.1)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10) + version: 0.104.18(@types/node@20.19.25)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10) "@graphql-mesh/http": specifier: ^0.106.3 version: 0.106.18(graphql@16.12.0) @@ -70,6 +70,9 @@ importers: "@graphql-mesh/runtime": specifier: ^0.106.3 version: 0.106.18(graphql@16.12.0) + "@graphql-mesh/transform-filter-schema": + specifier: ^0.104.18 + version: 0.104.18(graphql@16.12.0) "@graphql-mesh/transform-rename": specifier: ^0.105.7 version: 0.105.18(graphql@16.12.0) @@ -91,10 +94,10 @@ importers: version: 29.5.14 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) + version: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.9.3)) ts-jest: specifier: ^29.4.1 - version: 29.4.6(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.6(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(esbuild@0.25.8)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.9.3)))(typescript@5.9.3) tsx: specifier: ^4.19.4 version: 4.21.0 @@ -109,7 +112,7 @@ importers: version: link:../../packages/graphql-client "@apollo/client": specifier: ^3.13.8 - version: 3.14.0(@types/react@19.1.4)(graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(graphql@16.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 3.14.0(@types/react@19.1.4)(graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(graphql@16.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) "@ethersproject/providers": specifier: ^5.8.0 version: 5.8.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -136,7 +139,7 @@ importers: version: 1.2.8(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) "@rainbow-me/rainbowkit": specifier: ^2.2.0 - version: 2.2.9(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) + version: 2.2.9(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13)) "@snapshot-labs/snapshot.js": specifier: ^0.12.62 version: 0.12.65(bufferutil@4.0.9)(utf-8-validate@5.0.10) @@ -208,10 +211,10 @@ importers: version: 1.1.2(@types/react-dom@19.1.5(@types/react@19.1.4))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) viem: specifier: ^2.37.11 - version: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + version: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) wagmi: specifier: ^2.12.25 - version: 2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13) zustand: specifier: ^5.0.8 version: 5.0.9(@types/react@19.1.4)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) @@ -3372,6 +3375,15 @@ packages: peerDependencies: graphql: "*" + "@graphql-mesh/cross-helpers@0.4.11": + resolution: + { + integrity: sha512-p4zBxfZ4NDXKzRIpUJnH5ATkxnjDOu1X1Er5RRZhb15crotTyGwyOo/vnRe7Tyl3b9+kBewz1tBZ3g381g9uUQ==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + graphql: "*" + "@graphql-mesh/fusion-composition@0.8.21": resolution: { @@ -3462,6 +3474,15 @@ packages: peerDependencies: graphql: "*" + "@graphql-mesh/transform-filter-schema@0.104.18": + resolution: + { + integrity: sha512-sCmIMkLUOgtcI/dt9SR7Mc876ZD0F+l85x7UKVLfuwD0ztUqbaYYgdytbNH3gPa9JQ/3FMA9S1ZBtLSiRVIDbA==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + graphql: "*" + "@graphql-mesh/transform-rename@0.105.18": resolution: { @@ -3498,6 +3519,15 @@ packages: peerDependencies: graphql: "*" + "@graphql-mesh/types@0.104.18": + resolution: + { + integrity: sha512-bztJSYglXZv7greXC6cyI/j/5kt0TR0k8gV+JOGvHch5bEQZRKdN5fA3oXPwD/Ees+7zWTGN05e9xfkOT3nzUg==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + graphql: "*" + "@graphql-mesh/utils@0.104.17": resolution: { @@ -3507,6 +3537,15 @@ packages: peerDependencies: graphql: "*" + "@graphql-mesh/utils@0.104.18": + resolution: + { + integrity: sha512-iBLlzwMt+6m+aW6QUN26cOotezXlEgLcOPIorDWxtKD49J4urcQgGOGznrXMLb/dx9rVPPPKY0TR7DmTyv5fGQ==, + } + engines: { node: ">=16.0.0" } + peerDependencies: + graphql: "*" + "@graphql-tools/apollo-engine-loader@8.0.22": resolution: { @@ -17773,7 +17812,7 @@ snapshots: "@jridgewell/gen-mapping": 0.3.12 "@jridgewell/trace-mapping": 0.3.29 - "@apollo/client@3.14.0(@types/react@19.1.4)(graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(graphql@16.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": + "@apollo/client@3.14.0(@types/react@19.1.4)(graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))(graphql@16.12.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)": dependencies: "@graphql-typed-document-node/core": 3.2.0(graphql@16.12.0) "@wry/caches": 1.0.1 @@ -17790,7 +17829,7 @@ snapshots: tslib: 2.8.1 zen-observable-ts: 1.2.5 optionalDependencies: - graphql-ws: 6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + graphql-ws: 6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) transitivePeerDependencies: @@ -19025,16 +19064,16 @@ snapshots: "@babel/helper-string-parser": 7.27.1 "@babel/helper-validator-identifier": 7.28.5 - "@base-org/account@2.4.0(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)": + "@base-org/account@2.4.0(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13)": dependencies: - "@coinbase/cdp-sdk": 1.38.6(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@coinbase/cdp-sdk": 1.38.6(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@noble/hashes": 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) + ox: 0.6.9(typescript@5.9.3)(zod@4.1.13) preact: 10.24.2 - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) zustand: 5.0.3(@types/react@19.1.4)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - "@types/react" @@ -19064,11 +19103,11 @@ snapshots: - "@chromatic-com/cypress" - "@chromatic-com/playwright" - "@coinbase/cdp-sdk@1.38.6(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))": + "@coinbase/cdp-sdk@1.38.6(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))": dependencies: - "@solana-program/system": 0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - "@solana-program/token": 0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))) - "@solana/kit": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana-program/system": 0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + "@solana-program/token": 0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + "@solana/kit": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@solana/web3.js": 1.98.4(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) abitype: 1.0.6(typescript@5.9.3)(zod@3.25.76) axios: 1.13.2 @@ -19101,15 +19140,15 @@ snapshots: transitivePeerDependencies: - supports-color - "@coinbase/wallet-sdk@4.3.6(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)": + "@coinbase/wallet-sdk@4.3.6(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@noble/hashes": 1.4.0 clsx: 1.2.1 eventemitter3: 5.0.1 idb-keyval: 6.2.1 - ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) + ox: 0.6.9(typescript@5.9.3)(zod@4.1.13) preact: 10.24.2 - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) zustand: 5.0.3(@types/react@19.1.4)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - "@types/react" @@ -19940,11 +19979,11 @@ snapshots: "@floating-ui/utils@0.2.10": {} - "@gemini-wallet/core@0.3.2(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))": + "@gemini-wallet/core@0.3.2(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))": dependencies: "@metamask/rpc-errors": 7.0.2 eventemitter3: 5.0.1 - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - supports-color @@ -20373,6 +20412,12 @@ snapshots: graphql: 16.12.0 path-browserify: 1.0.1 + "@graphql-mesh/cross-helpers@0.4.11(graphql@16.12.0)": + dependencies: + "@graphql-tools/utils": 10.11.0(graphql@16.12.0) + graphql: 16.12.0 + path-browserify: 1.0.1 + "@graphql-mesh/fusion-composition@0.8.21(graphql@16.12.0)": dependencies: "@graphql-mesh/utils": 0.104.17(graphql@16.12.0) @@ -20392,7 +20437,7 @@ snapshots: - ioredis - supports-color - "@graphql-mesh/graphql@0.104.18(@types/node@24.10.1)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10)": + "@graphql-mesh/graphql@0.104.18(@types/node@20.19.25)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10)": dependencies: "@graphql-mesh/cross-helpers": 0.4.10(graphql@16.12.0) "@graphql-mesh/store": 0.104.18(graphql@16.12.0) @@ -20400,9 +20445,9 @@ snapshots: "@graphql-mesh/types": 0.104.17(graphql@16.12.0) "@graphql-mesh/utils": 0.104.17(graphql@16.12.0) "@graphql-tools/delegate": 12.0.2(graphql@16.12.0) - "@graphql-tools/federation": 4.2.6(@types/node@24.10.1)(graphql@16.12.0) + "@graphql-tools/federation": 4.2.6(@types/node@20.19.25)(graphql@16.12.0) "@graphql-tools/merge": 9.1.1(graphql@16.12.0) - "@graphql-tools/url-loader": 9.0.5(@types/node@24.10.1)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10) + "@graphql-tools/url-loader": 9.0.5(@types/node@20.19.25)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10) "@graphql-tools/utils": 10.9.1(graphql@16.12.0) "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.12.0 @@ -20534,6 +20579,20 @@ snapshots: lodash.get: 4.4.2 tslib: 2.8.1 + "@graphql-mesh/transform-filter-schema@0.104.18(graphql@16.12.0)": + dependencies: + "@graphql-mesh/types": 0.104.18(graphql@16.12.0) + "@graphql-mesh/utils": 0.104.18(graphql@16.12.0) + "@graphql-tools/delegate": 12.0.2(graphql@16.12.0) + "@graphql-tools/utils": 10.11.0(graphql@16.12.0) + "@graphql-tools/wrap": 11.1.2(graphql@16.12.0) + graphql: 16.12.0 + minimatch: 10.1.1 + tslib: 2.8.1 + transitivePeerDependencies: + - "@nats-io/nats-core" + - ioredis + "@graphql-mesh/transform-rename@0.105.18(graphql@16.12.0)": dependencies: "@graphql-mesh/types": 0.104.17(graphql@16.12.0) @@ -20605,6 +20664,21 @@ snapshots: - "@nats-io/nats-core" - ioredis + "@graphql-mesh/types@0.104.18(graphql@16.12.0)": + dependencies: + "@graphql-hive/pubsub": 2.1.1 + "@graphql-tools/batch-delegate": 10.0.8(graphql@16.12.0) + "@graphql-tools/delegate": 12.0.2(graphql@16.12.0) + "@graphql-tools/utils": 10.11.0(graphql@16.12.0) + "@graphql-typed-document-node/core": 3.2.0(graphql@16.12.0) + "@repeaterjs/repeater": 3.0.6 + "@whatwg-node/disposablestack": 0.0.6 + graphql: 16.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - "@nats-io/nats-core" + - ioredis + "@graphql-mesh/utils@0.104.17(graphql@16.12.0)": dependencies: "@envelop/instrumentation": 1.0.0 @@ -20629,6 +20703,30 @@ snapshots: - "@nats-io/nats-core" - ioredis + "@graphql-mesh/utils@0.104.18(graphql@16.12.0)": + dependencies: + "@envelop/instrumentation": 1.0.0 + "@graphql-mesh/cross-helpers": 0.4.11(graphql@16.12.0) + "@graphql-mesh/string-interpolation": 0.5.9(graphql@16.12.0) + "@graphql-mesh/types": 0.104.18(graphql@16.12.0) + "@graphql-tools/batch-delegate": 10.0.8(graphql@16.12.0) + "@graphql-tools/delegate": 12.0.2(graphql@16.12.0) + "@graphql-tools/utils": 10.11.0(graphql@16.12.0) + "@graphql-tools/wrap": 11.1.2(graphql@16.12.0) + "@whatwg-node/disposablestack": 0.0.6 + "@whatwg-node/fetch": 0.10.13 + "@whatwg-node/promise-helpers": 1.3.2 + dset: 3.1.4 + graphql: 16.12.0 + js-yaml: 4.1.1 + lodash.get: 4.4.2 + lodash.topath: 4.5.2 + tiny-lru: 11.4.5 + tslib: 2.8.1 + transitivePeerDependencies: + - "@nats-io/nats-core" + - ioredis + "@graphql-tools/apollo-engine-loader@8.0.22(graphql@16.12.0)": dependencies: "@graphql-tools/utils": 10.9.1(graphql@16.12.0) @@ -20765,7 +20863,7 @@ snapshots: transitivePeerDependencies: - "@types/node" - "@graphql-tools/executor-http@3.0.7(@types/node@24.10.1)(graphql@16.12.0)": + "@graphql-tools/executor-http@3.0.7(@types/node@20.19.25)(graphql@16.12.0)": dependencies: "@graphql-hive/signal": 2.0.0 "@graphql-tools/executor-common": 1.0.5(graphql@16.12.0) @@ -20775,7 +20873,7 @@ snapshots: "@whatwg-node/fetch": 0.10.13 "@whatwg-node/promise-helpers": 1.3.2 graphql: 16.12.0 - meros: 1.3.2(@types/node@24.10.1) + meros: 1.3.2(@types/node@20.19.25) tslib: 2.8.1 transitivePeerDependencies: - "@types/node" @@ -20824,11 +20922,11 @@ snapshots: graphql: 16.12.0 tslib: 2.8.1 - "@graphql-tools/federation@4.2.6(@types/node@24.10.1)(graphql@16.12.0)": + "@graphql-tools/federation@4.2.6(@types/node@20.19.25)(graphql@16.12.0)": dependencies: "@graphql-tools/delegate": 12.0.2(graphql@16.12.0) "@graphql-tools/executor": 1.5.0(graphql@16.12.0) - "@graphql-tools/executor-http": 3.0.7(@types/node@24.10.1)(graphql@16.12.0) + "@graphql-tools/executor-http": 3.0.7(@types/node@20.19.25)(graphql@16.12.0) "@graphql-tools/merge": 9.1.6(graphql@16.12.0) "@graphql-tools/schema": 10.0.30(graphql@16.12.0) "@graphql-tools/stitch": 10.1.6(graphql@16.12.0) @@ -21056,10 +21154,10 @@ snapshots: - uWebSockets.js - utf-8-validate - "@graphql-tools/url-loader@9.0.5(@types/node@24.10.1)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10)": + "@graphql-tools/url-loader@9.0.5(@types/node@20.19.25)(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10)": dependencies: "@graphql-tools/executor-graphql-ws": 3.1.3(bufferutil@4.0.9)(crossws@0.3.5)(graphql@16.12.0)(utf-8-validate@5.0.10) - "@graphql-tools/executor-http": 3.0.7(@types/node@24.10.1)(graphql@16.12.0) + "@graphql-tools/executor-http": 3.0.7(@types/node@20.19.25)(graphql@16.12.0) "@graphql-tools/executor-legacy-ws": 1.1.24(bufferutil@4.0.9)(graphql@16.12.0)(utf-8-validate@5.0.10) "@graphql-tools/utils": 10.11.0(graphql@16.12.0) "@graphql-tools/wrap": 11.1.2(graphql@16.12.0) @@ -21341,41 +21439,6 @@ snapshots: - supports-color - ts-node - "@jest/core@29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3))": - dependencies: - "@jest/console": 29.7.0 - "@jest/reporters": 29.7.0 - "@jest/test-result": 29.7.0 - "@jest/transform": 29.7.0 - "@jest/types": 29.6.3 - "@types/node": 20.19.25 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.9.0 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - jest-haste-map: 29.7.0 - jest-message-util: 29.7.0 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - jest-watcher: 29.7.0 - micromatch: 4.0.8 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - ts-node - "@jest/environment@29.7.0": dependencies: "@jest/fake-timers": 29.7.0 @@ -22308,7 +22371,7 @@ snapshots: "@radix-ui/rect@1.1.1": {} - "@rainbow-me/rainbowkit@2.2.9(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))": + "@rainbow-me/rainbowkit@2.2.9(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13))": dependencies: "@tanstack/react-query": 5.90.11(react@19.1.0) "@vanilla-extract/css": 1.17.3 @@ -22320,8 +22383,8 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-remove-scroll: 2.6.2(@types/react@19.1.4)(react@19.1.0) ua-parser-js: 1.0.40 - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + wagmi: 2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13) transitivePeerDependencies: - "@types/react" - babel-plugin-macros @@ -22338,24 +22401,24 @@ snapshots: - utf-8-validate - zod - "@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@reown/appkit-common@1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - "@reown/appkit-controllers@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@reown/appkit-controllers@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@reown/appkit-wallet": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) - "@walletconnect/universal-provider": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/universal-provider": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) valtio: 1.13.2(@types/react@19.1.4)(react@19.1.0) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -22384,12 +22447,12 @@ snapshots: - utf-8-validate - zod - "@reown/appkit-pay@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@reown/appkit-pay@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-utils": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@3.25.76) + "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-utils": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@4.1.13) lit: 3.3.0 valtio: 1.13.2(@types/react@19.1.4)(react@19.1.0) transitivePeerDependencies: @@ -22424,12 +22487,12 @@ snapshots: dependencies: buffer: 6.0.3 - "@reown/appkit-scaffold-ui@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@3.25.76)": + "@reown/appkit-scaffold-ui@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@4.1.13)": dependencies: - "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-utils": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@3.25.76) + "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-utils": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@4.1.13) "@reown/appkit-wallet": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: @@ -22461,10 +22524,10 @@ snapshots: - valtio - zod - "@reown/appkit-ui@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@reown/appkit-ui@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@reown/appkit-wallet": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 @@ -22496,16 +22559,16 @@ snapshots: - utf-8-validate - zod - "@reown/appkit-utils@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@3.25.76)": + "@reown/appkit-utils@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@4.1.13)": dependencies: - "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@reown/appkit-polyfills": 1.7.8 "@reown/appkit-wallet": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) "@walletconnect/logger": 2.1.2 - "@walletconnect/universal-provider": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/universal-provider": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) valtio: 1.13.2(@types/react@19.1.4)(react@19.1.0) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -22545,21 +22608,21 @@ snapshots: - typescript - utf-8-validate - "@reown/appkit@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@reown/appkit@1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-pay": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@reown/appkit-common": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-controllers": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-pay": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@reown/appkit-polyfills": 1.7.8 - "@reown/appkit-scaffold-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@3.25.76) - "@reown/appkit-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@reown/appkit-utils": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@3.25.76) + "@reown/appkit-scaffold-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@4.1.13) + "@reown/appkit-ui": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@reown/appkit-utils": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(valtio@1.13.2(@types/react@19.1.4)(react@19.1.0))(zod@4.1.13) "@reown/appkit-wallet": 1.7.8(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10) "@walletconnect/types": 2.21.0 - "@walletconnect/universal-provider": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/universal-provider": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.1.4)(react@19.1.0) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -22654,9 +22717,9 @@ snapshots: "@rushstack/eslint-patch@1.12.0": {} - "@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@safe-global/safe-apps-provider@0.18.6(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@safe-global/safe-apps-sdk": 9.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@safe-global/safe-apps-sdk": 9.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) events: 3.3.0 transitivePeerDependencies: - bufferutil @@ -22664,10 +22727,10 @@ snapshots: - utf-8-validate - zod - "@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@safe-global/safe-gateway-typescript-sdk": 3.23.1 - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - bufferutil - typescript @@ -22756,13 +22819,13 @@ snapshots: "@socket.io/component-emitter@3.1.2": {} - "@solana-program/system@0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))": + "@solana-program/system@0.8.1(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))": dependencies: - "@solana/kit": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana/kit": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - "@solana-program/token@0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)))": + "@solana-program/token@0.6.0(@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)))": dependencies: - "@solana/kit": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana/kit": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@solana/accounts@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)": dependencies: @@ -22892,7 +22955,7 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - "@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))": + "@solana/kit@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))": dependencies: "@solana/accounts": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/addresses": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -22906,11 +22969,11 @@ snapshots: "@solana/rpc": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/rpc-parsed-types": 3.0.3(typescript@5.9.3) "@solana/rpc-spec-types": 3.0.3(typescript@5.9.3) - "@solana/rpc-subscriptions": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana/rpc-subscriptions": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@solana/rpc-types": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/signers": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/sysvars": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - "@solana/transaction-confirmation": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana/transaction-confirmation": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@solana/transaction-messages": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/transactions": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) typescript: 5.9.3 @@ -22989,14 +23052,14 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - "@solana/rpc-subscriptions-channel-websocket@3.0.3(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))": + "@solana/rpc-subscriptions-channel-websocket@3.0.3(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))": dependencies: "@solana/errors": 3.0.3(typescript@5.9.3) "@solana/functional": 3.0.3(typescript@5.9.3) "@solana/rpc-subscriptions-spec": 3.0.3(typescript@5.9.3) "@solana/subscribable": 3.0.3(typescript@5.9.3) typescript: 5.9.3 - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) "@solana/rpc-subscriptions-spec@3.0.3(typescript@5.9.3)": dependencies: @@ -23006,7 +23069,7 @@ snapshots: "@solana/subscribable": 3.0.3(typescript@5.9.3) typescript: 5.9.3 - "@solana/rpc-subscriptions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))": + "@solana/rpc-subscriptions@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))": dependencies: "@solana/errors": 3.0.3(typescript@5.9.3) "@solana/fast-stable-stringify": 3.0.3(typescript@5.9.3) @@ -23014,7 +23077,7 @@ snapshots: "@solana/promises": 3.0.3(typescript@5.9.3) "@solana/rpc-spec-types": 3.0.3(typescript@5.9.3) "@solana/rpc-subscriptions-api": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - "@solana/rpc-subscriptions-channel-websocket": 3.0.3(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana/rpc-subscriptions-channel-websocket": 3.0.3(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@solana/rpc-subscriptions-spec": 3.0.3(typescript@5.9.3) "@solana/rpc-transformers": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/rpc-types": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -23099,7 +23162,7 @@ snapshots: transitivePeerDependencies: - fastestsmallesttextencoderdecoder - "@solana/transaction-confirmation@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))": + "@solana/transaction-confirmation@3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))": dependencies: "@solana/addresses": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/codecs-strings": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -23107,7 +23170,7 @@ snapshots: "@solana/keys": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/promises": 3.0.3(typescript@5.9.3) "@solana/rpc": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) - "@solana/rpc-subscriptions": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + "@solana/rpc-subscriptions": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) "@solana/rpc-types": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/transaction-messages": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) "@solana/transactions": 3.0.3(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.9.3) @@ -23934,19 +23997,19 @@ snapshots: loupe: 3.1.4 tinyrainbow: 2.0.0 - "@wagmi/connectors@6.2.0(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)": + "@wagmi/connectors@6.2.0(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13)": dependencies: - "@base-org/account": 2.4.0(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) - "@coinbase/wallet-sdk": 4.3.6(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - "@gemini-wallet/core": 0.3.2(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + "@base-org/account": 2.4.0(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13) + "@coinbase/wallet-sdk": 4.3.6(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@4.1.13) + "@gemini-wallet/core": 0.3.2(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)) "@metamask/sdk": 0.33.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) - "@safe-global/safe-apps-provider": 0.18.6(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@safe-global/safe-apps-sdk": 9.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@wagmi/core": 2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - "@walletconnect/ethereum-provider": 2.21.1(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@safe-global/safe-apps-provider": 0.18.6(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@safe-global/safe-apps-sdk": 9.1.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@wagmi/core": 2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)) + "@walletconnect/ethereum-provider": 2.21.1(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) cbw-sdk: "@coinbase/wallet-sdk@3.9.3" - porto: 0.2.35(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13)) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -23988,11 +24051,11 @@ snapshots: - ws - zod - "@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))": + "@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))": dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.9.3) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) zustand: 5.0.0(@types/react@19.1.4)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: "@tanstack/query-core": 5.90.11 @@ -24003,7 +24066,7 @@ snapshots: - react - use-sync-external-store - "@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/core@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@walletconnect/heartbeat": 1.2.2 "@walletconnect/jsonrpc-provider": 1.0.14 @@ -24017,7 +24080,7 @@ snapshots: "@walletconnect/safe-json": 1.0.2 "@walletconnect/time": 1.0.2 "@walletconnect/types": 2.21.0 - "@walletconnect/utils": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/utils": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/window-getters": 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -24047,7 +24110,7 @@ snapshots: - utf-8-validate - zod - "@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/core@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@walletconnect/heartbeat": 1.2.2 "@walletconnect/jsonrpc-provider": 1.0.14 @@ -24061,7 +24124,7 @@ snapshots: "@walletconnect/safe-json": 1.0.2 "@walletconnect/time": 1.0.2 "@walletconnect/types": 2.21.1 - "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/window-getters": 1.0.1 es-toolkit: 1.33.0 events: 3.3.0 @@ -24095,18 +24158,18 @@ snapshots: dependencies: tslib: 1.14.1 - "@walletconnect/ethereum-provider@2.21.1(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/ethereum-provider@2.21.1(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@reown/appkit": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@reown/appkit": 1.7.8(@types/react@19.1.4)(bufferutil@4.0.9)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/jsonrpc-http-connection": 1.0.8 "@walletconnect/jsonrpc-provider": 1.0.14 "@walletconnect/jsonrpc-types": 1.0.4 "@walletconnect/jsonrpc-utils": 1.0.8 "@walletconnect/keyvaluestorage": 1.1.1 - "@walletconnect/sign-client": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/sign-client": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/types": 2.21.1 - "@walletconnect/universal-provider": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/universal-provider": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) + "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) events: 3.3.0 transitivePeerDependencies: - "@azure/app-configuration" @@ -24229,16 +24292,16 @@ snapshots: dependencies: tslib: 1.14.1 - "@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/sign-client@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@walletconnect/core": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/core": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/events": 1.0.1 "@walletconnect/heartbeat": 1.2.2 "@walletconnect/jsonrpc-utils": 1.0.8 "@walletconnect/logger": 2.1.2 "@walletconnect/time": 1.0.2 "@walletconnect/types": 2.21.0 - "@walletconnect/utils": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/utils": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) events: 3.3.0 transitivePeerDependencies: - "@azure/app-configuration" @@ -24265,16 +24328,16 @@ snapshots: - utf-8-validate - zod - "@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/sign-client@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: - "@walletconnect/core": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/core": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/events": 1.0.1 "@walletconnect/heartbeat": 1.2.2 "@walletconnect/jsonrpc-utils": 1.0.8 "@walletconnect/logger": 2.1.2 "@walletconnect/time": 1.0.2 "@walletconnect/types": 2.21.1 - "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) events: 3.3.0 transitivePeerDependencies: - "@azure/app-configuration" @@ -24363,7 +24426,7 @@ snapshots: - ioredis - uploadthing - "@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/universal-provider@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@walletconnect/events": 1.0.1 "@walletconnect/jsonrpc-http-connection": 1.0.8 @@ -24372,9 +24435,9 @@ snapshots: "@walletconnect/jsonrpc-utils": 1.0.8 "@walletconnect/keyvaluestorage": 1.1.1 "@walletconnect/logger": 2.1.2 - "@walletconnect/sign-client": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/sign-client": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/types": 2.21.0 - "@walletconnect/utils": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/utils": 2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -24403,7 +24466,7 @@ snapshots: - utf-8-validate - zod - "@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/universal-provider@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@walletconnect/events": 1.0.1 "@walletconnect/jsonrpc-http-connection": 1.0.8 @@ -24412,9 +24475,9 @@ snapshots: "@walletconnect/jsonrpc-utils": 1.0.8 "@walletconnect/keyvaluestorage": 1.1.1 "@walletconnect/logger": 2.1.2 - "@walletconnect/sign-client": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/sign-client": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) "@walletconnect/types": 2.21.1 - "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + "@walletconnect/utils": 2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) es-toolkit: 1.33.0 events: 3.3.0 transitivePeerDependencies: @@ -24443,7 +24506,7 @@ snapshots: - utf-8-validate - zod - "@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/utils@2.21.0(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@noble/ciphers": 1.2.1 "@noble/curves": 1.8.1 @@ -24461,7 +24524,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -24487,7 +24550,7 @@ snapshots: - utf-8-validate - zod - "@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)": + "@walletconnect/utils@2.21.1(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)": dependencies: "@noble/ciphers": 1.2.1 "@noble/curves": 1.8.1 @@ -24505,7 +24568,7 @@ snapshots: detect-browser: 5.3.0 query-string: 7.1.3 uint8arrays: 3.1.0 - viem: 2.23.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.23.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -24703,10 +24766,10 @@ snapshots: typescript: 5.9.3 zod: 3.25.76 - abitype@1.0.8(typescript@5.9.3)(zod@3.25.76): + abitype@1.0.8(typescript@5.9.3)(zod@4.1.13): optionalDependencies: typescript: 5.9.3 - zod: 3.25.76 + zod: 4.1.13 abitype@1.1.0(typescript@5.9.3)(zod@3.22.4): optionalDependencies: @@ -24718,10 +24781,10 @@ snapshots: typescript: 5.9.3 zod: 3.25.76 - abitype@1.2.1(typescript@5.9.3)(zod@3.25.76): + abitype@1.1.0(typescript@5.9.3)(zod@4.1.13): optionalDependencies: typescript: 5.9.3 - zod: 3.25.76 + zod: 4.1.13 abitype@1.2.1(typescript@5.9.3)(zod@4.1.13): optionalDependencies: @@ -25679,21 +25742,6 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): - dependencies: - "@jest/types": 29.6.3 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - "@types/node" - - babel-plugin-macros - - supports-color - - ts-node - create-require@1.1.1: {} cross-fetch@3.2.0: @@ -26389,7 +26437,7 @@ snapshots: eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) @@ -26429,7 +26477,7 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - supports-color @@ -26444,7 +26492,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -27137,12 +27185,12 @@ snapshots: dependencies: graphql: 16.12.0 - graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: graphql: 16.12.0 optionalDependencies: crossws: 0.3.5 - ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) optional: true graphql-ws@6.0.6(crossws@0.3.5)(graphql@16.12.0)(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): @@ -27730,25 +27778,6 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): - dependencies: - "@jest/core": 29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - "@jest/test-result": 29.7.0 - "@jest/types": 29.6.3 - chalk: 4.1.2 - create-jest: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - jest-util: 29.7.0 - jest-validate: 29.7.0 - yargs: 17.7.2 - transitivePeerDependencies: - - "@types/node" - - babel-plugin-macros - - supports-color - - ts-node - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.9.3)): dependencies: "@babel/core": 7.28.0 @@ -27780,68 +27809,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): - dependencies: - "@babel/core": 7.28.0 - "@jest/test-sequencer": 29.7.0 - "@jest/types": 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - "@types/node": 20.19.25 - ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): - dependencies: - "@babel/core": 7.28.0 - "@jest/test-sequencer": 29.7.0 - "@jest/types": 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.0) - chalk: 4.1.2 - ci-info: 3.9.0 - deepmerge: 4.3.1 - glob: 7.2.3 - graceful-fs: 4.2.11 - jest-circus: 29.7.0 - jest-environment-node: 29.7.0 - jest-get-type: 29.6.3 - jest-regex-util: 29.6.3 - jest-resolve: 29.7.0 - jest-runner: 29.7.0 - jest-util: 29.7.0 - jest-validate: 29.7.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 29.7.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - "@types/node": 24.10.1 - ts-node: 10.9.2(@types/node@24.10.1)(typescript@5.9.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -28075,18 +28042,6 @@ snapshots: - supports-color - ts-node - jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)): - dependencies: - "@jest/core": 29.7.0(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - "@jest/types": 29.6.3 - import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - transitivePeerDependencies: - - "@types/node" - - babel-plugin-macros - - supports-color - - ts-node - jiti@1.21.7: {} jiti@2.4.2: {} @@ -28510,9 +28465,9 @@ snapshots: optionalDependencies: "@types/node": 20.19.25 - meros@1.3.2(@types/node@24.10.1): + meros@1.3.2(@types/node@20.19.25): optionalDependencies: - "@types/node": 24.10.1 + "@types/node": 20.19.25 mersenne-twister@1.1.0: {} @@ -28853,28 +28808,28 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.7(typescript@5.9.3)(zod@3.25.76): + ox@0.6.7(typescript@5.9.3)(zod@4.1.13): dependencies: "@adraffy/ens-normalize": 1.11.1 "@noble/curves": 1.8.1 "@noble/hashes": 1.7.1 "@scure/bip32": 1.6.2 "@scure/bip39": 1.5.4 - abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) + abitype: 1.0.8(typescript@5.9.3)(zod@4.1.13) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: - zod - ox@0.6.9(typescript@5.9.3)(zod@3.25.76): + ox@0.6.9(typescript@5.9.3)(zod@4.1.13): dependencies: "@adraffy/ens-normalize": 1.11.1 "@noble/curves": 1.9.7 "@noble/hashes": 1.8.0 "@scure/bip32": 1.7.0 "@scure/bip39": 1.6.0 - abitype: 1.2.1(typescript@5.9.3)(zod@3.25.76) + abitype: 1.2.1(typescript@5.9.3)(zod@4.1.13) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.9.3 @@ -28926,6 +28881,21 @@ snapshots: transitivePeerDependencies: - zod + ox@0.9.6(typescript@5.9.3)(zod@4.1.13): + dependencies: + "@adraffy/ens-normalize": 1.11.0 + "@noble/ciphers": 1.3.0 + "@noble/curves": 1.9.1 + "@noble/hashes": 1.8.0 + "@scure/bip32": 1.7.0 + "@scure/bip39": 1.6.0 + abitype: 1.1.0(typescript@5.9.3)(zod@4.1.13) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - zod + p-finally@1.0.0: {} p-limit@2.3.0: @@ -29255,21 +29225,21 @@ snapshots: pony-cause@2.1.11: {} - porto@0.2.35(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13)): dependencies: - "@wagmi/core": 2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + "@wagmi/core": 2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)) hono: 4.10.7 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.9.3) ox: 0.9.17(typescript@5.9.3)(zod@4.1.13) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) zod: 4.1.13 zustand: 5.0.9(@types/react@19.1.4)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: "@tanstack/react-query": 5.90.11(react@19.1.0) react: 19.1.0 typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13) transitivePeerDependencies: - "@types/react" - immer @@ -30584,26 +30554,6 @@ snapshots: esbuild: 0.25.8 jest-util: 29.7.0 - ts-jest@29.4.6(@babel/core@7.28.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)))(typescript@5.9.3): - dependencies: - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@24.10.1)(ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3)) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.7.3 - type-fest: 4.41.0 - typescript: 5.9.3 - yargs-parser: 21.1.1 - optionalDependencies: - "@babel/core": 7.28.0 - "@jest/transform": 29.7.0 - "@jest/types": 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.0) - jest-util: 29.7.0 - ts-jest@29.4.6(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(esbuild@0.25.8)(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.25)(ts-node@10.9.2(@types/node@20.19.25)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 @@ -30647,25 +30597,6 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - ts-node@10.9.2(@types/node@24.10.1)(typescript@5.9.3): - dependencies: - "@cspotcode/source-map-support": 0.8.1 - "@tsconfig/node10": 1.0.11 - "@tsconfig/node12": 1.0.11 - "@tsconfig/node14": 1.0.3 - "@tsconfig/node16": 1.0.4 - "@types/node": 24.10.1 - acorn: 8.15.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optional: true - tsconfck@3.1.6(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 @@ -31009,15 +30940,15 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - viem@2.23.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.23.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13): dependencies: "@noble/curves": 1.8.1 "@noble/hashes": 1.7.1 "@scure/bip32": 1.6.2 "@scure/bip39": 1.5.4 - abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76) + abitype: 1.0.8(typescript@5.9.3)(zod@4.1.13) isows: 1.0.6(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) - ox: 0.6.7(typescript@5.9.3)(zod@3.25.76) + ox: 0.6.7(typescript@5.9.3)(zod@4.1.13) ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.9.3 @@ -31060,6 +30991,23 @@ snapshots: - utf-8-validate - zod + viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13): + dependencies: + "@noble/curves": 1.9.1 + "@noble/hashes": 1.8.0 + "@scure/bip32": 1.7.0 + "@scure/bip39": 1.6.0 + abitype: 1.1.0(typescript@5.9.3)(zod@4.1.13) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.6(typescript@5.9.3)(zod@4.1.13) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + vite-node@1.0.2(@types/node@20.19.25)(lightningcss@1.30.2)(terser@5.44.1): dependencies: cac: 6.7.14 @@ -31181,14 +31129,14 @@ snapshots: vm-browserify@1.1.2: {} - wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76): + wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13): dependencies: "@tanstack/react-query": 5.90.11(react@19.1.0) - "@wagmi/connectors": 6.2.0(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76))(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@3.25.76) - "@wagmi/core": 2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + "@wagmi/connectors": 6.2.0(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(wagmi@2.19.5(@tanstack/query-core@5.90.11)(@tanstack/react-query@5.90.11(react@19.1.0))(@types/react@19.1.4)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13))(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10))(zod@4.1.13) + "@wagmi/core": 2.22.1(@tanstack/query-core@5.90.11)(@types/react@19.1.4)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13)) react: 19.1.0 use-sync-external-store: 1.4.0(react@19.1.0) - viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.41.2(bufferutil@4.0.9)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.1.13) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: From 571dfcdf136a6057836c28c6a924b4b989baca45 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Tue, 6 Jan 2026 17:06:02 -0300 Subject: [PATCH 8/9] chore(port-balance-query-to-rest): fix filters --- .../repositories/account-balance/listing.ts | 47 +++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/apps/indexer/src/api/repositories/account-balance/listing.ts b/apps/indexer/src/api/repositories/account-balance/listing.ts index 8051b5fe2..892ae2fc1 100644 --- a/apps/indexer/src/api/repositories/account-balance/listing.ts +++ b/apps/indexer/src/api/repositories/account-balance/listing.ts @@ -1,5 +1,16 @@ import { AmountFilter, DBAccountBalance } from "@/api/mappers"; -import { and, asc, desc, eq, gte, inArray, not, SQL, sql } from "drizzle-orm"; +import { + and, + asc, + desc, + eq, + gt, + inArray, + lt, + not, + SQL, + sql, +} from "drizzle-orm"; import { db } from "ponder:api"; import { accountBalance } from "ponder:schema"; import { Address } from "viem"; @@ -24,15 +35,19 @@ export class AccountBalanceRepository { amountfilter, ); - const baseQuery = db.select().from(accountBalance).where(filter); - + // Get total count with filters const totalCount = await db .select({ count: sql`COUNT(*)`.as("count"), }) - .from(baseQuery.as("subquery")); + .from(accountBalance) + .where(filter); - const page = await baseQuery + // Get paginated results + const page = await db + .select() + .from(accountBalance) + .where(filter) .orderBy( orderDirection === "desc" ? desc(accountBalance.balance) @@ -70,15 +85,29 @@ export class AccountBalanceRepository { if (addresses.length) { conditions.push(inArray(accountBalance.accountId, addresses)); } + if (delegates.length) { conditions.push(inArray(accountBalance.delegate, delegates)); } - if (amountfilter.minAmount) { - gte(accountBalance.balance, BigInt(amountfilter.minAmount)); + + if ( + amountfilter.minAmount !== null && + amountfilter.minAmount !== undefined + ) { + conditions.push( + gt(accountBalance.balance, BigInt(amountfilter.minAmount)), + ); } - if (amountfilter.maxAmount) { - gte(accountBalance.balance, BigInt(amountfilter.maxAmount)); + + if ( + amountfilter.maxAmount !== null && + amountfilter.maxAmount !== undefined + ) { + conditions.push( + lt(accountBalance.balance, BigInt(amountfilter.maxAmount)), + ); } + if (excludeAddresses.length) { conditions.push(not(inArray(accountBalance.accountId, excludeAddresses))); } From 927d3157f9afbc254777d3bfdee56eb7963f7966 Mon Sep 17 00:00:00 2001 From: Pedro Binotto Date: Wed, 7 Jan 2026 14:28:31 -0300 Subject: [PATCH 9/9] chore(port-balance-query-to-rest): standardize names and descriptions --- .../api/controllers/account-balance/listing.ts | 15 ++++++++------- .../src/api/mappers/account-balance/index.ts | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/indexer/src/api/controllers/account-balance/listing.ts b/apps/indexer/src/api/controllers/account-balance/listing.ts index 47904322a..86ac4a895 100644 --- a/apps/indexer/src/api/controllers/account-balance/listing.ts +++ b/apps/indexer/src/api/controllers/account-balance/listing.ts @@ -22,8 +22,8 @@ export function accountBalances( method: "get", operationId: "accountBalances", path: "/account-balances", - summary: "Get account balances", - description: "Returns account balances", + summary: "Get account balance records", + description: "Returns sorted and paginated account balance records", tags: ["account-balances"], request: { query: AccountBalancesRequestSchema, @@ -43,8 +43,8 @@ export function accountBalances( const { addresses, delegates, - balanceLessThan, - balanceGreaterThan, + toValue, + fromValue, limit, skip, orderDirection, @@ -58,8 +58,8 @@ export function accountBalances( addresses, delegates, { - minAmount: balanceGreaterThan, - maxAmount: balanceLessThan, + minAmount: fromValue, + maxAmount: toValue, }, ); @@ -75,7 +75,8 @@ export function accountBalances( operationId: "accountBalanceByAccountId", path: "/account-balances/{accountId}", summary: "Get account balance", - description: "Returns account balance", + description: + "Returns account balance information for a specific address (account)", tags: ["account-balances"], request: { params: z.object({ diff --git a/apps/indexer/src/api/mappers/account-balance/index.ts b/apps/indexer/src/api/mappers/account-balance/index.ts index f003d0efa..87a768d17 100644 --- a/apps/indexer/src/api/mappers/account-balance/index.ts +++ b/apps/indexer/src/api/mappers/account-balance/index.ts @@ -29,11 +29,11 @@ export const AccountBalancesRequestSchema = z.object({ .array(z.string().refine((addr) => isAddress(addr))) .optional() .default([]), - balanceGreaterThan: z + fromValue: z .string() .transform((val) => BigInt(val)) .optional(), - balanceLessThan: z + toValue: z .string() .transform((val) => BigInt(val)) .optional(),