UNPKG

@sky-mavis/tanto-widget

Version:
92 lines (88 loc) 3.63 kB
'use strict'; var tantoWagmi = require('@sky-mavis/tanto-wagmi'); var omit = require('lodash.omit'); var chains = require('viem/chains'); var wagmi = require('wagmi'); var connectors = require('wagmi/connectors'); var index = require('./constants/index.cjs'); var index$1 = require('./utils/index.cjs'); 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: index.RONIN_WALLET_WEB_LINK } }; const DEFAULT_CHAINS = [chains.ronin, chains.saigon]; const EXCLUDED_CONFIG_KEYS = ['appName', 'appIcon', 'appDescription', 'appUrl', 'walletConnectConfig', 'keylessWalletConfig', 'chains', 'showCoinbaseWallet', 'multiInjectedProviderDiscovery']; const createTransports = chains => Object.fromEntries(chains.map(chain => [chain.id, wagmi.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 = () => tantoWagmi.roninWallet(); const createSafeConnector = () => connectors.safe(); const createWaypointConnector = config => tantoWagmi.waypoint({ source: index$1.getVersionInfo(), ...config }); const createWalletConnectConnector = (appMetadata, config) => { const { metadata = {}, ...restConfig } = config ?? {}; return connectors.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) => connectors.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 wagmi.createConfig(createConfigParameters(config)); }; exports.RONIN_WALLET_METADATA = RONIN_WALLET_METADATA; exports.createConnectors = createConnectors; exports.createTransports = createTransports; exports.getDefaultConfig = getDefaultConfig;