import type { AddEthereumChainParameter, Address, Chain, Client, ProviderConnectInfo, ProviderMessage, } from 'viem' import type { Transport } from '../createConfig.js' import type { Emitter } from '../createEmitter.js' import type { Storage } from '../createStorage.js' import type { Compute, ExactPartial, StrictOmit } from '../types/utils.js' export type ConnectorEventMap = { change: { accounts?: readonly Address[] | undefined chainId?: number | undefined } connect: { accounts: readonly Address[]; chainId: number } disconnect: never error: { error: Error } message: { type: string; data?: unknown | undefined } } export type CreateConnectorFn< provider = unknown, properties extends Record = Record, storageItem extends Record = Record, > = (config: { chains: readonly [Chain, ...Chain[]] emitter: Emitter storage?: Compute> | null | undefined transports?: Record | undefined }) => Compute< { readonly icon?: string | undefined readonly id: string readonly name: string readonly rdns?: string | readonly string[] | undefined readonly type: string setup?(): Promise // TODO(v3): Make `withCapabilities: true` default behavior connect( parameters?: | { chainId?: number | undefined isReconnecting?: boolean | undefined withCapabilities?: withCapabilities | boolean | undefined } | undefined, ): Promise<{ // TODO(v3): Add `capabilities` (e.g. `readonly { address: Address; capabilities: Record | undefined }`) accounts: withCapabilities extends true ? readonly { address: Address; capabilities: Record }[] : readonly Address[] chainId: number }> disconnect(): Promise getAccounts(): Promise getChainId(): Promise getProvider( parameters?: { chainId?: number | undefined } | undefined, ): Promise getClient?( parameters?: { chainId?: number | undefined } | undefined, ): Promise isAuthorized(): Promise switchChain?( parameters: Compute<{ addEthereumChainParameter?: | ExactPartial> | undefined chainId: number }>, ): Promise onAccountsChanged(accounts: string[]): void onChainChanged(chainId: string): void onConnect?(connectInfo: ProviderConnectInfo): void onDisconnect(error?: Error | undefined): void onMessage?(message: ProviderMessage): void } & properties > export function createConnector< provider, properties extends Record = Record, storageItem extends Record = Record, /// createConnectorFn extends CreateConnectorFn< provider, properties, storageItem > = CreateConnectorFn, >(createConnectorFn: createConnectorFn) { return createConnectorFn }