@bigmi/client
Version:
Reactive primitives for Bitcoin apps.
46 lines (45 loc) • 1.43 kB
JavaScript
import { ConnectorAlreadyConnectedError } from "../errors/connectors.js";
//#region src/actions/connect.ts
async function connect(config, parameters) {
let connector;
if (typeof parameters.connector === "function") connector = config._internal.connectors.setup(parameters.connector);
else connector = parameters.connector;
if (connector.uid === config.state.current) throw new ConnectorAlreadyConnectedError();
try {
config.setState((x) => ({
...x,
status: "connecting"
}));
connector.emitter.emit("message", { type: "connecting" });
const { connector: _, ...rest } = parameters;
const data = await connector.connect(rest);
const accounts = data.accounts;
connector.emitter.off("connect", config._internal.events.connect);
connector.emitter.on("change", config._internal.events.change);
connector.emitter.on("disconnect", config._internal.events.disconnect);
await config.storage?.setItem("recentConnectorId", connector.id);
config.setState((x) => ({
...x,
connections: new Map(x.connections).set(connector.uid, {
accounts,
chainId: data.chainId,
connector
}),
current: connector.uid,
status: "connected"
}));
return {
accounts,
chainId: data.chainId
};
} catch (error) {
config.setState((x) => ({
...x,
status: x.current ? "connected" : "disconnected"
}));
throw error;
}
}
//#endregion
export { connect };
//# sourceMappingURL=connect.js.map