coinley-test 0.0.3 → 0.0.4

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.
package/dist/index.esm.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import React, { useState, useRef, useEffect, createContext, forwardRef, useContext, useImperativeHandle } from "react";
2
2
  import { motion, AnimatePresence } from "framer-motion";
3
3
  import { ArrowLeft, X, Sparkles, Wallet, Zap, QrCode, Loader2, ChevronDown, CheckCircle2, Copy, ExternalLink, AlertCircle } from "lucide-react";
4
- import QRCodeLib from "qrcode";
5
4
  import { createCoinleyWalletConfig, CoinleyWalletProvider, WalletModal, useWallet, useWalletConnect, useWalletTransaction, useWalletModal, ConnectButton } from "@coinley/wallet-connect-core";
6
5
  import axios from "axios";
7
6
  var jsxRuntime = { exports: {} };
@@ -471,7 +470,7 @@ const CoinleyPayment = ({
471
470
  light: theme === "dark" ? "#000000" : "#FFFFFF"
472
471
  }
473
472
  });
474
- setQrCode(qrCodeDataURL);
473
+ setQrCode(recipientAddress);
475
474
  startPaymentVerification(payment.id);
476
475
  } catch (err) {
477
476
  console.error("QR code generation failed:", err);
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/PaymentAPI.js","../src/CoinleyPayment.jsx","../src/CoinleyProvider.jsx","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","//src/PaymentAPI.js\r\nimport axios from 'axios';\r\n\r\nexport class PaymentAPI {\r\n constructor(baseURL, apiKey, apiSecret) {\r\n this.apiKey = apiKey;\r\n this.apiSecret = apiSecret;\r\n\r\n this.api = axios.create({\r\n baseURL: baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL,\r\n timeout: 30000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // Add request interceptor\r\n this.api.interceptors.request.use(\r\n (config) => {\r\n config.headers['X-API-Key'] = this.apiKey;\r\n config.headers['X-API-Secret'] = this.apiSecret;\r\n \r\n const token = this.generateMerchantToken();\r\n if (token) {\r\n config.headers['Authorization'] = `Bearer ${token}`;\r\n }\r\n\r\n console.log('API Request:', {\r\n method: config.method?.toUpperCase(),\r\n url: config.url,\r\n data: config.data\r\n });\r\n\r\n return config;\r\n },\r\n (error) => {\r\n console.error('Request interceptor error:', error);\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n // Add response interceptor\r\n this.api.interceptors.response.use(\r\n (response) => {\r\n console.log('API Response:', {\r\n status: response.status,\r\n url: response.config.url,\r\n data: response.data\r\n });\r\n return response;\r\n },\r\n (error) => {\r\n console.error('API Error:', {\r\n status: error.response?.status,\r\n data: error.response?.data,\r\n message: error.message\r\n });\r\n\r\n if (error.response?.status === 401) {\r\n throw new Error('Authentication failed. Please check your API credentials.');\r\n } else if (error.response?.status === 404) {\r\n throw new Error('API endpoint not found. Please check your API URL.');\r\n } else if (error.response?.status >= 500) {\r\n throw new Error('Server error. Please try again later.');\r\n }\r\n\r\n throw error;\r\n }\r\n );\r\n }\r\n\r\n generateMerchantToken() {\r\n try {\r\n const credentials = `${this.apiKey}:${this.apiSecret}`;\r\n return btoa(credentials);\r\n } catch (error) {\r\n console.error('Failed to generate token:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async createPayment(params) {\r\n try {\r\n const response = await this.api.post('/api/payments/create', params);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to create payment');\r\n }\r\n }\r\n\r\n async getPayment(paymentId) {\r\n try {\r\n const response = await this.api.get(`/api/payments/${paymentId}`);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to get payment details');\r\n }\r\n }\r\n\r\n async getNetworks() {\r\n try {\r\n const response = await this.api.get('/api/networks');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get networks failed:', error);\r\n \r\n // Return fallback networks\r\n return {\r\n networks: [\r\n {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n chainId: '1',\r\n type: 'ethereum',\r\n explorerUrl: 'https://etherscan.io',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'bsc',\r\n name: 'Binance Smart Chain',\r\n shortName: 'bsc',\r\n chainId: '56',\r\n type: 'bsc',\r\n explorerUrl: 'https://bscscan.com',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'polygon',\r\n name: 'Polygon',\r\n shortName: 'polygon',\r\n chainId: '137',\r\n type: 'ethereum',\r\n explorerUrl: 'https://polygonscan.com',\r\n isTestnet: false,\r\n },\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async getStablecoins() {\r\n try {\r\n const response = await this.api.get('/api/networks/stablecoins');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get stablecoins failed:', error);\r\n \r\n // Return fallback stablecoins\r\n return {\r\n stablecoins: [\r\n {\r\n id: 'usdt-eth',\r\n name: 'Tether USD',\r\n symbol: 'USDT',\r\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n },\r\n {\r\n id: 'usdc-eth',\r\n name: 'USD Coin',\r\n symbol: 'USDC',\r\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async verifyQRPayment(paymentId) {\r\n try {\r\n const response = await this.api.post('/api/payments/verify-qr', {\r\n paymentId\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to verify payment');\r\n }\r\n }\r\n\r\n async processPayment(paymentId, transactionHash, network, senderAddress) {\r\n try {\r\n const response = await this.api.post('/api/payments/process', {\r\n paymentId,\r\n transactionHash,\r\n network,\r\n senderAddress\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to process payment');\r\n }\r\n }\r\n\r\n async healthCheck() {\r\n try {\r\n const response = await this.api.get('/api/health');\r\n return response.status === 200;\r\n } catch (error) {\r\n console.error('Health check failed:', error);\r\n return false;\r\n }\r\n }\r\n}","//src/CoinleyPayment.jsx\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { \r\n Wallet, \r\n QrCode, \r\n ChevronDown, \r\n Copy, \r\n Check, \r\n X, \r\n ArrowLeft,\r\n Loader2,\r\n ExternalLink,\r\n AlertCircle,\r\n CheckCircle2,\r\n Zap,\r\n Sparkles\r\n} from 'lucide-react';\r\nimport QRCodeLib from 'qrcode';\r\nimport { \r\n createCoinleyWalletConfig,\r\n CoinleyWalletProvider,\r\n ConnectButton,\r\n WalletModal,\r\n useWallet,\r\n useWalletConnect,\r\n useWalletTransaction,\r\n useWalletModal\r\n} from '@coinley/wallet-connect-core';\r\nimport { PaymentAPI } from './PaymentAPI';\r\n\r\n// Wallet Integration Component\r\nconst WalletIntegration = ({ \r\n selectedNetwork, \r\n selectedToken, \r\n paymentData, \r\n onTransactionSent, \r\n onError,\r\n isConnecting,\r\n setIsConnecting\r\n}) => {\r\n const { isConnected, address } = useWallet();\r\n const { connectWallet } = useWalletConnect();\r\n const { sendTransaction } = useWalletTransaction();\r\n const { openModal } = useWalletModal();\r\n\r\n useEffect(() => {\r\n if (isConnected && paymentData && selectedNetwork && selectedToken) {\r\n handleSendTransaction();\r\n }\r\n }, [isConnected, paymentData]);\r\n\r\n const handleConnectWallet = async () => {\r\n try {\r\n setIsConnecting(true);\r\n openModal();\r\n } catch (error) {\r\n console.error('Wallet connection failed:', error);\r\n onError(error.message || 'Failed to connect wallet');\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n const handleSendTransaction = async () => {\r\n if (!isConnected || !paymentData || !selectedToken) return;\r\n\r\n try {\r\n setIsConnecting(true);\r\n \r\n const recipientAddress = paymentData.metadata?.recipientWallet;\r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let txHash;\r\n\r\n if (selectedToken.contractAddress) {\r\n // ERC-20 Token Transaction\r\n const amount = (paymentData.totalAmount * Math.pow(10, selectedToken.decimals)).toString();\r\n const transferData = `0xa9059cbb${recipientAddress.slice(2).padStart(64, '0')}${parseInt(amount).toString(16).padStart(64, '0')}`;\r\n \r\n txHash = await sendTransaction({\r\n to: selectedToken.contractAddress,\r\n data: transferData,\r\n value: '0x0'\r\n });\r\n } else {\r\n // Native Token Transaction\r\n const value = (paymentData.totalAmount * Math.pow(10, 18)).toString(16);\r\n \r\n txHash = await sendTransaction({\r\n to: recipientAddress,\r\n value: `0x${value}`\r\n });\r\n }\r\n\r\n if (txHash) {\r\n onTransactionSent(txHash);\r\n }\r\n } catch (error) {\r\n console.error('Transaction failed:', error);\r\n onError(error.message || 'Transaction failed');\r\n } finally {\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"text-center space-y-6\">\r\n <div className=\"space-y-4\">\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Wallet className=\"w-8 h-8 text-[#7042D2]\" />\r\n </div>\r\n <h3 className=\"text-lg font-semibold\">\r\n {isConnected ? 'Send Payment' : 'Connect Your Wallet'}\r\n </h3>\r\n \r\n {!isConnected ? (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Connect your wallet to complete the payment\r\n </p>\r\n <ConnectButton \r\n theme=\"gradient\" \r\n size=\"large\"\r\n customText=\"Connect Wallet\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-green-600 dark:text-green-400\">\r\n ✅ Wallet Connected: {address?.slice(0, 6)}...{address?.slice(-4)}\r\n </p>\r\n \r\n {paymentData && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {isConnecting && (\r\n <div className=\"flex items-center justify-center space-x-2\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-[#7042D2]\" />\r\n <span>Processing transaction...</span>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst CoinleyPayment = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl = 'http://localhost:9000',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n isOpen,\r\n config,\r\n theme = 'light',\r\n merchantName,\r\n debug = false\r\n}) => {\r\n // State management\r\n const [currentStep, setCurrentStep] = useState('select-method');\r\n const [networks, setNetworks] = useState([]);\r\n const [tokens, setTokens] = useState([]);\r\n const [selectedNetwork, setSelectedNetwork] = useState(null);\r\n const [selectedToken, setSelectedToken] = useState(null);\r\n const [paymentMethod, setPaymentMethod] = useState(null);\r\n const [qrCode, setQrCode] = useState('');\r\n const [paymentData, setPaymentData] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n const [copied, setCopied] = useState(false);\r\n const [txHash, setTxHash] = useState('');\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n\r\n // Services\r\n const paymentAPI = useRef(new PaymentAPI(apiUrl, apiKey, apiSecret));\r\n\r\n // Wallet configuration\r\n const walletConfig = createCoinleyWalletConfig({\r\n appName: merchantName || 'Coinley Payment',\r\n appDescription: 'Crypto payment processing',\r\n chains: ['ethereum', 'polygon', 'bsc', 'arbitrum']\r\n });\r\n\r\n // Initialize\r\n useEffect(() => {\r\n if (isOpen) {\r\n initializePayment();\r\n }\r\n }, [isOpen]);\r\n\r\n const initializePayment = async () => {\r\n try {\r\n setLoading(true);\r\n setError('');\r\n \r\n const [networksRes, tokensRes] = await Promise.all([\r\n paymentAPI.current.getNetworks(),\r\n paymentAPI.current.getStablecoins()\r\n ]);\r\n\r\n setNetworks(networksRes.networks || []);\r\n setTokens(tokensRes.stablecoins || []);\r\n\r\n if (debug) {\r\n console.log('Initialized networks:', networksRes.networks);\r\n console.log('Initialized tokens:', tokensRes.stablecoins);\r\n }\r\n } catch (err) {\r\n console.error('Failed to initialize payment:', err);\r\n setError('Failed to load payment options. Please try again.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleMethodSelect = (method) => {\r\n setPaymentMethod(method);\r\n setCurrentStep('select-network');\r\n };\r\n\r\n const handleNetworkSelect = async (network) => {\r\n setSelectedNetwork(network);\r\n \r\n const networkTokens = tokens.filter(token => \r\n token.Network?.shortName === network.shortName || token.networkId === network.id\r\n );\r\n \r\n if (networkTokens.length > 0) {\r\n const preferredToken = networkTokens.find(t => t.symbol === 'USDT') || networkTokens[0];\r\n setSelectedToken(preferredToken);\r\n await initiatePayment(network, preferredToken);\r\n }\r\n };\r\n\r\n const initiatePayment = async (network, token) => {\r\n try {\r\n setLoading(true);\r\n \r\n const paymentPayload = {\r\n amount: config.amount,\r\n currency: token.symbol,\r\n network: network.shortName,\r\n customerEmail: config.customerEmail,\r\n callbackUrl: config.callbackUrl,\r\n metadata: {\r\n ...config.metadata,\r\n paymentMethod,\r\n selectedNetwork: network.shortName,\r\n selectedToken: token.symbol\r\n }\r\n };\r\n\r\n const payment = await paymentAPI.current.createPayment(paymentPayload);\r\n setPaymentData(payment.payment);\r\n\r\n if (paymentMethod === 'wallet') {\r\n setCurrentStep('wallet-connect');\r\n } else {\r\n await generateQRCode(payment.payment);\r\n setCurrentStep('qr-code');\r\n }\r\n } catch (err) {\r\n console.error('Payment initiation failed:', err);\r\n setError(err.message || 'Failed to create payment');\r\n setCurrentStep('error');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const generateQRCode = async (payment) => {\r\n try {\r\n const recipientAddress = payment.metadata?.recipientWallet || \r\n config.merchantWalletAddresses?.[selectedNetwork?.shortName || ''];\r\n \r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let qrData = '';\r\n \r\n if (selectedNetwork?.type === 'ethereum' || selectedNetwork?.type === 'bsc') {\r\n qrData = selectedToken?.contractAddress \r\n ? `ethereum:${selectedToken.contractAddress}/transfer?address=${recipientAddress}&uint256=${payment.totalAmount * Math.pow(10, selectedToken.decimals)}`\r\n : `ethereum:${recipientAddress}?value=${payment.totalAmount}e18`;\r\n } else if (selectedNetwork?.type === 'tron') {\r\n qrData = `tron:${recipientAddress}?amount=${payment.totalAmount}`;\r\n } else {\r\n qrData = `${selectedToken?.symbol}:${recipientAddress}?amount=${payment.totalAmount}`;\r\n }\r\n\r\n const qrCodeDataURL = await QRCodeLib.toDataURL(qrData, {\r\n width: 256,\r\n margin: 2,\r\n color: {\r\n dark: theme === 'dark' ? '#FFFFFF' : '#000000',\r\n light: theme === 'dark' ? '#000000' : '#FFFFFF'\r\n }\r\n });\r\n\r\n setQrCode(qrCodeDataURL);\r\n startPaymentVerification(payment.id);\r\n \r\n } catch (err) {\r\n console.error('QR code generation failed:', err);\r\n setError('Failed to generate QR code');\r\n setCurrentStep('error');\r\n }\r\n };\r\n\r\n const startPaymentVerification = async (paymentId) => {\r\n const maxAttempts = 60;\r\n let attempts = 0;\r\n\r\n const checkPayment = async () => {\r\n try {\r\n const result = await paymentAPI.current.verifyQRPayment(paymentId);\r\n \r\n if (result.verified && result.payment?.transactionHash) {\r\n setTxHash(result.payment.transactionHash);\r\n await handlePaymentSuccess(paymentId, result.payment.transactionHash);\r\n return true;\r\n }\r\n \r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification timeout. Please check your transaction.');\r\n setCurrentStep('error');\r\n }\r\n \r\n return false;\r\n } catch (err) {\r\n console.error('Payment verification error:', err);\r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification failed');\r\n setCurrentStep('error');\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n setTimeout(checkPayment, 2000);\r\n };\r\n\r\n const handleTransactionSent = async (transactionHash) => {\r\n setTxHash(transactionHash);\r\n setCurrentStep('processing');\r\n \r\n try {\r\n await paymentAPI.current.processPayment(\r\n paymentData.id,\r\n transactionHash,\r\n selectedNetwork?.shortName || '',\r\n ''\r\n );\r\n \r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n } catch (error) {\r\n console.error('Payment processing failed:', error);\r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n }\r\n };\r\n\r\n const handlePaymentSuccess = async (paymentId, transactionHash) => {\r\n setCurrentStep('success');\r\n \r\n if (onSuccess) {\r\n onSuccess(paymentId, transactionHash, {\r\n network: selectedNetwork?.name,\r\n token: selectedToken?.symbol,\r\n amount: paymentData?.totalAmount,\r\n method: paymentMethod\r\n });\r\n }\r\n };\r\n\r\n const copyToClipboard = async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setCurrentStep('select-method');\r\n setPaymentMethod(null);\r\n setSelectedNetwork(null);\r\n setSelectedToken(null);\r\n setQrCode('');\r\n setPaymentData(null);\r\n setError('');\r\n setTxHash('');\r\n \r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n const goBack = () => {\r\n if (currentStep === 'select-network') {\r\n setCurrentStep('select-method');\r\n } else if (currentStep === 'wallet-connect' || currentStep === 'qr-code') {\r\n setCurrentStep('select-network');\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <CoinleyWalletProvider config={walletConfig} walletConfig={{ appName: merchantName || 'Coinley Payment' }}>\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm\">\r\n <motion.div\r\n initial={{ scale: 0.9, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n exit={{ scale: 0.9, opacity: 0 }}\r\n className={`relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden ${\r\n theme === 'dark' ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'\r\n }`}\r\n >\r\n {/* Header */}\r\n <div className=\"relative p-6 border-b border-gray-200 dark:border-gray-700\">\r\n {(currentStep !== 'select-method' && currentStep !== 'success' && currentStep !== 'error') && (\r\n <button\r\n onClick={goBack}\r\n className=\"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <ArrowLeft className=\"w-5 h-5\" />\r\n </button>\r\n )}\r\n \r\n <button\r\n onClick={handleClose}\r\n className=\"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n \r\n <div className=\"text-center\">\r\n <div className=\"flex items-center justify-center space-x-2 mb-2\">\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n <h2 className=\"text-xl font-bold\">Pay with Crypto</h2>\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n </div>\r\n {merchantName && (\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\r\n {merchantName}\r\n </p>\r\n )}\r\n <div className=\"mt-2\">\r\n <span className=\"text-2xl font-bold text-[#7042D2]\">\r\n ${config.amount.toFixed(2)}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"p-6 min-h-[400px]\">\r\n <AnimatePresence mode=\"wait\">\r\n {/* Step 1: Select Payment Method */}\r\n {currentStep === 'select-method' && (\r\n <motion.div\r\n key=\"select-method\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Choose Payment Method\r\n </h3>\r\n \r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('wallet')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <Wallet className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">Connect Wallet</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n MetaMask, WalletConnect & more\r\n </div>\r\n </div>\r\n <Zap className=\"w-5 h-5 text-[#7042D2] ml-auto\" />\r\n </div>\r\n </motion.button>\r\n\r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('qr')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <QrCode className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">QR Code</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n Scan with mobile wallet\r\n </div>\r\n </div>\r\n </div>\r\n </motion.button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Step 2: Select Network */}\r\n {currentStep === 'select-network' && (\r\n <motion.div\r\n key=\"select-network\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Select Network\r\n </h3>\r\n \r\n {loading ? (\r\n <div className=\"flex justify-center py-8\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {networks.map((network) => (\r\n <motion.button\r\n key={network.id}\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleNetworkSelect(network)}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n {network.logo ? (\r\n <img \r\n src={network.logo} \r\n alt={network.name}\r\n className=\"w-8 h-8 rounded-full\"\r\n />\r\n ) : (\r\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\r\n <span className=\"text-sm font-bold text-[#7042D2]\">\r\n {network.shortName.charAt(0).toUpperCase()}\r\n </span>\r\n </div>\r\n )}\r\n <div className=\"text-left flex-1\">\r\n <div className=\"font-semibold\">{network.name}</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {network.shortName.toUpperCase()}\r\n </div>\r\n </div>\r\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\r\n </div>\r\n </motion.button>\r\n ))}\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Wallet Connect */}\r\n {currentStep === 'wallet-connect' && (\r\n <motion.div\r\n key=\"wallet-connect\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n >\r\n <WalletIntegration\r\n selectedNetwork={selectedNetwork}\r\n selectedToken={selectedToken}\r\n paymentData={paymentData}\r\n onTransactionSent={handleTransactionSent}\r\n onError={setError}\r\n isConnecting={isConnecting}\r\n setIsConnecting={setIsConnecting}\r\n />\r\n </motion.div>\r\n )}\r\n\r\n {/* QR Code */}\r\n {currentStep === 'qr-code' && (\r\n <motion.div\r\n key=\"qr-code\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"space-y-4\">\r\n <h3 className=\"text-lg font-semibold\">Scan QR Code</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Use your mobile wallet to scan and pay\r\n </p>\r\n </div>\r\n\r\n {qrCode && (\r\n <div className=\"bg-white p-4 rounded-xl mx-auto inline-block\">\r\n <img src={qrCode} alt=\"Payment QR Code\" className=\"w-48 h-48\" />\r\n </div>\r\n )}\r\n\r\n {paymentData && (\r\n <div className=\"space-y-3\">\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n </div>\r\n \r\n <div className=\"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span>Waiting for payment...</span>\r\n </div>\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Processing */}\r\n {currentStep === 'processing' && (\r\n <motion.div\r\n key=\"processing\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-[#7042D2]\">Processing Payment...</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your transaction is being processed\r\n </p>\r\n </div>\r\n </motion.div>\r\n )}\r\n\r\n {/* Success */}\r\n {currentStep === 'success' && (\r\n <motion.div\r\n key=\"success\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\r\n <CheckCircle2 className=\"w-8 h-8 text-green-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-green-600\">Payment Successful!</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your payment has been processed successfully\r\n </p>\r\n </div>\r\n\r\n {txHash && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Transaction:</span>\r\n <div className=\"flex items-center space-x-2\">\r\n <span className=\"font-mono text-sm\">\r\n {txHash.slice(0, 6)}...{txHash.slice(-4)}\r\n </span>\r\n <button\r\n onClick={() => copyToClipboard(txHash)}\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <Copy className=\"w-4 h-4\" />\r\n </button>\r\n {selectedNetwork?.explorerUrl && (\r\n <a\r\n href={`${selectedNetwork.explorerUrl}/tx/${txHash}`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <ExternalLink className=\"w-4 h-4\" />\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Error */}\r\n {currentStep === 'error' && (\r\n <motion.div\r\n key=\"error\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto\">\r\n <AlertCircle className=\"w-8 h-8 text-red-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-red-600\">Payment Failed</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n {error || 'Something went wrong. Please try again.'}\r\n </p>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n <button\r\n onClick={() => {\r\n setCurrentStep('select-method');\r\n setError('');\r\n }}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Try Again\r\n </button>\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center\">\r\n <p className=\"text-xs text-gray-500\">\r\n Powered by <span className=\"font-semibold text-[#7042D2]\">Coinley</span>\r\n </p>\r\n </div>\r\n </motion.div>\r\n </div>\r\n\r\n <WalletModal />\r\n </CoinleyWalletProvider>\r\n );\r\n};\r\n\r\nexport default CoinleyPayment;","//src/CoinleyProvider.jsx\r\nimport React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\r\nimport CoinleyPayment from './CoinleyPayment';\r\n\r\nconst CoinleyContext = createContext(null);\r\n\r\nexport const CoinleyProvider = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n theme = 'light',\r\n debug = false,\r\n children\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [paymentConfig, setPaymentConfig] = React.useState(null);\r\n const [callbacks, setCallbacks] = React.useState({});\r\n const [merchantName, setMerchantName] = React.useState('');\r\n\r\n const openPayment = (config, checkoutCallbacks) => {\r\n setPaymentConfig(config);\r\n if (checkoutCallbacks) {\r\n setCallbacks(checkoutCallbacks);\r\n }\r\n setIsOpen(true);\r\n };\r\n\r\n const closePayment = () => {\r\n setIsOpen(false);\r\n setPaymentConfig(null);\r\n if (callbacks.onClose) {\r\n callbacks.onClose();\r\n }\r\n };\r\n\r\n const contextValue = {\r\n openPayment,\r\n closePayment\r\n };\r\n\r\n return (\r\n <CoinleyContext.Provider value={contextValue}>\r\n {children}\r\n {isOpen && paymentConfig && (\r\n <CoinleyPayment\r\n apiKey={apiKey}\r\n apiSecret={apiSecret}\r\n apiUrl={apiUrl}\r\n isOpen={isOpen}\r\n config={paymentConfig}\r\n theme={theme}\r\n debug={debug}\r\n merchantName={merchantName}\r\n onSuccess={callbacks.onSuccess}\r\n onError={callbacks.onError}\r\n onClose={closePayment}\r\n />\r\n )}\r\n </CoinleyContext.Provider>\r\n );\r\n};\r\n\r\nexport const CoinleyCheckout = forwardRef((\r\n {\r\n customerEmail = '',\r\n merchantName = '',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n theme = 'light',\r\n autoOpen = false,\r\n testMode = false,\r\n debug = false,\r\n merchantWalletAddresses = {}\r\n },\r\n ref\r\n) => {\r\n const context = useContext(CoinleyContext);\r\n\r\n if (!context) {\r\n throw new Error('CoinleyCheckout must be used within a CoinleyProvider');\r\n }\r\n\r\n const { openPayment, closePayment } = context;\r\n\r\n const open = (config) => {\r\n try {\r\n if (debug) {\r\n console.log('Opening Coinley checkout with config:', config);\r\n }\r\n\r\n if (!config.amount || config.amount <= 0) {\r\n throw new Error('Amount must be greater than 0');\r\n }\r\n\r\n const finalConfig = {\r\n ...config,\r\n customerEmail: config.customerEmail || customerEmail,\r\n merchantWalletAddresses: {\r\n ...merchantWalletAddresses,\r\n ...config.merchantWalletAddresses\r\n },\r\n metadata: {\r\n ...config.metadata,\r\n testMode,\r\n checkoutVersion: '1.0.0'\r\n }\r\n };\r\n\r\n const checkoutCallbacks = {\r\n onSuccess,\r\n onError,\r\n onClose\r\n };\r\n\r\n openPayment(finalConfig, checkoutCallbacks);\r\n } catch (error) {\r\n console.error('Failed to open Coinley checkout:', error);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n const close = () => {\r\n closePayment();\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close\r\n }));\r\n\r\n return null;\r\n});\r\n\r\nCoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\nexport const useCoinley = () => {\r\n const context = useContext(CoinleyContext);\r\n if (!context) {\r\n throw new Error('useCoinley must be used within a CoinleyProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport const ThemeProvider = ({\r\n initialTheme = 'light',\r\n children\r\n}) => {\r\n const [theme, setTheme] = React.useState(initialTheme);\r\n\r\n React.useEffect(() => {\r\n document.documentElement.setAttribute('data-coinley-theme', theme);\r\n }, [theme]);\r\n\r\n const toggleTheme = () => {\r\n setTheme(prev => prev === 'light' ? 'dark' : 'light');\r\n };\r\n\r\n return (\r\n <div className={`coinley-theme-${theme}`}>\r\n {children}\r\n </div>\r\n );\r\n};","// Main SDK exports\r\nexport {\r\n CoinleyProvider,\r\n CoinleyCheckout,\r\n ThemeProvider,\r\n useCoinley\r\n} from './CoinleyProvider';\r\n\r\nexport { PaymentAPI } from './PaymentAPI';\r\nexport { default as CoinleyPayment } from './CoinleyPayment';\r\n\r\n// Import styles\r\nimport './styles/index.css';\r\n\r\n// Version\r\nexport const VERSION = '0.0.0';\r\n\r\n// Utils\r\nexport const utils = {\r\n formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\r\n \r\n truncateAddress: (address, startChars = 6, endChars = 4) => {\r\n if (!address) return '';\r\n if (address.length <= startChars + endChars) return address;\r\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\r\n },\r\n\r\n isValidAddress: (address, network) => {\r\n if (!address) return false;\r\n \r\n switch (network.toLowerCase()) {\r\n case 'ethereum':\r\n case 'bsc':\r\n case 'polygon':\r\n return /^0x[a-fA-F0-9]{40}$/.test(address);\r\n case 'tron':\r\n return /^T[a-zA-Z0-9]{33}$/.test(address);\r\n case 'solana':\r\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\r\n default:\r\n return address.length > 0;\r\n }\r\n },\r\n\r\n copyToClipboard: async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\n// Error classes\r\nexport class CoinleyError extends Error {\r\n constructor(message, code) {\r\n super(message);\r\n this.name = 'CoinleyError';\r\n this.code = code;\r\n }\r\n}\r\n\r\n// Default config\r\nexport const DEFAULT_CONFIG = {\r\n theme: 'light',\r\n debug: false,\r\n testMode: false,\r\n autoOpen: false\r\n};"],"names":["require$$0","jsxRuntimeModule","jsxs","jsx","error"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/PaymentAPI.js","../src/CoinleyPayment.jsx","../src/CoinleyProvider.jsx","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","//src/PaymentAPI.js\r\nimport axios from 'axios';\r\n\r\nexport class PaymentAPI {\r\n constructor(baseURL, apiKey, apiSecret) {\r\n this.apiKey = apiKey;\r\n this.apiSecret = apiSecret;\r\n\r\n this.api = axios.create({\r\n baseURL: baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL,\r\n timeout: 30000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // Add request interceptor\r\n this.api.interceptors.request.use(\r\n (config) => {\r\n config.headers['X-API-Key'] = this.apiKey;\r\n config.headers['X-API-Secret'] = this.apiSecret;\r\n \r\n const token = this.generateMerchantToken();\r\n if (token) {\r\n config.headers['Authorization'] = `Bearer ${token}`;\r\n }\r\n\r\n console.log('API Request:', {\r\n method: config.method?.toUpperCase(),\r\n url: config.url,\r\n data: config.data\r\n });\r\n\r\n return config;\r\n },\r\n (error) => {\r\n console.error('Request interceptor error:', error);\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n // Add response interceptor\r\n this.api.interceptors.response.use(\r\n (response) => {\r\n console.log('API Response:', {\r\n status: response.status,\r\n url: response.config.url,\r\n data: response.data\r\n });\r\n return response;\r\n },\r\n (error) => {\r\n console.error('API Error:', {\r\n status: error.response?.status,\r\n data: error.response?.data,\r\n message: error.message\r\n });\r\n\r\n if (error.response?.status === 401) {\r\n throw new Error('Authentication failed. Please check your API credentials.');\r\n } else if (error.response?.status === 404) {\r\n throw new Error('API endpoint not found. Please check your API URL.');\r\n } else if (error.response?.status >= 500) {\r\n throw new Error('Server error. Please try again later.');\r\n }\r\n\r\n throw error;\r\n }\r\n );\r\n }\r\n\r\n generateMerchantToken() {\r\n try {\r\n const credentials = `${this.apiKey}:${this.apiSecret}`;\r\n return btoa(credentials);\r\n } catch (error) {\r\n console.error('Failed to generate token:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async createPayment(params) {\r\n try {\r\n const response = await this.api.post('/api/payments/create', params);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to create payment');\r\n }\r\n }\r\n\r\n async getPayment(paymentId) {\r\n try {\r\n const response = await this.api.get(`/api/payments/${paymentId}`);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to get payment details');\r\n }\r\n }\r\n\r\n async getNetworks() {\r\n try {\r\n const response = await this.api.get('/api/networks');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get networks failed:', error);\r\n \r\n // Return fallback networks\r\n return {\r\n networks: [\r\n {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n chainId: '1',\r\n type: 'ethereum',\r\n explorerUrl: 'https://etherscan.io',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'bsc',\r\n name: 'Binance Smart Chain',\r\n shortName: 'bsc',\r\n chainId: '56',\r\n type: 'bsc',\r\n explorerUrl: 'https://bscscan.com',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'polygon',\r\n name: 'Polygon',\r\n shortName: 'polygon',\r\n chainId: '137',\r\n type: 'ethereum',\r\n explorerUrl: 'https://polygonscan.com',\r\n isTestnet: false,\r\n },\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async getStablecoins() {\r\n try {\r\n const response = await this.api.get('/api/networks/stablecoins');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get stablecoins failed:', error);\r\n \r\n // Return fallback stablecoins\r\n return {\r\n stablecoins: [\r\n {\r\n id: 'usdt-eth',\r\n name: 'Tether USD',\r\n symbol: 'USDT',\r\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n },\r\n {\r\n id: 'usdc-eth',\r\n name: 'USD Coin',\r\n symbol: 'USDC',\r\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async verifyQRPayment(paymentId) {\r\n try {\r\n const response = await this.api.post('/api/payments/verify-qr', {\r\n paymentId\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to verify payment');\r\n }\r\n }\r\n\r\n async processPayment(paymentId, transactionHash, network, senderAddress) {\r\n try {\r\n const response = await this.api.post('/api/payments/process', {\r\n paymentId,\r\n transactionHash,\r\n network,\r\n senderAddress\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to process payment');\r\n }\r\n }\r\n\r\n async healthCheck() {\r\n try {\r\n const response = await this.api.get('/api/health');\r\n return response.status === 200;\r\n } catch (error) {\r\n console.error('Health check failed:', error);\r\n return false;\r\n }\r\n }\r\n}","//src/CoinleyPayment.jsx\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { \r\n Wallet, \r\n QrCode, \r\n ChevronDown, \r\n Copy, \r\n Check, \r\n X, \r\n ArrowLeft,\r\n Loader2,\r\n ExternalLink,\r\n AlertCircle,\r\n CheckCircle2,\r\n Zap,\r\n Sparkles\r\n} from 'lucide-react';\r\n// import QRCodeLib from 'qrcode';\r\nimport { \r\n createCoinleyWalletConfig,\r\n CoinleyWalletProvider,\r\n ConnectButton,\r\n WalletModal,\r\n useWallet,\r\n useWalletConnect,\r\n useWalletTransaction,\r\n useWalletModal\r\n} from '@coinley/wallet-connect-core';\r\nimport { PaymentAPI } from './PaymentAPI';\r\n\r\n// Wallet Integration Component\r\nconst WalletIntegration = ({ \r\n selectedNetwork, \r\n selectedToken, \r\n paymentData, \r\n onTransactionSent, \r\n onError,\r\n isConnecting,\r\n setIsConnecting\r\n}) => {\r\n const { isConnected, address } = useWallet();\r\n const { connectWallet } = useWalletConnect();\r\n const { sendTransaction } = useWalletTransaction();\r\n const { openModal } = useWalletModal();\r\n\r\n useEffect(() => {\r\n if (isConnected && paymentData && selectedNetwork && selectedToken) {\r\n handleSendTransaction();\r\n }\r\n }, [isConnected, paymentData]);\r\n\r\n const handleConnectWallet = async () => {\r\n try {\r\n setIsConnecting(true);\r\n openModal();\r\n } catch (error) {\r\n console.error('Wallet connection failed:', error);\r\n onError(error.message || 'Failed to connect wallet');\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n const handleSendTransaction = async () => {\r\n if (!isConnected || !paymentData || !selectedToken) return;\r\n\r\n try {\r\n setIsConnecting(true);\r\n \r\n const recipientAddress = paymentData.metadata?.recipientWallet;\r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let txHash;\r\n\r\n if (selectedToken.contractAddress) {\r\n // ERC-20 Token Transaction\r\n const amount = (paymentData.totalAmount * Math.pow(10, selectedToken.decimals)).toString();\r\n const transferData = `0xa9059cbb${recipientAddress.slice(2).padStart(64, '0')}${parseInt(amount).toString(16).padStart(64, '0')}`;\r\n \r\n txHash = await sendTransaction({\r\n to: selectedToken.contractAddress,\r\n data: transferData,\r\n value: '0x0'\r\n });\r\n } else {\r\n // Native Token Transaction\r\n const value = (paymentData.totalAmount * Math.pow(10, 18)).toString(16);\r\n \r\n txHash = await sendTransaction({\r\n to: recipientAddress,\r\n value: `0x${value}`\r\n });\r\n }\r\n\r\n if (txHash) {\r\n onTransactionSent(txHash);\r\n }\r\n } catch (error) {\r\n console.error('Transaction failed:', error);\r\n onError(error.message || 'Transaction failed');\r\n } finally {\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"text-center space-y-6\">\r\n <div className=\"space-y-4\">\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Wallet className=\"w-8 h-8 text-[#7042D2]\" />\r\n </div>\r\n <h3 className=\"text-lg font-semibold\">\r\n {isConnected ? 'Send Payment' : 'Connect Your Wallet'}\r\n </h3>\r\n \r\n {!isConnected ? (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Connect your wallet to complete the payment\r\n </p>\r\n <ConnectButton \r\n theme=\"gradient\" \r\n size=\"large\"\r\n customText=\"Connect Wallet\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-green-600 dark:text-green-400\">\r\n ✅ Wallet Connected: {address?.slice(0, 6)}...{address?.slice(-4)}\r\n </p>\r\n \r\n {paymentData && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {isConnecting && (\r\n <div className=\"flex items-center justify-center space-x-2\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-[#7042D2]\" />\r\n <span>Processing transaction...</span>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst CoinleyPayment = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl = 'http://localhost:9000',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n isOpen,\r\n config,\r\n theme = 'light',\r\n merchantName,\r\n debug = false\r\n}) => {\r\n // State management\r\n const [currentStep, setCurrentStep] = useState('select-method');\r\n const [networks, setNetworks] = useState([]);\r\n const [tokens, setTokens] = useState([]);\r\n const [selectedNetwork, setSelectedNetwork] = useState(null);\r\n const [selectedToken, setSelectedToken] = useState(null);\r\n const [paymentMethod, setPaymentMethod] = useState(null);\r\n const [qrCode, setQrCode] = useState('');\r\n const [paymentData, setPaymentData] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n const [copied, setCopied] = useState(false);\r\n const [txHash, setTxHash] = useState('');\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n\r\n // Services\r\n const paymentAPI = useRef(new PaymentAPI(apiUrl, apiKey, apiSecret));\r\n\r\n // Wallet configuration\r\n const walletConfig = createCoinleyWalletConfig({\r\n appName: merchantName || 'Coinley Payment',\r\n appDescription: 'Crypto payment processing',\r\n chains: ['ethereum', 'polygon', 'bsc', 'arbitrum']\r\n });\r\n\r\n // Initialize\r\n useEffect(() => {\r\n if (isOpen) {\r\n initializePayment();\r\n }\r\n }, [isOpen]);\r\n\r\n const initializePayment = async () => {\r\n try {\r\n setLoading(true);\r\n setError('');\r\n \r\n const [networksRes, tokensRes] = await Promise.all([\r\n paymentAPI.current.getNetworks(),\r\n paymentAPI.current.getStablecoins()\r\n ]);\r\n\r\n setNetworks(networksRes.networks || []);\r\n setTokens(tokensRes.stablecoins || []);\r\n\r\n if (debug) {\r\n console.log('Initialized networks:', networksRes.networks);\r\n console.log('Initialized tokens:', tokensRes.stablecoins);\r\n }\r\n } catch (err) {\r\n console.error('Failed to initialize payment:', err);\r\n setError('Failed to load payment options. Please try again.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleMethodSelect = (method) => {\r\n setPaymentMethod(method);\r\n setCurrentStep('select-network');\r\n };\r\n\r\n const handleNetworkSelect = async (network) => {\r\n setSelectedNetwork(network);\r\n \r\n const networkTokens = tokens.filter(token => \r\n token.Network?.shortName === network.shortName || token.networkId === network.id\r\n );\r\n \r\n if (networkTokens.length > 0) {\r\n const preferredToken = networkTokens.find(t => t.symbol === 'USDT') || networkTokens[0];\r\n setSelectedToken(preferredToken);\r\n await initiatePayment(network, preferredToken);\r\n }\r\n };\r\n\r\n const initiatePayment = async (network, token) => {\r\n try {\r\n setLoading(true);\r\n \r\n const paymentPayload = {\r\n amount: config.amount,\r\n currency: token.symbol,\r\n network: network.shortName,\r\n customerEmail: config.customerEmail,\r\n callbackUrl: config.callbackUrl,\r\n metadata: {\r\n ...config.metadata,\r\n paymentMethod,\r\n selectedNetwork: network.shortName,\r\n selectedToken: token.symbol\r\n }\r\n };\r\n\r\n const payment = await paymentAPI.current.createPayment(paymentPayload);\r\n setPaymentData(payment.payment);\r\n\r\n if (paymentMethod === 'wallet') {\r\n setCurrentStep('wallet-connect');\r\n } else {\r\n await generateQRCode(payment.payment);\r\n setCurrentStep('qr-code');\r\n }\r\n } catch (err) {\r\n console.error('Payment initiation failed:', err);\r\n setError(err.message || 'Failed to create payment');\r\n setCurrentStep('error');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const generateQRCode = async (payment) => {\r\n try {\r\n const recipientAddress = payment.metadata?.recipientWallet || \r\n config.merchantWalletAddresses?.[selectedNetwork?.shortName || ''];\r\n \r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let qrData = '';\r\n \r\n if (selectedNetwork?.type === 'ethereum' || selectedNetwork?.type === 'bsc') {\r\n qrData = selectedToken?.contractAddress \r\n ? `ethereum:${selectedToken.contractAddress}/transfer?address=${recipientAddress}&uint256=${payment.totalAmount * Math.pow(10, selectedToken.decimals)}`\r\n : `ethereum:${recipientAddress}?value=${payment.totalAmount}e18`;\r\n } else if (selectedNetwork?.type === 'tron') {\r\n qrData = `tron:${recipientAddress}?amount=${payment.totalAmount}`;\r\n } else {\r\n qrData = `${selectedToken?.symbol}:${recipientAddress}?amount=${payment.totalAmount}`;\r\n }\r\n\r\n const qrCodeDataURL = await QRCodeLib.toDataURL(qrData, {\r\n width: 256,\r\n margin: 2,\r\n color: {\r\n dark: theme === 'dark' ? '#FFFFFF' : '#000000',\r\n light: theme === 'dark' ? '#000000' : '#FFFFFF'\r\n }\r\n });\r\n\r\n // setQrCode(qrCodeDataURL);\r\n setQrCode(recipientAddress);\r\n startPaymentVerification(payment.id);\r\n \r\n } catch (err) {\r\n console.error('QR code generation failed:', err);\r\n setError('Failed to generate QR code');\r\n setCurrentStep('error');\r\n }\r\n };\r\n\r\n const startPaymentVerification = async (paymentId) => {\r\n const maxAttempts = 60;\r\n let attempts = 0;\r\n\r\n const checkPayment = async () => {\r\n try {\r\n const result = await paymentAPI.current.verifyQRPayment(paymentId);\r\n \r\n if (result.verified && result.payment?.transactionHash) {\r\n setTxHash(result.payment.transactionHash);\r\n await handlePaymentSuccess(paymentId, result.payment.transactionHash);\r\n return true;\r\n }\r\n \r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification timeout. Please check your transaction.');\r\n setCurrentStep('error');\r\n }\r\n \r\n return false;\r\n } catch (err) {\r\n console.error('Payment verification error:', err);\r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification failed');\r\n setCurrentStep('error');\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n setTimeout(checkPayment, 2000);\r\n };\r\n\r\n const handleTransactionSent = async (transactionHash) => {\r\n setTxHash(transactionHash);\r\n setCurrentStep('processing');\r\n \r\n try {\r\n await paymentAPI.current.processPayment(\r\n paymentData.id,\r\n transactionHash,\r\n selectedNetwork?.shortName || '',\r\n ''\r\n );\r\n \r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n } catch (error) {\r\n console.error('Payment processing failed:', error);\r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n }\r\n };\r\n\r\n const handlePaymentSuccess = async (paymentId, transactionHash) => {\r\n setCurrentStep('success');\r\n \r\n if (onSuccess) {\r\n onSuccess(paymentId, transactionHash, {\r\n network: selectedNetwork?.name,\r\n token: selectedToken?.symbol,\r\n amount: paymentData?.totalAmount,\r\n method: paymentMethod\r\n });\r\n }\r\n };\r\n\r\n const copyToClipboard = async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setCurrentStep('select-method');\r\n setPaymentMethod(null);\r\n setSelectedNetwork(null);\r\n setSelectedToken(null);\r\n setQrCode('');\r\n setPaymentData(null);\r\n setError('');\r\n setTxHash('');\r\n \r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n const goBack = () => {\r\n if (currentStep === 'select-network') {\r\n setCurrentStep('select-method');\r\n } else if (currentStep === 'wallet-connect' || currentStep === 'qr-code') {\r\n setCurrentStep('select-network');\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <CoinleyWalletProvider config={walletConfig} walletConfig={{ appName: merchantName || 'Coinley Payment' }}>\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm\">\r\n <motion.div\r\n initial={{ scale: 0.9, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n exit={{ scale: 0.9, opacity: 0 }}\r\n className={`relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden ${\r\n theme === 'dark' ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'\r\n }`}\r\n >\r\n {/* Header */}\r\n <div className=\"relative p-6 border-b border-gray-200 dark:border-gray-700\">\r\n {(currentStep !== 'select-method' && currentStep !== 'success' && currentStep !== 'error') && (\r\n <button\r\n onClick={goBack}\r\n className=\"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <ArrowLeft className=\"w-5 h-5\" />\r\n </button>\r\n )}\r\n \r\n <button\r\n onClick={handleClose}\r\n className=\"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n \r\n <div className=\"text-center\">\r\n <div className=\"flex items-center justify-center space-x-2 mb-2\">\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n <h2 className=\"text-xl font-bold\">Pay with Crypto</h2>\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n </div>\r\n {merchantName && (\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\r\n {merchantName}\r\n </p>\r\n )}\r\n <div className=\"mt-2\">\r\n <span className=\"text-2xl font-bold text-[#7042D2]\">\r\n ${config.amount.toFixed(2)}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"p-6 min-h-[400px]\">\r\n <AnimatePresence mode=\"wait\">\r\n {/* Step 1: Select Payment Method */}\r\n {currentStep === 'select-method' && (\r\n <motion.div\r\n key=\"select-method\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Choose Payment Method\r\n </h3>\r\n \r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('wallet')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <Wallet className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">Connect Wallet</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n MetaMask, WalletConnect & more\r\n </div>\r\n </div>\r\n <Zap className=\"w-5 h-5 text-[#7042D2] ml-auto\" />\r\n </div>\r\n </motion.button>\r\n\r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('qr')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <QrCode className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">QR Code</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n Scan with mobile wallet\r\n </div>\r\n </div>\r\n </div>\r\n </motion.button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Step 2: Select Network */}\r\n {currentStep === 'select-network' && (\r\n <motion.div\r\n key=\"select-network\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Select Network\r\n </h3>\r\n \r\n {loading ? (\r\n <div className=\"flex justify-center py-8\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {networks.map((network) => (\r\n <motion.button\r\n key={network.id}\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleNetworkSelect(network)}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n {network.logo ? (\r\n <img \r\n src={network.logo} \r\n alt={network.name}\r\n className=\"w-8 h-8 rounded-full\"\r\n />\r\n ) : (\r\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\r\n <span className=\"text-sm font-bold text-[#7042D2]\">\r\n {network.shortName.charAt(0).toUpperCase()}\r\n </span>\r\n </div>\r\n )}\r\n <div className=\"text-left flex-1\">\r\n <div className=\"font-semibold\">{network.name}</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {network.shortName.toUpperCase()}\r\n </div>\r\n </div>\r\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\r\n </div>\r\n </motion.button>\r\n ))}\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Wallet Connect */}\r\n {currentStep === 'wallet-connect' && (\r\n <motion.div\r\n key=\"wallet-connect\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n >\r\n <WalletIntegration\r\n selectedNetwork={selectedNetwork}\r\n selectedToken={selectedToken}\r\n paymentData={paymentData}\r\n onTransactionSent={handleTransactionSent}\r\n onError={setError}\r\n isConnecting={isConnecting}\r\n setIsConnecting={setIsConnecting}\r\n />\r\n </motion.div>\r\n )}\r\n\r\n {/* QR Code */}\r\n {currentStep === 'qr-code' && (\r\n <motion.div\r\n key=\"qr-code\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"space-y-4\">\r\n <h3 className=\"text-lg font-semibold\">Scan QR Code</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Use your mobile wallet to scan and pay\r\n </p>\r\n </div>\r\n\r\n {qrCode && (\r\n <div className=\"bg-white p-4 rounded-xl mx-auto inline-block\">\r\n <img src={qrCode} alt=\"Payment QR Code\" className=\"w-48 h-48\" />\r\n </div>\r\n )}\r\n\r\n {paymentData && (\r\n <div className=\"space-y-3\">\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n </div>\r\n \r\n <div className=\"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span>Waiting for payment...</span>\r\n </div>\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Processing */}\r\n {currentStep === 'processing' && (\r\n <motion.div\r\n key=\"processing\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-[#7042D2]\">Processing Payment...</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your transaction is being processed\r\n </p>\r\n </div>\r\n </motion.div>\r\n )}\r\n\r\n {/* Success */}\r\n {currentStep === 'success' && (\r\n <motion.div\r\n key=\"success\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\r\n <CheckCircle2 className=\"w-8 h-8 text-green-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-green-600\">Payment Successful!</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your payment has been processed successfully\r\n </p>\r\n </div>\r\n\r\n {txHash && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Transaction:</span>\r\n <div className=\"flex items-center space-x-2\">\r\n <span className=\"font-mono text-sm\">\r\n {txHash.slice(0, 6)}...{txHash.slice(-4)}\r\n </span>\r\n <button\r\n onClick={() => copyToClipboard(txHash)}\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <Copy className=\"w-4 h-4\" />\r\n </button>\r\n {selectedNetwork?.explorerUrl && (\r\n <a\r\n href={`${selectedNetwork.explorerUrl}/tx/${txHash}`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <ExternalLink className=\"w-4 h-4\" />\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Error */}\r\n {currentStep === 'error' && (\r\n <motion.div\r\n key=\"error\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto\">\r\n <AlertCircle className=\"w-8 h-8 text-red-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-red-600\">Payment Failed</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n {error || 'Something went wrong. Please try again.'}\r\n </p>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n <button\r\n onClick={() => {\r\n setCurrentStep('select-method');\r\n setError('');\r\n }}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Try Again\r\n </button>\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center\">\r\n <p className=\"text-xs text-gray-500\">\r\n Powered by <span className=\"font-semibold text-[#7042D2]\">Coinley</span>\r\n </p>\r\n </div>\r\n </motion.div>\r\n </div>\r\n\r\n <WalletModal />\r\n </CoinleyWalletProvider>\r\n );\r\n};\r\n\r\nexport default CoinleyPayment;","//src/CoinleyProvider.jsx\r\nimport React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\r\nimport CoinleyPayment from './CoinleyPayment';\r\n\r\nconst CoinleyContext = createContext(null);\r\n\r\nexport const CoinleyProvider = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n theme = 'light',\r\n debug = false,\r\n children\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [paymentConfig, setPaymentConfig] = React.useState(null);\r\n const [callbacks, setCallbacks] = React.useState({});\r\n const [merchantName, setMerchantName] = React.useState('');\r\n\r\n const openPayment = (config, checkoutCallbacks) => {\r\n setPaymentConfig(config);\r\n if (checkoutCallbacks) {\r\n setCallbacks(checkoutCallbacks);\r\n }\r\n setIsOpen(true);\r\n };\r\n\r\n const closePayment = () => {\r\n setIsOpen(false);\r\n setPaymentConfig(null);\r\n if (callbacks.onClose) {\r\n callbacks.onClose();\r\n }\r\n };\r\n\r\n const contextValue = {\r\n openPayment,\r\n closePayment\r\n };\r\n\r\n return (\r\n <CoinleyContext.Provider value={contextValue}>\r\n {children}\r\n {isOpen && paymentConfig && (\r\n <CoinleyPayment\r\n apiKey={apiKey}\r\n apiSecret={apiSecret}\r\n apiUrl={apiUrl}\r\n isOpen={isOpen}\r\n config={paymentConfig}\r\n theme={theme}\r\n debug={debug}\r\n merchantName={merchantName}\r\n onSuccess={callbacks.onSuccess}\r\n onError={callbacks.onError}\r\n onClose={closePayment}\r\n />\r\n )}\r\n </CoinleyContext.Provider>\r\n );\r\n};\r\n\r\nexport const CoinleyCheckout = forwardRef((\r\n {\r\n customerEmail = '',\r\n merchantName = '',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n theme = 'light',\r\n autoOpen = false,\r\n testMode = false,\r\n debug = false,\r\n merchantWalletAddresses = {}\r\n },\r\n ref\r\n) => {\r\n const context = useContext(CoinleyContext);\r\n\r\n if (!context) {\r\n throw new Error('CoinleyCheckout must be used within a CoinleyProvider');\r\n }\r\n\r\n const { openPayment, closePayment } = context;\r\n\r\n const open = (config) => {\r\n try {\r\n if (debug) {\r\n console.log('Opening Coinley checkout with config:', config);\r\n }\r\n\r\n if (!config.amount || config.amount <= 0) {\r\n throw new Error('Amount must be greater than 0');\r\n }\r\n\r\n const finalConfig = {\r\n ...config,\r\n customerEmail: config.customerEmail || customerEmail,\r\n merchantWalletAddresses: {\r\n ...merchantWalletAddresses,\r\n ...config.merchantWalletAddresses\r\n },\r\n metadata: {\r\n ...config.metadata,\r\n testMode,\r\n checkoutVersion: '1.0.0'\r\n }\r\n };\r\n\r\n const checkoutCallbacks = {\r\n onSuccess,\r\n onError,\r\n onClose\r\n };\r\n\r\n openPayment(finalConfig, checkoutCallbacks);\r\n } catch (error) {\r\n console.error('Failed to open Coinley checkout:', error);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n const close = () => {\r\n closePayment();\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close\r\n }));\r\n\r\n return null;\r\n});\r\n\r\nCoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\nexport const useCoinley = () => {\r\n const context = useContext(CoinleyContext);\r\n if (!context) {\r\n throw new Error('useCoinley must be used within a CoinleyProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport const ThemeProvider = ({\r\n initialTheme = 'light',\r\n children\r\n}) => {\r\n const [theme, setTheme] = React.useState(initialTheme);\r\n\r\n React.useEffect(() => {\r\n document.documentElement.setAttribute('data-coinley-theme', theme);\r\n }, [theme]);\r\n\r\n const toggleTheme = () => {\r\n setTheme(prev => prev === 'light' ? 'dark' : 'light');\r\n };\r\n\r\n return (\r\n <div className={`coinley-theme-${theme}`}>\r\n {children}\r\n </div>\r\n );\r\n};","// Main SDK exports\r\nexport {\r\n CoinleyProvider,\r\n CoinleyCheckout,\r\n ThemeProvider,\r\n useCoinley\r\n} from './CoinleyProvider';\r\n\r\nexport { PaymentAPI } from './PaymentAPI';\r\nexport { default as CoinleyPayment } from './CoinleyPayment';\r\n\r\n// Import styles\r\nimport './styles/index.css';\r\n\r\n// Version\r\nexport const VERSION = '0.0.0';\r\n\r\n// Utils\r\nexport const utils = {\r\n formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\r\n \r\n truncateAddress: (address, startChars = 6, endChars = 4) => {\r\n if (!address) return '';\r\n if (address.length <= startChars + endChars) return address;\r\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\r\n },\r\n\r\n isValidAddress: (address, network) => {\r\n if (!address) return false;\r\n \r\n switch (network.toLowerCase()) {\r\n case 'ethereum':\r\n case 'bsc':\r\n case 'polygon':\r\n return /^0x[a-fA-F0-9]{40}$/.test(address);\r\n case 'tron':\r\n return /^T[a-zA-Z0-9]{33}$/.test(address);\r\n case 'solana':\r\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\r\n default:\r\n return address.length > 0;\r\n }\r\n },\r\n\r\n copyToClipboard: async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\n// Error classes\r\nexport class CoinleyError extends Error {\r\n constructor(message, code) {\r\n super(message);\r\n this.name = 'CoinleyError';\r\n this.code = code;\r\n }\r\n}\r\n\r\n// Default config\r\nexport const DEFAULT_CONFIG = {\r\n theme: 'light',\r\n debug: false,\r\n testMode: false,\r\n autoOpen: false\r\n};"],"names":["require$$0","jsxRuntimeModule","jsxs","jsx","error"],"mappings":"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","x_google_ignoreList":[0,1]}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("framer-motion"),require("lucide-react"),require("qrcode"),require("@coinley/wallet-connect-core"),require("axios")):"function"==typeof define&&define.amd?define(["exports","react","framer-motion","lucide-react","qrcode","@coinley/wallet-connect-core","axios"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).CoinleyTest={},e.React,e.FramerMotion,e.LucideReact,e.QRCode,e.CoinleyWalletCore,e.axios)}(this,function(e,t,a,s,r,n,o){"use strict";var l={exports:{}},i={},c=t,d=Symbol.for("react.element"),m=Symbol.for("react.fragment"),h=Object.prototype.hasOwnProperty,u=c.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,y={key:!0,ref:!0,__self:!0,__source:!0};function x(e,t,a){var s,r={},n=null,o=null;for(s in void 0!==a&&(n=""+a),void 0!==t.key&&(n=""+t.key),void 0!==t.ref&&(o=t.ref),t)h.call(t,s)&&!y.hasOwnProperty(s)&&(r[s]=t[s]);if(e&&e.defaultProps)for(s in t=e.defaultProps)void 0===r[s]&&(r[s]=t[s]);return{$$typeof:d,type:e,key:n,ref:o,props:r,_owner:u.current}}i.Fragment=m,i.jsx=x,i.jsxs=x,l.exports=i;var p=l.exports;class g{constructor(e,t,a){this.apiKey=t,this.apiSecret=a,this.api=o.create({baseURL:e.endsWith("/")?e.slice(0,-1):e,timeout:3e4,headers:{"Content-Type":"application/json"}}),this.api.interceptors.request.use(e=>{var t;e.headers["X-API-Key"]=this.apiKey,e.headers["X-API-Secret"]=this.apiSecret;const a=this.generateMerchantToken();return a&&(e.headers.Authorization=`Bearer ${a}`),console.log("API Request:",{method:null==(t=e.method)?void 0:t.toUpperCase(),url:e.url,data:e.data}),e},e=>(console.error("Request interceptor error:",e),Promise.reject(e))),this.api.interceptors.response.use(e=>(console.log("API Response:",{status:e.status,url:e.config.url,data:e.data}),e),e=>{var t,a,s,r,n;if(console.error("API Error:",{status:null==(t=e.response)?void 0:t.status,data:null==(a=e.response)?void 0:a.data,message:e.message}),401===(null==(s=e.response)?void 0:s.status))throw new Error("Authentication failed. Please check your API credentials.");if(404===(null==(r=e.response)?void 0:r.status))throw new Error("API endpoint not found. Please check your API URL.");if((null==(n=e.response)?void 0:n.status)>=500)throw new Error("Server error. Please try again later.");throw e})}generateMerchantToken(){try{const e=`${this.apiKey}:${this.apiSecret}`;return btoa(e)}catch(e){return console.error("Failed to generate token:",e),null}}async createPayment(e){var t,a;try{return(await this.api.post("/api/payments/create",e)).data}catch(s){if(null==(a=null==(t=s.response)?void 0:t.data)?void 0:a.error)throw new Error(s.response.data.error);throw new Error(s.message||"Failed to create payment")}}async getPayment(e){var t,a;try{return(await this.api.get(`/api/payments/${e}`)).data}catch(s){if(null==(a=null==(t=s.response)?void 0:t.data)?void 0:a.error)throw new Error(s.response.data.error);throw new Error(s.message||"Failed to get payment details")}}async getNetworks(){try{return(await this.api.get("/api/networks")).data}catch(e){return console.error("Get networks failed:",e),{networks:[{id:"ethereum",name:"Ethereum",shortName:"ethereum",chainId:"1",type:"ethereum",explorerUrl:"https://etherscan.io",isTestnet:!1},{id:"bsc",name:"Binance Smart Chain",shortName:"bsc",chainId:"56",type:"bsc",explorerUrl:"https://bscscan.com",isTestnet:!1},{id:"polygon",name:"Polygon",shortName:"polygon",chainId:"137",type:"ethereum",explorerUrl:"https://polygonscan.com",isTestnet:!1}]}}}async getStablecoins(){try{return(await this.api.get("/api/networks/stablecoins")).data}catch(e){return console.error("Get stablecoins failed:",e),{stablecoins:[{id:"usdt-eth",name:"Tether USD",symbol:"USDT",contractAddress:"0xdAC17F958D2ee523a2206206994597C13D831ec7",decimals:6,isStablecoin:!0,networkId:"ethereum",Network:{id:"ethereum",name:"Ethereum",shortName:"ethereum",type:"ethereum"}},{id:"usdc-eth",name:"USD Coin",symbol:"USDC",contractAddress:"0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6",decimals:6,isStablecoin:!0,networkId:"ethereum",Network:{id:"ethereum",name:"Ethereum",shortName:"ethereum",type:"ethereum"}}]}}}async verifyQRPayment(e){var t,a;try{return(await this.api.post("/api/payments/verify-qr",{paymentId:e})).data}catch(s){if(null==(a=null==(t=s.response)?void 0:t.data)?void 0:a.error)throw new Error(s.response.data.error);throw new Error(s.message||"Failed to verify payment")}}async processPayment(e,t,a,s){var r,n;try{return(await this.api.post("/api/payments/process",{paymentId:e,transactionHash:t,network:a,senderAddress:s})).data}catch(o){if(null==(n=null==(r=o.response)?void 0:r.data)?void 0:n.error)throw new Error(o.response.data.error);throw new Error(o.message||"Failed to process payment")}}async healthCheck(){try{return 200===(await this.api.get("/api/health")).status}catch(e){return console.error("Health check failed:",e),!1}}}const f=({selectedNetwork:e,selectedToken:a,paymentData:r,onTransactionSent:o,onError:l,isConnecting:i,setIsConnecting:c})=>{const{isConnected:d,address:m}=n.useWallet();n.useWalletConnect();const{sendTransaction:h}=n.useWalletTransaction();n.useWalletModal(),t.useEffect(()=>{d&&r&&e&&a&&u()},[d,r]);const u=async()=>{var e;if(d&&r&&a)try{c(!0);const t=null==(e=r.metadata)?void 0:e.recipientWallet;if(!t)throw new Error("Recipient wallet address not found");let s;if(a.contractAddress){const e=(r.totalAmount*Math.pow(10,a.decimals)).toString(),n=`0xa9059cbb${t.slice(2).padStart(64,"0")}${parseInt(e).toString(16).padStart(64,"0")}`;s=await h({to:a.contractAddress,data:n,value:"0x0"})}else{const e=(r.totalAmount*Math.pow(10,18)).toString(16);s=await h({to:t,value:`0x${e}`})}s&&o(s)}catch(t){console.error("Transaction failed:",t),l(t.message||"Transaction failed")}finally{c(!1)}};return p.jsx("div",{className:"text-center space-y-6",children:p.jsxs("div",{className:"space-y-4",children:[p.jsx("div",{className:"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto",children:p.jsx(s.Wallet,{className:"w-8 h-8 text-[#7042D2]"})}),p.jsx("h3",{className:"text-lg font-semibold",children:d?"Send Payment":"Connect Your Wallet"}),d?p.jsxs("div",{className:"space-y-4",children:[p.jsxs("p",{className:"text-green-600 dark:text-green-400",children:["✅ Wallet Connected: ",null==m?void 0:m.slice(0,6),"...",null==m?void 0:m.slice(-4)]}),r&&p.jsxs("div",{className:"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2",children:[p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Amount:"}),p.jsxs("span",{className:"font-medium",children:[r.totalAmount," ",null==a?void 0:a.symbol]})]}),p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Network:"}),p.jsx("span",{className:"font-medium",children:null==e?void 0:e.name})]})]}),i&&p.jsxs("div",{className:"flex items-center justify-center space-x-2",children:[p.jsx(s.Loader2,{className:"w-5 h-5 animate-spin text-[#7042D2]"}),p.jsx("span",{children:"Processing transaction..."})]})]}):p.jsxs("div",{className:"space-y-4",children:[p.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Connect your wallet to complete the payment"}),p.jsx(n.ConnectButton,{theme:"gradient",size:"large",customText:"Connect Wallet"})]})]})})},w=({apiKey:e,apiSecret:o,apiUrl:l="http://localhost:9000",onSuccess:i,onError:c,onClose:d,isOpen:m,config:h,theme:u="light",merchantName:y,debug:x=!1})=>{const[w,b]=t.useState("select-method"),[v,N]=t.useState([]),[j,k]=t.useState([]),[C,S]=t.useState(null),[P,E]=t.useState(null),[A,T]=t.useState(null),[D,F]=t.useState(""),[I,$]=t.useState(null),[R,U]=t.useState(!1),[W,_]=t.useState(""),[q,M]=t.useState(!1),[O,L]=t.useState(""),[H,Q]=t.useState(!1),z=t.useRef(new g(l,e,o)),K=n.createCoinleyWalletConfig({appName:y||"Coinley Payment",appDescription:"Crypto payment processing",chains:["ethereum","polygon","bsc","arbitrum"]});t.useEffect(()=>{m&&B()},[m]);const B=async()=>{try{U(!0),_("");const[e,t]=await Promise.all([z.current.getNetworks(),z.current.getStablecoins()]);N(e.networks||[]),k(t.stablecoins||[]),x&&(console.log("Initialized networks:",e.networks),console.log("Initialized tokens:",t.stablecoins))}catch(e){console.error("Failed to initialize payment:",e),_("Failed to load payment options. Please try again.")}finally{U(!1)}},Y=e=>{T(e),b("select-network")},G=async(e,t)=>{try{U(!0);const a={amount:h.amount,currency:t.symbol,network:e.shortName,customerEmail:h.customerEmail,callbackUrl:h.callbackUrl,metadata:{...h.metadata,paymentMethod:A,selectedNetwork:e.shortName,selectedToken:t.symbol}},s=await z.current.createPayment(a);$(s.payment),"wallet"===A?b("wallet-connect"):(await V(s.payment),b("qr-code"))}catch(a){console.error("Payment initiation failed:",a),_(a.message||"Failed to create payment"),b("error")}finally{U(!1)}},V=async e=>{var t,a;try{const s=(null==(t=e.metadata)?void 0:t.recipientWallet)||(null==(a=h.merchantWalletAddresses)?void 0:a[(null==C?void 0:C.shortName)||""]);if(!s)throw new Error("Recipient wallet address not found");let n="";n="ethereum"===(null==C?void 0:C.type)||"bsc"===(null==C?void 0:C.type)?(null==P?void 0:P.contractAddress)?`ethereum:${P.contractAddress}/transfer?address=${s}&uint256=${e.totalAmount*Math.pow(10,P.decimals)}`:`ethereum:${s}?value=${e.totalAmount}e18`:"tron"===(null==C?void 0:C.type)?`tron:${s}?amount=${e.totalAmount}`:`${null==P?void 0:P.symbol}:${s}?amount=${e.totalAmount}`;const o=await r.toDataURL(n,{width:256,margin:2,color:{dark:"dark"===u?"#FFFFFF":"#000000",light:"dark"===u?"#000000":"#FFFFFF"}});F(o),X(e.id)}catch(s){console.error("QR code generation failed:",s),_("Failed to generate QR code"),b("error")}},X=async e=>{let t=0;const a=async()=>{var s;try{const r=await z.current.verifyQRPayment(e);return r.verified&&(null==(s=r.payment)?void 0:s.transactionHash)?(L(r.payment.transactionHash),await Z(e,r.payment.transactionHash),!0):(t++,t<60?setTimeout(a,5e3):(_("Payment verification timeout. Please check your transaction."),b("error")),!1)}catch(r){return console.error("Payment verification error:",r),t++,t<60?setTimeout(a,5e3):(_("Payment verification failed"),b("error")),!1}};setTimeout(a,2e3)},Z=async(e,t)=>{b("success"),i&&i(e,t,{network:null==C?void 0:C.name,token:null==P?void 0:P.symbol,amount:null==I?void 0:I.totalAmount,method:A})},J=()=>{b("select-method"),T(null),S(null),E(null),F(""),$(null),_(""),L(""),d&&d()};return m?p.jsxs(n.CoinleyWalletProvider,{config:K,walletConfig:{appName:y||"Coinley Payment"},children:[p.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm",children:p.jsxs(a.motion.div,{initial:{scale:.9,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.9,opacity:0},className:"relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden "+("dark"===u?"bg-gray-900 text-white":"bg-white text-gray-900"),children:[p.jsxs("div",{className:"relative p-6 border-b border-gray-200 dark:border-gray-700",children:["select-method"!==w&&"success"!==w&&"error"!==w&&p.jsx("button",{onClick:()=>{"select-network"===w?b("select-method"):"wallet-connect"!==w&&"qr-code"!==w||b("select-network")},className:"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors",children:p.jsx(s.ArrowLeft,{className:"w-5 h-5"})}),p.jsx("button",{onClick:J,className:"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors",children:p.jsx(s.X,{className:"w-5 h-5"})}),p.jsxs("div",{className:"text-center",children:[p.jsxs("div",{className:"flex items-center justify-center space-x-2 mb-2",children:[p.jsx(s.Sparkles,{className:"w-5 h-5 text-[#7042D2]"}),p.jsx("h2",{className:"text-xl font-bold",children:"Pay with Crypto"}),p.jsx(s.Sparkles,{className:"w-5 h-5 text-[#7042D2]"})]}),y&&p.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mt-1",children:y}),p.jsx("div",{className:"mt-2",children:p.jsxs("span",{className:"text-2xl font-bold text-[#7042D2]",children:["$",h.amount.toFixed(2)]})})]})]}),p.jsx("div",{className:"p-6 min-h-[400px]",children:p.jsxs(a.AnimatePresence,{mode:"wait",children:["select-method"===w&&p.jsxs(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},className:"space-y-4",children:[p.jsx("h3",{className:"text-lg font-semibold text-center mb-6",children:"Choose Payment Method"}),p.jsx(a.motion.button,{whileHover:{scale:1.02},whileTap:{scale:.98},onClick:()=>Y("wallet"),className:"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group",children:p.jsxs("div",{className:"flex items-center space-x-4",children:[p.jsx("div",{className:"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors",children:p.jsx(s.Wallet,{className:"w-6 h-6 text-[#7042D2]"})}),p.jsxs("div",{className:"text-left",children:[p.jsx("div",{className:"font-semibold",children:"Connect Wallet"}),p.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:"MetaMask, WalletConnect & more"})]}),p.jsx(s.Zap,{className:"w-5 h-5 text-[#7042D2] ml-auto"})]})}),p.jsx(a.motion.button,{whileHover:{scale:1.02},whileTap:{scale:.98},onClick:()=>Y("qr"),className:"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group",children:p.jsxs("div",{className:"flex items-center space-x-4",children:[p.jsx("div",{className:"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors",children:p.jsx(s.QrCode,{className:"w-6 h-6 text-[#7042D2]"})}),p.jsxs("div",{className:"text-left",children:[p.jsx("div",{className:"font-semibold",children:"QR Code"}),p.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Scan with mobile wallet"})]})]})})]},"select-method"),"select-network"===w&&p.jsxs(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},className:"space-y-4",children:[p.jsx("h3",{className:"text-lg font-semibold text-center mb-6",children:"Select Network"}),R?p.jsx("div",{className:"flex justify-center py-8",children:p.jsx(s.Loader2,{className:"w-8 h-8 animate-spin text-[#7042D2]"})}):p.jsx("div",{className:"space-y-3",children:v.map(e=>p.jsx(a.motion.button,{whileHover:{scale:1.02},whileTap:{scale:.98},onClick:()=>(async e=>{S(e);const t=j.filter(t=>{var a;return(null==(a=t.Network)?void 0:a.shortName)===e.shortName||t.networkId===e.id});if(t.length>0){const a=t.find(e=>"USDT"===e.symbol)||t[0];E(a),await G(e,a)}})(e),className:"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group",children:p.jsxs("div",{className:"flex items-center space-x-4",children:[e.logo?p.jsx("img",{src:e.logo,alt:e.name,className:"w-8 h-8 rounded-full"}):p.jsx("div",{className:"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center",children:p.jsx("span",{className:"text-sm font-bold text-[#7042D2]",children:e.shortName.charAt(0).toUpperCase()})}),p.jsxs("div",{className:"text-left flex-1",children:[p.jsx("div",{className:"font-semibold",children:e.name}),p.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:e.shortName.toUpperCase()})]}),p.jsx(s.ChevronDown,{className:"w-5 h-5 text-gray-400 transform -rotate-90"})]})},e.id))})]},"select-network"),"wallet-connect"===w&&p.jsx(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},children:p.jsx(f,{selectedNetwork:C,selectedToken:P,paymentData:I,onTransactionSent:async e=>{L(e),b("processing");try{await z.current.processPayment(I.id,e,(null==C?void 0:C.shortName)||"",""),await Z(I.id,e)}catch(t){console.error("Payment processing failed:",t),await Z(I.id,e)}},onError:_,isConnecting:H,setIsConnecting:Q})},"wallet-connect"),"qr-code"===w&&p.jsxs(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},className:"text-center space-y-6",children:[p.jsxs("div",{className:"space-y-4",children:[p.jsx("h3",{className:"text-lg font-semibold",children:"Scan QR Code"}),p.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Use your mobile wallet to scan and pay"})]}),D&&p.jsx("div",{className:"bg-white p-4 rounded-xl mx-auto inline-block",children:p.jsx("img",{src:D,alt:"Payment QR Code",className:"w-48 h-48"})}),I&&p.jsxs("div",{className:"space-y-3",children:[p.jsxs("div",{className:"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2",children:[p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Network:"}),p.jsx("span",{className:"font-medium",children:null==C?void 0:C.name})]}),p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Amount:"}),p.jsxs("span",{className:"font-medium",children:[I.totalAmount," ",null==P?void 0:P.symbol]})]})]}),p.jsxs("div",{className:"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400",children:[p.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}),p.jsx("span",{children:"Waiting for payment..."})]})]})]},"qr-code"),"processing"===w&&p.jsxs(a.motion.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},className:"text-center space-y-6",children:[p.jsx("div",{className:"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto",children:p.jsx(s.Loader2,{className:"w-8 h-8 animate-spin text-[#7042D2]"})}),p.jsxs("div",{children:[p.jsx("h3",{className:"text-lg font-semibold text-[#7042D2]",children:"Processing Payment..."}),p.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-2",children:"Your transaction is being processed"})]})]},"processing"),"success"===w&&p.jsxs(a.motion.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},className:"text-center space-y-6",children:[p.jsx("div",{className:"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto",children:p.jsx(s.CheckCircle2,{className:"w-8 h-8 text-green-500"})}),p.jsxs("div",{children:[p.jsx("h3",{className:"text-lg font-semibold text-green-600",children:"Payment Successful!"}),p.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-2",children:"Your payment has been processed successfully"})]}),O&&p.jsx("div",{className:"bg-gray-50 dark:bg-gray-800 rounded-lg p-4",children:p.jsxs("div",{className:"flex justify-between items-center",children:[p.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Transaction:"}),p.jsxs("div",{className:"flex items-center space-x-2",children:[p.jsxs("span",{className:"font-mono text-sm",children:[O.slice(0,6),"...",O.slice(-4)]}),p.jsx("button",{onClick:()=>(async e=>{try{await navigator.clipboard.writeText(e),M(!0),setTimeout(()=>M(!1),2e3)}catch(t){console.error("Failed to copy:",t)}})(O),className:"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded",children:p.jsx(s.Copy,{className:"w-4 h-4"})}),(null==C?void 0:C.explorerUrl)&&p.jsx("a",{href:`${C.explorerUrl}/tx/${O}`,target:"_blank",rel:"noopener noreferrer",className:"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded",children:p.jsx(s.ExternalLink,{className:"w-4 h-4"})})]})]})}),p.jsx("button",{onClick:J,className:"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors",children:"Close"})]},"success"),"error"===w&&p.jsxs(a.motion.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},className:"text-center space-y-6",children:[p.jsx("div",{className:"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto",children:p.jsx(s.AlertCircle,{className:"w-8 h-8 text-red-500"})}),p.jsxs("div",{children:[p.jsx("h3",{className:"text-lg font-semibold text-red-600",children:"Payment Failed"}),p.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-2",children:W||"Something went wrong. Please try again."})]}),p.jsxs("div",{className:"space-y-3",children:[p.jsx("button",{onClick:()=>{b("select-method"),_("")},className:"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors",children:"Try Again"}),p.jsx("button",{onClick:J,className:"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:"Close"})]})]},"error")]})}),p.jsx("div",{className:"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center",children:p.jsxs("p",{className:"text-xs text-gray-500",children:["Powered by ",p.jsx("span",{className:"font-semibold text-[#7042D2]",children:"Coinley"})]})})]})}),p.jsx(n.WalletModal,{})]}):null},b=t.createContext(null),v=t.forwardRef(({customerEmail:e="",merchantName:a="",onSuccess:s,onError:r,onClose:n,theme:o="light",autoOpen:l=!1,testMode:i=!1,debug:c=!1,merchantWalletAddresses:d={}},m)=>{const h=t.useContext(b);if(!h)throw new Error("CoinleyCheckout must be used within a CoinleyProvider");const{openPayment:u,closePayment:y}=h,x=t=>{try{if(c&&console.log("Opening Coinley checkout with config:",t),!t.amount||t.amount<=0)throw new Error("Amount must be greater than 0");const a={...t,customerEmail:t.customerEmail||e,merchantWalletAddresses:{...d,...t.merchantWalletAddresses},metadata:{...t.metadata,testMode:i,checkoutVersion:"1.0.0"}};u(a,{onSuccess:s,onError:r,onClose:n})}catch(a){console.error("Failed to open Coinley checkout:",a),r&&r(a)}},p=()=>{y()};return t.useImperativeHandle(m,()=>({open:x,close:p})),null});v.displayName="CoinleyCheckout";const N={formatAmount:(e,t=2)=>e.toFixed(t),truncateAddress:(e,t=6,a=4)=>e?e.length<=t+a?e:`${e.slice(0,t)}...${e.slice(-a)}`:"",isValidAddress:(e,t)=>{if(!e)return!1;switch(t.toLowerCase()){case"ethereum":case"bsc":case"polygon":return/^0x[a-fA-F0-9]{40}$/.test(e);case"tron":return/^T[a-zA-Z0-9]{33}$/.test(e);case"solana":return/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(e);default:return e.length>0}},copyToClipboard:async e=>{try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}};class j extends Error{constructor(e,t){super(e),this.name="CoinleyError",this.code=t}}e.CoinleyCheckout=v,e.CoinleyError=j,e.CoinleyPayment=w,e.CoinleyProvider=({apiKey:e,apiSecret:a,apiUrl:s,theme:r="light",debug:n=!1,children:o})=>{const[l,i]=t.useState(!1),[c,d]=t.useState(null),[m,h]=t.useState({}),[u,y]=t.useState(""),x=()=>{i(!1),d(null),m.onClose&&m.onClose()},g={openPayment:(e,t)=>{d(e),t&&h(t),i(!0)},closePayment:x};return p.jsxs(b.Provider,{value:g,children:[o,l&&c&&p.jsx(w,{apiKey:e,apiSecret:a,apiUrl:s,isOpen:l,config:c,theme:r,debug:n,merchantName:u,onSuccess:m.onSuccess,onError:m.onError,onClose:x})]})},e.DEFAULT_CONFIG={theme:"light",debug:!1,testMode:!1,autoOpen:!1},e.PaymentAPI=g,e.ThemeProvider=({initialTheme:e="light",children:a})=>{const[s,r]=t.useState(e);return t.useEffect(()=>{document.documentElement.setAttribute("data-coinley-theme",s)},[s]),p.jsx("div",{className:`coinley-theme-${s}`,children:a})},e.VERSION="0.0.0",e.useCoinley=()=>{const e=t.useContext(b);if(!e)throw new Error("useCoinley must be used within a CoinleyProvider");return e},e.utils=N,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("framer-motion"),require("lucide-react"),require("@coinley/wallet-connect-core"),require("axios")):"function"==typeof define&&define.amd?define(["exports","react","framer-motion","lucide-react","@coinley/wallet-connect-core","axios"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).CoinleyTest={},e.React,e.FramerMotion,e.LucideReact,e.CoinleyWalletCore,e.axios)}(this,function(e,t,a,s,r,n){"use strict";var o={exports:{}},l={},i=t,c=Symbol.for("react.element"),d=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,h=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,u={key:!0,ref:!0,__self:!0,__source:!0};function y(e,t,a){var s,r={},n=null,o=null;for(s in void 0!==a&&(n=""+a),void 0!==t.key&&(n=""+t.key),void 0!==t.ref&&(o=t.ref),t)m.call(t,s)&&!u.hasOwnProperty(s)&&(r[s]=t[s]);if(e&&e.defaultProps)for(s in t=e.defaultProps)void 0===r[s]&&(r[s]=t[s]);return{$$typeof:c,type:e,key:n,ref:o,props:r,_owner:h.current}}l.Fragment=d,l.jsx=y,l.jsxs=y,o.exports=l;var x=o.exports;class p{constructor(e,t,a){this.apiKey=t,this.apiSecret=a,this.api=n.create({baseURL:e.endsWith("/")?e.slice(0,-1):e,timeout:3e4,headers:{"Content-Type":"application/json"}}),this.api.interceptors.request.use(e=>{var t;e.headers["X-API-Key"]=this.apiKey,e.headers["X-API-Secret"]=this.apiSecret;const a=this.generateMerchantToken();return a&&(e.headers.Authorization=`Bearer ${a}`),console.log("API Request:",{method:null==(t=e.method)?void 0:t.toUpperCase(),url:e.url,data:e.data}),e},e=>(console.error("Request interceptor error:",e),Promise.reject(e))),this.api.interceptors.response.use(e=>(console.log("API Response:",{status:e.status,url:e.config.url,data:e.data}),e),e=>{var t,a,s,r,n;if(console.error("API Error:",{status:null==(t=e.response)?void 0:t.status,data:null==(a=e.response)?void 0:a.data,message:e.message}),401===(null==(s=e.response)?void 0:s.status))throw new Error("Authentication failed. Please check your API credentials.");if(404===(null==(r=e.response)?void 0:r.status))throw new Error("API endpoint not found. Please check your API URL.");if((null==(n=e.response)?void 0:n.status)>=500)throw new Error("Server error. Please try again later.");throw e})}generateMerchantToken(){try{const e=`${this.apiKey}:${this.apiSecret}`;return btoa(e)}catch(e){return console.error("Failed to generate token:",e),null}}async createPayment(e){var t,a;try{return(await this.api.post("/api/payments/create",e)).data}catch(s){if(null==(a=null==(t=s.response)?void 0:t.data)?void 0:a.error)throw new Error(s.response.data.error);throw new Error(s.message||"Failed to create payment")}}async getPayment(e){var t,a;try{return(await this.api.get(`/api/payments/${e}`)).data}catch(s){if(null==(a=null==(t=s.response)?void 0:t.data)?void 0:a.error)throw new Error(s.response.data.error);throw new Error(s.message||"Failed to get payment details")}}async getNetworks(){try{return(await this.api.get("/api/networks")).data}catch(e){return console.error("Get networks failed:",e),{networks:[{id:"ethereum",name:"Ethereum",shortName:"ethereum",chainId:"1",type:"ethereum",explorerUrl:"https://etherscan.io",isTestnet:!1},{id:"bsc",name:"Binance Smart Chain",shortName:"bsc",chainId:"56",type:"bsc",explorerUrl:"https://bscscan.com",isTestnet:!1},{id:"polygon",name:"Polygon",shortName:"polygon",chainId:"137",type:"ethereum",explorerUrl:"https://polygonscan.com",isTestnet:!1}]}}}async getStablecoins(){try{return(await this.api.get("/api/networks/stablecoins")).data}catch(e){return console.error("Get stablecoins failed:",e),{stablecoins:[{id:"usdt-eth",name:"Tether USD",symbol:"USDT",contractAddress:"0xdAC17F958D2ee523a2206206994597C13D831ec7",decimals:6,isStablecoin:!0,networkId:"ethereum",Network:{id:"ethereum",name:"Ethereum",shortName:"ethereum",type:"ethereum"}},{id:"usdc-eth",name:"USD Coin",symbol:"USDC",contractAddress:"0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6",decimals:6,isStablecoin:!0,networkId:"ethereum",Network:{id:"ethereum",name:"Ethereum",shortName:"ethereum",type:"ethereum"}}]}}}async verifyQRPayment(e){var t,a;try{return(await this.api.post("/api/payments/verify-qr",{paymentId:e})).data}catch(s){if(null==(a=null==(t=s.response)?void 0:t.data)?void 0:a.error)throw new Error(s.response.data.error);throw new Error(s.message||"Failed to verify payment")}}async processPayment(e,t,a,s){var r,n;try{return(await this.api.post("/api/payments/process",{paymentId:e,transactionHash:t,network:a,senderAddress:s})).data}catch(o){if(null==(n=null==(r=o.response)?void 0:r.data)?void 0:n.error)throw new Error(o.response.data.error);throw new Error(o.message||"Failed to process payment")}}async healthCheck(){try{return 200===(await this.api.get("/api/health")).status}catch(e){return console.error("Health check failed:",e),!1}}}const g=({selectedNetwork:e,selectedToken:a,paymentData:n,onTransactionSent:o,onError:l,isConnecting:i,setIsConnecting:c})=>{const{isConnected:d,address:m}=r.useWallet();r.useWalletConnect();const{sendTransaction:h}=r.useWalletTransaction();r.useWalletModal(),t.useEffect(()=>{d&&n&&e&&a&&u()},[d,n]);const u=async()=>{var e;if(d&&n&&a)try{c(!0);const t=null==(e=n.metadata)?void 0:e.recipientWallet;if(!t)throw new Error("Recipient wallet address not found");let s;if(a.contractAddress){const e=(n.totalAmount*Math.pow(10,a.decimals)).toString(),r=`0xa9059cbb${t.slice(2).padStart(64,"0")}${parseInt(e).toString(16).padStart(64,"0")}`;s=await h({to:a.contractAddress,data:r,value:"0x0"})}else{const e=(n.totalAmount*Math.pow(10,18)).toString(16);s=await h({to:t,value:`0x${e}`})}s&&o(s)}catch(t){console.error("Transaction failed:",t),l(t.message||"Transaction failed")}finally{c(!1)}};return x.jsx("div",{className:"text-center space-y-6",children:x.jsxs("div",{className:"space-y-4",children:[x.jsx("div",{className:"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto",children:x.jsx(s.Wallet,{className:"w-8 h-8 text-[#7042D2]"})}),x.jsx("h3",{className:"text-lg font-semibold",children:d?"Send Payment":"Connect Your Wallet"}),d?x.jsxs("div",{className:"space-y-4",children:[x.jsxs("p",{className:"text-green-600 dark:text-green-400",children:["✅ Wallet Connected: ",null==m?void 0:m.slice(0,6),"...",null==m?void 0:m.slice(-4)]}),n&&x.jsxs("div",{className:"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2",children:[x.jsxs("div",{className:"flex justify-between items-center",children:[x.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Amount:"}),x.jsxs("span",{className:"font-medium",children:[n.totalAmount," ",null==a?void 0:a.symbol]})]}),x.jsxs("div",{className:"flex justify-between items-center",children:[x.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Network:"}),x.jsx("span",{className:"font-medium",children:null==e?void 0:e.name})]})]}),i&&x.jsxs("div",{className:"flex items-center justify-center space-x-2",children:[x.jsx(s.Loader2,{className:"w-5 h-5 animate-spin text-[#7042D2]"}),x.jsx("span",{children:"Processing transaction..."})]})]}):x.jsxs("div",{className:"space-y-4",children:[x.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Connect your wallet to complete the payment"}),x.jsx(r.ConnectButton,{theme:"gradient",size:"large",customText:"Connect Wallet"})]})]})})},f=({apiKey:e,apiSecret:n,apiUrl:o="http://localhost:9000",onSuccess:l,onError:i,onClose:c,isOpen:d,config:m,theme:h="light",merchantName:u,debug:y=!1})=>{const[f,w]=t.useState("select-method"),[b,v]=t.useState([]),[N,j]=t.useState([]),[k,C]=t.useState(null),[S,P]=t.useState(null),[E,A]=t.useState(null),[T,D]=t.useState(""),[F,I]=t.useState(null),[$,R]=t.useState(!1),[U,W]=t.useState(""),[_,L]=t.useState(!1),[M,O]=t.useState(""),[q,H]=t.useState(!1),Q=t.useRef(new p(o,e,n)),z=r.createCoinleyWalletConfig({appName:u||"Coinley Payment",appDescription:"Crypto payment processing",chains:["ethereum","polygon","bsc","arbitrum"]});t.useEffect(()=>{d&&K()},[d]);const K=async()=>{try{R(!0),W("");const[e,t]=await Promise.all([Q.current.getNetworks(),Q.current.getStablecoins()]);v(e.networks||[]),j(t.stablecoins||[]),y&&(console.log("Initialized networks:",e.networks),console.log("Initialized tokens:",t.stablecoins))}catch(e){console.error("Failed to initialize payment:",e),W("Failed to load payment options. Please try again.")}finally{R(!1)}},B=e=>{A(e),w("select-network")},Y=async(e,t)=>{try{R(!0);const a={amount:m.amount,currency:t.symbol,network:e.shortName,customerEmail:m.customerEmail,callbackUrl:m.callbackUrl,metadata:{...m.metadata,paymentMethod:E,selectedNetwork:e.shortName,selectedToken:t.symbol}},s=await Q.current.createPayment(a);I(s.payment),"wallet"===E?w("wallet-connect"):(await G(s.payment),w("qr-code"))}catch(a){console.error("Payment initiation failed:",a),W(a.message||"Failed to create payment"),w("error")}finally{R(!1)}},G=async e=>{var t,a;try{const s=(null==(t=e.metadata)?void 0:t.recipientWallet)||(null==(a=m.merchantWalletAddresses)?void 0:a[(null==k?void 0:k.shortName)||""]);if(!s)throw new Error("Recipient wallet address not found");let r="";r="ethereum"===(null==k?void 0:k.type)||"bsc"===(null==k?void 0:k.type)?(null==S?void 0:S.contractAddress)?`ethereum:${S.contractAddress}/transfer?address=${s}&uint256=${e.totalAmount*Math.pow(10,S.decimals)}`:`ethereum:${s}?value=${e.totalAmount}e18`:"tron"===(null==k?void 0:k.type)?`tron:${s}?amount=${e.totalAmount}`:`${null==S?void 0:S.symbol}:${s}?amount=${e.totalAmount}`;await QRCodeLib.toDataURL(r,{width:256,margin:2,color:{dark:"dark"===h?"#FFFFFF":"#000000",light:"dark"===h?"#000000":"#FFFFFF"}});D(s),V(e.id)}catch(s){console.error("QR code generation failed:",s),W("Failed to generate QR code"),w("error")}},V=async e=>{let t=0;const a=async()=>{var s;try{const r=await Q.current.verifyQRPayment(e);return r.verified&&(null==(s=r.payment)?void 0:s.transactionHash)?(O(r.payment.transactionHash),await X(e,r.payment.transactionHash),!0):(t++,t<60?setTimeout(a,5e3):(W("Payment verification timeout. Please check your transaction."),w("error")),!1)}catch(r){return console.error("Payment verification error:",r),t++,t<60?setTimeout(a,5e3):(W("Payment verification failed"),w("error")),!1}};setTimeout(a,2e3)},X=async(e,t)=>{w("success"),l&&l(e,t,{network:null==k?void 0:k.name,token:null==S?void 0:S.symbol,amount:null==F?void 0:F.totalAmount,method:E})},Z=()=>{w("select-method"),A(null),C(null),P(null),D(""),I(null),W(""),O(""),c&&c()};return d?x.jsxs(r.CoinleyWalletProvider,{config:z,walletConfig:{appName:u||"Coinley Payment"},children:[x.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm",children:x.jsxs(a.motion.div,{initial:{scale:.9,opacity:0},animate:{scale:1,opacity:1},exit:{scale:.9,opacity:0},className:"relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden "+("dark"===h?"bg-gray-900 text-white":"bg-white text-gray-900"),children:[x.jsxs("div",{className:"relative p-6 border-b border-gray-200 dark:border-gray-700",children:["select-method"!==f&&"success"!==f&&"error"!==f&&x.jsx("button",{onClick:()=>{"select-network"===f?w("select-method"):"wallet-connect"!==f&&"qr-code"!==f||w("select-network")},className:"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors",children:x.jsx(s.ArrowLeft,{className:"w-5 h-5"})}),x.jsx("button",{onClick:Z,className:"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors",children:x.jsx(s.X,{className:"w-5 h-5"})}),x.jsxs("div",{className:"text-center",children:[x.jsxs("div",{className:"flex items-center justify-center space-x-2 mb-2",children:[x.jsx(s.Sparkles,{className:"w-5 h-5 text-[#7042D2]"}),x.jsx("h2",{className:"text-xl font-bold",children:"Pay with Crypto"}),x.jsx(s.Sparkles,{className:"w-5 h-5 text-[#7042D2]"})]}),u&&x.jsx("p",{className:"text-sm text-gray-600 dark:text-gray-400 mt-1",children:u}),x.jsx("div",{className:"mt-2",children:x.jsxs("span",{className:"text-2xl font-bold text-[#7042D2]",children:["$",m.amount.toFixed(2)]})})]})]}),x.jsx("div",{className:"p-6 min-h-[400px]",children:x.jsxs(a.AnimatePresence,{mode:"wait",children:["select-method"===f&&x.jsxs(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},className:"space-y-4",children:[x.jsx("h3",{className:"text-lg font-semibold text-center mb-6",children:"Choose Payment Method"}),x.jsx(a.motion.button,{whileHover:{scale:1.02},whileTap:{scale:.98},onClick:()=>B("wallet"),className:"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group",children:x.jsxs("div",{className:"flex items-center space-x-4",children:[x.jsx("div",{className:"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors",children:x.jsx(s.Wallet,{className:"w-6 h-6 text-[#7042D2]"})}),x.jsxs("div",{className:"text-left",children:[x.jsx("div",{className:"font-semibold",children:"Connect Wallet"}),x.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:"MetaMask, WalletConnect & more"})]}),x.jsx(s.Zap,{className:"w-5 h-5 text-[#7042D2] ml-auto"})]})}),x.jsx(a.motion.button,{whileHover:{scale:1.02},whileTap:{scale:.98},onClick:()=>B("qr"),className:"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group",children:x.jsxs("div",{className:"flex items-center space-x-4",children:[x.jsx("div",{className:"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors",children:x.jsx(s.QrCode,{className:"w-6 h-6 text-[#7042D2]"})}),x.jsxs("div",{className:"text-left",children:[x.jsx("div",{className:"font-semibold",children:"QR Code"}),x.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Scan with mobile wallet"})]})]})})]},"select-method"),"select-network"===f&&x.jsxs(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},className:"space-y-4",children:[x.jsx("h3",{className:"text-lg font-semibold text-center mb-6",children:"Select Network"}),$?x.jsx("div",{className:"flex justify-center py-8",children:x.jsx(s.Loader2,{className:"w-8 h-8 animate-spin text-[#7042D2]"})}):x.jsx("div",{className:"space-y-3",children:b.map(e=>x.jsx(a.motion.button,{whileHover:{scale:1.02},whileTap:{scale:.98},onClick:()=>(async e=>{C(e);const t=N.filter(t=>{var a;return(null==(a=t.Network)?void 0:a.shortName)===e.shortName||t.networkId===e.id});if(t.length>0){const a=t.find(e=>"USDT"===e.symbol)||t[0];P(a),await Y(e,a)}})(e),className:"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group",children:x.jsxs("div",{className:"flex items-center space-x-4",children:[e.logo?x.jsx("img",{src:e.logo,alt:e.name,className:"w-8 h-8 rounded-full"}):x.jsx("div",{className:"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center",children:x.jsx("span",{className:"text-sm font-bold text-[#7042D2]",children:e.shortName.charAt(0).toUpperCase()})}),x.jsxs("div",{className:"text-left flex-1",children:[x.jsx("div",{className:"font-semibold",children:e.name}),x.jsx("div",{className:"text-sm text-gray-600 dark:text-gray-400",children:e.shortName.toUpperCase()})]}),x.jsx(s.ChevronDown,{className:"w-5 h-5 text-gray-400 transform -rotate-90"})]})},e.id))})]},"select-network"),"wallet-connect"===f&&x.jsx(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},children:x.jsx(g,{selectedNetwork:k,selectedToken:S,paymentData:F,onTransactionSent:async e=>{O(e),w("processing");try{await Q.current.processPayment(F.id,e,(null==k?void 0:k.shortName)||"",""),await X(F.id,e)}catch(t){console.error("Payment processing failed:",t),await X(F.id,e)}},onError:W,isConnecting:q,setIsConnecting:H})},"wallet-connect"),"qr-code"===f&&x.jsxs(a.motion.div,{initial:{x:20,opacity:0},animate:{x:0,opacity:1},exit:{x:-20,opacity:0},className:"text-center space-y-6",children:[x.jsxs("div",{className:"space-y-4",children:[x.jsx("h3",{className:"text-lg font-semibold",children:"Scan QR Code"}),x.jsx("p",{className:"text-gray-600 dark:text-gray-400",children:"Use your mobile wallet to scan and pay"})]}),T&&x.jsx("div",{className:"bg-white p-4 rounded-xl mx-auto inline-block",children:x.jsx("img",{src:T,alt:"Payment QR Code",className:"w-48 h-48"})}),F&&x.jsxs("div",{className:"space-y-3",children:[x.jsxs("div",{className:"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2",children:[x.jsxs("div",{className:"flex justify-between items-center",children:[x.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Network:"}),x.jsx("span",{className:"font-medium",children:null==k?void 0:k.name})]}),x.jsxs("div",{className:"flex justify-between items-center",children:[x.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Amount:"}),x.jsxs("span",{className:"font-medium",children:[F.totalAmount," ",null==S?void 0:S.symbol]})]})]}),x.jsxs("div",{className:"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400",children:[x.jsx(s.Loader2,{className:"w-4 h-4 animate-spin"}),x.jsx("span",{children:"Waiting for payment..."})]})]})]},"qr-code"),"processing"===f&&x.jsxs(a.motion.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},className:"text-center space-y-6",children:[x.jsx("div",{className:"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto",children:x.jsx(s.Loader2,{className:"w-8 h-8 animate-spin text-[#7042D2]"})}),x.jsxs("div",{children:[x.jsx("h3",{className:"text-lg font-semibold text-[#7042D2]",children:"Processing Payment..."}),x.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-2",children:"Your transaction is being processed"})]})]},"processing"),"success"===f&&x.jsxs(a.motion.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},className:"text-center space-y-6",children:[x.jsx("div",{className:"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto",children:x.jsx(s.CheckCircle2,{className:"w-8 h-8 text-green-500"})}),x.jsxs("div",{children:[x.jsx("h3",{className:"text-lg font-semibold text-green-600",children:"Payment Successful!"}),x.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-2",children:"Your payment has been processed successfully"})]}),M&&x.jsx("div",{className:"bg-gray-50 dark:bg-gray-800 rounded-lg p-4",children:x.jsxs("div",{className:"flex justify-between items-center",children:[x.jsx("span",{className:"text-sm text-gray-600 dark:text-gray-400",children:"Transaction:"}),x.jsxs("div",{className:"flex items-center space-x-2",children:[x.jsxs("span",{className:"font-mono text-sm",children:[M.slice(0,6),"...",M.slice(-4)]}),x.jsx("button",{onClick:()=>(async e=>{try{await navigator.clipboard.writeText(e),L(!0),setTimeout(()=>L(!1),2e3)}catch(t){console.error("Failed to copy:",t)}})(M),className:"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded",children:x.jsx(s.Copy,{className:"w-4 h-4"})}),(null==k?void 0:k.explorerUrl)&&x.jsx("a",{href:`${k.explorerUrl}/tx/${M}`,target:"_blank",rel:"noopener noreferrer",className:"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded",children:x.jsx(s.ExternalLink,{className:"w-4 h-4"})})]})]})}),x.jsx("button",{onClick:Z,className:"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors",children:"Close"})]},"success"),"error"===f&&x.jsxs(a.motion.div,{initial:{scale:.8,opacity:0},animate:{scale:1,opacity:1},className:"text-center space-y-6",children:[x.jsx("div",{className:"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto",children:x.jsx(s.AlertCircle,{className:"w-8 h-8 text-red-500"})}),x.jsxs("div",{children:[x.jsx("h3",{className:"text-lg font-semibold text-red-600",children:"Payment Failed"}),x.jsx("p",{className:"text-gray-600 dark:text-gray-400 mt-2",children:U||"Something went wrong. Please try again."})]}),x.jsxs("div",{className:"space-y-3",children:[x.jsx("button",{onClick:()=>{w("select-method"),W("")},className:"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors",children:"Try Again"}),x.jsx("button",{onClick:Z,className:"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors",children:"Close"})]})]},"error")]})}),x.jsx("div",{className:"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center",children:x.jsxs("p",{className:"text-xs text-gray-500",children:["Powered by ",x.jsx("span",{className:"font-semibold text-[#7042D2]",children:"Coinley"})]})})]})}),x.jsx(r.WalletModal,{})]}):null},w=t.createContext(null),b=t.forwardRef(({customerEmail:e="",merchantName:a="",onSuccess:s,onError:r,onClose:n,theme:o="light",autoOpen:l=!1,testMode:i=!1,debug:c=!1,merchantWalletAddresses:d={}},m)=>{const h=t.useContext(w);if(!h)throw new Error("CoinleyCheckout must be used within a CoinleyProvider");const{openPayment:u,closePayment:y}=h,x=t=>{try{if(c&&console.log("Opening Coinley checkout with config:",t),!t.amount||t.amount<=0)throw new Error("Amount must be greater than 0");const a={...t,customerEmail:t.customerEmail||e,merchantWalletAddresses:{...d,...t.merchantWalletAddresses},metadata:{...t.metadata,testMode:i,checkoutVersion:"1.0.0"}};u(a,{onSuccess:s,onError:r,onClose:n})}catch(a){console.error("Failed to open Coinley checkout:",a),r&&r(a)}},p=()=>{y()};return t.useImperativeHandle(m,()=>({open:x,close:p})),null});b.displayName="CoinleyCheckout";const v={formatAmount:(e,t=2)=>e.toFixed(t),truncateAddress:(e,t=6,a=4)=>e?e.length<=t+a?e:`${e.slice(0,t)}...${e.slice(-a)}`:"",isValidAddress:(e,t)=>{if(!e)return!1;switch(t.toLowerCase()){case"ethereum":case"bsc":case"polygon":return/^0x[a-fA-F0-9]{40}$/.test(e);case"tron":return/^T[a-zA-Z0-9]{33}$/.test(e);case"solana":return/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(e);default:return e.length>0}},copyToClipboard:async e=>{try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}};class N extends Error{constructor(e,t){super(e),this.name="CoinleyError",this.code=t}}e.CoinleyCheckout=b,e.CoinleyError=N,e.CoinleyPayment=f,e.CoinleyProvider=({apiKey:e,apiSecret:a,apiUrl:s,theme:r="light",debug:n=!1,children:o})=>{const[l,i]=t.useState(!1),[c,d]=t.useState(null),[m,h]=t.useState({}),[u,y]=t.useState(""),p=()=>{i(!1),d(null),m.onClose&&m.onClose()},g={openPayment:(e,t)=>{d(e),t&&h(t),i(!0)},closePayment:p};return x.jsxs(w.Provider,{value:g,children:[o,l&&c&&x.jsx(f,{apiKey:e,apiSecret:a,apiUrl:s,isOpen:l,config:c,theme:r,debug:n,merchantName:u,onSuccess:m.onSuccess,onError:m.onError,onClose:p})]})},e.DEFAULT_CONFIG={theme:"light",debug:!1,testMode:!1,autoOpen:!1},e.PaymentAPI=p,e.ThemeProvider=({initialTheme:e="light",children:a})=>{const[s,r]=t.useState(e);return t.useEffect(()=>{document.documentElement.setAttribute("data-coinley-theme",s)},[s]),x.jsx("div",{className:`coinley-theme-${s}`,children:a})},e.VERSION="0.0.0",e.useCoinley=()=>{const e=t.useContext(w);if(!e)throw new Error("useCoinley must be used within a CoinleyProvider");return e},e.utils=v,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/PaymentAPI.js","../src/CoinleyPayment.jsx","../src/CoinleyProvider.jsx","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","//src/PaymentAPI.js\r\nimport axios from 'axios';\r\n\r\nexport class PaymentAPI {\r\n constructor(baseURL, apiKey, apiSecret) {\r\n this.apiKey = apiKey;\r\n this.apiSecret = apiSecret;\r\n\r\n this.api = axios.create({\r\n baseURL: baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL,\r\n timeout: 30000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // Add request interceptor\r\n this.api.interceptors.request.use(\r\n (config) => {\r\n config.headers['X-API-Key'] = this.apiKey;\r\n config.headers['X-API-Secret'] = this.apiSecret;\r\n \r\n const token = this.generateMerchantToken();\r\n if (token) {\r\n config.headers['Authorization'] = `Bearer ${token}`;\r\n }\r\n\r\n console.log('API Request:', {\r\n method: config.method?.toUpperCase(),\r\n url: config.url,\r\n data: config.data\r\n });\r\n\r\n return config;\r\n },\r\n (error) => {\r\n console.error('Request interceptor error:', error);\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n // Add response interceptor\r\n this.api.interceptors.response.use(\r\n (response) => {\r\n console.log('API Response:', {\r\n status: response.status,\r\n url: response.config.url,\r\n data: response.data\r\n });\r\n return response;\r\n },\r\n (error) => {\r\n console.error('API Error:', {\r\n status: error.response?.status,\r\n data: error.response?.data,\r\n message: error.message\r\n });\r\n\r\n if (error.response?.status === 401) {\r\n throw new Error('Authentication failed. Please check your API credentials.');\r\n } else if (error.response?.status === 404) {\r\n throw new Error('API endpoint not found. Please check your API URL.');\r\n } else if (error.response?.status >= 500) {\r\n throw new Error('Server error. Please try again later.');\r\n }\r\n\r\n throw error;\r\n }\r\n );\r\n }\r\n\r\n generateMerchantToken() {\r\n try {\r\n const credentials = `${this.apiKey}:${this.apiSecret}`;\r\n return btoa(credentials);\r\n } catch (error) {\r\n console.error('Failed to generate token:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async createPayment(params) {\r\n try {\r\n const response = await this.api.post('/api/payments/create', params);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to create payment');\r\n }\r\n }\r\n\r\n async getPayment(paymentId) {\r\n try {\r\n const response = await this.api.get(`/api/payments/${paymentId}`);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to get payment details');\r\n }\r\n }\r\n\r\n async getNetworks() {\r\n try {\r\n const response = await this.api.get('/api/networks');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get networks failed:', error);\r\n \r\n // Return fallback networks\r\n return {\r\n networks: [\r\n {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n chainId: '1',\r\n type: 'ethereum',\r\n explorerUrl: 'https://etherscan.io',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'bsc',\r\n name: 'Binance Smart Chain',\r\n shortName: 'bsc',\r\n chainId: '56',\r\n type: 'bsc',\r\n explorerUrl: 'https://bscscan.com',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'polygon',\r\n name: 'Polygon',\r\n shortName: 'polygon',\r\n chainId: '137',\r\n type: 'ethereum',\r\n explorerUrl: 'https://polygonscan.com',\r\n isTestnet: false,\r\n },\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async getStablecoins() {\r\n try {\r\n const response = await this.api.get('/api/networks/stablecoins');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get stablecoins failed:', error);\r\n \r\n // Return fallback stablecoins\r\n return {\r\n stablecoins: [\r\n {\r\n id: 'usdt-eth',\r\n name: 'Tether USD',\r\n symbol: 'USDT',\r\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n },\r\n {\r\n id: 'usdc-eth',\r\n name: 'USD Coin',\r\n symbol: 'USDC',\r\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async verifyQRPayment(paymentId) {\r\n try {\r\n const response = await this.api.post('/api/payments/verify-qr', {\r\n paymentId\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to verify payment');\r\n }\r\n }\r\n\r\n async processPayment(paymentId, transactionHash, network, senderAddress) {\r\n try {\r\n const response = await this.api.post('/api/payments/process', {\r\n paymentId,\r\n transactionHash,\r\n network,\r\n senderAddress\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to process payment');\r\n }\r\n }\r\n\r\n async healthCheck() {\r\n try {\r\n const response = await this.api.get('/api/health');\r\n return response.status === 200;\r\n } catch (error) {\r\n console.error('Health check failed:', error);\r\n return false;\r\n }\r\n }\r\n}","//src/CoinleyPayment.jsx\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { \r\n Wallet, \r\n QrCode, \r\n ChevronDown, \r\n Copy, \r\n Check, \r\n X, \r\n ArrowLeft,\r\n Loader2,\r\n ExternalLink,\r\n AlertCircle,\r\n CheckCircle2,\r\n Zap,\r\n Sparkles\r\n} from 'lucide-react';\r\nimport QRCodeLib from 'qrcode';\r\nimport { \r\n createCoinleyWalletConfig,\r\n CoinleyWalletProvider,\r\n ConnectButton,\r\n WalletModal,\r\n useWallet,\r\n useWalletConnect,\r\n useWalletTransaction,\r\n useWalletModal\r\n} from '@coinley/wallet-connect-core';\r\nimport { PaymentAPI } from './PaymentAPI';\r\n\r\n// Wallet Integration Component\r\nconst WalletIntegration = ({ \r\n selectedNetwork, \r\n selectedToken, \r\n paymentData, \r\n onTransactionSent, \r\n onError,\r\n isConnecting,\r\n setIsConnecting\r\n}) => {\r\n const { isConnected, address } = useWallet();\r\n const { connectWallet } = useWalletConnect();\r\n const { sendTransaction } = useWalletTransaction();\r\n const { openModal } = useWalletModal();\r\n\r\n useEffect(() => {\r\n if (isConnected && paymentData && selectedNetwork && selectedToken) {\r\n handleSendTransaction();\r\n }\r\n }, [isConnected, paymentData]);\r\n\r\n const handleConnectWallet = async () => {\r\n try {\r\n setIsConnecting(true);\r\n openModal();\r\n } catch (error) {\r\n console.error('Wallet connection failed:', error);\r\n onError(error.message || 'Failed to connect wallet');\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n const handleSendTransaction = async () => {\r\n if (!isConnected || !paymentData || !selectedToken) return;\r\n\r\n try {\r\n setIsConnecting(true);\r\n \r\n const recipientAddress = paymentData.metadata?.recipientWallet;\r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let txHash;\r\n\r\n if (selectedToken.contractAddress) {\r\n // ERC-20 Token Transaction\r\n const amount = (paymentData.totalAmount * Math.pow(10, selectedToken.decimals)).toString();\r\n const transferData = `0xa9059cbb${recipientAddress.slice(2).padStart(64, '0')}${parseInt(amount).toString(16).padStart(64, '0')}`;\r\n \r\n txHash = await sendTransaction({\r\n to: selectedToken.contractAddress,\r\n data: transferData,\r\n value: '0x0'\r\n });\r\n } else {\r\n // Native Token Transaction\r\n const value = (paymentData.totalAmount * Math.pow(10, 18)).toString(16);\r\n \r\n txHash = await sendTransaction({\r\n to: recipientAddress,\r\n value: `0x${value}`\r\n });\r\n }\r\n\r\n if (txHash) {\r\n onTransactionSent(txHash);\r\n }\r\n } catch (error) {\r\n console.error('Transaction failed:', error);\r\n onError(error.message || 'Transaction failed');\r\n } finally {\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"text-center space-y-6\">\r\n <div className=\"space-y-4\">\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Wallet className=\"w-8 h-8 text-[#7042D2]\" />\r\n </div>\r\n <h3 className=\"text-lg font-semibold\">\r\n {isConnected ? 'Send Payment' : 'Connect Your Wallet'}\r\n </h3>\r\n \r\n {!isConnected ? (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Connect your wallet to complete the payment\r\n </p>\r\n <ConnectButton \r\n theme=\"gradient\" \r\n size=\"large\"\r\n customText=\"Connect Wallet\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-green-600 dark:text-green-400\">\r\n ✅ Wallet Connected: {address?.slice(0, 6)}...{address?.slice(-4)}\r\n </p>\r\n \r\n {paymentData && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {isConnecting && (\r\n <div className=\"flex items-center justify-center space-x-2\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-[#7042D2]\" />\r\n <span>Processing transaction...</span>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst CoinleyPayment = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl = 'http://localhost:9000',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n isOpen,\r\n config,\r\n theme = 'light',\r\n merchantName,\r\n debug = false\r\n}) => {\r\n // State management\r\n const [currentStep, setCurrentStep] = useState('select-method');\r\n const [networks, setNetworks] = useState([]);\r\n const [tokens, setTokens] = useState([]);\r\n const [selectedNetwork, setSelectedNetwork] = useState(null);\r\n const [selectedToken, setSelectedToken] = useState(null);\r\n const [paymentMethod, setPaymentMethod] = useState(null);\r\n const [qrCode, setQrCode] = useState('');\r\n const [paymentData, setPaymentData] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n const [copied, setCopied] = useState(false);\r\n const [txHash, setTxHash] = useState('');\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n\r\n // Services\r\n const paymentAPI = useRef(new PaymentAPI(apiUrl, apiKey, apiSecret));\r\n\r\n // Wallet configuration\r\n const walletConfig = createCoinleyWalletConfig({\r\n appName: merchantName || 'Coinley Payment',\r\n appDescription: 'Crypto payment processing',\r\n chains: ['ethereum', 'polygon', 'bsc', 'arbitrum']\r\n });\r\n\r\n // Initialize\r\n useEffect(() => {\r\n if (isOpen) {\r\n initializePayment();\r\n }\r\n }, [isOpen]);\r\n\r\n const initializePayment = async () => {\r\n try {\r\n setLoading(true);\r\n setError('');\r\n \r\n const [networksRes, tokensRes] = await Promise.all([\r\n paymentAPI.current.getNetworks(),\r\n paymentAPI.current.getStablecoins()\r\n ]);\r\n\r\n setNetworks(networksRes.networks || []);\r\n setTokens(tokensRes.stablecoins || []);\r\n\r\n if (debug) {\r\n console.log('Initialized networks:', networksRes.networks);\r\n console.log('Initialized tokens:', tokensRes.stablecoins);\r\n }\r\n } catch (err) {\r\n console.error('Failed to initialize payment:', err);\r\n setError('Failed to load payment options. Please try again.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleMethodSelect = (method) => {\r\n setPaymentMethod(method);\r\n setCurrentStep('select-network');\r\n };\r\n\r\n const handleNetworkSelect = async (network) => {\r\n setSelectedNetwork(network);\r\n \r\n const networkTokens = tokens.filter(token => \r\n token.Network?.shortName === network.shortName || token.networkId === network.id\r\n );\r\n \r\n if (networkTokens.length > 0) {\r\n const preferredToken = networkTokens.find(t => t.symbol === 'USDT') || networkTokens[0];\r\n setSelectedToken(preferredToken);\r\n await initiatePayment(network, preferredToken);\r\n }\r\n };\r\n\r\n const initiatePayment = async (network, token) => {\r\n try {\r\n setLoading(true);\r\n \r\n const paymentPayload = {\r\n amount: config.amount,\r\n currency: token.symbol,\r\n network: network.shortName,\r\n customerEmail: config.customerEmail,\r\n callbackUrl: config.callbackUrl,\r\n metadata: {\r\n ...config.metadata,\r\n paymentMethod,\r\n selectedNetwork: network.shortName,\r\n selectedToken: token.symbol\r\n }\r\n };\r\n\r\n const payment = await paymentAPI.current.createPayment(paymentPayload);\r\n setPaymentData(payment.payment);\r\n\r\n if (paymentMethod === 'wallet') {\r\n setCurrentStep('wallet-connect');\r\n } else {\r\n await generateQRCode(payment.payment);\r\n setCurrentStep('qr-code');\r\n }\r\n } catch (err) {\r\n console.error('Payment initiation failed:', err);\r\n setError(err.message || 'Failed to create payment');\r\n setCurrentStep('error');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const generateQRCode = async (payment) => {\r\n try {\r\n const recipientAddress = payment.metadata?.recipientWallet || \r\n config.merchantWalletAddresses?.[selectedNetwork?.shortName || ''];\r\n \r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let qrData = '';\r\n \r\n if (selectedNetwork?.type === 'ethereum' || selectedNetwork?.type === 'bsc') {\r\n qrData = selectedToken?.contractAddress \r\n ? `ethereum:${selectedToken.contractAddress}/transfer?address=${recipientAddress}&uint256=${payment.totalAmount * Math.pow(10, selectedToken.decimals)}`\r\n : `ethereum:${recipientAddress}?value=${payment.totalAmount}e18`;\r\n } else if (selectedNetwork?.type === 'tron') {\r\n qrData = `tron:${recipientAddress}?amount=${payment.totalAmount}`;\r\n } else {\r\n qrData = `${selectedToken?.symbol}:${recipientAddress}?amount=${payment.totalAmount}`;\r\n }\r\n\r\n const qrCodeDataURL = await QRCodeLib.toDataURL(qrData, {\r\n width: 256,\r\n margin: 2,\r\n color: {\r\n dark: theme === 'dark' ? '#FFFFFF' : '#000000',\r\n light: theme === 'dark' ? '#000000' : '#FFFFFF'\r\n }\r\n });\r\n\r\n setQrCode(qrCodeDataURL);\r\n startPaymentVerification(payment.id);\r\n \r\n } catch (err) {\r\n console.error('QR code generation failed:', err);\r\n setError('Failed to generate QR code');\r\n setCurrentStep('error');\r\n }\r\n };\r\n\r\n const startPaymentVerification = async (paymentId) => {\r\n const maxAttempts = 60;\r\n let attempts = 0;\r\n\r\n const checkPayment = async () => {\r\n try {\r\n const result = await paymentAPI.current.verifyQRPayment(paymentId);\r\n \r\n if (result.verified && result.payment?.transactionHash) {\r\n setTxHash(result.payment.transactionHash);\r\n await handlePaymentSuccess(paymentId, result.payment.transactionHash);\r\n return true;\r\n }\r\n \r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification timeout. Please check your transaction.');\r\n setCurrentStep('error');\r\n }\r\n \r\n return false;\r\n } catch (err) {\r\n console.error('Payment verification error:', err);\r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification failed');\r\n setCurrentStep('error');\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n setTimeout(checkPayment, 2000);\r\n };\r\n\r\n const handleTransactionSent = async (transactionHash) => {\r\n setTxHash(transactionHash);\r\n setCurrentStep('processing');\r\n \r\n try {\r\n await paymentAPI.current.processPayment(\r\n paymentData.id,\r\n transactionHash,\r\n selectedNetwork?.shortName || '',\r\n ''\r\n );\r\n \r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n } catch (error) {\r\n console.error('Payment processing failed:', error);\r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n }\r\n };\r\n\r\n const handlePaymentSuccess = async (paymentId, transactionHash) => {\r\n setCurrentStep('success');\r\n \r\n if (onSuccess) {\r\n onSuccess(paymentId, transactionHash, {\r\n network: selectedNetwork?.name,\r\n token: selectedToken?.symbol,\r\n amount: paymentData?.totalAmount,\r\n method: paymentMethod\r\n });\r\n }\r\n };\r\n\r\n const copyToClipboard = async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setCurrentStep('select-method');\r\n setPaymentMethod(null);\r\n setSelectedNetwork(null);\r\n setSelectedToken(null);\r\n setQrCode('');\r\n setPaymentData(null);\r\n setError('');\r\n setTxHash('');\r\n \r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n const goBack = () => {\r\n if (currentStep === 'select-network') {\r\n setCurrentStep('select-method');\r\n } else if (currentStep === 'wallet-connect' || currentStep === 'qr-code') {\r\n setCurrentStep('select-network');\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <CoinleyWalletProvider config={walletConfig} walletConfig={{ appName: merchantName || 'Coinley Payment' }}>\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm\">\r\n <motion.div\r\n initial={{ scale: 0.9, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n exit={{ scale: 0.9, opacity: 0 }}\r\n className={`relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden ${\r\n theme === 'dark' ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'\r\n }`}\r\n >\r\n {/* Header */}\r\n <div className=\"relative p-6 border-b border-gray-200 dark:border-gray-700\">\r\n {(currentStep !== 'select-method' && currentStep !== 'success' && currentStep !== 'error') && (\r\n <button\r\n onClick={goBack}\r\n className=\"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <ArrowLeft className=\"w-5 h-5\" />\r\n </button>\r\n )}\r\n \r\n <button\r\n onClick={handleClose}\r\n className=\"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n \r\n <div className=\"text-center\">\r\n <div className=\"flex items-center justify-center space-x-2 mb-2\">\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n <h2 className=\"text-xl font-bold\">Pay with Crypto</h2>\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n </div>\r\n {merchantName && (\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\r\n {merchantName}\r\n </p>\r\n )}\r\n <div className=\"mt-2\">\r\n <span className=\"text-2xl font-bold text-[#7042D2]\">\r\n ${config.amount.toFixed(2)}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"p-6 min-h-[400px]\">\r\n <AnimatePresence mode=\"wait\">\r\n {/* Step 1: Select Payment Method */}\r\n {currentStep === 'select-method' && (\r\n <motion.div\r\n key=\"select-method\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Choose Payment Method\r\n </h3>\r\n \r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('wallet')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <Wallet className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">Connect Wallet</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n MetaMask, WalletConnect & more\r\n </div>\r\n </div>\r\n <Zap className=\"w-5 h-5 text-[#7042D2] ml-auto\" />\r\n </div>\r\n </motion.button>\r\n\r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('qr')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <QrCode className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">QR Code</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n Scan with mobile wallet\r\n </div>\r\n </div>\r\n </div>\r\n </motion.button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Step 2: Select Network */}\r\n {currentStep === 'select-network' && (\r\n <motion.div\r\n key=\"select-network\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Select Network\r\n </h3>\r\n \r\n {loading ? (\r\n <div className=\"flex justify-center py-8\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {networks.map((network) => (\r\n <motion.button\r\n key={network.id}\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleNetworkSelect(network)}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n {network.logo ? (\r\n <img \r\n src={network.logo} \r\n alt={network.name}\r\n className=\"w-8 h-8 rounded-full\"\r\n />\r\n ) : (\r\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\r\n <span className=\"text-sm font-bold text-[#7042D2]\">\r\n {network.shortName.charAt(0).toUpperCase()}\r\n </span>\r\n </div>\r\n )}\r\n <div className=\"text-left flex-1\">\r\n <div className=\"font-semibold\">{network.name}</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {network.shortName.toUpperCase()}\r\n </div>\r\n </div>\r\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\r\n </div>\r\n </motion.button>\r\n ))}\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Wallet Connect */}\r\n {currentStep === 'wallet-connect' && (\r\n <motion.div\r\n key=\"wallet-connect\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n >\r\n <WalletIntegration\r\n selectedNetwork={selectedNetwork}\r\n selectedToken={selectedToken}\r\n paymentData={paymentData}\r\n onTransactionSent={handleTransactionSent}\r\n onError={setError}\r\n isConnecting={isConnecting}\r\n setIsConnecting={setIsConnecting}\r\n />\r\n </motion.div>\r\n )}\r\n\r\n {/* QR Code */}\r\n {currentStep === 'qr-code' && (\r\n <motion.div\r\n key=\"qr-code\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"space-y-4\">\r\n <h3 className=\"text-lg font-semibold\">Scan QR Code</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Use your mobile wallet to scan and pay\r\n </p>\r\n </div>\r\n\r\n {qrCode && (\r\n <div className=\"bg-white p-4 rounded-xl mx-auto inline-block\">\r\n <img src={qrCode} alt=\"Payment QR Code\" className=\"w-48 h-48\" />\r\n </div>\r\n )}\r\n\r\n {paymentData && (\r\n <div className=\"space-y-3\">\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n </div>\r\n \r\n <div className=\"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span>Waiting for payment...</span>\r\n </div>\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Processing */}\r\n {currentStep === 'processing' && (\r\n <motion.div\r\n key=\"processing\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-[#7042D2]\">Processing Payment...</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your transaction is being processed\r\n </p>\r\n </div>\r\n </motion.div>\r\n )}\r\n\r\n {/* Success */}\r\n {currentStep === 'success' && (\r\n <motion.div\r\n key=\"success\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\r\n <CheckCircle2 className=\"w-8 h-8 text-green-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-green-600\">Payment Successful!</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your payment has been processed successfully\r\n </p>\r\n </div>\r\n\r\n {txHash && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Transaction:</span>\r\n <div className=\"flex items-center space-x-2\">\r\n <span className=\"font-mono text-sm\">\r\n {txHash.slice(0, 6)}...{txHash.slice(-4)}\r\n </span>\r\n <button\r\n onClick={() => copyToClipboard(txHash)}\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <Copy className=\"w-4 h-4\" />\r\n </button>\r\n {selectedNetwork?.explorerUrl && (\r\n <a\r\n href={`${selectedNetwork.explorerUrl}/tx/${txHash}`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <ExternalLink className=\"w-4 h-4\" />\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Error */}\r\n {currentStep === 'error' && (\r\n <motion.div\r\n key=\"error\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto\">\r\n <AlertCircle className=\"w-8 h-8 text-red-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-red-600\">Payment Failed</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n {error || 'Something went wrong. Please try again.'}\r\n </p>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n <button\r\n onClick={() => {\r\n setCurrentStep('select-method');\r\n setError('');\r\n }}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Try Again\r\n </button>\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center\">\r\n <p className=\"text-xs text-gray-500\">\r\n Powered by <span className=\"font-semibold text-[#7042D2]\">Coinley</span>\r\n </p>\r\n </div>\r\n </motion.div>\r\n </div>\r\n\r\n <WalletModal />\r\n </CoinleyWalletProvider>\r\n );\r\n};\r\n\r\nexport default CoinleyPayment;","//src/CoinleyProvider.jsx\r\nimport React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\r\nimport CoinleyPayment from './CoinleyPayment';\r\n\r\nconst CoinleyContext = createContext(null);\r\n\r\nexport const CoinleyProvider = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n theme = 'light',\r\n debug = false,\r\n children\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [paymentConfig, setPaymentConfig] = React.useState(null);\r\n const [callbacks, setCallbacks] = React.useState({});\r\n const [merchantName, setMerchantName] = React.useState('');\r\n\r\n const openPayment = (config, checkoutCallbacks) => {\r\n setPaymentConfig(config);\r\n if (checkoutCallbacks) {\r\n setCallbacks(checkoutCallbacks);\r\n }\r\n setIsOpen(true);\r\n };\r\n\r\n const closePayment = () => {\r\n setIsOpen(false);\r\n setPaymentConfig(null);\r\n if (callbacks.onClose) {\r\n callbacks.onClose();\r\n }\r\n };\r\n\r\n const contextValue = {\r\n openPayment,\r\n closePayment\r\n };\r\n\r\n return (\r\n <CoinleyContext.Provider value={contextValue}>\r\n {children}\r\n {isOpen && paymentConfig && (\r\n <CoinleyPayment\r\n apiKey={apiKey}\r\n apiSecret={apiSecret}\r\n apiUrl={apiUrl}\r\n isOpen={isOpen}\r\n config={paymentConfig}\r\n theme={theme}\r\n debug={debug}\r\n merchantName={merchantName}\r\n onSuccess={callbacks.onSuccess}\r\n onError={callbacks.onError}\r\n onClose={closePayment}\r\n />\r\n )}\r\n </CoinleyContext.Provider>\r\n );\r\n};\r\n\r\nexport const CoinleyCheckout = forwardRef((\r\n {\r\n customerEmail = '',\r\n merchantName = '',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n theme = 'light',\r\n autoOpen = false,\r\n testMode = false,\r\n debug = false,\r\n merchantWalletAddresses = {}\r\n },\r\n ref\r\n) => {\r\n const context = useContext(CoinleyContext);\r\n\r\n if (!context) {\r\n throw new Error('CoinleyCheckout must be used within a CoinleyProvider');\r\n }\r\n\r\n const { openPayment, closePayment } = context;\r\n\r\n const open = (config) => {\r\n try {\r\n if (debug) {\r\n console.log('Opening Coinley checkout with config:', config);\r\n }\r\n\r\n if (!config.amount || config.amount <= 0) {\r\n throw new Error('Amount must be greater than 0');\r\n }\r\n\r\n const finalConfig = {\r\n ...config,\r\n customerEmail: config.customerEmail || customerEmail,\r\n merchantWalletAddresses: {\r\n ...merchantWalletAddresses,\r\n ...config.merchantWalletAddresses\r\n },\r\n metadata: {\r\n ...config.metadata,\r\n testMode,\r\n checkoutVersion: '1.0.0'\r\n }\r\n };\r\n\r\n const checkoutCallbacks = {\r\n onSuccess,\r\n onError,\r\n onClose\r\n };\r\n\r\n openPayment(finalConfig, checkoutCallbacks);\r\n } catch (error) {\r\n console.error('Failed to open Coinley checkout:', error);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n const close = () => {\r\n closePayment();\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close\r\n }));\r\n\r\n return null;\r\n});\r\n\r\nCoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\nexport const useCoinley = () => {\r\n const context = useContext(CoinleyContext);\r\n if (!context) {\r\n throw new Error('useCoinley must be used within a CoinleyProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport const ThemeProvider = ({\r\n initialTheme = 'light',\r\n children\r\n}) => {\r\n const [theme, setTheme] = React.useState(initialTheme);\r\n\r\n React.useEffect(() => {\r\n document.documentElement.setAttribute('data-coinley-theme', theme);\r\n }, [theme]);\r\n\r\n const toggleTheme = () => {\r\n setTheme(prev => prev === 'light' ? 'dark' : 'light');\r\n };\r\n\r\n return (\r\n <div className={`coinley-theme-${theme}`}>\r\n {children}\r\n </div>\r\n );\r\n};","// Main SDK exports\r\nexport {\r\n CoinleyProvider,\r\n CoinleyCheckout,\r\n ThemeProvider,\r\n useCoinley\r\n} from './CoinleyProvider';\r\n\r\nexport { PaymentAPI } from './PaymentAPI';\r\nexport { default as CoinleyPayment } from './CoinleyPayment';\r\n\r\n// Import styles\r\nimport './styles/index.css';\r\n\r\n// Version\r\nexport const VERSION = '0.0.0';\r\n\r\n// Utils\r\nexport const utils = {\r\n formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\r\n \r\n truncateAddress: (address, startChars = 6, endChars = 4) => {\r\n if (!address) return '';\r\n if (address.length <= startChars + endChars) return address;\r\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\r\n },\r\n\r\n isValidAddress: (address, network) => {\r\n if (!address) return false;\r\n \r\n switch (network.toLowerCase()) {\r\n case 'ethereum':\r\n case 'bsc':\r\n case 'polygon':\r\n return /^0x[a-fA-F0-9]{40}$/.test(address);\r\n case 'tron':\r\n return /^T[a-zA-Z0-9]{33}$/.test(address);\r\n case 'solana':\r\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\r\n default:\r\n return address.length > 0;\r\n }\r\n },\r\n\r\n copyToClipboard: async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\n// Error classes\r\nexport class CoinleyError extends Error {\r\n constructor(message, code) {\r\n super(message);\r\n this.name = 'CoinleyError';\r\n this.code = code;\r\n }\r\n}\r\n\r\n// Default config\r\nexport const DEFAULT_CONFIG = {\r\n theme: 'light',\r\n debug: false,\r\n testMode: false,\r\n autoOpen: false\r\n};"],"names":["f","require$$0","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","reactJsxRuntime_production_min","jsx","jsxs","jsxRuntimeModule","exports","PaymentAPI","constructor","baseURL","apiKey","apiSecret","this","api","axios","create","endsWith","slice","timeout","headers","interceptors","request","use","config","token","generateMerchantToken","console","log","method","_a","toUpperCase","url","data","error","Promise","reject","response","status","_b","message","_c","Error","_d","_e","credentials","btoa","createPayment","params","post","getPayment","paymentId","get","getNetworks","networks","id","name","shortName","chainId","explorerUrl","isTestnet","getStablecoins","stablecoins","symbol","contractAddress","decimals","isStablecoin","networkId","Network","verifyQRPayment","processPayment","transactionHash","network","senderAddress","healthCheck","WalletIntegration","selectedNetwork","selectedToken","paymentData","onTransactionSent","onError","isConnecting","setIsConnecting","isConnected","address","useWallet","useWalletConnect","sendTransaction","useWalletTransaction","useWalletModal","useEffect","handleSendTransaction","async","recipientAddress","metadata","recipientWallet","txHash","amount","totalAmount","Math","pow","toString","transferData","padStart","parseInt","to","value","className","children","Wallet","jsxRuntimeExports","Loader2","ConnectButton","theme","size","customText","CoinleyPayment","apiUrl","onSuccess","onClose","isOpen","merchantName","debug","currentStep","setCurrentStep","useState","setNetworks","tokens","setTokens","setSelectedNetwork","setSelectedToken","paymentMethod","setPaymentMethod","qrCode","setQrCode","setPaymentData","loading","setLoading","setError","copied","setCopied","setTxHash","paymentAPI","useRef","walletConfig","createCoinleyWalletConfig","appName","appDescription","chains","initializePayment","networksRes","tokensRes","all","err","handleMethodSelect","initiatePayment","paymentPayload","currency","customerEmail","callbackUrl","payment","generateQRCode","merchantWalletAddresses","qrData","qrCodeDataURL","QRCodeLib","toDataURL","width","margin","color","dark","light","startPaymentVerification","attempts","checkPayment","result","verified","handlePaymentSuccess","setTimeout","handleClose","CoinleyWalletProvider","motion","div","initial","scale","opacity","animate","exit","onClick","ArrowLeft","X","Sparkles","toFixed","AnimatePresence","mode","x","button","whileHover","whileTap","Zap","QrCode","map","networkTokens","filter","length","preferredToken","find","t","handleNetworkSelect","logo","src","alt","charAt","ChevronDown","CheckCircle2","text","navigator","clipboard","writeText","copyToClipboard","Copy","href","target","rel","ExternalLink","AlertCircle","WalletModal","CoinleyContext","createContext","CoinleyCheckout","forwardRef","autoOpen","testMode","context","useContext","openPayment","closePayment","open","finalConfig","checkoutVersion","close","React","useImperativeHandle","displayName","utils","formatAmount","truncateAddress","startChars","endChars","isValidAddress","toLowerCase","test","CoinleyError","code","super","setIsOpen","paymentConfig","setPaymentConfig","callbacks","setCallbacks","setMerchantName","contextValue","checkoutCallbacks","Provider","initialTheme","setTheme","document","documentElement","setAttribute"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"index.umd.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../src/PaymentAPI.js","../src/CoinleyPayment.jsx","../src/CoinleyProvider.jsx","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","//src/PaymentAPI.js\r\nimport axios from 'axios';\r\n\r\nexport class PaymentAPI {\r\n constructor(baseURL, apiKey, apiSecret) {\r\n this.apiKey = apiKey;\r\n this.apiSecret = apiSecret;\r\n\r\n this.api = axios.create({\r\n baseURL: baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL,\r\n timeout: 30000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n });\r\n\r\n // Add request interceptor\r\n this.api.interceptors.request.use(\r\n (config) => {\r\n config.headers['X-API-Key'] = this.apiKey;\r\n config.headers['X-API-Secret'] = this.apiSecret;\r\n \r\n const token = this.generateMerchantToken();\r\n if (token) {\r\n config.headers['Authorization'] = `Bearer ${token}`;\r\n }\r\n\r\n console.log('API Request:', {\r\n method: config.method?.toUpperCase(),\r\n url: config.url,\r\n data: config.data\r\n });\r\n\r\n return config;\r\n },\r\n (error) => {\r\n console.error('Request interceptor error:', error);\r\n return Promise.reject(error);\r\n }\r\n );\r\n\r\n // Add response interceptor\r\n this.api.interceptors.response.use(\r\n (response) => {\r\n console.log('API Response:', {\r\n status: response.status,\r\n url: response.config.url,\r\n data: response.data\r\n });\r\n return response;\r\n },\r\n (error) => {\r\n console.error('API Error:', {\r\n status: error.response?.status,\r\n data: error.response?.data,\r\n message: error.message\r\n });\r\n\r\n if (error.response?.status === 401) {\r\n throw new Error('Authentication failed. Please check your API credentials.');\r\n } else if (error.response?.status === 404) {\r\n throw new Error('API endpoint not found. Please check your API URL.');\r\n } else if (error.response?.status >= 500) {\r\n throw new Error('Server error. Please try again later.');\r\n }\r\n\r\n throw error;\r\n }\r\n );\r\n }\r\n\r\n generateMerchantToken() {\r\n try {\r\n const credentials = `${this.apiKey}:${this.apiSecret}`;\r\n return btoa(credentials);\r\n } catch (error) {\r\n console.error('Failed to generate token:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async createPayment(params) {\r\n try {\r\n const response = await this.api.post('/api/payments/create', params);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to create payment');\r\n }\r\n }\r\n\r\n async getPayment(paymentId) {\r\n try {\r\n const response = await this.api.get(`/api/payments/${paymentId}`);\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to get payment details');\r\n }\r\n }\r\n\r\n async getNetworks() {\r\n try {\r\n const response = await this.api.get('/api/networks');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get networks failed:', error);\r\n \r\n // Return fallback networks\r\n return {\r\n networks: [\r\n {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n chainId: '1',\r\n type: 'ethereum',\r\n explorerUrl: 'https://etherscan.io',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'bsc',\r\n name: 'Binance Smart Chain',\r\n shortName: 'bsc',\r\n chainId: '56',\r\n type: 'bsc',\r\n explorerUrl: 'https://bscscan.com',\r\n isTestnet: false,\r\n },\r\n {\r\n id: 'polygon',\r\n name: 'Polygon',\r\n shortName: 'polygon',\r\n chainId: '137',\r\n type: 'ethereum',\r\n explorerUrl: 'https://polygonscan.com',\r\n isTestnet: false,\r\n },\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async getStablecoins() {\r\n try {\r\n const response = await this.api.get('/api/networks/stablecoins');\r\n return response.data;\r\n } catch (error) {\r\n console.error('Get stablecoins failed:', error);\r\n \r\n // Return fallback stablecoins\r\n return {\r\n stablecoins: [\r\n {\r\n id: 'usdt-eth',\r\n name: 'Tether USD',\r\n symbol: 'USDT',\r\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n },\r\n {\r\n id: 'usdc-eth',\r\n name: 'USD Coin',\r\n symbol: 'USDC',\r\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\r\n decimals: 6,\r\n isStablecoin: true,\r\n networkId: 'ethereum',\r\n Network: {\r\n id: 'ethereum',\r\n name: 'Ethereum',\r\n shortName: 'ethereum',\r\n type: 'ethereum',\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n\r\n async verifyQRPayment(paymentId) {\r\n try {\r\n const response = await this.api.post('/api/payments/verify-qr', {\r\n paymentId\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to verify payment');\r\n }\r\n }\r\n\r\n async processPayment(paymentId, transactionHash, network, senderAddress) {\r\n try {\r\n const response = await this.api.post('/api/payments/process', {\r\n paymentId,\r\n transactionHash,\r\n network,\r\n senderAddress\r\n });\r\n return response.data;\r\n } catch (error) {\r\n if (error.response?.data?.error) {\r\n throw new Error(error.response.data.error);\r\n }\r\n throw new Error(error.message || 'Failed to process payment');\r\n }\r\n }\r\n\r\n async healthCheck() {\r\n try {\r\n const response = await this.api.get('/api/health');\r\n return response.status === 200;\r\n } catch (error) {\r\n console.error('Health check failed:', error);\r\n return false;\r\n }\r\n }\r\n}","//src/CoinleyPayment.jsx\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { motion, AnimatePresence } from 'framer-motion';\r\nimport { \r\n Wallet, \r\n QrCode, \r\n ChevronDown, \r\n Copy, \r\n Check, \r\n X, \r\n ArrowLeft,\r\n Loader2,\r\n ExternalLink,\r\n AlertCircle,\r\n CheckCircle2,\r\n Zap,\r\n Sparkles\r\n} from 'lucide-react';\r\n// import QRCodeLib from 'qrcode';\r\nimport { \r\n createCoinleyWalletConfig,\r\n CoinleyWalletProvider,\r\n ConnectButton,\r\n WalletModal,\r\n useWallet,\r\n useWalletConnect,\r\n useWalletTransaction,\r\n useWalletModal\r\n} from '@coinley/wallet-connect-core';\r\nimport { PaymentAPI } from './PaymentAPI';\r\n\r\n// Wallet Integration Component\r\nconst WalletIntegration = ({ \r\n selectedNetwork, \r\n selectedToken, \r\n paymentData, \r\n onTransactionSent, \r\n onError,\r\n isConnecting,\r\n setIsConnecting\r\n}) => {\r\n const { isConnected, address } = useWallet();\r\n const { connectWallet } = useWalletConnect();\r\n const { sendTransaction } = useWalletTransaction();\r\n const { openModal } = useWalletModal();\r\n\r\n useEffect(() => {\r\n if (isConnected && paymentData && selectedNetwork && selectedToken) {\r\n handleSendTransaction();\r\n }\r\n }, [isConnected, paymentData]);\r\n\r\n const handleConnectWallet = async () => {\r\n try {\r\n setIsConnecting(true);\r\n openModal();\r\n } catch (error) {\r\n console.error('Wallet connection failed:', error);\r\n onError(error.message || 'Failed to connect wallet');\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n const handleSendTransaction = async () => {\r\n if (!isConnected || !paymentData || !selectedToken) return;\r\n\r\n try {\r\n setIsConnecting(true);\r\n \r\n const recipientAddress = paymentData.metadata?.recipientWallet;\r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let txHash;\r\n\r\n if (selectedToken.contractAddress) {\r\n // ERC-20 Token Transaction\r\n const amount = (paymentData.totalAmount * Math.pow(10, selectedToken.decimals)).toString();\r\n const transferData = `0xa9059cbb${recipientAddress.slice(2).padStart(64, '0')}${parseInt(amount).toString(16).padStart(64, '0')}`;\r\n \r\n txHash = await sendTransaction({\r\n to: selectedToken.contractAddress,\r\n data: transferData,\r\n value: '0x0'\r\n });\r\n } else {\r\n // Native Token Transaction\r\n const value = (paymentData.totalAmount * Math.pow(10, 18)).toString(16);\r\n \r\n txHash = await sendTransaction({\r\n to: recipientAddress,\r\n value: `0x${value}`\r\n });\r\n }\r\n\r\n if (txHash) {\r\n onTransactionSent(txHash);\r\n }\r\n } catch (error) {\r\n console.error('Transaction failed:', error);\r\n onError(error.message || 'Transaction failed');\r\n } finally {\r\n setIsConnecting(false);\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"text-center space-y-6\">\r\n <div className=\"space-y-4\">\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Wallet className=\"w-8 h-8 text-[#7042D2]\" />\r\n </div>\r\n <h3 className=\"text-lg font-semibold\">\r\n {isConnected ? 'Send Payment' : 'Connect Your Wallet'}\r\n </h3>\r\n \r\n {!isConnected ? (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Connect your wallet to complete the payment\r\n </p>\r\n <ConnectButton \r\n theme=\"gradient\" \r\n size=\"large\"\r\n customText=\"Connect Wallet\"\r\n />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-4\">\r\n <p className=\"text-green-600 dark:text-green-400\">\r\n ✅ Wallet Connected: {address?.slice(0, 6)}...{address?.slice(-4)}\r\n </p>\r\n \r\n {paymentData && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {isConnecting && (\r\n <div className=\"flex items-center justify-center space-x-2\">\r\n <Loader2 className=\"w-5 h-5 animate-spin text-[#7042D2]\" />\r\n <span>Processing transaction...</span>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst CoinleyPayment = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl = 'http://localhost:9000',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n isOpen,\r\n config,\r\n theme = 'light',\r\n merchantName,\r\n debug = false\r\n}) => {\r\n // State management\r\n const [currentStep, setCurrentStep] = useState('select-method');\r\n const [networks, setNetworks] = useState([]);\r\n const [tokens, setTokens] = useState([]);\r\n const [selectedNetwork, setSelectedNetwork] = useState(null);\r\n const [selectedToken, setSelectedToken] = useState(null);\r\n const [paymentMethod, setPaymentMethod] = useState(null);\r\n const [qrCode, setQrCode] = useState('');\r\n const [paymentData, setPaymentData] = useState(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState('');\r\n const [copied, setCopied] = useState(false);\r\n const [txHash, setTxHash] = useState('');\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n\r\n // Services\r\n const paymentAPI = useRef(new PaymentAPI(apiUrl, apiKey, apiSecret));\r\n\r\n // Wallet configuration\r\n const walletConfig = createCoinleyWalletConfig({\r\n appName: merchantName || 'Coinley Payment',\r\n appDescription: 'Crypto payment processing',\r\n chains: ['ethereum', 'polygon', 'bsc', 'arbitrum']\r\n });\r\n\r\n // Initialize\r\n useEffect(() => {\r\n if (isOpen) {\r\n initializePayment();\r\n }\r\n }, [isOpen]);\r\n\r\n const initializePayment = async () => {\r\n try {\r\n setLoading(true);\r\n setError('');\r\n \r\n const [networksRes, tokensRes] = await Promise.all([\r\n paymentAPI.current.getNetworks(),\r\n paymentAPI.current.getStablecoins()\r\n ]);\r\n\r\n setNetworks(networksRes.networks || []);\r\n setTokens(tokensRes.stablecoins || []);\r\n\r\n if (debug) {\r\n console.log('Initialized networks:', networksRes.networks);\r\n console.log('Initialized tokens:', tokensRes.stablecoins);\r\n }\r\n } catch (err) {\r\n console.error('Failed to initialize payment:', err);\r\n setError('Failed to load payment options. Please try again.');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleMethodSelect = (method) => {\r\n setPaymentMethod(method);\r\n setCurrentStep('select-network');\r\n };\r\n\r\n const handleNetworkSelect = async (network) => {\r\n setSelectedNetwork(network);\r\n \r\n const networkTokens = tokens.filter(token => \r\n token.Network?.shortName === network.shortName || token.networkId === network.id\r\n );\r\n \r\n if (networkTokens.length > 0) {\r\n const preferredToken = networkTokens.find(t => t.symbol === 'USDT') || networkTokens[0];\r\n setSelectedToken(preferredToken);\r\n await initiatePayment(network, preferredToken);\r\n }\r\n };\r\n\r\n const initiatePayment = async (network, token) => {\r\n try {\r\n setLoading(true);\r\n \r\n const paymentPayload = {\r\n amount: config.amount,\r\n currency: token.symbol,\r\n network: network.shortName,\r\n customerEmail: config.customerEmail,\r\n callbackUrl: config.callbackUrl,\r\n metadata: {\r\n ...config.metadata,\r\n paymentMethod,\r\n selectedNetwork: network.shortName,\r\n selectedToken: token.symbol\r\n }\r\n };\r\n\r\n const payment = await paymentAPI.current.createPayment(paymentPayload);\r\n setPaymentData(payment.payment);\r\n\r\n if (paymentMethod === 'wallet') {\r\n setCurrentStep('wallet-connect');\r\n } else {\r\n await generateQRCode(payment.payment);\r\n setCurrentStep('qr-code');\r\n }\r\n } catch (err) {\r\n console.error('Payment initiation failed:', err);\r\n setError(err.message || 'Failed to create payment');\r\n setCurrentStep('error');\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const generateQRCode = async (payment) => {\r\n try {\r\n const recipientAddress = payment.metadata?.recipientWallet || \r\n config.merchantWalletAddresses?.[selectedNetwork?.shortName || ''];\r\n \r\n if (!recipientAddress) {\r\n throw new Error('Recipient wallet address not found');\r\n }\r\n\r\n let qrData = '';\r\n \r\n if (selectedNetwork?.type === 'ethereum' || selectedNetwork?.type === 'bsc') {\r\n qrData = selectedToken?.contractAddress \r\n ? `ethereum:${selectedToken.contractAddress}/transfer?address=${recipientAddress}&uint256=${payment.totalAmount * Math.pow(10, selectedToken.decimals)}`\r\n : `ethereum:${recipientAddress}?value=${payment.totalAmount}e18`;\r\n } else if (selectedNetwork?.type === 'tron') {\r\n qrData = `tron:${recipientAddress}?amount=${payment.totalAmount}`;\r\n } else {\r\n qrData = `${selectedToken?.symbol}:${recipientAddress}?amount=${payment.totalAmount}`;\r\n }\r\n\r\n const qrCodeDataURL = await QRCodeLib.toDataURL(qrData, {\r\n width: 256,\r\n margin: 2,\r\n color: {\r\n dark: theme === 'dark' ? '#FFFFFF' : '#000000',\r\n light: theme === 'dark' ? '#000000' : '#FFFFFF'\r\n }\r\n });\r\n\r\n // setQrCode(qrCodeDataURL);\r\n setQrCode(recipientAddress);\r\n startPaymentVerification(payment.id);\r\n \r\n } catch (err) {\r\n console.error('QR code generation failed:', err);\r\n setError('Failed to generate QR code');\r\n setCurrentStep('error');\r\n }\r\n };\r\n\r\n const startPaymentVerification = async (paymentId) => {\r\n const maxAttempts = 60;\r\n let attempts = 0;\r\n\r\n const checkPayment = async () => {\r\n try {\r\n const result = await paymentAPI.current.verifyQRPayment(paymentId);\r\n \r\n if (result.verified && result.payment?.transactionHash) {\r\n setTxHash(result.payment.transactionHash);\r\n await handlePaymentSuccess(paymentId, result.payment.transactionHash);\r\n return true;\r\n }\r\n \r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification timeout. Please check your transaction.');\r\n setCurrentStep('error');\r\n }\r\n \r\n return false;\r\n } catch (err) {\r\n console.error('Payment verification error:', err);\r\n attempts++;\r\n if (attempts < maxAttempts) {\r\n setTimeout(checkPayment, 5000);\r\n } else {\r\n setError('Payment verification failed');\r\n setCurrentStep('error');\r\n }\r\n return false;\r\n }\r\n };\r\n\r\n setTimeout(checkPayment, 2000);\r\n };\r\n\r\n const handleTransactionSent = async (transactionHash) => {\r\n setTxHash(transactionHash);\r\n setCurrentStep('processing');\r\n \r\n try {\r\n await paymentAPI.current.processPayment(\r\n paymentData.id,\r\n transactionHash,\r\n selectedNetwork?.shortName || '',\r\n ''\r\n );\r\n \r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n } catch (error) {\r\n console.error('Payment processing failed:', error);\r\n await handlePaymentSuccess(paymentData.id, transactionHash);\r\n }\r\n };\r\n\r\n const handlePaymentSuccess = async (paymentId, transactionHash) => {\r\n setCurrentStep('success');\r\n \r\n if (onSuccess) {\r\n onSuccess(paymentId, transactionHash, {\r\n network: selectedNetwork?.name,\r\n token: selectedToken?.symbol,\r\n amount: paymentData?.totalAmount,\r\n method: paymentMethod\r\n });\r\n }\r\n };\r\n\r\n const copyToClipboard = async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n };\r\n\r\n const handleClose = () => {\r\n setCurrentStep('select-method');\r\n setPaymentMethod(null);\r\n setSelectedNetwork(null);\r\n setSelectedToken(null);\r\n setQrCode('');\r\n setPaymentData(null);\r\n setError('');\r\n setTxHash('');\r\n \r\n if (onClose) {\r\n onClose();\r\n }\r\n };\r\n\r\n const goBack = () => {\r\n if (currentStep === 'select-network') {\r\n setCurrentStep('select-method');\r\n } else if (currentStep === 'wallet-connect' || currentStep === 'qr-code') {\r\n setCurrentStep('select-network');\r\n }\r\n };\r\n\r\n if (!isOpen) return null;\r\n\r\n return (\r\n <CoinleyWalletProvider config={walletConfig} walletConfig={{ appName: merchantName || 'Coinley Payment' }}>\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm\">\r\n <motion.div\r\n initial={{ scale: 0.9, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n exit={{ scale: 0.9, opacity: 0 }}\r\n className={`relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden ${\r\n theme === 'dark' ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'\r\n }`}\r\n >\r\n {/* Header */}\r\n <div className=\"relative p-6 border-b border-gray-200 dark:border-gray-700\">\r\n {(currentStep !== 'select-method' && currentStep !== 'success' && currentStep !== 'error') && (\r\n <button\r\n onClick={goBack}\r\n className=\"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <ArrowLeft className=\"w-5 h-5\" />\r\n </button>\r\n )}\r\n \r\n <button\r\n onClick={handleClose}\r\n className=\"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n \r\n <div className=\"text-center\">\r\n <div className=\"flex items-center justify-center space-x-2 mb-2\">\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n <h2 className=\"text-xl font-bold\">Pay with Crypto</h2>\r\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\r\n </div>\r\n {merchantName && (\r\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\r\n {merchantName}\r\n </p>\r\n )}\r\n <div className=\"mt-2\">\r\n <span className=\"text-2xl font-bold text-[#7042D2]\">\r\n ${config.amount.toFixed(2)}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Content */}\r\n <div className=\"p-6 min-h-[400px]\">\r\n <AnimatePresence mode=\"wait\">\r\n {/* Step 1: Select Payment Method */}\r\n {currentStep === 'select-method' && (\r\n <motion.div\r\n key=\"select-method\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Choose Payment Method\r\n </h3>\r\n \r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('wallet')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <Wallet className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">Connect Wallet</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n MetaMask, WalletConnect & more\r\n </div>\r\n </div>\r\n <Zap className=\"w-5 h-5 text-[#7042D2] ml-auto\" />\r\n </div>\r\n </motion.button>\r\n\r\n <motion.button\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleMethodSelect('qr')}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\r\n <QrCode className=\"w-6 h-6 text-[#7042D2]\" />\r\n </div>\r\n <div className=\"text-left\">\r\n <div className=\"font-semibold\">QR Code</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n Scan with mobile wallet\r\n </div>\r\n </div>\r\n </div>\r\n </motion.button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Step 2: Select Network */}\r\n {currentStep === 'select-network' && (\r\n <motion.div\r\n key=\"select-network\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"space-y-4\"\r\n >\r\n <h3 className=\"text-lg font-semibold text-center mb-6\">\r\n Select Network\r\n </h3>\r\n \r\n {loading ? (\r\n <div className=\"flex justify-center py-8\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {networks.map((network) => (\r\n <motion.button\r\n key={network.id}\r\n whileHover={{ scale: 1.02 }}\r\n whileTap={{ scale: 0.98 }}\r\n onClick={() => handleNetworkSelect(network)}\r\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\r\n >\r\n <div className=\"flex items-center space-x-4\">\r\n {network.logo ? (\r\n <img \r\n src={network.logo} \r\n alt={network.name}\r\n className=\"w-8 h-8 rounded-full\"\r\n />\r\n ) : (\r\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\r\n <span className=\"text-sm font-bold text-[#7042D2]\">\r\n {network.shortName.charAt(0).toUpperCase()}\r\n </span>\r\n </div>\r\n )}\r\n <div className=\"text-left flex-1\">\r\n <div className=\"font-semibold\">{network.name}</div>\r\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {network.shortName.toUpperCase()}\r\n </div>\r\n </div>\r\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\r\n </div>\r\n </motion.button>\r\n ))}\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Wallet Connect */}\r\n {currentStep === 'wallet-connect' && (\r\n <motion.div\r\n key=\"wallet-connect\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n >\r\n <WalletIntegration\r\n selectedNetwork={selectedNetwork}\r\n selectedToken={selectedToken}\r\n paymentData={paymentData}\r\n onTransactionSent={handleTransactionSent}\r\n onError={setError}\r\n isConnecting={isConnecting}\r\n setIsConnecting={setIsConnecting}\r\n />\r\n </motion.div>\r\n )}\r\n\r\n {/* QR Code */}\r\n {currentStep === 'qr-code' && (\r\n <motion.div\r\n key=\"qr-code\"\r\n initial={{ x: 20, opacity: 0 }}\r\n animate={{ x: 0, opacity: 1 }}\r\n exit={{ x: -20, opacity: 0 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"space-y-4\">\r\n <h3 className=\"text-lg font-semibold\">Scan QR Code</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400\">\r\n Use your mobile wallet to scan and pay\r\n </p>\r\n </div>\r\n\r\n {qrCode && (\r\n <div className=\"bg-white p-4 rounded-xl mx-auto inline-block\">\r\n <img src={qrCode} alt=\"Payment QR Code\" className=\"w-48 h-48\" />\r\n </div>\r\n )}\r\n\r\n {paymentData && (\r\n <div className=\"space-y-3\">\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\r\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\r\n </div>\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\r\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\r\n </div>\r\n </div>\r\n \r\n <div className=\"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400\">\r\n <Loader2 className=\"w-4 h-4 animate-spin\" />\r\n <span>Waiting for payment...</span>\r\n </div>\r\n </div>\r\n )}\r\n </motion.div>\r\n )}\r\n\r\n {/* Processing */}\r\n {currentStep === 'processing' && (\r\n <motion.div\r\n key=\"processing\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\r\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-[#7042D2]\">Processing Payment...</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your transaction is being processed\r\n </p>\r\n </div>\r\n </motion.div>\r\n )}\r\n\r\n {/* Success */}\r\n {currentStep === 'success' && (\r\n <motion.div\r\n key=\"success\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\r\n <CheckCircle2 className=\"w-8 h-8 text-green-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-green-600\">Payment Successful!</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n Your payment has been processed successfully\r\n </p>\r\n </div>\r\n\r\n {txHash && (\r\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\r\n <div className=\"flex justify-between items-center\">\r\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Transaction:</span>\r\n <div className=\"flex items-center space-x-2\">\r\n <span className=\"font-mono text-sm\">\r\n {txHash.slice(0, 6)}...{txHash.slice(-4)}\r\n </span>\r\n <button\r\n onClick={() => copyToClipboard(txHash)}\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <Copy className=\"w-4 h-4\" />\r\n </button>\r\n {selectedNetwork?.explorerUrl && (\r\n <a\r\n href={`${selectedNetwork.explorerUrl}/tx/${txHash}`}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\r\n >\r\n <ExternalLink className=\"w-4 h-4\" />\r\n </a>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </motion.div>\r\n )}\r\n\r\n {/* Error */}\r\n {currentStep === 'error' && (\r\n <motion.div\r\n key=\"error\"\r\n initial={{ scale: 0.8, opacity: 0 }}\r\n animate={{ scale: 1, opacity: 1 }}\r\n className=\"text-center space-y-6\"\r\n >\r\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto\">\r\n <AlertCircle className=\"w-8 h-8 text-red-500\" />\r\n </div>\r\n <div>\r\n <h3 className=\"text-lg font-semibold text-red-600\">Payment Failed</h3>\r\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\r\n {error || 'Something went wrong. Please try again.'}\r\n </p>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n <button\r\n onClick={() => {\r\n setCurrentStep('select-method');\r\n setError('');\r\n }}\r\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\r\n >\r\n Try Again\r\n </button>\r\n <button\r\n onClick={handleClose}\r\n className=\"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n Close\r\n </button>\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </div>\r\n\r\n {/* Footer */}\r\n <div className=\"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center\">\r\n <p className=\"text-xs text-gray-500\">\r\n Powered by <span className=\"font-semibold text-[#7042D2]\">Coinley</span>\r\n </p>\r\n </div>\r\n </motion.div>\r\n </div>\r\n\r\n <WalletModal />\r\n </CoinleyWalletProvider>\r\n );\r\n};\r\n\r\nexport default CoinleyPayment;","//src/CoinleyProvider.jsx\r\nimport React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\r\nimport CoinleyPayment from './CoinleyPayment';\r\n\r\nconst CoinleyContext = createContext(null);\r\n\r\nexport const CoinleyProvider = ({\r\n apiKey,\r\n apiSecret,\r\n apiUrl,\r\n theme = 'light',\r\n debug = false,\r\n children\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n const [paymentConfig, setPaymentConfig] = React.useState(null);\r\n const [callbacks, setCallbacks] = React.useState({});\r\n const [merchantName, setMerchantName] = React.useState('');\r\n\r\n const openPayment = (config, checkoutCallbacks) => {\r\n setPaymentConfig(config);\r\n if (checkoutCallbacks) {\r\n setCallbacks(checkoutCallbacks);\r\n }\r\n setIsOpen(true);\r\n };\r\n\r\n const closePayment = () => {\r\n setIsOpen(false);\r\n setPaymentConfig(null);\r\n if (callbacks.onClose) {\r\n callbacks.onClose();\r\n }\r\n };\r\n\r\n const contextValue = {\r\n openPayment,\r\n closePayment\r\n };\r\n\r\n return (\r\n <CoinleyContext.Provider value={contextValue}>\r\n {children}\r\n {isOpen && paymentConfig && (\r\n <CoinleyPayment\r\n apiKey={apiKey}\r\n apiSecret={apiSecret}\r\n apiUrl={apiUrl}\r\n isOpen={isOpen}\r\n config={paymentConfig}\r\n theme={theme}\r\n debug={debug}\r\n merchantName={merchantName}\r\n onSuccess={callbacks.onSuccess}\r\n onError={callbacks.onError}\r\n onClose={closePayment}\r\n />\r\n )}\r\n </CoinleyContext.Provider>\r\n );\r\n};\r\n\r\nexport const CoinleyCheckout = forwardRef((\r\n {\r\n customerEmail = '',\r\n merchantName = '',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n theme = 'light',\r\n autoOpen = false,\r\n testMode = false,\r\n debug = false,\r\n merchantWalletAddresses = {}\r\n },\r\n ref\r\n) => {\r\n const context = useContext(CoinleyContext);\r\n\r\n if (!context) {\r\n throw new Error('CoinleyCheckout must be used within a CoinleyProvider');\r\n }\r\n\r\n const { openPayment, closePayment } = context;\r\n\r\n const open = (config) => {\r\n try {\r\n if (debug) {\r\n console.log('Opening Coinley checkout with config:', config);\r\n }\r\n\r\n if (!config.amount || config.amount <= 0) {\r\n throw new Error('Amount must be greater than 0');\r\n }\r\n\r\n const finalConfig = {\r\n ...config,\r\n customerEmail: config.customerEmail || customerEmail,\r\n merchantWalletAddresses: {\r\n ...merchantWalletAddresses,\r\n ...config.merchantWalletAddresses\r\n },\r\n metadata: {\r\n ...config.metadata,\r\n testMode,\r\n checkoutVersion: '1.0.0'\r\n }\r\n };\r\n\r\n const checkoutCallbacks = {\r\n onSuccess,\r\n onError,\r\n onClose\r\n };\r\n\r\n openPayment(finalConfig, checkoutCallbacks);\r\n } catch (error) {\r\n console.error('Failed to open Coinley checkout:', error);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n const close = () => {\r\n closePayment();\r\n };\r\n\r\n useImperativeHandle(ref, () => ({\r\n open,\r\n close\r\n }));\r\n\r\n return null;\r\n});\r\n\r\nCoinleyCheckout.displayName = 'CoinleyCheckout';\r\n\r\nexport const useCoinley = () => {\r\n const context = useContext(CoinleyContext);\r\n if (!context) {\r\n throw new Error('useCoinley must be used within a CoinleyProvider');\r\n }\r\n return context;\r\n};\r\n\r\nexport const ThemeProvider = ({\r\n initialTheme = 'light',\r\n children\r\n}) => {\r\n const [theme, setTheme] = React.useState(initialTheme);\r\n\r\n React.useEffect(() => {\r\n document.documentElement.setAttribute('data-coinley-theme', theme);\r\n }, [theme]);\r\n\r\n const toggleTheme = () => {\r\n setTheme(prev => prev === 'light' ? 'dark' : 'light');\r\n };\r\n\r\n return (\r\n <div className={`coinley-theme-${theme}`}>\r\n {children}\r\n </div>\r\n );\r\n};","// Main SDK exports\r\nexport {\r\n CoinleyProvider,\r\n CoinleyCheckout,\r\n ThemeProvider,\r\n useCoinley\r\n} from './CoinleyProvider';\r\n\r\nexport { PaymentAPI } from './PaymentAPI';\r\nexport { default as CoinleyPayment } from './CoinleyPayment';\r\n\r\n// Import styles\r\nimport './styles/index.css';\r\n\r\n// Version\r\nexport const VERSION = '0.0.0';\r\n\r\n// Utils\r\nexport const utils = {\r\n formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\r\n \r\n truncateAddress: (address, startChars = 6, endChars = 4) => {\r\n if (!address) return '';\r\n if (address.length <= startChars + endChars) return address;\r\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\r\n },\r\n\r\n isValidAddress: (address, network) => {\r\n if (!address) return false;\r\n \r\n switch (network.toLowerCase()) {\r\n case 'ethereum':\r\n case 'bsc':\r\n case 'polygon':\r\n return /^0x[a-fA-F0-9]{40}$/.test(address);\r\n case 'tron':\r\n return /^T[a-zA-Z0-9]{33}$/.test(address);\r\n case 'solana':\r\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\r\n default:\r\n return address.length > 0;\r\n }\r\n },\r\n\r\n copyToClipboard: async (text) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n};\r\n\r\n// Error classes\r\nexport class CoinleyError extends Error {\r\n constructor(message, code) {\r\n super(message);\r\n this.name = 'CoinleyError';\r\n this.code = code;\r\n }\r\n}\r\n\r\n// Default config\r\nexport const DEFAULT_CONFIG = {\r\n theme: 'light',\r\n debug: false,\r\n testMode: false,\r\n autoOpen: false\r\n};"],"names":["f","require$$0","k","Symbol","for","l","m","Object","prototype","hasOwnProperty","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","key","ref","__self","__source","q","c","a","g","b","d","e","h","call","defaultProps","$$typeof","type","props","_owner","current","reactJsxRuntime_production_min","jsx","jsxs","jsxRuntimeModule","exports","PaymentAPI","constructor","baseURL","apiKey","apiSecret","this","api","axios","create","endsWith","slice","timeout","headers","interceptors","request","use","config","token","generateMerchantToken","console","log","method","_a","toUpperCase","url","data","error","Promise","reject","response","status","_b","message","_c","Error","_d","_e","credentials","btoa","createPayment","params","post","getPayment","paymentId","get","getNetworks","networks","id","name","shortName","chainId","explorerUrl","isTestnet","getStablecoins","stablecoins","symbol","contractAddress","decimals","isStablecoin","networkId","Network","verifyQRPayment","processPayment","transactionHash","network","senderAddress","healthCheck","WalletIntegration","selectedNetwork","selectedToken","paymentData","onTransactionSent","onError","isConnecting","setIsConnecting","isConnected","address","useWallet","useWalletConnect","sendTransaction","useWalletTransaction","useWalletModal","useEffect","handleSendTransaction","async","recipientAddress","metadata","recipientWallet","txHash","amount","totalAmount","Math","pow","toString","transferData","padStart","parseInt","to","value","className","children","Wallet","jsxRuntimeExports","Loader2","ConnectButton","theme","size","customText","CoinleyPayment","apiUrl","onSuccess","onClose","isOpen","merchantName","debug","currentStep","setCurrentStep","useState","setNetworks","tokens","setTokens","setSelectedNetwork","setSelectedToken","paymentMethod","setPaymentMethod","qrCode","setQrCode","setPaymentData","loading","setLoading","setError","copied","setCopied","setTxHash","paymentAPI","useRef","walletConfig","createCoinleyWalletConfig","appName","appDescription","chains","initializePayment","networksRes","tokensRes","all","err","handleMethodSelect","initiatePayment","paymentPayload","currency","customerEmail","callbackUrl","payment","generateQRCode","merchantWalletAddresses","qrData","QRCodeLib","toDataURL","width","margin","color","dark","light","startPaymentVerification","attempts","checkPayment","result","verified","handlePaymentSuccess","setTimeout","handleClose","CoinleyWalletProvider","motion","div","initial","scale","opacity","animate","exit","onClick","ArrowLeft","X","Sparkles","toFixed","AnimatePresence","mode","x","button","whileHover","whileTap","Zap","QrCode","map","networkTokens","filter","length","preferredToken","find","t","handleNetworkSelect","logo","src","alt","charAt","ChevronDown","CheckCircle2","text","navigator","clipboard","writeText","copyToClipboard","Copy","href","target","rel","ExternalLink","AlertCircle","WalletModal","CoinleyContext","createContext","CoinleyCheckout","forwardRef","autoOpen","testMode","context","useContext","openPayment","closePayment","open","finalConfig","checkoutVersion","close","React","useImperativeHandle","displayName","utils","formatAmount","truncateAddress","startChars","endChars","isValidAddress","toLowerCase","test","CoinleyError","code","super","setIsOpen","paymentConfig","setPaymentConfig","callbacks","setCallbacks","setMerchantName","contextValue","checkoutCallbacks","Provider","initialTheme","setTheme","document","documentElement","setAttribute"],"mappings":"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","x_google_ignoreList":[0,1]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coinley-test",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Beautiful blockchain payment gateway SDK for seamless crypto payments",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",