@sky-mavis/tanto-widget
Version:
Tanto Widget
92 lines (88 loc) • 3.63 kB
JavaScript
;
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;