UNPKG

@bigmi/client

Version:

Reactive primitives for Bitcoin apps.

46 lines (45 loc) 1.84 kB
import { ConnectorAccountNotFoundError, ConnectorChainMismatchError, ConnectorNotConnectedError } from "../errors/connectors.js"; import { getAddress } from "./getAddress.js"; import { createClient, custom, parseAccount } from "@bigmi/core"; //#region src/actions/getConnectorClient.ts async function getConnectorClient(config, parameters = {}) { let connection; if (parameters.connector) { const { connector } = parameters; const [accounts, chainId] = await Promise.all([connector.getAccounts(), connector.getChainId()]); connection = { accounts, chainId, connector }; } else connection = config.state.connections.get(config.state.current); if (!connection) throw new ConnectorNotConnectedError(); const chainId = parameters.chainId ?? connection.chainId; const connectorChainId = await connection.connector.getChainId(); if (connectorChainId !== connection.chainId) throw new ConnectorChainMismatchError({ connectionChainId: connection.chainId, connectorChainId }); const connector = connection.connector; if (connector.getClient) return connector.getClient({ chainId }); const account = parseAccount(parameters.account ?? connection.accounts[0]); account.address = getAddress(account.address); const chain = config.chains.find((chain) => chain.id === chainId); const provider = await connection.connector.getProvider({ chainId }); if (parameters.account && !connection.accounts.some((x) => x.address.toLowerCase() === account.address.toLowerCase())) throw new ConnectorAccountNotFoundError({ address: account.address, connector: connector.name }); return createClient({ account, chain, name: "Connector Client", transport: (opts) => custom(provider)({ ...opts, retryCount: 0 }) }); } //#endregion export { getConnectorClient }; //# sourceMappingURL=getConnectorClient.js.map