clawcash 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/key-manager.ts","../src/core/mnemonic.ts","../src/chains/base.ts","../src/chains/evm/ethereum.ts","../src/chains/bitcoin/bitcoin.ts","../src/core/wallet.ts","../src/trading/exchanges/base.ts","../src/trading/exchanges/binance.ts","../src/trading/trading-manager.ts","../src/balance/balance-manager.ts","../src/tokens/registry.ts","../src/api/wallet-api.ts","../src/api/payment-api.ts"],"names":["CHAIN_IDS"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Key management for ClawCash wallet\n * Handles BIP-32/BIP-44 key derivation for multiple chains\n */\n\nimport { HDNodeWallet } from 'ethers';\nimport type { Chain } from './types.js';\n\n/**\n * BIP-44 derivation paths for supported chains (without m/ prefix)\n */\nconst DERIVATION_PATHS: Record<Chain, string> = {\n // Ethereum and EVM-compatible chains use the same path\n ethereum: \"44'/60'/0'/0/0\",\n polygon: \"44'/60'/0'/0/0\",\n bsc: \"44'/60'/0'/0/0\",\n arbitrum: \"44'/60'/0'/0/0\",\n // Bitcoin\n bitcoin: \"44'/0'/0'/0/0\",\n};\n\n/**\n * Key manager for handling private key derivation\n */\nexport class KeyManager {\n private mnemonic: string;\n private derivedKeys: Map<Chain, string> = new Map();\n\n /**\n * Create a new KeyManager from a mnemonic\n * @param mnemonic - BIP39 mnemonic phrase\n */\n constructor(mnemonic: string) {\n this.mnemonic = mnemonic;\n }\n\n /**\n * Derive a private key for a specific chain\n * @param chain - The blockchain network\n * @returns The derived private key (never exposed in API)\n */\n derivePrivateKey(chain: Chain): string {\n // Check if already derived\n if (this.derivedKeys.has(chain)) {\n return this.derivedKeys.get(chain)!;\n }\n\n // Get derivation path for chain\n const path = DERIVATION_PATHS[chain];\n\n // Derive the key using full path from mnemonic\n const wallet = HDNodeWallet.fromPhrase(this.mnemonic, '', 'm/' + path);\n const privateKey = wallet.privateKey;\n\n // Cache the derived key\n this.derivedKeys.set(chain, privateKey);\n\n return privateKey;\n }\n\n /**\n * Get the master mnemonic\n * @returns The mnemonic phrase (handle with care!)\n */\n getMnemonic(): string {\n return this.mnemonic;\n }\n\n /**\n * Export all derived private keys (for backup only)\n * @returns Record of chain to private key\n */\n exportPrivateKeys(): Record<Chain, string> {\n const result: Partial<Record<Chain, string>> = {};\n for (const chain of Object.keys(DERIVATION_PATHS) as Chain[]) {\n result[chain] = this.derivePrivateKey(chain);\n }\n return result as Record<Chain, string>;\n }\n\n /**\n * Clear all derived keys from memory\n */\n clear(): void {\n this.derivedKeys.clear();\n }\n\n /**\n * Get the extended public key (xpub) for the wallet\n * @returns The extended public key\n */\n getExtendedPublicKey(): string {\n const wallet = HDNodeWallet.fromPhrase(this.mnemonic);\n return wallet.extendedKey;\n }\n}\n","/**\n * BIP39 Mnemonic generation and validation\n * Uses ethers.js which has built-in BIP39 support\n */\n\nimport { Mnemonic } from 'ethers';\n\n/**\n * Generate a new BIP39 mnemonic phrase\n * @returns 12 word mnemonic phrase\n */\nexport function generateMnemonic(): string {\n // Generate 16 bytes of entropy for 12 words\n const array = new Uint8Array(16);\n crypto.getRandomValues(array);\n return Mnemonic.fromEntropy(array).phrase;\n}\n\n/**\n * Validate a mnemonic phrase\n * @param mnemonic - The mnemonic phrase to validate\n * @returns True if valid\n */\nexport function validateMnemonic(mnemonic: string): boolean {\n try {\n Mnemonic.fromPhrase(mnemonic);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the entropy from a mnemonic (for backup/encryption)\n * @param mnemonic - The mnemonic phrase\n * @returns The entropy as a hex string\n */\nexport function mnemonicToEntropy(mnemonic: string): string {\n return Mnemonic.fromPhrase(mnemonic).entropy;\n}\n\n/**\n * Create mnemonic from entropy\n * @param entropy - The entropy hex string\n * @returns The mnemonic phrase\n */\nexport function entropyToMnemonic(entropy: string): string {\n return Mnemonic.fromEntropy(entropy).phrase;\n}\n","/**\n * Base chain interface for all blockchain implementations\n */\n\nimport type { Chain, Balance, PaymentParams, FeeEstimate } from '../core/types.js';\n\n/**\n * Abstract base class for all chain implementations\n */\nexport abstract class BaseChain {\n /** Chain identifier */\n public readonly chainId: string;\n\n /** Chain name */\n public readonly name: string;\n\n /** RPC URL */\n protected rpcUrl: string;\n\n /** Block explorer URL */\n protected explorerUrl: string;\n\n constructor(\n chainId: string,\n name: string,\n rpcUrl: string,\n explorerUrl: string\n ) {\n this.chainId = chainId;\n this.name = name;\n this.rpcUrl = rpcUrl;\n this.explorerUrl = explorerUrl;\n }\n\n /**\n * Connect to the chain (establish provider connection)\n */\n abstract connect(): Promise<void>;\n\n /**\n * Disconnect from the chain\n */\n abstract disconnect(): void;\n\n /**\n * Get the wallet address for this chain\n */\n abstract getAddress(): string;\n\n /**\n * Validate an address format for this chain\n * @param address - The address to validate\n */\n abstract validateAddress(address: string): boolean;\n\n /**\n * Get balance for native or token\n * @param tokenAddress - Optional token address (undefined for native)\n */\n abstract getBalance(tokenAddress?: string): Promise<Balance>;\n\n /**\n * Estimate transaction fee\n * @param params - Payment parameters\n */\n abstract estimateFee(params: PaymentParams): Promise<FeeEstimate>;\n\n /**\n * Send a transaction\n * @param params - Payment parameters\n */\n abstract sendTransaction(params: PaymentParams): Promise<string>;\n\n /**\n * Sign a message\n * @param message - The message to sign\n */\n abstract signMessage(message: string): Promise<string>;\n\n /**\n * Get block explorer URL for a transaction\n * @param txHash - Transaction hash\n */\n getExplorerUrl(txHash?: string): string {\n if (txHash) {\n return `${this.explorerUrl}/tx/${txHash}`;\n }\n return this.explorerUrl;\n }\n\n /**\n * Get block explorer URL for an address\n * @param address - Wallet address\n */\n getAddressExplorerUrl(address: string): string {\n return `${this.explorerUrl}/address/${address}`;\n }\n\n /**\n * Get chain info\n */\n getInfo() {\n return {\n chainId: this.chainId,\n name: this.name,\n rpcUrl: this.rpcUrl,\n explorerUrl: this.explorerUrl,\n };\n }\n}\n\n/**\n * Chain factory type\n */\nexport type ChainFactory = (privateKey: string, rpcUrl?: string) => BaseChain;\n\n/**\n * Registry for chain implementations\n */\nexport const ChainRegistry: Record<Chain, ChainFactory> = {} as Record<Chain, ChainFactory>;\n\n/**\n * Register a chain implementation\n */\nexport function registerChain(chain: Chain, factory: ChainFactory): void {\n ChainRegistry[chain] = factory;\n}\n\n/**\n * Get a chain instance\n */\nexport function getChain(chain: Chain, privateKey: string, rpcUrl?: string): BaseChain {\n const factory = ChainRegistry[chain];\n if (!factory) {\n throw new Error(`Chain ${chain} not implemented`);\n }\n return factory(privateKey, rpcUrl);\n}\n","/**\n * Ethereum chain implementation using ethers.js v6\n */\n\nimport { ethers } from 'ethers';\nimport { BaseChain } from '../base.js';\nimport type { Balance, PaymentParams, FeeEstimate, TokenSymbol } from '../../core/types.js';\n\n// Default RPC endpoints\nconst DEFAULT_RPCS = {\n ethereum: 'https://eth.llamarpc.com',\n polygon: 'https://polygon-rpc.com',\n bsc: 'https://bsc-dataseed.binance.org',\n arbitrum: 'https://arbitrum-one.publicnode.com',\n};\n\n// Chain IDs\nconst CHAIN_IDS = {\n ethereum: 1,\n polygon: 137,\n bsc: 56,\n arbitrum: 42161,\n};\n\n/**\n * Ethereum chain implementation\n */\nexport class EthereumChain extends BaseChain {\n private privateKey: string;\n private wallet: ethers.Wallet;\n private provider: ethers.JsonRpcProvider;\n\n constructor(\n chain: 'ethereum' | 'polygon' | 'bsc' | 'arbitrum',\n privateKey: string,\n rpcUrl?: string\n ) {\n const config = {\n chainId: CHAIN_IDS[chain].toString(),\n name: chain.charAt(0).toUpperCase() + chain.slice(1),\n rpcUrl: rpcUrl || DEFAULT_RPCS[chain],\n explorerUrl: {\n ethereum: 'https://etherscan.io',\n polygon: 'https://polygonscan.com',\n bsc: 'https://bscscan.com',\n arbitrum: 'https://arbiscan.io',\n }[chain],\n };\n\n super(config.chainId, config.name, config.rpcUrl, config.explorerUrl);\n this.privateKey = privateKey;\n this.provider = new ethers.JsonRpcProvider(this.rpcUrl);\n this.wallet = new ethers.Wallet(this.privateKey, this.provider);\n }\n\n /**\n * Connect to the chain\n */\n async connect(): Promise<void> {\n try {\n await this.provider.getNetwork();\n } catch (error) {\n throw new Error(`Failed to connect to ${this.name}: ${error}`);\n }\n }\n\n /**\n * Disconnect from the chain\n */\n disconnect(): void {\n // No explicit disconnect needed for JSON-RPC provider\n }\n\n /**\n * Get the wallet address\n */\n getAddress(): string {\n return this.wallet.address;\n }\n\n /**\n * Validate an Ethereum address\n */\n validateAddress(address: string): boolean {\n return ethers.isAddress(address);\n }\n\n /**\n * Get balance (native or ERC-20 token)\n */\n async getBalance(tokenAddress?: string): Promise<Balance> {\n let amount: bigint;\n let decimals: number;\n let symbol: TokenSymbol;\n\n if (!tokenAddress) {\n // Native token balance\n amount = await this.provider.getBalance(this.wallet.address);\n decimals = 18;\n symbol = this.name === 'Polygon' ? 'MATIC' : this.name === 'Bsc' ? 'BNB' : 'ETH';\n } else {\n // ERC-20 token balance\n const erc20Abi = [\n 'function balanceOf(address) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function symbol() view returns (string)',\n ];\n const contract = new ethers.Contract(tokenAddress, erc20Abi, this.provider);\n\n const [balanceAmount, tokenDecimals, tokenSymbol] = await Promise.all([\n contract.balanceOf(this.wallet.address),\n contract.decimals(),\n contract.symbol(),\n ]);\n\n amount = balanceAmount;\n decimals = Number(tokenDecimals);\n symbol = tokenSymbol as TokenSymbol;\n }\n\n const formatted = ethers.formatUnits(amount, decimals);\n\n return {\n amount,\n formatted,\n symbol,\n decimals,\n };\n }\n\n /**\n * Estimate transaction fee\n */\n async estimateFee(params: PaymentParams): Promise<FeeEstimate> {\n const { to, amount, token } = params;\n\n let gasLimit: bigint;\n let gasPrice: bigint;\n\n if (token === 'ETH' || token === 'MATIC' || token === 'BNB') {\n // Native transfer\n gasLimit = 21000n; // Standard ETH transfer\n } else {\n // ERC-20 transfer\n const erc20Abi = ['function transfer(address,uint256) returns (bool)'];\n const contract = new ethers.Contract(to, erc20Abi, this.wallet);\n const parsedAmount = ethers.parseUnits(amount, 18); // Assuming 18 decimals\n gasLimit = await contract.transfer.estimateGas(to, parsedAmount);\n }\n\n const feeData = await this.provider.getFeeData();\n gasPrice = feeData.gasPrice || 0n;\n\n const gasFee = gasLimit * gasPrice;\n const formatted = ethers.formatEther(gasFee);\n\n return {\n gasFee,\n gasPrice,\n gasLimit,\n formatted,\n };\n }\n\n /**\n * Send a transaction\n */\n async sendTransaction(params: PaymentParams): Promise<string> {\n const { to, amount, token } = params;\n\n if (token === 'ETH' || token === 'MATIC' || token === 'BNB') {\n // Native transfer\n const tx = await this.wallet.sendTransaction({\n to,\n value: ethers.parseEther(amount),\n });\n return tx.hash;\n } else {\n // ERC-20 transfer (simplified, needs token address)\n throw new Error('ERC-20 transfers require token address configuration');\n }\n }\n\n /**\n * Sign a message\n */\n async signMessage(message: string): Promise<string> {\n return await this.wallet.signMessage(message);\n }\n}\n\n/**\n * Factory function for Ethereum chains\n */\nexport function ethereumFactory(chain: 'ethereum' | 'polygon' | 'bsc' | 'arbitrum') {\n return (privateKey: string, rpcUrl?: string) => new EthereumChain(chain, privateKey, rpcUrl);\n}\n","/**\n * Bitcoin chain implementation\n * Note: This is a simplified implementation. For production, use bitcoinjs-lib\n */\n\nimport { BaseChain } from '../base.js';\nimport type { Balance, PaymentParams, FeeEstimate } from '../../core/types.js';\n\n/**\n * Bitcoin chain implementation\n */\nexport class BitcoinChain extends BaseChain {\n private privateKey: string;\n private address: string;\n\n constructor(privateKey: string, rpcUrl?: string) {\n super(\n 'bitcoin',\n 'Bitcoin',\n rpcUrl || 'https://blockstream.info/api',\n 'https://blockstream.info'\n );\n this.privateKey = privateKey;\n this.address = this.deriveAddress();\n }\n\n /**\n * Connect to Bitcoin network (uses block explorer API)\n */\n async connect(): Promise<void> {\n // Bitcoin uses public block explorers, no connection needed\n }\n\n /**\n * Disconnect (no-op for Bitcoin)\n */\n disconnect(): void {\n // No-op\n }\n\n /**\n * Derive Bitcoin address from private key\n */\n private deriveAddress(): string {\n // Simplified address derivation\n // In production, use bitcoinjs-lib for proper address derivation\n return 'bc1q' + this.privateKey.slice(2, 40);\n }\n\n /**\n * Get Bitcoin address\n */\n getAddress(): string {\n return this.address;\n }\n\n /**\n * Validate Bitcoin address\n */\n validateAddress(address: string): boolean {\n // Basic validation for bech32, legacy, and segwit addresses\n return (\n /^1[1-9A-HJ-NP-Za-km-z]{25,39}$/.test(address) || // Legacy\n /^3[1-9A-HJ-NP-Za-km-z]{25,39}$/.test(address) || // P2SH\n /^bc1[a-z0-9]{39,59}$/.test(address) // Bech32\n );\n }\n\n /**\n * Get Bitcoin balance (using block explorer API)\n */\n async getBalance(): Promise<Balance> {\n try {\n const url = this.rpcUrl + '/address/' + this.address;\n const response = await fetch(url);\n const data = await response.json() as {\n chain_stats: { funded_txo_sum: number; spent_txo_sum: number };\n };\n\n const satoshis = BigInt(data.chain_stats.funded_txo_sum - data.chain_stats.spent_txo_sum);\n const btc = Number(satoshis) / 100_000_000;\n\n return {\n amount: satoshis,\n formatted: btc.toFixed(8),\n symbol: 'BTC',\n decimals: 8,\n };\n } catch (_error) {\n // Return zero balance on error\n return {\n amount: 0n,\n formatted: '0',\n symbol: 'BTC',\n decimals: 8,\n };\n }\n }\n\n /**\n * Estimate Bitcoin transaction fee\n */\n async estimateFee(_params: PaymentParams): Promise<FeeEstimate> {\n try {\n // Get recommended fee from block explorer\n const url = this.rpcUrl + '/fee-estimates';\n const response = await fetch(url);\n const feeData = await response.json() as Record<number, number>;\n\n // Use 6-block estimate for confirmation\n const satPerByte = feeData[6] || 10;\n\n // Estimate transaction size (bytes)\n const estimatedSize = 250; // Typical P2WPKH transaction\n const satoshis = BigInt(satPerByte * estimatedSize);\n\n return {\n gasFee: satoshis,\n gasPrice: BigInt(satPerByte),\n gasLimit: BigInt(estimatedSize),\n formatted: (satPerByte * estimatedSize / 100_000_000).toFixed(8),\n };\n } catch (_error) {\n // Default fee estimate\n const satPerByte = 10;\n const estimatedSize = 250;\n const satoshis = BigInt(satPerByte * estimatedSize);\n\n return {\n gasFee: satoshis,\n gasPrice: BigInt(satPerByte),\n gasLimit: BigInt(estimatedSize),\n formatted: '0.00002500',\n };\n }\n }\n\n /**\n * Send Bitcoin transaction\n * Note: This requires full implementation with bitcoinjs-lib\n */\n async sendTransaction(_params: PaymentParams): Promise<string> {\n throw new Error(\n 'Bitcoin transactions require bitcoinjs-lib. Install with: npm install bitcoinjs-lib'\n );\n }\n\n /**\n * Sign a message with Bitcoin private key\n */\n async signMessage(message: string): Promise<string> {\n // This would use bitcoinjs-lib for proper message signing\n // For now, return a placeholder\n const signature = Buffer.from(this.privateKey + message).toString('base64');\n return signature;\n }\n\n /**\n * Get transaction history from block explorer\n */\n async getTransactionHistory(): Promise<Array<{ hash: string; amount: number }>> {\n try {\n const url = this.rpcUrl + '/address/' + this.address + '/txs';\n const response = await fetch(url);\n const txs = await response.json() as Array<{ txid: string; out: Array<{ value: number }> }>;\n\n return txs.map((tx) => ({\n hash: tx.txid,\n amount: (tx.out[0]?.value || 0) / 100_000_000,\n }));\n } catch (_error) {\n return [];\n }\n }\n}\n","/**\n * Main ClawCash Wallet class\n * Orchestrates all wallet functionality across multiple chains\n */\n\nimport { KeyManager } from './key-manager.js';\nimport { generateMnemonic, validateMnemonic } from './mnemonic.js';\nimport { ethereumFactory } from '../chains/evm/ethereum.js';\nimport { BitcoinChain } from '../chains/bitcoin/bitcoin.js';\nimport { registerChain, getChain } from '../chains/base.js';\nimport type {\n WalletConfig,\n WalletAddresses,\n Chain,\n Balance,\n PaymentParams,\n FeeEstimate,\n TokenSymbol,\n} from './types.js';\n\n// Register EVM chains\nregisterChain('ethereum', ethereumFactory('ethereum'));\nregisterChain('polygon', ethereumFactory('polygon'));\nregisterChain('bsc', ethereumFactory('bsc'));\nregisterChain('arbitrum', ethereumFactory('arbitrum'));\n\n// Register Bitcoin chain\nregisterChain('bitcoin', (privateKey: string) => new BitcoinChain(privateKey));\n\n/**\n * Main ClawCash wallet class\n */\nexport class ClawCashWallet {\n private keyManager: KeyManager;\n private config: WalletConfig;\n\n /**\n * Create a new wallet instance\n * @param config - Wallet configuration\n */\n constructor(config: WalletConfig = {}) {\n const mnemonic = config.mnemonic || generateMnemonic();\n\n if (!validateMnemonic(mnemonic)) {\n throw new Error('Invalid mnemonic phrase');\n }\n\n this.keyManager = new KeyManager(mnemonic);\n this.config = { ...config, mnemonic };\n }\n\n /**\n * Get wallet addresses for all supported chains\n */\n async getAddresses(): Promise<WalletAddresses> {\n const addresses: Partial<WalletAddresses> = {};\n\n // Get EVM chain addresses\n for (const chain of ['ethereum', 'polygon', 'bsc', 'arbitrum'] as Chain[]) {\n const chainInstance = getChain(chain, this.keyManager.derivePrivateKey(chain));\n try {\n await chainInstance.connect();\n } catch {\n // Connection failed, but we can still get the address\n }\n addresses[chain] = chainInstance.getAddress();\n }\n\n // Bitcoin address\n addresses.bitcoin = this.getBitcoinAddress();\n\n return addresses as WalletAddresses;\n }\n\n /**\n * Get Bitcoin address (simplified version)\n */\n private getBitcoinAddress(): string {\n // This is a placeholder - real implementation would use bitcoinjs-lib\n const pk = this.keyManager.derivePrivateKey('bitcoin');\n // For now, return a mock address\n return 'bc1q' + pk.slice(0, 38);\n }\n\n /**\n * Get balance for a specific chain and token\n * @param chain - The blockchain network\n * @param token - Optional token symbol (defaults to native)\n */\n async getBalance(chain: Chain, _token?: TokenSymbol): Promise<Balance> {\n const chainInstance = getChain(chain, this.keyManager.derivePrivateKey(chain));\n await chainInstance.connect();\n return await chainInstance.getBalance();\n }\n\n /**\n * Estimate transaction fee\n * @param params - Payment parameters\n */\n async estimateFee(params: PaymentParams): Promise<FeeEstimate> {\n const chainInstance = getChain(\n params.chain,\n this.keyManager.derivePrivateKey(params.chain)\n );\n await chainInstance.connect();\n return await chainInstance.estimateFee(params);\n }\n\n /**\n * Send a payment\n * @param params - Payment parameters\n */\n async sendPayment(params: PaymentParams): Promise<string> {\n const chainInstance = getChain(\n params.chain,\n this.keyManager.derivePrivateKey(params.chain)\n );\n await chainInstance.connect();\n return await chainInstance.sendTransaction(params);\n }\n\n /**\n * Sign a message\n * @param message - The message to sign\n * @param chain - The chain to sign with\n */\n async signMessage(message: string, chain: Chain): Promise<string> {\n const chainInstance = getChain(chain, this.keyManager.derivePrivateKey(chain));\n await chainInstance.connect();\n return await chainInstance.signMessage(message);\n }\n\n /**\n * Export the mnemonic (handle with care!)\n */\n exportMnemonic(): string {\n return this.keyManager.getMnemonic();\n }\n\n /**\n * Export all private keys (for backup only)\n */\n exportPrivateKeys(): Record<Chain, string> {\n return this.keyManager.exportPrivateKeys();\n }\n\n /**\n * Get wallet info\n */\n getInfo() {\n return {\n mnemonic: this.config.mnemonic ? '***configured***' : '***auto-generated***',\n };\n }\n}\n\n/**\n * Create a new wallet\n * @param mnemonic - Optional mnemonic phrase\n */\nexport function createWallet(mnemonic?: string): ClawCashWallet {\n return new ClawCashWallet({ mnemonic });\n}\n\n/**\n * Import a wallet from mnemonic\n * @param mnemonic - BIP39 mnemonic phrase\n */\nexport function importWallet(mnemonic: string): ClawCashWallet {\n if (!validateMnemonic(mnemonic)) {\n throw new Error('Invalid mnemonic phrase');\n }\n return new ClawCashWallet({ mnemonic });\n}\n","/**\n * Base exchange adapter interface\n */\n\nimport type { ExchangeConfig, OrderBook, Ticker, OrderStatus } from '../types.js';\nimport type { TradeConfig, TradeResult, MarketInfo } from '../../core/types.js';\n\n/**\n * Abstract base class for exchange adapters\n */\nexport abstract class BaseExchange {\n protected config: ExchangeConfig;\n protected connected: boolean = false;\n\n constructor(config: ExchangeConfig) {\n this.config = config;\n }\n\n /**\n * Connect to the exchange\n */\n abstract connect(): Promise<void>;\n\n /**\n * Disconnect from the exchange\n */\n abstract disconnect(): void;\n\n /**\n * Get available markets/trading pairs\n */\n abstract getMarkets(): Promise<string[]>;\n\n /**\n * Get market info for a symbol\n */\n abstract getMarketInfo(symbol: string): Promise<MarketInfo>;\n\n /**\n * Get ticker for a symbol\n */\n abstract getTicker(symbol: string): Promise<Ticker>;\n\n /**\n * Get order book for a symbol\n */\n abstract getOrderBook(symbol: string, limit?: number): Promise<OrderBook>;\n\n /**\n * Get account balance\n */\n abstract getBalance(): Promise<Record<string, string>>;\n\n /**\n * Place a buy order\n */\n abstract buy(config: TradeConfig): Promise<TradeResult>;\n\n /**\n * Place a sell order\n */\n abstract sell(config: TradeConfig): Promise<TradeResult>;\n\n /**\n * Cancel an order\n */\n abstract cancelOrder(orderId: string, symbol?: string): Promise<boolean>;\n\n /**\n * Get order status\n */\n abstract getOrderStatus(orderId: string): Promise<OrderStatus>;\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Get exchange name\n */\n getName(): string {\n return this.config.name;\n }\n}\n","/**\n * Binance exchange adapter\n * Note: This is a simplified implementation using public APIs\n * For full trading functionality, integrate with CCXT library\n */\n\nimport { BaseExchange } from './base.js';\nimport type { ExchangeConfig, OrderBook, Ticker, OrderStatus } from '../types.js';\nimport type { TradeConfig, TradeResult, MarketInfo } from '../../core/types.js';\n\n/**\n * Binance exchange adapter\n */\nexport class BinanceExchange extends BaseExchange {\n private baseUrl: string;\n private apiKey?: string;\n private apiSecret?: string;\n\n constructor(config: ExchangeConfig) {\n super(config);\n this.baseUrl = config.sandbox\n ? 'https://testnet.binance.vision/api'\n : 'https://api.binance.com/api';\n this.apiKey = config.apiKey;\n this.apiSecret = config.apiSecret;\n }\n\n /**\n * Connect to Binance\n */\n async connect(): Promise<void> {\n if (!this.apiKey || !this.apiSecret) {\n throw new Error('Binance API key and secret required for trading');\n }\n\n // Test connection\n try {\n const response = await fetch(this.baseUrl + '/v3/ping');\n if (response.ok) {\n this.connected = true;\n }\n } catch (error) {\n throw new Error(`Failed to connect to Binance: ${error}`);\n }\n }\n\n /**\n * Disconnect\n */\n disconnect(): void {\n this.connected = false;\n }\n\n /**\n * Get available markets\n */\n async getMarkets(): Promise<string[]> {\n const response = await fetch(this.baseUrl + '/v3/exchangeInfo');\n const data = await response.json() as {\n symbols: Array<{ symbol: string; status: string }>;\n };\n\n return data.symbols\n .filter((s) => s.status === 'TRADING')\n .map((s) => s.symbol);\n }\n\n /**\n * Get market info\n */\n async getMarketInfo(symbol: string): Promise<MarketInfo> {\n const ticker = await this.getTicker(symbol);\n\n return {\n symbol,\n bidPrice: ticker.bid,\n askPrice: ticker.ask,\n lastPrice: ticker.last,\n volume24h: ticker.volume,\n };\n }\n\n /**\n * Get ticker for a symbol\n */\n async getTicker(symbol: string): Promise<Ticker> {\n const response = await fetch(this.baseUrl + '/v3/ticker/24hr?symbol=' + symbol);\n const data = await response.json() as {\n symbol: string;\n bidPrice: string;\n askPrice: string;\n lastPrice: string;\n volume: string;\n priceChange: string;\n priceChangePercent: string;\n };\n\n return {\n symbol: data.symbol,\n bid: data.bidPrice,\n ask: data.askPrice,\n last: data.lastPrice,\n volume: data.volume,\n change: data.priceChange,\n percentage: data.priceChangePercent,\n };\n }\n\n /**\n * Get order book\n */\n async getOrderBook(symbol: string, limit: number = 100): Promise<OrderBook> {\n const response = await fetch(\n this.baseUrl + '/v3/depth?symbol=' + symbol + '&limit=' + limit\n );\n const data = await response.json() as {\n bids: Array<[string, string]>;\n asks: Array<[string, string]>;\n };\n\n return {\n bids: data.bids,\n asks: data.asks,\n timestamp: Date.now(),\n };\n }\n\n /**\n * Get account balance\n */\n async getBalance(): Promise<Record<string, string>> {\n if (!this.apiKey || !this.apiSecret) {\n throw new Error('API key and secret required');\n }\n\n // This requires signed request - placeholder implementation\n // In production, use CCXT for proper authentication\n return {\n BTC: '0.0',\n USDT: '0.0',\n };\n }\n\n /**\n * Place a buy order\n */\n async buy(config: TradeConfig): Promise<TradeResult> {\n if (!this.apiKey || !this.apiSecret) {\n throw new Error('API key and secret required for trading');\n }\n\n // Placeholder - requires CCXT integration\n return {\n orderId: 'binance_' + Date.now().toString(),\n exchange: 'binance',\n symbol: config.symbol,\n side: 'buy',\n amount: config.amount,\n price: config.price || '0',\n status: 'open',\n timestamp: Date.now(),\n };\n }\n\n /**\n * Place a sell order\n */\n async sell(config: TradeConfig): Promise<TradeResult> {\n if (!this.apiKey || !this.apiSecret) {\n throw new Error('API key and secret required for trading');\n }\n\n // Placeholder - requires CCXT integration\n return {\n orderId: 'binance_' + Date.now().toString(),\n exchange: 'binance',\n symbol: config.symbol,\n side: 'sell',\n amount: config.amount,\n price: config.price || '0',\n status: 'open',\n timestamp: Date.now(),\n };\n }\n\n /**\n * Cancel an order\n */\n async cancelOrder(_orderId: string, _symbol?: string): Promise<boolean> {\n // Placeholder - requires CCXT integration\n return true;\n }\n\n /**\n * Get order status\n */\n async getOrderStatus(_orderId: string): Promise<OrderStatus> {\n // Placeholder - requires CCXT integration\n return 'open';\n }\n}\n","/**\n * Trading manager for handling exchange operations\n */\n\nimport { BaseExchange } from './exchanges/base.js';\nimport { BinanceExchange } from './exchanges/binance.js';\nimport type { ExchangeConfig, OrderBook, Ticker } from './types.js';\nimport type { TradeConfig, TradeResult, MarketInfo } from '../core/types.js';\n\n/**\n * Exchange factory\n */\nexport type ExchangeFactory = (config: ExchangeConfig) => BaseExchange;\n\n/**\n * Exchange registry\n */\nconst ExchangeRegistry: Record<string, ExchangeFactory> = {\n binance: (config) => new BinanceExchange(config),\n // More exchanges can be added here\n};\n\n/**\n * Trading manager class\n */\nexport class TradingManager {\n private exchanges: Map<string, BaseExchange> = new Map();\n\n /**\n * Add an exchange connection\n */\n addExchange(name: string, config: ExchangeConfig): void {\n const factory = ExchangeRegistry[name.toLowerCase()];\n if (!factory) {\n throw new Error(`Exchange ${name} not supported`);\n }\n\n const exchange = factory({ ...config, name });\n this.exchanges.set(name.toLowerCase(), exchange);\n }\n\n /**\n * Connect to an exchange\n */\n async connect(name: string): Promise<void> {\n const exchange = this.exchanges.get(name.toLowerCase());\n if (!exchange) {\n throw new Error(`Exchange ${name} not configured`);\n }\n await exchange.connect();\n }\n\n /**\n * Disconnect from an exchange\n */\n disconnect(name: string): void {\n const exchange = this.exchanges.get(name.toLowerCase());\n if (exchange) {\n exchange.disconnect();\n }\n }\n\n /**\n * Get available markets from an exchange\n */\n async getMarkets(exchange: string): Promise<string[]> {\n const ex = this.getExchange(exchange);\n return await ex.getMarkets();\n }\n\n /**\n * Get market info\n */\n async getMarketInfo(exchange: string, symbol: string): Promise<MarketInfo> {\n const ex = this.getExchange(exchange);\n return await ex.getMarketInfo(symbol);\n }\n\n /**\n * Get ticker\n */\n async getTicker(exchange: string, symbol: string): Promise<Ticker> {\n const ex = this.getExchange(exchange);\n return await ex.getTicker(symbol);\n }\n\n /**\n * Get order book\n */\n async getOrderBook(exchange: string, symbol: string, limit?: number): Promise<OrderBook> {\n const ex = this.getExchange(exchange);\n return await ex.getOrderBook(symbol, limit);\n }\n\n /**\n * Get account balance\n */\n async getBalance(exchange: string): Promise<Record<string, string>> {\n const ex = this.getExchange(exchange);\n return await ex.getBalance();\n }\n\n /**\n * Place a buy order\n */\n async buy(config: TradeConfig): Promise<TradeResult> {\n const ex = this.getExchange(config.exchange);\n return await ex.buy(config);\n }\n\n /**\n * Place a sell order\n */\n async sell(config: TradeConfig): Promise<TradeResult> {\n const ex = this.getExchange(config.exchange);\n return await ex.sell(config);\n }\n\n /**\n * Cancel an order\n */\n async cancelOrder(exchange: string, orderId: string, symbol?: string): Promise<boolean> {\n const ex = this.getExchange(exchange);\n return await ex.cancelOrder(orderId, symbol);\n }\n\n /**\n * Get exchange instance\n */\n private getExchange(name: string): BaseExchange {\n const exchange = this.exchanges.get(name.toLowerCase());\n if (!exchange) {\n throw new Error(`Exchange ${name} not configured. Call addExchange() first.`);\n }\n return exchange;\n }\n\n /**\n * Check if exchange is connected\n */\n isConnected(exchange: string): boolean {\n const ex = this.exchanges.get(exchange.toLowerCase());\n return ex ? ex.isConnected() : false;\n }\n}\n\n/**\n * Create a new trading manager\n */\nexport function createTradingManager(): TradingManager {\n return new TradingManager();\n}\n","/**\n * Balance manager for tracking balances across chains\n */\n\nimport type { ClawCashWallet } from '../core/wallet.js';\nimport type { Chain, Balance, TokenSymbol } from '../core/types.js';\n\n/**\n * Balance summary across all chains\n */\nexport interface BalanceSummary {\n chain: Chain;\n address: string;\n balances: Array<{\n symbol: TokenSymbol;\n amount: string;\n formatted: string;\n }>;\n totalValueUsd?: string;\n}\n\n/**\n * Balance manager class\n */\nexport class BalanceManager {\n private wallet: ClawCashWallet;\n private cache: Map<string, { balance: Balance; timestamp: number }> = new Map();\n private cacheTtl: number = 60000; // 1 minute cache\n\n constructor(wallet: ClawCashWallet) {\n this.wallet = wallet;\n }\n\n /**\n * Get balance for a specific chain\n * @param chain - The blockchain network\n * @param token - Optional token symbol\n * @param useCache - Whether to use cached balance (default: true)\n */\n async getBalance(chain: Chain, token?: TokenSymbol, useCache: boolean = true): Promise<Balance> {\n const cacheKey = `${chain}-${token || 'native'}`;\n\n // Check cache\n if (useCache) {\n const cached = this.cache.get(cacheKey);\n if (cached && Date.now() - cached.timestamp < this.cacheTtl) {\n return cached.balance;\n }\n }\n\n // Fetch balance\n const balance = await this.wallet.getBalance(chain, token);\n\n // Cache the result\n this.cache.set(cacheKey, {\n balance,\n timestamp: Date.now(),\n });\n\n return balance;\n }\n\n /**\n * Get balances for all chains\n */\n async getAllBalances(): Promise<BalanceSummary[]> {\n const chains: Chain[] = ['ethereum', 'polygon', 'bsc', 'arbitrum', 'bitcoin'];\n const addresses = await this.wallet.getAddresses();\n\n const results: BalanceSummary[] = [];\n\n for (const chain of chains) {\n try {\n const balance = await this.getBalance(chain);\n\n results.push({\n chain,\n address: addresses[chain],\n balances: [\n {\n symbol: balance.symbol,\n amount: balance.amount.toString(),\n formatted: balance.formatted,\n },\n ],\n });\n } catch (error) {\n // Skip chains that fail\n results.push({\n chain,\n address: addresses[chain],\n balances: [],\n });\n }\n }\n\n return results;\n }\n\n /**\n * Get total balance across all chains for a specific token\n */\n async getTotalBalance(token: TokenSymbol): Promise<{\n amount: string;\n formatted: string;\n chains: Array<{ chain: Chain; amount: string }>;\n }> {\n const chains: Chain[] = ['ethereum', 'polygon', 'bsc', 'arbitrum'];\n const chainBalances: Array<{ chain: Chain; amount: string }> = [];\n\n let totalAmount = 0n;\n let decimals = 18;\n\n for (const chain of chains) {\n try {\n const balance = await this.getBalance(chain, token);\n if (balance.symbol === token) {\n totalAmount += balance.amount;\n decimals = balance.decimals;\n chainBalances.push({\n chain,\n amount: balance.formatted,\n });\n }\n } catch (error) {\n // Skip failed chains\n }\n }\n\n // Format total\n const formatted = (Number(totalAmount) / Math.pow(10, decimals)).toFixed(decimals);\n\n return {\n amount: totalAmount.toString(),\n formatted,\n chains: chainBalances,\n };\n }\n\n /**\n * Clear the balance cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Set cache TTL\n */\n setCacheTtl(milliseconds: number): void {\n this.cacheTtl = milliseconds;\n }\n}\n\n/**\n * Create a balance manager\n */\nexport function createBalanceManager(wallet: ClawCashWallet): BalanceManager {\n return new BalanceManager(wallet);\n}\n","/**\n * Token address registry for multi-chain tokens\n */\n\nimport type { Chain, TokenSymbol } from '../core/types.js';\n\n/**\n * Token configuration\n */\nexport interface TokenInfo {\n symbol: TokenSymbol;\n name: string;\n decimals: number;\n address: string;\n chainId: number;\n}\n\n/**\n * Token addresses across chains\n */\nexport const TOKEN_ADDRESSES: Record<string, Partial<Record<Chain, string>>> = {\n // USDT (Tether USD)\n USDT: {\n ethereum: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n polygon: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',\n bsc: '0x55d398326f99059ff775485246999027b3197955',\n arbitrum: '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9',\n },\n\n // USDC (USD Coin)\n USDC: {\n ethereum: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',\n polygon: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n bsc: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d',\n arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n\n // WBTC (Wrapped Bitcoin)\n WBTC: {\n ethereum: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',\n polygon: '0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6',\n bsc: '0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c',\n arbitrum: '0x2f2a2543b76a4166869fb4605c78dcdbe30c8b3a',\n },\n};\n\n/**\n * Chain IDs\n */\nexport const CHAIN_IDS: Record<Chain, number> = {\n ethereum: 1,\n polygon: 137,\n bsc: 56,\n arbitrum: 42161,\n bitcoin: 0,\n};\n\n/**\n * Get token address for a chain\n */\nexport function getTokenAddress(token: string, chain: Chain): string | undefined {\n return TOKEN_ADDRESSES[token]?.[chain];\n}\n\n/**\n * Check if token exists on chain\n */\nexport function hasToken(token: string, chain: Chain): boolean {\n return token in TOKEN_ADDRESSES && chain in TOKEN_ADDRESSES[token];\n}\n\n/**\n * Get all tokens for a chain\n */\nexport function getTokensForChain(chain: Chain): string[] {\n return Object.keys(TOKEN_ADDRESSES).filter(\n token => hasToken(token, chain)\n );\n}\n\n/**\n * Get all supported tokens\n */\nexport function getAllSupportedTokens(): string[] {\n return Object.keys(TOKEN_ADDRESSES);\n}\n","/**\n * Public Wallet API\n * Simple, agent-friendly functions for wallet operations\n */\n\nimport { ClawCashWallet, importWallet } from '../core/wallet.js';\nimport type { WalletConfig, WalletAddresses, Chain, Balance, TokenSymbol } from '../core/types.js';\n\n/**\n * Create a new wallet\n * @param config - Optional wallet configuration\n * @returns Wallet addresses for all supported chains\n */\nexport async function createWalletAPI(config?: WalletConfig): Promise<{\n wallet: ClawCashWallet;\n addresses: WalletAddresses;\n}> {\n const wallet = new ClawCashWallet(config);\n const addresses = await wallet.getAddresses();\n return { wallet, addresses };\n}\n\n/**\n * Import a wallet from mnemonic\n * @param mnemonic - BIP39 mnemonic phrase\n * @returns Wallet addresses for all supported chains\n */\nexport async function importWalletAPI(mnemonic: string): Promise<{\n wallet: ClawCashWallet;\n addresses: WalletAddresses;\n}> {\n const wallet = importWallet(mnemonic);\n const addresses = await wallet.getAddresses();\n return { wallet, addresses };\n}\n\n/**\n * Get wallet balance\n * @param wallet - The wallet instance\n * @param chain - The blockchain network\n * @param token - Optional token symbol\n */\nexport async function getBalanceAPI(\n wallet: ClawCashWallet,\n chain: Chain,\n token?: TokenSymbol\n): Promise<Balance> {\n return await wallet.getBalance(chain, token);\n}\n\n/**\n * Export wallet mnemonic (use carefully!)\n * @param wallet - The wallet instance\n */\nexport function exportMnemonicAPI(wallet: ClawCashWallet): string {\n return wallet.exportMnemonic();\n}\n","/**\n * Public Payment API\n * Simple, agent-friendly functions for payments\n */\n\nimport type { ClawCashWallet } from '../core/wallet.js';\nimport type { PaymentParams, FeeEstimate } from '../core/types.js';\n\n/**\n * Send a payment\n * @param wallet - The wallet instance\n * @param params - Payment parameters\n * @returns Transaction hash\n */\nexport async function sendPaymentAPI(\n wallet: ClawCashWallet,\n params: PaymentParams\n): Promise<string> {\n return await wallet.sendPayment(params);\n}\n\n/**\n * Estimate transaction fee\n * @param wallet - The wallet instance\n * @param params - Payment parameters\n * @returns Fee estimate\n */\nexport async function estimateFeesAPI(\n wallet: ClawCashWallet,\n params: PaymentParams\n): Promise<FeeEstimate> {\n return await wallet.estimateFee(params);\n}\n\n/**\n * Quick payment - simplified interface\n * @param wallet - The wallet instance\n * @param chain - The blockchain network\n * @param to - Recipient address\n * @param amount - Amount to send (as decimal string)\n * @param token - Token symbol (defaults to native)\n */\nexport async function quickSend(\n wallet: ClawCashWallet,\n chain: 'ethereum' | 'polygon' | 'bsc' | 'arbitrum',\n to: string,\n amount: string,\n token: 'ETH' | 'MATIC' | 'BNB' = 'ETH'\n): Promise<string> {\n // Get sender address first\n const addresses = await wallet.getAddresses();\n const from = addresses[chain];\n\n return await wallet.sendPayment({\n chain,\n from,\n to,\n amount,\n token,\n });\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "clawcash",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript cryptocurrency wallet library for AI agents in the openclaw ecosystem",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "LICENSE"
19
+ ],
20
+ "scripts": {
21
+ "build": "tsup",
22
+ "dev": "tsup --watch",
23
+ "test": "vitest",
24
+ "test:coverage": "vitest --coverage",
25
+ "lint": "eslint src --ext .ts",
26
+ "format": "prettier --write \"src/**/*.ts\"",
27
+ "prepublishOnly": "npm run build",
28
+ "example": "ts-node examples/basic-usage.ts"
29
+ },
30
+ "keywords": [
31
+ "cryptocurrency",
32
+ "wallet",
33
+ "bitcoin",
34
+ "ethereum",
35
+ "trading",
36
+ "ai",
37
+ "web3",
38
+ "blockchain",
39
+ "defi",
40
+ "openclaw",
41
+ "agent"
42
+ ],
43
+ "author": "openclaw",
44
+ "license": "MIT",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/openclaw/clawcash.git"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/openclaw/clawcash/issues"
51
+ },
52
+ "homepage": "https://github.com/openclaw/clawcash#readme",
53
+ "dependencies": {
54
+ "ethers": "^6.9.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^20.11.0",
58
+ "typescript": "^5.3.3",
59
+ "ts-node": "^10.9.2",
60
+ "prettier": "^3.2.0",
61
+ "eslint": "^8.56.0",
62
+ "@typescript-eslint/eslint-plugin": "^6.19.0",
63
+ "@typescript-eslint/parser": "^6.19.0",
64
+ "vitest": "^1.2.0",
65
+ "tsup": "^8.0.0"
66
+ },
67
+ "engines": {
68
+ "node": ">=18.0.0"
69
+ }
70
+ }