Skip to content

Error Handling ​

Every module in Wagmi Core exports an accompanying error type which you can use to strongly type your catch statements.

These types come in the form of <Module>ErrorType. For example, the getBlockNumber action exports a GetBlockNumberErrorType type.

Unfortunately, TypeScript doesn't have an abstraction for typed exceptions, so the most pragmatic & vanilla approach would be to explicitly cast error types in the catch statement.

tsx
import { type GetBlockNumberErrorType, getBlockNumber } from '@wagmi/core'
import { config } from './config'

try {
  const blockNumber = await getBlockNumber(config)
} catch (e) {
  const error = e as GetBlockNumberErrorType
  error.name
  //    ^? (property) name: "Error" | "ChainDisconnectedError" | "HttpRequestError" | "InternalRpcError" | "InvalidInputRpcError" | "InvalidParamsRpcError" | "InvalidRequestRpcError" | "JsonRpcVersionUnsupportedError" | ... 16 more ... | "WebSocketRequestError"

  if (error.name === 'InternalRpcError')
    error.code
    //    ^? (property) code: -32603

  if (error.name === 'HttpRequestError')
    error.headers
    //    ^? (property) headers: Headers
    error.status
    //    ^? (property) status: number
}
import { type GetBlockNumberErrorType, getBlockNumber } from '@wagmi/core'
import { config } from './config'

try {
  const blockNumber = await getBlockNumber(config)
} catch (e) {
  const error = e as GetBlockNumberErrorType
  error.name
  //    ^? (property) name: "Error" | "ChainDisconnectedError" | "HttpRequestError" | "InternalRpcError" | "InvalidInputRpcError" | "InvalidParamsRpcError" | "InvalidRequestRpcError" | "JsonRpcVersionUnsupportedError" | ... 16 more ... | "WebSocketRequestError"

  if (error.name === 'InternalRpcError')
    error.code
    //    ^? (property) code: -32603

  if (error.name === 'HttpRequestError')
    error.headers
    //    ^? (property) headers: Headers
    error.status
    //    ^? (property) status: number
}
ts
import { http, createConfig } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'

export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})
import { http, createConfig } from '@wagmi/core'
import { mainnet, sepolia } from '@wagmi/core/chains'

export const config = createConfig({
  chains: [mainnet, sepolia],
  transports: {
    [mainnet.id]: http(),
    [sepolia.id]: http(),
  },
})

TIP

If you are using Wagmi Hooks, errors are already strongly typed via the error property.

Released under the MIT License.