@bigmi/client
Version:
Reactive primitives for Bitcoin apps.
58 lines • 2.24 kB
JavaScript
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