UNPKG

@sky-mavis/tanto-widget

Version:
68 lines 3.25 kB
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};