accesly 0.1.0 → 0.1.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AcceslyClient.ts","../src/auth.ts","../src/AcceslyProvider.tsx","../src/hooks/useAccesly.ts","../src/components/ConnectModal.tsx","../src/components/WalletPanel.tsx","../src/components/ConnectButton.tsx","../src/index.ts"],"names":["STORAGE_KEY","DEFAULT_BASE_URL","AcceslyClient","appId","baseUrl","tokens","raw","path","options","retry","headers","res","data","refreshToken","params","limit","openAuthPopup","resolve","reject","left","top","popup","handleMessage","event","cleanup","pollClosed","AcceslyContext","createContext","AcceslyProvider","children","config","client","useMemo","wallet","setWallet","useState","balance","setBalance","loading","setLoading","creating","setCreating","error","setError","useEffect","loadWallet","fetchBalance","interval","err","createWallet","native","b","connect","useCallback","disconnect","sendPayment","refreshBalance","refreshWallet","contextValue","jsx","useAccesly","context","useContext","ConnectModal","onClose","onConnect","styles","jsxs","e","WalletPanel","activeTab","setActiveTab","sendDest","setSendDest","sendAmount","setSendAmount","sendMemo","setSendMemo","sending","setSending","sendResult","setSendResult","sendError","setSendError","transactions","setTransactions","txLoading","setTxLoading","copiedField","setCopiedField","loadTransactions","handleSend","result","truncate","addr","start","end","copyToClipboard","text","field","handleDisconnect","formattedBalance","idColor","identiconColor","tabs","tab","renderWalletTab","renderActivityTab","renderAccountTab","renderSecurityTab","fields","f","address","hash","i","ConnectButton","showModal","setShowModal","showPanel","setShowPanel","Fragment","truncated","balanceText","color","STYLE_ID","style"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * AcceslyClient.ts - HTTP client for the Accesly backend API.\r\n *\r\n * Handles:\r\n * - All wallet API calls (balance, send, create, etc.)\r\n * - Automatic token refresh on 401 responses\r\n * - API key injection in every request\r\n */\r\n\r\nimport type { WalletInfo, TransactionRecord, SendPaymentParams, AuthTokens } from './types';\r\n\r\nconst STORAGE_KEY = 'accesly_auth';\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\nexport class AcceslyClient {\r\n private baseUrl: string;\r\n private appId: string;\r\n\r\n constructor(appId: string, baseUrl?: string) {\r\n this.appId = appId;\r\n this.baseUrl = baseUrl || DEFAULT_BASE_URL;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Token management (stored in localStorage)\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Save auth tokens to localStorage */\r\n setTokens(tokens: AuthTokens): void {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(tokens));\r\n }\r\n\r\n /** Get stored auth tokens */\r\n getTokens(): AuthTokens | null {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n if (!raw) return null;\r\n try {\r\n return JSON.parse(raw) as AuthTokens;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** Clear stored auth tokens */\r\n clearTokens(): void {\r\n localStorage.removeItem(STORAGE_KEY);\r\n }\r\n\r\n /** Check if we have a stored session */\r\n hasSession(): boolean {\r\n return this.getTokens() !== null;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // HTTP layer\r\n // ---------------------------------------------------------------------------\r\n\r\n /**\r\n * Make an authenticated request to the Accesly API.\r\n * Automatically adds the API key and auth token.\r\n * Retries once with a refreshed token on 401.\r\n */\r\n private async request<T>(\r\n path: string,\r\n options: RequestInit = {},\r\n retry = true\r\n ): Promise<T> {\r\n const tokens = this.getTokens();\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n 'x-accesly-key': this.appId,\r\n ...(tokens ? { Authorization: `Bearer ${tokens.accessToken}` } : {}),\r\n };\r\n\r\n const res = await fetch(`${this.baseUrl}${path}`, {\r\n ...options,\r\n headers: { ...headers, ...(options.headers as Record<string, string>) },\r\n });\r\n\r\n // If unauthorized, try to refresh the token once\r\n if (res.status === 401 && retry && tokens?.refreshToken) {\r\n const refreshed = await this.refreshToken(tokens.refreshToken);\r\n if (refreshed) {\r\n return this.request<T>(path, options, false);\r\n }\r\n // Refresh failed - clear tokens\r\n this.clearTokens();\r\n throw new Error('Session expired. Please reconnect.');\r\n }\r\n\r\n if (!res.ok) {\r\n const data = await res.json().catch(() => ({}));\r\n throw new Error(data.error || data.details || `Request failed: ${res.status}`);\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n /** Refresh the access token using the refresh token */\r\n private async refreshToken(refreshToken: string): Promise<boolean> {\r\n try {\r\n const res = await fetch(`${this.baseUrl}/api/auth/refresh`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ refreshToken }),\r\n });\r\n\r\n if (!res.ok) return false;\r\n\r\n const data = await res.json();\r\n const tokens = this.getTokens();\r\n if (tokens) {\r\n this.setTokens({\r\n ...tokens,\r\n accessToken: data.accessToken,\r\n refreshToken: data.refreshToken,\r\n expiresAt: data.expiresAt,\r\n });\r\n }\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Wallet API methods\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Get wallet info for the authenticated user */\r\n async getWalletInfo(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/info');\r\n }\r\n\r\n /** Create a new wallet for the authenticated user */\r\n async createWallet(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/create', { method: 'POST' });\r\n }\r\n\r\n /** Get the wallet's balance */\r\n async getBalance(): Promise<{ balances: Array<{ asset: string; balance: string }> }> {\r\n return this.request('/api/wallet/balance');\r\n }\r\n\r\n /** Send a payment */\r\n async sendPayment(params: SendPaymentParams): Promise<{ txHash: string }> {\r\n return this.request('/api/wallet/send', {\r\n method: 'POST',\r\n body: JSON.stringify(params),\r\n });\r\n }\r\n\r\n /** Get transaction history */\r\n async getTransactions(limit = 20): Promise<{ transactions: TransactionRecord[] }> {\r\n return this.request(`/api/wallet/transactions?limit=${limit}`);\r\n }\r\n\r\n /** Rotate wallet keys */\r\n async rotateKeys(): Promise<{ newStellarAddress: string }> {\r\n return this.request('/api/wallet/rotate', { method: 'POST' });\r\n }\r\n}\r\n","/**\r\n * auth.ts - Popup-based OAuth authentication for the SDK.\r\n *\r\n * Opens a popup window pointing to the Accesly auth page.\r\n * The popup handles Google OAuth and sends the resulting tokens\r\n * back to this window via postMessage.\r\n */\r\n\r\nimport type { AuthTokens } from './types';\r\n\r\n/** Popup window dimensions */\r\nconst POPUP_WIDTH = 450;\r\nconst POPUP_HEIGHT = 600;\r\n\r\n/**\r\n * Open the Accesly auth popup and wait for the user to authenticate.\r\n * Returns the auth tokens on success, or throws on failure/cancellation.\r\n */\r\nexport function openAuthPopup(baseUrl: string, appId: string): Promise<AuthTokens> {\r\n return new Promise((resolve, reject) => {\r\n // Center the popup on screen\r\n const left = window.screenX + (window.innerWidth - POPUP_WIDTH) / 2;\r\n const top = window.screenY + (window.innerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n `${baseUrl}/auth/popup?appId=${appId}`,\r\n 'accesly-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},toolbar=no,menubar=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Failed to open popup. Please allow popups for this site.'));\r\n return;\r\n }\r\n\r\n /** Handle messages from the popup */\r\n function handleMessage(event: MessageEvent) {\r\n // Only accept messages from the Accesly domain\r\n if (!event.origin.includes(new URL(baseUrl).host)) return;\r\n\r\n if (event.data?.type === 'accesly-auth-success') {\r\n cleanup();\r\n resolve(event.data.payload as AuthTokens);\r\n }\r\n\r\n if (event.data?.type === 'accesly-auth-error') {\r\n cleanup();\r\n reject(new Error(event.data.error || 'Authentication failed'));\r\n }\r\n }\r\n\r\n /** Detect if the user closed the popup manually */\r\n const pollClosed = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Authentication cancelled'));\r\n }\r\n }, 500);\r\n\r\n /** Remove all listeners and intervals */\r\n function cleanup() {\r\n window.removeEventListener('message', handleMessage);\r\n clearInterval(pollClosed);\r\n }\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n}\r\n","/**\r\n * AcceslyProvider.tsx - Main SDK provider component.\r\n *\r\n * Wraps the application and provides wallet state to all children.\r\n * Handles auth token management, wallet loading, and balance refresh.\r\n *\r\n * Usage:\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <App />\r\n * </AcceslyProvider>\r\n */\r\n\r\nimport {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n type ReactNode,\r\n} from 'react';\r\nimport { AcceslyClient } from './AcceslyClient';\r\nimport { openAuthPopup } from './auth';\r\nimport type {\r\n AcceslyConfig,\r\n AcceslyContextType,\r\n WalletInfo,\r\n SendPaymentParams,\r\n} from './types';\r\n\r\n/** Internal context - use the useAccesly hook to access it */\r\nexport const AcceslyContext = createContext<AcceslyContextType | null>(null);\r\n\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\nexport function AcceslyProvider({\r\n children,\r\n ...config\r\n}: AcceslyConfig & { children: ReactNode }) {\r\n const baseUrl = config.baseUrl || DEFAULT_BASE_URL;\r\n\r\n // Create a stable client instance\r\n const client = useMemo(\r\n () => new AcceslyClient(config.appId, baseUrl),\r\n [config.appId, baseUrl]\r\n );\r\n\r\n const [wallet, setWallet] = useState<WalletInfo | null>(null);\r\n const [balance, setBalance] = useState<string | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [creating, setCreating] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n // --- Check for existing session on mount ---\r\n useEffect(() => {\r\n if (client.hasSession()) {\r\n loadWallet();\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [client]);\r\n\r\n // --- Auto-refresh balance every 15s when connected ---\r\n useEffect(() => {\r\n if (!wallet) return;\r\n fetchBalance();\r\n const interval = setInterval(fetchBalance, 15000);\r\n return () => clearInterval(interval);\r\n }, [wallet]);\r\n\r\n /** Load wallet info from the backend. Creates wallet if first login. */\r\n async function loadWallet() {\r\n setError(null);\r\n try {\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n // If 404, create wallet (first login)\r\n if (err.message?.includes('404') || err.message?.includes('not found')) {\r\n await createWallet();\r\n return;\r\n }\r\n // If session expired, clear and let user reconnect\r\n if (err.message?.includes('Session expired')) {\r\n client.clearTokens();\r\n setWallet(null);\r\n }\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Create a new wallet for the user */\r\n async function createWallet() {\r\n setCreating(true);\r\n setError(null);\r\n try {\r\n await client.createWallet();\r\n // Fetch the full wallet info after creation\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n setError(err.message);\r\n } finally {\r\n setCreating(false);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Fetch current XLM balance */\r\n async function fetchBalance() {\r\n try {\r\n const data = await client.getBalance();\r\n const native = data.balances.find((b) => b.asset === 'native');\r\n setBalance(native?.balance || '0');\r\n } catch {\r\n // Silently fail, keep previous balance\r\n }\r\n }\r\n\r\n /** Open auth popup, get tokens, load wallet */\r\n const connect = useCallback(async () => {\r\n setError(null);\r\n try {\r\n const tokens = await openAuthPopup(baseUrl, config.appId);\r\n client.setTokens(tokens);\r\n setLoading(true);\r\n await loadWallet();\r\n } catch (err: any) {\r\n if (err.message !== 'Authentication cancelled') {\r\n setError(err.message);\r\n }\r\n }\r\n }, [baseUrl, config.appId, client]);\r\n\r\n /** Disconnect: clear tokens and state */\r\n const disconnect = useCallback(() => {\r\n client.clearTokens();\r\n setWallet(null);\r\n setBalance(null);\r\n setError(null);\r\n config.onDisconnect?.();\r\n }, [client, config.onDisconnect]);\r\n\r\n /** Send a payment */\r\n const sendPayment = useCallback(\r\n async (params: SendPaymentParams) => {\r\n return client.sendPayment(params);\r\n },\r\n [client]\r\n );\r\n\r\n /** Refresh balance on demand */\r\n const refreshBalance = useCallback(async () => {\r\n await fetchBalance();\r\n }, [client]);\r\n\r\n /** Refresh wallet info on demand */\r\n const refreshWallet = useCallback(async () => {\r\n await loadWallet();\r\n }, [client]);\r\n\r\n const contextValue: AcceslyContextType = {\r\n loading,\r\n creating,\r\n wallet,\r\n balance,\r\n error,\r\n connect,\r\n disconnect,\r\n sendPayment,\r\n refreshBalance,\r\n refreshWallet,\r\n };\r\n\r\n return (\r\n <AcceslyContext.Provider value={contextValue}>\r\n {children}\r\n </AcceslyContext.Provider>\r\n );\r\n}\r\n","/**\r\n * useAccesly.ts - Public hook for accessing wallet state and actions.\r\n *\r\n * Usage:\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n *\r\n * Must be used within an <AcceslyProvider>.\r\n */\r\n\r\nimport { useContext } from 'react';\r\nimport { AcceslyContext } from '../AcceslyProvider';\r\nimport type { AcceslyContextType } from '../types';\r\n\r\nexport function useAccesly(): AcceslyContextType {\r\n const context = useContext(AcceslyContext);\r\n if (!context) {\r\n throw new Error(\r\n 'useAccesly must be used within an <AcceslyProvider>. ' +\r\n 'Wrap your app with <AcceslyProvider appId=\"acc_xxxxx\">.'\r\n );\r\n }\r\n return context;\r\n}\r\n","/**\r\n * ConnectModal.tsx - SDK login modal.\r\n *\r\n * Shows a centered modal with the Google login option.\r\n * When the user clicks \"Continue with Google\", triggers the\r\n * popup-based OAuth flow.\r\n */\r\n\r\ninterface ConnectModalProps {\r\n onClose: () => void;\r\n onConnect: () => void;\r\n}\r\n\r\nexport function ConnectModal({ onClose, onConnect }: ConnectModalProps) {\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\r\n {/* Close button */}\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n {/* Branding */}\r\n <div style={styles.iconWrapper}>\r\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#667eea\" strokeWidth=\"1.5\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n </div>\r\n <h2 style={styles.title}>Connect to Accesly</h2>\r\n <p style={styles.subtitle}>Choose how you want to connect</p>\r\n\r\n {/* Google button */}\r\n <button onClick={onConnect} style={styles.googleBtn}>\r\n <svg style={styles.googleIcon} viewBox=\"0 0 24 24\">\r\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\r\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\r\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\r\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\r\n </svg>\r\n Continue with Google\r\n </button>\r\n\r\n <p style={styles.footer}>\r\n Powered by Accesly\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n modal: {\r\n position: 'relative' as const,\r\n backgroundColor: '#141428',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n padding: '2rem',\r\n width: '100%',\r\n maxWidth: '380px',\r\n textAlign: 'center' as const,\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n iconWrapper: {\r\n width: '56px',\r\n height: '56px',\r\n borderRadius: '16px',\r\n backgroundColor: 'rgba(102, 126, 234, 0.1)',\r\n border: '1px solid rgba(102, 126, 234, 0.2)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto 1rem',\r\n },\r\n title: {\r\n fontSize: '1.3rem',\r\n fontWeight: 700,\r\n color: '#e2e8f0',\r\n margin: '0 0 0.25rem',\r\n },\r\n subtitle: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n margin: '0 0 1.5rem',\r\n },\r\n googleBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.75rem',\r\n padding: '0.85rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n color: '#e2e8f0',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '12px',\r\n fontSize: '0.95rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginBottom: '1.25rem',\r\n },\r\n googleIcon: {\r\n width: '20px',\r\n height: '20px',\r\n flexShrink: 0,\r\n },\r\n footer: {\r\n color: '#475569',\r\n fontSize: '0.7rem',\r\n margin: 0,\r\n },\r\n};\r\n","/**\r\n * WalletPanel.tsx - SDK wallet panel modal with tabs.\r\n *\r\n * Opened by clicking the connected pill.\r\n * Tabs: Wallet (send/receive), Activity (transactions),\r\n * Account (details), Security (recovery + disconnect).\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport type { TransactionRecord, SendPaymentParams } from '../types';\r\n\r\ntype Tab = 'wallet' | 'activity' | 'account' | 'security';\r\n\r\ninterface WalletPanelProps {\r\n onClose: () => void;\r\n}\r\n\r\nexport function WalletPanel({ onClose }: WalletPanelProps) {\r\n const { wallet, balance, disconnect, sendPayment, refreshBalance } = useAccesly();\r\n const [activeTab, setActiveTab] = useState<Tab>('wallet');\r\n\r\n // Send form state\r\n const [sendDest, setSendDest] = useState('');\r\n const [sendAmount, setSendAmount] = useState('');\r\n const [sendMemo, setSendMemo] = useState('');\r\n const [sending, setSending] = useState(false);\r\n const [sendResult, setSendResult] = useState<string | null>(null);\r\n const [sendError, setSendError] = useState<string | null>(null);\r\n\r\n // Activity state\r\n const [transactions, setTransactions] = useState<TransactionRecord[]>([]);\r\n const [txLoading, setTxLoading] = useState(false);\r\n\r\n // Clipboard feedback\r\n const [copiedField, setCopiedField] = useState<string | null>(null);\r\n\r\n // Lazy-load transactions when Activity tab is selected\r\n useEffect(() => {\r\n if (activeTab === 'activity' && transactions.length === 0) {\r\n loadTransactions();\r\n }\r\n }, [activeTab]);\r\n\r\n if (!wallet) return null;\r\n\r\n async function loadTransactions() {\r\n setTxLoading(true);\r\n try {\r\n // Use the AcceslyClient indirectly through the parent context\r\n // For SDK, we fetch directly since we have the client\r\n const res = await fetch('/api/wallet/transactions?limit=20');\r\n // Note: This won't work cross-origin. In the SDK, transactions\r\n // are loaded via the AcceslyClient. For now, we'll show placeholder.\r\n // TODO: Expose getTransactions through context\r\n } catch {\r\n // Silently fail\r\n } finally {\r\n setTxLoading(false);\r\n }\r\n }\r\n\r\n async function handleSend() {\r\n if (!sendDest || !sendAmount) return;\r\n setSending(true);\r\n setSendError(null);\r\n try {\r\n const result = await sendPayment({\r\n destination: sendDest,\r\n amount: sendAmount,\r\n memo: sendMemo || undefined,\r\n });\r\n setSendResult(result.txHash);\r\n refreshBalance();\r\n } catch (err: any) {\r\n setSendError(err.message);\r\n } finally {\r\n setSending(false);\r\n }\r\n }\r\n\r\n function truncate(addr: string, start = 6, end = 6): string {\r\n if (addr.length <= start + end + 3) return addr;\r\n return `${addr.slice(0, start)}...${addr.slice(-end)}`;\r\n }\r\n\r\n async function copyToClipboard(text: string, field: string) {\r\n await navigator.clipboard.writeText(text);\r\n setCopiedField(field);\r\n setTimeout(() => setCopiedField(null), 1500);\r\n }\r\n\r\n function handleDisconnect() {\r\n disconnect();\r\n onClose();\r\n }\r\n\r\n const formattedBalance = balance\r\n ? parseFloat(balance).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n })\r\n : '---';\r\n\r\n const idColor = identiconColor(wallet.stellarAddress);\r\n\r\n const tabs: { key: Tab; label: string }[] = [\r\n { key: 'wallet', label: 'Wallet' },\r\n { key: 'activity', label: 'Activity' },\r\n { key: 'account', label: 'Account' },\r\n { key: 'security', label: 'Security' },\r\n ];\r\n\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.panel} onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={styles.header}>\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n <div style={{ ...styles.identicon, backgroundColor: idColor }} />\r\n <p style={styles.headerAddr}>{truncate(wallet.stellarAddress, 8, 8)}</p>\r\n <p style={styles.headerBalance}>\r\n {formattedBalance} <span style={styles.headerCurrency}>XLM</span>\r\n </p>\r\n </div>\r\n\r\n {/* Tab bar */}\r\n <div style={styles.tabBar}>\r\n {tabs.map((tab) => (\r\n <button\r\n key={tab.key}\r\n onClick={() => setActiveTab(tab.key)}\r\n style={{\r\n ...styles.tab,\r\n ...(activeTab === tab.key ? styles.tabActive : {}),\r\n }}\r\n >\r\n {tab.label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Tab content */}\r\n <div style={styles.content}>\r\n {activeTab === 'wallet' && renderWalletTab()}\r\n {activeTab === 'activity' && renderActivityTab()}\r\n {activeTab === 'account' && renderAccountTab()}\r\n {activeTab === 'security' && renderSecurityTab()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n // --- Tab renderers ---\r\n\r\n function renderWalletTab() {\r\n // Send success state\r\n if (sendResult) {\r\n return (\r\n <div style={styles.centeredCol}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n <p style={{ color: '#34d399', fontWeight: 600, margin: '0.5rem 0' }}>Payment Sent</p>\r\n <p style={{ color: '#64748b', fontSize: '0.75rem', fontFamily: 'monospace' }}>\r\n {sendResult.slice(0, 12)}...{sendResult.slice(-12)}\r\n </p>\r\n <button onClick={() => { setSendResult(null); setSendDest(''); setSendAmount(''); setSendMemo(''); }} style={styles.primaryBtn}>\r\n Done\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div style={styles.walletTab}>\r\n {/* Send form */}\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Destination</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"G...\"\r\n value={sendDest}\r\n onChange={(e) => setSendDest(e.target.value)}\r\n maxLength={56}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Amount (XLM)</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={sendAmount}\r\n onChange={(e) => setSendAmount(e.target.value)}\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Memo (optional)</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"What is this for?\"\r\n value={sendMemo}\r\n onChange={(e) => setSendMemo(e.target.value)}\r\n maxLength={28}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n {sendError && <p style={styles.error}>{sendError}</p>}\r\n <button\r\n onClick={handleSend}\r\n disabled={sending || !sendDest || !sendAmount}\r\n style={{\r\n ...styles.primaryBtn,\r\n opacity: sending || !sendDest || !sendAmount ? 0.5 : 1,\r\n }}\r\n >\r\n {sending ? 'Sending...' : 'Send Payment'}\r\n </button>\r\n\r\n {/* Copy address for receiving */}\r\n <button\r\n onClick={() => copyToClipboard(wallet!.stellarAddress, 'receive')}\r\n style={styles.receiveBtn}\r\n >\r\n {copiedField === 'receive' ? 'Address Copied!' : 'Copy Address to Receive'}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n function renderActivityTab() {\r\n return (\r\n <p style={styles.emptyText}>\r\n Transaction history coming soon.\r\n </p>\r\n );\r\n }\r\n\r\n function renderAccountTab() {\r\n const fields = [\r\n { label: 'Email', value: wallet!.email, key: 'email' },\r\n { label: 'Contract ID', value: wallet!.contractId, key: 'contract', copy: true },\r\n { label: 'Stellar Address', value: wallet!.stellarAddress, key: 'stellar', copy: true },\r\n { label: 'Public Key', value: wallet!.publicKey, key: 'pubkey', copy: true },\r\n { label: 'Created', value: new Date(wallet!.createdAt).toLocaleDateString(), key: 'created' },\r\n ];\r\n\r\n return (\r\n <div style={styles.fieldList}>\r\n {fields.map((f) => (\r\n <div key={f.key} style={styles.field}>\r\n <span style={styles.fieldLabel}>{f.label}</span>\r\n {f.copy ? (\r\n <button\r\n onClick={() => copyToClipboard(f.value, f.key)}\r\n style={{\r\n ...styles.copyBtn,\r\n color: copiedField === f.key ? '#34d399' : '#a5b4fc',\r\n borderColor: copiedField === f.key ? '#34d399' : '#2a2a4a',\r\n }}\r\n >\r\n {copiedField === f.key ? 'Copied!' : truncate(f.value, 8, 8)}\r\n </button>\r\n ) : (\r\n <span style={styles.fieldValue}>{f.value}</span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n function renderSecurityTab() {\r\n return (\r\n <div style={styles.securityTab}>\r\n <div style={styles.fieldList}>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Recovery</span>\r\n <span style={{ ...styles.fieldValue, color: '#34d399' }}>Protected</span>\r\n </div>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Method</span>\r\n <span style={styles.fieldValue}>Google ({wallet!.email})</span>\r\n </div>\r\n </div>\r\n <button onClick={handleDisconnect} style={styles.disconnectBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n <polyline points=\"16 17 21 12 16 7\" />\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\r\n </svg>\r\n Disconnect\r\n </button>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Styles\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n panel: {\r\n backgroundColor: '#0f0f1e',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n width: '100%',\r\n maxWidth: '420px',\r\n maxHeight: '85vh',\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n overflow: 'hidden',\r\n },\r\n header: {\r\n position: 'relative' as const,\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n padding: '1.5rem 1.5rem 1rem',\r\n background: 'linear-gradient(180deg, #1a1a3a 0%, #0f0f1e 100%)',\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n identicon: {\r\n width: '48px',\r\n height: '48px',\r\n borderRadius: '50%',\r\n marginBottom: '0.5rem',\r\n },\r\n headerAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n margin: '0 0 0.25rem',\r\n },\r\n headerBalance: {\r\n fontSize: '1.75rem',\r\n fontWeight: 700,\r\n color: '#ffffff',\r\n margin: 0,\r\n },\r\n headerCurrency: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#8b8ba7',\r\n },\r\n tabBar: {\r\n display: 'flex',\r\n borderBottom: '1px solid #2a2a4a',\r\n padding: '0 0.5rem',\r\n },\r\n tab: {\r\n flex: 1,\r\n padding: '0.75rem 0.5rem',\r\n background: 'none',\r\n border: 'none',\r\n borderBottom: '2px solid transparent',\r\n color: '#64748b',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n borderRadius: 0,\r\n },\r\n tabActive: {\r\n color: '#e2e8f0',\r\n borderBottomColor: '#667eea',\r\n },\r\n content: {\r\n flex: 1,\r\n overflowY: 'auto' as const,\r\n padding: '1rem 1.25rem 1.25rem',\r\n },\r\n // Wallet tab\r\n walletTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.75rem',\r\n },\r\n formGroup: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.3rem',\r\n },\r\n formLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.75rem',\r\n fontWeight: 500,\r\n },\r\n formInput: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.65rem 0.75rem',\r\n color: '#e2e8f0',\r\n fontSize: '0.9rem',\r\n outline: 'none',\r\n width: '100%',\r\n boxSizing: 'border-box' as const,\r\n fontFamily: 'inherit',\r\n },\r\n primaryBtn: {\r\n backgroundColor: '#667eea',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '10px',\r\n padding: '0.75rem',\r\n fontSize: '0.95rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginTop: '0.25rem',\r\n },\r\n receiveBtn: {\r\n backgroundColor: 'transparent',\r\n color: '#a5b4fc',\r\n border: '1.5px solid #4a4a7a',\r\n borderRadius: '10px',\r\n padding: '0.65rem',\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n width: '100%',\r\n },\r\n error: {\r\n color: '#f87171',\r\n fontSize: '0.8rem',\r\n margin: 0,\r\n padding: '0.4rem 0.6rem',\r\n backgroundColor: 'rgba(248, 113, 113, 0.1)',\r\n borderRadius: '6px',\r\n },\r\n centeredCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1rem 0',\r\n },\r\n // Account tab\r\n fieldList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n field: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '0.6rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n fieldLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n },\r\n fieldValue: {\r\n color: '#e2e8f0',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n },\r\n copyBtn: {\r\n background: 'none',\r\n border: '1px solid #2a2a4a',\r\n color: '#a5b4fc',\r\n padding: '0.2rem 0.5rem',\r\n borderRadius: '4px',\r\n fontSize: '0.72rem',\r\n fontFamily: 'monospace',\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n },\r\n // Security tab\r\n securityTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n disconnectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f87171',\r\n border: '1px solid rgba(248, 113, 113, 0.2)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n },\r\n emptyText: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n textAlign: 'center' as const,\r\n padding: '2rem 0',\r\n },\r\n};\r\n","/**\r\n * ConnectButton.tsx - SDK drop-in wallet button.\r\n *\r\n * Renders a dynamic button that:\r\n * - Shows \"Connect Wallet\" when disconnected → opens ConnectModal\r\n * - Shows a pill with address + balance when connected → opens WalletPanel\r\n * - Handles loading/creating states with spinners\r\n *\r\n * Usage:\r\n * <ConnectButton />\r\n */\r\n\r\nimport { useState } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport { ConnectModal } from './ConnectModal';\r\nimport { WalletPanel } from './WalletPanel';\r\n\r\nexport function ConnectButton() {\r\n const { wallet, balance, loading, creating, connect } = useAccesly();\r\n const [showModal, setShowModal] = useState(false);\r\n const [showPanel, setShowPanel] = useState(false);\r\n\r\n // Initial auth check\r\n if (loading) {\r\n return (\r\n <div style={styles.pillLoading}>\r\n <div style={styles.spinner} />\r\n </div>\r\n );\r\n }\r\n\r\n // Not connected\r\n if (!wallet) {\r\n return (\r\n <>\r\n <button\r\n onClick={() => setShowModal(true)}\r\n style={creating ? styles.pill : styles.connectBtn}\r\n disabled={creating}\r\n >\r\n {creating ? (\r\n <>\r\n <div style={styles.spinnerSmall} />\r\n <span style={styles.pillText}>Creating wallet...</span>\r\n </>\r\n ) : (\r\n <>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n Connect Wallet\r\n </>\r\n )}\r\n </button>\r\n\r\n {showModal && (\r\n <ConnectModal\r\n onClose={() => setShowModal(false)}\r\n onConnect={async () => {\r\n setShowModal(false);\r\n await connect();\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Connected - show pill\r\n const addr = wallet.stellarAddress;\r\n const truncated = `${addr.slice(0, 4)}...${addr.slice(-4)}`;\r\n const balanceText = balance\r\n ? `${parseFloat(balance).toFixed(2)} XLM`\r\n : '--- XLM';\r\n const color = identiconColor(addr);\r\n\r\n return (\r\n <>\r\n <button onClick={() => setShowPanel(true)} style={styles.pill}>\r\n <div style={{ ...styles.identicon, backgroundColor: color }} />\r\n <span style={styles.pillAddr}>{truncated}</span>\r\n <span style={styles.divider} />\r\n <span style={styles.pillBalance}>{balanceText}</span>\r\n </button>\r\n\r\n {showPanel && <WalletPanel onClose={() => setShowPanel(false)} />}\r\n </>\r\n );\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Inline styles (zero CSS dependencies)\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n connectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.6rem',\r\n padding: '0.85rem 1.75rem',\r\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '12px',\r\n fontSize: '1rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n transition: 'transform 0.15s, box-shadow 0.15s',\r\n boxShadow: '0 4px 15px rgba(102, 126, 234, 0.4)',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pill: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '0.5rem 0.85rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s, box-shadow 0.2s',\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pillLoading: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.5rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n height: '42px',\r\n },\r\n identicon: {\r\n width: '24px',\r\n height: '24px',\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n },\r\n pillAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#e2e8f0',\r\n },\r\n divider: {\r\n width: '1px',\r\n height: '16px',\r\n backgroundColor: '#3a3a5a',\r\n },\r\n pillBalance: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n fontWeight: 500,\r\n },\r\n pillText: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n },\r\n spinner: {\r\n width: '20px',\r\n height: '20px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n },\r\n spinnerSmall: {\r\n width: '16px',\r\n height: '16px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n flexShrink: 0,\r\n },\r\n};\r\n","/**\r\n * Accesly SDK - Account abstraction wallet for Stellar.\r\n *\r\n * Quick start:\r\n *\r\n * import { AcceslyProvider, ConnectButton } from 'accesly';\r\n *\r\n * function App() {\r\n * return (\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <ConnectButton />\r\n * </AcceslyProvider>\r\n * );\r\n * }\r\n *\r\n * For custom UI, use the useAccesly hook:\r\n *\r\n * import { useAccesly } from 'accesly';\r\n *\r\n * function MyWallet() {\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n * // Build your own UI\r\n * }\r\n */\r\n\r\n// --- CSS keyframes injection ---\r\n// Since the SDK uses inline styles, we inject required keyframes once\r\nif (typeof document !== 'undefined') {\r\n const STYLE_ID = 'accesly-keyframes';\r\n if (!document.getElementById(STYLE_ID)) {\r\n const style = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.textContent = `\r\n @keyframes accesly-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n\r\n// --- Components ---\r\nexport { AcceslyProvider } from './AcceslyProvider';\r\nexport { ConnectButton } from './components/ConnectButton';\r\n\r\n// --- Hooks ---\r\nexport { useAccesly } from './hooks/useAccesly';\r\n\r\n// --- Types ---\r\nexport type {\r\n AcceslyConfig,\r\n WalletInfo,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n AcceslyContextType,\r\n} from './types';\r\n"]}
1
+ {"version":3,"sources":["../src/AcceslyClient.ts","../src/auth.ts","../src/AcceslyProvider.tsx","../src/hooks/useAccesly.ts","../src/components/ConnectModal.tsx","../src/components/WalletPanel.tsx","../src/components/ConnectButton.tsx","../src/index.ts"],"names":["STORAGE_KEY","DEFAULT_BASE_URL","AcceslyApiError","message","status","AcceslyClient","appId","baseUrl","tokens","raw","path","options","retry","headers","res","data","refreshToken","params","limit","openAuthPopup","resolve","reject","left","top","popup","handleMessage","event","cleanup","pollClosed","AcceslyContext","createContext","AcceslyProvider","children","config","client","useMemo","wallet","setWallet","useState","balance","setBalance","loading","setLoading","creating","setCreating","error","setError","useEffect","loadWallet","fetchBalance","interval","err","createWallet","native","b","connect","useCallback","disconnect","sendPayment","rotateKeys","getTransactions","refreshBalance","refreshWallet","contextValue","jsx","useAccesly","context","useContext","ConnectModal","onClose","onConnect","styles","jsxs","e","WalletPanel","activeTab","setActiveTab","walletView","setWalletView","sendDest","setSendDest","sendAmount","setSendAmount","sendMemo","setSendMemo","sending","setSending","sendResult","setSendResult","sendError","setSendError","transactions","setTransactions","txLoading","setTxLoading","rotating","setRotating","rotateError","setRotateError","copiedField","setCopiedField","loadTransactions","txs","handleSend","result","resetSendForm","handleRotateKeys","handleDisconnect","truncate","addr","start","end","copyToClipboard","text","field","relativeTime","isoDate","diff","formattedBalance","idColor","identiconColor","tabs","tab","renderWalletTab","renderActivityTab","renderAccountTab","renderSecurityTab","tx","Fragment","fields","f","address","hash","ConnectButton","showModal","setShowModal","showPanel","setShowPanel","truncated","balanceText","color","STYLE_ID","style"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\r\n * AcceslyClient.ts - HTTP client for the Accesly backend API.\r\n *\r\n * Handles:\r\n * - All wallet API calls (balance, send, create, etc.)\r\n * - Automatic token refresh on 401 responses\r\n * - API key injection in every request\r\n */\r\n\r\nimport type { WalletInfo, TransactionRecord, SendPaymentParams, AuthTokens } from './types';\r\n\r\nconst STORAGE_KEY = 'accesly_auth';\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\n/** Custom error that preserves the HTTP status code */\r\nexport class AcceslyApiError extends Error {\r\n status: number;\r\n constructor(message: string, status: number) {\r\n super(message);\r\n this.name = 'AcceslyApiError';\r\n this.status = status;\r\n }\r\n}\r\n\r\nexport class AcceslyClient {\r\n private baseUrl: string;\r\n private appId: string;\r\n\r\n constructor(appId: string, baseUrl?: string) {\r\n this.appId = appId;\r\n this.baseUrl = baseUrl || DEFAULT_BASE_URL;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Token management (stored in localStorage)\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Save auth tokens to localStorage */\r\n setTokens(tokens: AuthTokens): void {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(tokens));\r\n }\r\n\r\n /** Get stored auth tokens */\r\n getTokens(): AuthTokens | null {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n if (!raw) return null;\r\n try {\r\n return JSON.parse(raw) as AuthTokens;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** Clear stored auth tokens */\r\n clearTokens(): void {\r\n localStorage.removeItem(STORAGE_KEY);\r\n }\r\n\r\n /** Check if we have a stored session */\r\n hasSession(): boolean {\r\n return this.getTokens() !== null;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // HTTP layer\r\n // ---------------------------------------------------------------------------\r\n\r\n /**\r\n * Make an authenticated request to the Accesly API.\r\n * Automatically adds the API key and auth token.\r\n * Retries once with a refreshed token on 401.\r\n */\r\n private async request<T>(\r\n path: string,\r\n options: RequestInit = {},\r\n retry = true\r\n ): Promise<T> {\r\n const tokens = this.getTokens();\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n 'x-accesly-key': this.appId,\r\n ...(tokens ? { Authorization: `Bearer ${tokens.accessToken}` } : {}),\r\n };\r\n\r\n const res = await fetch(`${this.baseUrl}${path}`, {\r\n ...options,\r\n headers: { ...headers, ...(options.headers as Record<string, string>) },\r\n });\r\n\r\n // If unauthorized, try to refresh the token once\r\n if (res.status === 401 && retry && tokens?.refreshToken) {\r\n const refreshed = await this.refreshToken(tokens.refreshToken);\r\n if (refreshed) {\r\n return this.request<T>(path, options, false);\r\n }\r\n // Refresh failed - clear tokens\r\n this.clearTokens();\r\n throw new Error('Session expired. Please reconnect.');\r\n }\r\n\r\n if (!res.ok) {\r\n const data = await res.json().catch(() => ({}));\r\n throw new AcceslyApiError(\r\n data.error || data.details || `Request failed: ${res.status}`,\r\n res.status\r\n );\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n /** Refresh the access token using the refresh token */\r\n private async refreshToken(refreshToken: string): Promise<boolean> {\r\n try {\r\n const res = await fetch(`${this.baseUrl}/api/auth/refresh`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ refreshToken }),\r\n });\r\n\r\n if (!res.ok) return false;\r\n\r\n const data = await res.json();\r\n const tokens = this.getTokens();\r\n if (tokens) {\r\n this.setTokens({\r\n ...tokens,\r\n accessToken: data.accessToken,\r\n refreshToken: data.refreshToken,\r\n expiresAt: data.expiresAt,\r\n });\r\n }\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Wallet API methods\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Get wallet info for the authenticated user */\r\n async getWalletInfo(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/info');\r\n }\r\n\r\n /** Create a new wallet for the authenticated user */\r\n async createWallet(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/create', { method: 'POST' });\r\n }\r\n\r\n /** Get the wallet's balance */\r\n async getBalance(): Promise<{ balances: Array<{ asset: string; balance: string }> }> {\r\n return this.request('/api/wallet/balance');\r\n }\r\n\r\n /** Send a payment */\r\n async sendPayment(params: SendPaymentParams): Promise<{ txHash: string }> {\r\n return this.request('/api/wallet/send', {\r\n method: 'POST',\r\n body: JSON.stringify(params),\r\n });\r\n }\r\n\r\n /** Get transaction history */\r\n async getTransactions(limit = 20): Promise<{ transactions: TransactionRecord[] }> {\r\n return this.request(`/api/wallet/transactions?limit=${limit}`);\r\n }\r\n\r\n /** Rotate wallet keys */\r\n async rotateKeys(): Promise<{ newStellarAddress: string }> {\r\n return this.request('/api/wallet/rotate', { method: 'POST' });\r\n }\r\n}\r\n","/**\r\n * auth.ts - Popup-based OAuth authentication for the SDK.\r\n *\r\n * Opens a popup window pointing to the Accesly auth page.\r\n * The popup handles Google OAuth and sends the resulting tokens\r\n * back to this window via postMessage.\r\n */\r\n\r\nimport type { AuthTokens } from './types';\r\n\r\n/** Popup window dimensions */\r\nconst POPUP_WIDTH = 450;\r\nconst POPUP_HEIGHT = 600;\r\n\r\n/**\r\n * Open the Accesly auth popup and wait for the user to authenticate.\r\n * Returns the auth tokens on success, or throws on failure/cancellation.\r\n */\r\nexport function openAuthPopup(baseUrl: string, appId: string): Promise<AuthTokens> {\r\n return new Promise((resolve, reject) => {\r\n // Center the popup on screen\r\n const left = window.screenX + (window.innerWidth - POPUP_WIDTH) / 2;\r\n const top = window.screenY + (window.innerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n `${baseUrl}/auth/popup?appId=${appId}`,\r\n 'accesly-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},toolbar=no,menubar=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Failed to open popup. Please allow popups for this site.'));\r\n return;\r\n }\r\n\r\n /** Handle messages from the popup */\r\n function handleMessage(event: MessageEvent) {\r\n // Only accept messages from the Accesly domain\r\n if (!event.origin.includes(new URL(baseUrl).host)) return;\r\n\r\n if (event.data?.type === 'accesly-auth-success') {\r\n cleanup();\r\n resolve(event.data.payload as AuthTokens);\r\n }\r\n\r\n if (event.data?.type === 'accesly-auth-error') {\r\n cleanup();\r\n reject(new Error(event.data.error || 'Authentication failed'));\r\n }\r\n }\r\n\r\n /** Detect if the user closed the popup manually */\r\n const pollClosed = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Authentication cancelled'));\r\n }\r\n }, 500);\r\n\r\n /** Remove all listeners and intervals */\r\n function cleanup() {\r\n window.removeEventListener('message', handleMessage);\r\n clearInterval(pollClosed);\r\n }\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n}\r\n","/**\r\n * AcceslyProvider.tsx - Main SDK provider component.\r\n *\r\n * Wraps the application and provides wallet state to all children.\r\n * Handles auth token management, wallet loading, and balance refresh.\r\n *\r\n * Usage:\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <App />\r\n * </AcceslyProvider>\r\n */\r\n\r\nimport {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n type ReactNode,\r\n} from 'react';\r\nimport { AcceslyClient, AcceslyApiError } from './AcceslyClient';\r\nimport { openAuthPopup } from './auth';\r\nimport type {\r\n AcceslyConfig,\r\n AcceslyContextType,\r\n WalletInfo,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n} from './types';\r\n\r\n/** Internal context - use the useAccesly hook to access it */\r\nexport const AcceslyContext = createContext<AcceslyContextType | null>(null);\r\n\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\nexport function AcceslyProvider({\r\n children,\r\n ...config\r\n}: AcceslyConfig & { children: ReactNode }) {\r\n const baseUrl = config.baseUrl || DEFAULT_BASE_URL;\r\n\r\n // Create a stable client instance\r\n const client = useMemo(\r\n () => new AcceslyClient(config.appId, baseUrl),\r\n [config.appId, baseUrl]\r\n );\r\n\r\n const [wallet, setWallet] = useState<WalletInfo | null>(null);\r\n const [balance, setBalance] = useState<string | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [creating, setCreating] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n // --- Check for existing session on mount ---\r\n useEffect(() => {\r\n if (client.hasSession()) {\r\n loadWallet();\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [client]);\r\n\r\n // --- Auto-refresh balance every 15s when connected ---\r\n useEffect(() => {\r\n if (!wallet) return;\r\n fetchBalance();\r\n const interval = setInterval(fetchBalance, 15000);\r\n return () => clearInterval(interval);\r\n }, [wallet]);\r\n\r\n /** Load wallet info from the backend. Creates wallet if first login. */\r\n async function loadWallet() {\r\n setError(null);\r\n try {\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n // If 404, user has no wallet yet — create one (first login)\r\n if (err instanceof AcceslyApiError && err.status === 404) {\r\n await createWallet();\r\n return;\r\n }\r\n // If session expired, clear tokens and let user reconnect\r\n if (err instanceof AcceslyApiError && err.status === 401) {\r\n client.clearTokens();\r\n setWallet(null);\r\n }\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Create a new wallet for the user */\r\n async function createWallet() {\r\n setCreating(true);\r\n setError(null);\r\n try {\r\n await client.createWallet();\r\n // Fetch the full wallet info after creation\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n setError(err.message);\r\n } finally {\r\n setCreating(false);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Fetch current XLM balance */\r\n async function fetchBalance() {\r\n try {\r\n const data = await client.getBalance();\r\n const native = data.balances.find((b) => b.asset === 'native');\r\n setBalance(native?.balance || '0');\r\n } catch {\r\n // Silently fail, keep previous balance\r\n }\r\n }\r\n\r\n /** Open auth popup, get tokens, load wallet */\r\n const connect = useCallback(async () => {\r\n setError(null);\r\n try {\r\n const tokens = await openAuthPopup(baseUrl, config.appId);\r\n client.setTokens(tokens);\r\n setLoading(true);\r\n await loadWallet();\r\n } catch (err: any) {\r\n if (err.message !== 'Authentication cancelled') {\r\n setError(err.message);\r\n }\r\n }\r\n }, [baseUrl, config.appId, client]);\r\n\r\n /** Disconnect: clear tokens and state */\r\n const disconnect = useCallback(() => {\r\n client.clearTokens();\r\n setWallet(null);\r\n setBalance(null);\r\n setError(null);\r\n config.onDisconnect?.();\r\n }, [client, config.onDisconnect]);\r\n\r\n /** Send a payment */\r\n const sendPayment = useCallback(\r\n async (params: SendPaymentParams) => {\r\n return client.sendPayment(params);\r\n },\r\n [client]\r\n );\r\n\r\n /** Rotate wallet keys */\r\n const rotateKeys = useCallback(async () => {\r\n return client.rotateKeys();\r\n }, [client]);\r\n\r\n /** Get transaction history */\r\n const getTransactions = useCallback(\r\n async (limit = 20) => {\r\n const data = await client.getTransactions(limit);\r\n return data.transactions;\r\n },\r\n [client]\r\n );\r\n\r\n /** Refresh balance on demand */\r\n const refreshBalance = useCallback(async () => {\r\n await fetchBalance();\r\n }, [client]);\r\n\r\n /** Refresh wallet info on demand */\r\n const refreshWallet = useCallback(async () => {\r\n await loadWallet();\r\n }, [client]);\r\n\r\n const contextValue: AcceslyContextType = {\r\n loading,\r\n creating,\r\n wallet,\r\n balance,\r\n error,\r\n connect,\r\n disconnect,\r\n sendPayment,\r\n rotateKeys,\r\n getTransactions,\r\n refreshBalance,\r\n refreshWallet,\r\n };\r\n\r\n return (\r\n <AcceslyContext.Provider value={contextValue}>\r\n {children}\r\n </AcceslyContext.Provider>\r\n );\r\n}\r\n","/**\r\n * useAccesly.ts - Public hook for accessing wallet state and actions.\r\n *\r\n * Usage:\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n *\r\n * Must be used within an <AcceslyProvider>.\r\n */\r\n\r\nimport { useContext } from 'react';\r\nimport { AcceslyContext } from '../AcceslyProvider';\r\nimport type { AcceslyContextType } from '../types';\r\n\r\nexport function useAccesly(): AcceslyContextType {\r\n const context = useContext(AcceslyContext);\r\n if (!context) {\r\n throw new Error(\r\n 'useAccesly must be used within an <AcceslyProvider>. ' +\r\n 'Wrap your app with <AcceslyProvider appId=\"acc_xxxxx\">.'\r\n );\r\n }\r\n return context;\r\n}\r\n","/**\r\n * ConnectModal.tsx - SDK login modal.\r\n *\r\n * Shows a centered modal with the Google login option.\r\n * When the user clicks \"Continue with Google\", triggers the\r\n * popup-based OAuth flow.\r\n */\r\n\r\ninterface ConnectModalProps {\r\n onClose: () => void;\r\n onConnect: () => void;\r\n}\r\n\r\nexport function ConnectModal({ onClose, onConnect }: ConnectModalProps) {\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\r\n {/* Close button */}\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n {/* Branding */}\r\n <div style={styles.iconWrapper}>\r\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#667eea\" strokeWidth=\"1.5\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n </div>\r\n <h2 style={styles.title}>Connect to Accesly</h2>\r\n <p style={styles.subtitle}>Choose how you want to connect</p>\r\n\r\n {/* Google button */}\r\n <button onClick={onConnect} style={styles.googleBtn}>\r\n <svg style={styles.googleIcon} viewBox=\"0 0 24 24\">\r\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\r\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\r\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\r\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\r\n </svg>\r\n Continue with Google\r\n </button>\r\n\r\n <p style={styles.footer}>\r\n Powered by Accesly\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n modal: {\r\n position: 'relative' as const,\r\n backgroundColor: '#141428',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n padding: '2rem',\r\n width: '100%',\r\n maxWidth: '380px',\r\n textAlign: 'center' as const,\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n iconWrapper: {\r\n width: '56px',\r\n height: '56px',\r\n borderRadius: '16px',\r\n backgroundColor: 'rgba(102, 126, 234, 0.1)',\r\n border: '1px solid rgba(102, 126, 234, 0.2)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto 1rem',\r\n },\r\n title: {\r\n fontSize: '1.3rem',\r\n fontWeight: 700,\r\n color: '#e2e8f0',\r\n margin: '0 0 0.25rem',\r\n },\r\n subtitle: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n margin: '0 0 1.5rem',\r\n },\r\n googleBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.75rem',\r\n padding: '0.85rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n color: '#e2e8f0',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '12px',\r\n fontSize: '0.95rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginBottom: '1.25rem',\r\n },\r\n googleIcon: {\r\n width: '20px',\r\n height: '20px',\r\n flexShrink: 0,\r\n },\r\n footer: {\r\n color: '#475569',\r\n fontSize: '0.7rem',\r\n margin: 0,\r\n },\r\n};\r\n","/**\r\n * WalletPanel.tsx - SDK wallet panel modal with tabs.\r\n *\r\n * Opened by clicking the connected pill. Mirrors the main app's UI:\r\n * - Wallet tab: Send and Receive buttons (open sub-views)\r\n * - Activity tab: Real transaction history via getTransactions\r\n * - Account tab: Wallet details with copy buttons\r\n * - Security tab: Recovery info, Rotate Keys, Disconnect\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport type { TransactionRecord } from '../types';\r\n\r\ntype Tab = 'wallet' | 'activity' | 'account' | 'security';\r\ntype WalletView = 'main' | 'send' | 'receive';\r\n\r\ninterface WalletPanelProps {\r\n onClose: () => void;\r\n}\r\n\r\nexport function WalletPanel({ onClose }: WalletPanelProps) {\r\n const {\r\n wallet,\r\n balance,\r\n disconnect,\r\n sendPayment,\r\n rotateKeys,\r\n getTransactions,\r\n refreshBalance,\r\n refreshWallet,\r\n } = useAccesly();\r\n\r\n const [activeTab, setActiveTab] = useState<Tab>('wallet');\r\n const [walletView, setWalletView] = useState<WalletView>('main');\r\n\r\n // Send form state\r\n const [sendDest, setSendDest] = useState('');\r\n const [sendAmount, setSendAmount] = useState('');\r\n const [sendMemo, setSendMemo] = useState('');\r\n const [sending, setSending] = useState(false);\r\n const [sendResult, setSendResult] = useState<string | null>(null);\r\n const [sendError, setSendError] = useState<string | null>(null);\r\n\r\n // Activity state\r\n const [transactions, setTransactions] = useState<TransactionRecord[]>([]);\r\n const [txLoading, setTxLoading] = useState(false);\r\n\r\n // Security state\r\n const [rotating, setRotating] = useState(false);\r\n const [rotateError, setRotateError] = useState<string | null>(null);\r\n\r\n // Clipboard feedback\r\n const [copiedField, setCopiedField] = useState<string | null>(null);\r\n\r\n // Load transactions when Activity tab is selected\r\n useEffect(() => {\r\n if (activeTab === 'activity' && transactions.length === 0) {\r\n loadTransactions();\r\n }\r\n }, [activeTab]);\r\n\r\n if (!wallet) return null;\r\n\r\n async function loadTransactions() {\r\n setTxLoading(true);\r\n try {\r\n const txs = await getTransactions(20);\r\n setTransactions(txs);\r\n } catch {\r\n // Silently fail, keep empty list\r\n } finally {\r\n setTxLoading(false);\r\n }\r\n }\r\n\r\n async function handleSend() {\r\n if (!sendDest || !sendAmount) return;\r\n setSending(true);\r\n setSendError(null);\r\n try {\r\n const result = await sendPayment({\r\n destination: sendDest,\r\n amount: sendAmount,\r\n memo: sendMemo || undefined,\r\n });\r\n setSendResult(result.txHash);\r\n refreshBalance();\r\n } catch (err: any) {\r\n setSendError(err.message);\r\n } finally {\r\n setSending(false);\r\n }\r\n }\r\n\r\n function resetSendForm() {\r\n setSendResult(null);\r\n setSendDest('');\r\n setSendAmount('');\r\n setSendMemo('');\r\n setSendError(null);\r\n setWalletView('main');\r\n }\r\n\r\n async function handleRotateKeys() {\r\n if (!confirm('This will generate a new keypair and update your contract. Continue?')) return;\r\n setRotating(true);\r\n setRotateError(null);\r\n try {\r\n await rotateKeys();\r\n await refreshWallet();\r\n } catch (err: any) {\r\n setRotateError(err.message);\r\n } finally {\r\n setRotating(false);\r\n }\r\n }\r\n\r\n function handleDisconnect() {\r\n disconnect();\r\n onClose();\r\n }\r\n\r\n function truncate(addr: string, start = 6, end = 6): string {\r\n if (addr.length <= start + end + 3) return addr;\r\n return `${addr.slice(0, start)}...${addr.slice(-end)}`;\r\n }\r\n\r\n async function copyToClipboard(text: string, field: string) {\r\n await navigator.clipboard.writeText(text);\r\n setCopiedField(field);\r\n setTimeout(() => setCopiedField(null), 1500);\r\n }\r\n\r\n function relativeTime(isoDate: string): string {\r\n const diff = Math.floor((Date.now() - new Date(isoDate).getTime()) / 1000);\r\n if (diff < 60) return 'just now';\r\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;\r\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`;\r\n if (diff < 172800) return 'yesterday';\r\n return `${Math.floor(diff / 86400)}d ago`;\r\n }\r\n\r\n const formattedBalance = balance\r\n ? parseFloat(balance).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n })\r\n : '---';\r\n\r\n const idColor = identiconColor(wallet.stellarAddress);\r\n\r\n const tabs: { key: Tab; label: string }[] = [\r\n { key: 'wallet', label: 'Wallet' },\r\n { key: 'activity', label: 'Activity' },\r\n { key: 'account', label: 'Account' },\r\n { key: 'security', label: 'Security' },\r\n ];\r\n\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.panel} onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={styles.header}>\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n <div style={{ ...styles.identicon, backgroundColor: idColor }} />\r\n <p style={styles.headerAddr}>{truncate(wallet.stellarAddress, 8, 8)}</p>\r\n <p style={styles.headerBalance}>\r\n {formattedBalance} <span style={styles.headerCurrency}>XLM</span>\r\n </p>\r\n </div>\r\n\r\n {/* Tab bar */}\r\n <div style={styles.tabBar}>\r\n {tabs.map((tab) => (\r\n <button\r\n key={tab.key}\r\n onClick={() => { setActiveTab(tab.key); setWalletView('main'); }}\r\n style={{\r\n ...styles.tab,\r\n ...(activeTab === tab.key ? styles.tabActive : {}),\r\n }}\r\n >\r\n {tab.label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Tab content */}\r\n <div style={styles.content}>\r\n {activeTab === 'wallet' && renderWalletTab()}\r\n {activeTab === 'activity' && renderActivityTab()}\r\n {activeTab === 'account' && renderAccountTab()}\r\n {activeTab === 'security' && renderSecurityTab()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Tab renderers\r\n // ---------------------------------------------------------------------------\r\n\r\n function renderWalletTab() {\r\n // Send success screen\r\n if (sendResult) {\r\n return (\r\n <div style={styles.centeredCol}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n <p style={{ color: '#34d399', fontWeight: 600, margin: '0.5rem 0' }}>Payment Sent</p>\r\n <p style={{ color: '#64748b', fontSize: '0.75rem', fontFamily: 'monospace' }}>\r\n {sendResult.slice(0, 12)}...{sendResult.slice(-12)}\r\n </p>\r\n <button onClick={resetSendForm} style={styles.primaryBtn}>Done</button>\r\n </div>\r\n );\r\n }\r\n\r\n // Send form sub-view\r\n if (walletView === 'send') {\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Destination</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"G...\"\r\n value={sendDest}\r\n onChange={(e) => setSendDest(e.target.value)}\r\n maxLength={56}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Amount (XLM)</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={sendAmount}\r\n onChange={(e) => setSendAmount(e.target.value)}\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Memo (optional)</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"What is this for?\"\r\n value={sendMemo}\r\n onChange={(e) => setSendMemo(e.target.value)}\r\n maxLength={28}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n {sendError && <p style={styles.error}>{sendError}</p>}\r\n <button\r\n onClick={handleSend}\r\n disabled={sending || !sendDest || !sendAmount}\r\n style={{\r\n ...styles.primaryBtn,\r\n opacity: sending || !sendDest || !sendAmount ? 0.5 : 1,\r\n }}\r\n >\r\n {sending ? 'Sending...' : 'Send Payment'}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n // Receive sub-view\r\n if (walletView === 'receive') {\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.centeredCol}>\r\n <div style={styles.receiveIconBig}>\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </svg>\r\n </div>\r\n <p style={{ color: '#e2e8f0', fontWeight: 600, fontSize: '1rem', margin: 0 }}>\r\n Receive XLM\r\n </p>\r\n <p style={{ color: '#64748b', fontSize: '0.8rem', margin: 0, textAlign: 'center' as const }}>\r\n Share your Stellar address to receive payments\r\n </p>\r\n <div style={styles.addressBox}>\r\n <span style={styles.addressText}>{wallet!.stellarAddress}</span>\r\n </div>\r\n <button\r\n onClick={() => copyToClipboard(wallet!.stellarAddress, 'receive')}\r\n style={styles.primaryBtn}\r\n >\r\n {copiedField === 'receive' ? 'Copied!' : 'Copy Address'}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Main wallet view — Send & Receive buttons\r\n return (\r\n <div style={styles.walletTab}>\r\n <div style={styles.actionRow}>\r\n <button onClick={() => setWalletView('send')} style={styles.actionBtn}>\r\n <div style={styles.actionIcon}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\r\n <polyline points=\"5 12 12 5 19 12\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Send</span>\r\n </button>\r\n <button onClick={() => setWalletView('receive')} style={styles.actionBtn}>\r\n <div style={{ ...styles.actionIcon, ...styles.actionIconReceive }}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Receive</span>\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n function renderActivityTab() {\r\n if (txLoading && transactions.length === 0) {\r\n return <p style={styles.emptyText}>Loading transactions...</p>;\r\n }\r\n\r\n if (transactions.length === 0) {\r\n return <p style={styles.emptyText}>No transactions yet</p>;\r\n }\r\n\r\n return (\r\n <div style={styles.txList}>\r\n {transactions.map((tx) => (\r\n <div key={tx.id} style={styles.txRow}>\r\n <div\r\n style={{\r\n ...styles.txIcon,\r\n backgroundColor:\r\n tx.type === 'received'\r\n ? 'rgba(52, 211, 153, 0.15)'\r\n : 'rgba(248, 113, 113, 0.15)',\r\n }}\r\n >\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke={tx.type === 'received' ? '#34d399' : '#f87171'}\r\n strokeWidth=\"2.5\"\r\n >\r\n {tx.type === 'received' ? (\r\n <>\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </>\r\n ) : (\r\n <>\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\r\n <polyline points=\"5 12 12 5 19 12\" />\r\n </>\r\n )}\r\n </svg>\r\n </div>\r\n\r\n <div style={styles.txDetails}>\r\n <span style={styles.txType}>\r\n {tx.type === 'received' ? 'Received' : 'Sent'}\r\n </span>\r\n <span style={styles.txCounterparty}>\r\n {tx.type === 'received' ? 'from ' : 'to '}\r\n {truncate(tx.counterparty)}\r\n </span>\r\n </div>\r\n\r\n <div style={styles.txAmountCol}>\r\n <span\r\n style={{\r\n ...styles.txAmount,\r\n color: tx.type === 'received' ? '#34d399' : '#f87171',\r\n }}\r\n >\r\n {tx.type === 'received' ? '+' : '-'}\r\n {parseFloat(tx.amount).toLocaleString('en-US', {\r\n maximumFractionDigits: 2,\r\n })}{' '}\r\n {tx.asset}\r\n </span>\r\n <span style={styles.txTime}>{relativeTime(tx.createdAt)}</span>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n function renderAccountTab() {\r\n const fields = [\r\n { label: 'Email', value: wallet!.email, key: 'email' },\r\n { label: 'Contract ID', value: wallet!.contractId, key: 'contract', copy: true },\r\n { label: 'Stellar Address', value: wallet!.stellarAddress, key: 'stellar', copy: true },\r\n { label: 'Public Key', value: wallet!.publicKey, key: 'pubkey', copy: true },\r\n { label: 'Created', value: new Date(wallet!.createdAt).toLocaleDateString(), key: 'created' },\r\n ];\r\n\r\n return (\r\n <div style={styles.fieldList}>\r\n {fields.map((f) => (\r\n <div key={f.key} style={styles.field}>\r\n <span style={styles.fieldLabel}>{f.label}</span>\r\n {f.copy ? (\r\n <button\r\n onClick={() => copyToClipboard(f.value, f.key)}\r\n style={{\r\n ...styles.copyBtn,\r\n color: copiedField === f.key ? '#34d399' : '#a5b4fc',\r\n borderColor: copiedField === f.key ? '#34d399' : '#2a2a4a',\r\n }}\r\n >\r\n {copiedField === f.key ? 'Copied!' : truncate(f.value, 8, 8)}\r\n </button>\r\n ) : (\r\n <span style={styles.fieldValue}>{f.value}</span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n function renderSecurityTab() {\r\n return (\r\n <div style={styles.securityTab}>\r\n {/* Recovery status */}\r\n <div style={styles.fieldList}>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Recovery</span>\r\n <span style={{ ...styles.fieldValue, color: '#34d399' }}>Protected</span>\r\n </div>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Method</span>\r\n <span style={styles.fieldValue}>Google ({wallet!.email})</span>\r\n </div>\r\n {wallet!.recoverySigners && wallet!.recoverySigners.length > 0 && (\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Signer</span>\r\n <span style={styles.fieldValue}>\r\n {truncate(wallet!.recoverySigners[0].publicKey)}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Rotate Keys */}\r\n {rotateError && <p style={styles.error}>{rotateError}</p>}\r\n <button\r\n onClick={handleRotateKeys}\r\n disabled={rotating}\r\n style={{\r\n ...styles.rotateBtn,\r\n opacity: rotating ? 0.5 : 1,\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M21 2v6h-6\" />\r\n <path d=\"M3 12a9 9 0 0 1 15-6.7L21 8\" />\r\n <path d=\"M3 22v-6h6\" />\r\n <path d=\"M21 12a9 9 0 0 1-15 6.7L3 16\" />\r\n </svg>\r\n {rotating ? 'Rotating...' : 'Rotate Keys'}\r\n </button>\r\n\r\n {/* Disconnect */}\r\n <button onClick={handleDisconnect} style={styles.disconnectBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n <polyline points=\"16 17 21 12 16 7\" />\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\r\n </svg>\r\n Disconnect\r\n </button>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Styles\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n panel: {\r\n backgroundColor: '#0f0f1e',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n width: '100%',\r\n maxWidth: '420px',\r\n maxHeight: '85vh',\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n overflow: 'hidden',\r\n },\r\n header: {\r\n position: 'relative' as const,\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n padding: '1.5rem 1.5rem 1rem',\r\n background: 'linear-gradient(180deg, #1a1a3a 0%, #0f0f1e 100%)',\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n identicon: {\r\n width: '48px',\r\n height: '48px',\r\n borderRadius: '50%',\r\n marginBottom: '0.5rem',\r\n },\r\n headerAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n margin: '0 0 0.25rem',\r\n },\r\n headerBalance: {\r\n fontSize: '1.75rem',\r\n fontWeight: 700,\r\n color: '#ffffff',\r\n margin: 0,\r\n },\r\n headerCurrency: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#8b8ba7',\r\n },\r\n tabBar: {\r\n display: 'flex',\r\n borderBottom: '1px solid #2a2a4a',\r\n padding: '0 0.5rem',\r\n },\r\n tab: {\r\n flex: 1,\r\n padding: '0.75rem 0.5rem',\r\n background: 'none',\r\n border: 'none',\r\n borderBottom: '2px solid transparent',\r\n color: '#64748b',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n borderRadius: 0,\r\n },\r\n tabActive: {\r\n color: '#e2e8f0',\r\n borderBottomColor: '#667eea',\r\n },\r\n content: {\r\n flex: 1,\r\n overflowY: 'auto' as const,\r\n padding: '1rem 1.25rem 1.25rem',\r\n },\r\n\r\n // Wallet tab — action buttons\r\n walletTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n actionRow: {\r\n display: 'flex',\r\n gap: '1rem',\r\n justifyContent: 'center',\r\n },\r\n actionBtn: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1.25rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s',\r\n flex: 1,\r\n },\r\n actionIcon: {\r\n width: '44px',\r\n height: '44px',\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(102, 126, 234, 0.15)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: '#667eea',\r\n },\r\n actionIconReceive: {\r\n backgroundColor: 'rgba(52, 211, 153, 0.15)',\r\n color: '#34d399',\r\n },\r\n actionLabel: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#e2e8f0',\r\n },\r\n\r\n // Sub-views (send/receive forms)\r\n subView: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.75rem',\r\n },\r\n backBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.25rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n cursor: 'pointer',\r\n padding: '0 0 0.25rem',\r\n width: 'fit-content',\r\n },\r\n formGroup: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.3rem',\r\n },\r\n formLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.75rem',\r\n fontWeight: 500,\r\n },\r\n formInput: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.65rem 0.75rem',\r\n color: '#e2e8f0',\r\n fontSize: '0.9rem',\r\n outline: 'none',\r\n width: '100%',\r\n boxSizing: 'border-box' as const,\r\n fontFamily: 'inherit',\r\n },\r\n primaryBtn: {\r\n backgroundColor: '#667eea',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '10px',\r\n padding: '0.75rem',\r\n fontSize: '0.95rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginTop: '0.25rem',\r\n },\r\n error: {\r\n color: '#f87171',\r\n fontSize: '0.8rem',\r\n margin: 0,\r\n padding: '0.4rem 0.6rem',\r\n backgroundColor: 'rgba(248, 113, 113, 0.1)',\r\n borderRadius: '6px',\r\n },\r\n centeredCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1rem 0',\r\n },\r\n\r\n // Receive view\r\n receiveIconBig: {\r\n width: '64px',\r\n height: '64px',\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(52, 211, 153, 0.15)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '0.25rem',\r\n },\r\n addressBox: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.75rem',\r\n width: '100%',\r\n marginTop: '0.5rem',\r\n },\r\n addressText: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.7rem',\r\n color: '#a5b4fc',\r\n wordBreak: 'break-all' as const,\r\n lineHeight: 1.5,\r\n },\r\n\r\n // Activity tab\r\n txList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n txRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.75rem',\r\n padding: '0.65rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n txIcon: {\r\n width: '36px',\r\n height: '36px',\r\n borderRadius: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n },\r\n txDetails: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n flex: 1,\r\n minWidth: 0,\r\n },\r\n txType: {\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n },\r\n txCounterparty: {\r\n color: '#64748b',\r\n fontSize: '0.7rem',\r\n fontFamily: 'monospace',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap' as const,\r\n },\r\n txAmountCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'flex-end',\r\n flexShrink: 0,\r\n },\r\n txAmount: {\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n },\r\n txTime: {\r\n color: '#64748b',\r\n fontSize: '0.65rem',\r\n },\r\n emptyText: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n textAlign: 'center' as const,\r\n padding: '2rem 0',\r\n },\r\n\r\n // Account tab\r\n fieldList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n field: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '0.6rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n fieldLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n },\r\n fieldValue: {\r\n color: '#e2e8f0',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n },\r\n copyBtn: {\r\n background: 'none',\r\n border: '1px solid #2a2a4a',\r\n color: '#a5b4fc',\r\n padding: '0.2rem 0.5rem',\r\n borderRadius: '4px',\r\n fontSize: '0.72rem',\r\n fontFamily: 'monospace',\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n },\r\n\r\n // Security tab\r\n securityTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n rotateBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f59e0b',\r\n border: '1px solid rgba(245, 158, 11, 0.3)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n },\r\n disconnectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f87171',\r\n border: '1px solid rgba(248, 113, 113, 0.2)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n },\r\n};\r\n","/**\r\n * ConnectButton.tsx - SDK drop-in wallet button.\r\n *\r\n * Renders a dynamic button that:\r\n * - Shows \"Connect Wallet\" when disconnected → opens ConnectModal\r\n * - Shows a pill with address + balance when connected → opens WalletPanel\r\n * - Handles loading/creating states with spinners\r\n *\r\n * Usage:\r\n * <ConnectButton />\r\n */\r\n\r\nimport { useState } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport { ConnectModal } from './ConnectModal';\r\nimport { WalletPanel } from './WalletPanel';\r\n\r\nexport function ConnectButton() {\r\n const { wallet, balance, loading, creating, connect } = useAccesly();\r\n const [showModal, setShowModal] = useState(false);\r\n const [showPanel, setShowPanel] = useState(false);\r\n\r\n // Initial auth check\r\n if (loading) {\r\n return (\r\n <div style={styles.pillLoading}>\r\n <div style={styles.spinner} />\r\n </div>\r\n );\r\n }\r\n\r\n // Not connected\r\n if (!wallet) {\r\n return (\r\n <>\r\n <button\r\n onClick={() => setShowModal(true)}\r\n style={creating ? styles.pill : styles.connectBtn}\r\n disabled={creating}\r\n >\r\n {creating ? (\r\n <>\r\n <div style={styles.spinnerSmall} />\r\n <span style={styles.pillText}>Creating wallet...</span>\r\n </>\r\n ) : (\r\n <>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n Connect Wallet\r\n </>\r\n )}\r\n </button>\r\n\r\n {showModal && (\r\n <ConnectModal\r\n onClose={() => setShowModal(false)}\r\n onConnect={async () => {\r\n setShowModal(false);\r\n await connect();\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Connected - show pill\r\n const addr = wallet.stellarAddress;\r\n const truncated = `${addr.slice(0, 4)}...${addr.slice(-4)}`;\r\n const balanceText = balance\r\n ? `${parseFloat(balance).toFixed(2)} XLM`\r\n : '--- XLM';\r\n const color = identiconColor(addr);\r\n\r\n return (\r\n <>\r\n <button onClick={() => setShowPanel(true)} style={styles.pill}>\r\n <div style={{ ...styles.identicon, backgroundColor: color }} />\r\n <span style={styles.pillAddr}>{truncated}</span>\r\n <span style={styles.divider} />\r\n <span style={styles.pillBalance}>{balanceText}</span>\r\n </button>\r\n\r\n {showPanel && <WalletPanel onClose={() => setShowPanel(false)} />}\r\n </>\r\n );\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Inline styles (zero CSS dependencies)\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n connectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.6rem',\r\n padding: '0.85rem 1.75rem',\r\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '12px',\r\n fontSize: '1rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n transition: 'transform 0.15s, box-shadow 0.15s',\r\n boxShadow: '0 4px 15px rgba(102, 126, 234, 0.4)',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pill: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '0.5rem 0.85rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s, box-shadow 0.2s',\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pillLoading: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.5rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n height: '42px',\r\n },\r\n identicon: {\r\n width: '24px',\r\n height: '24px',\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n },\r\n pillAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#e2e8f0',\r\n },\r\n divider: {\r\n width: '1px',\r\n height: '16px',\r\n backgroundColor: '#3a3a5a',\r\n },\r\n pillBalance: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n fontWeight: 500,\r\n },\r\n pillText: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n },\r\n spinner: {\r\n width: '20px',\r\n height: '20px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n },\r\n spinnerSmall: {\r\n width: '16px',\r\n height: '16px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n flexShrink: 0,\r\n },\r\n};\r\n","/**\r\n * Accesly SDK - Account abstraction wallet for Stellar.\r\n *\r\n * Quick start:\r\n *\r\n * import { AcceslyProvider, ConnectButton } from 'accesly';\r\n *\r\n * function App() {\r\n * return (\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <ConnectButton />\r\n * </AcceslyProvider>\r\n * );\r\n * }\r\n *\r\n * For custom UI, use the useAccesly hook:\r\n *\r\n * import { useAccesly } from 'accesly';\r\n *\r\n * function MyWallet() {\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n * // Build your own UI\r\n * }\r\n */\r\n\r\n// --- CSS keyframes injection ---\r\n// Since the SDK uses inline styles, we inject required keyframes once\r\nif (typeof document !== 'undefined') {\r\n const STYLE_ID = 'accesly-keyframes';\r\n if (!document.getElementById(STYLE_ID)) {\r\n const style = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.textContent = `\r\n @keyframes accesly-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n\r\n// --- Components ---\r\nexport { AcceslyProvider } from './AcceslyProvider';\r\nexport { ConnectButton } from './components/ConnectButton';\r\n\r\n// --- Hooks ---\r\nexport { useAccesly } from './hooks/useAccesly';\r\n\r\n// --- Types ---\r\nexport type {\r\n AcceslyConfig,\r\n WalletInfo,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n AcceslyContextType,\r\n} from './types';\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "accesly",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Accesly SDK - Account abstraction wallet for Stellar. Drop-in React components for wallet authentication, balance display, and payments.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",