UNPKG

@cranberry-money/shared-utils

Version:

Shared utility functions for Blueberry platform

34 lines 1.52 kB
const WALLET_ADDRESS_PATTERNS = { ETHEREUM: /^0x[a-fA-F0-9]{40}$/, BITCOIN: /^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$|^bc1[a-z0-9]{39,59}$/, }; const isValidEthereumAddress = (address) => WALLET_ADDRESS_PATTERNS.ETHEREUM.test(address); const isValidBitcoinAddress = (address) => WALLET_ADDRESS_PATTERNS.BITCOIN.test(address); export const validateWalletAddress = (address, chainType) => { const chain = chainType.toLowerCase(); if (['ethereum', 'eth', 'polygon', 'matic', 'arbitrum', 'optimism', 'base'].includes(chain)) return isValidEthereumAddress(address); if (['bitcoin', 'btc'].includes(chain)) return isValidBitcoinAddress(address); return false; }; export const detectChainFromAddress = (address) => { if (!address || typeof address !== 'string') return null; const trimmed = address.trim(); if (isValidEthereumAddress(trimmed)) return 'ETH'; if (isValidBitcoinAddress(trimmed)) return 'BTC'; return null; }; const formatWalletAddress = (address, maxLength = 16) => { if (address.length <= maxLength) return address; const prefixLength = Math.floor(maxLength / 2) - 2; const suffixLength = maxLength - prefixLength - 3; return `${address.slice(0, prefixLength)}...${address.slice(-suffixLength)}`; }; export const formatWalletAddressShort = (address) => formatWalletAddress(address, 12); export const formatWalletAddressMedium = (address) => formatWalletAddress(address, 16); //# sourceMappingURL=wallets.js.map