import { type Client, type ClientConfig, type PublicRpcSchema, type Transport, createClient, } from 'viem' import { addEnsContracts } from '../contracts/addEnsContracts.js' import type { ChainWithBaseContracts, ChainWithEns, } from '../contracts/consts.js' import type { Prettify } from '../types.js' import { type EnsSubgraphActions, ensSubgraphActions, } from './decorators/subgraph.js' export type EnsSubgraphClientConfig< TTransport extends Transport = Transport, TChain extends ChainWithBaseContracts = ChainWithBaseContracts, > = Pick< ClientConfig, 'batch' | 'key' | 'name' | 'pollingInterval' | 'transport' > & { chain: TChain } export type EnsSubgraphClient< TTransport extends Transport = Transport, TChain extends ChainWithEns = ChainWithEns, > = Prettify< Client > /** * Creates a ENS Subgraph Client with a given [Transport](https://viem.sh/docs/clients/intro.html) configured for a [Chain](https://viem.sh/docs/clients/chains.html). * * @param config - {@link EnsSubgraphClientConfig} * @returns An ENS Subgraph Client. {@link EnsSubgraphClient} * * @example * import { http } from 'viem' * import { mainnet } from 'viem/chains' * import { createEnsSubgraphClient } from '@etn-sc/ensjs' * * const client = createEnsSubgraphClient({ * chain: mainnet, * transport: http(), * }) */ export const createEnsSubgraphClient = < TTransport extends Transport, TChain extends ChainWithBaseContracts, >({ batch, chain, key = 'ensSubgraph', name = 'ENS Subgraph Client', transport, pollingInterval, }: EnsSubgraphClientConfig): EnsSubgraphClient< TTransport, ChainWithEns > => { return createClient({ batch, chain: addEnsContracts(chain), key, name, pollingInterval, transport, type: 'ensSubgraphClient', }).extend(ensSubgraphActions) }