diff --git a/src/server/routes/contract/events/get-all-events.ts b/src/server/routes/contract/events/get-all-events.ts index f0df96e84..c108cf09b 100644 --- a/src/server/routes/contract/events/get-all-events.ts +++ b/src/server/routes/contract/events/get-all-events.ts @@ -13,8 +13,12 @@ import { thirdwebClient } from "../../../../shared/utils/sdk"; import { getChain } from "../../../../shared/utils/chain"; import { getChainIdFromChain } from "../../../utils/chain"; import { getContract, getContractEvents } from "thirdweb"; -import { maybeBigInt } from "../../../../shared/utils/primitive-types"; -import { toContractEventV4Schema } from "../../../schemas/event"; +import { + type ContractEventV5, + toContractEventV4Schema, +} from "../../../schemas/event"; +import { createCustomError } from "../../../middleware/error"; +import { prettifyError } from "../../../../shared/utils/error"; const requestSchema = contractParamSchema; @@ -93,11 +97,21 @@ export async function getAllEvents(fastify: FastifyInstance) { chain: await getChain(chainId), }); - const eventsV5 = await getContractEvents({ - contract: contract, - fromBlock: maybeBigInt(fromBlock?.toString()), - toBlock: maybeBigInt(toBlock?.toString()), - }); + let eventsV5: ContractEventV5[]; + try { + eventsV5 = await getContractEvents({ + contract: contract, + fromBlock: + typeof fromBlock === "number" ? BigInt(fromBlock) : fromBlock, + toBlock: typeof toBlock === "number" ? BigInt(toBlock) : toBlock, + }); + } catch (e) { + throw createCustomError( + `Failed to get events: ${prettifyError(e)}`, + StatusCodes.BAD_REQUEST, + "BAD_REQUEST", + ); + } reply.status(StatusCodes.OK).send({ result: eventsV5.map(toContractEventV4Schema).sort((a, b) => { diff --git a/src/server/schemas/contract/index.ts b/src/server/schemas/contract/index.ts index d6abd42eb..dea203627 100644 --- a/src/server/schemas/contract/index.ts +++ b/src/server/schemas/contract/index.ts @@ -79,18 +79,25 @@ export const rolesResponseSchema = Type.Object({ signer: Type.Array(Type.String()), }); +export const blockNumberOrTagSchema = Type.Union([ + Type.Integer({ minimum: 0 }), + Type.Literal("latest"), + Type.Literal("earliest"), + Type.Literal("pending"), + Type.Literal("safe"), + Type.Literal("finalized"), +]); + export const eventsQuerystringSchema = Type.Object( { - fromBlock: Type.Optional( - Type.Union([Type.Integer({ minimum: 0 }), Type.String()], { - default: "0", - }), - ), - toBlock: Type.Optional( - Type.Union([Type.Integer({ minimum: 0 }), Type.String()], { - default: "latest", - }), - ), + fromBlock: Type.Optional({ + ...blockNumberOrTagSchema, + default: "0", + }), + toBlock: Type.Optional({ + ...blockNumberOrTagSchema, + default: "latest", + }), order: Type.Optional( Type.Union([Type.Literal("asc"), Type.Literal("desc")], { default: "desc", diff --git a/src/shared/utils/transaction/insert-transaction.ts b/src/shared/utils/transaction/insert-transaction.ts index 5e9da7d8a..7b529b3c8 100644 --- a/src/shared/utils/transaction/insert-transaction.ts +++ b/src/shared/utils/transaction/insert-transaction.ts @@ -7,7 +7,6 @@ import { WalletDetailsError, type ParsedWalletDetails, } from "../../../shared/db/wallets/get-wallet-details"; -import { doesChainSupportService } from "../../lib/chain/chain-capabilities"; import { createCustomError } from "../../../server/middleware/error"; import { SendTransactionQueue } from "../../../worker/queues/send-transaction-queue"; import { getChecksumAddress } from "../primitive-types";