UNPKG

@sky-mavis/tanto-widget

Version:
84 lines 3.72 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,walletConnect,coinbaseWallet}from'wagmi/connectors';import {RONIN_WALLET_WEB_LINK}from'./constants.mjs';import {getVersionInfo}from'./utils/common.mjs';import {TantoWidgetError,TantoWidgetErrorCodes}from'./utils/errors.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']; function createTransports(chains) { return Object.fromEntries(chains.map(chain => [chain.id, http()])); } function 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(); function createWaypointConnector(config) { return waypoint({ source: getVersionInfo(), ...config }); } function 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 }); } function createCoinbaseConnector(appMetadata, config) { return coinbaseWallet({ appName: config?.appName ?? appMetadata.appName, ...config }); } function createConnectors(config) { const appMetadata = createAppMetadata(config.appMetadata); const connectors = [createRoninConnector(), createSafeConnector()]; const { keylessWalletConfig, walletConnectConfig, coinbaseWalletConfig } = config; if (keylessWalletConfig && keylessWalletConfig?.enable !== false && keylessWalletConfig?.clientId) 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; } function 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) }; } function getDefaultConfig(config = {}) { if (config.keylessWalletConfig && config.keylessWalletConfig?.enable !== false && !config.keylessWalletConfig?.clientId) { throw new TantoWidgetError(TantoWidgetErrorCodes.KEYLESS_WALLET_CONFIG_MISSING_CLIENT_ID, 'KeylessWalletConfig requires a clientId when enabled'); } return createConfig(createConfigParameters(config)); }export{RONIN_WALLET_METADATA,createConnectors,createTransports,getDefaultConfig};