import { createClient, type Client, type ClientConfig, type PublicRpcSchema, type Transport, } from 'viem' import { addPnsContracts } from '../contracts/addPnsContracts.js' import type { ChainWithBaseContracts, ChainWithPns, } from '../contracts/consts.js' import type { Prettify } from '../types.js' import { pnsSubgraphActions, type PnsSubgraphActions, } from './decorators/subgraph.js' export type PnsSubgraphClientConfig< TTransport extends Transport = Transport, TChain extends ChainWithBaseContracts = ChainWithBaseContracts, > = Pick< ClientConfig, 'batch' | 'key' | 'name' | 'pollingInterval' | 'transport' > & { chain: TChain } export type PnsSubgraphClient< TTransport extends Transport = Transport, TChain extends ChainWithPns = ChainWithPns, > = Prettify< Client > /** * Creates a PNS 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 PnsSubgraphClientConfig} * @returns An PNS Subgraph Client. {@link PnsSubgraphClient} * * @example * import { http } from 'viem' * import { mainnet } from 'viem/chains' * import { createPnsSubgraphClient } from '@pnsdomains/pnsjs' * * const client = createPnsSubgraphClient({ * chain: mainnet, * transport: http(), * }) */ export const createPnsSubgraphClient = < TTransport extends Transport, TChain extends ChainWithBaseContracts, >({ batch, chain, key = 'pnsSubgraph', name = 'PNS Subgraph Client', transport, pollingInterval, }: PnsSubgraphClientConfig): PnsSubgraphClient< TTransport, ChainWithPns > => { return createClient({ batch, chain: addPnsContracts(chain), key, name, pollingInterval, transport, type: 'pnsSubgraphClient', }).extend(pnsSubgraphActions) }