@bigmi/client
Version:
Reactive primitives for Bitcoin apps.
46 lines (45 loc) • 1.84 kB
JavaScript
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