@sky-mavis/tanto-widget
Version:
Tanto Widget
76 lines • 3.45 kB
JavaScript
import {roninWallet,waypoint}from'@sky-mavis/tanto-wagmi';import omit from'lodash.omit';import {ronin,saigon}from'viem/chains';import {http,createConfig}from'wagmi';import {safe,coinbaseWallet,walletConnect}from'wagmi/connectors';import {RONIN_WALLET_WEB_LINK}from'./constants/index.mjs';import {getVersionInfo}from'./utils/index.mjs';const RONIN_WALLET_METADATA = {
projectId: 'd2ef97836db7eb390bcb2c1e9847ecdc',
metadata: {
name: 'Ronin Wallet',
description: 'Your passport into a digital nation',
icons: ['https://cdn.skymavis.com/wallet/web-app/logo/ronin.png'],
url: RONIN_WALLET_WEB_LINK
}
};
const DEFAULT_CHAINS = [ronin, saigon];
const EXCLUDED_CONFIG_KEYS = ['appName', 'appIcon', 'appDescription', 'appUrl', 'walletConnectConfig', 'keylessWalletConfig', 'chains', 'showCoinbaseWallet', 'multiInjectedProviderDiscovery'];
const createTransports = chains => Object.fromEntries(chains.map(chain => [chain.id, http()]));
const createAppMetadata = appMetadata => {
const defaults = RONIN_WALLET_METADATA.metadata;
return {
appName: appMetadata?.appName ?? defaults.name,
appIcon: appMetadata?.appIcon ?? defaults.icons[0],
appDescription: appMetadata?.appDescription ?? defaults.description,
appUrl: appMetadata?.appUrl ?? defaults.url
};
};
const createRoninConnector = () => roninWallet();
const createSafeConnector = () => safe();
const createWaypointConnector = config => waypoint({
source: getVersionInfo(),
...config
});
const createWalletConnectConnector = (appMetadata, config) => {
const {
metadata = {},
...restConfig
} = config ?? {};
return walletConnect({
projectId: config?.projectId ?? RONIN_WALLET_METADATA.projectId,
showQrModal: false,
metadata: {
name: appMetadata.appName,
description: appMetadata.appDescription,
url: appMetadata.appUrl,
icons: [appMetadata.appIcon],
...metadata
},
...restConfig
});
};
const createCoinbaseConnector = (appMetadata, config) => coinbaseWallet({
appName: config?.appName ?? appMetadata.appName,
...config
});
const createConnectors = config => {
const appMetadata = createAppMetadata(config.appMetadata);
const connectors = [createRoninConnector(), createSafeConnector()];
const {
keylessWalletConfig,
walletConnectConfig,
coinbaseWalletConfig
} = config;
if (keylessWalletConfig?.enable !== false) connectors.push(createWaypointConnector(omit(keylessWalletConfig, 'enable')));
if (walletConnectConfig?.enable !== false) connectors.push(createWalletConnectConnector(appMetadata, omit(walletConnectConfig, 'enable')));
if (coinbaseWalletConfig?.enable) connectors.push(createCoinbaseConnector(appMetadata, omit(coinbaseWalletConfig, 'enable')));
return connectors;
};
const createConfigParameters = config => {
const chains = config.chains ?? DEFAULT_CHAINS;
return {
chains,
transports: createTransports(chains),
connectors: createConnectors(config),
multiInjectedProviderDiscovery: config.multiInjectedProviderDiscovery ?? true,
...omit(config, EXCLUDED_CONFIG_KEYS)
};
};
const getDefaultConfig = (config = {}) => {
if (config.keylessWalletConfig?.enable !== false && !config.keylessWalletConfig?.clientId) throw new Error('KeylessWalletConfig requires a clientId when enabled');
return createConfig(createConfigParameters(config));
};export{RONIN_WALLET_METADATA,createConnectors,createTransports,getDefaultConfig};