UNPKG

@bigmi/client

Version:

Reactive primitives for Bitcoin apps.

58 lines 2.24 kB
import { ConnectorAccountNotFoundError, createClient, custom, parseAccount, } from '@bigmi/core'; import { ConnectorChainMismatchError, ConnectorNotConnectedError, } from '@bigmi/core'; import { getAddress } from './getAddress.js'; export async function getConnectorClient(config, parameters = {}) { // Get connection let connection; if (parameters.connector) { const { connector } = parameters; const [accounts, chainId] = await Promise.all([ connector.getAccounts(), connector.getChainId(), ]); connection = { accounts: accounts, chainId, connector, }; } else { connection = config.state.connections.get(config.state.current); } if (!connection) { throw new ConnectorNotConnectedError(); } const chainId = parameters.chainId ?? connection.chainId; // Check connector using same chainId as connection 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 }); } // Default using `custom` transport 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 account was provided, check that it exists on the connector if (parameters.account && !connection.accounts.some((x) => x.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 }), }); } //# sourceMappingURL=getConnectorClient.js.map