Skip to content

Provider

Utilities & types for working with EIP-1193 Providers

Examples

Below are some examples demonstrating common usages of the Provider module:

Instantiating External Providers

External EIP-1193 Providers can be instantiated with Provider.from:

import 'ox/window'
import { Provider } from 'ox'
 
const provider = Provider.from(window.ethereum)
 
const blockNumber = await provider.request({ method: 'eth_blockNumber' })

Instantiating with an RPC Transport

Ox's RpcTransport is also EIP-1193 compliant, and can be used to instantiate an EIP-1193 Provider. This means you can use any HTTP RPC endpoint as an EIP-1193 Provider.

import { Provider, RpcTransport } from 'ox'
 
const transport = RpcTransport.fromHttp('https://1.rpc.thirdweb.com')
const provider = Provider.from(transport)

Instantiating a Provider with Events

Event emitters for EIP-1193 Providers can be created using Provider.createEmitter:

Useful for Wallets that distribute an EIP-1193 Provider (e.g. webpage injection via window.ethereum).

import { Provider, RpcRequest, RpcResponse } from 'ox'
 
// 1. Instantiate a Provider Emitter.
const emitter = Provider.createEmitter()
 
const store = RpcRequest.createStore()
 
const provider = Provider.from({
  // 2. Pass the Emitter to the Provider.
  ...emitter, 
  async request(args) {
    return await fetch('https://1.rpc.thirdweb.com', {
      body: JSON.stringify(store.prepare(args)),
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
    })
      .then((res) => res.json())
      .then(RpcResponse.parse)
  },
})
 
// 3. Emit Provider Events.
emitter.emit('accountsChanged', ['0x...'])

Functions

NameDescription
Provider.createEmitterCreates an EIP-1193 flavored event emitter to be injected onto a Provider.
Provider.fromInstantiates an EIP-1193 Provider.Provider from an arbitrary EIP-1193 Provider interface.
Provider.parseErrorParses an error into a Provider error instance.

Errors

NameDescription
Provider.AtomicityNotSupportedErrorThe wallet does not support atomic execution but the request requires it.
Provider.AtomicReadyWalletRejectedUpgradeErrorThe Wallet can support atomicity after an upgrade, but the user rejected the upgrade.
Provider.BundleTooLargeErrorThe call bundle is too large for the Wallet to process.
Provider.ChainDisconnectedErrorThe provider is not connected to the requested chain.
Provider.DisconnectedErrorThe provider is disconnected from all chains.
Provider.DuplicateIdErrorThere is already a bundle submitted with this ID.
Provider.IsUndefinedErrorThrown when the provider is undefined.
Provider.ProviderRpcError
Provider.SwitchChainErrorAn error occurred when attempting to switch chain.
Provider.UnauthorizedErrorThe requested method and/or account has not been authorized by the user.
Provider.UnknownBundleIdErrorThis bundle id is unknown / has not been submitted.
Provider.UnsupportedChainIdErrorThis Wallet does not support the requested chain ID.
Provider.UnsupportedMethodErrorThe provider does not support the requested method.
Provider.UnsupportedNonOptionalCapabilityErrorThis Wallet does not support a capability that was not marked as optional.
Provider.UserRejectedRequestErrorThe user rejected the request.

Types

NameDescription
Provider.ConnectInfo
Provider.EmitterType for an EIP-1193 Provider's event emitter.
Provider.EventListenerFnType for an EIP-1193 Provider's event listener functions (on, removeListener, etc).
Provider.EventMap
Provider.Message
Provider.OptionsOptions for a Provider.Provider.
Provider.ProviderRoot type for an EIP-1193 Provider.
Provider.RequestFnEIP-1193 Provider's request function.