@cranberry-money/shared-utils
Version:
Shared utility functions for Blueberry platform
34 lines • 1.52 kB
JavaScript
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