stellar-wallet-kit 2.0.5 → 2.0.6
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.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -338,7 +338,7 @@ var walletMetadata = {
|
|
|
338
338
|
["walletconnect" /* WALLETCONNECT */]: {
|
|
339
339
|
id: "walletconnect" /* WALLETCONNECT */,
|
|
340
340
|
name: "WalletConnect",
|
|
341
|
-
icon: "https://walletconnect.
|
|
341
|
+
icon: "https://docs.walletconnect.network/images/walletconnect-home.svg",
|
|
342
342
|
description: "Connect mobile wallets via WalletConnect",
|
|
343
343
|
kind: "web",
|
|
344
344
|
capabilities: {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/index.ts","../src/adapters/FreighterAdapter.ts","../src/utils/albedoCallback.ts","../src/adapters/AlbedoAdapter.ts","../src/utils/balanceUtils.ts","../src/context/WalletContext.tsx","../src/components/WalletModal.tsx","../src/components/ConnectButton.tsx","../src/utils/getUniversalConnector.ts","../src/adapters/WalletConnectAdapter.ts","../src/wallets/createWalletAdapters.ts"],"names":["WalletType","NetworkType","isConnected","isAllowed","setAllowed","getUserInfo","getNetwork","signTransaction","signAuthEntry","createContext","useState","useMemo","useEffect","selectedWallet","useCallback","React","useContext","UniversalConnector"],"mappings":"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","file":"index.js","sourcesContent":["export enum WalletType {\r\n FREIGHTER = \"freighter\",\r\n ALBEDO = \"albedo\",\r\n WALLETCONNECT = 'walletconnect',\r\n LOBSTR = 'lobstr', // UI alias\r\n // XBULL = 'xbull',\r\n}\r\n\r\nexport enum NetworkType {\r\n PUBLIC = \"PUBLIC\",\r\n TESTNET = \"TESTNET\",\r\n FUTURENET = \"FUTURENET\",\r\n STANDALONE = \"STANDALONE\",\r\n}\r\n\r\nexport interface WalletAccount {\r\n address: string;\r\n publicKey: string;\r\n displayName?: string;\r\n balances?: AccountBalance[];\r\n}\r\n\r\nexport interface AccountBalance {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\nexport interface WalletInfo {\r\n id: WalletType;\r\n name: string;\r\n icon: string;\r\n description?: string;\r\n\r\n /** true = ready to use (installed OR web wallet) */\r\n installed: boolean;\r\n\r\n /** Optional install link (extensions only) */\r\n downloadUrl?: string;\r\n\r\n /** NEW: wallet delivery model */\r\n kind?: WalletKind;\r\n\r\n /** NEW: capability flags (future-proof) */\r\n capabilities?: {\r\n silentReconnect?: boolean;\r\n networkDetection?: boolean;\r\n authEntrySigning?: boolean;\r\n };\r\n}\r\n\r\nexport interface ConnectWalletResponse {\r\n address: string;\r\n publicKey: string;\r\n}\r\n\r\nexport interface SignTransactionResponse {\r\n signedTxXdr: string;\r\n}\r\n\r\nexport interface SignAuthEntryResponse {\r\n signedAuthEntry: string;\r\n}\r\n\r\nexport interface WalletAdapter {\r\n type: WalletType;\r\n isAvailable(): Promise<boolean>;\r\n connect(): Promise<ConnectWalletResponse>;\r\n disconnect(): Promise<void>;\r\n getPublicKey(): Promise<string | null>;\r\n getNetwork(): Promise<string>;\r\n signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse>;\r\n signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse>;\r\n}\r\n\r\nexport interface SignTransactionOptions {\r\n network?: string;\r\n networkPassphrase?: string;\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface SignAuthEntryOptions {\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface StellarWalletKitConfig {\r\n network?: NetworkType;\r\n defaultWallet?: WalletType;\r\n autoConnect?: boolean;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n\r\n adapters?: Partial<Record<WalletType, WalletAdapter>>;\r\n}\r\n\r\nexport interface WalletTheme {\r\n mode?: \"light\" | \"dark\" | \"auto\";\r\n primaryColor?: string;\r\n backgroundColor?: string;\r\n borderRadius?: string;\r\n fontFamily?: string;\r\n overlayBackground?: string;\r\n modalBackground?: string;\r\n textColor?: string;\r\n buttonHoverColor?: string;\r\n}\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n wallets: WalletInfo[];\r\n onSelectWallet: (walletType: WalletType) => void;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n}\r\n\r\nexport interface WalletContextValue {\r\n account: WalletAccount | null;\r\n isConnected: boolean;\r\n isConnecting: boolean;\r\n error: Error | null;\r\n network: NetworkType;\r\n selectedWallet: WalletType | null;\r\n connect: (walletType?: WalletType) => Promise<void>;\r\n disconnect: () => Promise<void>;\r\n signTransaction: (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ) => Promise<SignTransactionResponse>;\r\n signAuthEntry: (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ) => Promise<SignAuthEntryResponse>;\r\n switchNetwork: (network: NetworkType) => Promise<void>;\r\n availableWallets: WalletInfo[];\r\n refreshBalances: () => Promise<void>;\r\n isLoadingBalances: boolean;\r\n supports: {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n };\r\n connectingWallet: WalletType | null;\r\n}\r\n\r\nexport type WalletKind = \"extension\" | \"web\";\r\n\r\nexport interface WalletCapabilities {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n}\r\n","import {\r\n isConnected,\r\n isAllowed,\r\n setAllowed,\r\n getUserInfo,\r\n signTransaction,\r\n signAuthEntry,\r\n getNetwork,\r\n} from '@stellar/freighter-api';\r\n\r\nimport { WalletType } from '../types';\r\nimport type {\r\n WalletAdapter,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nexport class FreighterAdapter implements WalletAdapter {\r\n readonly type = WalletType.FREIGHTER;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n try {\r\n return await isConnected();\r\n } catch (error) {\r\n console.error('Error checking Freighter availability:', error);\r\n return false;\r\n }\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n try {\r\n // Check if Freighter is installed\r\n const connected = await isConnected();\r\n if (!connected) {\r\n throw new Error('Freighter wallet is not installed');\r\n }\r\n\r\n // Check if already allowed\r\n const allowed = await isAllowed();\r\n \r\n if (!allowed) {\r\n // Request permission\r\n await setAllowed();\r\n }\r\n\r\n // Get user info\r\n const userInfo = await getUserInfo();\r\n \r\n if (!userInfo || !userInfo.publicKey) {\r\n throw new Error('Failed to get user information from Freighter');\r\n }\r\n\r\n return {\r\n address: userInfo.publicKey,\r\n publicKey: userInfo.publicKey,\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to Freighter:', error);\r\n throw new Error(`Failed to connect to Freighter: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n // Freighter doesn't have a disconnect method in the API\r\n // The user needs to disconnect manually from the extension\r\n // We just clear local state\r\n console.log('Freighter disconnect requested - user must disconnect from extension');\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n try {\r\n const allowed = await isAllowed();\r\n if (!allowed) {\r\n return null;\r\n }\r\n\r\n const userInfo = await getUserInfo();\r\n return userInfo?.publicKey || null;\r\n } catch (error) {\r\n console.error('Error getting public key:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n try {\r\n const network = await getNetwork();\r\n return network;\r\n } catch (error) {\r\n console.error('Error getting network:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n try {\r\n const result = await signTransaction(xdr, {\r\n network: options?.network,\r\n networkPassphrase: options?.networkPassphrase,\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedTxXdr: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing transaction:', error);\r\n throw new Error(`Failed to sign transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n try {\r\n const result = await signAuthEntry(entryXdr, {\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedAuthEntry: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing auth entry:', error);\r\n throw new Error(`Failed to sign auth entry: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n}","export function openAlbedoPopup(url: string): Window {\r\n const popup = window.open(\r\n url,\r\n \"albedo\",\r\n \"width=420,height=720,resizable=yes,scrollbars=yes\"\r\n );\r\n\r\n if (!popup) {\r\n throw new Error(\"Failed to open Albedo popup (blocked by browser)\");\r\n }\r\n\r\n return popup;\r\n}\r\n\r\nexport function waitForAlbedoResult(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n const parseResult = () => {\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL (important UX polish)\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n resolve(result);\r\n };\r\n\r\n parseResult();\r\n window.addEventListener(\"popstate\", parseResult);\r\n });\r\n}\r\n\r\nexport function handleAlbedoCallback(): Record<string, string> | null {\r\n if (typeof window === \"undefined\") return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return null;\r\n }\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n return result;\r\n}\r\n\r\nexport function waitForAlbedoPopup(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n function handler(event: MessageEvent) {\r\n if (\r\n event.origin !== window.location.origin ||\r\n event.data?.type !== \"ALBEDO_RESULT\"\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n window.removeEventListener(\"message\", handler);\r\n resolve(event.data.payload);\r\n }\r\n\r\n window.addEventListener(\"message\", handler);\r\n });\r\n}\r\n","import type {\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from \"../types\";\r\nimport { WalletType } from \"../types\";\r\nimport {\r\n waitForAlbedoPopup,\r\n waitForAlbedoResult,\r\n} from \"../utils/albedoCallback\";\r\nimport { openAlbedoPopup } from \"../utils/albedoCallback\";\r\n\r\nexport class AlbedoAdapter {\r\n readonly type = WalletType.ALBEDO;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"public-key\");\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\r\n \"callback\",\r\n `${window.location.origin}/albedo-callback`\r\n );\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n openAlbedoPopup(url.toString());\r\n\r\n const result = await waitForAlbedoPopup();\r\n\r\n if (!result.pubkey) {\r\n throw new Error(\"Albedo connection rejected\");\r\n }\r\n\r\n return {\r\n address: result.pubkey,\r\n publicKey: result.pubkey,\r\n };\r\n }\r\n\r\n async disconnect() {}\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n return null;\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error(\"Albedo does not expose network\");\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"tx\");\r\n url.searchParams.set(\"xdr\", xdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_envelope_xdr) {\r\n throw new Error(\"Albedo signing rejected\");\r\n }\r\n\r\n return { signedTxXdr: result.signed_envelope_xdr };\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"sign-auth-entry\");\r\n url.searchParams.set(\"xdr\", entryXdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_xdr) {\r\n throw new Error(\"Albedo auth entry rejected\");\r\n }\r\n\r\n return { signedAuthEntry: result.signed_xdr };\r\n }\r\n}\r\n","import type { AccountBalance, NetworkType } from '../types';\r\n\r\ninterface HorizonBalanceRecord {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\ninterface HorizonAccountResponse {\r\n id: string;\r\n account_id: string;\r\n sequence: string;\r\n balances: HorizonBalanceRecord[];\r\n}\r\n\r\nconst HORIZON_URLS: Record<NetworkType, string> = {\r\n PUBLIC: 'https://horizon.stellar.org',\r\n TESTNET: 'https://horizon-testnet.stellar.org',\r\n FUTURENET: 'https://horizon-futurenet.stellar.org',\r\n STANDALONE: 'http://localhost:8000',\r\n};\r\n\r\n/**\r\n * Fetches account balances from Horizon\r\n */\r\nexport async function fetchAccountBalances(\r\n publicKey: string,\r\n network: NetworkType\r\n): Promise<AccountBalance[]> {\r\n const horizonUrl = HORIZON_URLS[network];\r\n \r\n try {\r\n const response = await fetch(`${horizonUrl}/accounts/${publicKey}`);\r\n \r\n if (!response.ok) {\r\n if (response.status === 404) {\r\n throw new Error('Account not found. Make sure the account is funded.');\r\n }\r\n throw new Error(`Failed to fetch account: ${response.statusText}`);\r\n }\r\n \r\n const data: HorizonAccountResponse = await response.json();\r\n return data.balances as AccountBalance[];\r\n } catch (error) {\r\n console.error('Error fetching balances:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the native (XLM) balance from balances array\r\n */\r\nexport function getNativeBalance(balances: AccountBalance[]): string {\r\n const nativeBalance = balances.find(b => b.asset_type === 'native');\r\n return nativeBalance?.balance || '0';\r\n}\r\n\r\n/**\r\n * Formats balance for display\r\n */\r\nexport function formatBalance(balance: string, decimals: number = 7): string {\r\n const num = parseFloat(balance);\r\n if (isNaN(num)) return '0';\r\n \r\n // Format with specified decimals, remove trailing zeros\r\n return num.toFixed(decimals).replace(/\\.?0+$/, '');\r\n}\r\n\r\n/**\r\n * Gets balance for a specific asset\r\n */\r\nexport function getAssetBalance(\r\n balances: AccountBalance[],\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): string {\r\n if (!assetCode) {\r\n return getNativeBalance(balances);\r\n }\r\n \r\n const asset = balances.find(\r\n b => b.asset_code === assetCode && \r\n (!assetIssuer || b.asset_issuer === assetIssuer)\r\n );\r\n \r\n return asset?.balance || '0';\r\n}\r\n\r\n/**\r\n * Checks if account has sufficient balance for a transaction\r\n */\r\nexport function hasSufficientBalance(\r\n balances: AccountBalance[],\r\n requiredAmount: string,\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): boolean {\r\n const balance = getAssetBalance(balances, assetCode, assetIssuer);\r\n return parseFloat(balance) >= parseFloat(requiredAmount);\r\n}\r\n\r\n/**\r\n * Gets total account value in XLM (simplified - just returns native balance)\r\n * For real implementation, you'd need asset prices\r\n */\r\nexport function getTotalValueXLM(balances: AccountBalance[]): string {\r\n return getNativeBalance(balances);\r\n}\r\n\r\n/**\r\n * Groups balances by type (native, credit_alphanum4, credit_alphanum12, liquidity_pool_shares)\r\n */\r\nexport function groupBalancesByType(balances: AccountBalance[]) {\r\n return balances.reduce((acc, balance) => {\r\n const type = balance.asset_type;\r\n if (!acc[type]) {\r\n acc[type] = [];\r\n }\r\n acc[type].push(balance);\r\n return acc;\r\n }, {} as Record<string, AccountBalance[]>);\r\n}","\"use client\";\r\n\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n PropsWithChildren,\r\n} from \"react\";\r\n\r\nimport {\r\n WalletType,\r\n NetworkType,\r\n} from \"../types\";\r\n\r\nimport type {\r\n WalletContextValue,\r\n WalletAccount,\r\n StellarWalletKitConfig,\r\n WalletInfo,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n WalletAdapter,\r\n} from \"../types\";\r\n\r\nimport { FreighterAdapter } from \"../adapters/FreighterAdapter\";\r\nimport { AlbedoAdapter } from \"../adapters/AlbedoAdapter\";\r\nimport { fetchAccountBalances } from \"../utils/balanceUtils\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Constants */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst STORAGE_KEY = \"stellar_wallet_kit\";\r\nconst isBrowser = typeof window !== \"undefined\";\r\n\r\nconst DEFAULT_SUPPORTS = {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Context */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst WalletContext = createContext<WalletContextValue | undefined>(undefined);\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Wallet metadata */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst walletMetadata: Record<WalletType, Omit<WalletInfo, \"installed\">> = {\r\n [WalletType.FREIGHTER]: {\r\n id: WalletType.FREIGHTER,\r\n name: \"Freighter\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/freighter.svg\",\r\n description: \"Freighter browser extension wallet\",\r\n downloadUrl:\r\n \"https://chrome.google.com/webstore/detail/freighter/bcacfldlkkdogcmkkibnjlakofdplcbk\",\r\n kind: \"extension\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: true,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.ALBEDO]: {\r\n id: WalletType.ALBEDO,\r\n name: \"Albedo\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/albedo.svg\",\r\n description: \"Web-based Stellar wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.WALLETCONNECT]: {\r\n id: WalletType.WALLETCONNECT,\r\n name: \"WalletConnect\",\r\n icon: \"https://walletconnect.com/walletconnect-logo.png\",\r\n description: \"Connect mobile wallets via WalletConnect\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n\r\n [WalletType.LOBSTR]: {\r\n id: WalletType.LOBSTR,\r\n name: \"LOBSTR\",\r\n icon: \"https://lobstr.co/favicon.ico\",\r\n description: \"LOBSTR mobile wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Storage helpers */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface StorageData {\r\n selectedWallet: WalletType | null;\r\n autoConnect: boolean;\r\n}\r\n\r\nfunction getStorageData(): StorageData {\r\n if (!isBrowser) {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n return raw\r\n ? JSON.parse(raw)\r\n : { selectedWallet: null, autoConnect: false };\r\n } catch {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n}\r\n\r\nfunction setStorageData(data: Partial<StorageData>) {\r\n if (!isBrowser) return;\r\n\r\n const existing = getStorageData();\r\n localStorage.setItem(\r\n STORAGE_KEY,\r\n JSON.stringify({ ...existing, ...data })\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Provider */\r\n/* ------------------------------------------------------------------ */\r\n\r\ntype WalletProviderProps = PropsWithChildren<{\r\n config?: StellarWalletKitConfig;\r\n}>;\r\n\r\nexport function WalletProvider({ config = {}, children }: WalletProviderProps) {\r\n const [account, setAccount] = useState<WalletAccount | null>(null);\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [connectingWallet, setConnectingWallet] =\r\n useState<WalletType | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [network, setNetwork] = useState<NetworkType>(\r\n config.network || NetworkType.TESTNET\r\n );\r\n const [selectedWallet, setSelectedWallet] =\r\n useState<WalletType | null>(null);\r\n const [availableWallets, setAvailableWallets] = useState<WalletInfo[]>([]);\r\n const [isLoadingBalances, setIsLoadingBalances] = useState(false);\r\n\r\n const isConnected = !!account;\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Wallet adapters */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const walletAdapters = useMemo<\r\n Partial<Record<WalletType, WalletAdapter>>\r\n >(\r\n () => ({\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n ...(config.adapters ?? {}),\r\n }),\r\n [config.adapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Detect wallets */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser) return;\r\n\r\n (async () => {\r\n const wallets: WalletInfo[] = [];\r\n\r\n const entries = Object.entries(walletAdapters) as [\r\n WalletType,\r\n WalletAdapter | undefined\r\n ][];\r\n\r\n for (const [walletType, adapter] of entries) {\r\n if (!adapter) continue;\r\n\r\n const meta = walletMetadata[walletType];\r\n\r\n let installed = true;\r\n if (meta.kind === \"extension\") {\r\n installed = await adapter.isAvailable();\r\n }\r\n\r\n wallets.push({ ...meta, installed });\r\n }\r\n\r\n setAvailableWallets(wallets);\r\n })();\r\n }, [walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Auto-connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser || !config.autoConnect) return;\r\n\r\n const { selectedWallet } = getStorageData();\r\n if (selectedWallet) {\r\n connect(selectedWallet).catch(() => {});\r\n }\r\n }, [config.autoConnect]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Balances */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const refreshBalances = useCallback(async () => {\r\n if (!account?.publicKey) return;\r\n\r\n setIsLoadingBalances(true);\r\n try {\r\n const balances = await fetchAccountBalances(\r\n account.publicKey,\r\n network\r\n );\r\n setAccount((prev) => (prev ? { ...prev, balances } : null));\r\n } finally {\r\n setIsLoadingBalances(false);\r\n }\r\n }, [account?.publicKey, network]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const connect = useCallback(\r\n async (walletType?: WalletType) => {\r\n const type =\r\n walletType || config.defaultWallet || WalletType.FREIGHTER;\r\n\r\n setIsConnecting(true);\r\n setConnectingWallet(type);\r\n setError(null);\r\n\r\n try {\r\n const adapter = walletAdapters[type];\r\n if (!adapter) {\r\n throw new Error(`Wallet adapter not configured: ${type}`);\r\n }\r\n\r\n const meta = walletMetadata[type];\r\n\r\n if (meta.kind === \"extension\") {\r\n const ok = await adapter.isAvailable();\r\n if (!ok) {\r\n throw new Error(`${meta.name} is not installed`);\r\n }\r\n }\r\n\r\n const res = await adapter.connect();\r\n\r\n setAccount({\r\n address: res.address,\r\n publicKey: res.publicKey,\r\n displayName: `${res.address.slice(0, 4)}…${res.address.slice(-4)}`,\r\n });\r\n\r\n setSelectedWallet(type);\r\n setStorageData({ selectedWallet: type, autoConnect: true });\r\n\r\n await refreshBalances();\r\n } catch (e) {\r\n setError(e as Error);\r\n throw e;\r\n } finally {\r\n setIsConnecting(false);\r\n setConnectingWallet(null);\r\n }\r\n },\r\n [config.defaultWallet, refreshBalances, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Disconnect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const disconnect = useCallback(async () => {\r\n if (selectedWallet) {\r\n await walletAdapters[selectedWallet]?.disconnect();\r\n }\r\n\r\n setAccount(null);\r\n setSelectedWallet(null);\r\n setError(null);\r\n setStorageData({ selectedWallet: null, autoConnect: false });\r\n }, [selectedWallet, walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Signing */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const signTransaction = useCallback(\r\n (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signTransaction(xdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n const signAuthEntry = useCallback(\r\n (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signAuthEntry(entryXdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Network */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const switchNetwork = useCallback(\r\n async (n: NetworkType) => {\r\n setNetwork(n);\r\n await refreshBalances();\r\n },\r\n [refreshBalances]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Capabilities */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const supports = useMemo(() => {\r\n if (!selectedWallet) return DEFAULT_SUPPORTS;\r\n\r\n const caps = walletMetadata[selectedWallet].capabilities;\r\n return {\r\n silentReconnect: caps?.silentReconnect ?? false,\r\n networkDetection: caps?.networkDetection ?? false,\r\n authEntrySigning: caps?.authEntrySigning ?? false,\r\n };\r\n }, [selectedWallet]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Context value */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const value = useMemo<WalletContextValue>(\r\n () => ({\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n }),\r\n [\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n ]\r\n );\r\n\r\n return (\r\n <WalletContext.Provider value={value}>\r\n {children}\r\n </WalletContext.Provider>\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Hook */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function useWallet(): WalletContextValue {\r\n const ctx = useContext(WalletContext);\r\n if (!ctx) {\r\n throw new Error(\"useWallet must be used within a WalletProvider\");\r\n }\r\n return ctx;\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport type { ModalProps } from '../types';\r\n\r\nexport function WalletModal({\r\n isOpen,\r\n onClose,\r\n wallets,\r\n onSelectWallet,\r\n theme,\r\n appName = 'Your App',\r\n appIcon,\r\n}: ModalProps) {\r\n useEffect(() => {\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'auto';\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const isDark =\r\n theme?.mode === 'dark' ||\r\n (theme?.mode === 'auto' &&\r\n window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const bg = theme?.modalBackground || (isDark ? '#0f0f11' : '#ffffff');\r\n const text = theme?.textColor || (isDark ? '#ffffff' : '#0a0a0a');\r\n const muted = isDark ? '#8b8b8b' : '#6b6b6b';\r\n const border = isDark ? '#1f1f23' : '#eaeaea';\r\n const hover = theme?.buttonHoverColor || (isDark ? '#1a1a1f' : '#f6f6f6');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n .swk-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background: rgba(0,0,0,0.55);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n }\r\n\r\n .swk-modal {\r\n width: 420px;\r\n max-width: 92vw;\r\n background: ${bg};\r\n border-radius: 20px;\r\n padding: 28px;\r\n box-shadow: 0 20px 60px rgba(0,0,0,0.4);\r\n font-family: ${theme?.fontFamily || 'Inter, system-ui, sans-serif'};\r\n }\r\n\r\n .swk-wallet {\r\n display: flex;\r\n align-items: center;\r\n gap: 14px;\r\n padding: 14px 16px;\r\n border-radius: 14px;\r\n cursor: pointer;\r\n transition: background 0.15s ease;\r\n }\r\n\r\n .swk-wallet:hover {\r\n background: ${hover};\r\n }\r\n\r\n .swk-pill {\r\n font-size: 12px;\r\n padding: 4px 10px;\r\n border-radius: 999px;\r\n background: ${theme?.primaryColor || '#6c5ce7'};\r\n color: white;\r\n font-weight: 500;\r\n }\r\n `}</style>\r\n\r\n <div className=\"swk-overlay\" onClick={onClose}>\r\n <div className=\"swk-modal\" onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={{ marginBottom: 24 }}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 12,\r\n marginBottom: 8,\r\n }}\r\n >\r\n {appIcon && (\r\n <img\r\n src={appIcon}\r\n alt=\"\"\r\n style={{ width: 32, height: 32, borderRadius: 8 }}\r\n />\r\n )}\r\n <span style={{ color: muted, fontSize: 14 }}>\r\n Log in or sign up\r\n </span>\r\n </div>\r\n\r\n <h2\r\n style={{\r\n margin: 0,\r\n fontSize: 22,\r\n fontWeight: 600,\r\n color: text,\r\n }}\r\n >\r\n {appName}\r\n </h2>\r\n </div>\r\n\r\n {/* Wallet list */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\r\n {wallets.map((wallet, i) => (\r\n <div\r\n key={wallet.id}\r\n className=\"swk-wallet\"\r\n onClick={() => onSelectWallet(wallet.id)}\r\n >\r\n <img\r\n src={wallet.icon}\r\n alt={wallet.name}\r\n style={{ width: 36, height: 36, borderRadius: 10 }}\r\n />\r\n\r\n <div style={{ flex: 1 }}>\r\n <div\r\n style={{\r\n fontSize: 15,\r\n fontWeight: 500,\r\n color: text,\r\n }}\r\n >\r\n {wallet.name}\r\n </div>\r\n\r\n {wallet.description && (\r\n <div\r\n style={{\r\n fontSize: 13,\r\n color: muted,\r\n marginTop: 2,\r\n }}\r\n >\r\n {wallet.description}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {i === 0 && <div className=\"swk-pill\">Recent</div>}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div\r\n style={{\r\n marginTop: 24,\r\n paddingTop: 16,\r\n borderTop: `1px solid ${border}`,\r\n textAlign: 'center',\r\n fontSize: 13,\r\n color: muted,\r\n }}\r\n >\r\n Powered by Stellar Wallet Kit\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useWallet } from '../context/WalletContext';\r\nimport { WalletModal } from './WalletModal';\r\nimport type { WalletTheme } from '../types';\r\nimport { getNativeBalance, formatBalance } from '../utils/balanceUtils';\r\n\r\ninterface ConnectButtonProps {\r\n label?: string;\r\n theme?: WalletTheme;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n showBalance?: boolean;\r\n onConnect?: () => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\nexport function ConnectButton({\r\n label = 'Connect Wallet',\r\n theme,\r\n className,\r\n style,\r\n showBalance = false,\r\n onConnect,\r\n onDisconnect,\r\n}: ConnectButtonProps) {\r\n const {\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connect,\r\n disconnect,\r\n availableWallets,\r\n selectedWallet,\r\n refreshBalances,\r\n isLoadingBalances,\r\n } = useWallet();\r\n\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [showDropdown, setShowDropdown] = useState(false);\r\n\r\n const themeMode = theme?.mode || 'light';\r\n const isDark = themeMode === 'dark' || (themeMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const defaultButtonStyles: React.CSSProperties = {\r\n padding: '12px 24px',\r\n borderRadius: theme?.borderRadius || '12px',\r\n border: 'none',\r\n fontSize: '15px',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n fontFamily: theme?.fontFamily || '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n ...style,\r\n };\r\n\r\n const connectButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: theme?.primaryColor || '#8b5cf6',\r\n color: '#ffffff',\r\n };\r\n\r\n const accountButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: isDark ? '#252525' : '#f5f5f5',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n };\r\n\r\n const dropdownStyles: React.CSSProperties = {\r\n position: 'absolute',\r\n top: 'calc(100% + 8px)',\r\n right: 0,\r\n backgroundColor: theme?.modalBackground || (isDark ? '#1a1a1a' : '#ffffff'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n borderRadius: theme?.borderRadius || '12px',\r\n padding: '8px',\r\n minWidth: '200px',\r\n boxShadow: isDark ? '0 4px 16px rgba(0, 0, 0, 0.4)' : '0 4px 16px rgba(0, 0, 0, 0.1)',\r\n zIndex: 1000,\r\n };\r\n\r\n const dropdownItemStyles: React.CSSProperties = {\r\n padding: '12px 16px',\r\n border: 'none',\r\n background: 'none',\r\n cursor: 'pointer',\r\n width: '100%',\r\n textAlign: 'left',\r\n fontSize: '14px',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n borderRadius: '8px',\r\n transition: 'background-color 0.2s',\r\n fontFamily: 'inherit',\r\n };\r\n\r\n const handleConnect = async (walletType: any) => {\r\n try {\r\n await connect(walletType);\r\n setIsModalOpen(false);\r\n onConnect?.();\r\n } catch (error) {\r\n console.error('Connection error:', error);\r\n }\r\n };\r\n\r\n const handleDisconnect = async () => {\r\n try {\r\n await disconnect();\r\n setShowDropdown(false);\r\n onDisconnect?.();\r\n } catch (error) {\r\n console.error('Disconnect error:', error);\r\n }\r\n };\r\n\r\n const copyAddress = () => {\r\n if (account?.address) {\r\n navigator.clipboard.writeText(account.address);\r\n // You could add a toast notification here\r\n setShowDropdown(false);\r\n }\r\n };\r\n\r\n if (isConnecting) {\r\n return (\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n disabled\r\n >\r\n Connecting...\r\n </button>\r\n );\r\n }\r\n\r\n if (!isConnected || !account) {\r\n return (\r\n <>\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n onClick={() => setIsModalOpen(true)}\r\n >\r\n {label}\r\n </button>\r\n <WalletModal\r\n isOpen={isModalOpen}\r\n onClose={() => setIsModalOpen(false)}\r\n wallets={availableWallets}\r\n onSelectWallet={handleConnect}\r\n theme={theme}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n const walletIcon = availableWallets.find(w => w.id === selectedWallet)?.icon;\r\n const nativeBalance = account?.balances ? getNativeBalance(account.balances) : null;\r\n const formattedBalance = nativeBalance ? formatBalance(nativeBalance, 2) : null;\r\n\r\n return (\r\n <>\r\n <div style={{ position: 'relative' }}>\r\n <button\r\n className={className}\r\n style={accountButtonStyles}\r\n onClick={() => setShowDropdown(!showDropdown)}\r\n >\r\n {walletIcon && (\r\n <img\r\n src={walletIcon}\r\n alt=\"Wallet\"\r\n style={{ width: '20px', height: '20px', borderRadius: '4px' }}\r\n />\r\n )}\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '2px' }}>\r\n <span>{account.displayName}</span>\r\n {showBalance && formattedBalance && (\r\n <span style={{ fontSize: '12px', opacity: 0.7, fontWeight: 400 }}>\r\n {isLoadingBalances ? '...' : `${formattedBalance} XLM`}\r\n </span>\r\n )}\r\n </div>\r\n <span style={{ fontSize: '12px', opacity: 0.7 }}>▼</span>\r\n </button>\r\n\r\n {showDropdown && (\r\n <>\r\n <div\r\n style={{\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n zIndex: 999,\r\n }}\r\n onClick={() => setShowDropdown(false)}\r\n />\r\n <div style={dropdownStyles}>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={() => {\r\n refreshBalances();\r\n setShowDropdown(false);\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🔄 Refresh Balances\r\n </button>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={copyAddress}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 📋 Copy Address\r\n </button>\r\n <button\r\n style={{\r\n ...dropdownItemStyles,\r\n color: '#ef4444',\r\n }}\r\n onClick={handleDisconnect}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🚪 Disconnect\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </>\r\n );\r\n}","import { UniversalConnector } from '@reown/appkit-universal-connector';\r\nimport type { CustomCaipNetwork } from '@reown/appkit-common';\r\n\r\n/**\r\n * Stellar Testnet CAIP network\r\n * AppKit does not yet natively support Stellar,\r\n * so we widen the type intentionally.\r\n */\r\nconst stellarTestnet = {\r\n id: 'testnet',\r\n chainNamespace: 'stellar',\r\n caipNetworkId: 'stellar:testnet',\r\n name: 'Stellar Testnet',\r\n nativeCurrency: {\r\n name: 'XLM',\r\n symbol: 'XLM',\r\n decimals: 7,\r\n },\r\n rpcUrls: {\r\n default: {\r\n http: ['https://horizon-testnet.stellar.org'],\r\n },\r\n },\r\n} as unknown as CustomCaipNetwork;\r\n\r\nexport async function getUniversalConnector(projectId: string) {\r\n return UniversalConnector.init({\r\n projectId,\r\n metadata: {\r\n name: 'Stellar Wallet Kit',\r\n description: 'Connect Stellar wallets',\r\n url: 'https://stellar.org',\r\n icons: [],\r\n },\r\n networks: [\r\n {\r\n namespace: 'stellar',\r\n chains: [stellarTestnet],\r\n methods: ['stellar_signTransaction'],\r\n events: [],\r\n },\r\n ],\r\n });\r\n}\r\n","import {\r\n WalletAdapter,\r\n WalletType,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryResponse,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nimport { getUniversalConnector } from '../utils/getUniversalConnector';\r\n\r\nexport class WalletConnectAdapter implements WalletAdapter {\r\n readonly type = WalletType.WALLETCONNECT;\r\n\r\n private projectId: string;\r\n private connector: any | null = null;\r\n private session: any | null = null;\r\n\r\n constructor(projectId: string) {\r\n if (!projectId) {\r\n throw new Error(\r\n 'WalletConnectAdapter requires a WalletConnect Project ID'\r\n );\r\n }\r\n this.projectId = projectId;\r\n }\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== 'undefined';\r\n }\r\n\r\n private async getConnector() {\r\n if (!this.connector) {\r\n this.connector = await getUniversalConnector(this.projectId);\r\n }\r\n return this.connector;\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const connector = await this.getConnector();\r\n const { session } = await connector.connect();\r\n this.session = session;\r\n\r\n // stellar:testnet:GXXXX...\r\n const account =\r\n session.namespaces.stellar.accounts[0];\r\n const publicKey = account.split(':')[2];\r\n\r\n return {\r\n address: publicKey,\r\n publicKey,\r\n };\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n if (this.connector) {\r\n await this.connector.disconnect();\r\n }\r\n this.session = null;\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n if (!this.session) return null;\r\n\r\n const account =\r\n this.session.namespaces.stellar.accounts[0];\r\n return account.split(':')[2];\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error('Network detection not supported via WalletConnect');\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n if (!this.connector || !this.session) {\r\n throw new Error('No active WalletConnect session');\r\n }\r\n\r\n const result = await this.connector.request({\r\n method: 'stellar_signTransaction',\r\n params: { xdr },\r\n });\r\n\r\n return {\r\n signedTxXdr: result as string,\r\n };\r\n }\r\n\r\n async signAuthEntry(\r\n _entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n throw new Error(\r\n 'Auth entry signing is not supported via WalletConnect'\r\n );\r\n }\r\n}\r\n","import { WalletType, WalletAdapter } from '../types';\r\nimport { FreighterAdapter } from '../adapters/FreighterAdapter';\r\nimport { AlbedoAdapter } from '../adapters/AlbedoAdapter';\r\nimport { WalletConnectAdapter } from '../adapters/WalletConnectAdapter';\r\n\r\nexport function createWalletAdapters(config: {\r\n walletConnectProjectId?: string;\r\n}): Partial<Record<WalletType, WalletAdapter>> {\r\n return {\r\n // Extension wallet\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n\r\n // Web wallet\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n\r\n // WalletConnect (mobile wallets like Lobstr)\r\n ...(config.walletConnectProjectId\r\n ? {\r\n [WalletType.WALLETCONNECT]: new WalletConnectAdapter(\r\n config.walletConnectProjectId\r\n ),\r\n }\r\n : {}),\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/index.ts","../src/adapters/FreighterAdapter.ts","../src/utils/albedoCallback.ts","../src/adapters/AlbedoAdapter.ts","../src/utils/balanceUtils.ts","../src/context/WalletContext.tsx","../src/components/WalletModal.tsx","../src/components/ConnectButton.tsx","../src/utils/getUniversalConnector.ts","../src/adapters/WalletConnectAdapter.ts","../src/wallets/createWalletAdapters.ts"],"names":["WalletType","NetworkType","isConnected","isAllowed","setAllowed","getUserInfo","getNetwork","signTransaction","signAuthEntry","createContext","useState","useMemo","useEffect","selectedWallet","useCallback","React","useContext","UniversalConnector"],"mappings":"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","file":"index.js","sourcesContent":["export enum WalletType {\r\n FREIGHTER = \"freighter\",\r\n ALBEDO = \"albedo\",\r\n WALLETCONNECT = 'walletconnect',\r\n LOBSTR = 'lobstr', // UI alias\r\n // XBULL = 'xbull',\r\n}\r\n\r\nexport enum NetworkType {\r\n PUBLIC = \"PUBLIC\",\r\n TESTNET = \"TESTNET\",\r\n FUTURENET = \"FUTURENET\",\r\n STANDALONE = \"STANDALONE\",\r\n}\r\n\r\nexport interface WalletAccount {\r\n address: string;\r\n publicKey: string;\r\n displayName?: string;\r\n balances?: AccountBalance[];\r\n}\r\n\r\nexport interface AccountBalance {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\nexport interface WalletInfo {\r\n id: WalletType;\r\n name: string;\r\n icon: string;\r\n description?: string;\r\n\r\n /** true = ready to use (installed OR web wallet) */\r\n installed: boolean;\r\n\r\n /** Optional install link (extensions only) */\r\n downloadUrl?: string;\r\n\r\n /** NEW: wallet delivery model */\r\n kind?: WalletKind;\r\n\r\n /** NEW: capability flags (future-proof) */\r\n capabilities?: {\r\n silentReconnect?: boolean;\r\n networkDetection?: boolean;\r\n authEntrySigning?: boolean;\r\n };\r\n}\r\n\r\nexport interface ConnectWalletResponse {\r\n address: string;\r\n publicKey: string;\r\n}\r\n\r\nexport interface SignTransactionResponse {\r\n signedTxXdr: string;\r\n}\r\n\r\nexport interface SignAuthEntryResponse {\r\n signedAuthEntry: string;\r\n}\r\n\r\nexport interface WalletAdapter {\r\n type: WalletType;\r\n isAvailable(): Promise<boolean>;\r\n connect(): Promise<ConnectWalletResponse>;\r\n disconnect(): Promise<void>;\r\n getPublicKey(): Promise<string | null>;\r\n getNetwork(): Promise<string>;\r\n signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse>;\r\n signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse>;\r\n}\r\n\r\nexport interface SignTransactionOptions {\r\n network?: string;\r\n networkPassphrase?: string;\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface SignAuthEntryOptions {\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface StellarWalletKitConfig {\r\n network?: NetworkType;\r\n defaultWallet?: WalletType;\r\n autoConnect?: boolean;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n\r\n adapters?: Partial<Record<WalletType, WalletAdapter>>;\r\n}\r\n\r\nexport interface WalletTheme {\r\n mode?: \"light\" | \"dark\" | \"auto\";\r\n primaryColor?: string;\r\n backgroundColor?: string;\r\n borderRadius?: string;\r\n fontFamily?: string;\r\n overlayBackground?: string;\r\n modalBackground?: string;\r\n textColor?: string;\r\n buttonHoverColor?: string;\r\n}\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n wallets: WalletInfo[];\r\n onSelectWallet: (walletType: WalletType) => void;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n}\r\n\r\nexport interface WalletContextValue {\r\n account: WalletAccount | null;\r\n isConnected: boolean;\r\n isConnecting: boolean;\r\n error: Error | null;\r\n network: NetworkType;\r\n selectedWallet: WalletType | null;\r\n connect: (walletType?: WalletType) => Promise<void>;\r\n disconnect: () => Promise<void>;\r\n signTransaction: (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ) => Promise<SignTransactionResponse>;\r\n signAuthEntry: (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ) => Promise<SignAuthEntryResponse>;\r\n switchNetwork: (network: NetworkType) => Promise<void>;\r\n availableWallets: WalletInfo[];\r\n refreshBalances: () => Promise<void>;\r\n isLoadingBalances: boolean;\r\n supports: {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n };\r\n connectingWallet: WalletType | null;\r\n}\r\n\r\nexport type WalletKind = \"extension\" | \"web\";\r\n\r\nexport interface WalletCapabilities {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n}\r\n","import {\r\n isConnected,\r\n isAllowed,\r\n setAllowed,\r\n getUserInfo,\r\n signTransaction,\r\n signAuthEntry,\r\n getNetwork,\r\n} from '@stellar/freighter-api';\r\n\r\nimport { WalletType } from '../types';\r\nimport type {\r\n WalletAdapter,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nexport class FreighterAdapter implements WalletAdapter {\r\n readonly type = WalletType.FREIGHTER;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n try {\r\n return await isConnected();\r\n } catch (error) {\r\n console.error('Error checking Freighter availability:', error);\r\n return false;\r\n }\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n try {\r\n // Check if Freighter is installed\r\n const connected = await isConnected();\r\n if (!connected) {\r\n throw new Error('Freighter wallet is not installed');\r\n }\r\n\r\n // Check if already allowed\r\n const allowed = await isAllowed();\r\n \r\n if (!allowed) {\r\n // Request permission\r\n await setAllowed();\r\n }\r\n\r\n // Get user info\r\n const userInfo = await getUserInfo();\r\n \r\n if (!userInfo || !userInfo.publicKey) {\r\n throw new Error('Failed to get user information from Freighter');\r\n }\r\n\r\n return {\r\n address: userInfo.publicKey,\r\n publicKey: userInfo.publicKey,\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to Freighter:', error);\r\n throw new Error(`Failed to connect to Freighter: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n // Freighter doesn't have a disconnect method in the API\r\n // The user needs to disconnect manually from the extension\r\n // We just clear local state\r\n console.log('Freighter disconnect requested - user must disconnect from extension');\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n try {\r\n const allowed = await isAllowed();\r\n if (!allowed) {\r\n return null;\r\n }\r\n\r\n const userInfo = await getUserInfo();\r\n return userInfo?.publicKey || null;\r\n } catch (error) {\r\n console.error('Error getting public key:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n try {\r\n const network = await getNetwork();\r\n return network;\r\n } catch (error) {\r\n console.error('Error getting network:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n try {\r\n const result = await signTransaction(xdr, {\r\n network: options?.network,\r\n networkPassphrase: options?.networkPassphrase,\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedTxXdr: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing transaction:', error);\r\n throw new Error(`Failed to sign transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n try {\r\n const result = await signAuthEntry(entryXdr, {\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedAuthEntry: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing auth entry:', error);\r\n throw new Error(`Failed to sign auth entry: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n}","export function openAlbedoPopup(url: string): Window {\r\n const popup = window.open(\r\n url,\r\n \"albedo\",\r\n \"width=420,height=720,resizable=yes,scrollbars=yes\"\r\n );\r\n\r\n if (!popup) {\r\n throw new Error(\"Failed to open Albedo popup (blocked by browser)\");\r\n }\r\n\r\n return popup;\r\n}\r\n\r\nexport function waitForAlbedoResult(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n const parseResult = () => {\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL (important UX polish)\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n resolve(result);\r\n };\r\n\r\n parseResult();\r\n window.addEventListener(\"popstate\", parseResult);\r\n });\r\n}\r\n\r\nexport function handleAlbedoCallback(): Record<string, string> | null {\r\n if (typeof window === \"undefined\") return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return null;\r\n }\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n return result;\r\n}\r\n\r\nexport function waitForAlbedoPopup(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n function handler(event: MessageEvent) {\r\n if (\r\n event.origin !== window.location.origin ||\r\n event.data?.type !== \"ALBEDO_RESULT\"\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n window.removeEventListener(\"message\", handler);\r\n resolve(event.data.payload);\r\n }\r\n\r\n window.addEventListener(\"message\", handler);\r\n });\r\n}\r\n","import type {\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from \"../types\";\r\nimport { WalletType } from \"../types\";\r\nimport {\r\n waitForAlbedoPopup,\r\n waitForAlbedoResult,\r\n} from \"../utils/albedoCallback\";\r\nimport { openAlbedoPopup } from \"../utils/albedoCallback\";\r\n\r\nexport class AlbedoAdapter {\r\n readonly type = WalletType.ALBEDO;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"public-key\");\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\r\n \"callback\",\r\n `${window.location.origin}/albedo-callback`\r\n );\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n openAlbedoPopup(url.toString());\r\n\r\n const result = await waitForAlbedoPopup();\r\n\r\n if (!result.pubkey) {\r\n throw new Error(\"Albedo connection rejected\");\r\n }\r\n\r\n return {\r\n address: result.pubkey,\r\n publicKey: result.pubkey,\r\n };\r\n }\r\n\r\n async disconnect() {}\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n return null;\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error(\"Albedo does not expose network\");\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"tx\");\r\n url.searchParams.set(\"xdr\", xdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_envelope_xdr) {\r\n throw new Error(\"Albedo signing rejected\");\r\n }\r\n\r\n return { signedTxXdr: result.signed_envelope_xdr };\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"sign-auth-entry\");\r\n url.searchParams.set(\"xdr\", entryXdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_xdr) {\r\n throw new Error(\"Albedo auth entry rejected\");\r\n }\r\n\r\n return { signedAuthEntry: result.signed_xdr };\r\n }\r\n}\r\n","import type { AccountBalance, NetworkType } from '../types';\r\n\r\ninterface HorizonBalanceRecord {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\ninterface HorizonAccountResponse {\r\n id: string;\r\n account_id: string;\r\n sequence: string;\r\n balances: HorizonBalanceRecord[];\r\n}\r\n\r\nconst HORIZON_URLS: Record<NetworkType, string> = {\r\n PUBLIC: 'https://horizon.stellar.org',\r\n TESTNET: 'https://horizon-testnet.stellar.org',\r\n FUTURENET: 'https://horizon-futurenet.stellar.org',\r\n STANDALONE: 'http://localhost:8000',\r\n};\r\n\r\n/**\r\n * Fetches account balances from Horizon\r\n */\r\nexport async function fetchAccountBalances(\r\n publicKey: string,\r\n network: NetworkType\r\n): Promise<AccountBalance[]> {\r\n const horizonUrl = HORIZON_URLS[network];\r\n \r\n try {\r\n const response = await fetch(`${horizonUrl}/accounts/${publicKey}`);\r\n \r\n if (!response.ok) {\r\n if (response.status === 404) {\r\n throw new Error('Account not found. Make sure the account is funded.');\r\n }\r\n throw new Error(`Failed to fetch account: ${response.statusText}`);\r\n }\r\n \r\n const data: HorizonAccountResponse = await response.json();\r\n return data.balances as AccountBalance[];\r\n } catch (error) {\r\n console.error('Error fetching balances:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the native (XLM) balance from balances array\r\n */\r\nexport function getNativeBalance(balances: AccountBalance[]): string {\r\n const nativeBalance = balances.find(b => b.asset_type === 'native');\r\n return nativeBalance?.balance || '0';\r\n}\r\n\r\n/**\r\n * Formats balance for display\r\n */\r\nexport function formatBalance(balance: string, decimals: number = 7): string {\r\n const num = parseFloat(balance);\r\n if (isNaN(num)) return '0';\r\n \r\n // Format with specified decimals, remove trailing zeros\r\n return num.toFixed(decimals).replace(/\\.?0+$/, '');\r\n}\r\n\r\n/**\r\n * Gets balance for a specific asset\r\n */\r\nexport function getAssetBalance(\r\n balances: AccountBalance[],\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): string {\r\n if (!assetCode) {\r\n return getNativeBalance(balances);\r\n }\r\n \r\n const asset = balances.find(\r\n b => b.asset_code === assetCode && \r\n (!assetIssuer || b.asset_issuer === assetIssuer)\r\n );\r\n \r\n return asset?.balance || '0';\r\n}\r\n\r\n/**\r\n * Checks if account has sufficient balance for a transaction\r\n */\r\nexport function hasSufficientBalance(\r\n balances: AccountBalance[],\r\n requiredAmount: string,\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): boolean {\r\n const balance = getAssetBalance(balances, assetCode, assetIssuer);\r\n return parseFloat(balance) >= parseFloat(requiredAmount);\r\n}\r\n\r\n/**\r\n * Gets total account value in XLM (simplified - just returns native balance)\r\n * For real implementation, you'd need asset prices\r\n */\r\nexport function getTotalValueXLM(balances: AccountBalance[]): string {\r\n return getNativeBalance(balances);\r\n}\r\n\r\n/**\r\n * Groups balances by type (native, credit_alphanum4, credit_alphanum12, liquidity_pool_shares)\r\n */\r\nexport function groupBalancesByType(balances: AccountBalance[]) {\r\n return balances.reduce((acc, balance) => {\r\n const type = balance.asset_type;\r\n if (!acc[type]) {\r\n acc[type] = [];\r\n }\r\n acc[type].push(balance);\r\n return acc;\r\n }, {} as Record<string, AccountBalance[]>);\r\n}","\"use client\";\r\n\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n PropsWithChildren,\r\n} from \"react\";\r\n\r\nimport {\r\n WalletType,\r\n NetworkType,\r\n} from \"../types\";\r\n\r\nimport type {\r\n WalletContextValue,\r\n WalletAccount,\r\n StellarWalletKitConfig,\r\n WalletInfo,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n WalletAdapter,\r\n} from \"../types\";\r\n\r\nimport { FreighterAdapter } from \"../adapters/FreighterAdapter\";\r\nimport { AlbedoAdapter } from \"../adapters/AlbedoAdapter\";\r\nimport { fetchAccountBalances } from \"../utils/balanceUtils\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Constants */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst STORAGE_KEY = \"stellar_wallet_kit\";\r\nconst isBrowser = typeof window !== \"undefined\";\r\n\r\nconst DEFAULT_SUPPORTS = {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Context */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst WalletContext = createContext<WalletContextValue | undefined>(undefined);\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Wallet metadata */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst walletMetadata: Record<WalletType, Omit<WalletInfo, \"installed\">> = {\r\n [WalletType.FREIGHTER]: {\r\n id: WalletType.FREIGHTER,\r\n name: \"Freighter\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/freighter.svg\",\r\n description: \"Freighter browser extension wallet\",\r\n downloadUrl:\r\n \"https://chrome.google.com/webstore/detail/freighter/bcacfldlkkdogcmkkibnjlakofdplcbk\",\r\n kind: \"extension\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: true,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.ALBEDO]: {\r\n id: WalletType.ALBEDO,\r\n name: \"Albedo\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/albedo.svg\",\r\n description: \"Web-based Stellar wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.WALLETCONNECT]: {\r\n id: WalletType.WALLETCONNECT,\r\n name: \"WalletConnect\",\r\n icon: \"https://docs.walletconnect.network/images/walletconnect-home.svg\",\r\n description: \"Connect mobile wallets via WalletConnect\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n\r\n [WalletType.LOBSTR]: {\r\n id: WalletType.LOBSTR,\r\n name: \"LOBSTR\",\r\n icon: \"https://lobstr.co/favicon.ico\",\r\n description: \"LOBSTR mobile wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Storage helpers */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface StorageData {\r\n selectedWallet: WalletType | null;\r\n autoConnect: boolean;\r\n}\r\n\r\nfunction getStorageData(): StorageData {\r\n if (!isBrowser) {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n return raw\r\n ? JSON.parse(raw)\r\n : { selectedWallet: null, autoConnect: false };\r\n } catch {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n}\r\n\r\nfunction setStorageData(data: Partial<StorageData>) {\r\n if (!isBrowser) return;\r\n\r\n const existing = getStorageData();\r\n localStorage.setItem(\r\n STORAGE_KEY,\r\n JSON.stringify({ ...existing, ...data })\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Provider */\r\n/* ------------------------------------------------------------------ */\r\n\r\ntype WalletProviderProps = PropsWithChildren<{\r\n config?: StellarWalletKitConfig;\r\n}>;\r\n\r\nexport function WalletProvider({ config = {}, children }: WalletProviderProps) {\r\n const [account, setAccount] = useState<WalletAccount | null>(null);\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [connectingWallet, setConnectingWallet] =\r\n useState<WalletType | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [network, setNetwork] = useState<NetworkType>(\r\n config.network || NetworkType.TESTNET\r\n );\r\n const [selectedWallet, setSelectedWallet] =\r\n useState<WalletType | null>(null);\r\n const [availableWallets, setAvailableWallets] = useState<WalletInfo[]>([]);\r\n const [isLoadingBalances, setIsLoadingBalances] = useState(false);\r\n\r\n const isConnected = !!account;\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Wallet adapters */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const walletAdapters = useMemo<\r\n Partial<Record<WalletType, WalletAdapter>>\r\n >(\r\n () => ({\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n ...(config.adapters ?? {}),\r\n }),\r\n [config.adapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Detect wallets */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser) return;\r\n\r\n (async () => {\r\n const wallets: WalletInfo[] = [];\r\n\r\n const entries = Object.entries(walletAdapters) as [\r\n WalletType,\r\n WalletAdapter | undefined\r\n ][];\r\n\r\n for (const [walletType, adapter] of entries) {\r\n if (!adapter) continue;\r\n\r\n const meta = walletMetadata[walletType];\r\n\r\n let installed = true;\r\n if (meta.kind === \"extension\") {\r\n installed = await adapter.isAvailable();\r\n }\r\n\r\n wallets.push({ ...meta, installed });\r\n }\r\n\r\n setAvailableWallets(wallets);\r\n })();\r\n }, [walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Auto-connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser || !config.autoConnect) return;\r\n\r\n const { selectedWallet } = getStorageData();\r\n if (selectedWallet) {\r\n connect(selectedWallet).catch(() => {});\r\n }\r\n }, [config.autoConnect]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Balances */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const refreshBalances = useCallback(async () => {\r\n if (!account?.publicKey) return;\r\n\r\n setIsLoadingBalances(true);\r\n try {\r\n const balances = await fetchAccountBalances(\r\n account.publicKey,\r\n network\r\n );\r\n setAccount((prev) => (prev ? { ...prev, balances } : null));\r\n } finally {\r\n setIsLoadingBalances(false);\r\n }\r\n }, [account?.publicKey, network]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const connect = useCallback(\r\n async (walletType?: WalletType) => {\r\n const type =\r\n walletType || config.defaultWallet || WalletType.FREIGHTER;\r\n\r\n setIsConnecting(true);\r\n setConnectingWallet(type);\r\n setError(null);\r\n\r\n try {\r\n const adapter = walletAdapters[type];\r\n if (!adapter) {\r\n throw new Error(`Wallet adapter not configured: ${type}`);\r\n }\r\n\r\n const meta = walletMetadata[type];\r\n\r\n if (meta.kind === \"extension\") {\r\n const ok = await adapter.isAvailable();\r\n if (!ok) {\r\n throw new Error(`${meta.name} is not installed`);\r\n }\r\n }\r\n\r\n const res = await adapter.connect();\r\n\r\n setAccount({\r\n address: res.address,\r\n publicKey: res.publicKey,\r\n displayName: `${res.address.slice(0, 4)}…${res.address.slice(-4)}`,\r\n });\r\n\r\n setSelectedWallet(type);\r\n setStorageData({ selectedWallet: type, autoConnect: true });\r\n\r\n await refreshBalances();\r\n } catch (e) {\r\n setError(e as Error);\r\n throw e;\r\n } finally {\r\n setIsConnecting(false);\r\n setConnectingWallet(null);\r\n }\r\n },\r\n [config.defaultWallet, refreshBalances, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Disconnect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const disconnect = useCallback(async () => {\r\n if (selectedWallet) {\r\n await walletAdapters[selectedWallet]?.disconnect();\r\n }\r\n\r\n setAccount(null);\r\n setSelectedWallet(null);\r\n setError(null);\r\n setStorageData({ selectedWallet: null, autoConnect: false });\r\n }, [selectedWallet, walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Signing */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const signTransaction = useCallback(\r\n (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signTransaction(xdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n const signAuthEntry = useCallback(\r\n (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signAuthEntry(entryXdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Network */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const switchNetwork = useCallback(\r\n async (n: NetworkType) => {\r\n setNetwork(n);\r\n await refreshBalances();\r\n },\r\n [refreshBalances]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Capabilities */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const supports = useMemo(() => {\r\n if (!selectedWallet) return DEFAULT_SUPPORTS;\r\n\r\n const caps = walletMetadata[selectedWallet].capabilities;\r\n return {\r\n silentReconnect: caps?.silentReconnect ?? false,\r\n networkDetection: caps?.networkDetection ?? false,\r\n authEntrySigning: caps?.authEntrySigning ?? false,\r\n };\r\n }, [selectedWallet]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Context value */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const value = useMemo<WalletContextValue>(\r\n () => ({\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n }),\r\n [\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n ]\r\n );\r\n\r\n return (\r\n <WalletContext.Provider value={value}>\r\n {children}\r\n </WalletContext.Provider>\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Hook */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function useWallet(): WalletContextValue {\r\n const ctx = useContext(WalletContext);\r\n if (!ctx) {\r\n throw new Error(\"useWallet must be used within a WalletProvider\");\r\n }\r\n return ctx;\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport type { ModalProps } from '../types';\r\n\r\nexport function WalletModal({\r\n isOpen,\r\n onClose,\r\n wallets,\r\n onSelectWallet,\r\n theme,\r\n appName = 'Your App',\r\n appIcon,\r\n}: ModalProps) {\r\n useEffect(() => {\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'auto';\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const isDark =\r\n theme?.mode === 'dark' ||\r\n (theme?.mode === 'auto' &&\r\n window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const bg = theme?.modalBackground || (isDark ? '#0f0f11' : '#ffffff');\r\n const text = theme?.textColor || (isDark ? '#ffffff' : '#0a0a0a');\r\n const muted = isDark ? '#8b8b8b' : '#6b6b6b';\r\n const border = isDark ? '#1f1f23' : '#eaeaea';\r\n const hover = theme?.buttonHoverColor || (isDark ? '#1a1a1f' : '#f6f6f6');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n .swk-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background: rgba(0,0,0,0.55);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n }\r\n\r\n .swk-modal {\r\n width: 420px;\r\n max-width: 92vw;\r\n background: ${bg};\r\n border-radius: 20px;\r\n padding: 28px;\r\n box-shadow: 0 20px 60px rgba(0,0,0,0.4);\r\n font-family: ${theme?.fontFamily || 'Inter, system-ui, sans-serif'};\r\n }\r\n\r\n .swk-wallet {\r\n display: flex;\r\n align-items: center;\r\n gap: 14px;\r\n padding: 14px 16px;\r\n border-radius: 14px;\r\n cursor: pointer;\r\n transition: background 0.15s ease;\r\n }\r\n\r\n .swk-wallet:hover {\r\n background: ${hover};\r\n }\r\n\r\n .swk-pill {\r\n font-size: 12px;\r\n padding: 4px 10px;\r\n border-radius: 999px;\r\n background: ${theme?.primaryColor || '#6c5ce7'};\r\n color: white;\r\n font-weight: 500;\r\n }\r\n `}</style>\r\n\r\n <div className=\"swk-overlay\" onClick={onClose}>\r\n <div className=\"swk-modal\" onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={{ marginBottom: 24 }}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 12,\r\n marginBottom: 8,\r\n }}\r\n >\r\n {appIcon && (\r\n <img\r\n src={appIcon}\r\n alt=\"\"\r\n style={{ width: 32, height: 32, borderRadius: 8 }}\r\n />\r\n )}\r\n <span style={{ color: muted, fontSize: 14 }}>\r\n Log in or sign up\r\n </span>\r\n </div>\r\n\r\n <h2\r\n style={{\r\n margin: 0,\r\n fontSize: 22,\r\n fontWeight: 600,\r\n color: text,\r\n }}\r\n >\r\n {appName}\r\n </h2>\r\n </div>\r\n\r\n {/* Wallet list */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\r\n {wallets.map((wallet, i) => (\r\n <div\r\n key={wallet.id}\r\n className=\"swk-wallet\"\r\n onClick={() => onSelectWallet(wallet.id)}\r\n >\r\n <img\r\n src={wallet.icon}\r\n alt={wallet.name}\r\n style={{ width: 36, height: 36, borderRadius: 10 }}\r\n />\r\n\r\n <div style={{ flex: 1 }}>\r\n <div\r\n style={{\r\n fontSize: 15,\r\n fontWeight: 500,\r\n color: text,\r\n }}\r\n >\r\n {wallet.name}\r\n </div>\r\n\r\n {wallet.description && (\r\n <div\r\n style={{\r\n fontSize: 13,\r\n color: muted,\r\n marginTop: 2,\r\n }}\r\n >\r\n {wallet.description}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {i === 0 && <div className=\"swk-pill\">Recent</div>}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div\r\n style={{\r\n marginTop: 24,\r\n paddingTop: 16,\r\n borderTop: `1px solid ${border}`,\r\n textAlign: 'center',\r\n fontSize: 13,\r\n color: muted,\r\n }}\r\n >\r\n Powered by Stellar Wallet Kit\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useWallet } from '../context/WalletContext';\r\nimport { WalletModal } from './WalletModal';\r\nimport type { WalletTheme } from '../types';\r\nimport { getNativeBalance, formatBalance } from '../utils/balanceUtils';\r\n\r\ninterface ConnectButtonProps {\r\n label?: string;\r\n theme?: WalletTheme;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n showBalance?: boolean;\r\n onConnect?: () => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\nexport function ConnectButton({\r\n label = 'Connect Wallet',\r\n theme,\r\n className,\r\n style,\r\n showBalance = false,\r\n onConnect,\r\n onDisconnect,\r\n}: ConnectButtonProps) {\r\n const {\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connect,\r\n disconnect,\r\n availableWallets,\r\n selectedWallet,\r\n refreshBalances,\r\n isLoadingBalances,\r\n } = useWallet();\r\n\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [showDropdown, setShowDropdown] = useState(false);\r\n\r\n const themeMode = theme?.mode || 'light';\r\n const isDark = themeMode === 'dark' || (themeMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const defaultButtonStyles: React.CSSProperties = {\r\n padding: '12px 24px',\r\n borderRadius: theme?.borderRadius || '12px',\r\n border: 'none',\r\n fontSize: '15px',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n fontFamily: theme?.fontFamily || '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n ...style,\r\n };\r\n\r\n const connectButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: theme?.primaryColor || '#8b5cf6',\r\n color: '#ffffff',\r\n };\r\n\r\n const accountButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: isDark ? '#252525' : '#f5f5f5',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n };\r\n\r\n const dropdownStyles: React.CSSProperties = {\r\n position: 'absolute',\r\n top: 'calc(100% + 8px)',\r\n right: 0,\r\n backgroundColor: theme?.modalBackground || (isDark ? '#1a1a1a' : '#ffffff'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n borderRadius: theme?.borderRadius || '12px',\r\n padding: '8px',\r\n minWidth: '200px',\r\n boxShadow: isDark ? '0 4px 16px rgba(0, 0, 0, 0.4)' : '0 4px 16px rgba(0, 0, 0, 0.1)',\r\n zIndex: 1000,\r\n };\r\n\r\n const dropdownItemStyles: React.CSSProperties = {\r\n padding: '12px 16px',\r\n border: 'none',\r\n background: 'none',\r\n cursor: 'pointer',\r\n width: '100%',\r\n textAlign: 'left',\r\n fontSize: '14px',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n borderRadius: '8px',\r\n transition: 'background-color 0.2s',\r\n fontFamily: 'inherit',\r\n };\r\n\r\n const handleConnect = async (walletType: any) => {\r\n try {\r\n await connect(walletType);\r\n setIsModalOpen(false);\r\n onConnect?.();\r\n } catch (error) {\r\n console.error('Connection error:', error);\r\n }\r\n };\r\n\r\n const handleDisconnect = async () => {\r\n try {\r\n await disconnect();\r\n setShowDropdown(false);\r\n onDisconnect?.();\r\n } catch (error) {\r\n console.error('Disconnect error:', error);\r\n }\r\n };\r\n\r\n const copyAddress = () => {\r\n if (account?.address) {\r\n navigator.clipboard.writeText(account.address);\r\n // You could add a toast notification here\r\n setShowDropdown(false);\r\n }\r\n };\r\n\r\n if (isConnecting) {\r\n return (\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n disabled\r\n >\r\n Connecting...\r\n </button>\r\n );\r\n }\r\n\r\n if (!isConnected || !account) {\r\n return (\r\n <>\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n onClick={() => setIsModalOpen(true)}\r\n >\r\n {label}\r\n </button>\r\n <WalletModal\r\n isOpen={isModalOpen}\r\n onClose={() => setIsModalOpen(false)}\r\n wallets={availableWallets}\r\n onSelectWallet={handleConnect}\r\n theme={theme}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n const walletIcon = availableWallets.find(w => w.id === selectedWallet)?.icon;\r\n const nativeBalance = account?.balances ? getNativeBalance(account.balances) : null;\r\n const formattedBalance = nativeBalance ? formatBalance(nativeBalance, 2) : null;\r\n\r\n return (\r\n <>\r\n <div style={{ position: 'relative' }}>\r\n <button\r\n className={className}\r\n style={accountButtonStyles}\r\n onClick={() => setShowDropdown(!showDropdown)}\r\n >\r\n {walletIcon && (\r\n <img\r\n src={walletIcon}\r\n alt=\"Wallet\"\r\n style={{ width: '20px', height: '20px', borderRadius: '4px' }}\r\n />\r\n )}\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '2px' }}>\r\n <span>{account.displayName}</span>\r\n {showBalance && formattedBalance && (\r\n <span style={{ fontSize: '12px', opacity: 0.7, fontWeight: 400 }}>\r\n {isLoadingBalances ? '...' : `${formattedBalance} XLM`}\r\n </span>\r\n )}\r\n </div>\r\n <span style={{ fontSize: '12px', opacity: 0.7 }}>▼</span>\r\n </button>\r\n\r\n {showDropdown && (\r\n <>\r\n <div\r\n style={{\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n zIndex: 999,\r\n }}\r\n onClick={() => setShowDropdown(false)}\r\n />\r\n <div style={dropdownStyles}>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={() => {\r\n refreshBalances();\r\n setShowDropdown(false);\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🔄 Refresh Balances\r\n </button>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={copyAddress}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 📋 Copy Address\r\n </button>\r\n <button\r\n style={{\r\n ...dropdownItemStyles,\r\n color: '#ef4444',\r\n }}\r\n onClick={handleDisconnect}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🚪 Disconnect\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </>\r\n );\r\n}","import { UniversalConnector } from '@reown/appkit-universal-connector';\r\nimport type { CustomCaipNetwork } from '@reown/appkit-common';\r\n\r\n/**\r\n * Stellar Testnet CAIP network\r\n * AppKit does not yet natively support Stellar,\r\n * so we widen the type intentionally.\r\n */\r\nconst stellarTestnet = {\r\n id: 'testnet',\r\n chainNamespace: 'stellar',\r\n caipNetworkId: 'stellar:testnet',\r\n name: 'Stellar Testnet',\r\n nativeCurrency: {\r\n name: 'XLM',\r\n symbol: 'XLM',\r\n decimals: 7,\r\n },\r\n rpcUrls: {\r\n default: {\r\n http: ['https://horizon-testnet.stellar.org'],\r\n },\r\n },\r\n} as unknown as CustomCaipNetwork;\r\n\r\nexport async function getUniversalConnector(projectId: string) {\r\n return UniversalConnector.init({\r\n projectId,\r\n metadata: {\r\n name: 'Stellar Wallet Kit',\r\n description: 'Connect Stellar wallets',\r\n url: 'https://stellar.org',\r\n icons: [],\r\n },\r\n networks: [\r\n {\r\n namespace: 'stellar',\r\n chains: [stellarTestnet],\r\n methods: ['stellar_signTransaction'],\r\n events: [],\r\n },\r\n ],\r\n });\r\n}\r\n","import {\r\n WalletAdapter,\r\n WalletType,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryResponse,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nimport { getUniversalConnector } from '../utils/getUniversalConnector';\r\n\r\nexport class WalletConnectAdapter implements WalletAdapter {\r\n readonly type = WalletType.WALLETCONNECT;\r\n\r\n private projectId: string;\r\n private connector: any | null = null;\r\n private session: any | null = null;\r\n\r\n constructor(projectId: string) {\r\n if (!projectId) {\r\n throw new Error(\r\n 'WalletConnectAdapter requires a WalletConnect Project ID'\r\n );\r\n }\r\n this.projectId = projectId;\r\n }\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== 'undefined';\r\n }\r\n\r\n private async getConnector() {\r\n if (!this.connector) {\r\n this.connector = await getUniversalConnector(this.projectId);\r\n }\r\n return this.connector;\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const connector = await this.getConnector();\r\n const { session } = await connector.connect();\r\n this.session = session;\r\n\r\n // stellar:testnet:GXXXX...\r\n const account =\r\n session.namespaces.stellar.accounts[0];\r\n const publicKey = account.split(':')[2];\r\n\r\n return {\r\n address: publicKey,\r\n publicKey,\r\n };\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n if (this.connector) {\r\n await this.connector.disconnect();\r\n }\r\n this.session = null;\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n if (!this.session) return null;\r\n\r\n const account =\r\n this.session.namespaces.stellar.accounts[0];\r\n return account.split(':')[2];\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error('Network detection not supported via WalletConnect');\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n if (!this.connector || !this.session) {\r\n throw new Error('No active WalletConnect session');\r\n }\r\n\r\n const result = await this.connector.request({\r\n method: 'stellar_signTransaction',\r\n params: { xdr },\r\n });\r\n\r\n return {\r\n signedTxXdr: result as string,\r\n };\r\n }\r\n\r\n async signAuthEntry(\r\n _entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n throw new Error(\r\n 'Auth entry signing is not supported via WalletConnect'\r\n );\r\n }\r\n}\r\n","import { WalletType, WalletAdapter } from '../types';\r\nimport { FreighterAdapter } from '../adapters/FreighterAdapter';\r\nimport { AlbedoAdapter } from '../adapters/AlbedoAdapter';\r\nimport { WalletConnectAdapter } from '../adapters/WalletConnectAdapter';\r\n\r\nexport function createWalletAdapters(config: {\r\n walletConnectProjectId?: string;\r\n}): Partial<Record<WalletType, WalletAdapter>> {\r\n return {\r\n // Extension wallet\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n\r\n // Web wallet\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n\r\n // WalletConnect (mobile wallets like Lobstr)\r\n ...(config.walletConnectProjectId\r\n ? {\r\n [WalletType.WALLETCONNECT]: new WalletConnectAdapter(\r\n config.walletConnectProjectId\r\n ),\r\n }\r\n : {}),\r\n };\r\n}\r\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -332,7 +332,7 @@ var walletMetadata = {
|
|
|
332
332
|
["walletconnect" /* WALLETCONNECT */]: {
|
|
333
333
|
id: "walletconnect" /* WALLETCONNECT */,
|
|
334
334
|
name: "WalletConnect",
|
|
335
|
-
icon: "https://walletconnect.
|
|
335
|
+
icon: "https://docs.walletconnect.network/images/walletconnect-home.svg",
|
|
336
336
|
description: "Connect mobile wallets via WalletConnect",
|
|
337
337
|
kind: "web",
|
|
338
338
|
capabilities: {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/index.ts","../src/adapters/FreighterAdapter.ts","../src/utils/albedoCallback.ts","../src/adapters/AlbedoAdapter.ts","../src/utils/balanceUtils.ts","../src/context/WalletContext.tsx","../src/components/WalletModal.tsx","../src/components/ConnectButton.tsx","../src/utils/getUniversalConnector.ts","../src/adapters/WalletConnectAdapter.ts","../src/wallets/createWalletAdapters.ts"],"names":["WalletType","NetworkType","isConnected","selectedWallet","signTransaction","signAuthEntry","React","useEffect","useState"],"mappings":"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","file":"index.mjs","sourcesContent":["export enum WalletType {\r\n FREIGHTER = \"freighter\",\r\n ALBEDO = \"albedo\",\r\n WALLETCONNECT = 'walletconnect',\r\n LOBSTR = 'lobstr', // UI alias\r\n // XBULL = 'xbull',\r\n}\r\n\r\nexport enum NetworkType {\r\n PUBLIC = \"PUBLIC\",\r\n TESTNET = \"TESTNET\",\r\n FUTURENET = \"FUTURENET\",\r\n STANDALONE = \"STANDALONE\",\r\n}\r\n\r\nexport interface WalletAccount {\r\n address: string;\r\n publicKey: string;\r\n displayName?: string;\r\n balances?: AccountBalance[];\r\n}\r\n\r\nexport interface AccountBalance {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\nexport interface WalletInfo {\r\n id: WalletType;\r\n name: string;\r\n icon: string;\r\n description?: string;\r\n\r\n /** true = ready to use (installed OR web wallet) */\r\n installed: boolean;\r\n\r\n /** Optional install link (extensions only) */\r\n downloadUrl?: string;\r\n\r\n /** NEW: wallet delivery model */\r\n kind?: WalletKind;\r\n\r\n /** NEW: capability flags (future-proof) */\r\n capabilities?: {\r\n silentReconnect?: boolean;\r\n networkDetection?: boolean;\r\n authEntrySigning?: boolean;\r\n };\r\n}\r\n\r\nexport interface ConnectWalletResponse {\r\n address: string;\r\n publicKey: string;\r\n}\r\n\r\nexport interface SignTransactionResponse {\r\n signedTxXdr: string;\r\n}\r\n\r\nexport interface SignAuthEntryResponse {\r\n signedAuthEntry: string;\r\n}\r\n\r\nexport interface WalletAdapter {\r\n type: WalletType;\r\n isAvailable(): Promise<boolean>;\r\n connect(): Promise<ConnectWalletResponse>;\r\n disconnect(): Promise<void>;\r\n getPublicKey(): Promise<string | null>;\r\n getNetwork(): Promise<string>;\r\n signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse>;\r\n signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse>;\r\n}\r\n\r\nexport interface SignTransactionOptions {\r\n network?: string;\r\n networkPassphrase?: string;\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface SignAuthEntryOptions {\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface StellarWalletKitConfig {\r\n network?: NetworkType;\r\n defaultWallet?: WalletType;\r\n autoConnect?: boolean;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n\r\n adapters?: Partial<Record<WalletType, WalletAdapter>>;\r\n}\r\n\r\nexport interface WalletTheme {\r\n mode?: \"light\" | \"dark\" | \"auto\";\r\n primaryColor?: string;\r\n backgroundColor?: string;\r\n borderRadius?: string;\r\n fontFamily?: string;\r\n overlayBackground?: string;\r\n modalBackground?: string;\r\n textColor?: string;\r\n buttonHoverColor?: string;\r\n}\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n wallets: WalletInfo[];\r\n onSelectWallet: (walletType: WalletType) => void;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n}\r\n\r\nexport interface WalletContextValue {\r\n account: WalletAccount | null;\r\n isConnected: boolean;\r\n isConnecting: boolean;\r\n error: Error | null;\r\n network: NetworkType;\r\n selectedWallet: WalletType | null;\r\n connect: (walletType?: WalletType) => Promise<void>;\r\n disconnect: () => Promise<void>;\r\n signTransaction: (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ) => Promise<SignTransactionResponse>;\r\n signAuthEntry: (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ) => Promise<SignAuthEntryResponse>;\r\n switchNetwork: (network: NetworkType) => Promise<void>;\r\n availableWallets: WalletInfo[];\r\n refreshBalances: () => Promise<void>;\r\n isLoadingBalances: boolean;\r\n supports: {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n };\r\n connectingWallet: WalletType | null;\r\n}\r\n\r\nexport type WalletKind = \"extension\" | \"web\";\r\n\r\nexport interface WalletCapabilities {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n}\r\n","import {\r\n isConnected,\r\n isAllowed,\r\n setAllowed,\r\n getUserInfo,\r\n signTransaction,\r\n signAuthEntry,\r\n getNetwork,\r\n} from '@stellar/freighter-api';\r\n\r\nimport { WalletType } from '../types';\r\nimport type {\r\n WalletAdapter,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nexport class FreighterAdapter implements WalletAdapter {\r\n readonly type = WalletType.FREIGHTER;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n try {\r\n return await isConnected();\r\n } catch (error) {\r\n console.error('Error checking Freighter availability:', error);\r\n return false;\r\n }\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n try {\r\n // Check if Freighter is installed\r\n const connected = await isConnected();\r\n if (!connected) {\r\n throw new Error('Freighter wallet is not installed');\r\n }\r\n\r\n // Check if already allowed\r\n const allowed = await isAllowed();\r\n \r\n if (!allowed) {\r\n // Request permission\r\n await setAllowed();\r\n }\r\n\r\n // Get user info\r\n const userInfo = await getUserInfo();\r\n \r\n if (!userInfo || !userInfo.publicKey) {\r\n throw new Error('Failed to get user information from Freighter');\r\n }\r\n\r\n return {\r\n address: userInfo.publicKey,\r\n publicKey: userInfo.publicKey,\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to Freighter:', error);\r\n throw new Error(`Failed to connect to Freighter: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n // Freighter doesn't have a disconnect method in the API\r\n // The user needs to disconnect manually from the extension\r\n // We just clear local state\r\n console.log('Freighter disconnect requested - user must disconnect from extension');\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n try {\r\n const allowed = await isAllowed();\r\n if (!allowed) {\r\n return null;\r\n }\r\n\r\n const userInfo = await getUserInfo();\r\n return userInfo?.publicKey || null;\r\n } catch (error) {\r\n console.error('Error getting public key:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n try {\r\n const network = await getNetwork();\r\n return network;\r\n } catch (error) {\r\n console.error('Error getting network:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n try {\r\n const result = await signTransaction(xdr, {\r\n network: options?.network,\r\n networkPassphrase: options?.networkPassphrase,\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedTxXdr: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing transaction:', error);\r\n throw new Error(`Failed to sign transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n try {\r\n const result = await signAuthEntry(entryXdr, {\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedAuthEntry: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing auth entry:', error);\r\n throw new Error(`Failed to sign auth entry: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n}","export function openAlbedoPopup(url: string): Window {\r\n const popup = window.open(\r\n url,\r\n \"albedo\",\r\n \"width=420,height=720,resizable=yes,scrollbars=yes\"\r\n );\r\n\r\n if (!popup) {\r\n throw new Error(\"Failed to open Albedo popup (blocked by browser)\");\r\n }\r\n\r\n return popup;\r\n}\r\n\r\nexport function waitForAlbedoResult(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n const parseResult = () => {\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL (important UX polish)\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n resolve(result);\r\n };\r\n\r\n parseResult();\r\n window.addEventListener(\"popstate\", parseResult);\r\n });\r\n}\r\n\r\nexport function handleAlbedoCallback(): Record<string, string> | null {\r\n if (typeof window === \"undefined\") return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return null;\r\n }\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n return result;\r\n}\r\n\r\nexport function waitForAlbedoPopup(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n function handler(event: MessageEvent) {\r\n if (\r\n event.origin !== window.location.origin ||\r\n event.data?.type !== \"ALBEDO_RESULT\"\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n window.removeEventListener(\"message\", handler);\r\n resolve(event.data.payload);\r\n }\r\n\r\n window.addEventListener(\"message\", handler);\r\n });\r\n}\r\n","import type {\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from \"../types\";\r\nimport { WalletType } from \"../types\";\r\nimport {\r\n waitForAlbedoPopup,\r\n waitForAlbedoResult,\r\n} from \"../utils/albedoCallback\";\r\nimport { openAlbedoPopup } from \"../utils/albedoCallback\";\r\n\r\nexport class AlbedoAdapter {\r\n readonly type = WalletType.ALBEDO;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"public-key\");\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\r\n \"callback\",\r\n `${window.location.origin}/albedo-callback`\r\n );\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n openAlbedoPopup(url.toString());\r\n\r\n const result = await waitForAlbedoPopup();\r\n\r\n if (!result.pubkey) {\r\n throw new Error(\"Albedo connection rejected\");\r\n }\r\n\r\n return {\r\n address: result.pubkey,\r\n publicKey: result.pubkey,\r\n };\r\n }\r\n\r\n async disconnect() {}\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n return null;\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error(\"Albedo does not expose network\");\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"tx\");\r\n url.searchParams.set(\"xdr\", xdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_envelope_xdr) {\r\n throw new Error(\"Albedo signing rejected\");\r\n }\r\n\r\n return { signedTxXdr: result.signed_envelope_xdr };\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"sign-auth-entry\");\r\n url.searchParams.set(\"xdr\", entryXdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_xdr) {\r\n throw new Error(\"Albedo auth entry rejected\");\r\n }\r\n\r\n return { signedAuthEntry: result.signed_xdr };\r\n }\r\n}\r\n","import type { AccountBalance, NetworkType } from '../types';\r\n\r\ninterface HorizonBalanceRecord {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\ninterface HorizonAccountResponse {\r\n id: string;\r\n account_id: string;\r\n sequence: string;\r\n balances: HorizonBalanceRecord[];\r\n}\r\n\r\nconst HORIZON_URLS: Record<NetworkType, string> = {\r\n PUBLIC: 'https://horizon.stellar.org',\r\n TESTNET: 'https://horizon-testnet.stellar.org',\r\n FUTURENET: 'https://horizon-futurenet.stellar.org',\r\n STANDALONE: 'http://localhost:8000',\r\n};\r\n\r\n/**\r\n * Fetches account balances from Horizon\r\n */\r\nexport async function fetchAccountBalances(\r\n publicKey: string,\r\n network: NetworkType\r\n): Promise<AccountBalance[]> {\r\n const horizonUrl = HORIZON_URLS[network];\r\n \r\n try {\r\n const response = await fetch(`${horizonUrl}/accounts/${publicKey}`);\r\n \r\n if (!response.ok) {\r\n if (response.status === 404) {\r\n throw new Error('Account not found. Make sure the account is funded.');\r\n }\r\n throw new Error(`Failed to fetch account: ${response.statusText}`);\r\n }\r\n \r\n const data: HorizonAccountResponse = await response.json();\r\n return data.balances as AccountBalance[];\r\n } catch (error) {\r\n console.error('Error fetching balances:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the native (XLM) balance from balances array\r\n */\r\nexport function getNativeBalance(balances: AccountBalance[]): string {\r\n const nativeBalance = balances.find(b => b.asset_type === 'native');\r\n return nativeBalance?.balance || '0';\r\n}\r\n\r\n/**\r\n * Formats balance for display\r\n */\r\nexport function formatBalance(balance: string, decimals: number = 7): string {\r\n const num = parseFloat(balance);\r\n if (isNaN(num)) return '0';\r\n \r\n // Format with specified decimals, remove trailing zeros\r\n return num.toFixed(decimals).replace(/\\.?0+$/, '');\r\n}\r\n\r\n/**\r\n * Gets balance for a specific asset\r\n */\r\nexport function getAssetBalance(\r\n balances: AccountBalance[],\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): string {\r\n if (!assetCode) {\r\n return getNativeBalance(balances);\r\n }\r\n \r\n const asset = balances.find(\r\n b => b.asset_code === assetCode && \r\n (!assetIssuer || b.asset_issuer === assetIssuer)\r\n );\r\n \r\n return asset?.balance || '0';\r\n}\r\n\r\n/**\r\n * Checks if account has sufficient balance for a transaction\r\n */\r\nexport function hasSufficientBalance(\r\n balances: AccountBalance[],\r\n requiredAmount: string,\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): boolean {\r\n const balance = getAssetBalance(balances, assetCode, assetIssuer);\r\n return parseFloat(balance) >= parseFloat(requiredAmount);\r\n}\r\n\r\n/**\r\n * Gets total account value in XLM (simplified - just returns native balance)\r\n * For real implementation, you'd need asset prices\r\n */\r\nexport function getTotalValueXLM(balances: AccountBalance[]): string {\r\n return getNativeBalance(balances);\r\n}\r\n\r\n/**\r\n * Groups balances by type (native, credit_alphanum4, credit_alphanum12, liquidity_pool_shares)\r\n */\r\nexport function groupBalancesByType(balances: AccountBalance[]) {\r\n return balances.reduce((acc, balance) => {\r\n const type = balance.asset_type;\r\n if (!acc[type]) {\r\n acc[type] = [];\r\n }\r\n acc[type].push(balance);\r\n return acc;\r\n }, {} as Record<string, AccountBalance[]>);\r\n}","\"use client\";\r\n\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n PropsWithChildren,\r\n} from \"react\";\r\n\r\nimport {\r\n WalletType,\r\n NetworkType,\r\n} from \"../types\";\r\n\r\nimport type {\r\n WalletContextValue,\r\n WalletAccount,\r\n StellarWalletKitConfig,\r\n WalletInfo,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n WalletAdapter,\r\n} from \"../types\";\r\n\r\nimport { FreighterAdapter } from \"../adapters/FreighterAdapter\";\r\nimport { AlbedoAdapter } from \"../adapters/AlbedoAdapter\";\r\nimport { fetchAccountBalances } from \"../utils/balanceUtils\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Constants */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst STORAGE_KEY = \"stellar_wallet_kit\";\r\nconst isBrowser = typeof window !== \"undefined\";\r\n\r\nconst DEFAULT_SUPPORTS = {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Context */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst WalletContext = createContext<WalletContextValue | undefined>(undefined);\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Wallet metadata */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst walletMetadata: Record<WalletType, Omit<WalletInfo, \"installed\">> = {\r\n [WalletType.FREIGHTER]: {\r\n id: WalletType.FREIGHTER,\r\n name: \"Freighter\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/freighter.svg\",\r\n description: \"Freighter browser extension wallet\",\r\n downloadUrl:\r\n \"https://chrome.google.com/webstore/detail/freighter/bcacfldlkkdogcmkkibnjlakofdplcbk\",\r\n kind: \"extension\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: true,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.ALBEDO]: {\r\n id: WalletType.ALBEDO,\r\n name: \"Albedo\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/albedo.svg\",\r\n description: \"Web-based Stellar wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.WALLETCONNECT]: {\r\n id: WalletType.WALLETCONNECT,\r\n name: \"WalletConnect\",\r\n icon: \"https://walletconnect.com/walletconnect-logo.png\",\r\n description: \"Connect mobile wallets via WalletConnect\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n\r\n [WalletType.LOBSTR]: {\r\n id: WalletType.LOBSTR,\r\n name: \"LOBSTR\",\r\n icon: \"https://lobstr.co/favicon.ico\",\r\n description: \"LOBSTR mobile wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Storage helpers */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface StorageData {\r\n selectedWallet: WalletType | null;\r\n autoConnect: boolean;\r\n}\r\n\r\nfunction getStorageData(): StorageData {\r\n if (!isBrowser) {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n return raw\r\n ? JSON.parse(raw)\r\n : { selectedWallet: null, autoConnect: false };\r\n } catch {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n}\r\n\r\nfunction setStorageData(data: Partial<StorageData>) {\r\n if (!isBrowser) return;\r\n\r\n const existing = getStorageData();\r\n localStorage.setItem(\r\n STORAGE_KEY,\r\n JSON.stringify({ ...existing, ...data })\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Provider */\r\n/* ------------------------------------------------------------------ */\r\n\r\ntype WalletProviderProps = PropsWithChildren<{\r\n config?: StellarWalletKitConfig;\r\n}>;\r\n\r\nexport function WalletProvider({ config = {}, children }: WalletProviderProps) {\r\n const [account, setAccount] = useState<WalletAccount | null>(null);\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [connectingWallet, setConnectingWallet] =\r\n useState<WalletType | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [network, setNetwork] = useState<NetworkType>(\r\n config.network || NetworkType.TESTNET\r\n );\r\n const [selectedWallet, setSelectedWallet] =\r\n useState<WalletType | null>(null);\r\n const [availableWallets, setAvailableWallets] = useState<WalletInfo[]>([]);\r\n const [isLoadingBalances, setIsLoadingBalances] = useState(false);\r\n\r\n const isConnected = !!account;\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Wallet adapters */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const walletAdapters = useMemo<\r\n Partial<Record<WalletType, WalletAdapter>>\r\n >(\r\n () => ({\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n ...(config.adapters ?? {}),\r\n }),\r\n [config.adapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Detect wallets */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser) return;\r\n\r\n (async () => {\r\n const wallets: WalletInfo[] = [];\r\n\r\n const entries = Object.entries(walletAdapters) as [\r\n WalletType,\r\n WalletAdapter | undefined\r\n ][];\r\n\r\n for (const [walletType, adapter] of entries) {\r\n if (!adapter) continue;\r\n\r\n const meta = walletMetadata[walletType];\r\n\r\n let installed = true;\r\n if (meta.kind === \"extension\") {\r\n installed = await adapter.isAvailable();\r\n }\r\n\r\n wallets.push({ ...meta, installed });\r\n }\r\n\r\n setAvailableWallets(wallets);\r\n })();\r\n }, [walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Auto-connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser || !config.autoConnect) return;\r\n\r\n const { selectedWallet } = getStorageData();\r\n if (selectedWallet) {\r\n connect(selectedWallet).catch(() => {});\r\n }\r\n }, [config.autoConnect]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Balances */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const refreshBalances = useCallback(async () => {\r\n if (!account?.publicKey) return;\r\n\r\n setIsLoadingBalances(true);\r\n try {\r\n const balances = await fetchAccountBalances(\r\n account.publicKey,\r\n network\r\n );\r\n setAccount((prev) => (prev ? { ...prev, balances } : null));\r\n } finally {\r\n setIsLoadingBalances(false);\r\n }\r\n }, [account?.publicKey, network]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const connect = useCallback(\r\n async (walletType?: WalletType) => {\r\n const type =\r\n walletType || config.defaultWallet || WalletType.FREIGHTER;\r\n\r\n setIsConnecting(true);\r\n setConnectingWallet(type);\r\n setError(null);\r\n\r\n try {\r\n const adapter = walletAdapters[type];\r\n if (!adapter) {\r\n throw new Error(`Wallet adapter not configured: ${type}`);\r\n }\r\n\r\n const meta = walletMetadata[type];\r\n\r\n if (meta.kind === \"extension\") {\r\n const ok = await adapter.isAvailable();\r\n if (!ok) {\r\n throw new Error(`${meta.name} is not installed`);\r\n }\r\n }\r\n\r\n const res = await adapter.connect();\r\n\r\n setAccount({\r\n address: res.address,\r\n publicKey: res.publicKey,\r\n displayName: `${res.address.slice(0, 4)}…${res.address.slice(-4)}`,\r\n });\r\n\r\n setSelectedWallet(type);\r\n setStorageData({ selectedWallet: type, autoConnect: true });\r\n\r\n await refreshBalances();\r\n } catch (e) {\r\n setError(e as Error);\r\n throw e;\r\n } finally {\r\n setIsConnecting(false);\r\n setConnectingWallet(null);\r\n }\r\n },\r\n [config.defaultWallet, refreshBalances, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Disconnect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const disconnect = useCallback(async () => {\r\n if (selectedWallet) {\r\n await walletAdapters[selectedWallet]?.disconnect();\r\n }\r\n\r\n setAccount(null);\r\n setSelectedWallet(null);\r\n setError(null);\r\n setStorageData({ selectedWallet: null, autoConnect: false });\r\n }, [selectedWallet, walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Signing */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const signTransaction = useCallback(\r\n (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signTransaction(xdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n const signAuthEntry = useCallback(\r\n (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signAuthEntry(entryXdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Network */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const switchNetwork = useCallback(\r\n async (n: NetworkType) => {\r\n setNetwork(n);\r\n await refreshBalances();\r\n },\r\n [refreshBalances]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Capabilities */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const supports = useMemo(() => {\r\n if (!selectedWallet) return DEFAULT_SUPPORTS;\r\n\r\n const caps = walletMetadata[selectedWallet].capabilities;\r\n return {\r\n silentReconnect: caps?.silentReconnect ?? false,\r\n networkDetection: caps?.networkDetection ?? false,\r\n authEntrySigning: caps?.authEntrySigning ?? false,\r\n };\r\n }, [selectedWallet]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Context value */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const value = useMemo<WalletContextValue>(\r\n () => ({\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n }),\r\n [\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n ]\r\n );\r\n\r\n return (\r\n <WalletContext.Provider value={value}>\r\n {children}\r\n </WalletContext.Provider>\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Hook */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function useWallet(): WalletContextValue {\r\n const ctx = useContext(WalletContext);\r\n if (!ctx) {\r\n throw new Error(\"useWallet must be used within a WalletProvider\");\r\n }\r\n return ctx;\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport type { ModalProps } from '../types';\r\n\r\nexport function WalletModal({\r\n isOpen,\r\n onClose,\r\n wallets,\r\n onSelectWallet,\r\n theme,\r\n appName = 'Your App',\r\n appIcon,\r\n}: ModalProps) {\r\n useEffect(() => {\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'auto';\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const isDark =\r\n theme?.mode === 'dark' ||\r\n (theme?.mode === 'auto' &&\r\n window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const bg = theme?.modalBackground || (isDark ? '#0f0f11' : '#ffffff');\r\n const text = theme?.textColor || (isDark ? '#ffffff' : '#0a0a0a');\r\n const muted = isDark ? '#8b8b8b' : '#6b6b6b';\r\n const border = isDark ? '#1f1f23' : '#eaeaea';\r\n const hover = theme?.buttonHoverColor || (isDark ? '#1a1a1f' : '#f6f6f6');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n .swk-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background: rgba(0,0,0,0.55);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n }\r\n\r\n .swk-modal {\r\n width: 420px;\r\n max-width: 92vw;\r\n background: ${bg};\r\n border-radius: 20px;\r\n padding: 28px;\r\n box-shadow: 0 20px 60px rgba(0,0,0,0.4);\r\n font-family: ${theme?.fontFamily || 'Inter, system-ui, sans-serif'};\r\n }\r\n\r\n .swk-wallet {\r\n display: flex;\r\n align-items: center;\r\n gap: 14px;\r\n padding: 14px 16px;\r\n border-radius: 14px;\r\n cursor: pointer;\r\n transition: background 0.15s ease;\r\n }\r\n\r\n .swk-wallet:hover {\r\n background: ${hover};\r\n }\r\n\r\n .swk-pill {\r\n font-size: 12px;\r\n padding: 4px 10px;\r\n border-radius: 999px;\r\n background: ${theme?.primaryColor || '#6c5ce7'};\r\n color: white;\r\n font-weight: 500;\r\n }\r\n `}</style>\r\n\r\n <div className=\"swk-overlay\" onClick={onClose}>\r\n <div className=\"swk-modal\" onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={{ marginBottom: 24 }}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 12,\r\n marginBottom: 8,\r\n }}\r\n >\r\n {appIcon && (\r\n <img\r\n src={appIcon}\r\n alt=\"\"\r\n style={{ width: 32, height: 32, borderRadius: 8 }}\r\n />\r\n )}\r\n <span style={{ color: muted, fontSize: 14 }}>\r\n Log in or sign up\r\n </span>\r\n </div>\r\n\r\n <h2\r\n style={{\r\n margin: 0,\r\n fontSize: 22,\r\n fontWeight: 600,\r\n color: text,\r\n }}\r\n >\r\n {appName}\r\n </h2>\r\n </div>\r\n\r\n {/* Wallet list */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\r\n {wallets.map((wallet, i) => (\r\n <div\r\n key={wallet.id}\r\n className=\"swk-wallet\"\r\n onClick={() => onSelectWallet(wallet.id)}\r\n >\r\n <img\r\n src={wallet.icon}\r\n alt={wallet.name}\r\n style={{ width: 36, height: 36, borderRadius: 10 }}\r\n />\r\n\r\n <div style={{ flex: 1 }}>\r\n <div\r\n style={{\r\n fontSize: 15,\r\n fontWeight: 500,\r\n color: text,\r\n }}\r\n >\r\n {wallet.name}\r\n </div>\r\n\r\n {wallet.description && (\r\n <div\r\n style={{\r\n fontSize: 13,\r\n color: muted,\r\n marginTop: 2,\r\n }}\r\n >\r\n {wallet.description}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {i === 0 && <div className=\"swk-pill\">Recent</div>}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div\r\n style={{\r\n marginTop: 24,\r\n paddingTop: 16,\r\n borderTop: `1px solid ${border}`,\r\n textAlign: 'center',\r\n fontSize: 13,\r\n color: muted,\r\n }}\r\n >\r\n Powered by Stellar Wallet Kit\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useWallet } from '../context/WalletContext';\r\nimport { WalletModal } from './WalletModal';\r\nimport type { WalletTheme } from '../types';\r\nimport { getNativeBalance, formatBalance } from '../utils/balanceUtils';\r\n\r\ninterface ConnectButtonProps {\r\n label?: string;\r\n theme?: WalletTheme;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n showBalance?: boolean;\r\n onConnect?: () => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\nexport function ConnectButton({\r\n label = 'Connect Wallet',\r\n theme,\r\n className,\r\n style,\r\n showBalance = false,\r\n onConnect,\r\n onDisconnect,\r\n}: ConnectButtonProps) {\r\n const {\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connect,\r\n disconnect,\r\n availableWallets,\r\n selectedWallet,\r\n refreshBalances,\r\n isLoadingBalances,\r\n } = useWallet();\r\n\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [showDropdown, setShowDropdown] = useState(false);\r\n\r\n const themeMode = theme?.mode || 'light';\r\n const isDark = themeMode === 'dark' || (themeMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const defaultButtonStyles: React.CSSProperties = {\r\n padding: '12px 24px',\r\n borderRadius: theme?.borderRadius || '12px',\r\n border: 'none',\r\n fontSize: '15px',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n fontFamily: theme?.fontFamily || '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n ...style,\r\n };\r\n\r\n const connectButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: theme?.primaryColor || '#8b5cf6',\r\n color: '#ffffff',\r\n };\r\n\r\n const accountButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: isDark ? '#252525' : '#f5f5f5',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n };\r\n\r\n const dropdownStyles: React.CSSProperties = {\r\n position: 'absolute',\r\n top: 'calc(100% + 8px)',\r\n right: 0,\r\n backgroundColor: theme?.modalBackground || (isDark ? '#1a1a1a' : '#ffffff'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n borderRadius: theme?.borderRadius || '12px',\r\n padding: '8px',\r\n minWidth: '200px',\r\n boxShadow: isDark ? '0 4px 16px rgba(0, 0, 0, 0.4)' : '0 4px 16px rgba(0, 0, 0, 0.1)',\r\n zIndex: 1000,\r\n };\r\n\r\n const dropdownItemStyles: React.CSSProperties = {\r\n padding: '12px 16px',\r\n border: 'none',\r\n background: 'none',\r\n cursor: 'pointer',\r\n width: '100%',\r\n textAlign: 'left',\r\n fontSize: '14px',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n borderRadius: '8px',\r\n transition: 'background-color 0.2s',\r\n fontFamily: 'inherit',\r\n };\r\n\r\n const handleConnect = async (walletType: any) => {\r\n try {\r\n await connect(walletType);\r\n setIsModalOpen(false);\r\n onConnect?.();\r\n } catch (error) {\r\n console.error('Connection error:', error);\r\n }\r\n };\r\n\r\n const handleDisconnect = async () => {\r\n try {\r\n await disconnect();\r\n setShowDropdown(false);\r\n onDisconnect?.();\r\n } catch (error) {\r\n console.error('Disconnect error:', error);\r\n }\r\n };\r\n\r\n const copyAddress = () => {\r\n if (account?.address) {\r\n navigator.clipboard.writeText(account.address);\r\n // You could add a toast notification here\r\n setShowDropdown(false);\r\n }\r\n };\r\n\r\n if (isConnecting) {\r\n return (\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n disabled\r\n >\r\n Connecting...\r\n </button>\r\n );\r\n }\r\n\r\n if (!isConnected || !account) {\r\n return (\r\n <>\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n onClick={() => setIsModalOpen(true)}\r\n >\r\n {label}\r\n </button>\r\n <WalletModal\r\n isOpen={isModalOpen}\r\n onClose={() => setIsModalOpen(false)}\r\n wallets={availableWallets}\r\n onSelectWallet={handleConnect}\r\n theme={theme}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n const walletIcon = availableWallets.find(w => w.id === selectedWallet)?.icon;\r\n const nativeBalance = account?.balances ? getNativeBalance(account.balances) : null;\r\n const formattedBalance = nativeBalance ? formatBalance(nativeBalance, 2) : null;\r\n\r\n return (\r\n <>\r\n <div style={{ position: 'relative' }}>\r\n <button\r\n className={className}\r\n style={accountButtonStyles}\r\n onClick={() => setShowDropdown(!showDropdown)}\r\n >\r\n {walletIcon && (\r\n <img\r\n src={walletIcon}\r\n alt=\"Wallet\"\r\n style={{ width: '20px', height: '20px', borderRadius: '4px' }}\r\n />\r\n )}\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '2px' }}>\r\n <span>{account.displayName}</span>\r\n {showBalance && formattedBalance && (\r\n <span style={{ fontSize: '12px', opacity: 0.7, fontWeight: 400 }}>\r\n {isLoadingBalances ? '...' : `${formattedBalance} XLM`}\r\n </span>\r\n )}\r\n </div>\r\n <span style={{ fontSize: '12px', opacity: 0.7 }}>▼</span>\r\n </button>\r\n\r\n {showDropdown && (\r\n <>\r\n <div\r\n style={{\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n zIndex: 999,\r\n }}\r\n onClick={() => setShowDropdown(false)}\r\n />\r\n <div style={dropdownStyles}>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={() => {\r\n refreshBalances();\r\n setShowDropdown(false);\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🔄 Refresh Balances\r\n </button>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={copyAddress}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 📋 Copy Address\r\n </button>\r\n <button\r\n style={{\r\n ...dropdownItemStyles,\r\n color: '#ef4444',\r\n }}\r\n onClick={handleDisconnect}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🚪 Disconnect\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </>\r\n );\r\n}","import { UniversalConnector } from '@reown/appkit-universal-connector';\r\nimport type { CustomCaipNetwork } from '@reown/appkit-common';\r\n\r\n/**\r\n * Stellar Testnet CAIP network\r\n * AppKit does not yet natively support Stellar,\r\n * so we widen the type intentionally.\r\n */\r\nconst stellarTestnet = {\r\n id: 'testnet',\r\n chainNamespace: 'stellar',\r\n caipNetworkId: 'stellar:testnet',\r\n name: 'Stellar Testnet',\r\n nativeCurrency: {\r\n name: 'XLM',\r\n symbol: 'XLM',\r\n decimals: 7,\r\n },\r\n rpcUrls: {\r\n default: {\r\n http: ['https://horizon-testnet.stellar.org'],\r\n },\r\n },\r\n} as unknown as CustomCaipNetwork;\r\n\r\nexport async function getUniversalConnector(projectId: string) {\r\n return UniversalConnector.init({\r\n projectId,\r\n metadata: {\r\n name: 'Stellar Wallet Kit',\r\n description: 'Connect Stellar wallets',\r\n url: 'https://stellar.org',\r\n icons: [],\r\n },\r\n networks: [\r\n {\r\n namespace: 'stellar',\r\n chains: [stellarTestnet],\r\n methods: ['stellar_signTransaction'],\r\n events: [],\r\n },\r\n ],\r\n });\r\n}\r\n","import {\r\n WalletAdapter,\r\n WalletType,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryResponse,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nimport { getUniversalConnector } from '../utils/getUniversalConnector';\r\n\r\nexport class WalletConnectAdapter implements WalletAdapter {\r\n readonly type = WalletType.WALLETCONNECT;\r\n\r\n private projectId: string;\r\n private connector: any | null = null;\r\n private session: any | null = null;\r\n\r\n constructor(projectId: string) {\r\n if (!projectId) {\r\n throw new Error(\r\n 'WalletConnectAdapter requires a WalletConnect Project ID'\r\n );\r\n }\r\n this.projectId = projectId;\r\n }\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== 'undefined';\r\n }\r\n\r\n private async getConnector() {\r\n if (!this.connector) {\r\n this.connector = await getUniversalConnector(this.projectId);\r\n }\r\n return this.connector;\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const connector = await this.getConnector();\r\n const { session } = await connector.connect();\r\n this.session = session;\r\n\r\n // stellar:testnet:GXXXX...\r\n const account =\r\n session.namespaces.stellar.accounts[0];\r\n const publicKey = account.split(':')[2];\r\n\r\n return {\r\n address: publicKey,\r\n publicKey,\r\n };\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n if (this.connector) {\r\n await this.connector.disconnect();\r\n }\r\n this.session = null;\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n if (!this.session) return null;\r\n\r\n const account =\r\n this.session.namespaces.stellar.accounts[0];\r\n return account.split(':')[2];\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error('Network detection not supported via WalletConnect');\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n if (!this.connector || !this.session) {\r\n throw new Error('No active WalletConnect session');\r\n }\r\n\r\n const result = await this.connector.request({\r\n method: 'stellar_signTransaction',\r\n params: { xdr },\r\n });\r\n\r\n return {\r\n signedTxXdr: result as string,\r\n };\r\n }\r\n\r\n async signAuthEntry(\r\n _entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n throw new Error(\r\n 'Auth entry signing is not supported via WalletConnect'\r\n );\r\n }\r\n}\r\n","import { WalletType, WalletAdapter } from '../types';\r\nimport { FreighterAdapter } from '../adapters/FreighterAdapter';\r\nimport { AlbedoAdapter } from '../adapters/AlbedoAdapter';\r\nimport { WalletConnectAdapter } from '../adapters/WalletConnectAdapter';\r\n\r\nexport function createWalletAdapters(config: {\r\n walletConnectProjectId?: string;\r\n}): Partial<Record<WalletType, WalletAdapter>> {\r\n return {\r\n // Extension wallet\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n\r\n // Web wallet\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n\r\n // WalletConnect (mobile wallets like Lobstr)\r\n ...(config.walletConnectProjectId\r\n ? {\r\n [WalletType.WALLETCONNECT]: new WalletConnectAdapter(\r\n config.walletConnectProjectId\r\n ),\r\n }\r\n : {}),\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/index.ts","../src/adapters/FreighterAdapter.ts","../src/utils/albedoCallback.ts","../src/adapters/AlbedoAdapter.ts","../src/utils/balanceUtils.ts","../src/context/WalletContext.tsx","../src/components/WalletModal.tsx","../src/components/ConnectButton.tsx","../src/utils/getUniversalConnector.ts","../src/adapters/WalletConnectAdapter.ts","../src/wallets/createWalletAdapters.ts"],"names":["WalletType","NetworkType","isConnected","selectedWallet","signTransaction","signAuthEntry","React","useEffect","useState"],"mappings":"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","file":"index.mjs","sourcesContent":["export enum WalletType {\r\n FREIGHTER = \"freighter\",\r\n ALBEDO = \"albedo\",\r\n WALLETCONNECT = 'walletconnect',\r\n LOBSTR = 'lobstr', // UI alias\r\n // XBULL = 'xbull',\r\n}\r\n\r\nexport enum NetworkType {\r\n PUBLIC = \"PUBLIC\",\r\n TESTNET = \"TESTNET\",\r\n FUTURENET = \"FUTURENET\",\r\n STANDALONE = \"STANDALONE\",\r\n}\r\n\r\nexport interface WalletAccount {\r\n address: string;\r\n publicKey: string;\r\n displayName?: string;\r\n balances?: AccountBalance[];\r\n}\r\n\r\nexport interface AccountBalance {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\nexport interface WalletInfo {\r\n id: WalletType;\r\n name: string;\r\n icon: string;\r\n description?: string;\r\n\r\n /** true = ready to use (installed OR web wallet) */\r\n installed: boolean;\r\n\r\n /** Optional install link (extensions only) */\r\n downloadUrl?: string;\r\n\r\n /** NEW: wallet delivery model */\r\n kind?: WalletKind;\r\n\r\n /** NEW: capability flags (future-proof) */\r\n capabilities?: {\r\n silentReconnect?: boolean;\r\n networkDetection?: boolean;\r\n authEntrySigning?: boolean;\r\n };\r\n}\r\n\r\nexport interface ConnectWalletResponse {\r\n address: string;\r\n publicKey: string;\r\n}\r\n\r\nexport interface SignTransactionResponse {\r\n signedTxXdr: string;\r\n}\r\n\r\nexport interface SignAuthEntryResponse {\r\n signedAuthEntry: string;\r\n}\r\n\r\nexport interface WalletAdapter {\r\n type: WalletType;\r\n isAvailable(): Promise<boolean>;\r\n connect(): Promise<ConnectWalletResponse>;\r\n disconnect(): Promise<void>;\r\n getPublicKey(): Promise<string | null>;\r\n getNetwork(): Promise<string>;\r\n signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse>;\r\n signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse>;\r\n}\r\n\r\nexport interface SignTransactionOptions {\r\n network?: string;\r\n networkPassphrase?: string;\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface SignAuthEntryOptions {\r\n accountToSign?: string;\r\n}\r\n\r\nexport interface StellarWalletKitConfig {\r\n network?: NetworkType;\r\n defaultWallet?: WalletType;\r\n autoConnect?: boolean;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n\r\n adapters?: Partial<Record<WalletType, WalletAdapter>>;\r\n}\r\n\r\nexport interface WalletTheme {\r\n mode?: \"light\" | \"dark\" | \"auto\";\r\n primaryColor?: string;\r\n backgroundColor?: string;\r\n borderRadius?: string;\r\n fontFamily?: string;\r\n overlayBackground?: string;\r\n modalBackground?: string;\r\n textColor?: string;\r\n buttonHoverColor?: string;\r\n}\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n wallets: WalletInfo[];\r\n onSelectWallet: (walletType: WalletType) => void;\r\n theme?: WalletTheme;\r\n appName?: string;\r\n appIcon?: string;\r\n}\r\n\r\nexport interface WalletContextValue {\r\n account: WalletAccount | null;\r\n isConnected: boolean;\r\n isConnecting: boolean;\r\n error: Error | null;\r\n network: NetworkType;\r\n selectedWallet: WalletType | null;\r\n connect: (walletType?: WalletType) => Promise<void>;\r\n disconnect: () => Promise<void>;\r\n signTransaction: (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ) => Promise<SignTransactionResponse>;\r\n signAuthEntry: (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ) => Promise<SignAuthEntryResponse>;\r\n switchNetwork: (network: NetworkType) => Promise<void>;\r\n availableWallets: WalletInfo[];\r\n refreshBalances: () => Promise<void>;\r\n isLoadingBalances: boolean;\r\n supports: {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n };\r\n connectingWallet: WalletType | null;\r\n}\r\n\r\nexport type WalletKind = \"extension\" | \"web\";\r\n\r\nexport interface WalletCapabilities {\r\n silentReconnect: boolean;\r\n networkDetection: boolean;\r\n authEntrySigning: boolean;\r\n}\r\n","import {\r\n isConnected,\r\n isAllowed,\r\n setAllowed,\r\n getUserInfo,\r\n signTransaction,\r\n signAuthEntry,\r\n getNetwork,\r\n} from '@stellar/freighter-api';\r\n\r\nimport { WalletType } from '../types';\r\nimport type {\r\n WalletAdapter,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nexport class FreighterAdapter implements WalletAdapter {\r\n readonly type = WalletType.FREIGHTER;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n try {\r\n return await isConnected();\r\n } catch (error) {\r\n console.error('Error checking Freighter availability:', error);\r\n return false;\r\n }\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n try {\r\n // Check if Freighter is installed\r\n const connected = await isConnected();\r\n if (!connected) {\r\n throw new Error('Freighter wallet is not installed');\r\n }\r\n\r\n // Check if already allowed\r\n const allowed = await isAllowed();\r\n \r\n if (!allowed) {\r\n // Request permission\r\n await setAllowed();\r\n }\r\n\r\n // Get user info\r\n const userInfo = await getUserInfo();\r\n \r\n if (!userInfo || !userInfo.publicKey) {\r\n throw new Error('Failed to get user information from Freighter');\r\n }\r\n\r\n return {\r\n address: userInfo.publicKey,\r\n publicKey: userInfo.publicKey,\r\n };\r\n } catch (error) {\r\n console.error('Error connecting to Freighter:', error);\r\n throw new Error(`Failed to connect to Freighter: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n // Freighter doesn't have a disconnect method in the API\r\n // The user needs to disconnect manually from the extension\r\n // We just clear local state\r\n console.log('Freighter disconnect requested - user must disconnect from extension');\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n try {\r\n const allowed = await isAllowed();\r\n if (!allowed) {\r\n return null;\r\n }\r\n\r\n const userInfo = await getUserInfo();\r\n return userInfo?.publicKey || null;\r\n } catch (error) {\r\n console.error('Error getting public key:', error);\r\n return null;\r\n }\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n try {\r\n const network = await getNetwork();\r\n return network;\r\n } catch (error) {\r\n console.error('Error getting network:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n try {\r\n const result = await signTransaction(xdr, {\r\n network: options?.network,\r\n networkPassphrase: options?.networkPassphrase,\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedTxXdr: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing transaction:', error);\r\n throw new Error(`Failed to sign transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n try {\r\n const result = await signAuthEntry(entryXdr, {\r\n accountToSign: options?.accountToSign,\r\n });\r\n\r\n if (!result || typeof result !== 'string') {\r\n throw new Error('Invalid response from Freighter');\r\n }\r\n\r\n return {\r\n signedAuthEntry: result,\r\n };\r\n } catch (error) {\r\n console.error('Error signing auth entry:', error);\r\n throw new Error(`Failed to sign auth entry: ${error instanceof Error ? error.message : 'Unknown error'}`);\r\n }\r\n }\r\n}","export function openAlbedoPopup(url: string): Window {\r\n const popup = window.open(\r\n url,\r\n \"albedo\",\r\n \"width=420,height=720,resizable=yes,scrollbars=yes\"\r\n );\r\n\r\n if (!popup) {\r\n throw new Error(\"Failed to open Albedo popup (blocked by browser)\");\r\n }\r\n\r\n return popup;\r\n}\r\n\r\nexport function waitForAlbedoResult(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n const parseResult = () => {\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL (important UX polish)\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n resolve(result);\r\n };\r\n\r\n parseResult();\r\n window.addEventListener(\"popstate\", parseResult);\r\n });\r\n}\r\n\r\nexport function handleAlbedoCallback(): Record<string, string> | null {\r\n if (typeof window === \"undefined\") return null;\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n\r\n if (\r\n !params.has(\"pubkey\") &&\r\n !params.has(\"signed_envelope_xdr\") &&\r\n !params.has(\"signed_xdr\")\r\n ) {\r\n return null;\r\n }\r\n\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n\r\n // Clean URL\r\n window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n return result;\r\n}\r\n\r\nexport function waitForAlbedoPopup(): Promise<Record<string, string>> {\r\n return new Promise((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error(\"Albedo response timeout\"));\r\n }, 2 * 60 * 1000);\r\n\r\n function handler(event: MessageEvent) {\r\n if (\r\n event.origin !== window.location.origin ||\r\n event.data?.type !== \"ALBEDO_RESULT\"\r\n ) {\r\n return;\r\n }\r\n\r\n clearTimeout(timeout);\r\n window.removeEventListener(\"message\", handler);\r\n resolve(event.data.payload);\r\n }\r\n\r\n window.addEventListener(\"message\", handler);\r\n });\r\n}\r\n","import type {\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n} from \"../types\";\r\nimport { WalletType } from \"../types\";\r\nimport {\r\n waitForAlbedoPopup,\r\n waitForAlbedoResult,\r\n} from \"../utils/albedoCallback\";\r\nimport { openAlbedoPopup } from \"../utils/albedoCallback\";\r\n\r\nexport class AlbedoAdapter {\r\n readonly type = WalletType.ALBEDO;\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"public-key\");\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\r\n \"callback\",\r\n `${window.location.origin}/albedo-callback`\r\n );\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n openAlbedoPopup(url.toString());\r\n\r\n const result = await waitForAlbedoPopup();\r\n\r\n if (!result.pubkey) {\r\n throw new Error(\"Albedo connection rejected\");\r\n }\r\n\r\n return {\r\n address: result.pubkey,\r\n publicKey: result.pubkey,\r\n };\r\n }\r\n\r\n async disconnect() {}\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n return null;\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error(\"Albedo does not expose network\");\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"tx\");\r\n url.searchParams.set(\"xdr\", xdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_envelope_xdr) {\r\n throw new Error(\"Albedo signing rejected\");\r\n }\r\n\r\n return { signedTxXdr: result.signed_envelope_xdr };\r\n }\r\n\r\n async signAuthEntry(\r\n entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n const url = new URL(\"https://albedo.link\");\r\n\r\n url.searchParams.set(\"intent\", \"sign-auth-entry\");\r\n url.searchParams.set(\"xdr\", entryXdr);\r\n url.searchParams.set(\"app_name\", \"Stellar Wallet Kit\");\r\n url.searchParams.set(\"network\", \"testnet\");\r\n url.searchParams.set(\"callback\", window.location.href);\r\n url.searchParams.set(\"origin\", window.location.origin);\r\n\r\n window.location.href = url.toString();\r\n\r\n const result = await waitForAlbedoResult();\r\n\r\n if (!result.signed_xdr) {\r\n throw new Error(\"Albedo auth entry rejected\");\r\n }\r\n\r\n return { signedAuthEntry: result.signed_xdr };\r\n }\r\n}\r\n","import type { AccountBalance, NetworkType } from '../types';\r\n\r\ninterface HorizonBalanceRecord {\r\n asset_type: string;\r\n asset_code?: string;\r\n asset_issuer?: string;\r\n balance: string;\r\n limit?: string;\r\n buying_liabilities?: string;\r\n selling_liabilities?: string;\r\n is_authorized?: boolean;\r\n is_authorized_to_maintain_liabilities?: boolean;\r\n last_modified_ledger?: number;\r\n sponsor?: string;\r\n}\r\n\r\ninterface HorizonAccountResponse {\r\n id: string;\r\n account_id: string;\r\n sequence: string;\r\n balances: HorizonBalanceRecord[];\r\n}\r\n\r\nconst HORIZON_URLS: Record<NetworkType, string> = {\r\n PUBLIC: 'https://horizon.stellar.org',\r\n TESTNET: 'https://horizon-testnet.stellar.org',\r\n FUTURENET: 'https://horizon-futurenet.stellar.org',\r\n STANDALONE: 'http://localhost:8000',\r\n};\r\n\r\n/**\r\n * Fetches account balances from Horizon\r\n */\r\nexport async function fetchAccountBalances(\r\n publicKey: string,\r\n network: NetworkType\r\n): Promise<AccountBalance[]> {\r\n const horizonUrl = HORIZON_URLS[network];\r\n \r\n try {\r\n const response = await fetch(`${horizonUrl}/accounts/${publicKey}`);\r\n \r\n if (!response.ok) {\r\n if (response.status === 404) {\r\n throw new Error('Account not found. Make sure the account is funded.');\r\n }\r\n throw new Error(`Failed to fetch account: ${response.statusText}`);\r\n }\r\n \r\n const data: HorizonAccountResponse = await response.json();\r\n return data.balances as AccountBalance[];\r\n } catch (error) {\r\n console.error('Error fetching balances:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Gets the native (XLM) balance from balances array\r\n */\r\nexport function getNativeBalance(balances: AccountBalance[]): string {\r\n const nativeBalance = balances.find(b => b.asset_type === 'native');\r\n return nativeBalance?.balance || '0';\r\n}\r\n\r\n/**\r\n * Formats balance for display\r\n */\r\nexport function formatBalance(balance: string, decimals: number = 7): string {\r\n const num = parseFloat(balance);\r\n if (isNaN(num)) return '0';\r\n \r\n // Format with specified decimals, remove trailing zeros\r\n return num.toFixed(decimals).replace(/\\.?0+$/, '');\r\n}\r\n\r\n/**\r\n * Gets balance for a specific asset\r\n */\r\nexport function getAssetBalance(\r\n balances: AccountBalance[],\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): string {\r\n if (!assetCode) {\r\n return getNativeBalance(balances);\r\n }\r\n \r\n const asset = balances.find(\r\n b => b.asset_code === assetCode && \r\n (!assetIssuer || b.asset_issuer === assetIssuer)\r\n );\r\n \r\n return asset?.balance || '0';\r\n}\r\n\r\n/**\r\n * Checks if account has sufficient balance for a transaction\r\n */\r\nexport function hasSufficientBalance(\r\n balances: AccountBalance[],\r\n requiredAmount: string,\r\n assetCode?: string,\r\n assetIssuer?: string\r\n): boolean {\r\n const balance = getAssetBalance(balances, assetCode, assetIssuer);\r\n return parseFloat(balance) >= parseFloat(requiredAmount);\r\n}\r\n\r\n/**\r\n * Gets total account value in XLM (simplified - just returns native balance)\r\n * For real implementation, you'd need asset prices\r\n */\r\nexport function getTotalValueXLM(balances: AccountBalance[]): string {\r\n return getNativeBalance(balances);\r\n}\r\n\r\n/**\r\n * Groups balances by type (native, credit_alphanum4, credit_alphanum12, liquidity_pool_shares)\r\n */\r\nexport function groupBalancesByType(balances: AccountBalance[]) {\r\n return balances.reduce((acc, balance) => {\r\n const type = balance.asset_type;\r\n if (!acc[type]) {\r\n acc[type] = [];\r\n }\r\n acc[type].push(balance);\r\n return acc;\r\n }, {} as Record<string, AccountBalance[]>);\r\n}","\"use client\";\r\n\r\nimport React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n PropsWithChildren,\r\n} from \"react\";\r\n\r\nimport {\r\n WalletType,\r\n NetworkType,\r\n} from \"../types\";\r\n\r\nimport type {\r\n WalletContextValue,\r\n WalletAccount,\r\n StellarWalletKitConfig,\r\n WalletInfo,\r\n SignTransactionOptions,\r\n SignAuthEntryOptions,\r\n SignTransactionResponse,\r\n SignAuthEntryResponse,\r\n WalletAdapter,\r\n} from \"../types\";\r\n\r\nimport { FreighterAdapter } from \"../adapters/FreighterAdapter\";\r\nimport { AlbedoAdapter } from \"../adapters/AlbedoAdapter\";\r\nimport { fetchAccountBalances } from \"../utils/balanceUtils\";\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Constants */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst STORAGE_KEY = \"stellar_wallet_kit\";\r\nconst isBrowser = typeof window !== \"undefined\";\r\n\r\nconst DEFAULT_SUPPORTS = {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Context */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst WalletContext = createContext<WalletContextValue | undefined>(undefined);\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Wallet metadata */\r\n/* ------------------------------------------------------------------ */\r\n\r\nconst walletMetadata: Record<WalletType, Omit<WalletInfo, \"installed\">> = {\r\n [WalletType.FREIGHTER]: {\r\n id: WalletType.FREIGHTER,\r\n name: \"Freighter\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/freighter.svg\",\r\n description: \"Freighter browser extension wallet\",\r\n downloadUrl:\r\n \"https://chrome.google.com/webstore/detail/freighter/bcacfldlkkdogcmkkibnjlakofdplcbk\",\r\n kind: \"extension\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: true,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.ALBEDO]: {\r\n id: WalletType.ALBEDO,\r\n name: \"Albedo\",\r\n icon: \"https://stellar.creit.tech/wallet-icons/albedo.svg\",\r\n description: \"Web-based Stellar wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: false,\r\n networkDetection: false,\r\n authEntrySigning: true,\r\n },\r\n },\r\n\r\n [WalletType.WALLETCONNECT]: {\r\n id: WalletType.WALLETCONNECT,\r\n name: \"WalletConnect\",\r\n icon: \"https://docs.walletconnect.network/images/walletconnect-home.svg\",\r\n description: \"Connect mobile wallets via WalletConnect\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n\r\n [WalletType.LOBSTR]: {\r\n id: WalletType.LOBSTR,\r\n name: \"LOBSTR\",\r\n icon: \"https://lobstr.co/favicon.ico\",\r\n description: \"LOBSTR mobile wallet\",\r\n kind: \"web\",\r\n capabilities: {\r\n silentReconnect: true,\r\n networkDetection: false,\r\n authEntrySigning: false,\r\n },\r\n },\r\n};\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Storage helpers */\r\n/* ------------------------------------------------------------------ */\r\n\r\ninterface StorageData {\r\n selectedWallet: WalletType | null;\r\n autoConnect: boolean;\r\n}\r\n\r\nfunction getStorageData(): StorageData {\r\n if (!isBrowser) {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n return raw\r\n ? JSON.parse(raw)\r\n : { selectedWallet: null, autoConnect: false };\r\n } catch {\r\n return { selectedWallet: null, autoConnect: false };\r\n }\r\n}\r\n\r\nfunction setStorageData(data: Partial<StorageData>) {\r\n if (!isBrowser) return;\r\n\r\n const existing = getStorageData();\r\n localStorage.setItem(\r\n STORAGE_KEY,\r\n JSON.stringify({ ...existing, ...data })\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Provider */\r\n/* ------------------------------------------------------------------ */\r\n\r\ntype WalletProviderProps = PropsWithChildren<{\r\n config?: StellarWalletKitConfig;\r\n}>;\r\n\r\nexport function WalletProvider({ config = {}, children }: WalletProviderProps) {\r\n const [account, setAccount] = useState<WalletAccount | null>(null);\r\n const [isConnecting, setIsConnecting] = useState(false);\r\n const [connectingWallet, setConnectingWallet] =\r\n useState<WalletType | null>(null);\r\n const [error, setError] = useState<Error | null>(null);\r\n const [network, setNetwork] = useState<NetworkType>(\r\n config.network || NetworkType.TESTNET\r\n );\r\n const [selectedWallet, setSelectedWallet] =\r\n useState<WalletType | null>(null);\r\n const [availableWallets, setAvailableWallets] = useState<WalletInfo[]>([]);\r\n const [isLoadingBalances, setIsLoadingBalances] = useState(false);\r\n\r\n const isConnected = !!account;\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Wallet adapters */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const walletAdapters = useMemo<\r\n Partial<Record<WalletType, WalletAdapter>>\r\n >(\r\n () => ({\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n ...(config.adapters ?? {}),\r\n }),\r\n [config.adapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Detect wallets */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser) return;\r\n\r\n (async () => {\r\n const wallets: WalletInfo[] = [];\r\n\r\n const entries = Object.entries(walletAdapters) as [\r\n WalletType,\r\n WalletAdapter | undefined\r\n ][];\r\n\r\n for (const [walletType, adapter] of entries) {\r\n if (!adapter) continue;\r\n\r\n const meta = walletMetadata[walletType];\r\n\r\n let installed = true;\r\n if (meta.kind === \"extension\") {\r\n installed = await adapter.isAvailable();\r\n }\r\n\r\n wallets.push({ ...meta, installed });\r\n }\r\n\r\n setAvailableWallets(wallets);\r\n })();\r\n }, [walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Auto-connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n useEffect(() => {\r\n if (!isBrowser || !config.autoConnect) return;\r\n\r\n const { selectedWallet } = getStorageData();\r\n if (selectedWallet) {\r\n connect(selectedWallet).catch(() => {});\r\n }\r\n }, [config.autoConnect]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Balances */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const refreshBalances = useCallback(async () => {\r\n if (!account?.publicKey) return;\r\n\r\n setIsLoadingBalances(true);\r\n try {\r\n const balances = await fetchAccountBalances(\r\n account.publicKey,\r\n network\r\n );\r\n setAccount((prev) => (prev ? { ...prev, balances } : null));\r\n } finally {\r\n setIsLoadingBalances(false);\r\n }\r\n }, [account?.publicKey, network]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Connect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const connect = useCallback(\r\n async (walletType?: WalletType) => {\r\n const type =\r\n walletType || config.defaultWallet || WalletType.FREIGHTER;\r\n\r\n setIsConnecting(true);\r\n setConnectingWallet(type);\r\n setError(null);\r\n\r\n try {\r\n const adapter = walletAdapters[type];\r\n if (!adapter) {\r\n throw new Error(`Wallet adapter not configured: ${type}`);\r\n }\r\n\r\n const meta = walletMetadata[type];\r\n\r\n if (meta.kind === \"extension\") {\r\n const ok = await adapter.isAvailable();\r\n if (!ok) {\r\n throw new Error(`${meta.name} is not installed`);\r\n }\r\n }\r\n\r\n const res = await adapter.connect();\r\n\r\n setAccount({\r\n address: res.address,\r\n publicKey: res.publicKey,\r\n displayName: `${res.address.slice(0, 4)}…${res.address.slice(-4)}`,\r\n });\r\n\r\n setSelectedWallet(type);\r\n setStorageData({ selectedWallet: type, autoConnect: true });\r\n\r\n await refreshBalances();\r\n } catch (e) {\r\n setError(e as Error);\r\n throw e;\r\n } finally {\r\n setIsConnecting(false);\r\n setConnectingWallet(null);\r\n }\r\n },\r\n [config.defaultWallet, refreshBalances, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Disconnect */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const disconnect = useCallback(async () => {\r\n if (selectedWallet) {\r\n await walletAdapters[selectedWallet]?.disconnect();\r\n }\r\n\r\n setAccount(null);\r\n setSelectedWallet(null);\r\n setError(null);\r\n setStorageData({ selectedWallet: null, autoConnect: false });\r\n }, [selectedWallet, walletAdapters]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Signing */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const signTransaction = useCallback(\r\n (\r\n xdr: string,\r\n options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signTransaction(xdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n const signAuthEntry = useCallback(\r\n (\r\n entryXdr: string,\r\n options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> => {\r\n if (!selectedWallet) {\r\n throw new Error(\"No wallet connected\");\r\n }\r\n\r\n const adapter = walletAdapters[selectedWallet];\r\n if (!adapter) {\r\n throw new Error(\"Wallet adapter missing\");\r\n }\r\n\r\n return adapter.signAuthEntry(entryXdr, options);\r\n },\r\n [selectedWallet, walletAdapters]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Network */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const switchNetwork = useCallback(\r\n async (n: NetworkType) => {\r\n setNetwork(n);\r\n await refreshBalances();\r\n },\r\n [refreshBalances]\r\n );\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Capabilities */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const supports = useMemo(() => {\r\n if (!selectedWallet) return DEFAULT_SUPPORTS;\r\n\r\n const caps = walletMetadata[selectedWallet].capabilities;\r\n return {\r\n silentReconnect: caps?.silentReconnect ?? false,\r\n networkDetection: caps?.networkDetection ?? false,\r\n authEntrySigning: caps?.authEntrySigning ?? false,\r\n };\r\n }, [selectedWallet]);\r\n\r\n /* ------------------------------------------------------------------ */\r\n /* Context value */\r\n /* ------------------------------------------------------------------ */\r\n\r\n const value = useMemo<WalletContextValue>(\r\n () => ({\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n }),\r\n [\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connectingWallet,\r\n error,\r\n network,\r\n selectedWallet,\r\n connect,\r\n disconnect,\r\n signTransaction,\r\n signAuthEntry,\r\n switchNetwork,\r\n availableWallets,\r\n refreshBalances,\r\n isLoadingBalances,\r\n supports,\r\n ]\r\n );\r\n\r\n return (\r\n <WalletContext.Provider value={value}>\r\n {children}\r\n </WalletContext.Provider>\r\n );\r\n}\r\n\r\n/* ------------------------------------------------------------------ */\r\n/* Hook */\r\n/* ------------------------------------------------------------------ */\r\n\r\nexport function useWallet(): WalletContextValue {\r\n const ctx = useContext(WalletContext);\r\n if (!ctx) {\r\n throw new Error(\"useWallet must be used within a WalletProvider\");\r\n }\r\n return ctx;\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport type { ModalProps } from '../types';\r\n\r\nexport function WalletModal({\r\n isOpen,\r\n onClose,\r\n wallets,\r\n onSelectWallet,\r\n theme,\r\n appName = 'Your App',\r\n appIcon,\r\n}: ModalProps) {\r\n useEffect(() => {\r\n const onEsc = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') onClose();\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('keydown', onEsc);\r\n document.body.style.overflow = 'auto';\r\n };\r\n }, [isOpen, onClose]);\r\n\r\n if (!isOpen) return null;\r\n\r\n const isDark =\r\n theme?.mode === 'dark' ||\r\n (theme?.mode === 'auto' &&\r\n window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const bg = theme?.modalBackground || (isDark ? '#0f0f11' : '#ffffff');\r\n const text = theme?.textColor || (isDark ? '#ffffff' : '#0a0a0a');\r\n const muted = isDark ? '#8b8b8b' : '#6b6b6b';\r\n const border = isDark ? '#1f1f23' : '#eaeaea';\r\n const hover = theme?.buttonHoverColor || (isDark ? '#1a1a1f' : '#f6f6f6');\r\n\r\n return (\r\n <>\r\n <style>{`\r\n .swk-overlay {\r\n position: fixed;\r\n inset: 0;\r\n background: rgba(0,0,0,0.55);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 9999;\r\n }\r\n\r\n .swk-modal {\r\n width: 420px;\r\n max-width: 92vw;\r\n background: ${bg};\r\n border-radius: 20px;\r\n padding: 28px;\r\n box-shadow: 0 20px 60px rgba(0,0,0,0.4);\r\n font-family: ${theme?.fontFamily || 'Inter, system-ui, sans-serif'};\r\n }\r\n\r\n .swk-wallet {\r\n display: flex;\r\n align-items: center;\r\n gap: 14px;\r\n padding: 14px 16px;\r\n border-radius: 14px;\r\n cursor: pointer;\r\n transition: background 0.15s ease;\r\n }\r\n\r\n .swk-wallet:hover {\r\n background: ${hover};\r\n }\r\n\r\n .swk-pill {\r\n font-size: 12px;\r\n padding: 4px 10px;\r\n border-radius: 999px;\r\n background: ${theme?.primaryColor || '#6c5ce7'};\r\n color: white;\r\n font-weight: 500;\r\n }\r\n `}</style>\r\n\r\n <div className=\"swk-overlay\" onClick={onClose}>\r\n <div className=\"swk-modal\" onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={{ marginBottom: 24 }}>\r\n <div\r\n style={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 12,\r\n marginBottom: 8,\r\n }}\r\n >\r\n {appIcon && (\r\n <img\r\n src={appIcon}\r\n alt=\"\"\r\n style={{ width: 32, height: 32, borderRadius: 8 }}\r\n />\r\n )}\r\n <span style={{ color: muted, fontSize: 14 }}>\r\n Log in or sign up\r\n </span>\r\n </div>\r\n\r\n <h2\r\n style={{\r\n margin: 0,\r\n fontSize: 22,\r\n fontWeight: 600,\r\n color: text,\r\n }}\r\n >\r\n {appName}\r\n </h2>\r\n </div>\r\n\r\n {/* Wallet list */}\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\r\n {wallets.map((wallet, i) => (\r\n <div\r\n key={wallet.id}\r\n className=\"swk-wallet\"\r\n onClick={() => onSelectWallet(wallet.id)}\r\n >\r\n <img\r\n src={wallet.icon}\r\n alt={wallet.name}\r\n style={{ width: 36, height: 36, borderRadius: 10 }}\r\n />\r\n\r\n <div style={{ flex: 1 }}>\r\n <div\r\n style={{\r\n fontSize: 15,\r\n fontWeight: 500,\r\n color: text,\r\n }}\r\n >\r\n {wallet.name}\r\n </div>\r\n\r\n {wallet.description && (\r\n <div\r\n style={{\r\n fontSize: 13,\r\n color: muted,\r\n marginTop: 2,\r\n }}\r\n >\r\n {wallet.description}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {i === 0 && <div className=\"swk-pill\">Recent</div>}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Footer */}\r\n <div\r\n style={{\r\n marginTop: 24,\r\n paddingTop: 16,\r\n borderTop: `1px solid ${border}`,\r\n textAlign: 'center',\r\n fontSize: 13,\r\n color: muted,\r\n }}\r\n >\r\n Powered by Stellar Wallet Kit\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useWallet } from '../context/WalletContext';\r\nimport { WalletModal } from './WalletModal';\r\nimport type { WalletTheme } from '../types';\r\nimport { getNativeBalance, formatBalance } from '../utils/balanceUtils';\r\n\r\ninterface ConnectButtonProps {\r\n label?: string;\r\n theme?: WalletTheme;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n showBalance?: boolean;\r\n onConnect?: () => void;\r\n onDisconnect?: () => void;\r\n}\r\n\r\nexport function ConnectButton({\r\n label = 'Connect Wallet',\r\n theme,\r\n className,\r\n style,\r\n showBalance = false,\r\n onConnect,\r\n onDisconnect,\r\n}: ConnectButtonProps) {\r\n const {\r\n account,\r\n isConnected,\r\n isConnecting,\r\n connect,\r\n disconnect,\r\n availableWallets,\r\n selectedWallet,\r\n refreshBalances,\r\n isLoadingBalances,\r\n } = useWallet();\r\n\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const [showDropdown, setShowDropdown] = useState(false);\r\n\r\n const themeMode = theme?.mode || 'light';\r\n const isDark = themeMode === 'dark' || (themeMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);\r\n\r\n const defaultButtonStyles: React.CSSProperties = {\r\n padding: '12px 24px',\r\n borderRadius: theme?.borderRadius || '12px',\r\n border: 'none',\r\n fontSize: '15px',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'all 0.2s',\r\n fontFamily: theme?.fontFamily || '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n ...style,\r\n };\r\n\r\n const connectButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: theme?.primaryColor || '#8b5cf6',\r\n color: '#ffffff',\r\n };\r\n\r\n const accountButtonStyles: React.CSSProperties = {\r\n ...defaultButtonStyles,\r\n backgroundColor: isDark ? '#252525' : '#f5f5f5',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n };\r\n\r\n const dropdownStyles: React.CSSProperties = {\r\n position: 'absolute',\r\n top: 'calc(100% + 8px)',\r\n right: 0,\r\n backgroundColor: theme?.modalBackground || (isDark ? '#1a1a1a' : '#ffffff'),\r\n border: `1px solid ${isDark ? '#333333' : '#e5e5e5'}`,\r\n borderRadius: theme?.borderRadius || '12px',\r\n padding: '8px',\r\n minWidth: '200px',\r\n boxShadow: isDark ? '0 4px 16px rgba(0, 0, 0, 0.4)' : '0 4px 16px rgba(0, 0, 0, 0.1)',\r\n zIndex: 1000,\r\n };\r\n\r\n const dropdownItemStyles: React.CSSProperties = {\r\n padding: '12px 16px',\r\n border: 'none',\r\n background: 'none',\r\n cursor: 'pointer',\r\n width: '100%',\r\n textAlign: 'left',\r\n fontSize: '14px',\r\n color: theme?.textColor || (isDark ? '#ffffff' : '#000000'),\r\n borderRadius: '8px',\r\n transition: 'background-color 0.2s',\r\n fontFamily: 'inherit',\r\n };\r\n\r\n const handleConnect = async (walletType: any) => {\r\n try {\r\n await connect(walletType);\r\n setIsModalOpen(false);\r\n onConnect?.();\r\n } catch (error) {\r\n console.error('Connection error:', error);\r\n }\r\n };\r\n\r\n const handleDisconnect = async () => {\r\n try {\r\n await disconnect();\r\n setShowDropdown(false);\r\n onDisconnect?.();\r\n } catch (error) {\r\n console.error('Disconnect error:', error);\r\n }\r\n };\r\n\r\n const copyAddress = () => {\r\n if (account?.address) {\r\n navigator.clipboard.writeText(account.address);\r\n // You could add a toast notification here\r\n setShowDropdown(false);\r\n }\r\n };\r\n\r\n if (isConnecting) {\r\n return (\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n disabled\r\n >\r\n Connecting...\r\n </button>\r\n );\r\n }\r\n\r\n if (!isConnected || !account) {\r\n return (\r\n <>\r\n <button\r\n className={className}\r\n style={connectButtonStyles}\r\n onClick={() => setIsModalOpen(true)}\r\n >\r\n {label}\r\n </button>\r\n <WalletModal\r\n isOpen={isModalOpen}\r\n onClose={() => setIsModalOpen(false)}\r\n wallets={availableWallets}\r\n onSelectWallet={handleConnect}\r\n theme={theme}\r\n />\r\n </>\r\n );\r\n }\r\n\r\n const walletIcon = availableWallets.find(w => w.id === selectedWallet)?.icon;\r\n const nativeBalance = account?.balances ? getNativeBalance(account.balances) : null;\r\n const formattedBalance = nativeBalance ? formatBalance(nativeBalance, 2) : null;\r\n\r\n return (\r\n <>\r\n <div style={{ position: 'relative' }}>\r\n <button\r\n className={className}\r\n style={accountButtonStyles}\r\n onClick={() => setShowDropdown(!showDropdown)}\r\n >\r\n {walletIcon && (\r\n <img\r\n src={walletIcon}\r\n alt=\"Wallet\"\r\n style={{ width: '20px', height: '20px', borderRadius: '4px' }}\r\n />\r\n )}\r\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'flex-start', gap: '2px' }}>\r\n <span>{account.displayName}</span>\r\n {showBalance && formattedBalance && (\r\n <span style={{ fontSize: '12px', opacity: 0.7, fontWeight: 400 }}>\r\n {isLoadingBalances ? '...' : `${formattedBalance} XLM`}\r\n </span>\r\n )}\r\n </div>\r\n <span style={{ fontSize: '12px', opacity: 0.7 }}>▼</span>\r\n </button>\r\n\r\n {showDropdown && (\r\n <>\r\n <div\r\n style={{\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n zIndex: 999,\r\n }}\r\n onClick={() => setShowDropdown(false)}\r\n />\r\n <div style={dropdownStyles}>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={() => {\r\n refreshBalances();\r\n setShowDropdown(false);\r\n }}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🔄 Refresh Balances\r\n </button>\r\n <button\r\n style={dropdownItemStyles}\r\n onClick={copyAddress}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 📋 Copy Address\r\n </button>\r\n <button\r\n style={{\r\n ...dropdownItemStyles,\r\n color: '#ef4444',\r\n }}\r\n onClick={handleDisconnect}\r\n onMouseEnter={(e) => {\r\n e.currentTarget.style.backgroundColor = theme?.buttonHoverColor || (isDark ? '#333333' : '#f0f0f0');\r\n }}\r\n onMouseLeave={(e) => {\r\n e.currentTarget.style.backgroundColor = 'transparent';\r\n }}\r\n >\r\n 🚪 Disconnect\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n </>\r\n );\r\n}","import { UniversalConnector } from '@reown/appkit-universal-connector';\r\nimport type { CustomCaipNetwork } from '@reown/appkit-common';\r\n\r\n/**\r\n * Stellar Testnet CAIP network\r\n * AppKit does not yet natively support Stellar,\r\n * so we widen the type intentionally.\r\n */\r\nconst stellarTestnet = {\r\n id: 'testnet',\r\n chainNamespace: 'stellar',\r\n caipNetworkId: 'stellar:testnet',\r\n name: 'Stellar Testnet',\r\n nativeCurrency: {\r\n name: 'XLM',\r\n symbol: 'XLM',\r\n decimals: 7,\r\n },\r\n rpcUrls: {\r\n default: {\r\n http: ['https://horizon-testnet.stellar.org'],\r\n },\r\n },\r\n} as unknown as CustomCaipNetwork;\r\n\r\nexport async function getUniversalConnector(projectId: string) {\r\n return UniversalConnector.init({\r\n projectId,\r\n metadata: {\r\n name: 'Stellar Wallet Kit',\r\n description: 'Connect Stellar wallets',\r\n url: 'https://stellar.org',\r\n icons: [],\r\n },\r\n networks: [\r\n {\r\n namespace: 'stellar',\r\n chains: [stellarTestnet],\r\n methods: ['stellar_signTransaction'],\r\n events: [],\r\n },\r\n ],\r\n });\r\n}\r\n","import {\r\n WalletAdapter,\r\n WalletType,\r\n ConnectWalletResponse,\r\n SignTransactionResponse,\r\n SignTransactionOptions,\r\n SignAuthEntryResponse,\r\n SignAuthEntryOptions,\r\n} from '../types';\r\n\r\nimport { getUniversalConnector } from '../utils/getUniversalConnector';\r\n\r\nexport class WalletConnectAdapter implements WalletAdapter {\r\n readonly type = WalletType.WALLETCONNECT;\r\n\r\n private projectId: string;\r\n private connector: any | null = null;\r\n private session: any | null = null;\r\n\r\n constructor(projectId: string) {\r\n if (!projectId) {\r\n throw new Error(\r\n 'WalletConnectAdapter requires a WalletConnect Project ID'\r\n );\r\n }\r\n this.projectId = projectId;\r\n }\r\n\r\n async isAvailable(): Promise<boolean> {\r\n return typeof window !== 'undefined';\r\n }\r\n\r\n private async getConnector() {\r\n if (!this.connector) {\r\n this.connector = await getUniversalConnector(this.projectId);\r\n }\r\n return this.connector;\r\n }\r\n\r\n async connect(): Promise<ConnectWalletResponse> {\r\n const connector = await this.getConnector();\r\n const { session } = await connector.connect();\r\n this.session = session;\r\n\r\n // stellar:testnet:GXXXX...\r\n const account =\r\n session.namespaces.stellar.accounts[0];\r\n const publicKey = account.split(':')[2];\r\n\r\n return {\r\n address: publicKey,\r\n publicKey,\r\n };\r\n }\r\n\r\n async disconnect(): Promise<void> {\r\n if (this.connector) {\r\n await this.connector.disconnect();\r\n }\r\n this.session = null;\r\n }\r\n\r\n async getPublicKey(): Promise<string | null> {\r\n if (!this.session) return null;\r\n\r\n const account =\r\n this.session.namespaces.stellar.accounts[0];\r\n return account.split(':')[2];\r\n }\r\n\r\n async getNetwork(): Promise<string> {\r\n throw new Error('Network detection not supported via WalletConnect');\r\n }\r\n\r\n async signTransaction(\r\n xdr: string,\r\n _options?: SignTransactionOptions\r\n ): Promise<SignTransactionResponse> {\r\n if (!this.connector || !this.session) {\r\n throw new Error('No active WalletConnect session');\r\n }\r\n\r\n const result = await this.connector.request({\r\n method: 'stellar_signTransaction',\r\n params: { xdr },\r\n });\r\n\r\n return {\r\n signedTxXdr: result as string,\r\n };\r\n }\r\n\r\n async signAuthEntry(\r\n _entryXdr: string,\r\n _options?: SignAuthEntryOptions\r\n ): Promise<SignAuthEntryResponse> {\r\n throw new Error(\r\n 'Auth entry signing is not supported via WalletConnect'\r\n );\r\n }\r\n}\r\n","import { WalletType, WalletAdapter } from '../types';\r\nimport { FreighterAdapter } from '../adapters/FreighterAdapter';\r\nimport { AlbedoAdapter } from '../adapters/AlbedoAdapter';\r\nimport { WalletConnectAdapter } from '../adapters/WalletConnectAdapter';\r\n\r\nexport function createWalletAdapters(config: {\r\n walletConnectProjectId?: string;\r\n}): Partial<Record<WalletType, WalletAdapter>> {\r\n return {\r\n // Extension wallet\r\n [WalletType.FREIGHTER]: new FreighterAdapter(),\r\n\r\n // Web wallet\r\n [WalletType.ALBEDO]: new AlbedoAdapter(),\r\n\r\n // WalletConnect (mobile wallets like Lobstr)\r\n ...(config.walletConnectProjectId\r\n ? {\r\n [WalletType.WALLETCONNECT]: new WalletConnectAdapter(\r\n config.walletConnectProjectId\r\n ),\r\n }\r\n : {}),\r\n };\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stellar-wallet-kit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "A comprehensive wallet connection kit for Stellar dApps",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"@walletconnect/utils": "^2.23.1",
|
|
38
38
|
"ethers": "^6.16.0",
|
|
39
39
|
"react": "^18.0.0 || ^19.0.0",
|
|
40
|
-
"react-dom": "^18.0.0 || ^19.0.0"
|
|
40
|
+
"react-dom": "^18.0.0 || ^19.0.0",
|
|
41
|
+
"stellar-wallet-kit": "^2.0.5"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
44
|
"@types/node": "^20.0.0",
|