fetch 
Plugin for fetching and parsing ABIs from network resource with fetch.
Import 
ts
import { fetch } from '@wagmi/cli/plugins'Usage 
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
export default defineConfig({
  plugins: [
    fetch({
      contracts: [
        {
          name: 'Wagmigotchi',
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
        },
      ],
      request(contract) {
        if (!contract.address) throw new Error('address is required')
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0]
        return {
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`,
        }
      },
    }),
  ],
})Configuration 
ts
import { type FetchConfig } from '@wagmi/cli/plugins'cacheDuration 
number | undefined
- Duration in milliseconds to cache ABIs.
- Defaults to 1_800_000(30 minutes).
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
export default defineConfig({
  plugins: [
    fetch({
      cacheDuration: 300_000, 
      contracts: [
        {
          name: 'Wagmigotchi',
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
        },
      ],
      request(contract) {
        if (!contract.address) throw new Error('address is required')
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0]
        return {
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`,
        }
      },
    }),
  ],
})contracts 
{ name: string; address?: Address | Record<number, Address> | undefined }[]
Contracts to fetch ABIs for.
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
export default defineConfig({
  plugins: [
    fetch({
      contracts: [ 
        { 
          name: 'Wagmigotchi', 
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1', 
        }, 
      ], 
      request(contract) {
        if (!contract.address) throw new Error('address is required')
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0]
        return {
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`,
        }
      },
    }),
  ],
})getCacheKey 
((config: { contract: { address: Address | Record<chainId, Address> | undefined; name: string } }) => string) | undefined
- Function for creating a cache key for contract. Contract data is cached at ~/.wagmi-cli/plugins/fetch/cache/.
- Defaults to ({ contract }) => JSON.stringify(contract).
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
export default defineConfig({
  plugins: [
    fetch({
      contracts: [
        {
          name: 'wagmigotchi',
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
        },
      ],
      getCacheKey({ contract }) { 
        if (typeof contract.address === 'string') 
          return `${name}:${contract.address}`
        return `${name}:${JSON.stringify(contract.address)}`
      }, 
      request(contract) {
        if (!contract.address) throw new Error('address is required')
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0]
        return {
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`,
        }
      },
    }),
  ],
})name 
string
- Name of source.
- Defaults to 'Fetch'.
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
export default defineConfig({
  plugins: [
    fetch({
      contracts: [
        {
          name: 'Wagmigotchi',
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
        },
      ],
      name: 'Etherscan', 
      request(contract) {
        if (!contract.address) throw new Error('address is required')
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0]
        return {
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`,
        }
      },
    }),
  ],
})parse 
((config: { response: Response }) => Abi | Promise<Abi>) | undefined
- Function for parsing ABI from fetch response.
- Defaults to ({ response }) => response.json()
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
 
export default defineConfig({
  plugins: [
    fetch({
      contracts: [
        {
          name: 'Wagmigotchi',
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
        },
      ],
      async parse({ response }) { 
        const json = await response.json()
        if (json.status === '0') throw new Error(json.message) 
        return json.result
      }, 
      request(contract) {
        if (!contract.address) throw new Error('address is required')
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0]
        return {
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`,
        }
      },
    }),
  ],
})request 
(config: { address?: Address | Record<chainId, Address> | undefined }) => { url: RequestInfo; init?: RequestInit | undefined } | Promise<{ url: RequestInfo; init?: RequestInit | undefined }>
Function for returning a request to fetch ABI from.
ts
import { defineConfig } from '@wagmi/cli'
import { fetch } from '@wagmi/cli/plugins'
export default defineConfig({
  plugins: [
    fetch({
      contracts: [
        {
          name: 'Wagmigotchi',
          address: '0xecb504d39723b0be0e3a9aa33d646642d1051ee1',
        },
      ],
      request(contract) { 
        if (!contract.address) throw new Error('address is required') 
        const address =
          typeof contract.address === 'string'
            ? contract.address
            : Object.values(contract.address)[0] 
        return { 
          url: `https://api.etherscan.io/api?module=contract&action=getabi&address=${address}`, 
        } 
      }, 
    }),
  ],
})