Skip to main content
Modify network properties (like RPC URLs) before they’re used by the SDK. Set once during initialization, applies to all operations.

Installation

npm install @dynamic-labs-sdk/client

Basic Usage

import { createDynamicClient } from '@dynamic-labs-sdk/client';

const client = createDynamicClient({
  environmentId: 'YOUR_ENVIRONMENT_ID',
  transformers: {
    networkData: (network) => {
      if (network.networkId === '1') {
        return {
          ...network,
          rpcUrls: {
            http: ['https://eth-mainnet.g.alchemy.com/v2/YOUR-KEY'],
          },
        };
      }
      return network;
    },
  },
});

Examples

Override multiple networks:
const RPC_URLS = {
  '1': 'https://eth-mainnet.g.alchemy.com/v2/KEY',
  '137': 'https://polygon-mainnet.g.alchemy.com/v2/KEY',
};

transformers: {
  networkData: (network) => {
    const url = RPC_URLS[network.networkId];
    return url ? { ...network, rpcUrls: { http: [url] } } : network;
  },
}
Add fallback URLs:
transformers: {
  networkData: (network) => ({
    ...network,
    rpcUrls: {
      http: ['https://primary-rpc.com', ...network.rpcUrls.http],
    },
  }),
}
Environment-based:
const getRpcUrl = (network) => {
  if (process.env.NODE_ENV === 'development') return 'http://localhost:8545';
  if (process.env.NODE_ENV === 'staging') return 'https://sepolia-rpc.com';
  return network.rpcUrls.http[0];
};

Network IDs

EVM networks use chain IDs: '1' (Ethereum), '137' (Polygon), '8453' (Base), '42161' (Arbitrum), '10' (Optimism)

Rules

  • Always return valid NetworkData structure
  • Use environment variables for API keys
  • Keep transformers synchronous (no async/await)
  • Transformers are called once during initialization