@sky-mavis/tanto-widget
Version:
Tanto Widget
84 lines • 3.72 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,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};