UNPKG

@sky-mavis/tanto-widget

Version:
101 lines (97 loc) 3.89 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 constants = require('./constants.cjs'); var common = require('./utils/common.cjs'); var errors = require('./utils/errors.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: constants.RONIN_WALLET_WEB_LINK } }; const DEFAULT_CHAINS = [chains.ronin, chains.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, wagmi.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 = () => tantoWagmi.roninWallet(); const createSafeConnector = () => connectors.safe(); function createWaypointConnector(config) { return tantoWagmi.waypoint({ source: common.getVersionInfo(), ...config }); } function 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 }); } function createCoinbaseConnector(appMetadata, config) { return connectors.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 errors.TantoWidgetError(errors.TantoWidgetErrorCodes.KEYLESS_WALLET_CONFIG_MISSING_CLIENT_ID, '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;