@sky-mavis/tanto-wagmi
Version:
112 lines • 5.07 kB
JavaScript
import {RoninWalletConnector,ConnectorEvent,requestWaypointProvider,WaypointConnector}from'@sky-mavis/tanto-connect';import {createConnector,ChainNotConfiguredError}from'@wagmi/core';import {getAddress,SwitchChainError}from'viem';function roninWallet() {
const connector = new RoninWalletConnector();
const _connect = async (params) => {
const { chainId } = await connector.connect(params?.chainId);
const accounts = await connector.getAccounts();
return {
accounts: accounts.map(getAddress),
chainId,
};
};
const _getAccounts = async () => {
const accounts = await connector.getAccounts();
return accounts.map(getAddress);
};
return createConnector(config => {
const _switchChain = async ({ chainId }) => {
const chain = config.chains.find(chain => chain.id === chainId);
if (!chain)
throw new SwitchChainError(new ChainNotConfiguredError());
try {
await connector.switchChain(chainId);
return chain;
}
catch (error) {
throw new SwitchChainError(error);
}
};
const onChainChanged = (chainId) => {
config.emitter.emit('change', { chainId });
};
const onAccountsChanged = (accounts) => {
config.emitter.emit('change', { accounts: accounts.map(getAddress) });
};
const onConnect = async (results) => {
const accounts = await _getAccounts();
config.emitter.emit('connect', { accounts, chainId: results.chainId });
};
const onDisconnect = () => {
config.storage?.removeItem('injected.connected');
config.emitter.emit('disconnect');
};
connector.on(ConnectorEvent.CONNECT, onConnect);
connector.on(ConnectorEvent.DISCONNECT, onDisconnect);
connector.on(ConnectorEvent.ACCOUNTS_CHANGED, onAccountsChanged);
connector.on(ConnectorEvent.CHAIN_CHANGED, onChainChanged);
return {
icon: connector.icon,
id: connector.id,
name: connector.name,
type: connector.type,
connect: _connect,
getAccounts: _getAccounts,
switchChain: _switchChain,
disconnect: connector.disconnect.bind(connector),
getChainId: connector.getChainId.bind(connector),
getProvider: connector.getProvider.bind(connector),
isAuthorized: connector.isAuthorized.bind(connector),
onAccountsChanged: connector.onAccountsChanged.bind(connector),
onChainChanged: connector.onChainChanged.bind(connector),
onDisconnect: connector.onDisconnect.bind(connector),
};
});
}function waypoint(params) {
const provider = requestWaypointProvider(params);
const connector = new WaypointConnector({ provider });
const _connect = async (params) => {
const { chainId } = await connector.connect(params?.chainId);
const accounts = await connector.getAccounts();
return {
accounts: accounts.map(getAddress),
chainId,
};
};
const _getAccounts = async () => {
const accounts = await connector.getAccounts();
return accounts.map(getAddress);
};
return createConnector(config => {
const onChainChanged = (chainId) => {
config.emitter.emit('change', { chainId });
};
const onAccountsChanged = (accounts) => {
config.emitter.emit('change', { accounts: accounts.map(getAddress) });
};
const onConnect = async (results) => {
const accounts = await _getAccounts();
config.emitter.emit('connect', { accounts, chainId: results.chainId });
};
const onDisconnect = () => {
config.emitter.emit('disconnect');
};
connector.on(ConnectorEvent.CONNECT, onConnect);
connector.on(ConnectorEvent.DISCONNECT, onDisconnect);
connector.on(ConnectorEvent.ACCOUNTS_CHANGED, onAccountsChanged);
connector.on(ConnectorEvent.CHAIN_CHANGED, onChainChanged);
return {
icon: connector.icon,
id: connector.id,
name: connector.name,
type: connector.type,
connect: _connect,
getAccounts: _getAccounts,
disconnect: connector.disconnect.bind(connector),
getChainId: connector.getChainId.bind(connector),
getProvider: connector.getProvider.bind(connector),
isAuthorized: connector.isAuthorized.bind(connector),
onAccountsChanged: connector.onAccountsChanged.bind(connector),
onChainChanged: connector.onChainChanged.bind(connector),
onDisconnect: connector.onDisconnect.bind(connector),
};
});
}export{roninWallet,waypoint};