UNPKG

@sky-mavis/tanto-widget

Version:
76 lines 3.45 kB
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};