@sky-mavis/tanto-widget
Version:
Tanto Widget
68 lines • 3.25 kB
JavaScript
import {requestSafeProvider}from'@sky-mavis/tanto-connect';import {UAParser}from'ua-parser-js';import {formatUnits}from'viem';import {RONIN_WALLET_WEB_LINK}from'../constants/index.mjs';import {WALLET_IDS}from'../types/wallet.mjs';const notEmpty = value => typeof value !== 'undefined' && value !== null;
const isClient = () => typeof window !== 'undefined';
const isRoninInAppBrowser = () => isClient() && !!window.isWalletApp && window.ronin !== undefined && !!window.ethereum?.isRonin;
const isSafeWallet = async () => {
try {
return !!(await requestSafeProvider());
} catch {
return false;
}
};
const getUserAgent = () => {
if (!isClient()) return undefined;
return UAParser(navigator.userAgent);
};
const detectOS = () => {
const parser = getUserAgent();
return parser?.os.name ?? '';
};
const isIOS = () => {
const os = detectOS();
return os.toLowerCase().includes('ios');
};
const isAndroid = () => {
const os = detectOS();
return os.toLowerCase().includes('android');
};
const isMobile = () => isAndroid() || isIOS();
const isDesktop = () => !isMobile();
const isInjectedConnector = connectorType => connectorType === 'injected';
const isRoninWallet = connectorId => connectorId === WALLET_IDS.RONIN_WALLET;
const isRoninWalletInjected = connectorId => connectorId === WALLET_IDS.RONIN_WALLET_INJECTED;
const isWCConnector = connectorId => connectorId === WALLET_IDS.WALLET_CONNECT;
const isWaypointConnector = connectorId => connectorId === WALLET_IDS.WAYPOINT;
const isSafeConnector = connectorId => connectorId === WALLET_IDS.SAFE;
const isCoinbaseConnector = connectorId => connectorId === WALLET_IDS.COINBASE_WALLET;
const generateRoninMobileWCLink = (uri, prefix = `${RONIN_WALLET_WEB_LINK}/`) => `${prefix}auth-connect?uri=${encodeURIComponent(uri)}`;
const isRoninExtensionInstalled = connectors => connectors.some(connector => connector.id === WALLET_IDS.RONIN_WALLET_INJECTED);
const truncate = (value, options) => {
const {
prefixChar = 8,
suffixChar = 6,
bridge = '•••'
} = {};
if (!value) return '';
if (value.length <= prefixChar + suffixChar + bridge.length) return value;
return `${value.slice(0, prefixChar)}${bridge}${value.slice(-suffixChar)}`;
};
const formatBalance = amount => {
const remainder = amount % BigInt(1e14);
return formatUnits(amount - remainder, 18);
};
const isValidURL = url => {
try {
new URL(url);
return true;
} catch {
return false;
}
};
const getReverseNode = address => {
const node = address.startsWith('0x') ? address.substring(2) : address;
return `${node.toLowerCase()}.addr.reverse`;
};
const svgToBase64 = svgText => {
const encoded = encodeURIComponent(svgText).replace(/'/g, '%27').replace(/"/g, '%22');
return `data:image/svg+xml;charset=utf-8,${encoded}`;
};
const getVersionInfo = () => `${'@sky-mavis/tanto-widget'}@${'0.0.1'}`;export{detectOS,formatBalance,generateRoninMobileWCLink,getReverseNode,getUserAgent,getVersionInfo,isAndroid,isClient,isCoinbaseConnector,isDesktop,isIOS,isInjectedConnector,isMobile,isRoninExtensionInstalled,isRoninInAppBrowser,isRoninWallet,isRoninWalletInjected,isSafeConnector,isSafeWallet,isValidURL,isWCConnector,isWaypointConnector,notEmpty,svgToBase64,truncate};