@doujins/payments-ui 0.0.10 → 0.0.12
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.cjs +1805 -245
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +244 -9
- package/dist/index.d.ts +244 -9
- package/dist/index.js +1789 -248
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +10 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/collect.ts","../src/services/apiClient.ts","../src/services/CardPaymentService.ts","../src/services/PaymentMethodService.ts","../src/services/SolanaPaymentService.ts","../src/services/TokenCatalog.ts","../src/services/WalletGateway.ts","../src/services/SubscriptionService.ts","../src/core/PaymentApp.ts","../src/state/paymentStore.ts","../src/context/PaymentContext.tsx","../src/data/countries.ts","../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../node_modules/@radix-ui/react-slot/src/slot.tsx","../src/lib/utils.ts","../src/ui/button.tsx","../src/ui/input.tsx","../src/ui/label.tsx","../src/ui/select.tsx","../src/components/CardDetailsForm.tsx","../src/hooks/usePaymentMethodService.ts","../src/hooks/usePaymentMethods.ts","../src/ui/dialog.tsx","../src/ui/badge.tsx","../src/ui/scroll-area.tsx","../src/ui/card.tsx","../src/components/StoredPaymentMethods.tsx","../src/hooks/useSolanaService.ts","../src/utils/solana/tokenUtils.ts","../src/hooks/useSolanaDirectPayment.ts","../src/components/DirectPayment.tsx","../src/hooks/useSolanaQrPayment.ts","../src/components/QRCodePayment.tsx","../src/components/PaymentStatus.tsx","../src/hooks/useSupportedTokens.ts","../src/hooks/usePaymentStore.ts","../src/state/selectors.ts","../src/ui/tabs.tsx","../src/components/SolanaPaymentSelector.tsx","../src/components/PaymentExperience.tsx","../src/hooks/useTokenBalance.ts","../src/hooks/useDirectWalletPayment.ts","../src/hooks/usePaymentStatus.ts","../src/hooks/useSubscriptionActions.ts"],"names":["data","createStore","createContext","useMemo","useEffect","jsx","useContext","countryList","Slot","React3","props","twMerge","clsx","cva","React4","React5","React6","LabelPrimitive","SelectPrimitive","React7","jsxs","ChevronDown","ChevronUp","Check","useState","User","MapPin","Fragment","Loader2","CreditCard","useQueryClient","useQuery","useMutation","DialogPrimitive","React9","X","React10","ScrollAreaPrimitive","React11","WalletCards","Trash2","LAMPORTS_PER_SOL","TOKEN_PROGRAM_ID","useWallet","Connection","useCallback","buffer","Buffer","VersionedTransaction","Transaction","Wallet","useRef","QRCode","RefreshCw","CheckCircle","XCircle","RotateCcw","tokens","error","useStore","TabsPrimitive","React13","Sparkles","useConnection","PublicKey","getAssociatedTokenAddress","getAccount","hasSufficientBalance"],"mappings":"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","file":"index.cjs","sourcesContent":["const SCRIPT_SRC = 'https://secure.networkmerchants.com/token/Collect.js'\n\nexport const loadCollectJs = (tokenizationKey: string): void => {\n if (typeof document === 'undefined') return\n const trimmed = tokenizationKey?.trim()\n if (!trimmed || trimmed.length < 10) {\n console.warn('payments-ui: invalid Collect.js key, skipping load')\n return\n }\n\n const existing = document.querySelector(`script[src=\"${SCRIPT_SRC}\"]`)\n if (existing) return\n\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.setAttribute('data-tokenization-key', trimmed)\n script.setAttribute('data-field-ccnumber-placeholder', '0000 0000 0000 0000')\n script.setAttribute('data-field-ccexp-placeholder', '10 / 25')\n script.setAttribute('data-field-cvv-placeholder', '123')\n script.setAttribute('data-variant', 'inline')\n script.async = true\n script.addEventListener('load', () => {\n console.log('payments-ui: Collect.js loaded')\n })\n script.addEventListener('error', (event) => {\n console.error('payments-ui: failed to load Collect.js', event)\n })\n document.head.appendChild(script)\n}\n","import type {\n PaymentFetcher,\n PaymentConfig,\n} from '../types/config'\n\nexport type RequestOptions = {\n params?: Record<string, string | number>\n query?: Record<string, string | number | undefined>\n body?: Record<string, unknown>\n headers?: Record<string, string>\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport interface ApiClient {\n request: <T>(method: HttpMethod, path: string, options?: RequestOptions) => Promise<T>\n get: <T>(path: string, options?: Omit<RequestOptions, 'body'>) => Promise<T>\n post: <T>(path: string, options?: RequestOptions) => Promise<T>\n put: <T>(path: string, options?: RequestOptions) => Promise<T>\n patch: <T>(path: string, options?: RequestOptions) => Promise<T>\n delete: <T>(path: string, options?: RequestOptions) => Promise<T>\n}\n\nconst buildUrl = (\n baseUrl: string,\n path: string,\n { params, query }: Pick<RequestOptions, 'params' | 'query'>\n): string => {\n let resolved = `${baseUrl}${path}`\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n resolved = resolved.replace(`:${key}`, encodeURIComponent(String(value)))\n })\n }\n if (query) {\n const queryString = new URLSearchParams()\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) return\n queryString.append(key, String(value))\n })\n if ([...queryString.keys()].length > 0) {\n resolved = `${resolved}?${queryString.toString()}`\n }\n }\n return resolved\n}\n\nexport const createApiClient = (\n paymentConfig: PaymentConfig,\n baseUrl: string,\n fetcher: PaymentFetcher,\n resolveAuthToken: () => Promise<string | null>\n): ApiClient => {\n const request = async <T>(\n method: HttpMethod,\n path: string,\n options?: RequestOptions\n ): Promise<T> => {\n const url = buildUrl(baseUrl, path, options ?? {})\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(paymentConfig.defaultHeaders ?? {}),\n ...(options?.headers ?? {}),\n }\n\n const token = await resolveAuthToken()\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n try {\n const response = await fetcher(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n const message = await response.text()\n console.error('payments-ui: API request failed', {\n url,\n method,\n status: response.status,\n message,\n })\n throw new Error(message || `Request failed with status ${response.status}`)\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n const data = (await response.json()) as T\n return data\n } catch (error) {\n console.error('payments-ui: API request error', { url, method, error })\n throw error\n }\n }\n\n return {\n request,\n get: (path, options) => request('GET', path, options),\n post: (path, options) => request('POST', path, options),\n put: (path, options) => request('PUT', path, options),\n patch: (path, options) => request('PATCH', path, options),\n delete: (path, options) => request('DELETE', path, options),\n }\n}\n","import type { BillingDetails, CreatePaymentMethodPayload, PaymentConfig } from '../types'\nimport { loadCollectJs } from '../utils/collect'\n\nexport interface CardTokenizeResult {\n token: string\n billing: BillingDetails\n}\n\nexport class CardPaymentService {\n private collectLoaded = false\n\n constructor(private config: PaymentConfig) {}\n\n async ensureCollectLoaded(): Promise<void> {\n if (this.collectLoaded) return\n if (!this.config.collectJsKey) {\n throw new Error('payments-ui: collect.js key missing')\n }\n\n loadCollectJs(this.config.collectJsKey)\n this.collectLoaded = true\n }\n\n buildCreatePayload(result: CardTokenizeResult): CreatePaymentMethodPayload {\n return {\n payment_token: result.token,\n first_name: result.billing.firstName,\n last_name: result.billing.lastName,\n address1: result.billing.address1,\n address2: result.billing.address2,\n city: result.billing.city,\n state: result.billing.stateRegion,\n zip: result.billing.postalCode,\n country: result.billing.country,\n email: result.billing.email,\n provider: result.billing.provider,\n }\n }\n}\n","import type {\n PaginatedPaymentMethods,\n CreatePaymentMethodPayload,\n PaymentMethod,\n} from '../types'\nimport type { ApiClient } from './apiClient'\n\nexport interface ListParams {\n page?: number\n pageSize?: number\n}\n\nexport class PaymentMethodService {\n constructor(private api: ApiClient) { }\n\n async list(params?: ListParams): Promise<PaginatedPaymentMethods> {\n return this.api.get('/payment-methods', {\n query: {\n page: params?.page ?? 1,\n page_size: params?.pageSize ?? 50,\n },\n })\n }\n\n async create(payload: CreatePaymentMethodPayload): Promise<PaymentMethod> {\n return this.api.post('/payment-methods', {\n body: { ...payload } as Record<string, unknown>,\n })\n }\n\n async remove(id: string): Promise<void> {\n await this.api.delete(`/payment-methods/${id}`)\n }\n\n async activate(id: string): Promise<void> {\n await this.api.put(`/payment-methods/${id}/activate`)\n }\n}\n","import type {\n GeneratePaymentResponse,\n SubmitPaymentResponse,\n TokenInfo,\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types'\nimport type { ApiClient } from './apiClient'\n\nexport class SolanaPaymentService {\n constructor(private api: ApiClient) { }\n\n async generatePayment(\n priceId: string,\n token: string,\n userWallet: string\n ): Promise<GeneratePaymentResponse> {\n return this.api.post('/solana/generate', {\n body: { price_id: priceId, token, user_wallet: userWallet },\n })\n }\n\n async submitPayment(\n signedTransaction: string,\n priceId: string,\n intentId: string,\n memo?: string\n ): Promise<SubmitPaymentResponse> {\n return this.api.post('/solana/submit', {\n body: {\n signed_transaction: signedTransaction,\n price_id: priceId,\n intent_id: intentId,\n ...(memo ? { memo } : {}),\n },\n })\n }\n\n async fetchSupportedTokens(): Promise<TokenInfo[]> {\n const response = await this.api.get<{ tokens: TokenInfo[] }>(\n '/solana/tokens'\n )\n return response.tokens\n }\n\n async getSupportedTokens(): Promise<TokenInfo[]> {\n return this.fetchSupportedTokens()\n }\n\n async generateQrCode(\n priceId: string,\n token: string,\n userWallet?: string\n ): Promise<SolanaPayQRCodeIntent> {\n return this.api.post('/solana/qr', {\n body: {\n price_id: priceId,\n token,\n ...(userWallet ? { user_wallet: userWallet } : {}),\n },\n })\n }\n\n async generateQRCode(\n priceId: string,\n token: string,\n userWallet?: string\n ): Promise<SolanaPayQRCodeIntent> {\n return this.generateQrCode(priceId, token, userWallet)\n }\n\n async checkPaymentStatus(\n reference: string,\n memo?: string\n ): Promise<SolanaPayStatusResponse> {\n return this.api.get('/solana/check', {\n query: {\n reference,\n ...(memo ? { memo } : {}),\n },\n })\n }\n}\n","import type { TokenInfo } from '../types'\nimport type { SolanaPaymentService } from './SolanaPaymentService'\n\nexport interface TokenCatalogOptions {\n ttlMs?: number\n}\n\nexport class TokenCatalog {\n private cache: TokenInfo[] = []\n private lastFetched = 0\n\n constructor(\n private solanaService: SolanaPaymentService,\n private options: TokenCatalogOptions = {}\n ) { }\n\n private get ttl(): number {\n return this.options.ttlMs ?? 5 * 60 * 1000\n }\n\n async getTokens(force = false): Promise<TokenInfo[]> {\n const isStale = Date.now() - this.lastFetched > this.ttl\n if (!force && this.cache.length > 0 && !isStale) {\n return this.cache\n }\n\n const tokens = await this.solanaService.fetchSupportedTokens()\n this.cache = tokens\n this.lastFetched = Date.now()\n return tokens\n }\n\n getCached(): TokenInfo[] {\n return this.cache\n }\n}\n","export interface WalletAccount {\n publicKey: string\n}\n\nexport interface WalletAdapterLike {\n publicKey?: { toBase58(): string }\n signTransaction?: (tx: unknown) => Promise<unknown>\n signVersionedTransaction?: (tx: unknown) => Promise<unknown>\n}\n\nexport class WalletGateway {\n private adapter: WalletAdapterLike | null = null\n\n setAdapter(adapter: WalletAdapterLike | null): void {\n this.adapter = adapter\n }\n\n getPublicKey(): string | null {\n if (!this.adapter?.publicKey) return null\n try {\n return this.adapter.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async sign(transaction: unknown): Promise<unknown> {\n if (!this.adapter) {\n throw new Error('payments-ui: wallet adapter not set')\n }\n\n if (typeof this.adapter.signVersionedTransaction === 'function') {\n return this.adapter.signVersionedTransaction(transaction)\n }\n\n if (typeof this.adapter.signTransaction === 'function') {\n return this.adapter.signTransaction(transaction)\n }\n\n throw new Error('payments-ui: wallet adapter cannot sign transactions')\n }\n}\n","import type { ApiClient } from './apiClient'\nimport type {\n CCBillSubscribePayload,\n FlexFormResponse,\n GenerateFlexFormURLBodyParams,\n NmiSubscribePayload,\n PaymentPlatform,\n SubscriptionResponse,\n} from '../types/subscription'\n\nexport class SubscriptionService {\n constructor(private readonly api: ApiClient) {}\n\n async subscribe(\n platform: PaymentPlatform,\n payload: NmiSubscribePayload | CCBillSubscribePayload\n ): Promise<SubscriptionResponse> {\n const body = this.serializePayload(platform, payload)\n return this.api.post<SubscriptionResponse>(\n `/subscriptions/process/${platform}`,\n {\n body,\n }\n )\n }\n\n async generateFlexFormUrl(\n payload: GenerateFlexFormURLBodyParams\n ): Promise<FlexFormResponse> {\n return this.api.post('/subscriptions/flexform', {\n body: { ...payload } as Record<string, unknown>,\n })\n }\n\n private serializePayload(\n platform: PaymentPlatform,\n payload: NmiSubscribePayload | CCBillSubscribePayload\n ): Record<string, unknown> {\n if (platform === 'nmi') {\n const data = payload as NmiSubscribePayload\n if (!data.priceId) {\n throw new Error('payments-ui: priceId is required for NMI subscriptions')\n }\n\n if (!data.paymentToken && !data.paymentMethodId) {\n throw new Error(\n 'payments-ui: paymentToken or paymentMethodId is required for NMI subscriptions'\n )\n }\n\n const body: Record<string, unknown> = {\n price_id: data.priceId,\n processor: data.processor ?? 'nmi',\n provider: data.provider,\n }\n\n if (data.email) body.email = data.email\n if (data.firstName) body.first_name = data.firstName\n if (data.lastName) body.last_name = data.lastName\n if (data.address1) body.address1 = data.address1\n if (data.city) body.city = data.city\n if (data.state) body.state = data.state\n if (data.zipCode) body.zip = data.zipCode\n if (data.country) body.country = data.country\n if (data.paymentToken) body.payment_token = data.paymentToken\n if (data.paymentMethodId) body.payment_method_id = data.paymentMethodId\n\n return body\n }\n\n const data = payload as CCBillSubscribePayload\n if (!data.priceId) {\n throw new Error('payments-ui: priceId is required for CCBill subscriptions')\n }\n\n return {\n price_id: data.priceId,\n processor: data.processor ?? 'ccbill',\n email: data.email,\n first_name: data.firstName,\n last_name: data.lastName,\n zip: data.zipCode,\n country: data.country,\n }\n }\n}\n","import type { PaymentConfig, PaymentFetcher } from '../types'\nimport { createApiClient, type ApiClient } from '../services/apiClient'\nimport { CardPaymentService } from '../services/CardPaymentService'\nimport { PaymentMethodService } from '../services/PaymentMethodService'\nimport { SolanaPaymentService } from '../services/SolanaPaymentService'\nimport { TokenCatalog } from '../services/TokenCatalog'\nimport { WalletGateway } from '../services/WalletGateway'\nimport { SubscriptionService } from '../services/SubscriptionService'\n\nexport interface PaymentServices {\n cardPayments: CardPaymentService\n paymentMethods: PaymentMethodService\n solanaPayments: SolanaPaymentService\n tokenCatalog: TokenCatalog\n walletGateway: WalletGateway\n subscriptions: SubscriptionService\n billingApi: ApiClient\n accountApi: ApiClient\n}\n\nexport interface PaymentAppOptions {\n config: PaymentConfig\n fetcher?: PaymentFetcher\n}\n\nexport class PaymentApp {\n private readonly config: PaymentConfig\n private readonly fetcher: PaymentFetcher\n private readonly services: PaymentServices\n\n constructor(options: PaymentAppOptions) {\n this.config = options.config\n this.fetcher =\n options.fetcher ??\n options.config.fetcher ??\n (globalThis.fetch?.bind(globalThis) as PaymentFetcher)\n\n if (!this.fetcher) {\n throw new Error('payments-ui: fetch implementation is required')\n }\n\n this.services = this.createServices()\n }\n\n getConfig(): PaymentConfig {\n return this.config\n }\n\n getFetcher(): PaymentFetcher {\n return this.fetcher\n }\n\n getServices(): PaymentServices {\n return this.services\n }\n\n private createServices(): PaymentServices {\n const billingApi = createApiClient(\n this.config,\n this.config.endpoints.billingBaseUrl,\n this.fetcher,\n this.resolveAuthToken\n )\n\n const accountBaseUrl =\n this.config.endpoints.accountBaseUrl ?? this.config.endpoints.billingBaseUrl\n const accountApi = createApiClient(\n this.config,\n accountBaseUrl,\n this.fetcher,\n this.resolveAuthToken\n )\n\n const solanaPayments = new SolanaPaymentService(billingApi)\n const paymentMethods = new PaymentMethodService(accountApi)\n const cardPayments = new CardPaymentService(this.config)\n const walletGateway = new WalletGateway()\n const tokenCatalog = new TokenCatalog(solanaPayments)\n const subscriptions = new SubscriptionService(billingApi)\n\n return {\n cardPayments,\n paymentMethods,\n solanaPayments,\n tokenCatalog,\n walletGateway,\n subscriptions,\n billingApi,\n accountApi,\n }\n }\n\n resolveAuthToken = async (): Promise<string | null> => {\n if (!this.config.getAuthToken) {\n return null\n }\n\n try {\n const result = this.config.getAuthToken()\n if (result instanceof Promise) {\n return (await result) ?? null\n }\n return result ?? null\n } catch (error) {\n console.warn('payments-ui: failed to resolve auth token', error)\n return null\n }\n }\n}\n","import { createStore } from 'zustand/vanilla'\nimport type {\n PaymentCallbacks,\n PaymentStatusPayload,\n PaymentSuccessPayload,\n} from '../types'\n\nexport type AsyncStatus = 'idle' | 'processing' | 'success' | 'error'\nexport type SolanaFlowState =\n | 'selecting'\n | 'processing'\n | 'confirming'\n | 'success'\n | 'error'\n\nexport interface PaymentStoreState {\n selectedMethodId: string | null\n solanaModalOpen: boolean\n savedPaymentStatus: AsyncStatus\n savedPaymentError: string | null\n newCardStatus: AsyncStatus\n newCardError: string | null\n solanaTab: 'wallet' | 'qr'\n solanaStatus: SolanaFlowState\n solanaError: string | null\n solanaTransactionId: string | null\n solanaSelectedToken: string | null\n solanaTokenAmount: number\n setSelectedMethod: (methodId: string | null) => void\n setSolanaModalOpen: (open: boolean) => void\n setSolanaTab: (tab: 'wallet' | 'qr') => void\n setSolanaSelectedToken: (symbol: string) => void\n setSolanaTokenAmount: (amount: number) => void\n setSolanaTransactionId: (txId: string | null) => void\n startSavedPayment: () => void\n completeSavedPayment: () => void\n failSavedPayment: (error: string) => void\n resetSavedPayment: () => void\n startNewCardPayment: () => void\n completeNewCardPayment: () => void\n failNewCardPayment: (error: string) => void\n resetNewCardPayment: () => void\n startSolanaPayment: () => void\n confirmSolanaPayment: () => void\n completeSolanaPayment: (payload?: PaymentSuccessPayload) => void\n failSolanaPayment: (error: string) => void\n resetSolanaPayment: () => void\n resetAll: () => void\n}\n\nconst initialState = {\n selectedMethodId: null,\n solanaModalOpen: false,\n savedPaymentStatus: 'idle' as AsyncStatus,\n savedPaymentError: null,\n newCardStatus: 'idle' as AsyncStatus,\n newCardError: null,\n solanaTab: 'wallet' as const,\n solanaStatus: 'selecting' as SolanaFlowState,\n solanaError: null,\n solanaTransactionId: null,\n solanaSelectedToken: null,\n solanaTokenAmount: 0,\n}\n\nexport interface PaymentStoreOptions {\n callbacks?: PaymentCallbacks\n}\n\nexport const createPaymentStore = (options?: PaymentStoreOptions) =>\n createStore<PaymentStoreState>((set, get) => {\n const notifyStatus = (\n status: PaymentStatusPayload['status'],\n context?: Record<string, unknown>\n ) => {\n options?.callbacks?.onStatusChange?.({ status, context })\n }\n\n const notifySuccess = (payload?: PaymentSuccessPayload) => {\n if (!options?.callbacks?.onSuccess) return\n options.callbacks.onSuccess(payload ?? {})\n }\n\n const notifyError = (error: string) => {\n options?.callbacks?.onError?.(new Error(error))\n }\n\n return {\n ...initialState,\n setSelectedMethod: (methodId) => {\n if (get().selectedMethodId === methodId) return\n set({ selectedMethodId: methodId })\n },\n setSolanaModalOpen: (open) => {\n if (get().solanaModalOpen === open) return\n set({ solanaModalOpen: open })\n },\n setSolanaTab: (tab) => {\n if (get().solanaTab === tab) return\n set({ solanaTab: tab })\n },\n setSolanaSelectedToken: (symbol) => {\n if (get().solanaSelectedToken === symbol) return\n set({ solanaSelectedToken: symbol })\n },\n setSolanaTokenAmount: (amount) => {\n if (get().solanaTokenAmount === amount) return\n set({ solanaTokenAmount: amount })\n },\n setSolanaTransactionId: (txId) => {\n if (get().solanaTransactionId === txId) return\n set({ solanaTransactionId: txId })\n },\n startSavedPayment: () => {\n notifyStatus('processing', { source: 'saved-payment' })\n set({ savedPaymentStatus: 'processing', savedPaymentError: null })\n },\n completeSavedPayment: () => {\n notifyStatus('success', { source: 'saved-payment' })\n set({ savedPaymentStatus: 'success', savedPaymentError: null })\n },\n failSavedPayment: (error) => {\n notifyStatus('error', { source: 'saved-payment' })\n notifyError(error)\n set({ savedPaymentStatus: 'error', savedPaymentError: error })\n },\n resetSavedPayment: () =>\n set({ savedPaymentStatus: 'idle', savedPaymentError: null }),\n startNewCardPayment: () => {\n notifyStatus('processing', { source: 'new-card' })\n set({ newCardStatus: 'processing', newCardError: null })\n },\n completeNewCardPayment: () => {\n notifyStatus('success', { source: 'new-card' })\n set({ newCardStatus: 'success', newCardError: null })\n },\n failNewCardPayment: (error) => {\n notifyStatus('error', { source: 'new-card' })\n notifyError(error)\n set({ newCardStatus: 'error', newCardError: error })\n },\n resetNewCardPayment: () =>\n set({ newCardStatus: 'idle', newCardError: null }),\n startSolanaPayment: () => {\n notifyStatus('processing', { source: 'solana' })\n set({ solanaStatus: 'processing', solanaError: null })\n },\n confirmSolanaPayment: () =>\n set({ solanaStatus: 'confirming' }),\n completeSolanaPayment: (payload) => {\n notifyStatus('success', { source: 'solana' })\n notifySuccess(payload)\n set({ solanaStatus: 'success', solanaError: null })\n },\n failSolanaPayment: (error) => {\n notifyStatus('error', { source: 'solana' })\n notifyError(error)\n set({ solanaStatus: 'error', solanaError: error })\n },\n resetSolanaPayment: () =>\n set({\n solanaStatus: 'selecting',\n solanaError: null,\n solanaTransactionId: null,\n }),\n resetAll: () => set(initialState),\n }\n })\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport type { StoreApi } from 'zustand'\nimport type { PaymentConfig, PaymentFetcher } from '../types/config'\nimport { loadCollectJs } from '../utils/collect'\nimport { PaymentApp, type PaymentServices } from '../core'\nimport {\n createPaymentStore,\n type PaymentStoreState,\n} from '../state/paymentStore'\n\nexport interface PaymentContextValue {\n config: PaymentConfig\n fetcher: PaymentFetcher\n resolveAuthToken: () => Promise<string | null>\n app: PaymentApp\n services: PaymentServices\n store: StoreApi<PaymentStoreState>\n}\n\nconst PaymentContext = createContext<PaymentContextValue | undefined>(undefined)\n\nexport interface PaymentProviderProps {\n config: PaymentConfig\n children: React.ReactNode\n}\n\nexport const PaymentProvider: React.FC<PaymentProviderProps> = ({\n config,\n children,\n}) => {\n const app = useMemo(() => new PaymentApp({ config }), [config])\n const store = useMemo(\n () => createPaymentStore({ callbacks: config.callbacks }),\n [config.callbacks]\n )\n\n const value = useMemo<PaymentContextValue>(() => {\n return {\n config: app.getConfig(),\n fetcher: app.getFetcher(),\n resolveAuthToken: app.resolveAuthToken,\n app,\n services: app.getServices(),\n store,\n }\n }, [app, store])\n\n useEffect(() => {\n if (!value.config.collectJsKey) return\n loadCollectJs(value.config.collectJsKey)\n }, [value.config.collectJsKey])\n\n return <PaymentContext.Provider value={value}>{children}</PaymentContext.Provider>\n}\n\nexport const usePaymentContext = (): PaymentContextValue => {\n const context = useContext(PaymentContext)\n if (!context) {\n throw new Error('usePaymentContext must be used within a PaymentProvider')\n }\n return context\n}\n","// Use country-list package for standard country data\nimport countryList from 'country-list'\n\n// Define our interfaces for TypeScript support\nexport interface Country {\n code: string\n name: string\n}\n\n// Some countries that need customization or that might be missing from the base package\nconst customCountries: Country[] = [\n { code: 'TW', name: 'Taiwan, Province of China' },\n { code: 'KR', name: 'Korea' },\n { code: 'KP', name: 'North Korea' },\n { code: 'PS', name: 'Palestine, State of' },\n { code: 'VA', name: 'Holy See (Vatican City State)' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)' },\n { code: 'MK', name: 'North Macedonia' },\n { code: 'SZ', name: 'Eswatini' },\n { code: 'FM', name: 'Micronesia, Federated States Of' },\n { code: 'TR', name: 'Türkiye' },\n]\n\n// Apply customizations to the country list\ncountryList.overwrite(customCountries)\n\n// Get the countries from the package and sort them alphabetically by name\nexport const countries: Country[] = countryList\n .getData()\n .sort((a: Country, b: Country) => a.name.localeCompare(b.name))\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { cn } from '../lib/utils'\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className\n )}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.ScrollUpButton className=\"flex cursor-default items-center justify-center py-1\">\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n <SelectPrimitive.Viewport className=\"p-1\">\n {children}\n </SelectPrimitive.Viewport>\n <SelectPrimitive.ScrollDownButton className=\"flex cursor-default items-center justify-center py-1\">\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold text-muted-foreground', className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CreditCard, Loader2, MapPin, User } from 'lucide-react'\nimport type { BillingDetails } from '../types'\nimport type { CollectJSResponse } from '../types/collect'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport { countries } from '../data/countries'\nimport { Button } from '../ui/button'\nimport { Input } from '../ui/input'\nimport { Label } from '../ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { cn } from '../lib/utils'\n\nexport interface CardDetailsFormProps {\n visible: boolean\n onTokenize: (token: string, billing: BillingDetails) => void\n submitLabel: string\n submitting?: boolean\n defaultValues?: Partial<BillingDetails>\n externalError?: string | null\n collectPrefix?: string\n className?: string\n onBillingChange?: (billing: BillingDetails) => void\n submitDisabled?: boolean\n}\n\nconst defaultBilling: BillingDetails = {\n firstName: '',\n lastName: '',\n address1: '',\n address2: '',\n city: '',\n stateRegion: '',\n postalCode: '',\n country: 'US',\n email: '',\n provider: 'mobius',\n}\n\nconst buildSelector = (prefix: string, field: string) => `#${prefix}-${field}`\n\nexport const CardDetailsForm: React.FC<CardDetailsFormProps> = ({\n visible,\n onTokenize,\n submitLabel,\n submitting = false,\n defaultValues,\n externalError,\n collectPrefix = 'card-form',\n className,\n onBillingChange,\n submitDisabled = false,\n}) => {\n const { config } = usePaymentContext()\n const defaultValuesKey = useMemo(() => JSON.stringify(defaultValues ?? {}), [defaultValues])\n\n const mergedDefaults: BillingDetails = useMemo(\n () => ({\n ...defaultBilling,\n ...defaultValues,\n email: defaultValues?.email ?? config.defaultUser?.email ?? defaultBilling.email,\n }),\n [defaultValuesKey, config.defaultUser?.email]\n )\n\n const [firstName, setFirstName] = useState(mergedDefaults.firstName)\n const [lastName, setLastName] = useState(mergedDefaults.lastName)\n const [address1, setAddress1] = useState(mergedDefaults.address1)\n const [address2, setAddress2] = useState(mergedDefaults.address2 ?? '')\n const [city, setCity] = useState(mergedDefaults.city)\n const [stateRegion, setStateRegion] = useState(mergedDefaults.stateRegion ?? '')\n const [postalCode, setPostalCode] = useState(mergedDefaults.postalCode)\n const [country, setCountry] = useState(mergedDefaults.country)\n const [email, setEmail] = useState(mergedDefaults.email ?? '')\n const [localError, setLocalError] = useState<string | null>(null)\n const [isTokenizing, setIsTokenizing] = useState(false)\n\n useEffect(() => {\n if (!visible) {\n setLocalError(null)\n setIsTokenizing(false)\n }\n }, [visible])\n\n useEffect(() => {\n if (!visible) return\n setFirstName(mergedDefaults.firstName)\n setLastName(mergedDefaults.lastName)\n setAddress1(mergedDefaults.address1)\n setAddress2(mergedDefaults.address2 ?? '')\n setCity(mergedDefaults.city)\n setStateRegion(mergedDefaults.stateRegion ?? '')\n setPostalCode(mergedDefaults.postalCode)\n setCountry(mergedDefaults.country)\n setEmail(mergedDefaults.email ?? '')\n }, [defaultValuesKey, mergedDefaults, visible])\n\n useEffect(() => {\n if (!onBillingChange) return\n onBillingChange({\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n })\n }, [\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onBillingChange,\n ])\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.CollectJS || !visible) {\n return\n }\n\n const handlers = (window.__doujinsCollectHandlers ||= {})\n handlers[collectPrefix] = (response: CollectJSResponse) => {\n setIsTokenizing(false)\n if (!response.token) {\n setLocalError('Payment tokenization failed. Please try again.')\n return\n }\n\n const billing: BillingDetails = {\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n }\n\n onTokenize(response.token, billing)\n }\n\n const configured = (window.__doujinsCollectConfigured ||= {})\n if (!configured[collectPrefix]) {\n window.CollectJS.configure({\n variant: 'inline',\n fields: {\n ccnumber: { selector: buildSelector(collectPrefix, 'ccnumber') },\n ccexp: { selector: buildSelector(collectPrefix, 'ccexp') },\n cvv: { selector: buildSelector(collectPrefix, 'cvv') },\n },\n callback: (response: CollectJSResponse) => {\n const fn = window.__doujinsCollectHandlers?.[collectPrefix]\n fn?.(response)\n },\n })\n configured[collectPrefix] = true\n }\n }, [\n collectPrefix,\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onTokenize,\n visible,\n ])\n\n const validate = (): boolean => {\n if (\n !firstName.trim() ||\n !lastName.trim() ||\n !address1.trim() ||\n !city.trim() ||\n !postalCode.trim() ||\n !country.trim() ||\n !email.trim()\n ) {\n setLocalError('Please complete all required billing fields.')\n return false\n }\n setLocalError(null)\n return true\n }\n\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n if (!validate()) return\n if (!window.CollectJS) {\n setLocalError('Payment form is not ready. Please try again later.')\n return\n }\n setIsTokenizing(true)\n window.CollectJS.startPaymentRequest()\n }\n\n const errorMessage = localError ?? externalError\n const collectFieldClass =\n 'flex h-11 w-full items-center rounded-md border border-dashed border-muted-foreground/40 bg-muted/20 px-3 text-sm text-muted-foreground'\n\n return (\n <form\n className={cn(\n 'space-y-6 rounded-2xl border border-border/60 bg-card/90 p-6 shadow-lg',\n className\n )}\n onSubmit={handleSubmit}\n noValidate\n >\n {errorMessage && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/10 px-4 py-2 text-sm text-destructive\">\n {errorMessage}\n </div>\n )}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-first\" className=\"flex items-center gap-2 text-muted-foreground\">\n <User className=\"h-4 w-4\" /> First name\n </Label>\n <Input\n id=\"payments-first\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-last\" className=\"flex items-center gap-2 text-muted-foreground\">\n <User className=\"h-4 w-4\" /> Last name\n </Label>\n <Input\n id=\"payments-last\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n required\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-email\">Email</Label>\n <Input\n id=\"payments-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-address1\">Address line 1</Label>\n <Input\n id=\"payments-address1\"\n value={address1}\n onChange={(e) => setAddress1(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-address2\">Address line 2 (optional)</Label>\n <Input\n id=\"payments-address2\"\n value={address2}\n onChange={(e) => setAddress2(e.target.value)}\n />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-city\">City</Label>\n <Input\n id=\"payments-city\"\n value={city}\n onChange={(e) => setCity(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-state\">State / Region</Label>\n <Input\n id=\"payments-state\"\n value={stateRegion}\n onChange={(e) => setStateRegion(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-postal\" className=\"flex items-center gap-2 text-muted-foreground\">\n <MapPin className=\"h-4 w-4\" /> Postal code\n </Label>\n <Input\n id=\"payments-postal\"\n value={postalCode}\n onChange={(e) => setPostalCode(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Country</Label>\n <Select value={country} onValueChange={setCountry}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select a country\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {countries.map((option) => (\n <SelectItem key={option.code} value={option.code}>\n {option.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Card number</Label>\n <div id={buildSelector(collectPrefix, 'ccnumber').slice(1)} className={collectFieldClass} />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Expiry</Label>\n <div id={buildSelector(collectPrefix, 'ccexp').slice(1)} className={collectFieldClass} />\n </div>\n <div className=\"space-y-2\">\n <Label>CVV</Label>\n <div id={buildSelector(collectPrefix, 'cvv').slice(1)} className={collectFieldClass} />\n </div>\n </div>\n\n <Button\n type=\"submit\"\n className=\"w-full\"\n disabled={submitting || submitDisabled || isTokenizing}\n >\n {submitting || isTokenizing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Processing…\n </>\n ) : (\n <>\n <CreditCard className=\"mr-2 h-4 w-4\" /> {submitLabel}\n </>\n )}\n </Button>\n\n <p className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" /> Your payment information is encrypted and processed securely.\n </p>\n </form>\n )\n}\n","import { useMemo } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { PaymentMethodService } from '../services/PaymentMethodService'\n\nexport const usePaymentMethodService = (): PaymentMethodService => {\n const { services } = usePaymentContext()\n return useMemo(() => services.paymentMethods, [services])\n}\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { usePaymentMethodService } from './usePaymentMethodService'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n PaymentMethod,\n PaginatedPaymentMethods,\n} from '../types'\n\nconst PAYMENT_METHODS_KEY = ['payments-ui', 'payment-methods']\n\nexport const usePaymentMethods = () => {\n const service = usePaymentMethodService()\n const queryClient = useQueryClient()\n\n const listQuery = useQuery<PaginatedPaymentMethods>({\n queryKey: PAYMENT_METHODS_KEY,\n queryFn: () => service.list({ pageSize: 50 }),\n })\n\n const createMutation = useMutation<\n PaymentMethod,\n Error,\n { token: string; billing: BillingDetails }\n >({\n mutationFn: ({ token, billing }) => {\n const payload: CreatePaymentMethodPayload = {\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n }\n return service.create(payload)\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n const deleteMutation = useMutation<void, Error, { id: string }>({\n mutationFn: ({ id }) => service.remove(id),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n return {\n listQuery,\n createMutation,\n deleteMutation,\n }\n}\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = ({ className, ...props }: DialogPrimitive.DialogPortalProps) => (\n <DialogPrimitive.Portal className={cn(className)} {...props} />\n)\nDialogPortal.displayName = DialogPrimitive.Portal.displayName\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground',\n secondary: 'border-transparent bg-secondary text-secondary-foreground',\n outline: 'text-foreground',\n destructive: 'border-transparent bg-destructive text-destructive-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\nimport { cn } from '../lib/utils'\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 border-t border-t-transparent p-[1px]',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-xl border bg-card text-card-foreground shadow', className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n))\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-2xl font-semibold leading-none tracking-tight', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n))\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n))\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","import React, { useMemo, useState } from 'react'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { usePaymentMethods } from '../hooks/usePaymentMethods'\nimport type { BillingDetails, PaymentMethod } from '../types'\nimport { Button } from '../ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../ui/dialog'\nimport { Badge } from '../ui/badge'\nimport { ScrollArea } from '../ui/scroll-area'\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../ui/card'\nimport { cn } from '../lib/utils'\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nexport interface StoredPaymentMethodsProps {\n selectedMethodId?: string | null\n onMethodSelect?: (method: PaymentMethod) => void\n showAddButton?: boolean\n heading?: string\n description?: string\n}\n\nexport const StoredPaymentMethods: React.FC<StoredPaymentMethodsProps> = ({\n selectedMethodId,\n onMethodSelect,\n showAddButton = true,\n heading = 'Payment Methods',\n description = 'Manage your saved cards',\n}) => {\n const { listQuery, createMutation, deleteMutation } = usePaymentMethods()\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [deletingId, setDeletingId] = useState<string | null>(null)\n\n const payments = useMemo(() => listQuery.data?.data ?? [], [listQuery.data])\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n createMutation.mutate({ token, billing })\n }\n\n const handleDelete = (method: PaymentMethod) => {\n setDeletingId(method.id)\n deleteMutation.mutate(\n { id: method.id },\n {\n onSettled: () => setDeletingId(null),\n }\n )\n }\n\n return (\n <Card className=\"border-border/60 bg-card/95\">\n <CardHeader className=\"flex flex-row items-start justify-between space-y-0\">\n <div className=\"space-y-1\">\n <CardTitle className=\"text-base font-semibold text-foreground\">\n <span className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\n <WalletCards className=\"h-4 w-4\" /> {heading}\n </span>\n </CardTitle>\n <CardDescription>{description}</CardDescription>\n </div>\n {showAddButton && (\n <Button size=\"sm\" onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> Add card\n </Button>\n )}\n </CardHeader>\n <CardContent>\n {listQuery.isLoading ? (\n <div className=\"flex items-center justify-center rounded-lg border border-dashed border-border/60 bg-muted/10 py-8 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading cards…\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-sm text-muted-foreground\">\n No saved payment methods yet.\n </div>\n ) : (\n <ScrollArea className=\"max-h-[320px] pr-2\">\n <div className=\"space-y-3\">\n {payments.map((method) => {\n const isSelected = selectedMethodId === method.id\n return (\n <div\n key={method.id}\n className={cn(\n 'flex flex-col gap-3 rounded-lg border px-4 py-3 transition-colors md:flex-row md:items-center md:justify-between',\n isSelected\n ? 'border-primary/60 bg-primary/5'\n : 'border-border/60 bg-background'\n )}\n >\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-foreground\">\n {formatCardLabel(method)}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Added on{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown'}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n className={cn(\n method.is_active\n ? 'bg-primary/20 text-primary'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {method.is_active ? 'Active' : 'Inactive'}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n {onMethodSelect && (\n <Button\n size=\"sm\"\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => onMethodSelect(method)}\n >\n {isSelected ? 'Selected' : 'Use card'}\n </Button>\n )}\n <Button\n size=\"icon\"\n variant=\"outline\"\n className=\"text-destructive\"\n onClick={() => handleDelete(method)}\n disabled={deletingId === method.id && deleteMutation.isPending}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n )}\n </CardContent>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>Add a new card</DialogTitle>\n <DialogDescription>\n Your card details are tokenized securely via our payment provider.\n </DialogDescription>\n </DialogHeader>\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix=\"payments-ui-card\"\n submitting={createMutation.isPending}\n submitLabel=\"Save card\"\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n />\n </DialogContent>\n </Dialog>\n </Card>\n )\n}\n","import { useMemo } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { SolanaPaymentService } from '../services/SolanaPaymentService'\n\nexport const useSolanaService = (): SolanaPaymentService => {\n const { services } = usePaymentContext()\n return useMemo(() => services.solanaPayments, [services])\n}\n","import {\n Connection,\n PublicKey,\n LAMPORTS_PER_SOL,\n ParsedAccountData,\n} from '@solana/web3.js'\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport { TokenInfo } from '../../types'\n\nexport interface TokenBalance {\n mint: string\n symbol: string\n name: string\n balance: number\n uiBalance: string\n decimals: number\n isNative: boolean\n}\n\nexport interface ParsedTokenAccount {\n mint: string\n owner: string\n amount: string\n uiAmount: number\n decimals: number\n}\n\nexport const getSolBalance = async (\n connection: Connection,\n publicKey: PublicKey\n): Promise<number> => {\n try {\n const lamports = await connection.getBalance(publicKey)\n return lamports / LAMPORTS_PER_SOL\n } catch (error) {\n console.error('Failed to fetch SOL balance:', error)\n return 0\n }\n}\n\nexport const fetchAllTokenBalances = async (\n connection: Connection,\n publicKey: PublicKey\n): Promise<Map<string, number>> => {\n const balances = new Map<string, number>()\n\n try {\n const tokenAccounts = await connection.getParsedProgramAccounts(\n TOKEN_PROGRAM_ID,\n {\n filters: [\n {\n dataSize: 165, // Size of token account\n },\n {\n memcmp: {\n offset: 32, // Owner field offset\n bytes: publicKey.toString(),\n },\n },\n ],\n }\n )\n\n for (const account of tokenAccounts) {\n const data = account.account.data as ParsedAccountData\n interface TokenParsed { info?: { mint: string; tokenAmount?: { uiAmount?: number } } }\n const parsed = data.parsed as TokenParsed\n const info = parsed?.info\n if (info && info.tokenAmount) {\n const mintAddress = info.mint\n const uiAmount = info.tokenAmount.uiAmount || 0\n\n if (uiAmount > 0) {\n balances.set(mintAddress, uiAmount)\n }\n }\n }\n } catch (error) {\n console.error('Failed to fetch token balances:', error)\n }\n\n return balances\n}\n\nexport const getTokenBalance = async (\n connection: Connection,\n publicKey: PublicKey,\n mintAddress: string\n): Promise<number> => {\n try {\n const tokenAccounts = await connection.getTokenAccountsByOwner(publicKey, {\n mint: new PublicKey(mintAddress),\n })\n\n if (tokenAccounts.value.length === 0) {\n return 0\n }\n\n const tokenAccount = tokenAccounts.value[0]\n const accountInfo = await connection.getParsedAccountInfo(\n tokenAccount.pubkey\n )\n\n const valueData = accountInfo.value?.data as ParsedAccountData | null | undefined\n if (valueData && valueData.parsed) {\n interface TokenParsed { info?: { tokenAmount?: { uiAmount?: number } } }\n const parsed = valueData.parsed as TokenParsed\n if (parsed.info?.tokenAmount) {\n return parsed.info.tokenAmount.uiAmount || 0\n }\n }\n\n return 0\n } catch (error) {\n console.error(`Failed to fetch balance for token ${mintAddress}:`, error)\n return 0\n }\n}\n\nexport const fetchSupportedTokenBalances = async (\n connection: Connection,\n publicKey: PublicKey,\n supportedTokens: TokenInfo[]\n): Promise<TokenBalance[]> => {\n const results: TokenBalance[] = []\n\n const solBalance = await getSolBalance(connection, publicKey)\n const solTokenMeta =\n supportedTokens.find((token) => token.is_native || token.symbol === 'SOL') ||\n {\n symbol: 'SOL',\n name: 'Solana',\n mint: 'So11111111111111111111111111111111111111112',\n decimals: 9,\n price: 0,\n is_native: true,\n }\n\n results.push({\n mint: solTokenMeta.mint,\n symbol: solTokenMeta.symbol,\n name: solTokenMeta.name,\n balance: solBalance,\n uiBalance: solBalance.toFixed(solTokenMeta.decimals <= 4 ? solTokenMeta.decimals : 4),\n decimals: solTokenMeta.decimals,\n isNative: true,\n })\n\n const tokenBalances = await fetchAllTokenBalances(connection, publicKey)\n\n const tokenMetaByMint = new Map(\n supportedTokens\n .filter((token) => !(token.is_native || token.symbol === 'SOL'))\n .map((token) => [token.mint, token])\n )\n\n for (const [mint, tokenMeta] of tokenMetaByMint.entries()) {\n const balance = tokenBalances.get(mint) || 0\n\n results.push({\n mint,\n symbol: tokenMeta.symbol,\n name: tokenMeta.name,\n balance,\n uiBalance: balance.toFixed(tokenMeta.decimals <= 6 ? tokenMeta.decimals : 6),\n decimals: tokenMeta.decimals,\n isNative: false,\n })\n }\n\n return results\n}\n\n/**\n * Parse token account data from RPC response\n * @param accountData - Raw account data from RPC\n * @returns Parsed token account info\n */\nexport const parseTokenAccountData = (\n accountData: any\n): ParsedTokenAccount | null => {\n try {\n const parsedInfo = accountData.parsed?.info\n if (!parsedInfo) return null\n\n return {\n mint: parsedInfo.mint,\n owner: parsedInfo.owner,\n amount: parsedInfo.tokenAmount.amount,\n uiAmount: parsedInfo.tokenAmount.uiAmount || 0,\n decimals: parsedInfo.tokenAmount.decimals,\n }\n } catch (error) {\n console.error('Failed to parse token account data:', error)\n return null\n }\n}\n\nexport const convertToUIAmount = (\n rawAmount: string,\n decimals: number\n): number => {\n try {\n const amount = parseInt(rawAmount, 10)\n return amount / Math.pow(10, decimals)\n } catch (error) {\n console.error('Failed to convert to UI amount:', error)\n return 0\n }\n}\n\nexport const convertToRawAmount = (\n uiAmount: number,\n decimals: number\n): string => {\n try {\n const rawAmount = Math.floor(uiAmount * Math.pow(10, decimals))\n return rawAmount.toString()\n } catch (error) {\n console.error('Failed to convert to raw amount:', error)\n return '0'\n }\n}\n\nexport const hasSufficientBalance = (\n balance: number,\n requiredAmount: number,\n buffer: number = 0.05\n): boolean => {\n const requiredWithBuffer = requiredAmount * (1 + buffer)\n return balance >= requiredWithBuffer\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { Buffer } from 'buffer'\nimport {\n Connection,\n Transaction,\n VersionedTransaction,\n} from '@solana/web3.js'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport { useSolanaService } from './useSolanaService'\nimport {\n fetchSupportedTokenBalances,\n hasSufficientBalance,\n} from '../utils/solana'\n\ninterface UseSolanaDirectPaymentOptions {\n priceId: string\n tokenAmount: number\n selectedToken: TokenInfo | null\n supportedTokens: TokenInfo[]\n onStart: () => void\n onConfirming: () => void\n onSuccess: (result: SubmitPaymentResponse, txId: string) => void\n onError: (error: string) => void\n}\n\ninterface SolanaDirectPaymentState {\n isBalanceLoading: boolean\n isProcessing: boolean\n balanceLabel: string\n canPay: boolean\n pay: () => Promise<void>\n}\n\ninterface TokenBalanceState {\n balance: number\n hasBalance: boolean\n}\n\nexport const useSolanaDirectPayment = (\n options: UseSolanaDirectPaymentOptions\n): SolanaDirectPaymentState => {\n const { priceId, tokenAmount, selectedToken, supportedTokens, onStart, onConfirming, onSuccess, onError } = options\n const { connected, publicKey, wallet, signTransaction } = useWallet()\n const { config } = usePaymentContext()\n const solanaService = useSolanaService()\n\n const [tokenBalance, setTokenBalance] = useState<TokenBalanceState | null>(null)\n const [isBalanceLoading, setIsBalanceLoading] = useState(false)\n const [isProcessing, setIsProcessing] = useState(false)\n\n const connection = useMemo(() => {\n const rpc = config.solanaRpcUrl ?? 'https://api.mainnet-beta.solana.com'\n return new Connection(rpc)\n }, [config.solanaRpcUrl])\n\n const fetchTokenBalance = useCallback(async () => {\n if (!connected || !publicKey || !selectedToken) {\n setTokenBalance({ balance: 0, hasBalance: false })\n return\n }\n\n try {\n setIsBalanceLoading(true)\n const balances = await fetchSupportedTokenBalances(\n connection,\n publicKey,\n supportedTokens\n )\n const balanceInfo = balances.find(\n (tb) => tb.symbol === selectedToken.symbol || tb.mint === selectedToken.mint\n )\n\n const balance = balanceInfo?.balance || 0\n const hasBalanceFlag = hasSufficientBalance(balance, tokenAmount)\n\n setTokenBalance({ balance, hasBalance: hasBalanceFlag })\n console.log('payments-ui: Solana wallet balance', {\n token: selectedToken.symbol,\n balance,\n required: tokenAmount,\n })\n } catch (error) {\n console.error('Failed to fetch token balance:', {\n token: selectedToken?.symbol,\n error,\n })\n setTokenBalance({ balance: 0, hasBalance: false })\n } finally {\n setIsBalanceLoading(false)\n }\n }, [connected, publicKey, connection, selectedToken, tokenAmount, supportedTokens])\n\n useEffect(() => {\n if (connected && publicKey && selectedToken) {\n void fetchTokenBalance()\n }\n }, [connected, publicKey, selectedToken, tokenAmount, fetchTokenBalance])\n\n const decodeTransaction = useCallback((serialized: string) => {\n const buffer = Buffer.from(serialized, 'base64')\n try {\n return VersionedTransaction.deserialize(buffer)\n } catch (err) {\n try {\n return Transaction.from(buffer)\n } catch (legacyErr) {\n console.error('Failed to deserialize transaction', legacyErr)\n throw new Error('Invalid transaction payload received from server')\n }\n }\n }, [])\n\n const isVersionedTransaction = (tx: unknown): tx is VersionedTransaction => {\n return !!tx && typeof tx === 'object' && 'version' in tx\n }\n\n const signWithWallet = useCallback(\n async (tx: Transaction | VersionedTransaction) => {\n if (!wallet) {\n throw new Error('Wallet adapter is not available')\n }\n\n const adapter = wallet.adapter as unknown as {\n signTransaction?: (transaction: Transaction) => Promise<Transaction>\n signVersionedTransaction?: (\n transaction: VersionedTransaction\n ) => Promise<VersionedTransaction>\n supportedTransactionVersions?: Set<number | 'legacy'> | null\n }\n\n if (isVersionedTransaction(tx)) {\n if (adapter.supportedTransactionVersions) {\n const supported = adapter.supportedTransactionVersions\n if (!supported.has(tx.version)) {\n throw new Error('Connected wallet does not support this transaction version')\n }\n }\n\n if (adapter.signVersionedTransaction) {\n return adapter.signVersionedTransaction(tx)\n }\n }\n\n if (adapter.signTransaction) {\n return adapter.signTransaction(tx as Transaction)\n }\n\n if (signTransaction) {\n return signTransaction(tx as Transaction)\n }\n\n throw new Error('Connected wallet cannot sign transactions')\n },\n [wallet, signTransaction]\n )\n\n const pay = useCallback(async () => {\n if (!connected || !publicKey) {\n onError('Wallet not connected')\n return\n }\n\n if (!selectedToken) {\n onError('No payment token selected')\n return\n }\n\n if (!tokenBalance?.hasBalance) {\n console.warn('payments-ui: insufficient balance for Solana direct payment', {\n token: selectedToken.symbol,\n })\n onError('Insufficient balance for this token')\n return\n }\n\n try {\n setIsProcessing(true)\n onStart()\n console.log('payments-ui: initiating Solana direct payment', {\n priceId,\n token: selectedToken.symbol,\n })\n\n const paymentData = await solanaService.generatePayment(\n priceId,\n selectedToken.symbol,\n publicKey.toBase58()\n )\n console.log('payments-ui: Solana payment intent created', {\n intentId: paymentData.intent_id,\n })\n\n const transactionToSign = decodeTransaction(paymentData.transaction)\n console.log('payments-ui: requesting Solana wallet signature')\n const signedTx = await signWithWallet(transactionToSign)\n const signedSerialized = Buffer.from(signedTx.serialize()).toString('base64')\n\n onConfirming()\n console.log('payments-ui: submitting signed Solana transaction')\n\n const result = await solanaService.submitPayment(\n signedSerialized,\n priceId,\n paymentData.intent_id,\n `Payment for subscription - ${selectedToken.symbol}`\n )\n\n console.log('payments-ui: Solana direct payment confirmed', {\n transactionId: result.transaction_id,\n })\n onSuccess(result, result.transaction_id)\n } catch (err) {\n console.error('Solana direct payment failed:', {\n priceId,\n token: selectedToken.symbol,\n error: err,\n })\n\n let errorMessage = 'Payment failed. Please try again.'\n const message =\n err instanceof Error ? err.message : typeof err === 'string' ? err : ''\n\n if (message.includes('User rejected')) {\n errorMessage = 'Payment cancelled by user'\n } else if (/insufficient\\s+funds/i.test(message)) {\n errorMessage = 'Insufficient balance for this token'\n } else if (message) {\n errorMessage = message\n }\n\n onError(errorMessage)\n } finally {\n setIsProcessing(false)\n }\n }, [\n connected,\n publicKey,\n selectedToken,\n tokenBalance?.hasBalance,\n onError,\n onStart,\n solanaService,\n priceId,\n decodeTransaction,\n signWithWallet,\n onConfirming,\n onSuccess,\n ])\n\n const balanceLabel = tokenBalance\n ? `${tokenBalance.balance.toFixed(4)} ${selectedToken?.symbol ?? ''}`\n : '--'\n\n return {\n isBalanceLoading,\n isProcessing,\n balanceLabel,\n canPay: Boolean(\n connected && tokenBalance?.hasBalance && !isProcessing\n ),\n pay,\n }\n}\n","import React from 'react'\nimport { Loader2, Wallet } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { useSolanaDirectPayment } from '../hooks/useSolanaDirectPayment'\nimport { Button } from '../ui/button'\nimport { Card } from '../ui/card'\n\ninterface DirectPaymentProps {\n priceId: string\n tokenAmount: number\n selectedToken: TokenInfo | null\n supportedTokens: TokenInfo[]\n onPaymentStart: () => void\n onPaymentConfirming: () => void\n onPaymentSuccess: (result: SubmitPaymentResponse, txId: string) => void\n onPaymentError: (error: string) => void\n}\n\nexport const DirectPayment: React.FC<DirectPaymentProps> = ({\n priceId,\n tokenAmount,\n selectedToken,\n supportedTokens,\n onPaymentStart,\n onPaymentConfirming,\n onPaymentSuccess,\n onPaymentError,\n}) => {\n const { isBalanceLoading, balanceLabel, canPay, isProcessing, pay } =\n useSolanaDirectPayment({\n priceId,\n tokenAmount,\n selectedToken,\n supportedTokens,\n onStart: onPaymentStart,\n onConfirming: onPaymentConfirming,\n onSuccess: onPaymentSuccess,\n onError: onPaymentError,\n })\n\n return (\n <Card className=\"space-y-4 border border-border/60 bg-background/80 p-6\">\n <div className=\"space-y-1\">\n <p className=\"flex items-center gap-2 text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n <Wallet className=\"h-4 w-4\" /> Pay with connected wallet\n </p>\n <p className=\"text-sm text-muted-foreground\">\n Sign the transaction directly in your Solana wallet.\n </p>\n </div>\n\n <div className=\"flex items-center justify-between rounded-lg border border-border/50 bg-muted/10 px-4 py-3 text-sm\">\n <span className=\"text-muted-foreground\">Available balance</span>\n {isBalanceLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\n ) : (\n <strong className=\"text-foreground\">{balanceLabel}</strong>\n )}\n </div>\n\n <Button\n type=\"button\"\n className=\"w-full\"\n disabled={!canPay}\n onClick={pay}\n >\n {isProcessing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Processing…\n </>\n ) : (\n <>\n <Wallet className=\"mr-2 h-4 w-4\" /> Pay with wallet\n </>\n )}\n </Button>\n </Card>\n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport QRCode from 'qrcode'\nimport type { TokenInfo, SubmitPaymentResponse } from '../types'\nimport type {\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types/solana-pay'\nimport { useSolanaService } from './useSolanaService'\n\ninterface UseSolanaQrPaymentOptions {\n priceId: string\n selectedToken: TokenInfo | null\n onSuccess: (result: SubmitPaymentResponse | string, txId: string) => void\n onError: (error: string) => void\n}\n\ninterface UseSolanaQrPaymentState {\n intent: SolanaPayQRCodeIntent | null\n qrDataUri: string | null\n isLoading: boolean\n error: string | null\n timeRemaining: number\n refresh: () => void\n}\n\nexport const useSolanaQrPayment = (\n options: UseSolanaQrPaymentOptions\n): UseSolanaQrPaymentState => {\n const { priceId, selectedToken, onSuccess, onError } = options\n const solanaService = useSolanaService()\n const tokenSymbol = selectedToken?.symbol ?? null\n const onSuccessRef = useRef(onSuccess)\n const onErrorRef = useRef(onError)\n\n const [intent, setIntent] = useState<SolanaPayQRCodeIntent | null>(null)\n const [qrDataUri, setQrDataUri] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [timeRemaining, setTimeRemaining] = useState(0)\n const [refreshNonce, setRefreshNonce] = useState(0)\n\n const pollRef = useRef<NodeJS.Timeout | null>(null)\n const countdownRef = useRef<NodeJS.Timeout | null>(null)\n\n const clearTimers = useCallback(() => {\n if (pollRef.current) {\n clearInterval(pollRef.current)\n pollRef.current = null\n }\n if (countdownRef.current) {\n clearInterval(countdownRef.current)\n countdownRef.current = null\n }\n }, [])\n\n useEffect(() => {\n return () => {\n clearTimers()\n }\n }, [clearTimers])\n\n const resetState = useCallback(\n (message?: string | null) => {\n clearTimers()\n setIntent(null)\n setQrDataUri(null)\n setTimeRemaining(0)\n setError(message ?? null)\n },\n [clearTimers]\n )\n\n useEffect(() => {\n onSuccessRef.current = onSuccess\n }, [onSuccess])\n\n useEffect(() => {\n onErrorRef.current = onError\n }, [onError])\n\n const handleError = useCallback(\n (message: string, notifyParent = false) => {\n console.error('[payments-ui] Solana Pay QR error:', message)\n clearTimers()\n resetState(message)\n if (notifyParent) {\n onErrorRef.current?.(message)\n }\n },\n [clearTimers, resetState]\n )\n\n const handleSuccess = useCallback(\n (status: SolanaPayStatusResponse) => {\n clearTimers()\n resetState(null)\n console.log('[payments-ui] Solana Pay QR confirmed', {\n paymentId: status.payment_id,\n intentId: status.intent_id,\n })\n onSuccessRef.current?.(status.payment_id, status.transaction || '')\n },\n [clearTimers, resetState]\n )\n\n const pollStatus = useCallback(\n async (reference: string) => {\n try {\n const status = await solanaService.checkPaymentStatus(reference)\n\n if (status.status === 'confirmed') {\n handleSuccess(status)\n }\n\n if (status.status === 'failed') {\n handleError(\n status.error_message || 'Payment failed. Please try again.',\n true\n )\n }\n } catch (err) {\n console.error('Failed to poll Solana Pay status:', err)\n }\n },\n [handleError, handleSuccess, solanaService]\n )\n\n const startCountdown = useCallback(\n (expiresAt: number, reference: string) => {\n const updateTime = () => {\n const remaining = Math.max(0, Math.floor(expiresAt - Date.now() / 1000))\n setTimeRemaining(remaining)\n\n if (remaining === 0) {\n handleError('Payment intent expired. Please generate a new QR code.')\n }\n }\n\n updateTime()\n\n countdownRef.current = setInterval(updateTime, 1000)\n pollRef.current = setInterval(() => void pollStatus(reference), 4000)\n },\n [handleError, pollStatus]\n )\n\n const renderQr = useCallback(async (qrIntent: SolanaPayQRCodeIntent) => {\n try {\n const dataUri = await QRCode.toDataURL(qrIntent.url, {\n width: 320,\n margin: 1,\n color: {\n dark: '#0f1116',\n light: '#ffffff',\n },\n })\n setQrDataUri(dataUri)\n } catch (err) {\n console.error('Failed to render QR code:', err)\n handleError('Unable to render QR code')\n }\n }, [handleError])\n\n useEffect(() => {\n let cancelled = false\n\n const generateIntent = async () => {\n clearTimers()\n\n if (!tokenSymbol || !priceId) {\n resetState(null)\n setIsLoading((prev) => (prev ? false : prev))\n return\n }\n\n try {\n setIsLoading(true)\n setError(null)\n console.log('[payments-ui] Requesting Solana Pay QR intent', {\n priceId,\n token: tokenSymbol,\n })\n const nextIntent = await solanaService.generateQRCode(\n priceId,\n tokenSymbol\n )\n if (cancelled) return\n setIntent(nextIntent)\n setTimeRemaining(\n Math.max(0, Math.floor(nextIntent.expires_at - Date.now() / 1000))\n )\n await renderQr(nextIntent)\n console.log('[payments-ui] Solana Pay QR ready', {\n reference: nextIntent.reference,\n })\n startCountdown(nextIntent.expires_at, nextIntent.reference)\n pollStatus(nextIntent.reference)\n } catch (err) {\n if (cancelled) return\n console.error('Failed to generate Solana Pay QR intent:', err)\n const message =\n err instanceof Error\n ? err.message\n : 'Unable to create Solana Pay QR code'\n handleError(message)\n } finally {\n if (!cancelled) {\n setIsLoading(false)\n }\n }\n }\n\n void generateIntent()\n\n return () => {\n cancelled = true\n clearTimers()\n }\n }, [\n clearTimers,\n handleError,\n pollStatus,\n priceId,\n renderQr,\n resetState,\n solanaService,\n startCountdown,\n tokenSymbol,\n refreshNonce,\n ])\n\n const refresh = useCallback(() => {\n setRefreshNonce((value) => value + 1)\n }, [])\n\n return {\n intent,\n qrDataUri,\n isLoading,\n error,\n timeRemaining,\n refresh,\n }\n}\n","import React from 'react'\nimport { Loader2, RefreshCw } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { useSolanaQrPayment } from '../hooks/useSolanaQrPayment'\nimport { Button } from '../ui/button'\nimport { Card } from '../ui/card'\n\ninterface QRCodePaymentProps {\n priceId: string\n selectedToken: TokenInfo | null\n onPaymentError: (error: string) => void\n onPaymentSuccess: (result: SubmitPaymentResponse | string, txId: string) => void\n}\n\nexport const QRCodePayment: React.FC<QRCodePaymentProps> = ({\n priceId,\n selectedToken,\n onPaymentError,\n onPaymentSuccess,\n}) => {\n const { intent, qrDataUri, isLoading, error, timeRemaining, refresh } =\n useSolanaQrPayment({\n priceId,\n selectedToken,\n onError: onPaymentError,\n onSuccess: onPaymentSuccess,\n })\n\n if (!selectedToken) {\n return (\n <div className=\"rounded-xl border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-center text-sm text-muted-foreground\">\n Select a token to continue.\n </div>\n )\n }\n\n return (\n <Card className=\"space-y-4 border border-border/60 bg-background/80 p-6\">\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"text-sm font-semibold text-foreground\">Scan with Solana Pay</p>\n <p className=\"text-sm text-muted-foreground\">\n Use any Solana Pay compatible wallet to scan and confirm.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => refresh()}\n disabled={isLoading}\n >\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <RefreshCw className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n\n {error && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/10 px-4 py-2 text-sm text-destructive\">\n {error}\n </div>\n )}\n\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border/70 bg-muted/5 p-6\">\n {qrDataUri ? (\n <img src={qrDataUri} alt=\"Solana Pay QR\" className=\"h-72 w-72 rounded-lg border border-border/40 bg-card\" />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-sm text-muted-foreground\">\n {isLoading ? (\n <>\n <Loader2 className=\"h-5 w-5 animate-spin\" /> Generating QR code…\n </>\n ) : (\n 'QR code unavailable'\n )}\n </div>\n )}\n </div>\n\n {intent && (\n <div className=\"text-center text-sm text-muted-foreground\">\n Expires in {timeRemaining}s · {intent.token_amount} {intent.token_symbol}\n </div>\n )}\n </Card>\n )\n}\n","import React from 'react'\nimport { CheckCircle, Loader2, RotateCcw, XCircle } from 'lucide-react'\nimport { Button } from '../ui/button'\n\ninterface PaymentStatusProps {\n state: 'selecting' | 'processing' | 'confirming' | 'success' | 'error'\n usdAmount: number\n solAmount?: number\n transactionId?: string | null\n errorMessage?: string | null\n onRetry?: () => void\n onClose?: () => void\n}\n\nexport const PaymentStatus: React.FC<PaymentStatusProps> = ({\n state,\n usdAmount,\n solAmount,\n transactionId,\n errorMessage,\n onRetry,\n onClose,\n}) => {\n if (state === 'processing' || state === 'confirming') {\n return (\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">\n {state === 'processing' ? 'Processing payment…' : 'Awaiting confirmation…'}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n ${usdAmount.toFixed(2)} {solAmount ? `· ≈ ${solAmount.toFixed(4)} SOL` : ''}\n </p>\n </div>\n </div>\n )\n }\n\n if (state === 'success') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <CheckCircle className=\"h-12 w-12 text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment complete</p>\n {transactionId && (\n <p className=\"text-xs text-muted-foreground\">Txn: {transactionId}</p>\n )}\n </div>\n <Button variant=\"secondary\" onClick={onClose} className=\"w-full\">\n Close\n </Button>\n </div>\n )\n }\n\n if (state === 'error') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <XCircle className=\"h-12 w-12 text-destructive\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment failed</p>\n {errorMessage && (\n <p className=\"text-sm text-muted-foreground\">{errorMessage}</p>\n )}\n </div>\n <div className=\"flex w-full flex-col gap-2 sm:flex-row\">\n {onRetry && (\n <Button variant=\"secondary\" className=\"flex-1\" onClick={onRetry}>\n <RotateCcw className=\"mr-2 h-4 w-4\" /> Try again\n </Button>\n )}\n <Button className=\"flex-1\" onClick={onClose}>\n Close\n </Button>\n </div>\n </div>\n )\n }\n\n return null\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { TokenInfo } from '../types'\nimport { useSolanaService } from './useSolanaService'\n\nexport const useSupportedTokens = () => {\n const solanaService = useSolanaService()\n const [tokens, setTokens] = useState<TokenInfo[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [lastFetched, setLastFetched] = useState<number | null>(null)\n\n // Cache duration: 5 minutes\n const CACHE_DURATION = 5 * 60 * 1000\n\n // Use refs to avoid dependency issues\n const tokensRef = useRef(tokens)\n const lastFetchedRef = useRef(lastFetched)\n\n // Update refs when state changes\n tokensRef.current = tokens\n lastFetchedRef.current = lastFetched\n\n // Fetch supported tokens from backend\n const fetchSupportedTokens = useCallback(async () => {\n // Check if we have fresh cached data\n if (\n tokensRef.current.length > 0 &&\n lastFetchedRef.current &&\n Date.now() - lastFetchedRef.current < CACHE_DURATION\n ) {\n return tokensRef.current\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n console.log('payments-ui: fetching supported Solana tokens')\n const tokens = await solanaService.getSupportedTokens()\n\n // Sort tokens by symbol for consistent ordering\n const sortedTokens = [...tokens].sort((a, b) =>\n a.symbol.localeCompare(b.symbol)\n )\n\n setTokens(sortedTokens)\n console.log('payments-ui: loaded supported tokens', {\n count: sortedTokens.length,\n })\n setLastFetched(Date.now())\n return sortedTokens\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch supported tokens'\n setError(errorMessage)\n console.error('Failed to fetch supported tokens:', error)\n\n // Return empty array on error\n return []\n } finally {\n setIsLoading(false)\n }\n }, [solanaService])\n\n // Auto-fetch on mount\n useEffect(() => {\n if (tokens.length === 0) {\n fetchSupportedTokens()\n }\n }, [tokens.length, fetchSupportedTokens])\n\n // Get token by symbol\n const getTokenBySymbol = useCallback(\n (symbol: string): TokenInfo | undefined => {\n return tokens.find((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get token by mint address\n const getTokenByMint = useCallback(\n (mintAddress: string): TokenInfo | undefined => {\n return tokens.find((token) => token.mint === mintAddress)\n },\n [tokens]\n )\n\n // Check if a token is supported\n const isTokenSupported = useCallback(\n (symbol: string): boolean => {\n return tokens.some((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get USDC token (primary stablecoin)\n const getUSDCToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('USDC')\n }, [getTokenBySymbol])\n\n // Get PYUSD token (secondary stablecoin)\n const getPYUSDToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('PYUSD')\n }, [getTokenBySymbol])\n\n // Get SOL token (native token)\n const getSOLToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('SOL')\n }, [getTokenBySymbol])\n\n // Get all stablecoins\n const getStablecoins = useCallback((): TokenInfo[] => {\n return tokens.filter((token) => ['USDC', 'PYUSD'].includes(token.symbol))\n }, [tokens])\n\n // Refresh tokens (bypass cache)\n const refreshTokens = useCallback(async () => {\n setLastFetched(null) // Clear cache\n return await fetchSupportedTokens()\n }, [fetchSupportedTokens])\n\n // Check if cache is stale\n const isCacheStale = useCallback((): boolean => {\n if (!lastFetched) return true\n return Date.now() - lastFetched > CACHE_DURATION\n }, [lastFetched])\n\n // Get token with formatted info for display\n const getTokenDisplayInfo = useCallback((token: TokenInfo) => {\n return {\n ...token,\n displayName: `${token.name} (${token.symbol})`,\n shortAddress: `${token.mint.slice(0, 4)}...${token.mint.slice(-4)}`,\n decimalPlaces: token.decimals,\n }\n }, [])\n\n const getTokenPrice = useCallback(\n (symbol: string): number => {\n const token = getTokenBySymbol(symbol)\n if (!token) return 0\n const price =\n token.price ?? 0\n return typeof price === 'number' ? price : Number(price)\n },\n [getTokenBySymbol]\n )\n\n // Calculate token amount from USD amount\n const calculateTokenAmount = useCallback(\n (usdAmount: number, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n const price = getTokenPrice(tokenSymbol)\n\n if (!token || price === 0) return '0'\n\n const tokenAmount = usdAmount / price\n const tokenAmountInSmallestUnit =\n tokenAmount * Math.pow(10, token.decimals)\n\n return Math.floor(tokenAmountInSmallestUnit).toString()\n },\n [getTokenBySymbol, getTokenPrice]\n )\n\n // Format token amount for display\n const formatTokenAmount = useCallback(\n (amount: string, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n if (!token) return '0'\n\n const numericAmount = parseFloat(amount)\n const displayAmount = numericAmount / Math.pow(10, token.decimals)\n\n return displayAmount.toFixed(token.decimals <= 6 ? token.decimals : 6)\n },\n [getTokenBySymbol]\n )\n\n return {\n tokens,\n isLoading,\n error,\n lastFetched,\n fetchSupportedTokens,\n refreshTokens,\n getTokenBySymbol,\n getTokenByMint,\n isTokenSupported,\n getUSDCToken,\n getPYUSDToken,\n getSOLToken,\n getStablecoins,\n getTokenDisplayInfo,\n getTokenPrice,\n calculateTokenAmount,\n formatTokenAmount,\n isCacheStale,\n hasTokens: tokens.length > 0,\n tokenCount: tokens.length,\n }\n}\n","import { useStore } from 'zustand'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { PaymentStoreState } from '../state/paymentStore'\n\nexport const usePaymentStore = <T>(\n selector: (state: PaymentStoreState) => T\n): T => {\n const { store } = usePaymentContext()\n return useStore(store, selector)\n}\n","import type { PaymentStoreState } from './paymentStore'\n\nexport const selectCheckoutFlow = (state: PaymentStoreState) => ({\n selectedMethodId: state.selectedMethodId,\n savedStatus: state.savedPaymentStatus,\n savedError: state.savedPaymentError,\n newCardStatus: state.newCardStatus,\n newCardError: state.newCardError,\n solanaModalOpen: state.solanaModalOpen,\n setSelectedMethod: state.setSelectedMethod,\n setSolanaModalOpen: state.setSolanaModalOpen,\n startSavedPayment: state.startSavedPayment,\n completeSavedPayment: state.completeSavedPayment,\n failSavedPayment: state.failSavedPayment,\n startNewCardPayment: state.startNewCardPayment,\n completeNewCardPayment: state.completeNewCardPayment,\n failNewCardPayment: state.failNewCardPayment,\n resetSavedPayment: state.resetSavedPayment,\n})\n\nexport const selectSolanaFlow = (state: PaymentStoreState) => ({\n tab: state.solanaTab,\n status: state.solanaStatus,\n error: state.solanaError,\n transactionId: state.solanaTransactionId,\n tokenAmount: state.solanaTokenAmount,\n selectedTokenSymbol: state.solanaSelectedToken,\n setTab: state.setSolanaTab,\n setTokenAmount: state.setSolanaTokenAmount,\n setTransactionId: state.setSolanaTransactionId,\n setSelectedTokenSymbol: state.setSolanaSelectedToken,\n startSolanaPayment: state.startSolanaPayment,\n confirmSolanaPayment: state.confirmSolanaPayment,\n completeSolanaPayment: state.completeSolanaPayment,\n failSolanaPayment: state.failSolanaPayment,\n resetSolanaPayment: state.resetSolanaPayment,\n})\n","import * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '../lib/utils'\nimport * as React from 'react'\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { CreditCard, Loader2, Wallet } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { DirectPayment } from './DirectPayment'\nimport { QRCodePayment } from './QRCodePayment'\nimport { PaymentStatus } from './PaymentStatus'\nimport { useSupportedTokens } from '../hooks/useSupportedTokens'\nimport { usePaymentStore } from '../hooks/usePaymentStore'\nimport { selectSolanaFlow } from '../state/selectors'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../ui/dialog'\nimport { Button } from '../ui/button'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { cn } from '../lib/utils'\n\ninterface SolanaPaymentSelectorProps {\n isOpen: boolean\n priceId: string\n usdAmount: number\n onClose: () => void\n onError?: (error: string) => void\n onSuccess: (result: SubmitPaymentResponse | string) => void\n}\n\nexport const SolanaPaymentSelector: React.FC<SolanaPaymentSelectorProps> = ({\n isOpen,\n onClose,\n priceId,\n usdAmount,\n onSuccess,\n onError,\n}) => {\n const { connected } = useWallet()\n const {\n tab: activeTab,\n status: paymentState,\n error: errorMessage,\n transactionId,\n tokenAmount,\n selectedTokenSymbol,\n setTab,\n setTokenAmount,\n setTransactionId,\n setSelectedTokenSymbol,\n startSolanaPayment,\n confirmSolanaPayment,\n completeSolanaPayment,\n failSolanaPayment,\n resetSolanaPayment,\n } = usePaymentStore(selectSolanaFlow)\n\n const {\n tokens,\n isLoading: tokensLoading,\n error: tokensError,\n } = useSupportedTokens()\n\n const selectedToken = useMemo<TokenInfo | null>(() => {\n if (!tokens.length) return null\n const explicit = tokens.find((token) => token.symbol === selectedTokenSymbol)\n return explicit || tokens[0]\n }, [tokens, selectedTokenSymbol])\n\n useEffect(() => {\n if (!selectedTokenSymbol && tokens.length) {\n const defaultToken =\n tokens.find((token) => token.symbol === 'SOL') || tokens[0]\n setSelectedTokenSymbol(defaultToken.symbol)\n }\n }, [tokens, selectedTokenSymbol, setSelectedTokenSymbol])\n\n const handlePaymentStart = useCallback(() => {\n startSolanaPayment()\n }, [startSolanaPayment])\n\n const handlePaymentConfirming = useCallback(() => {\n confirmSolanaPayment()\n }, [confirmSolanaPayment])\n\n const handlePaymentSuccess = useCallback(\n (result: SubmitPaymentResponse | string, txId?: string) => {\n const resolvedTx = txId || (typeof result === 'string' ? result : result.transaction_id)\n setTransactionId(resolvedTx)\n completeSolanaPayment(\n typeof result === 'string'\n ? {\n transactionId: resolvedTx,\n processor: 'solana',\n metadata: { source: 'solana-pay' },\n }\n : {\n transactionId: result.transaction_id,\n intentId: result.intent_id,\n processor: 'solana',\n metadata: {\n purchaseId: result.purchase_id,\n amount: result.amount,\n currency: result.currency,\n },\n }\n )\n\n setTimeout(() => {\n onSuccess(result)\n }, 1500)\n },\n [completeSolanaPayment, onSuccess, setTransactionId]\n )\n\n const handlePaymentError = useCallback(\n (error: string) => {\n failSolanaPayment(error)\n onError?.(error)\n },\n [failSolanaPayment, onError]\n )\n\n const handleRetry = useCallback(() => {\n resetSolanaPayment()\n setTransactionId(null)\n }, [resetSolanaPayment, setTransactionId])\n\n const handleClose = useCallback(() => {\n if (paymentState === 'processing' || paymentState === 'confirming') {\n return\n }\n\n resetSolanaPayment()\n setTransactionId(null)\n onClose()\n }, [paymentState, resetSolanaPayment, setTransactionId, onClose])\n\n useEffect(() => {\n if (!isOpen || !selectedToken || usdAmount === 0) {\n setTokenAmount(0)\n return\n }\n\n const price = selectedToken.price ?? 0\n if (!price || price <= 0) {\n setTokenAmount(0)\n return\n }\n\n setTokenAmount(usdAmount / price)\n }, [isOpen, usdAmount, selectedToken, setTokenAmount])\n\n const handleTokenChange = useCallback(\n (value: string) => {\n setSelectedTokenSymbol(value)\n },\n [setSelectedTokenSymbol]\n )\n\n const wasConnectedRef = useRef(connected)\n\n useEffect(() => {\n if (connected && !wasConnectedRef.current) {\n setTab('wallet')\n }\n\n if (!connected && wasConnectedRef.current) {\n setTab('qr')\n }\n\n wasConnectedRef.current = connected\n }, [connected, setTab])\n\n const renderBody = () => {\n if (paymentState !== 'selecting') {\n return (\n <PaymentStatus\n state={paymentState}\n usdAmount={usdAmount}\n solAmount={tokenAmount}\n onRetry={handleRetry}\n onClose={handleClose}\n errorMessage={errorMessage}\n transactionId={transactionId}\n />\n )\n }\n\n return (\n <div className=\"space-y-6\">\n {tokensLoading ? (\n <div className=\"flex items-center justify-center rounded-lg border border-dashed border-border/60 bg-muted/10 py-8 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading supported tokens…\n </div>\n ) : tokensError ? (\n <div className=\"rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\">\n {tokensError}\n </div>\n ) : !tokens.length ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-sm text-muted-foreground\">\n No payment tokens available.\n </div>\n ) : (\n <>\n <div className=\"rounded-xl border border-border/60 bg-muted/10 p-4 text-center\">\n <div className=\"text-2xl font-semibold text-foreground\">\n ${usdAmount.toFixed(2)} USD\n </div>\n {selectedToken && tokenAmount > 0 && (\n <div className=\"text-sm text-muted-foreground\">\n ≈ {tokenAmount.toFixed(selectedToken.symbol === 'SOL' ? 4 : 2)} {selectedToken.symbol}\n </div>\n )}\n </div>\n\n <Select value={selectedToken?.symbol ?? ''} onValueChange={handleTokenChange}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select token\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {tokens.map((token) => (\n <SelectItem key={token.symbol} value={token.symbol}>\n {token.name} ({token.symbol})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Tabs\n value={activeTab}\n onValueChange={(value) => setTab(value as 'wallet' | 'qr')}\n className=\"w-full\"\n >\n <TabsList className=\"grid w-full grid-cols-2 bg-muted/20\">\n <TabsTrigger value=\"wallet\" disabled={!connected}>\n <Wallet className=\"mr-2 h-4 w-4\" /> Pay with Wallet\n </TabsTrigger>\n <TabsTrigger value=\"qr\">\n <CreditCard className=\"mr-2 h-4 w-4\" /> Scan QR Code\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"wallet\" className=\"mt-4\">\n {activeTab === 'wallet' && (\n <DirectPayment\n priceId={priceId}\n tokenAmount={tokenAmount}\n selectedToken={selectedToken}\n supportedTokens={tokens}\n onPaymentStart={handlePaymentStart}\n onPaymentConfirming={handlePaymentConfirming}\n onPaymentSuccess={handlePaymentSuccess}\n onPaymentError={handlePaymentError}\n />\n )}\n </TabsContent>\n <TabsContent value=\"qr\" className=\"mt-4\">\n {activeTab === 'qr' && (\n <QRCodePayment\n priceId={priceId}\n selectedToken={selectedToken}\n onPaymentError={handlePaymentError}\n onPaymentSuccess={handlePaymentSuccess}\n />\n )}\n </TabsContent>\n </Tabs>\n\n {!connected && activeTab === 'wallet' && (\n <div className=\"rounded-xl border border-amber-500/40 bg-amber-500/10 p-4 text-sm text-amber-100\">\n Please connect your Solana wallet to complete this payment, or switch to QR mode.\n </div>\n )}\n </>\n )}\n </div>\n )\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader className=\"space-y-1\">\n <DialogTitle>Complete your payment</DialogTitle>\n <DialogDescription>\n Select a token and preferred method. We’ll guide you through the rest.\n </DialogDescription>\n </DialogHeader>\n {renderBody()}\n </DialogContent>\n </Dialog>\n )\n}\n","import React from 'react'\nimport { CreditCard, Sparkles } from 'lucide-react'\nimport type { BillingDetails, PaymentMethod, SubmitPaymentResponse } from '../types'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { StoredPaymentMethods } from './StoredPaymentMethods'\nimport { SolanaPaymentSelector } from './SolanaPaymentSelector'\nimport { usePaymentStore } from '../hooks/usePaymentStore'\nimport { selectCheckoutFlow } from '../state/selectors'\nimport { Button } from '../ui/button'\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../ui/card'\nimport { Separator } from '../ui/separator'\n\nexport interface PaymentExperienceProps {\n priceId: string\n usdAmount: number\n onNewCardPayment?: (payload: {\n token: string\n billing: BillingDetails\n }) => Promise<void> | void\n onSavedMethodPayment?: (payload: {\n paymentMethodId: string\n amount: number\n }) => Promise<void> | void\n enableNewCard?: boolean\n enableStoredMethods?: boolean\n enableSolanaPay?: boolean\n checkoutSummary?: React.ReactNode\n onSolanaSuccess?: (result: SubmitPaymentResponse | string) => void\n onSolanaError?: (error: string) => void\n}\n\nexport const PaymentExperience: React.FC<PaymentExperienceProps> = ({\n priceId,\n usdAmount,\n onNewCardPayment,\n onSavedMethodPayment,\n enableNewCard = true,\n enableStoredMethods = true,\n enableSolanaPay = true,\n checkoutSummary,\n onSolanaSuccess,\n onSolanaError,\n}) => {\n const showNewCard = enableNewCard && Boolean(onNewCardPayment)\n const showStored = enableStoredMethods\n\n const {\n selectedMethodId,\n savedStatus,\n savedError,\n newCardStatus,\n newCardError,\n solanaModalOpen,\n setSelectedMethod,\n setSolanaModalOpen,\n startSavedPayment,\n completeSavedPayment,\n failSavedPayment,\n startNewCardPayment,\n completeNewCardPayment,\n failNewCardPayment,\n resetSavedPayment,\n } = usePaymentStore(selectCheckoutFlow)\n\n const handleMethodSelect = (method: PaymentMethod) => {\n setSelectedMethod(method.id)\n resetSavedPayment()\n }\n\n const handleNewCardTokenize = async (token: string, billing: BillingDetails) => {\n if (!onNewCardPayment) return\n try {\n startNewCardPayment()\n await onNewCardPayment({ token, billing })\n completeNewCardPayment()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unable to complete payment'\n failNewCardPayment(message)\n }\n }\n\n const handleSavedPayment = async () => {\n if (!onSavedMethodPayment || !selectedMethodId) return\n try {\n startSavedPayment()\n await onSavedMethodPayment({\n paymentMethodId: selectedMethodId,\n amount: usdAmount,\n })\n completeSavedPayment()\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : 'Unable to complete payment with saved card'\n failSavedPayment(message)\n }\n }\n\n return (\n <div className=\"space-y-8\">\n <Card className=\"border-border/60 bg-card/95\">\n <CardHeader className=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2 text-lg text-foreground\">\n <CreditCard className=\"h-5 w-5 text-primary\" /> Secure checkout\n </CardTitle>\n <CardDescription>Amount due: ${usdAmount.toFixed(2)}</CardDescription>\n </div>\n {checkoutSummary && <div>{checkoutSummary}</div>}\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-8 lg:grid-cols-2\">\n {showStored && (\n <div className=\"space-y-4\">\n <StoredPaymentMethods\n selectedMethodId={selectedMethodId}\n onMethodSelect={handleMethodSelect}\n heading=\"Saved cards\"\n description=\"Use or manage your saved payment methods.\"\n />\n {onSavedMethodPayment && (\n <Button\n className=\"w-full\"\n disabled={!selectedMethodId || savedStatus === 'processing'}\n onClick={handleSavedPayment}\n >\n {savedStatus === 'processing' ? 'Processing…' : 'Pay with selected card'}\n </Button>\n )}\n {savedError && (\n <p className=\"text-sm text-destructive\">{savedError}</p>\n )}\n </div>\n )}\n\n {showNewCard && (\n <div className=\"space-y-4\">\n <div className=\"rounded-2xl border border-border/60 bg-background/80 p-6\">\n <div className=\"mb-4 space-y-1\">\n <p className=\"flex items-center gap-2 text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" /> Pay with a new card\n </p>\n <p className=\"text-sm text-muted-foreground\">\n Card details are tokenized via Collect.js and never hit your server.\n </p>\n </div>\n <CardDetailsForm\n visible\n submitLabel=\"Pay now\"\n submitting={newCardStatus === 'processing'}\n externalError={newCardError}\n onTokenize={handleNewCardTokenize}\n />\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n\n {enableSolanaPay && (\n <Card className=\"border border-primary/40 bg-primary/5\">\n <CardContent className=\"flex flex-col gap-4 text-sm text-primary md:flex-row md:items-center md:justify-between\">\n <div>\n <p className=\"flex items-center gap-2 text-base font-semibold text-primary\">\n <Sparkles className=\"h-4 w-4\" /> Prefer Solana Pay?\n </p>\n <p className=\"text-sm text-primary/80\">Use a Solana wallet or QR code for instant settlement.</p>\n </div>\n <Button onClick={() => setSolanaModalOpen(true)}>Open Solana Pay</Button>\n </CardContent>\n </Card>\n )}\n\n {enableSolanaPay && (\n <SolanaPaymentSelector\n isOpen={solanaModalOpen}\n onClose={() => setSolanaModalOpen(false)}\n priceId={priceId}\n usdAmount={usdAmount}\n onSuccess={(result) => {\n setSolanaModalOpen(false)\n onSolanaSuccess?.(result)\n }}\n onError={onSolanaError}\n />\n )}\n </div>\n )\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react'\nimport { useWallet, useConnection } from '@solana/wallet-adapter-react'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddress, getAccount } from '@solana/spl-token'\nimport { TokenBalance, TokenInfo } from '../types'\n\nexport const useTokenBalance = (tokens: TokenInfo[]) => {\n const { publicKey } = useWallet()\n const { connection } = useConnection()\n\n const [balances, setBalances] = useState<TokenBalance[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Fetch balance for a specific token\n const fetchTokenBalance = useCallback(\n async (\n token: TokenInfo,\n walletAddress: PublicKey\n ): Promise<TokenBalance> => {\n try {\n const mintPublicKey = new PublicKey(token.mint)\n\n // Get the associated token account address\n const associatedTokenAddress = await getAssociatedTokenAddress(\n mintPublicKey,\n walletAddress\n )\n\n try {\n // Get the token account info\n const tokenAccount = await getAccount(\n connection,\n associatedTokenAddress\n )\n\n const balance = Number(tokenAccount.amount)\n const uiAmount = balance / Math.pow(10, token.decimals)\n\n return {\n token,\n balance,\n uiAmount,\n hasBalance: balance > 0,\n }\n } catch (accountError) {\n // Account doesn't exist, balance is 0\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n } catch (error) {\n console.error(`Failed to fetch balance for ${token.symbol}:`, error)\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n },\n [connection]\n )\n\n // Memoize token serialization to prevent unnecessary refetches\n const tokensKey = useMemo(() => tokens.map((t) => t.mint).join(','), [tokens])\n\n // Auto-fetch balances when wallet or tokens change\n useEffect(() => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n const fetchAllBalances = async () => {\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }\n\n fetchAllBalances()\n }, [publicKey, tokensKey, fetchTokenBalance]) // Use stable dependencies\n\n // Get balance for a specific token\n const getTokenBalance = useCallback(\n (tokenSymbol: string): TokenBalance | undefined => {\n return balances.find((balance) => balance.token.symbol === tokenSymbol)\n },\n [balances]\n )\n\n // Check if user has sufficient balance for a payment\n const hasSufficientBalance = useCallback(\n (tokenSymbol: string, requiredAmount: number): boolean => {\n const balance = getTokenBalance(tokenSymbol)\n return balance ? balance.uiAmount >= requiredAmount : false\n },\n [getTokenBalance]\n )\n\n // Get formatted balance string\n const getFormattedBalance = useCallback(\n (tokenSymbol: string): string => {\n const balance = getTokenBalance(tokenSymbol)\n if (!balance) return '0.00'\n\n // Format with appropriate decimal places\n if (balance.uiAmount < 0.01) {\n return balance.uiAmount.toFixed(6)\n } else if (balance.uiAmount < 1) {\n return balance.uiAmount.toFixed(4)\n } else {\n return balance.uiAmount.toFixed(2)\n }\n },\n [getTokenBalance]\n )\n\n // Refresh balances manually\n const refreshBalances = useCallback(async () => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }, [publicKey, tokens, fetchTokenBalance])\n\n // Get total USD value of balances (would need price data)\n const getTotalValue = useCallback(\n (priceData?: Record<string, number>): number => {\n if (!priceData) return 0\n\n return balances.reduce((total, balance) => {\n const price = priceData[balance.token.symbol] || 0\n return total + balance.uiAmount * price\n }, 0)\n },\n [balances]\n )\n\n // Sort balances by amount (highest first)\n const sortedBalances = [...balances].sort((a, b) => b.uiAmount - a.uiAmount)\n\n // Get balances with positive amounts only\n const positiveBalances = balances.filter((balance) => balance.hasBalance)\n\n return {\n balances: sortedBalances,\n positiveBalances,\n isLoading,\n error,\n refreshBalances,\n getTokenBalance,\n hasSufficientBalance,\n getFormattedBalance,\n getTotalValue,\n hasAnyBalance: positiveBalances.length > 0,\n isConnected: !!publicKey,\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { Transaction } from '@solana/web3.js'\nimport { Buffer } from 'buffer'\nimport { TokenInfo, SubmitPaymentResponse } from '../types'\nimport { useSolanaService } from './useSolanaService'\n\ninterface DirectPaymentState {\n loading: boolean\n error: string | null\n success: boolean\n transactionId: string | null\n}\n\ninterface UseDirectWalletPaymentReturn {\n paymentState: DirectPaymentState\n payWithWallet: (token: TokenInfo, priceId: string) => Promise<void>\n resetPayment: () => void\n}\n\nexport const useDirectWalletPayment = (): UseDirectWalletPaymentReturn => {\n const { publicKey, signTransaction, connected } = useWallet()\n const solanaService = useSolanaService()\n\n const [paymentState, setPaymentState] = useState<DirectPaymentState>({\n loading: false,\n error: null,\n success: false,\n transactionId: null,\n })\n\n const resetPayment = useCallback(() => {\n setPaymentState({\n loading: false,\n error: null,\n success: false,\n transactionId: null,\n })\n }, [])\n\n const payWithWallet = useCallback(\n async (token: TokenInfo, priceId: string) => {\n if (!connected || !publicKey || !signTransaction) {\n setPaymentState((prev) => ({\n ...prev,\n error: 'Wallet not connected. Please connect your wallet first.',\n }))\n return\n }\n\n setPaymentState({\n loading: true,\n error: null,\n success: false,\n transactionId: null,\n })\n\n try {\n console.log('Generating payment transaction...', {\n token: token.symbol,\n priceId,\n })\n const paymentData = await solanaService.generatePayment(\n priceId,\n token.symbol,\n publicKey.toBase58()\n )\n\n const transactionBuffer = Buffer.from(paymentData.transaction, 'base64')\n const transaction = Transaction.from(transactionBuffer)\n\n console.log('Requesting wallet signature...')\n const signedTransaction = await signTransaction(transaction)\n\n const signedTransactionBase64 = signedTransaction\n .serialize()\n .toString('base64')\n\n console.log('Submitting signed transaction...')\n const submitResult: SubmitPaymentResponse = await solanaService.submitPayment(\n signedTransactionBase64,\n priceId,\n paymentData.intent_id\n )\n\n setPaymentState({\n loading: false,\n error: null,\n success: true,\n transactionId: submitResult.transaction_id,\n })\n\n console.log('Payment successful!', submitResult)\n } catch (err: unknown) {\n console.error('Payment failed:', err)\n\n let errorMessage = 'Payment failed. Please try again.'\n const message =\n err instanceof Error ? err.message : typeof err === 'string' ? err : ''\n\n if (message.includes('User rejected')) {\n errorMessage = 'Payment cancelled by user.'\n } else if (/insufficient\\s+funds/i.test(message)) {\n errorMessage = `Insufficient ${token.symbol} balance.`\n } else if (/network/i.test(message)) {\n errorMessage = 'Network error. Please check your connection.'\n } else if (message) {\n errorMessage = message\n }\n\n setPaymentState({\n loading: false,\n error: errorMessage,\n success: false,\n transactionId: null,\n })\n }\n },\n [connected, publicKey, signTransaction, solanaService]\n )\n\n return {\n paymentState,\n payWithWallet,\n resetPayment,\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { useConnection } from '@solana/wallet-adapter-react'\nimport { TransactionStatus, PaymentStatusResponse } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface PaymentStatusHookOptions {\n transactionId?: string\n purchaseId?: string\n onConfirmed?: () => void\n onFailed?: (error: string) => void\n maxRetries?: number\n retryInterval?: number // milliseconds\n}\n\nexport const usePaymentStatus = (options: PaymentStatusHookOptions = {}) => {\n const { connection } = useConnection()\n const { services } = usePaymentContext()\n const billingApi = services.billingApi\n const {\n transactionId,\n purchaseId,\n onConfirmed,\n onFailed,\n maxRetries = 30, // 5 minutes with 10s intervals\n retryInterval = 10000, // 10 seconds\n } = options\n\n const [status, setStatus] = useState<TransactionStatus | null>(null)\n const [paymentStatus, setPaymentStatus] =\n useState<PaymentStatusResponse | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [retryCount, setRetryCount] = useState(0)\n\n const intervalRef = useRef<NodeJS.Timeout | null>(null)\n const isMonitoringRef = useRef(false)\n\n // Clear interval on unmount\n useEffect(() => {\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [])\n\n // Check transaction status on Solana blockchain\n const checkTransactionStatus = useCallback(\n async (signature: string): Promise<TransactionStatus> => {\n try {\n const statusResponse = await connection.getSignatureStatus(signature, {\n searchTransactionHistory: true,\n })\n\n if (statusResponse.value === null) {\n return {\n signature,\n confirmationStatus: 'processed',\n confirmations: 0,\n error: 'Transaction not found',\n }\n }\n\n const { confirmationStatus, confirmations, slot, err } =\n statusResponse.value\n\n // Get block time if we have a slot\n let blockTime: number | undefined\n if (slot) {\n try {\n blockTime = (await connection.getBlockTime(slot)) || undefined\n } catch (error) {\n // Block time not available\n }\n }\n\n return {\n signature,\n confirmationStatus: err\n ? 'failed'\n : confirmationStatus || 'processed',\n confirmations: confirmations || 0,\n slot,\n blockTime,\n error: err ? `Transaction failed: ${err}` : undefined,\n }\n } catch (error) {\n console.error('Failed to check transaction status:', {\n signature,\n error,\n })\n return {\n signature,\n confirmationStatus: 'failed',\n confirmations: 0,\n error:\n error instanceof Error\n ? error.message\n : 'Failed to check transaction status',\n }\n }\n },\n [connection]\n )\n\n // Check payment status from backend\n const checkPaymentStatus = useCallback(\n async (id: string): Promise<PaymentStatusResponse | null> => {\n try {\n const data = await billingApi.get<PaymentStatusResponse>(\n `/payment/status/${id}`\n )\n return data\n } catch (error: any) {\n if (error?.status === 404) {\n return null // Payment not found\n }\n console.error('Failed to check payment status:', {\n purchaseId: id,\n error,\n })\n return null\n }\n },\n [billingApi]\n )\n\n // Monitor transaction until confirmed or failed\n const startMonitoring = useCallback(async () => {\n if (isMonitoringRef.current || (!transactionId && !purchaseId)) {\n return\n }\n\n isMonitoringRef.current = true\n setIsLoading(true)\n setError(null)\n setRetryCount(0)\n\n const monitor = async () => {\n try {\n let currentStatus: TransactionStatus | null = null\n let currentPaymentStatus: PaymentStatusResponse | null = null\n\n // Check blockchain status if we have a transaction ID\n if (transactionId) {\n currentStatus = await checkTransactionStatus(transactionId)\n setStatus(currentStatus)\n }\n\n // Check backend payment status if we have a purchase ID\n if (purchaseId) {\n currentPaymentStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(currentPaymentStatus)\n }\n\n // Determine if we should stop monitoring\n const isBlockchainConfirmed =\n currentStatus?.confirmationStatus === 'finalized' ||\n currentStatus?.confirmationStatus === 'confirmed'\n const isBackendConfirmed = currentPaymentStatus?.status === 'confirmed'\n const isBlockchainFailed =\n currentStatus?.confirmationStatus === 'failed' || currentStatus?.error\n const isBackendFailed = currentPaymentStatus?.status === 'failed'\n\n if (isBlockchainConfirmed || isBackendConfirmed) {\n // Payment confirmed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n onConfirmed?.()\n return\n }\n\n if (isBlockchainFailed || isBackendFailed) {\n // Payment failed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const errorMessage = currentStatus?.error || 'Payment failed'\n setError(errorMessage)\n onFailed?.(errorMessage)\n return\n }\n\n // Continue monitoring\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n // Max retries reached\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const timeoutError =\n 'Payment confirmation timeout - please check your transaction manually'\n setError(timeoutError)\n onFailed?.(timeoutError)\n return\n }\n } catch (error) {\n console.error('Error monitoring payment:', {\n transactionId,\n purchaseId,\n error,\n })\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const monitorError = 'Failed to monitor payment status'\n setError(monitorError)\n onFailed?.(monitorError)\n }\n }\n }\n\n // Start monitoring immediately\n await monitor()\n\n // Continue monitoring at intervals\n intervalRef.current = setInterval(monitor, retryInterval)\n }, [\n transactionId,\n purchaseId,\n checkTransactionStatus,\n checkPaymentStatus,\n onConfirmed,\n onFailed,\n maxRetries,\n retryInterval,\n retryCount,\n ])\n\n // Stop monitoring\n const stopMonitoring = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n }, [])\n\n // Manual status check\n const checkStatus = useCallback(async () => {\n if (!transactionId && !purchaseId) return\n\n setIsLoading(true)\n setError(null)\n\n try {\n if (transactionId) {\n const txStatus = await checkTransactionStatus(transactionId)\n setStatus(txStatus)\n }\n\n if (purchaseId) {\n const payStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(payStatus)\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to check status'\n setError(errorMessage)\n console.error('Failed to check payment status:', {\n transactionId,\n purchaseId,\n error,\n })\n } finally {\n setIsLoading(false)\n }\n }, [transactionId, purchaseId, checkTransactionStatus, checkPaymentStatus])\n\n // Auto-start monitoring when transaction/purchase ID is provided\n useEffect(() => {\n if ((transactionId || purchaseId) && !isMonitoringRef.current) {\n startMonitoring()\n }\n\n return () => {\n stopMonitoring()\n }\n }, [transactionId, purchaseId, startMonitoring, stopMonitoring])\n\n // Get current confirmation status\n const getConfirmationStatus = useCallback(() => {\n if (paymentStatus?.status === 'confirmed') return 'confirmed'\n if (paymentStatus?.status === 'failed') return 'failed'\n if (status?.confirmationStatus === 'finalized') return 'confirmed'\n if (status?.confirmationStatus === 'confirmed') return 'confirmed'\n if (status?.confirmationStatus === 'failed' || status?.error)\n return 'failed'\n return 'pending'\n }, [status, paymentStatus])\n\n // Get Solscan URL for transaction\n const getSolscanUrl = useCallback(\n (signature?: string) => {\n const txId = signature || transactionId\n if (!txId) return null\n return `https://solscan.io/tx/${txId}`\n },\n [transactionId]\n )\n\n return {\n status,\n paymentStatus,\n isLoading,\n error,\n retryCount,\n maxRetries,\n isMonitoring: isMonitoringRef.current,\n confirmationStatus: getConfirmationStatus(),\n startMonitoring,\n stopMonitoring,\n checkStatus,\n getSolscanUrl,\n isConfirmed: getConfirmationStatus() === 'confirmed',\n isFailed: getConfirmationStatus() === 'failed',\n isPending: getConfirmationStatus() === 'pending',\n }\n}\n","import { useCallback } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { BillingDetails } from '../types/billing'\nimport type {\n CCBillSubscribePayload,\n FlexFormResponse,\n GenerateFlexFormURLBodyParams,\n NmiSubscribePayload,\n SubscriptionResponse,\n} from '../types/subscription'\n\nexport interface SubscribeWithCardParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentToken: string\n billing: BillingDetails\n}\n\nexport interface SubscribeWithSavedMethodParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentMethodId: string\n email?: string\n}\n\nexport interface SubscribeWithCCBillParams {\n priceId?: string | null\n email: string\n firstName: string\n lastName: string\n zipCode: string\n country: string\n processor?: string\n}\n\nexport interface GenerateFlexFormParams {\n priceId?: string | null\n firstName: string\n lastName: string\n address1: string\n city: string\n state: string\n zipCode: string\n country: string\n}\n\nexport const useSubscriptionActions = () => {\n const { services } = usePaymentContext()\n\n const ensurePrice = (priceId?: string | null) => {\n if (!priceId) {\n throw new Error('payments-ui: priceId is required for subscription actions')\n }\n return priceId\n }\n\n const subscribeWithCard = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentToken,\n billing,\n }: SubscribeWithCardParams): Promise<SubscriptionResponse> => {\n const payload: NmiSubscribePayload = {\n priceId: ensurePrice(priceId),\n paymentToken,\n processor,\n provider,\n email: billing.email,\n firstName: billing.firstName,\n lastName: billing.lastName,\n address1: billing.address1,\n city: billing.city,\n state: billing.stateRegion,\n zipCode: billing.postalCode,\n country: billing.country,\n }\n return services.subscriptions.subscribe('nmi', payload)\n },\n [services]\n )\n\n const subscribeWithSavedMethod = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentMethodId,\n email,\n }: SubscribeWithSavedMethodParams): Promise<SubscriptionResponse> => {\n const payload: NmiSubscribePayload = {\n priceId: ensurePrice(priceId),\n paymentMethodId,\n processor,\n provider,\n email,\n }\n return services.subscriptions.subscribe('nmi', payload)\n },\n [services]\n )\n\n const subscribeWithCCBill = useCallback(\n async ({\n priceId,\n email,\n firstName,\n lastName,\n zipCode,\n country,\n processor = 'ccbill',\n }: SubscribeWithCCBillParams): Promise<SubscriptionResponse> => {\n const payload: CCBillSubscribePayload = {\n priceId: ensurePrice(priceId),\n email,\n firstName,\n lastName,\n zipCode,\n country,\n processor,\n }\n return services.subscriptions.subscribe('ccbill', payload)\n },\n [services]\n )\n\n const generateFlexFormUrl = useCallback(\n async ({\n priceId,\n firstName,\n lastName,\n address1,\n city,\n state,\n zipCode,\n country,\n }: GenerateFlexFormParams): Promise<FlexFormResponse> => {\n const payload: GenerateFlexFormURLBodyParams = {\n price_id: ensurePrice(priceId),\n first_name: firstName,\n last_name: lastName,\n address1,\n city,\n state,\n zip_code: zipCode,\n country,\n }\n return services.subscriptions.generateFlexFormUrl(payload)\n },\n [services]\n )\n\n return {\n subscribeWithCard,\n subscribeWithSavedMethod,\n subscribeWithCCBill,\n generateFlexFormUrl,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/collect.ts","../src/services/apiClient.ts","../src/services/CardPaymentService.ts","../src/services/PaymentMethodService.ts","../src/services/SolanaPaymentService.ts","../src/services/TokenCatalog.ts","../src/services/WalletGateway.ts","../src/services/SubscriptionService.ts","../src/services/SolanaWalletService.ts","../src/core/PaymentApp.ts","../src/state/paymentStore.ts","../src/context/PaymentContext.tsx","../src/data/countries.ts","../node_modules/@radix-ui/react-compose-refs/src/compose-refs.tsx","../node_modules/@radix-ui/react-slot/src/slot.tsx","../src/lib/utils.ts","../src/ui/button.tsx","../src/ui/input.tsx","../src/ui/label.tsx","../src/ui/select.tsx","../src/components/CardDetailsForm.tsx","../src/hooks/usePaymentMethodService.ts","../src/hooks/usePaymentMethods.ts","../src/ui/dialog.tsx","../src/ui/badge.tsx","../src/ui/scroll-area.tsx","../src/ui/card.tsx","../src/components/StoredPaymentMethods.tsx","../src/hooks/useSolanaService.ts","../src/utils/solana/tokenUtils.ts","../src/hooks/useSolanaDirectPayment.ts","../src/components/DirectPayment.tsx","../src/hooks/useSolanaQrPayment.ts","../src/components/QRCodePayment.tsx","../src/components/PaymentStatus.tsx","../src/hooks/useSupportedTokens.ts","../src/hooks/usePaymentStore.ts","../src/state/selectors.ts","../src/ui/tabs.tsx","../src/components/SolanaPaymentSelector.tsx","../src/components/PaymentExperience.tsx","../src/ui/table.tsx","../src/ui/alert-dialog.tsx","../src/ui/textarea.tsx","../src/components/account/CancelMembershipDialog.tsx","../src/components/account/BillingHistory.tsx","../src/components/account/PaymentMethodsSection.tsx","../src/hooks/useWalletList.ts","../src/hooks/useWalletVerification.ts","../src/hooks/useWalletConnection.ts","../src/components/account/solana/WalletCard.tsx","../src/components/account/solana/EmptyWalletState.tsx","../src/components/account/solana/SolanaWalletSection.tsx","../src/components/account/WalletManagement.tsx","../src/components/subscribe/WalletModal.tsx","../src/ui/checkbox.tsx","../src/components/subscribe/WalletDialog.tsx","../src/components/checkout/SubscriptionSuccessDialog.tsx","../src/hooks/useSubscriptionActions.ts","../src/components/checkout/SubscriptionCheckoutModal.tsx","../src/hooks/useTokenBalance.ts","../src/hooks/useDirectWalletPayment.ts","../src/hooks/usePaymentStatus.ts","../src/hooks/useAlternativePaymentProvider.ts"],"names":["data","createStore","createContext","useMemo","useEffect","jsx","useContext","countryList","Slot","React3","props","twMerge","clsx","cva","React4","React5","React6","LabelPrimitive","SelectPrimitive","React7","jsxs","ChevronDown","ChevronUp","Check","useState","User","MapPin","Fragment","Loader2","CreditCard","useQueryClient","useQuery","useMutation","DialogPrimitive","React9","X","React10","ScrollAreaPrimitive","React11","WalletCards","Trash2","LAMPORTS_PER_SOL","TOKEN_PROGRAM_ID","useWallet","Connection","useCallback","buffer","Buffer","VersionedTransaction","Transaction","Wallet","useRef","QRCode","RefreshCw","CheckCircle","XCircle","RotateCcw","tokens","error","useStore","TabsPrimitive","React13","Sparkles","React15","AlertDialogPrimitive","React16","React17","Ban","TriangleAlert","notifyDefault","useInfiniteQuery","formatCardLabel","wallets","bs58","message","Star","AlertCircle","Copy","ExternalLink","Shield","WalletMultiButton","PublicKey","React18","CheckboxPrimitive","initialState","UserRound","Calendar","KeyRound","useConnection","getAssociatedTokenAddress","getAccount","hasSufficientBalance"],"mappings":"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","file":"index.cjs","sourcesContent":["const SCRIPT_SRC = 'https://secure.networkmerchants.com/token/Collect.js'\n\nexport const loadCollectJs = (tokenizationKey: string): void => {\n if (typeof document === 'undefined') return\n const trimmed = tokenizationKey?.trim()\n if (!trimmed || trimmed.length < 10) {\n console.warn('payments-ui: invalid Collect.js key, skipping load')\n return\n }\n\n const existing = document.querySelector(`script[src=\"${SCRIPT_SRC}\"]`)\n if (existing) return\n\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.setAttribute('data-tokenization-key', trimmed)\n script.setAttribute('data-field-ccnumber-placeholder', '0000 0000 0000 0000')\n script.setAttribute('data-field-ccexp-placeholder', '10 / 25')\n script.setAttribute('data-field-cvv-placeholder', '123')\n script.setAttribute('data-variant', 'inline')\n script.async = true\n script.addEventListener('load', () => {\n console.log('payments-ui: Collect.js loaded')\n })\n script.addEventListener('error', (event) => {\n console.error('payments-ui: failed to load Collect.js', event)\n })\n document.head.appendChild(script)\n}\n","import type {\n PaymentFetcher,\n PaymentConfig,\n} from '../types/config'\n\nexport type RequestOptions = {\n params?: Record<string, string | number>\n query?: Record<string, string | number | undefined>\n body?: Record<string, unknown>\n headers?: Record<string, string>\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'\n\nexport interface ApiClient {\n request: <T>(method: HttpMethod, path: string, options?: RequestOptions) => Promise<T>\n get: <T>(path: string, options?: Omit<RequestOptions, 'body'>) => Promise<T>\n post: <T>(path: string, options?: RequestOptions) => Promise<T>\n put: <T>(path: string, options?: RequestOptions) => Promise<T>\n patch: <T>(path: string, options?: RequestOptions) => Promise<T>\n delete: <T>(path: string, options?: RequestOptions) => Promise<T>\n}\n\nconst buildUrl = (\n baseUrl: string,\n path: string,\n { params, query }: Pick<RequestOptions, 'params' | 'query'>\n): string => {\n let resolved = `${baseUrl}${path}`\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n resolved = resolved.replace(`:${key}`, encodeURIComponent(String(value)))\n })\n }\n if (query) {\n const queryString = new URLSearchParams()\n Object.entries(query).forEach(([key, value]) => {\n if (value === undefined || value === null) return\n queryString.append(key, String(value))\n })\n if ([...queryString.keys()].length > 0) {\n resolved = `${resolved}?${queryString.toString()}`\n }\n }\n return resolved\n}\n\nexport const createApiClient = (\n paymentConfig: PaymentConfig,\n baseUrl: string,\n fetcher: PaymentFetcher,\n resolveAuthToken: () => Promise<string | null>\n): ApiClient => {\n const request = async <T>(\n method: HttpMethod,\n path: string,\n options?: RequestOptions\n ): Promise<T> => {\n const url = buildUrl(baseUrl, path, options ?? {})\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...(paymentConfig.defaultHeaders ?? {}),\n ...(options?.headers ?? {}),\n }\n\n const token = await resolveAuthToken()\n if (token) {\n headers.Authorization = `Bearer ${token}`\n }\n\n try {\n const response = await fetcher(url, {\n method,\n headers,\n body: options?.body ? JSON.stringify(options.body) : undefined,\n })\n\n if (!response.ok) {\n const message = await response.text()\n console.error('payments-ui: API request failed', {\n url,\n method,\n status: response.status,\n message,\n })\n throw new Error(message || `Request failed with status ${response.status}`)\n }\n\n if (response.status === 204) {\n return undefined as T\n }\n\n const data = (await response.json()) as T\n return data\n } catch (error) {\n console.error('payments-ui: API request error', { url, method, error })\n throw error\n }\n }\n\n return {\n request,\n get: (path, options) => request('GET', path, options),\n post: (path, options) => request('POST', path, options),\n put: (path, options) => request('PUT', path, options),\n patch: (path, options) => request('PATCH', path, options),\n delete: (path, options) => request('DELETE', path, options),\n }\n}\n","import type { BillingDetails, CreatePaymentMethodPayload, PaymentConfig } from '../types'\nimport { loadCollectJs } from '../utils/collect'\n\nexport interface CardTokenizeResult {\n token: string\n billing: BillingDetails\n}\n\nexport class CardPaymentService {\n private collectLoaded = false\n\n constructor(private config: PaymentConfig) {}\n\n async ensureCollectLoaded(): Promise<void> {\n if (this.collectLoaded) return\n if (!this.config.collectJsKey) {\n throw new Error('payments-ui: collect.js key missing')\n }\n\n loadCollectJs(this.config.collectJsKey)\n this.collectLoaded = true\n }\n\n buildCreatePayload(result: CardTokenizeResult): CreatePaymentMethodPayload {\n return {\n payment_token: result.token,\n first_name: result.billing.firstName,\n last_name: result.billing.lastName,\n address1: result.billing.address1,\n address2: result.billing.address2,\n city: result.billing.city,\n state: result.billing.stateRegion,\n zip: result.billing.postalCode,\n country: result.billing.country,\n email: result.billing.email,\n provider: result.billing.provider,\n }\n }\n}\n","import type {\n PaginatedPaymentMethods,\n CreatePaymentMethodPayload,\n PaymentMethod,\n} from '../types'\nimport type { ApiClient } from './apiClient'\n\nexport interface ListParams {\n page?: number\n pageSize?: number\n}\n\nexport class PaymentMethodService {\n constructor(private api: ApiClient) { }\n\n async list(params?: ListParams): Promise<PaginatedPaymentMethods> {\n return this.api.get('/payment-methods', {\n query: {\n page: params?.page ?? 1,\n page_size: params?.pageSize ?? 50,\n },\n })\n }\n\n async create(payload: CreatePaymentMethodPayload): Promise<PaymentMethod> {\n return this.api.post('/payment-methods', {\n body: { ...payload } as Record<string, unknown>,\n })\n }\n\n async remove(id: string): Promise<void> {\n await this.api.delete(`/payment-methods/${id}`)\n }\n\n async activate(id: string): Promise<void> {\n await this.api.put(`/payment-methods/${id}/activate`)\n }\n}\n","import type {\n GeneratePaymentResponse,\n SubmitPaymentResponse,\n TokenInfo,\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types'\nimport type { ApiClient } from './apiClient'\n\nexport class SolanaPaymentService {\n constructor(private api: ApiClient) { }\n\n async generatePayment(\n priceId: string,\n token: string,\n userWallet: string\n ): Promise<GeneratePaymentResponse> {\n return this.api.post('/solana/generate', {\n body: { price_id: priceId, token, user_wallet: userWallet },\n })\n }\n\n async submitPayment(\n signedTransaction: string,\n priceId: string,\n intentId: string,\n memo?: string\n ): Promise<SubmitPaymentResponse> {\n return this.api.post('/solana/submit', {\n body: {\n signed_transaction: signedTransaction,\n price_id: priceId,\n intent_id: intentId,\n ...(memo ? { memo } : {}),\n },\n })\n }\n\n async fetchSupportedTokens(): Promise<TokenInfo[]> {\n const response = await this.api.get<{ tokens: TokenInfo[] }>(\n '/solana/tokens'\n )\n return response.tokens\n }\n\n async getSupportedTokens(): Promise<TokenInfo[]> {\n return this.fetchSupportedTokens()\n }\n\n async generateQrCode(\n priceId: string,\n token: string,\n userWallet?: string\n ): Promise<SolanaPayQRCodeIntent> {\n return this.api.post('/solana/qr', {\n body: {\n price_id: priceId,\n token,\n ...(userWallet ? { user_wallet: userWallet } : {}),\n },\n })\n }\n\n async generateQRCode(\n priceId: string,\n token: string,\n userWallet?: string\n ): Promise<SolanaPayQRCodeIntent> {\n return this.generateQrCode(priceId, token, userWallet)\n }\n\n async checkPaymentStatus(\n reference: string,\n memo?: string\n ): Promise<SolanaPayStatusResponse> {\n return this.api.get('/solana/check', {\n query: {\n reference,\n ...(memo ? { memo } : {}),\n },\n })\n }\n}\n","import type { TokenInfo } from '../types'\nimport type { SolanaPaymentService } from './SolanaPaymentService'\n\nexport interface TokenCatalogOptions {\n ttlMs?: number\n}\n\nexport class TokenCatalog {\n private cache: TokenInfo[] = []\n private lastFetched = 0\n\n constructor(\n private solanaService: SolanaPaymentService,\n private options: TokenCatalogOptions = {}\n ) { }\n\n private get ttl(): number {\n return this.options.ttlMs ?? 5 * 60 * 1000\n }\n\n async getTokens(force = false): Promise<TokenInfo[]> {\n const isStale = Date.now() - this.lastFetched > this.ttl\n if (!force && this.cache.length > 0 && !isStale) {\n return this.cache\n }\n\n const tokens = await this.solanaService.fetchSupportedTokens()\n this.cache = tokens\n this.lastFetched = Date.now()\n return tokens\n }\n\n getCached(): TokenInfo[] {\n return this.cache\n }\n}\n","export interface WalletAccount {\n publicKey: string\n}\n\nexport interface WalletAdapterLike {\n publicKey?: { toBase58(): string }\n signTransaction?: (tx: unknown) => Promise<unknown>\n signVersionedTransaction?: (tx: unknown) => Promise<unknown>\n}\n\nexport class WalletGateway {\n private adapter: WalletAdapterLike | null = null\n\n setAdapter(adapter: WalletAdapterLike | null): void {\n this.adapter = adapter\n }\n\n getPublicKey(): string | null {\n if (!this.adapter?.publicKey) return null\n try {\n return this.adapter.publicKey.toBase58()\n } catch {\n return null\n }\n }\n\n async sign(transaction: unknown): Promise<unknown> {\n if (!this.adapter) {\n throw new Error('payments-ui: wallet adapter not set')\n }\n\n if (typeof this.adapter.signVersionedTransaction === 'function') {\n return this.adapter.signVersionedTransaction(transaction)\n }\n\n if (typeof this.adapter.signTransaction === 'function') {\n return this.adapter.signTransaction(transaction)\n }\n\n throw new Error('payments-ui: wallet adapter cannot sign transactions')\n }\n}\n","import type { ApiClient } from './apiClient'\nimport type {\n CCBillSubscribePayload,\n FlexFormResponse,\n GenerateFlexFormURLBodyParams,\n NmiSubscribePayload,\n PaymentPlatform,\n SubscriptionResponse,\n} from '../types/subscription'\nimport type { PaginatedPayments } from '../types'\n\nexport class SubscriptionService {\n constructor(private readonly api: ApiClient) {}\n\n async subscribe(\n platform: PaymentPlatform,\n payload: NmiSubscribePayload | CCBillSubscribePayload\n ): Promise<SubscriptionResponse> {\n const body = this.serializePayload(platform, payload)\n return this.api.post<SubscriptionResponse>(\n `/subscriptions/process/${platform}`,\n {\n body,\n }\n )\n }\n\n async generateFlexFormUrl(\n payload: GenerateFlexFormURLBodyParams\n ): Promise<FlexFormResponse> {\n return this.api.post('/subscriptions/flexform', {\n body: { ...payload } as Record<string, unknown>,\n })\n }\n\n async getPaymentHistory(\n params?: { limit?: number; offset?: number; type?: string }\n ): Promise<PaginatedPayments> {\n const limit = params?.limit ?? 10\n const offset = params?.offset ?? 0\n const query: Record<string, string> = {\n limit: String(limit),\n offset: String(offset),\n }\n\n if (params?.type) {\n query.type = params.type\n }\n\n const response = await this.api.get<PaginatedPayments>('/subscriptions/purchases', {\n query,\n })\n\n const totalItems = response?.total_items ?? 0\n const pageSize = limit\n const pageNumber =\n response?.page ?? (pageSize > 0 ? Math.floor(offset / pageSize) + 1 : 1)\n const totalPages =\n response?.total_pages ??\n (pageSize > 0 ? Math.ceil(totalItems / pageSize) : undefined)\n\n return {\n data: response?.data ?? [],\n total_items: totalItems,\n limit,\n offset,\n page: pageNumber,\n page_size: pageSize,\n total_pages: totalPages,\n }\n }\n\n async cancelSubscription(feedback?: string): Promise<{ message: string; success: boolean }> {\n return this.api.post('/subscriptions/cancel', {\n body: feedback ? { feedback } : undefined,\n })\n }\n\n private serializePayload(\n platform: PaymentPlatform,\n payload: NmiSubscribePayload | CCBillSubscribePayload\n ): Record<string, unknown> {\n if (platform === 'nmi') {\n const data = payload as NmiSubscribePayload\n if (!data.priceId) {\n throw new Error('payments-ui: priceId is required for NMI subscriptions')\n }\n\n if (!data.paymentToken && !data.paymentMethodId) {\n throw new Error(\n 'payments-ui: paymentToken or paymentMethodId is required for NMI subscriptions'\n )\n }\n\n const body: Record<string, unknown> = {\n price_id: data.priceId,\n processor: data.processor ?? 'nmi',\n provider: data.provider,\n }\n\n if (data.email) body.email = data.email\n if (data.firstName) body.first_name = data.firstName\n if (data.lastName) body.last_name = data.lastName\n if (data.address1) body.address1 = data.address1\n if (data.city) body.city = data.city\n if (data.state) body.state = data.state\n if (data.zipCode) body.zip = data.zipCode\n if (data.country) body.country = data.country\n if (data.paymentToken) body.payment_token = data.paymentToken\n if (data.paymentMethodId) body.payment_method_id = data.paymentMethodId\n\n return body\n }\n\n const data = payload as CCBillSubscribePayload\n if (!data.priceId) {\n throw new Error('payments-ui: priceId is required for CCBill subscriptions')\n }\n\n return {\n price_id: data.priceId,\n processor: data.processor ?? 'ccbill',\n email: data.email,\n first_name: data.firstName,\n last_name: data.lastName,\n zip: data.zipCode,\n country: data.country,\n }\n }\n}\n","import type { ApiClient } from './apiClient'\nimport type {\n SolanaWallet,\n WalletChallengeResponse,\n VerifyWalletResponse,\n WalletListResponse,\n} from '../types'\n\nexport class SolanaWalletService {\n constructor(private readonly api: ApiClient) {}\n\n async list(): Promise<SolanaWallet[]> {\n const response = await this.api.get<WalletListResponse | SolanaWallet | { wallet?: SolanaWallet | null } | SolanaWallet[]>(\n '/wallet/solana'\n )\n\n if (Array.isArray(response)) {\n return response\n }\n\n if ('wallets' in response && Array.isArray(response.wallets)) {\n return response.wallets\n }\n\n if ('wallet' in response) {\n return response.wallet ? [response.wallet] : []\n }\n\n if ('address' in response) {\n return [response as SolanaWallet]\n }\n\n return []\n }\n\n async requestChallenge(wallet: string): Promise<WalletChallengeResponse> {\n return this.api.post('/wallet/solana/challenge', {\n body: { wallet } as Record<string, unknown>,\n })\n }\n\n async verify(\n wallet: string,\n signature: string,\n nonce?: string\n ): Promise<VerifyWalletResponse> {\n const body: Record<string, unknown> = { wallet, signature }\n if (nonce) {\n body.nonce = nonce\n }\n return this.api.post('/wallet/solana/verify', { body })\n }\n\n async remove(wallet: string): Promise<void> {\n await this.api.delete('/wallet/solana', {\n query: { wallet },\n })\n }\n}\n","import type { PaymentConfig, PaymentFetcher } from '../types'\nimport { createApiClient, type ApiClient } from '../services/apiClient'\nimport { CardPaymentService } from '../services/CardPaymentService'\nimport { PaymentMethodService } from '../services/PaymentMethodService'\nimport { SolanaPaymentService } from '../services/SolanaPaymentService'\nimport { TokenCatalog } from '../services/TokenCatalog'\nimport { WalletGateway } from '../services/WalletGateway'\nimport { SubscriptionService } from '../services/SubscriptionService'\nimport { SolanaWalletService } from '../services/SolanaWalletService'\n\nexport interface PaymentServices {\n cardPayments: CardPaymentService\n paymentMethods: PaymentMethodService\n solanaPayments: SolanaPaymentService\n solanaWallets: SolanaWalletService\n tokenCatalog: TokenCatalog\n walletGateway: WalletGateway\n subscriptions: SubscriptionService\n billingApi: ApiClient\n accountApi: ApiClient\n}\n\nexport interface PaymentAppOptions {\n config: PaymentConfig\n fetcher?: PaymentFetcher\n}\n\nexport class PaymentApp {\n private readonly config: PaymentConfig\n private readonly fetcher: PaymentFetcher\n private readonly services: PaymentServices\n\n constructor(options: PaymentAppOptions) {\n this.config = options.config\n this.fetcher =\n options.fetcher ??\n options.config.fetcher ??\n (globalThis.fetch?.bind(globalThis) as PaymentFetcher)\n\n if (!this.fetcher) {\n throw new Error('payments-ui: fetch implementation is required')\n }\n\n this.services = this.createServices()\n }\n\n getConfig(): PaymentConfig {\n return this.config\n }\n\n getFetcher(): PaymentFetcher {\n return this.fetcher\n }\n\n getServices(): PaymentServices {\n return this.services\n }\n\n private createServices(): PaymentServices {\n const billingApi = createApiClient(\n this.config,\n this.config.endpoints.billingBaseUrl,\n this.fetcher,\n this.resolveAuthToken\n )\n\n const accountBaseUrl =\n this.config.endpoints.accountBaseUrl ?? this.config.endpoints.billingBaseUrl\n const accountApi = createApiClient(\n this.config,\n accountBaseUrl,\n this.fetcher,\n this.resolveAuthToken\n )\n\n const solanaPayments = new SolanaPaymentService(billingApi)\n const solanaWallets = new SolanaWalletService(billingApi)\n const paymentMethods = new PaymentMethodService(accountApi)\n const cardPayments = new CardPaymentService(this.config)\n const walletGateway = new WalletGateway()\n const tokenCatalog = new TokenCatalog(solanaPayments)\n const subscriptions = new SubscriptionService(billingApi)\n\n return {\n cardPayments,\n paymentMethods,\n solanaPayments,\n solanaWallets,\n tokenCatalog,\n walletGateway,\n subscriptions,\n billingApi,\n accountApi,\n }\n }\n\n resolveAuthToken = async (): Promise<string | null> => {\n if (!this.config.getAuthToken) {\n return null\n }\n\n try {\n const result = this.config.getAuthToken()\n if (result instanceof Promise) {\n return (await result) ?? null\n }\n return result ?? null\n } catch (error) {\n console.warn('payments-ui: failed to resolve auth token', error)\n return null\n }\n }\n}\n","import { createStore } from 'zustand/vanilla'\nimport type {\n PaymentCallbacks,\n PaymentStatusPayload,\n PaymentSuccessPayload,\n} from '../types'\n\nexport type AsyncStatus = 'idle' | 'processing' | 'success' | 'error'\nexport type SolanaFlowState =\n | 'selecting'\n | 'processing'\n | 'confirming'\n | 'success'\n | 'error'\n\nexport interface PaymentStoreState {\n selectedMethodId: string | null\n solanaModalOpen: boolean\n savedPaymentStatus: AsyncStatus\n savedPaymentError: string | null\n newCardStatus: AsyncStatus\n newCardError: string | null\n solanaTab: 'wallet' | 'qr'\n solanaStatus: SolanaFlowState\n solanaError: string | null\n solanaTransactionId: string | null\n solanaSelectedToken: string | null\n solanaTokenAmount: number\n setSelectedMethod: (methodId: string | null) => void\n setSolanaModalOpen: (open: boolean) => void\n setSolanaTab: (tab: 'wallet' | 'qr') => void\n setSolanaSelectedToken: (symbol: string) => void\n setSolanaTokenAmount: (amount: number) => void\n setSolanaTransactionId: (txId: string | null) => void\n startSavedPayment: () => void\n completeSavedPayment: () => void\n failSavedPayment: (error: string) => void\n resetSavedPayment: () => void\n startNewCardPayment: () => void\n completeNewCardPayment: () => void\n failNewCardPayment: (error: string) => void\n resetNewCardPayment: () => void\n startSolanaPayment: () => void\n confirmSolanaPayment: () => void\n completeSolanaPayment: (payload?: PaymentSuccessPayload) => void\n failSolanaPayment: (error: string) => void\n resetSolanaPayment: () => void\n resetAll: () => void\n}\n\nconst initialState = {\n selectedMethodId: null,\n solanaModalOpen: false,\n savedPaymentStatus: 'idle' as AsyncStatus,\n savedPaymentError: null,\n newCardStatus: 'idle' as AsyncStatus,\n newCardError: null,\n solanaTab: 'wallet' as const,\n solanaStatus: 'selecting' as SolanaFlowState,\n solanaError: null,\n solanaTransactionId: null,\n solanaSelectedToken: null,\n solanaTokenAmount: 0,\n}\n\nexport interface PaymentStoreOptions {\n callbacks?: PaymentCallbacks\n}\n\nexport const createPaymentStore = (options?: PaymentStoreOptions) =>\n createStore<PaymentStoreState>((set, get) => {\n const notifyStatus = (\n status: PaymentStatusPayload['status'],\n context?: Record<string, unknown>\n ) => {\n options?.callbacks?.onStatusChange?.({ status, context })\n }\n\n const notifySuccess = (payload?: PaymentSuccessPayload) => {\n if (!options?.callbacks?.onSuccess) return\n options.callbacks.onSuccess(payload ?? {})\n }\n\n const notifyError = (error: string) => {\n options?.callbacks?.onError?.(new Error(error))\n }\n\n return {\n ...initialState,\n setSelectedMethod: (methodId) => {\n if (get().selectedMethodId === methodId) return\n set({ selectedMethodId: methodId })\n },\n setSolanaModalOpen: (open) => {\n if (get().solanaModalOpen === open) return\n set({ solanaModalOpen: open })\n },\n setSolanaTab: (tab) => {\n if (get().solanaTab === tab) return\n set({ solanaTab: tab })\n },\n setSolanaSelectedToken: (symbol) => {\n if (get().solanaSelectedToken === symbol) return\n set({ solanaSelectedToken: symbol })\n },\n setSolanaTokenAmount: (amount) => {\n if (get().solanaTokenAmount === amount) return\n set({ solanaTokenAmount: amount })\n },\n setSolanaTransactionId: (txId) => {\n if (get().solanaTransactionId === txId) return\n set({ solanaTransactionId: txId })\n },\n startSavedPayment: () => {\n notifyStatus('processing', { source: 'saved-payment' })\n set({ savedPaymentStatus: 'processing', savedPaymentError: null })\n },\n completeSavedPayment: () => {\n notifyStatus('success', { source: 'saved-payment' })\n set({ savedPaymentStatus: 'success', savedPaymentError: null })\n },\n failSavedPayment: (error) => {\n notifyStatus('error', { source: 'saved-payment' })\n notifyError(error)\n set({ savedPaymentStatus: 'error', savedPaymentError: error })\n },\n resetSavedPayment: () =>\n set({ savedPaymentStatus: 'idle', savedPaymentError: null }),\n startNewCardPayment: () => {\n notifyStatus('processing', { source: 'new-card' })\n set({ newCardStatus: 'processing', newCardError: null })\n },\n completeNewCardPayment: () => {\n notifyStatus('success', { source: 'new-card' })\n set({ newCardStatus: 'success', newCardError: null })\n },\n failNewCardPayment: (error) => {\n notifyStatus('error', { source: 'new-card' })\n notifyError(error)\n set({ newCardStatus: 'error', newCardError: error })\n },\n resetNewCardPayment: () =>\n set({ newCardStatus: 'idle', newCardError: null }),\n startSolanaPayment: () => {\n notifyStatus('processing', { source: 'solana' })\n set({ solanaStatus: 'processing', solanaError: null })\n },\n confirmSolanaPayment: () =>\n set({ solanaStatus: 'confirming' }),\n completeSolanaPayment: (payload) => {\n notifyStatus('success', { source: 'solana' })\n notifySuccess(payload)\n set({ solanaStatus: 'success', solanaError: null })\n },\n failSolanaPayment: (error) => {\n notifyStatus('error', { source: 'solana' })\n notifyError(error)\n set({ solanaStatus: 'error', solanaError: error })\n },\n resetSolanaPayment: () =>\n set({\n solanaStatus: 'selecting',\n solanaError: null,\n solanaTransactionId: null,\n }),\n resetAll: () => set(initialState),\n }\n })\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport type { StoreApi } from 'zustand'\nimport type { PaymentConfig, PaymentFetcher } from '../types/config'\nimport { loadCollectJs } from '../utils/collect'\nimport { PaymentApp, type PaymentServices } from '../core'\nimport {\n createPaymentStore,\n type PaymentStoreState,\n} from '../state/paymentStore'\n\nexport interface PaymentContextValue {\n config: PaymentConfig\n fetcher: PaymentFetcher\n resolveAuthToken: () => Promise<string | null>\n app: PaymentApp\n services: PaymentServices\n store: StoreApi<PaymentStoreState>\n}\n\nconst PaymentContext = createContext<PaymentContextValue | undefined>(undefined)\n\nexport interface PaymentProviderProps {\n config: PaymentConfig\n children: React.ReactNode\n}\n\nexport const PaymentProvider: React.FC<PaymentProviderProps> = ({\n config,\n children,\n}) => {\n const app = useMemo(() => new PaymentApp({ config }), [config])\n const store = useMemo(\n () => createPaymentStore({ callbacks: config.callbacks }),\n [config.callbacks]\n )\n\n const value = useMemo<PaymentContextValue>(() => {\n return {\n config: app.getConfig(),\n fetcher: app.getFetcher(),\n resolveAuthToken: app.resolveAuthToken,\n app,\n services: app.getServices(),\n store,\n }\n }, [app, store])\n\n useEffect(() => {\n if (!value.config.collectJsKey) return\n loadCollectJs(value.config.collectJsKey)\n }, [value.config.collectJsKey])\n\n return <PaymentContext.Provider value={value}>{children}</PaymentContext.Provider>\n}\n\nexport const usePaymentContext = (): PaymentContextValue => {\n const context = useContext(PaymentContext)\n if (!context) {\n throw new Error('usePaymentContext must be used within a PaymentProvider')\n }\n return context\n}\n","// Use country-list package for standard country data\nimport countryList from 'country-list'\n\n// Define our interfaces for TypeScript support\nexport interface Country {\n code: string\n name: string\n}\n\n// Some countries that need customization or that might be missing from the base package\nconst customCountries: Country[] = [\n { code: 'TW', name: 'Taiwan, Province of China' },\n { code: 'KR', name: 'Korea' },\n { code: 'KP', name: 'North Korea' },\n { code: 'PS', name: 'Palestine, State of' },\n { code: 'VA', name: 'Holy See (Vatican City State)' },\n { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' },\n { code: 'SX', name: 'Sint Maarten (Dutch part)' },\n { code: 'MK', name: 'North Macedonia' },\n { code: 'SZ', name: 'Eswatini' },\n { code: 'FM', name: 'Micronesia, Federated States Of' },\n { code: 'TR', name: 'Türkiye' },\n]\n\n// Apply customizations to the country list\ncountryList.overwrite(customCountries)\n\n// Get the countries from the package and sort them alphabetically by name\nexport const countries: Country[] = countryList\n .getData()\n .sort((a: Country, b: Country) => a.name.localeCompare(b.name))\n","import * as React from 'react';\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == 'function') {\n hasCleanup = true;\n }\n return cleanup;\n });\n\n // React <19 will log an error to the console if a callback ref returns a\n // value. We don't use ref cleanups internally so this will only happen if a\n // user's ref callback returns a value, which we only expect if they are\n // using the cleanup functionality added in React 19.\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == 'function') {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","import * as React from 'react';\nimport { composeRefs } from '@radix-ui/react-compose-refs';\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotProps extends React.HTMLAttributes<HTMLElement> {\n children?: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlot(ownerName: string) {\n const SlotClone = createSlotClone(ownerName);\n const Slot = React.forwardRef<HTMLElement, SlotProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n\n if (slottable) {\n // the new element to render is the one passed as a child of `Slottable`\n const newElement = slottable.props.children;\n\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n // because the new element will be the one rendered, we are only interested\n // in grabbing its children (`newElement.props.children`)\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement)\n ? (newElement.props as { children: React.ReactNode }).children\n : null;\n } else {\n return child;\n }\n });\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {React.isValidElement(newElement)\n ? React.cloneElement(newElement, undefined, newChildren)\n : null}\n </SlotClone>\n );\n }\n\n return (\n <SlotClone {...slotProps} ref={forwardedRef}>\n {children}\n </SlotClone>\n );\n });\n\n Slot.displayName = `${ownerName}.Slot`;\n return Slot;\n}\n\nconst Slot = createSlot('Slot');\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SlotCloneProps {\n children: React.ReactNode;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ function createSlotClone(ownerName: string) {\n const SlotClone = React.forwardRef<any, SlotCloneProps>((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props = mergeProps(slotProps, children.props as AnyProps);\n // do not pass ref to React.Fragment for React 19 compatibility\n if (children.type !== React.Fragment) {\n props.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props);\n }\n\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * -----------------------------------------------------------------------------------------------*/\n\nconst SLOTTABLE_IDENTIFIER = Symbol('radix.slottable');\n\ninterface SlottableProps {\n children: React.ReactNode;\n}\n\ninterface SlottableComponent extends React.FC<SlottableProps> {\n __radixId: symbol;\n}\n\n/* @__NO_SIDE_EFFECTS__ */ export function createSlottable(ownerName: string) {\n const Slottable: SlottableComponent = ({ children }) => {\n return <>{children}</>;\n };\n Slottable.displayName = `${ownerName}.Slottable`;\n Slottable.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable;\n}\n\nconst Slottable = createSlottable('Slottable');\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype AnyProps = Record<string, any>;\n\nfunction isSlottable(\n child: React.ReactNode\n): child is React.ReactElement<SlottableProps, typeof Slottable> {\n return (\n React.isValidElement(child) &&\n typeof child.type === 'function' &&\n '__radixId' in child.type &&\n child.type.__radixId === SLOTTABLE_IDENTIFIER\n );\n}\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps) {\n // all child props should override\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n // if the handler exists on both, we compose them\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: unknown[]) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n }\n // but if it exists only on the slot, we use only this one\n else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n }\n // if it's `style`, we merge them\n else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(' ');\n }\n }\n\n return { ...slotProps, ...overrideProps };\n}\n\n// Before React 19 accessing `element.props.ref` will throw a warning and suggest using `element.ref`\n// After React 19 accessing `element.ref` does the opposite.\n// https://github.com/facebook/react/pull/28348\n//\n// Access the ref using the method that doesn't yield a warning.\nfunction getElementRef(element: React.ReactElement) {\n // React <=18 in DEV\n let getter = Object.getOwnPropertyDescriptor(element.props, 'ref')?.get;\n let mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element as any).ref;\n }\n\n // React 19 in DEV\n getter = Object.getOwnPropertyDescriptor(element, 'ref')?.get;\n mayWarn = getter && 'isReactWarning' in getter && getter.isReactWarning;\n if (mayWarn) {\n return (element.props as { ref?: React.Ref<unknown> }).ref;\n }\n\n // Not DEV\n return (element.props as { ref?: React.Ref<unknown> }).ref || (element as any).ref;\n}\n\nexport {\n Slot,\n Slottable,\n //\n Slot as Root,\n};\nexport type { SlotProps };\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n outline:\n 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n destructive:\n 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as React from 'react'\nimport * as LabelPrimitive from '@radix-ui/react-label'\nimport { cn } from '../lib/utils'\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className\n )}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n position={position}\n {...props}\n >\n <SelectPrimitive.ScrollUpButton className=\"flex cursor-default items-center justify-center py-1\">\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n <SelectPrimitive.Viewport className=\"p-1\">\n {children}\n </SelectPrimitive.Viewport>\n <SelectPrimitive.ScrollDownButton className=\"flex cursor-default items-center justify-center py-1\">\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold text-muted-foreground', className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { CreditCard, Loader2, MapPin, User } from 'lucide-react'\nimport type { BillingDetails } from '../types'\nimport type { CollectJSResponse } from '../types/collect'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport { countries } from '../data/countries'\nimport { Button } from '../ui/button'\nimport { Input } from '../ui/input'\nimport { Label } from '../ui/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { cn } from '../lib/utils'\n\nexport interface CardDetailsFormProps {\n visible: boolean\n onTokenize: (token: string, billing: BillingDetails) => void\n submitLabel: string\n submitting?: boolean\n defaultValues?: Partial<BillingDetails>\n externalError?: string | null\n collectPrefix?: string\n className?: string\n onBillingChange?: (billing: BillingDetails) => void\n submitDisabled?: boolean\n}\n\nconst defaultBilling: BillingDetails = {\n firstName: '',\n lastName: '',\n address1: '',\n address2: '',\n city: '',\n stateRegion: '',\n postalCode: '',\n country: 'US',\n email: '',\n provider: 'mobius',\n}\n\nconst buildSelector = (prefix: string, field: string) => `#${prefix}-${field}`\n\nexport const CardDetailsForm: React.FC<CardDetailsFormProps> = ({\n visible,\n onTokenize,\n submitLabel,\n submitting = false,\n defaultValues,\n externalError,\n collectPrefix = 'card-form',\n className,\n onBillingChange,\n submitDisabled = false,\n}) => {\n const { config } = usePaymentContext()\n const defaultValuesKey = useMemo(() => JSON.stringify(defaultValues ?? {}), [defaultValues])\n\n const mergedDefaults: BillingDetails = useMemo(\n () => ({\n ...defaultBilling,\n ...defaultValues,\n email: defaultValues?.email ?? config.defaultUser?.email ?? defaultBilling.email,\n }),\n [defaultValuesKey, config.defaultUser?.email]\n )\n\n const [firstName, setFirstName] = useState(mergedDefaults.firstName)\n const [lastName, setLastName] = useState(mergedDefaults.lastName)\n const [address1, setAddress1] = useState(mergedDefaults.address1)\n const [address2, setAddress2] = useState(mergedDefaults.address2 ?? '')\n const [city, setCity] = useState(mergedDefaults.city)\n const [stateRegion, setStateRegion] = useState(mergedDefaults.stateRegion ?? '')\n const [postalCode, setPostalCode] = useState(mergedDefaults.postalCode)\n const [country, setCountry] = useState(mergedDefaults.country)\n const [email, setEmail] = useState(mergedDefaults.email ?? '')\n const [localError, setLocalError] = useState<string | null>(null)\n const [isTokenizing, setIsTokenizing] = useState(false)\n\n useEffect(() => {\n if (!visible) {\n setLocalError(null)\n setIsTokenizing(false)\n }\n }, [visible])\n\n useEffect(() => {\n if (!visible) return\n setFirstName(mergedDefaults.firstName)\n setLastName(mergedDefaults.lastName)\n setAddress1(mergedDefaults.address1)\n setAddress2(mergedDefaults.address2 ?? '')\n setCity(mergedDefaults.city)\n setStateRegion(mergedDefaults.stateRegion ?? '')\n setPostalCode(mergedDefaults.postalCode)\n setCountry(mergedDefaults.country)\n setEmail(mergedDefaults.email ?? '')\n }, [defaultValuesKey, mergedDefaults, visible])\n\n useEffect(() => {\n if (!onBillingChange) return\n onBillingChange({\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n })\n }, [\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onBillingChange,\n ])\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.CollectJS || !visible) {\n return\n }\n\n const handlers = (window.__doujinsCollectHandlers ||= {})\n handlers[collectPrefix] = (response: CollectJSResponse) => {\n setIsTokenizing(false)\n if (!response.token) {\n setLocalError('Payment tokenization failed. Please try again.')\n return\n }\n\n const billing: BillingDetails = {\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n provider: mergedDefaults.provider ?? 'mobius',\n }\n\n onTokenize(response.token, billing)\n }\n\n const configured = (window.__doujinsCollectConfigured ||= {})\n if (!configured[collectPrefix]) {\n window.CollectJS.configure({\n variant: 'inline',\n fields: {\n ccnumber: { selector: buildSelector(collectPrefix, 'ccnumber') },\n ccexp: { selector: buildSelector(collectPrefix, 'ccexp') },\n cvv: { selector: buildSelector(collectPrefix, 'cvv') },\n },\n callback: (response: CollectJSResponse) => {\n const fn = window.__doujinsCollectHandlers?.[collectPrefix]\n fn?.(response)\n },\n })\n configured[collectPrefix] = true\n }\n }, [\n collectPrefix,\n firstName,\n lastName,\n address1,\n address2,\n city,\n stateRegion,\n postalCode,\n country,\n email,\n mergedDefaults.provider,\n onTokenize,\n visible,\n ])\n\n const validate = (): boolean => {\n if (\n !firstName.trim() ||\n !lastName.trim() ||\n !address1.trim() ||\n !city.trim() ||\n !postalCode.trim() ||\n !country.trim() ||\n !email.trim()\n ) {\n setLocalError('Please complete all required billing fields.')\n return false\n }\n setLocalError(null)\n return true\n }\n\n const handleSubmit = (event: React.FormEvent) => {\n event.preventDefault()\n if (!validate()) return\n if (!window.CollectJS) {\n setLocalError('Payment form is not ready. Please try again later.')\n return\n }\n setIsTokenizing(true)\n window.CollectJS.startPaymentRequest()\n }\n\n const errorMessage = localError ?? externalError\n const collectFieldClass =\n 'flex h-11 w-full items-center rounded-md border border-dashed border-muted-foreground/40 bg-muted/20 px-3 text-sm text-muted-foreground'\n\n return (\n <form\n className={cn(\n 'space-y-6 rounded-2xl border border-border/60 bg-card/90 p-6 shadow-lg',\n className\n )}\n onSubmit={handleSubmit}\n noValidate\n >\n {errorMessage && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/10 px-4 py-2 text-sm text-destructive\">\n {errorMessage}\n </div>\n )}\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-first\" className=\"flex items-center gap-2 text-muted-foreground\">\n <User className=\"h-4 w-4\" /> First name\n </Label>\n <Input\n id=\"payments-first\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-last\" className=\"flex items-center gap-2 text-muted-foreground\">\n <User className=\"h-4 w-4\" /> Last name\n </Label>\n <Input\n id=\"payments-last\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n required\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-email\">Email</Label>\n <Input\n id=\"payments-email\"\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-address1\">Address line 1</Label>\n <Input\n id=\"payments-address1\"\n value={address1}\n onChange={(e) => setAddress1(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-address2\">Address line 2 (optional)</Label>\n <Input\n id=\"payments-address2\"\n value={address2}\n onChange={(e) => setAddress2(e.target.value)}\n />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-city\">City</Label>\n <Input\n id=\"payments-city\"\n value={city}\n onChange={(e) => setCity(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-state\">State / Region</Label>\n <Input\n id=\"payments-state\"\n value={stateRegion}\n onChange={(e) => setStateRegion(e.target.value)}\n />\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"payments-postal\" className=\"flex items-center gap-2 text-muted-foreground\">\n <MapPin className=\"h-4 w-4\" /> Postal code\n </Label>\n <Input\n id=\"payments-postal\"\n value={postalCode}\n onChange={(e) => setPostalCode(e.target.value)}\n required\n />\n </div>\n <div className=\"space-y-2\">\n <Label>Country</Label>\n <Select value={country} onValueChange={setCountry}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select a country\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {countries.map((option) => (\n <SelectItem key={option.code} value={option.code}>\n {option.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label>Card number</Label>\n <div id={buildSelector(collectPrefix, 'ccnumber').slice(1)} className={collectFieldClass} />\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label>Expiry</Label>\n <div id={buildSelector(collectPrefix, 'ccexp').slice(1)} className={collectFieldClass} />\n </div>\n <div className=\"space-y-2\">\n <Label>CVV</Label>\n <div id={buildSelector(collectPrefix, 'cvv').slice(1)} className={collectFieldClass} />\n </div>\n </div>\n\n <Button\n type=\"submit\"\n className=\"w-full\"\n disabled={submitting || submitDisabled || isTokenizing}\n >\n {submitting || isTokenizing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Processing…\n </>\n ) : (\n <>\n <CreditCard className=\"mr-2 h-4 w-4\" /> {submitLabel}\n </>\n )}\n </Button>\n\n <p className=\"flex items-center gap-2 text-xs text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" /> Your payment information is encrypted and processed securely.\n </p>\n </form>\n )\n}\n","import { useMemo } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { PaymentMethodService } from '../services/PaymentMethodService'\n\nexport const usePaymentMethodService = (): PaymentMethodService => {\n const { services } = usePaymentContext()\n return useMemo(() => services.paymentMethods, [services])\n}\n","import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'\nimport { usePaymentMethodService } from './usePaymentMethodService'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n PaymentMethod,\n PaginatedPaymentMethods,\n} from '../types'\n\nconst PAYMENT_METHODS_KEY = ['payments-ui', 'payment-methods']\n\nexport const usePaymentMethods = () => {\n const service = usePaymentMethodService()\n const queryClient = useQueryClient()\n\n const listQuery = useQuery<PaginatedPaymentMethods>({\n queryKey: PAYMENT_METHODS_KEY,\n queryFn: () => service.list({ pageSize: 50 }),\n })\n\n const createMutation = useMutation<\n PaymentMethod,\n Error,\n { token: string; billing: BillingDetails }\n >({\n mutationFn: ({ token, billing }) => {\n const payload: CreatePaymentMethodPayload = {\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n }\n return service.create(payload)\n },\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n const deleteMutation = useMutation<void, Error, { id: string }>({\n mutationFn: ({ id }) => service.remove(id),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: PAYMENT_METHODS_KEY })\n },\n })\n\n return {\n listQuery,\n createMutation,\n deleteMutation,\n }\n}\n","import * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = ({ className, ...props }: DialogPrimitive.DialogPortalProps) => (\n <DialogPrimitive.Portal className={cn(className)} {...props} />\n)\nDialogPortal.displayName = DialogPrimitive.Portal.displayName\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground',\n secondary: 'border-transparent bg-secondary text-secondary-foreground',\n outline: 'text-foreground',\n destructive: 'border-transparent bg-destructive text-destructive-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n )\n}\n\nexport { Badge, badgeVariants }\n","import * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\nimport { cn } from '../lib/utils'\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 border-t border-t-transparent p-[1px]',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('rounded-xl border bg-card text-card-foreground shadow', className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n))\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLHeadingElement>>(\n ({ className, ...props }, ref) => (\n <h3 ref={ref} className={cn('text-2xl font-semibold leading-none tracking-tight', className)} {...props} />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n))\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n))\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","import React, { useMemo, useState } from 'react'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { usePaymentMethods } from '../hooks/usePaymentMethods'\nimport type { BillingDetails, PaymentMethod } from '../types'\nimport { Button } from '../ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../ui/dialog'\nimport { Badge } from '../ui/badge'\nimport { ScrollArea } from '../ui/scroll-area'\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../ui/card'\nimport { cn } from '../lib/utils'\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nexport interface StoredPaymentMethodsProps {\n selectedMethodId?: string | null\n onMethodSelect?: (method: PaymentMethod) => void\n showAddButton?: boolean\n heading?: string\n description?: string\n}\n\nexport const StoredPaymentMethods: React.FC<StoredPaymentMethodsProps> = ({\n selectedMethodId,\n onMethodSelect,\n showAddButton = true,\n heading = 'Payment Methods',\n description = 'Manage your saved cards',\n}) => {\n const { listQuery, createMutation, deleteMutation } = usePaymentMethods()\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [deletingId, setDeletingId] = useState<string | null>(null)\n\n const payments = useMemo(() => listQuery.data?.data ?? [], [listQuery.data])\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n createMutation.mutate({ token, billing })\n }\n\n const handleDelete = (method: PaymentMethod) => {\n setDeletingId(method.id)\n deleteMutation.mutate(\n { id: method.id },\n {\n onSettled: () => setDeletingId(null),\n }\n )\n }\n\n return (\n <Card className=\"border-border/60 bg-card/95\">\n <CardHeader className=\"flex flex-row items-start justify-between space-y-0\">\n <div className=\"space-y-1\">\n <CardTitle className=\"text-base font-semibold text-foreground\">\n <span className=\"flex items-center gap-2 text-sm font-medium text-muted-foreground\">\n <WalletCards className=\"h-4 w-4\" /> {heading}\n </span>\n </CardTitle>\n <CardDescription>{description}</CardDescription>\n </div>\n {showAddButton && (\n <Button size=\"sm\" onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> Add card\n </Button>\n )}\n </CardHeader>\n <CardContent>\n {listQuery.isLoading ? (\n <div className=\"flex items-center justify-center rounded-lg border border-dashed border-border/60 bg-muted/10 py-8 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading cards…\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-sm text-muted-foreground\">\n No saved payment methods yet.\n </div>\n ) : (\n <ScrollArea className=\"max-h-[320px] pr-2\">\n <div className=\"space-y-3\">\n {payments.map((method) => {\n const isSelected = selectedMethodId === method.id\n return (\n <div\n key={method.id}\n className={cn(\n 'flex flex-col gap-3 rounded-lg border px-4 py-3 transition-colors md:flex-row md:items-center md:justify-between',\n isSelected\n ? 'border-primary/60 bg-primary/5'\n : 'border-border/60 bg-background'\n )}\n >\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-foreground\">\n {formatCardLabel(method)}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n Added on{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown'}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n className={cn(\n method.is_active\n ? 'bg-primary/20 text-primary'\n : 'bg-muted text-muted-foreground'\n )}\n >\n {method.is_active ? 'Active' : 'Inactive'}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n {onMethodSelect && (\n <Button\n size=\"sm\"\n variant={isSelected ? 'default' : 'outline'}\n onClick={() => onMethodSelect(method)}\n >\n {isSelected ? 'Selected' : 'Use card'}\n </Button>\n )}\n <Button\n size=\"icon\"\n variant=\"outline\"\n className=\"text-destructive\"\n onClick={() => handleDelete(method)}\n disabled={deletingId === method.id && deleteMutation.isPending}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n </div>\n )\n })}\n </div>\n </ScrollArea>\n )}\n </CardContent>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[90vh] overflow-y-auto\">\n <DialogHeader>\n <DialogTitle>Add a new card</DialogTitle>\n <DialogDescription>\n Your card details are tokenized securely via our payment provider.\n </DialogDescription>\n </DialogHeader>\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix=\"payments-ui-card\"\n submitting={createMutation.isPending}\n submitLabel=\"Save card\"\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n />\n </DialogContent>\n </Dialog>\n </Card>\n )\n}\n","import { useMemo } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { SolanaPaymentService } from '../services/SolanaPaymentService'\n\nexport const useSolanaService = (): SolanaPaymentService => {\n const { services } = usePaymentContext()\n return useMemo(() => services.solanaPayments, [services])\n}\n","import {\n Connection,\n PublicKey,\n LAMPORTS_PER_SOL,\n ParsedAccountData,\n} from '@solana/web3.js'\nimport { TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport { TokenInfo } from '../../types'\n\nexport interface TokenBalance {\n mint: string\n symbol: string\n name: string\n balance: number\n uiBalance: string\n decimals: number\n isNative: boolean\n}\n\nexport interface ParsedTokenAccount {\n mint: string\n owner: string\n amount: string\n uiAmount: number\n decimals: number\n}\n\nexport const getSolBalance = async (\n connection: Connection,\n publicKey: PublicKey\n): Promise<number> => {\n try {\n const lamports = await connection.getBalance(publicKey)\n return lamports / LAMPORTS_PER_SOL\n } catch (error) {\n console.error('Failed to fetch SOL balance:', error)\n return 0\n }\n}\n\nexport const fetchAllTokenBalances = async (\n connection: Connection,\n publicKey: PublicKey\n): Promise<Map<string, number>> => {\n const balances = new Map<string, number>()\n\n try {\n const tokenAccounts = await connection.getParsedProgramAccounts(\n TOKEN_PROGRAM_ID,\n {\n filters: [\n {\n dataSize: 165, // Size of token account\n },\n {\n memcmp: {\n offset: 32, // Owner field offset\n bytes: publicKey.toString(),\n },\n },\n ],\n }\n )\n\n for (const account of tokenAccounts) {\n const data = account.account.data as ParsedAccountData\n interface TokenParsed { info?: { mint: string; tokenAmount?: { uiAmount?: number } } }\n const parsed = data.parsed as TokenParsed\n const info = parsed?.info\n if (info && info.tokenAmount) {\n const mintAddress = info.mint\n const uiAmount = info.tokenAmount.uiAmount || 0\n\n if (uiAmount > 0) {\n balances.set(mintAddress, uiAmount)\n }\n }\n }\n } catch (error) {\n console.error('Failed to fetch token balances:', error)\n }\n\n return balances\n}\n\nexport const getTokenBalance = async (\n connection: Connection,\n publicKey: PublicKey,\n mintAddress: string\n): Promise<number> => {\n try {\n const tokenAccounts = await connection.getTokenAccountsByOwner(publicKey, {\n mint: new PublicKey(mintAddress),\n })\n\n if (tokenAccounts.value.length === 0) {\n return 0\n }\n\n const tokenAccount = tokenAccounts.value[0]\n const accountInfo = await connection.getParsedAccountInfo(\n tokenAccount.pubkey\n )\n\n const valueData = accountInfo.value?.data as ParsedAccountData | null | undefined\n if (valueData && valueData.parsed) {\n interface TokenParsed { info?: { tokenAmount?: { uiAmount?: number } } }\n const parsed = valueData.parsed as TokenParsed\n if (parsed.info?.tokenAmount) {\n return parsed.info.tokenAmount.uiAmount || 0\n }\n }\n\n return 0\n } catch (error) {\n console.error(`Failed to fetch balance for token ${mintAddress}:`, error)\n return 0\n }\n}\n\nexport const fetchSupportedTokenBalances = async (\n connection: Connection,\n publicKey: PublicKey,\n supportedTokens: TokenInfo[]\n): Promise<TokenBalance[]> => {\n const results: TokenBalance[] = []\n\n const solBalance = await getSolBalance(connection, publicKey)\n const solTokenMeta =\n supportedTokens.find((token) => token.is_native || token.symbol === 'SOL') ||\n {\n symbol: 'SOL',\n name: 'Solana',\n mint: 'So11111111111111111111111111111111111111112',\n decimals: 9,\n price: 0,\n is_native: true,\n }\n\n results.push({\n mint: solTokenMeta.mint,\n symbol: solTokenMeta.symbol,\n name: solTokenMeta.name,\n balance: solBalance,\n uiBalance: solBalance.toFixed(solTokenMeta.decimals <= 4 ? solTokenMeta.decimals : 4),\n decimals: solTokenMeta.decimals,\n isNative: true,\n })\n\n const tokenBalances = await fetchAllTokenBalances(connection, publicKey)\n\n const tokenMetaByMint = new Map(\n supportedTokens\n .filter((token) => !(token.is_native || token.symbol === 'SOL'))\n .map((token) => [token.mint, token])\n )\n\n for (const [mint, tokenMeta] of tokenMetaByMint.entries()) {\n const balance = tokenBalances.get(mint) || 0\n\n results.push({\n mint,\n symbol: tokenMeta.symbol,\n name: tokenMeta.name,\n balance,\n uiBalance: balance.toFixed(tokenMeta.decimals <= 6 ? tokenMeta.decimals : 6),\n decimals: tokenMeta.decimals,\n isNative: false,\n })\n }\n\n return results\n}\n\n/**\n * Parse token account data from RPC response\n * @param accountData - Raw account data from RPC\n * @returns Parsed token account info\n */\nexport const parseTokenAccountData = (\n accountData: any\n): ParsedTokenAccount | null => {\n try {\n const parsedInfo = accountData.parsed?.info\n if (!parsedInfo) return null\n\n return {\n mint: parsedInfo.mint,\n owner: parsedInfo.owner,\n amount: parsedInfo.tokenAmount.amount,\n uiAmount: parsedInfo.tokenAmount.uiAmount || 0,\n decimals: parsedInfo.tokenAmount.decimals,\n }\n } catch (error) {\n console.error('Failed to parse token account data:', error)\n return null\n }\n}\n\nexport const convertToUIAmount = (\n rawAmount: string,\n decimals: number\n): number => {\n try {\n const amount = parseInt(rawAmount, 10)\n return amount / Math.pow(10, decimals)\n } catch (error) {\n console.error('Failed to convert to UI amount:', error)\n return 0\n }\n}\n\nexport const convertToRawAmount = (\n uiAmount: number,\n decimals: number\n): string => {\n try {\n const rawAmount = Math.floor(uiAmount * Math.pow(10, decimals))\n return rawAmount.toString()\n } catch (error) {\n console.error('Failed to convert to raw amount:', error)\n return '0'\n }\n}\n\nexport const hasSufficientBalance = (\n balance: number,\n requiredAmount: number,\n buffer: number = 0.05\n): boolean => {\n const requiredWithBuffer = requiredAmount * (1 + buffer)\n return balance >= requiredWithBuffer\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { Buffer } from 'buffer'\nimport {\n Connection,\n Transaction,\n VersionedTransaction,\n} from '@solana/web3.js'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport { useSolanaService } from './useSolanaService'\nimport {\n fetchSupportedTokenBalances,\n hasSufficientBalance,\n} from '../utils/solana'\n\ninterface UseSolanaDirectPaymentOptions {\n priceId: string\n tokenAmount: number\n selectedToken: TokenInfo | null\n supportedTokens: TokenInfo[]\n onStart: () => void\n onConfirming: () => void\n onSuccess: (result: SubmitPaymentResponse, txId: string) => void\n onError: (error: string) => void\n}\n\ninterface SolanaDirectPaymentState {\n isBalanceLoading: boolean\n isProcessing: boolean\n balanceLabel: string\n canPay: boolean\n pay: () => Promise<void>\n}\n\ninterface TokenBalanceState {\n balance: number\n hasBalance: boolean\n}\n\nexport const useSolanaDirectPayment = (\n options: UseSolanaDirectPaymentOptions\n): SolanaDirectPaymentState => {\n const { priceId, tokenAmount, selectedToken, supportedTokens, onStart, onConfirming, onSuccess, onError } = options\n const { connected, publicKey, wallet, signTransaction } = useWallet()\n const { config } = usePaymentContext()\n const solanaService = useSolanaService()\n\n const [tokenBalance, setTokenBalance] = useState<TokenBalanceState | null>(null)\n const [isBalanceLoading, setIsBalanceLoading] = useState(false)\n const [isProcessing, setIsProcessing] = useState(false)\n\n const connection = useMemo(() => {\n const rpc = config.solanaRpcUrl ?? 'https://api.mainnet-beta.solana.com'\n return new Connection(rpc)\n }, [config.solanaRpcUrl])\n\n const fetchTokenBalance = useCallback(async () => {\n if (!connected || !publicKey || !selectedToken) {\n setTokenBalance({ balance: 0, hasBalance: false })\n return\n }\n\n try {\n setIsBalanceLoading(true)\n const balances = await fetchSupportedTokenBalances(\n connection,\n publicKey,\n supportedTokens\n )\n const balanceInfo = balances.find(\n (tb) => tb.symbol === selectedToken.symbol || tb.mint === selectedToken.mint\n )\n\n const balance = balanceInfo?.balance || 0\n const hasBalanceFlag = hasSufficientBalance(balance, tokenAmount)\n\n setTokenBalance({ balance, hasBalance: hasBalanceFlag })\n console.log('payments-ui: Solana wallet balance', {\n token: selectedToken.symbol,\n balance,\n required: tokenAmount,\n })\n } catch (error) {\n console.error('Failed to fetch token balance:', {\n token: selectedToken?.symbol,\n error,\n })\n setTokenBalance({ balance: 0, hasBalance: false })\n } finally {\n setIsBalanceLoading(false)\n }\n }, [connected, publicKey, connection, selectedToken, tokenAmount, supportedTokens])\n\n useEffect(() => {\n if (connected && publicKey && selectedToken) {\n void fetchTokenBalance()\n }\n }, [connected, publicKey, selectedToken, tokenAmount, fetchTokenBalance])\n\n const decodeTransaction = useCallback((serialized: string) => {\n const buffer = Buffer.from(serialized, 'base64')\n try {\n return VersionedTransaction.deserialize(buffer)\n } catch (err) {\n try {\n return Transaction.from(buffer)\n } catch (legacyErr) {\n console.error('Failed to deserialize transaction', legacyErr)\n throw new Error('Invalid transaction payload received from server')\n }\n }\n }, [])\n\n const isVersionedTransaction = (tx: unknown): tx is VersionedTransaction => {\n return !!tx && typeof tx === 'object' && 'version' in tx\n }\n\n const signWithWallet = useCallback(\n async (tx: Transaction | VersionedTransaction) => {\n if (!wallet) {\n throw new Error('Wallet adapter is not available')\n }\n\n const adapter = wallet.adapter as unknown as {\n signTransaction?: (transaction: Transaction) => Promise<Transaction>\n signVersionedTransaction?: (\n transaction: VersionedTransaction\n ) => Promise<VersionedTransaction>\n supportedTransactionVersions?: Set<number | 'legacy'> | null\n }\n\n if (isVersionedTransaction(tx)) {\n if (adapter.supportedTransactionVersions) {\n const supported = adapter.supportedTransactionVersions\n if (!supported.has(tx.version)) {\n throw new Error('Connected wallet does not support this transaction version')\n }\n }\n\n if (adapter.signVersionedTransaction) {\n return adapter.signVersionedTransaction(tx)\n }\n }\n\n if (adapter.signTransaction) {\n return adapter.signTransaction(tx as Transaction)\n }\n\n if (signTransaction) {\n return signTransaction(tx as Transaction)\n }\n\n throw new Error('Connected wallet cannot sign transactions')\n },\n [wallet, signTransaction]\n )\n\n const pay = useCallback(async () => {\n if (!connected || !publicKey) {\n onError('Wallet not connected')\n return\n }\n\n if (!selectedToken) {\n onError('No payment token selected')\n return\n }\n\n if (!tokenBalance?.hasBalance) {\n console.warn('payments-ui: insufficient balance for Solana direct payment', {\n token: selectedToken.symbol,\n })\n onError('Insufficient balance for this token')\n return\n }\n\n try {\n setIsProcessing(true)\n onStart()\n console.log('payments-ui: initiating Solana direct payment', {\n priceId,\n token: selectedToken.symbol,\n })\n\n const paymentData = await solanaService.generatePayment(\n priceId,\n selectedToken.symbol,\n publicKey.toBase58()\n )\n console.log('payments-ui: Solana payment intent created', {\n intentId: paymentData.intent_id,\n })\n\n const transactionToSign = decodeTransaction(paymentData.transaction)\n console.log('payments-ui: requesting Solana wallet signature')\n const signedTx = await signWithWallet(transactionToSign)\n const signedSerialized = Buffer.from(signedTx.serialize()).toString('base64')\n\n onConfirming()\n console.log('payments-ui: submitting signed Solana transaction')\n\n const result = await solanaService.submitPayment(\n signedSerialized,\n priceId,\n paymentData.intent_id,\n `Payment for subscription - ${selectedToken.symbol}`\n )\n\n console.log('payments-ui: Solana direct payment confirmed', {\n transactionId: result.transaction_id,\n })\n onSuccess(result, result.transaction_id)\n } catch (err) {\n console.error('Solana direct payment failed:', {\n priceId,\n token: selectedToken.symbol,\n error: err,\n })\n\n let errorMessage = 'Payment failed. Please try again.'\n const message =\n err instanceof Error ? err.message : typeof err === 'string' ? err : ''\n\n if (message.includes('User rejected')) {\n errorMessage = 'Payment cancelled by user'\n } else if (/insufficient\\s+funds/i.test(message)) {\n errorMessage = 'Insufficient balance for this token'\n } else if (message) {\n errorMessage = message\n }\n\n onError(errorMessage)\n } finally {\n setIsProcessing(false)\n }\n }, [\n connected,\n publicKey,\n selectedToken,\n tokenBalance?.hasBalance,\n onError,\n onStart,\n solanaService,\n priceId,\n decodeTransaction,\n signWithWallet,\n onConfirming,\n onSuccess,\n ])\n\n const balanceLabel = tokenBalance\n ? `${tokenBalance.balance.toFixed(4)} ${selectedToken?.symbol ?? ''}`\n : '--'\n\n return {\n isBalanceLoading,\n isProcessing,\n balanceLabel,\n canPay: Boolean(\n connected && tokenBalance?.hasBalance && !isProcessing\n ),\n pay,\n }\n}\n","import React from 'react'\nimport { Loader2, Wallet } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { useSolanaDirectPayment } from '../hooks/useSolanaDirectPayment'\nimport { Button } from '../ui/button'\nimport { Card } from '../ui/card'\n\ninterface DirectPaymentProps {\n priceId: string\n tokenAmount: number\n selectedToken: TokenInfo | null\n supportedTokens: TokenInfo[]\n onPaymentStart: () => void\n onPaymentConfirming: () => void\n onPaymentSuccess: (result: SubmitPaymentResponse, txId: string) => void\n onPaymentError: (error: string) => void\n}\n\nexport const DirectPayment: React.FC<DirectPaymentProps> = ({\n priceId,\n tokenAmount,\n selectedToken,\n supportedTokens,\n onPaymentStart,\n onPaymentConfirming,\n onPaymentSuccess,\n onPaymentError,\n}) => {\n const { isBalanceLoading, balanceLabel, canPay, isProcessing, pay } =\n useSolanaDirectPayment({\n priceId,\n tokenAmount,\n selectedToken,\n supportedTokens,\n onStart: onPaymentStart,\n onConfirming: onPaymentConfirming,\n onSuccess: onPaymentSuccess,\n onError: onPaymentError,\n })\n\n return (\n <Card className=\"space-y-4 border border-border/60 bg-background/80 p-6\">\n <div className=\"space-y-1\">\n <p className=\"flex items-center gap-2 text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n <Wallet className=\"h-4 w-4\" /> Pay with connected wallet\n </p>\n <p className=\"text-sm text-muted-foreground\">\n Sign the transaction directly in your Solana wallet.\n </p>\n </div>\n\n <div className=\"flex items-center justify-between rounded-lg border border-border/50 bg-muted/10 px-4 py-3 text-sm\">\n <span className=\"text-muted-foreground\">Available balance</span>\n {isBalanceLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />\n ) : (\n <strong className=\"text-foreground\">{balanceLabel}</strong>\n )}\n </div>\n\n <Button\n type=\"button\"\n className=\"w-full\"\n disabled={!canPay}\n onClick={pay}\n >\n {isProcessing ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Processing…\n </>\n ) : (\n <>\n <Wallet className=\"mr-2 h-4 w-4\" /> Pay with wallet\n </>\n )}\n </Button>\n </Card>\n )\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport QRCode from 'qrcode'\nimport type { TokenInfo, SubmitPaymentResponse } from '../types'\nimport type {\n SolanaPayQRCodeIntent,\n SolanaPayStatusResponse,\n} from '../types/solana-pay'\nimport { useSolanaService } from './useSolanaService'\n\ninterface UseSolanaQrPaymentOptions {\n priceId: string\n selectedToken: TokenInfo | null\n onSuccess: (result: SubmitPaymentResponse | string, txId: string) => void\n onError: (error: string) => void\n}\n\ninterface UseSolanaQrPaymentState {\n intent: SolanaPayQRCodeIntent | null\n qrDataUri: string | null\n isLoading: boolean\n error: string | null\n timeRemaining: number\n refresh: () => void\n}\n\nexport const useSolanaQrPayment = (\n options: UseSolanaQrPaymentOptions\n): UseSolanaQrPaymentState => {\n const { priceId, selectedToken, onSuccess, onError } = options\n const solanaService = useSolanaService()\n const tokenSymbol = selectedToken?.symbol ?? null\n const onSuccessRef = useRef(onSuccess)\n const onErrorRef = useRef(onError)\n\n const [intent, setIntent] = useState<SolanaPayQRCodeIntent | null>(null)\n const [qrDataUri, setQrDataUri] = useState<string | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [timeRemaining, setTimeRemaining] = useState(0)\n const [refreshNonce, setRefreshNonce] = useState(0)\n\n const pollRef = useRef<NodeJS.Timeout | null>(null)\n const countdownRef = useRef<NodeJS.Timeout | null>(null)\n\n const clearTimers = useCallback(() => {\n if (pollRef.current) {\n clearInterval(pollRef.current)\n pollRef.current = null\n }\n if (countdownRef.current) {\n clearInterval(countdownRef.current)\n countdownRef.current = null\n }\n }, [])\n\n useEffect(() => {\n return () => {\n clearTimers()\n }\n }, [clearTimers])\n\n const resetState = useCallback(\n (message?: string | null) => {\n clearTimers()\n setIntent(null)\n setQrDataUri(null)\n setTimeRemaining(0)\n setError(message ?? null)\n },\n [clearTimers]\n )\n\n useEffect(() => {\n onSuccessRef.current = onSuccess\n }, [onSuccess])\n\n useEffect(() => {\n onErrorRef.current = onError\n }, [onError])\n\n const handleError = useCallback(\n (message: string, notifyParent = false) => {\n console.error('[payments-ui] Solana Pay QR error:', message)\n clearTimers()\n resetState(message)\n if (notifyParent) {\n onErrorRef.current?.(message)\n }\n },\n [clearTimers, resetState]\n )\n\n const handleSuccess = useCallback(\n (status: SolanaPayStatusResponse) => {\n clearTimers()\n resetState(null)\n console.log('[payments-ui] Solana Pay QR confirmed', {\n paymentId: status.payment_id,\n intentId: status.intent_id,\n })\n onSuccessRef.current?.(status.payment_id, status.transaction || '')\n },\n [clearTimers, resetState]\n )\n\n const pollStatus = useCallback(\n async (reference: string) => {\n try {\n const status = await solanaService.checkPaymentStatus(reference)\n\n if (status.status === 'confirmed') {\n handleSuccess(status)\n }\n\n if (status.status === 'failed') {\n handleError(\n status.error_message || 'Payment failed. Please try again.',\n true\n )\n }\n } catch (err) {\n console.error('Failed to poll Solana Pay status:', err)\n }\n },\n [handleError, handleSuccess, solanaService]\n )\n\n const startCountdown = useCallback(\n (expiresAt: number, reference: string) => {\n const updateTime = () => {\n const remaining = Math.max(0, Math.floor(expiresAt - Date.now() / 1000))\n setTimeRemaining(remaining)\n\n if (remaining === 0) {\n handleError('Payment intent expired. Please generate a new QR code.')\n }\n }\n\n updateTime()\n\n countdownRef.current = setInterval(updateTime, 1000)\n pollRef.current = setInterval(() => void pollStatus(reference), 4000)\n },\n [handleError, pollStatus]\n )\n\n const renderQr = useCallback(async (qrIntent: SolanaPayQRCodeIntent) => {\n try {\n const dataUri = await QRCode.toDataURL(qrIntent.url, {\n width: 320,\n margin: 1,\n color: {\n dark: '#0f1116',\n light: '#ffffff',\n },\n })\n setQrDataUri(dataUri)\n } catch (err) {\n console.error('Failed to render QR code:', err)\n handleError('Unable to render QR code')\n }\n }, [handleError])\n\n useEffect(() => {\n let cancelled = false\n\n const generateIntent = async () => {\n clearTimers()\n\n if (!tokenSymbol || !priceId) {\n resetState(null)\n setIsLoading((prev) => (prev ? false : prev))\n return\n }\n\n try {\n setIsLoading(true)\n setError(null)\n console.log('[payments-ui] Requesting Solana Pay QR intent', {\n priceId,\n token: tokenSymbol,\n })\n const nextIntent = await solanaService.generateQRCode(\n priceId,\n tokenSymbol\n )\n if (cancelled) return\n setIntent(nextIntent)\n setTimeRemaining(\n Math.max(0, Math.floor(nextIntent.expires_at - Date.now() / 1000))\n )\n await renderQr(nextIntent)\n console.log('[payments-ui] Solana Pay QR ready', {\n reference: nextIntent.reference,\n })\n startCountdown(nextIntent.expires_at, nextIntent.reference)\n pollStatus(nextIntent.reference)\n } catch (err) {\n if (cancelled) return\n console.error('Failed to generate Solana Pay QR intent:', err)\n const message =\n err instanceof Error\n ? err.message\n : 'Unable to create Solana Pay QR code'\n handleError(message)\n } finally {\n if (!cancelled) {\n setIsLoading(false)\n }\n }\n }\n\n void generateIntent()\n\n return () => {\n cancelled = true\n clearTimers()\n }\n }, [\n clearTimers,\n handleError,\n pollStatus,\n priceId,\n renderQr,\n resetState,\n solanaService,\n startCountdown,\n tokenSymbol,\n refreshNonce,\n ])\n\n const refresh = useCallback(() => {\n setRefreshNonce((value) => value + 1)\n }, [])\n\n return {\n intent,\n qrDataUri,\n isLoading,\n error,\n timeRemaining,\n refresh,\n }\n}\n","import React from 'react'\nimport { Loader2, RefreshCw } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { useSolanaQrPayment } from '../hooks/useSolanaQrPayment'\nimport { Button } from '../ui/button'\nimport { Card } from '../ui/card'\n\ninterface QRCodePaymentProps {\n priceId: string\n selectedToken: TokenInfo | null\n onPaymentError: (error: string) => void\n onPaymentSuccess: (result: SubmitPaymentResponse | string, txId: string) => void\n}\n\nexport const QRCodePayment: React.FC<QRCodePaymentProps> = ({\n priceId,\n selectedToken,\n onPaymentError,\n onPaymentSuccess,\n}) => {\n const { intent, qrDataUri, isLoading, error, timeRemaining, refresh } =\n useSolanaQrPayment({\n priceId,\n selectedToken,\n onError: onPaymentError,\n onSuccess: onPaymentSuccess,\n })\n\n if (!selectedToken) {\n return (\n <div className=\"rounded-xl border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-center text-sm text-muted-foreground\">\n Select a token to continue.\n </div>\n )\n }\n\n return (\n <Card className=\"space-y-4 border border-border/60 bg-background/80 p-6\">\n <div className=\"flex items-start justify-between\">\n <div>\n <p className=\"text-sm font-semibold text-foreground\">Scan with Solana Pay</p>\n <p className=\"text-sm text-muted-foreground\">\n Use any Solana Pay compatible wallet to scan and confirm.\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => refresh()}\n disabled={isLoading}\n >\n {isLoading ? (\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n ) : (\n <RefreshCw className=\"h-4 w-4\" />\n )}\n </Button>\n </div>\n\n {error && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/10 px-4 py-2 text-sm text-destructive\">\n {error}\n </div>\n )}\n\n <div className=\"flex items-center justify-center rounded-2xl border border-dashed border-border/70 bg-muted/5 p-6\">\n {qrDataUri ? (\n <img src={qrDataUri} alt=\"Solana Pay QR\" className=\"h-72 w-72 rounded-lg border border-border/40 bg-card\" />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-sm text-muted-foreground\">\n {isLoading ? (\n <>\n <Loader2 className=\"h-5 w-5 animate-spin\" /> Generating QR code…\n </>\n ) : (\n 'QR code unavailable'\n )}\n </div>\n )}\n </div>\n\n {intent && (\n <div className=\"text-center text-sm text-muted-foreground\">\n Expires in {timeRemaining}s · {intent.token_amount} {intent.token_symbol}\n </div>\n )}\n </Card>\n )\n}\n","import React from 'react'\nimport { CheckCircle, Loader2, RotateCcw, XCircle } from 'lucide-react'\nimport { Button } from '../ui/button'\n\ninterface PaymentStatusProps {\n state: 'selecting' | 'processing' | 'confirming' | 'success' | 'error'\n usdAmount: number\n solAmount?: number\n transactionId?: string | null\n errorMessage?: string | null\n onRetry?: () => void\n onClose?: () => void\n}\n\nexport const PaymentStatus: React.FC<PaymentStatusProps> = ({\n state,\n usdAmount,\n solAmount,\n transactionId,\n errorMessage,\n onRetry,\n onClose,\n}) => {\n if (state === 'processing' || state === 'confirming') {\n return (\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <Loader2 className=\"h-10 w-10 animate-spin text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">\n {state === 'processing' ? 'Processing payment…' : 'Awaiting confirmation…'}\n </p>\n <p className=\"text-sm text-muted-foreground\">\n ${usdAmount.toFixed(2)} {solAmount ? `· ≈ ${solAmount.toFixed(4)} SOL` : ''}\n </p>\n </div>\n </div>\n )\n }\n\n if (state === 'success') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <CheckCircle className=\"h-12 w-12 text-primary\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment complete</p>\n {transactionId && (\n <p className=\"text-xs text-muted-foreground\">Txn: {transactionId}</p>\n )}\n </div>\n <Button variant=\"secondary\" onClick={onClose} className=\"w-full\">\n Close\n </Button>\n </div>\n )\n }\n\n if (state === 'error') {\n return (\n <div className=\"flex flex-col items-center gap-4 text-center\">\n <XCircle className=\"h-12 w-12 text-destructive\" />\n <div>\n <p className=\"text-lg font-semibold text-foreground\">Payment failed</p>\n {errorMessage && (\n <p className=\"text-sm text-muted-foreground\">{errorMessage}</p>\n )}\n </div>\n <div className=\"flex w-full flex-col gap-2 sm:flex-row\">\n {onRetry && (\n <Button variant=\"secondary\" className=\"flex-1\" onClick={onRetry}>\n <RotateCcw className=\"mr-2 h-4 w-4\" /> Try again\n </Button>\n )}\n <Button className=\"flex-1\" onClick={onClose}>\n Close\n </Button>\n </div>\n </div>\n )\n }\n\n return null\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { TokenInfo } from '../types'\nimport { useSolanaService } from './useSolanaService'\n\nexport const useSupportedTokens = () => {\n const solanaService = useSolanaService()\n const [tokens, setTokens] = useState<TokenInfo[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [lastFetched, setLastFetched] = useState<number | null>(null)\n\n // Cache duration: 5 minutes\n const CACHE_DURATION = 5 * 60 * 1000\n\n // Use refs to avoid dependency issues\n const tokensRef = useRef(tokens)\n const lastFetchedRef = useRef(lastFetched)\n\n // Update refs when state changes\n tokensRef.current = tokens\n lastFetchedRef.current = lastFetched\n\n // Fetch supported tokens from backend\n const fetchSupportedTokens = useCallback(async () => {\n // Check if we have fresh cached data\n if (\n tokensRef.current.length > 0 &&\n lastFetchedRef.current &&\n Date.now() - lastFetchedRef.current < CACHE_DURATION\n ) {\n return tokensRef.current\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n console.log('payments-ui: fetching supported Solana tokens')\n const tokens = await solanaService.getSupportedTokens()\n\n // Sort tokens by symbol for consistent ordering\n const sortedTokens = [...tokens].sort((a, b) =>\n a.symbol.localeCompare(b.symbol)\n )\n\n setTokens(sortedTokens)\n console.log('payments-ui: loaded supported tokens', {\n count: sortedTokens.length,\n })\n setLastFetched(Date.now())\n return sortedTokens\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch supported tokens'\n setError(errorMessage)\n console.error('Failed to fetch supported tokens:', error)\n\n // Return empty array on error\n return []\n } finally {\n setIsLoading(false)\n }\n }, [solanaService])\n\n // Auto-fetch on mount\n useEffect(() => {\n if (tokens.length === 0) {\n fetchSupportedTokens()\n }\n }, [tokens.length, fetchSupportedTokens])\n\n // Get token by symbol\n const getTokenBySymbol = useCallback(\n (symbol: string): TokenInfo | undefined => {\n return tokens.find((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get token by mint address\n const getTokenByMint = useCallback(\n (mintAddress: string): TokenInfo | undefined => {\n return tokens.find((token) => token.mint === mintAddress)\n },\n [tokens]\n )\n\n // Check if a token is supported\n const isTokenSupported = useCallback(\n (symbol: string): boolean => {\n return tokens.some((token) => token.symbol === symbol)\n },\n [tokens]\n )\n\n // Get USDC token (primary stablecoin)\n const getUSDCToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('USDC')\n }, [getTokenBySymbol])\n\n // Get PYUSD token (secondary stablecoin)\n const getPYUSDToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('PYUSD')\n }, [getTokenBySymbol])\n\n // Get SOL token (native token)\n const getSOLToken = useCallback((): TokenInfo | undefined => {\n return getTokenBySymbol('SOL')\n }, [getTokenBySymbol])\n\n // Get all stablecoins\n const getStablecoins = useCallback((): TokenInfo[] => {\n return tokens.filter((token) => ['USDC', 'PYUSD'].includes(token.symbol))\n }, [tokens])\n\n // Refresh tokens (bypass cache)\n const refreshTokens = useCallback(async () => {\n setLastFetched(null) // Clear cache\n return await fetchSupportedTokens()\n }, [fetchSupportedTokens])\n\n // Check if cache is stale\n const isCacheStale = useCallback((): boolean => {\n if (!lastFetched) return true\n return Date.now() - lastFetched > CACHE_DURATION\n }, [lastFetched])\n\n // Get token with formatted info for display\n const getTokenDisplayInfo = useCallback((token: TokenInfo) => {\n return {\n ...token,\n displayName: `${token.name} (${token.symbol})`,\n shortAddress: `${token.mint.slice(0, 4)}...${token.mint.slice(-4)}`,\n decimalPlaces: token.decimals,\n }\n }, [])\n\n const getTokenPrice = useCallback(\n (symbol: string): number => {\n const token = getTokenBySymbol(symbol)\n if (!token) return 0\n const price =\n token.price ?? 0\n return typeof price === 'number' ? price : Number(price)\n },\n [getTokenBySymbol]\n )\n\n // Calculate token amount from USD amount\n const calculateTokenAmount = useCallback(\n (usdAmount: number, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n const price = getTokenPrice(tokenSymbol)\n\n if (!token || price === 0) return '0'\n\n const tokenAmount = usdAmount / price\n const tokenAmountInSmallestUnit =\n tokenAmount * Math.pow(10, token.decimals)\n\n return Math.floor(tokenAmountInSmallestUnit).toString()\n },\n [getTokenBySymbol, getTokenPrice]\n )\n\n // Format token amount for display\n const formatTokenAmount = useCallback(\n (amount: string, tokenSymbol: string): string => {\n const token = getTokenBySymbol(tokenSymbol)\n if (!token) return '0'\n\n const numericAmount = parseFloat(amount)\n const displayAmount = numericAmount / Math.pow(10, token.decimals)\n\n return displayAmount.toFixed(token.decimals <= 6 ? token.decimals : 6)\n },\n [getTokenBySymbol]\n )\n\n return {\n tokens,\n isLoading,\n error,\n lastFetched,\n fetchSupportedTokens,\n refreshTokens,\n getTokenBySymbol,\n getTokenByMint,\n isTokenSupported,\n getUSDCToken,\n getPYUSDToken,\n getSOLToken,\n getStablecoins,\n getTokenDisplayInfo,\n getTokenPrice,\n calculateTokenAmount,\n formatTokenAmount,\n isCacheStale,\n hasTokens: tokens.length > 0,\n tokenCount: tokens.length,\n }\n}\n","import { useStore } from 'zustand'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { PaymentStoreState } from '../state/paymentStore'\n\nexport const usePaymentStore = <T>(\n selector: (state: PaymentStoreState) => T\n): T => {\n const { store } = usePaymentContext()\n return useStore(store, selector)\n}\n","import type { PaymentStoreState } from './paymentStore'\n\nexport const selectCheckoutFlow = (state: PaymentStoreState) => ({\n selectedMethodId: state.selectedMethodId,\n savedStatus: state.savedPaymentStatus,\n savedError: state.savedPaymentError,\n newCardStatus: state.newCardStatus,\n newCardError: state.newCardError,\n solanaModalOpen: state.solanaModalOpen,\n setSelectedMethod: state.setSelectedMethod,\n setSolanaModalOpen: state.setSolanaModalOpen,\n startSavedPayment: state.startSavedPayment,\n completeSavedPayment: state.completeSavedPayment,\n failSavedPayment: state.failSavedPayment,\n startNewCardPayment: state.startNewCardPayment,\n completeNewCardPayment: state.completeNewCardPayment,\n failNewCardPayment: state.failNewCardPayment,\n resetSavedPayment: state.resetSavedPayment,\n})\n\nexport const selectSolanaFlow = (state: PaymentStoreState) => ({\n tab: state.solanaTab,\n status: state.solanaStatus,\n error: state.solanaError,\n transactionId: state.solanaTransactionId,\n tokenAmount: state.solanaTokenAmount,\n selectedTokenSymbol: state.solanaSelectedToken,\n setTab: state.setSolanaTab,\n setTokenAmount: state.setSolanaTokenAmount,\n setTransactionId: state.setSolanaTransactionId,\n setSelectedTokenSymbol: state.setSolanaSelectedToken,\n startSolanaPayment: state.startSolanaPayment,\n confirmSolanaPayment: state.confirmSolanaPayment,\n completeSolanaPayment: state.completeSolanaPayment,\n failSolanaPayment: state.failSolanaPayment,\n resetSolanaPayment: state.resetSolanaPayment,\n})\n","import * as TabsPrimitive from '@radix-ui/react-tabs'\nimport { cn } from '../lib/utils'\nimport * as React from 'react'\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground',\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import React, { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { CreditCard, Loader2, Wallet } from 'lucide-react'\nimport type { SubmitPaymentResponse, TokenInfo } from '../types'\nimport { DirectPayment } from './DirectPayment'\nimport { QRCodePayment } from './QRCodePayment'\nimport { PaymentStatus } from './PaymentStatus'\nimport { useSupportedTokens } from '../hooks/useSupportedTokens'\nimport { usePaymentStore } from '../hooks/usePaymentStore'\nimport { selectSolanaFlow } from '../state/selectors'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../ui/dialog'\nimport { Button } from '../ui/button'\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '../ui/tabs'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../ui/select'\nimport { cn } from '../lib/utils'\n\ninterface SolanaPaymentSelectorProps {\n isOpen: boolean\n priceId: string\n usdAmount: number\n onClose: () => void\n onError?: (error: string) => void\n onSuccess: (result: SubmitPaymentResponse | string) => void\n}\n\nexport const SolanaPaymentSelector: React.FC<SolanaPaymentSelectorProps> = ({\n isOpen,\n onClose,\n priceId,\n usdAmount,\n onSuccess,\n onError,\n}) => {\n const { connected } = useWallet()\n const {\n tab: activeTab,\n status: paymentState,\n error: errorMessage,\n transactionId,\n tokenAmount,\n selectedTokenSymbol,\n setTab,\n setTokenAmount,\n setTransactionId,\n setSelectedTokenSymbol,\n startSolanaPayment,\n confirmSolanaPayment,\n completeSolanaPayment,\n failSolanaPayment,\n resetSolanaPayment,\n } = usePaymentStore(selectSolanaFlow)\n\n const {\n tokens,\n isLoading: tokensLoading,\n error: tokensError,\n } = useSupportedTokens()\n\n const selectedToken = useMemo<TokenInfo | null>(() => {\n if (!tokens.length) return null\n const explicit = tokens.find((token) => token.symbol === selectedTokenSymbol)\n return explicit || tokens[0]\n }, [tokens, selectedTokenSymbol])\n\n useEffect(() => {\n if (!selectedTokenSymbol && tokens.length) {\n const defaultToken =\n tokens.find((token) => token.symbol === 'SOL') || tokens[0]\n setSelectedTokenSymbol(defaultToken.symbol)\n }\n }, [tokens, selectedTokenSymbol, setSelectedTokenSymbol])\n\n const handlePaymentStart = useCallback(() => {\n startSolanaPayment()\n }, [startSolanaPayment])\n\n const handlePaymentConfirming = useCallback(() => {\n confirmSolanaPayment()\n }, [confirmSolanaPayment])\n\n const handlePaymentSuccess = useCallback(\n (result: SubmitPaymentResponse | string, txId?: string) => {\n const resolvedTx = txId || (typeof result === 'string' ? result : result.transaction_id)\n setTransactionId(resolvedTx)\n completeSolanaPayment(\n typeof result === 'string'\n ? {\n transactionId: resolvedTx,\n processor: 'solana',\n metadata: { source: 'solana-pay' },\n }\n : {\n transactionId: result.transaction_id,\n intentId: result.intent_id,\n processor: 'solana',\n metadata: {\n purchaseId: result.purchase_id,\n amount: result.amount,\n currency: result.currency,\n },\n }\n )\n\n setTimeout(() => {\n onSuccess(result)\n }, 1500)\n },\n [completeSolanaPayment, onSuccess, setTransactionId]\n )\n\n const handlePaymentError = useCallback(\n (error: string) => {\n failSolanaPayment(error)\n onError?.(error)\n },\n [failSolanaPayment, onError]\n )\n\n const handleRetry = useCallback(() => {\n resetSolanaPayment()\n setTransactionId(null)\n }, [resetSolanaPayment, setTransactionId])\n\n const handleClose = useCallback(() => {\n if (paymentState === 'processing' || paymentState === 'confirming') {\n return\n }\n\n resetSolanaPayment()\n setTransactionId(null)\n onClose()\n }, [paymentState, resetSolanaPayment, setTransactionId, onClose])\n\n useEffect(() => {\n if (!isOpen || !selectedToken || usdAmount === 0) {\n setTokenAmount(0)\n return\n }\n\n const price = selectedToken.price ?? 0\n if (!price || price <= 0) {\n setTokenAmount(0)\n return\n }\n\n setTokenAmount(usdAmount / price)\n }, [isOpen, usdAmount, selectedToken, setTokenAmount])\n\n const handleTokenChange = useCallback(\n (value: string) => {\n setSelectedTokenSymbol(value)\n },\n [setSelectedTokenSymbol]\n )\n\n const wasConnectedRef = useRef(connected)\n\n useEffect(() => {\n if (connected && !wasConnectedRef.current) {\n setTab('wallet')\n }\n\n if (!connected && wasConnectedRef.current) {\n setTab('qr')\n }\n\n wasConnectedRef.current = connected\n }, [connected, setTab])\n\n const renderBody = () => {\n if (paymentState !== 'selecting') {\n return (\n <PaymentStatus\n state={paymentState}\n usdAmount={usdAmount}\n solAmount={tokenAmount}\n onRetry={handleRetry}\n onClose={handleClose}\n errorMessage={errorMessage}\n transactionId={transactionId}\n />\n )\n }\n\n return (\n <div className=\"space-y-6\">\n {tokensLoading ? (\n <div className=\"flex items-center justify-center rounded-lg border border-dashed border-border/60 bg-muted/10 py-8 text-sm text-muted-foreground\">\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Loading supported tokens…\n </div>\n ) : tokensError ? (\n <div className=\"rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\">\n {tokensError}\n </div>\n ) : !tokens.length ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 px-4 py-6 text-sm text-muted-foreground\">\n No payment tokens available.\n </div>\n ) : (\n <>\n <div className=\"rounded-xl border border-border/60 bg-muted/10 p-4 text-center\">\n <div className=\"text-2xl font-semibold text-foreground\">\n ${usdAmount.toFixed(2)} USD\n </div>\n {selectedToken && tokenAmount > 0 && (\n <div className=\"text-sm text-muted-foreground\">\n ≈ {tokenAmount.toFixed(selectedToken.symbol === 'SOL' ? 4 : 2)} {selectedToken.symbol}\n </div>\n )}\n </div>\n\n <Select value={selectedToken?.symbol ?? ''} onValueChange={handleTokenChange}>\n <SelectTrigger>\n <SelectValue placeholder=\"Select token\" />\n </SelectTrigger>\n <SelectContent className=\"max-h-64\">\n {tokens.map((token) => (\n <SelectItem key={token.symbol} value={token.symbol}>\n {token.name} ({token.symbol})\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n\n <Tabs\n value={activeTab}\n onValueChange={(value) => setTab(value as 'wallet' | 'qr')}\n className=\"w-full\"\n >\n <TabsList className=\"grid w-full grid-cols-2 bg-muted/20\">\n <TabsTrigger value=\"wallet\" disabled={!connected}>\n <Wallet className=\"mr-2 h-4 w-4\" /> Pay with Wallet\n </TabsTrigger>\n <TabsTrigger value=\"qr\">\n <CreditCard className=\"mr-2 h-4 w-4\" /> Scan QR Code\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"wallet\" className=\"mt-4\">\n {activeTab === 'wallet' && (\n <DirectPayment\n priceId={priceId}\n tokenAmount={tokenAmount}\n selectedToken={selectedToken}\n supportedTokens={tokens}\n onPaymentStart={handlePaymentStart}\n onPaymentConfirming={handlePaymentConfirming}\n onPaymentSuccess={handlePaymentSuccess}\n onPaymentError={handlePaymentError}\n />\n )}\n </TabsContent>\n <TabsContent value=\"qr\" className=\"mt-4\">\n {activeTab === 'qr' && (\n <QRCodePayment\n priceId={priceId}\n selectedToken={selectedToken}\n onPaymentError={handlePaymentError}\n onPaymentSuccess={handlePaymentSuccess}\n />\n )}\n </TabsContent>\n </Tabs>\n\n {!connected && activeTab === 'wallet' && (\n <div className=\"rounded-xl border border-amber-500/40 bg-amber-500/10 p-4 text-sm text-amber-100\">\n Please connect your Solana wallet to complete this payment, or switch to QR mode.\n </div>\n )}\n </>\n )}\n </div>\n )\n }\n\n return (\n <Dialog open={isOpen} onOpenChange={handleClose}>\n <DialogContent className=\"sm:max-w-lg\">\n <DialogHeader className=\"space-y-1\">\n <DialogTitle>Complete your payment</DialogTitle>\n <DialogDescription>\n Select a token and preferred method. We’ll guide you through the rest.\n </DialogDescription>\n </DialogHeader>\n {renderBody()}\n </DialogContent>\n </Dialog>\n )\n}\n","import React from 'react'\nimport { CreditCard, Sparkles } from 'lucide-react'\nimport type { BillingDetails, PaymentMethod, SubmitPaymentResponse } from '../types'\nimport { CardDetailsForm } from './CardDetailsForm'\nimport { StoredPaymentMethods } from './StoredPaymentMethods'\nimport { SolanaPaymentSelector } from './SolanaPaymentSelector'\nimport { usePaymentStore } from '../hooks/usePaymentStore'\nimport { selectCheckoutFlow } from '../state/selectors'\nimport { Button } from '../ui/button'\nimport { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../ui/card'\nimport { Separator } from '../ui/separator'\n\nexport interface PaymentExperienceProps {\n priceId: string\n usdAmount: number\n onNewCardPayment?: (payload: {\n token: string\n billing: BillingDetails\n }) => Promise<void> | void\n onSavedMethodPayment?: (payload: {\n paymentMethodId: string\n amount: number\n }) => Promise<void> | void\n enableNewCard?: boolean\n enableStoredMethods?: boolean\n enableSolanaPay?: boolean\n checkoutSummary?: React.ReactNode\n onSolanaSuccess?: (result: SubmitPaymentResponse | string) => void\n onSolanaError?: (error: string) => void\n}\n\nexport const PaymentExperience: React.FC<PaymentExperienceProps> = ({\n priceId,\n usdAmount,\n onNewCardPayment,\n onSavedMethodPayment,\n enableNewCard = true,\n enableStoredMethods = true,\n enableSolanaPay = true,\n checkoutSummary,\n onSolanaSuccess,\n onSolanaError,\n}) => {\n const showNewCard = enableNewCard && Boolean(onNewCardPayment)\n const showStored = enableStoredMethods\n\n const {\n selectedMethodId,\n savedStatus,\n savedError,\n newCardStatus,\n newCardError,\n solanaModalOpen,\n setSelectedMethod,\n setSolanaModalOpen,\n startSavedPayment,\n completeSavedPayment,\n failSavedPayment,\n startNewCardPayment,\n completeNewCardPayment,\n failNewCardPayment,\n resetSavedPayment,\n } = usePaymentStore(selectCheckoutFlow)\n\n const handleMethodSelect = (method: PaymentMethod) => {\n setSelectedMethod(method.id)\n resetSavedPayment()\n }\n\n const handleNewCardTokenize = async (token: string, billing: BillingDetails) => {\n if (!onNewCardPayment) return\n try {\n startNewCardPayment()\n await onNewCardPayment({ token, billing })\n completeNewCardPayment()\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unable to complete payment'\n failNewCardPayment(message)\n }\n }\n\n const handleSavedPayment = async () => {\n if (!onSavedMethodPayment || !selectedMethodId) return\n try {\n startSavedPayment()\n await onSavedMethodPayment({\n paymentMethodId: selectedMethodId,\n amount: usdAmount,\n })\n completeSavedPayment()\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : 'Unable to complete payment with saved card'\n failSavedPayment(message)\n }\n }\n\n return (\n <div className=\"space-y-8\">\n <Card className=\"border-border/60 bg-card/95\">\n <CardHeader className=\"flex flex-col gap-3 md:flex-row md:items-center md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2 text-lg text-foreground\">\n <CreditCard className=\"h-5 w-5 text-primary\" /> Secure checkout\n </CardTitle>\n <CardDescription>Amount due: ${usdAmount.toFixed(2)}</CardDescription>\n </div>\n {checkoutSummary && <div>{checkoutSummary}</div>}\n </CardHeader>\n <CardContent>\n <div className=\"grid gap-8 lg:grid-cols-2\">\n {showStored && (\n <div className=\"space-y-4\">\n <StoredPaymentMethods\n selectedMethodId={selectedMethodId}\n onMethodSelect={handleMethodSelect}\n heading=\"Saved cards\"\n description=\"Use or manage your saved payment methods.\"\n />\n {onSavedMethodPayment && (\n <Button\n className=\"w-full\"\n disabled={!selectedMethodId || savedStatus === 'processing'}\n onClick={handleSavedPayment}\n >\n {savedStatus === 'processing' ? 'Processing…' : 'Pay with selected card'}\n </Button>\n )}\n {savedError && (\n <p className=\"text-sm text-destructive\">{savedError}</p>\n )}\n </div>\n )}\n\n {showNewCard && (\n <div className=\"space-y-4\">\n <div className=\"rounded-2xl border border-border/60 bg-background/80 p-6\">\n <div className=\"mb-4 space-y-1\">\n <p className=\"flex items-center gap-2 text-sm font-semibold uppercase tracking-wide text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" /> Pay with a new card\n </p>\n <p className=\"text-sm text-muted-foreground\">\n Card details are tokenized via Collect.js and never hit your server.\n </p>\n </div>\n <CardDetailsForm\n visible\n submitLabel=\"Pay now\"\n submitting={newCardStatus === 'processing'}\n externalError={newCardError}\n onTokenize={handleNewCardTokenize}\n />\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n\n {enableSolanaPay && (\n <Card className=\"border border-primary/40 bg-primary/5\">\n <CardContent className=\"flex flex-col gap-4 text-sm text-primary md:flex-row md:items-center md:justify-between\">\n <div>\n <p className=\"flex items-center gap-2 text-base font-semibold text-primary\">\n <Sparkles className=\"h-4 w-4\" /> Prefer Solana Pay?\n </p>\n <p className=\"text-sm text-primary/80\">Use a Solana wallet or QR code for instant settlement.</p>\n </div>\n <Button onClick={() => setSolanaModalOpen(true)}>Open Solana Pay</Button>\n </CardContent>\n </Card>\n )}\n\n {enableSolanaPay && (\n <SolanaPaymentSelector\n isOpen={solanaModalOpen}\n onClose={() => setSolanaModalOpen(false)}\n priceId={priceId}\n usdAmount={usdAmount}\n onSuccess={(result) => {\n setSolanaModalOpen(false)\n onSolanaSuccess?.(result)\n }}\n onError={onSolanaError}\n />\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n )\n)\nTable.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn('bg-muted/50 font-medium text-muted-foreground', className)} {...props} />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr ref={ref} className={cn('border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted', className)} {...props} />\n))\nTableRow.displayName = 'TableRow'\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle text-xs font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n)\nTableHead.displayName = 'TableHead'\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn('p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', className)}\n {...props}\n />\n )\n)\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n))\nTableCaption.displayName = 'TableCaption'\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import * as React from 'react'\nimport * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog'\n\nimport { cn } from '../lib/utils'\nimport { buttonVariants } from './button'\n\nconst AlertDialog = AlertDialogPrimitive.Root\nconst AlertDialogTrigger = AlertDialogPrimitive.Trigger\nconst AlertDialogPortal = AlertDialogPrimitive.Portal\n\nconst AlertDialogOverlay = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-background/80 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n className\n )}\n {...props}\n />\n))\nAlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName\n\nconst AlertDialogContent = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-popover p-6 text-popover-foreground shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n))\nAlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName\n\nconst AlertDialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n)\nAlertDialogHeader.displayName = 'AlertDialogHeader'\n\nconst AlertDialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end sm:gap-2', className)}\n {...props}\n />\n)\nAlertDialogFooter.displayName = 'AlertDialogFooter'\n\nconst AlertDialogTitle = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold', className)} {...props} />\n))\nAlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName\n\nconst AlertDialogDescription = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n))\nAlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName\n\nconst AlertDialogAction = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Action>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Action ref={ref} className={cn(buttonVariants(), className)} {...props} />\n))\nAlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName\n\nconst AlertDialogCancel = React.forwardRef<\n React.ElementRef<typeof AlertDialogPrimitive.Cancel>,\n React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>\n>(({ className, ...props }, ref) => (\n <AlertDialogPrimitive.Cancel\n ref={ref}\n className={cn(buttonVariants({ variant: 'outline' }), 'mt-2 sm:mt-0', className)}\n {...props}\n />\n))\nAlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName\n\nexport {\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogHeader,\n AlertDialogFooter,\n AlertDialogTitle,\n AlertDialogDescription,\n AlertDialogAction,\n AlertDialogCancel,\n}\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, React.ComponentProps<'textarea'>>(\n ({ className, ...props }, ref) => (\n <textarea\n ref={ref}\n className={cn(\n 'flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n )\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","import { useEffect, useState } from 'react'\nimport { Ban, TriangleAlert } from 'lucide-react'\nimport { Button } from '../../ui/button'\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from '../../ui/alert-dialog'\nimport { Label } from '../../ui/label'\nimport { Textarea } from '../../ui/textarea'\nimport { cn } from '../../lib/utils'\nimport { usePaymentContext } from '../../context/PaymentContext'\nimport type { NotificationHandler, NotificationPayload } from '../../types'\n\nexport interface CancelMembershipDialogProps {\n minReasonLength?: number\n onCancelled?: () => void\n onNotify?: NotificationHandler\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] cancellation', payload)\n}\n\nexport const CancelMembershipDialog: React.FC<CancelMembershipDialogProps> = ({\n minReasonLength = 15,\n onCancelled,\n onNotify,\n}) => {\n const { services } = usePaymentContext()\n const notify = onNotify ?? notifyDefault\n\n const [cancelReason, setCancelReason] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [isReasonValid, setIsReasonValid] = useState(false)\n const [hasInteracted, setHasInteracted] = useState(false)\n const [isSubmitting, setIsSubmitting] = useState(false)\n\n useEffect(() => {\n const trimmed = cancelReason.trim()\n setIsReasonValid(trimmed.length >= minReasonLength)\n }, [cancelReason, minReasonLength])\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (!open) {\n setCancelReason('')\n setIsReasonValid(false)\n setHasInteracted(false)\n setIsSubmitting(false)\n }\n }\n\n const handleReasonChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCancelReason(e.target.value)\n if (!hasInteracted) {\n setHasInteracted(true)\n }\n }\n\n const handleConfirm = async () => {\n if (!isReasonValid) {\n setHasInteracted(true)\n return\n }\n\n setIsSubmitting(true)\n try {\n await services.subscriptions.cancelSubscription(cancelReason.trim())\n notify({\n title: 'Membership cancelled',\n description: 'Your subscription has been cancelled successfully.',\n status: 'success',\n })\n onCancelled?.()\n handleOpenChange(false)\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Unable to cancel membership'\n notify({ title: 'Cancellation failed', description: message, status: 'destructive' })\n } finally {\n setIsSubmitting(false)\n }\n }\n\n const showError = hasInteracted && !isReasonValid\n\n return (\n <AlertDialog open={isOpen} onOpenChange={handleOpenChange}>\n <AlertDialogTrigger asChild>\n <Button variant=\"outline\" className=\"border-destructive/50 text-destructive\">\n <Ban className=\"mr-2 h-4 w-4\" /> Cancel Membership\n </Button>\n </AlertDialogTrigger>\n\n <AlertDialogContent className=\"max-h-[90vh] overflow-y-auto rounded-xl border border-border bg-background\">\n <AlertDialogHeader>\n <AlertDialogTitle className=\"flex items-center gap-2 text-lg font-semibold\">\n <TriangleAlert className=\"h-5 w-5 text-destructive\" /> Confirm Membership Cancellation\n </AlertDialogTitle>\n <AlertDialogDescription className=\"mt-3 space-y-3 text-muted-foreground\">\n <p>You are about to cancel your membership. Please review the consequences:</p>\n <ul className=\"list-disc space-y-1 pl-5 text-sm\">\n <li>\n You will immediately lose access to premium features upon confirmation.\n </li>\n <li>Your benefits remain active until the end of the billing cycle.</li>\n <li>Your account will revert to the free plan afterwards.</li>\n </ul>\n </AlertDialogDescription>\n </AlertDialogHeader>\n\n <div className=\"my-4 space-y-2 py-2\">\n <Label htmlFor=\"cancelReason\" className=\"text-sm font-medium\">\n Please provide a reason for cancellation (required):\n </Label>\n <Textarea\n id=\"cancelReason\"\n value={cancelReason}\n onChange={handleReasonChange}\n placeholder=\"Your feedback helps us improve...\"\n className={cn(\n 'w-full resize-none border-border bg-background',\n showError && 'border-destructive'\n )}\n rows={4}\n aria-describedby=\"reason-hint\"\n aria-invalid={showError}\n />\n <p\n id=\"reason-hint\"\n className={`text-xs ${showError ? 'text-destructive' : 'text-muted-foreground'}`}\n >\n {showError\n ? `Reason must be at least ${minReasonLength} characters long.`\n : `Minimum ${minReasonLength} characters required.`}\n </p>\n </div>\n\n <AlertDialogFooter className=\"mt-6 gap-2\">\n <AlertDialogCancel asChild>\n <Button variant=\"outline\" className=\"border-border text-muted-foreground\">\n Keep Membership\n </Button>\n </AlertDialogCancel>\n <AlertDialogAction asChild>\n <Button\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n onClick={handleConfirm}\n disabled={!isReasonValid || isSubmitting}\n >\n {isSubmitting ? 'Cancelling...' : 'Confirm Cancellation'}\n </Button>\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport { useInfiniteQuery, type InfiniteData } from '@tanstack/react-query'\nimport { ChevronDown } from 'lucide-react'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../../ui/table'\nimport { Card, CardContent, CardDescription, CardTitle } from '../../ui/card'\nimport { Badge } from '../../ui/badge'\nimport { cn } from '../../lib/utils'\nimport { usePaymentContext } from '../../context/PaymentContext'\nimport type { NotificationHandler, NotificationPayload, PaginatedPayments } from '../../types'\nimport { CancelMembershipDialog } from './CancelMembershipDialog'\n\nexport interface BillingHistoryProps {\n pageSize?: number\n initialPage?: number\n enableCancel?: boolean\n onNotify?: NotificationHandler\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] billing', payload)\n}\n\nexport const BillingHistory: React.FC<BillingHistoryProps> = ({\n pageSize = 10,\n initialPage = 1,\n enableCancel = true,\n onNotify,\n}) => {\n const { services } = usePaymentContext()\n const notify = onNotify ?? notifyDefault\n const [isExpanded, setIsExpanded] = useState(false)\n const observerRef = useRef<IntersectionObserver | null>(null)\n const loadMoreRef = useRef<HTMLDivElement>(null)\n\n const historyQuery = useInfiniteQuery<PaginatedPayments, Error, PaginatedPayments, ['payments-ui', 'billing-history', number], number>({\n queryKey: ['payments-ui', 'billing-history', pageSize],\n queryFn: async ({ pageParam = initialPage }) => {\n const offset = (pageParam - 1) * pageSize\n return services.subscriptions.getPaymentHistory({ limit: pageSize, offset })\n },\n initialPageParam: initialPage,\n getNextPageParam: (lastPage) => {\n const nextOffset = (lastPage.offset ?? 0) + lastPage.data.length\n if (lastPage.total_items <= nextOffset) {\n return undefined\n }\n return lastPage.page ? lastPage.page + 1 : initialPage + 1\n },\n staleTime: 5 * 60 * 1000,\n })\n\n useEffect(() => {\n if (!loadMoreRef.current || !isExpanded) return\n\n observerRef.current = new IntersectionObserver((entries) => {\n const [entry] = entries\n if (entry?.isIntersecting && historyQuery.hasNextPage && !historyQuery.isFetchingNextPage) {\n historyQuery.fetchNextPage().catch(() => {\n notify({ title: 'Failed to load more history', status: 'destructive' })\n })\n }\n })\n\n observerRef.current.observe(loadMoreRef.current)\n\n return () => {\n observerRef.current?.disconnect()\n }\n }, [historyQuery, isExpanded, notify])\n\n const payments = useMemo<PaginatedPayments[]>(() => {\n const data = historyQuery.data as InfiniteData<PaginatedPayments> | undefined\n return data?.pages ?? []\n }, [historyQuery.data])\n\n const formatDate = (value: string) =>\n new Date(value).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n })\n\n const formatAmount = (amount: number, currency: string) => {\n try {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n } catch {\n return `${amount.toFixed(2)} ${currency}`\n }\n }\n\n return (\n <Card className=\"border-0 bg-background/5 shadow-lg\">\n <div className=\"p-4 sm:p-6\">\n <div className=\"flex cursor-pointer items-center justify-between\" onClick={() => setIsExpanded((prev) => !prev)}>\n <div>\n <CardTitle className=\"text-xl font-semibold\">Transaction History</CardTitle>\n <CardDescription>Record of billing history</CardDescription>\n </div>\n <ChevronDown className={cn('h-5 w-5 text-muted-foreground transition-transform', isExpanded && 'rotate-180')} />\n </div>\n\n <div\n className={cn(\n 'overflow-hidden transition-all duration-300',\n isExpanded ? 'mt-4 max-h-[1000px] opacity-100' : 'max-h-0 opacity-0'\n )}\n >\n <CardContent className=\"p-0 pt-4\">\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between\">\n <p className=\"text-sm text-muted-foreground\">Review your account activity below</p>\n {enableCancel && <CancelMembershipDialog onNotify={notify} />}\n </div>\n\n <div className=\"max-h-[300px] overflow-y-auto rounded-lg border border-border/70\">\n <div className=\"overflow-x-auto\">\n {historyQuery.isLoading ? (\n <p className=\"p-4 text-center text-sm text-muted-foreground\">Loading...</p>\n ) : historyQuery.isError ? (\n <p className=\"p-4 text-center text-sm text-destructive\">Error loading billing history.</p>\n ) : (\n <Table>\n <TableHeader>\n <TableRow className=\"border-border/60\">\n <TableHead>Reference</TableHead>\n <TableHead>Date</TableHead>\n <TableHead>Amount</TableHead>\n <TableHead>Processor</TableHead>\n <TableHead>Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {payments.map((page) =>\n page.data.map((payment) => (\n <TableRow key={payment.id} className=\"border-border/40\">\n <TableCell className=\"font-mono text-sm\">\n {payment.id.slice(0, 7).toUpperCase()}\n </TableCell>\n <TableCell>{formatDate(payment.purchased_at)}</TableCell>\n <TableCell>{formatAmount(payment.amount, payment.currency)}</TableCell>\n <TableCell className=\"capitalize\">{payment.processor}</TableCell>\n <TableCell>\n <Badge className=\"bg-emerald-500/10 text-emerald-400\">\n {(payment.status || 'completed').toLowerCase()}\n </Badge>\n </TableCell>\n </TableRow>\n ))\n )}\n </TableBody>\n </Table>\n )}\n </div>\n </div>\n\n <div ref={loadMoreRef} className=\"h-10 w-full\">\n {historyQuery.isFetchingNextPage && (\n <p className=\"text-center text-sm text-muted-foreground\">Loading more...</p>\n )}\n </div>\n </div>\n </CardContent>\n </div>\n </div>\n </Card>\n )\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'\nimport { CreditCard, Loader2, Trash2, WalletCards } from 'lucide-react'\nimport { Button } from '../../ui/button'\nimport {\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n} from '../../ui/card'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '../../ui/dialog'\nimport { Badge } from '../../ui/badge'\nimport { CardDetailsForm } from '../CardDetailsForm'\nimport type {\n BillingDetails,\n CreatePaymentMethodPayload,\n NotificationHandler,\n NotificationPayload,\n PaginatedPaymentMethods,\n PaymentMethod,\n} from '../../types'\nimport { usePaymentMethodService } from '../../hooks/usePaymentMethodService'\n\nexport interface PaymentMethodsSectionProps {\n isAuthenticated?: boolean\n userEmail?: string | null\n provider?: string\n defaultCountry?: string\n collectPrefix?: string\n onNotify?: NotificationHandler\n}\n\nconst formatCardLabel = (method: PaymentMethod): string => {\n const brand = method.card_type ? method.card_type.toUpperCase() : 'CARD'\n const lastFour = method.last_four ? `•••• ${method.last_four}` : ''\n return `${brand} ${lastFour}`.trim()\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n const level = payload.status === 'destructive' ? 'error' : 'info'\n console[level === 'error' ? 'error' : 'log']('[payments-ui] notification', payload)\n}\n\nexport const PaymentMethodsSection: React.FC<PaymentMethodsSectionProps> = ({\n isAuthenticated = true,\n userEmail,\n provider = 'mobius',\n defaultCountry = 'US',\n collectPrefix = 'account-card',\n onNotify,\n}) => {\n const paymentMethods = usePaymentMethodService()\n const queryClient = useQueryClient()\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [deletingId, setDeletingId] = useState<string | null>(null)\n const notify = onNotify ?? notifyDefault\n\n const queryKey = ['payments-ui', 'payment-methods']\n\n const paymentQuery = useQuery<PaginatedPaymentMethods>({\n queryKey,\n queryFn: () => paymentMethods.list({ pageSize: 50 }),\n enabled: isAuthenticated,\n staleTime: 30_000,\n })\n\n const createMutation = useMutation<PaymentMethod, Error, CreatePaymentMethodPayload>({\n mutationFn: (payload) => paymentMethods.create(payload),\n onSuccess: () => {\n notify({ title: 'Card added successfully', status: 'success' })\n setIsModalOpen(false)\n void queryClient.invalidateQueries({ queryKey })\n },\n onError: (error) => {\n notify({\n title: 'Unable to add card',\n description: error.message,\n status: 'destructive',\n })\n },\n })\n\n const deleteMutation = useMutation<void, Error, string>({\n mutationFn: (id) => paymentMethods.remove(id),\n onMutate: (id) => setDeletingId(id),\n onSuccess: () => {\n notify({ title: 'Card removed', status: 'success' })\n void queryClient.invalidateQueries({ queryKey })\n },\n onError: (error) => {\n notify({\n title: 'Unable to remove card',\n description: error.message,\n status: 'destructive',\n })\n },\n onSettled: () => setDeletingId(null),\n })\n\n useEffect(() => {\n if (!isModalOpen) {\n createMutation.reset()\n }\n }, [createMutation, isModalOpen])\n\n const payments = useMemo(() => paymentQuery.data?.data ?? [], [paymentQuery.data])\n const loading = paymentQuery.isLoading || paymentQuery.isFetching\n\n const handleCardTokenize = (token: string, billing: BillingDetails) => {\n const payload: CreatePaymentMethodPayload = {\n payment_token: token,\n first_name: billing.firstName,\n last_name: billing.lastName,\n address1: billing.address1,\n address2: billing.address2,\n city: billing.city,\n state: billing.stateRegion,\n zip: billing.postalCode,\n country: billing.country,\n email: billing.email,\n provider: billing.provider,\n }\n\n createMutation.mutate(payload)\n }\n\n return (\n <Card className=\"border-0 bg-background/5 shadow-lg\">\n <CardHeader className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n <div>\n <CardTitle className=\"flex items-center gap-2 text-xl\">\n <WalletCards className=\"h-5 w-5 text-primary\" /> Payment Methods\n </CardTitle>\n <CardDescription>Manage your saved billing cards</CardDescription>\n </div>\n <Button onClick={() => setIsModalOpen(true)}>\n <CreditCard className=\"mr-2 h-4 w-4\" /> Add card\n </Button>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {loading ? (\n <div className=\"flex items-center justify-center py-10 text-muted-foreground\">\n <Loader2 className=\"mr-2 h-5 w-5 animate-spin\" /> Loading cards...\n </div>\n ) : payments.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-border/60 bg-muted/10 p-6 text-sm text-muted-foreground\">\n No saved payment methods yet.\n </div>\n ) : (\n <div className=\"space-y-3\">\n {payments.map((method) => (\n <div\n key={method.id}\n className=\"rounded-lg border border-border/80 bg-background/40 p-4 shadow-sm\"\n >\n <div className=\"flex flex-col gap-2 md:flex-row md:items-center md:justify-between\">\n <div>\n <h4 className=\"text-base font-medium text-foreground\">\n {formatCardLabel(method)}\n </h4>\n <p className=\"text-sm text-muted-foreground\">\n Added on{' '}\n {method.created_at\n ? new Date(method.created_at).toLocaleDateString()\n : 'unknown date'}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Badge\n variant={method.is_active ? 'default' : 'secondary'}\n className={method.is_active ? 'bg-emerald-500/20 text-emerald-400' : ''}\n >\n {method.is_active ? 'Active' : 'Inactive'}\n </Badge>\n {method.failure_reason && (\n <Badge variant=\"destructive\">{method.failure_reason}</Badge>\n )}\n </div>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button\n variant=\"ghost\"\n className=\"text-destructive hover:text-destructive\"\n disabled={deletingId === method.id && deleteMutation.isPending}\n onClick={() => deleteMutation.mutate(method.id)}\n >\n {deletingId === method.id && deleteMutation.isPending ? (\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n ) : (\n <Trash2 className=\"mr-2 h-4 w-4\" />\n )}\n Remove\n </Button>\n </div>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n\n <Dialog open={isModalOpen} onOpenChange={setIsModalOpen}>\n <DialogContent className=\"max-h-[95vh] overflow-y-auto border border-border bg-background\">\n <DialogHeader>\n <DialogTitle>Add a new card</DialogTitle>\n <DialogDescription>\n Your card details are tokenized securely via our payment provider.\n </DialogDescription>\n </DialogHeader>\n\n <CardDetailsForm\n visible={isModalOpen}\n collectPrefix={collectPrefix}\n submitting={createMutation.isPending}\n submitLabel=\"Save card\"\n defaultValues={{\n email: userEmail ?? '',\n country: defaultCountry,\n provider,\n }}\n externalError={createMutation.error?.message ?? null}\n onTokenize={handleCardTokenize}\n className=\"rounded-2xl border border-border bg-muted/20 p-6\"\n />\n </DialogContent>\n </Dialog>\n </Card>\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { SolanaWallet } from '../types'\n\ninterface UseWalletListOptions {\n autoFetch?: boolean\n}\n\ninterface WalletListState {\n wallets: SolanaWallet[]\n isLoading: boolean\n error: string | null\n}\n\nexport const useWalletList = (\n options: UseWalletListOptions = {}\n) => {\n const { services } = usePaymentContext()\n const [state, setState] = useState<WalletListState>({\n wallets: [],\n isLoading: false,\n error: null,\n })\n\n const fetchWallets = useCallback(async () => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }))\n try {\n const wallets = await services.solanaWallets.list()\n setState({ wallets, isLoading: false, error: null })\n return wallets\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Failed to load wallets'\n console.error('payments-ui: wallet list fetch failed', error)\n setState((prev) => ({ ...prev, isLoading: false, error: message }))\n throw error\n }\n }, [services.solanaWallets])\n\n const deleteWallet = useCallback(\n async (walletIdOrAddress: string) => {\n setState((prev) => ({ ...prev, isLoading: true, error: null }))\n try {\n await services.solanaWallets.remove(walletIdOrAddress)\n setState((prev) => ({\n ...prev,\n wallets: prev.wallets.filter(\n (wallet) => wallet.id !== walletIdOrAddress && wallet.address !== walletIdOrAddress\n ),\n isLoading: false,\n }))\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Failed to remove wallet'\n console.error('payments-ui: wallet removal failed', error)\n setState((prev) => ({ ...prev, isLoading: false, error: message }))\n throw error\n }\n },\n [services.solanaWallets]\n )\n\n const addWallet = useCallback((wallet: SolanaWallet) => {\n setState((prev) => ({ ...prev, wallets: [...prev.wallets, wallet] }))\n }, [])\n\n const updateWallet = useCallback((walletId: string, updates: Partial<SolanaWallet>) => {\n setState((prev) => ({\n ...prev,\n wallets: prev.wallets.map((wallet) =>\n wallet.id === walletId ? { ...wallet, ...updates } : wallet\n ),\n }))\n }, [])\n\n const clearError = useCallback(() => {\n setState((prev) => ({ ...prev, error: null }))\n }, [])\n\n const findWalletByAddress = useCallback(\n (address: string) => state.wallets.find((wallet) => wallet.address === address),\n [state.wallets]\n )\n\n const getVerifiedWallets = useCallback(\n () => state.wallets.filter((wallet) => wallet.is_verified),\n [state.wallets]\n )\n\n useEffect(() => {\n if (options.autoFetch !== false) {\n fetchWallets().catch(() => {\n /* error handled above */\n })\n }\n }, [fetchWallets, options.autoFetch])\n\n return {\n wallets: state.wallets,\n isLoading: state.isLoading,\n error: state.error,\n fetchWallets,\n deleteWallet,\n addWallet,\n updateWallet,\n clearError,\n findWalletByAddress,\n getVerifiedWallets,\n hasVerifiedWallets: state.wallets.some((w) => w.is_verified),\n totalWallets: state.wallets.length,\n }\n}\n","import { useCallback, useState } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport bs58 from 'bs58'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface WalletVerificationState {\n isVerifying: boolean\n isVerified: boolean\n error: string | null\n}\n\nexport const useWalletVerification = () => {\n const { services } = usePaymentContext()\n const { publicKey, signMessage } = useWallet()\n const [state, setState] = useState<WalletVerificationState>({\n isVerifying: false,\n isVerified: false,\n error: null,\n })\n\n const signAndVerifyWallet = useCallback(\n async (walletAddress: string, message: string, nonce?: string) => {\n if (!publicKey || !signMessage) {\n throw new Error('Wallet not connected or signing unavailable')\n }\n\n if (publicKey.toBase58() !== walletAddress) {\n throw new Error('Connected wallet does not match target wallet')\n }\n\n setState((prev) => ({ ...prev, isVerifying: true, error: null }))\n\n try {\n const encodedMessage = new TextEncoder().encode(message)\n const signature = await signMessage(encodedMessage)\n const signatureBase58 = bs58.encode(signature)\n\n const response = await services.solanaWallets.verify(\n walletAddress,\n signatureBase58,\n nonce\n )\n\n setState({ isVerifying: false, isVerified: response.verified, error: null })\n return response\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Wallet verification failed'\n console.error('payments-ui: wallet verification failed', error)\n setState({ isVerifying: false, isVerified: false, error: message })\n throw error\n }\n },\n [publicKey, signMessage, services.solanaWallets]\n )\n\n const clearError = useCallback(() => {\n setState((prev) => ({ ...prev, error: null }))\n }, [])\n\n const resetVerification = useCallback(() => {\n setState({ isVerifying: false, isVerified: false, error: null })\n }, [])\n\n const autoVerifyWallet = useCallback(\n async (walletAddress: string, message: string, nonce?: string) => {\n try {\n return await signAndVerifyWallet(walletAddress, message, nonce)\n } catch (error) {\n console.warn('payments-ui: auto-verification skipped', error)\n return null\n }\n },\n [signAndVerifyWallet]\n )\n\n return {\n ...state,\n signAndVerifyWallet,\n autoVerifyWallet,\n clearError,\n resetVerification,\n }\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport type { WalletChallengeResponse, WalletConnectionState } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface WalletConnectionResult extends WalletConnectionState {\n walletName?: string\n walletIcon?: string\n connectWallet: () => Promise<void>\n disconnectWallet: () => Promise<void>\n connectWalletToBackend: (address: string) => Promise<WalletChallengeResponse>\n clearError: () => void\n}\n\nexport const useWalletConnection = (): WalletConnectionResult => {\n const { services } = usePaymentContext()\n const { publicKey, connected, connecting, disconnect, wallet } = useWallet()\n const [state, setState] = useState<WalletConnectionState>({\n isConnected: false,\n isConnecting: false,\n publicKey: null,\n wallets: [],\n isLoading: false,\n error: null,\n })\n\n useEffect(() => {\n setState((prev) => ({\n ...prev,\n isConnected: connected,\n isConnecting: connecting,\n publicKey: publicKey?.toBase58() ?? null,\n }))\n }, [connected, connecting, publicKey])\n\n const connectWalletToBackend = useCallback(\n async (address: string) => {\n if (!address) {\n throw new Error('Wallet address is required')\n }\n\n setState((prev) => ({ ...prev, isLoading: true, error: null }))\n try {\n const challenge = await services.solanaWallets.requestChallenge(address)\n setState((prev) => ({ ...prev, isLoading: false }))\n return challenge\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Wallet challenge failed'\n console.error('payments-ui: wallet challenge failed', error)\n setState((prev) => ({ ...prev, isLoading: false, error: message }))\n throw error\n }\n },\n [services.solanaWallets]\n )\n\n const connectWallet = useCallback(async () => {\n if (!wallet) {\n throw new Error('No wallet adapter selected')\n }\n\n setState((prev) => ({ ...prev, isConnecting: true, error: null }))\n\n try {\n await wallet.adapter.connect()\n if (publicKey) {\n await connectWalletToBackend(publicKey.toBase58())\n }\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Failed to connect wallet'\n console.error('payments-ui: wallet connection failed', error)\n setState((prev) => ({ ...prev, isConnecting: false, error: message }))\n throw error\n } finally {\n setState((prev) => ({ ...prev, isConnecting: false }))\n }\n }, [wallet, publicKey, connectWalletToBackend])\n\n const disconnectWallet = useCallback(async () => {\n try {\n await disconnect()\n setState((prev) => ({\n ...prev,\n isConnected: false,\n publicKey: null,\n wallets: [],\n error: null,\n }))\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Failed to disconnect wallet'\n console.error('payments-ui: wallet disconnect failed', error)\n setState((prev) => ({ ...prev, error: message }))\n throw error\n }\n }, [disconnect])\n\n const clearError = useCallback(() => {\n setState((prev) => ({ ...prev, error: null }))\n }, [])\n\n return {\n ...state,\n walletName: wallet?.adapter.name,\n walletIcon: wallet?.adapter.icon,\n connectWallet,\n disconnectWallet,\n connectWalletToBackend,\n clearError,\n }\n}\n","import { useState } from 'react'\nimport {\n AlertCircle,\n CheckCircle,\n Copy,\n ExternalLink,\n Loader2,\n Shield,\n Star,\n Trash2,\n} from 'lucide-react'\nimport { Button } from '../../../ui/button'\nimport { cn } from '../../../lib/utils'\nimport type { SolanaWallet } from '../../../types'\nimport type { NotificationHandler, NotificationPayload } from '../../../types'\n\ninterface WalletCardProps {\n wallet: SolanaWallet\n isPrimary?: boolean\n isConnected?: boolean\n balance?: number | null\n onSetPrimary?: (walletId: string) => void\n onVerify?: (wallet: SolanaWallet) => void\n onDelete?: (walletId: string) => void\n isVerifying?: boolean\n isDeleting?: boolean\n notify?: NotificationHandler\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n console.log('[payments-ui] wallet-card', payload)\n}\n\nexport const WalletCard: React.FC<WalletCardProps> = ({\n wallet,\n isPrimary = false,\n isConnected = false,\n balance,\n onSetPrimary,\n onVerify,\n onDelete,\n isVerifying = false,\n isDeleting = false,\n notify = notifyDefault,\n}) => {\n const [isCopying, setIsCopying] = useState(false)\n\n const formatAddress = (address: string) =>\n address.length <= 12 ? address : `${address.slice(0, 4)}...${address.slice(-4)}`\n\n const copyToClipboard = async (text: string) => {\n setIsCopying(true)\n try {\n await navigator.clipboard.writeText(text)\n notify({ title: 'Copied', description: 'Wallet address copied to clipboard' })\n } catch (error) {\n notify({ title: 'Failed to copy', description: (error as Error).message, status: 'destructive' })\n } finally {\n setTimeout(() => setIsCopying(false), 500)\n }\n }\n\n const openExplorer = () => {\n window.open(`https://solscan.io/account/${wallet.address}`, '_blank', 'noopener,noreferrer')\n }\n\n return (\n <div\n className={cn(\n 'rounded-lg border bg-background/40 p-4 transition-shadow',\n isPrimary && 'border-primary/50 shadow-lg',\n isConnected && 'ring-1 ring-primary'\n )}\n >\n <div className=\"flex items-start justify-between\">\n <div className=\"flex-1\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-primary/20\">\n <div className=\"h-5 w-5 rounded-full bg-gradient-to-br from-primary to-primary/60\" />\n </div>\n <div className=\"flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-mono text-sm font-medium\">\n {formatAddress(wallet.address)}\n </span>\n {isPrimary && (\n <div className=\"flex items-center gap-1 rounded-full bg-yellow-500/20 px-2 py-0.5 text-xs text-yellow-500\">\n <Star className=\"h-3 w-3 fill-yellow-500 text-yellow-500\" /> Primary\n </div>\n )}\n {wallet.is_verified ? (\n <div className=\"flex items-center gap-1 text-xs text-emerald-400\">\n <CheckCircle className=\"h-3.5 w-3.5\" /> Verified\n </div>\n ) : (\n <div className=\"flex items-center gap-1 text-xs text-amber-400\">\n <AlertCircle className=\"h-3.5 w-3.5\" /> Unverified\n </div>\n )}\n {isConnected && (\n <span className=\"rounded bg-blue-500/20 px-2 py-0.5 text-xs text-blue-400\">\n Connected\n </span>\n )}\n </div>\n {balance !== null && typeof balance !== 'undefined' && (\n <p className=\"mt-1 text-sm text-muted-foreground\">Balance: {balance.toFixed(4)} SOL</p>\n )}\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n Added {new Date(wallet.created_at).toLocaleDateString()}\n </p>\n </div>\n </div>\n </div>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => copyToClipboard(wallet.address)}\n disabled={isCopying}\n >\n {isCopying ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Copy className=\"h-4 w-4\" />}\n </Button>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-8 w-8\" onClick={openExplorer}>\n <ExternalLink className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-2\">\n {!isPrimary && onSetPrimary && wallet.is_verified && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"border-primary/40 text-primary\"\n onClick={() => onSetPrimary(wallet.id)}\n >\n <Star className=\"mr-1 h-3 w-3\" /> Set Primary\n </Button>\n )}\n\n {!wallet.is_verified && onVerify && isConnected && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"border-emerald-500/40 text-emerald-400\"\n onClick={() => onVerify(wallet)}\n disabled={isVerifying}\n >\n {isVerifying ? (\n <>\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" /> Verifying...\n </>\n ) : (\n <>\n <Shield className=\"mr-1 h-3 w-3\" /> Verify\n </>\n )}\n </Button>\n )}\n\n {onDelete && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"ml-auto border-destructive/40 text-destructive\"\n onClick={() => onDelete(wallet.id)}\n disabled={isDeleting}\n >\n {isDeleting ? <Loader2 className=\"h-3 w-3 animate-spin\" /> : <Trash2 className=\"h-3 w-3\" />}\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import { Wallet } from 'lucide-react'\nimport { WalletMultiButton } from '@solana/wallet-adapter-react-ui'\n\nexport const EmptyWalletState: React.FC = () => (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <Wallet className=\"mb-4 h-12 w-12 text-muted-foreground\" />\n <h3 className=\"mb-2 text-lg font-medium\">No wallets connected</h3>\n <p className=\"mb-6 text-sm text-muted-foreground\">\n Connect your Solana wallet to get started\n </p>\n \n <WalletMultiButton className=\"!bg-primary text-primary-foreground hover:!bg-primary/90\" />\n </div>\n)\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { WalletMultiButton } from '@solana/wallet-adapter-react-ui'\nimport { Connection, LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js'\nimport { CheckCircle, ChevronDown, ChevronUp, Loader2 } from 'lucide-react'\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '../../../ui/card'\nimport { Button } from '../../../ui/button'\nimport { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from '../../../ui/alert-dialog'\nimport { useWalletList } from '../../../hooks/useWalletList'\nimport { useWalletVerification } from '../../../hooks/useWalletVerification'\nimport { useWalletConnection } from '../../../hooks/useWalletConnection'\nimport { WalletCard } from './WalletCard'\nimport { EmptyWalletState } from './EmptyWalletState'\nimport type { SolanaWallet, NotificationHandler, NotificationPayload } from '../../../types'\nimport { usePaymentContext } from '../../../context/PaymentContext'\n\nexport interface SolanaWalletSectionProps {\n onNotify?: NotificationHandler\n rpcUrl?: string\n}\n\nconst notifyDefault = (payload: NotificationPayload) => {\n console.log('[payments-ui] solana-wallets', payload)\n}\n\nexport const SolanaWalletSection: React.FC<SolanaWalletSectionProps> = ({\n onNotify,\n rpcUrl,\n}) => {\n const notify = onNotify ?? notifyDefault\n const { config } = usePaymentContext()\n const { connected, publicKey, disconnect } = useWallet()\n const { wallets, isLoading, deleteWallet, fetchWallets } = useWalletList()\n const { signAndVerifyWallet } = useWalletVerification()\n const walletConnection = useWalletConnection()\n\n const [primaryWalletId, setPrimaryWalletId] = useState<string | null>(null)\n const [showOtherWallets, setShowOtherWallets] = useState(false)\n const [balances, setBalances] = useState<Record<string, number>>({})\n const [verifyingWalletId, setVerifyingWalletId] = useState<string | null>(null)\n const [deletingWalletId, setDeletingWalletId] = useState<string | null>(null)\n const [walletToDelete, setWalletToDelete] = useState<SolanaWallet | null>(null)\n const [isRegistering, setIsRegistering] = useState(false)\n\n const rpcEndpoint = rpcUrl || config.solanaRpcUrl || 'https://api.mainnet-beta.solana.com'\n const connection = useMemo(() => new Connection(rpcEndpoint), [rpcEndpoint])\n\n const primaryWallet =\n wallets.find((w) => w.id === primaryWalletId) ?? wallets.find((w) => w.is_verified) ?? null\n\n const otherWallets = wallets.filter((w) => w.id !== primaryWallet?.id)\n\n const fetchBalance = useCallback(\n async (address: string) => {\n try {\n const pubkey = new PublicKey(address)\n const balance = await connection.getBalance(pubkey)\n return balance / LAMPORTS_PER_SOL\n } catch (error) {\n console.error('payments-ui: failed to fetch balance', error)\n return null\n }\n },\n [connection]\n )\n\n const fetchAllBalances = useCallback(async () => {\n const results = await Promise.all(\n wallets.map(async (wallet) => ({ address: wallet.address, balance: await fetchBalance(wallet.address) }))\n )\n const next: Record<string, number> = {}\n results.forEach(({ address, balance }) => {\n if (balance !== null && typeof balance !== 'undefined') {\n next[address] = balance\n }\n })\n setBalances(next)\n }, [wallets, fetchBalance])\n\n useEffect(() => {\n if (wallets.length > 0) {\n fetchAllBalances().catch(() => undefined)\n }\n }, [wallets, fetchAllBalances])\n\n useEffect(() => {\n const verifiedWallet = wallets.find((w) => w.is_verified)\n if (verifiedWallet && !primaryWalletId) {\n setPrimaryWalletId(verifiedWallet.id)\n }\n }, [wallets, primaryWalletId])\n\n const registerWallet = useCallback(async () => {\n if (!connected || !publicKey || isRegistering) return\n setIsRegistering(true)\n try {\n const challenge = await walletConnection.connectWalletToBackend(publicKey.toBase58())\n if (!challenge?.message) {\n throw new Error('Failed to retrieve wallet verification challenge')\n }\n await signAndVerifyWallet(challenge.wallet, challenge.message, challenge.nonce)\n await fetchWallets()\n notify({\n title: 'Wallet verified',\n description: 'Your wallet has been linked successfully.',\n status: 'success',\n })\n } catch (error) {\n notify({\n title: 'Wallet verification failed',\n description: error instanceof Error ? error.message : 'Failed to verify wallet',\n status: 'destructive',\n })\n } finally {\n setIsRegistering(false)\n }\n }, [connected, publicKey, isRegistering, walletConnection, signAndVerifyWallet, fetchWallets, notify])\n\n useEffect(() => {\n if (connected && publicKey && !walletConnection.isConnecting && wallets.length === 0) {\n registerWallet().catch(() => undefined)\n }\n }, [connected, publicKey, walletConnection.isConnecting, wallets.length, registerWallet])\n\n const handleVerifyWallet = useCallback(\n async (wallet: SolanaWallet) => {\n if (!connected || publicKey?.toBase58() !== wallet.address) {\n notify({\n title: 'Connect wallet first',\n description: 'Please connect the wallet you want to verify.',\n status: 'destructive',\n })\n return\n }\n\n setVerifyingWalletId(wallet.id)\n try {\n const challenge = await walletConnection.connectWalletToBackend(wallet.address)\n if (!challenge?.message) {\n throw new Error('Failed to retrieve verification challenge')\n }\n await signAndVerifyWallet(challenge.wallet, challenge.message, challenge.nonce)\n await fetchWallets()\n notify({ title: 'Wallet verified', status: 'success' })\n } catch (error) {\n notify({\n title: 'Verification failed',\n description: error instanceof Error ? error.message : 'Failed to verify wallet',\n status: 'destructive',\n })\n } finally {\n setVerifyingWalletId(null)\n }\n },\n [connected, publicKey, walletConnection, signAndVerifyWallet, fetchWallets, notify]\n )\n\n const handleDeleteWallet = useCallback(\n async (walletId: string) => {\n setDeletingWalletId(walletId)\n try {\n await deleteWallet(walletId)\n if (primaryWalletId === walletId) {\n setPrimaryWalletId(null)\n }\n if (connected && publicKey) {\n const deletedWallet = wallets.find((w) => w.id === walletId)\n if (deletedWallet?.address === publicKey.toBase58()) {\n await disconnect()\n }\n }\n notify({ title: 'Wallet removed', status: 'success' })\n } catch (error) {\n notify({\n title: 'Failed to remove wallet',\n description: error instanceof Error ? error.message : 'Please try again',\n status: 'destructive',\n })\n } finally {\n setDeletingWalletId(null)\n setWalletToDelete(null)\n }\n },\n [deleteWallet, primaryWalletId, connected, publicKey, wallets, disconnect, notify]\n )\n\n const handleSetPrimary = (walletId: string) => {\n setPrimaryWalletId(walletId)\n notify({ title: 'Primary wallet updated', status: 'success' })\n }\n\n const isWalletRegistered =\n connected && publicKey && wallets.some((w) => w.address === publicKey.toBase58())\n\n if (isLoading && wallets.length === 0) {\n return (\n <Card className=\"border-0 bg-background/5\">\n <CardHeader>\n <CardTitle className=\"text-xl\">Solana Wallets</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center justify-center py-8\">\n <Loader2 className=\"mr-2 h-6 w-6 animate-spin text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Loading wallets...</span>\n </div>\n </CardContent>\n </Card>\n )\n }\n\n return (\n <>\n <Card className=\"border-0 bg-background/5\">\n <CardHeader>\n <CardTitle className=\"text-xl\">Solana Wallets</CardTitle>\n <CardDescription>Connect and manage your Solana wallets for payments</CardDescription>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {wallets.length === 0 && !connected ? (\n <EmptyWalletState />\n ) : (\n <>\n {primaryWallet && (\n <div>\n <h3 className=\"mb-3 text-sm font-medium uppercase tracking-wide text-muted-foreground\">\n Primary Wallet\n </h3>\n <WalletCard\n wallet={primaryWallet}\n isPrimary\n isConnected={connected && publicKey?.toBase58() === primaryWallet.address}\n balance={balances[primaryWallet.address]}\n onVerify={handleVerifyWallet}\n onDelete={(id) => {\n const target = wallets.find((w) => w.id === id)\n if (target) setWalletToDelete(target)\n }}\n isVerifying={verifyingWalletId === primaryWallet.id}\n isDeleting={deletingWalletId === primaryWallet.id}\n notify={notify}\n />\n </div>\n )}\n\n {otherWallets.length > 0 && (\n <div>\n <button\n className=\"mb-3 flex w-full items-center justify-between text-left\"\n onClick={() => setShowOtherWallets((prev) => !prev)}\n >\n <h3 className=\"text-sm font-medium uppercase tracking-wide text-muted-foreground\">\n Other Wallets ({otherWallets.length})\n </h3>\n {showOtherWallets ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n\n {showOtherWallets && (\n <div className=\"space-y-2\">\n {otherWallets.map((wallet) => (\n <WalletCard\n key={wallet.id}\n wallet={wallet}\n isConnected={connected && publicKey?.toBase58() === wallet.address}\n balance={balances[wallet.address]}\n onSetPrimary={handleSetPrimary}\n onVerify={handleVerifyWallet}\n onDelete={(id) => {\n const target = wallets.find((w) => w.id === id)\n if (target) setWalletToDelete(target)\n }}\n isVerifying={verifyingWalletId === wallet.id}\n isDeleting={deletingWalletId === wallet.id}\n notify={notify}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n <div className=\"pt-4\">\n {connected && publicKey ? (\n isWalletRegistered ? (\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2 rounded-lg border border-emerald-500/40 bg-emerald-500/10 p-3 text-sm text-emerald-200\">\n <CheckCircle className=\"h-4 w-4\" /> Connected wallet is verified and linked to your account.\n </div>\n <WalletMultiButton className=\"w-full !bg-primary text-primary-foreground\" />\n </div>\n ) : (\n <div className=\"space-y-3\">\n <div className=\"rounded-lg border border-amber-500/40 bg-amber-500/10 p-3 text-sm text-amber-200\">\n Your connected wallet is not registered with your account.\n </div>\n <div className=\"flex gap-2\">\n <Button onClick={registerWallet} disabled={isRegistering || walletConnection.isConnecting} className=\"flex-1 bg-primary text-primary-foreground\">\n {isRegistering ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" /> Registering...\n </>\n ) : (\n 'Register This Wallet'\n )}\n </Button>\n <Button onClick={() => disconnect()} variant=\"outline\" className=\"border-border\">\n Disconnect\n </Button>\n </div>\n </div>\n )\n ) : (\n <WalletMultiButton className=\"w-full !bg-primary text-primary-foreground\" />\n )}\n </div>\n </>\n )}\n </CardContent>\n </Card>\n\n <AlertDialog open={!!walletToDelete} onOpenChange={() => setWalletToDelete(null)}>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Remove Wallet</AlertDialogTitle>\n <AlertDialogDescription>\n Are you sure you want to remove this wallet from your account? This action cannot be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction onClick={() => walletToDelete && handleDeleteWallet(walletToDelete.id)} className=\"bg-destructive text-destructive-foreground\">\n Remove\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </>\n )\n}\n","import type { SolanaWalletSectionProps } from './solana/SolanaWalletSection'\nimport { SolanaWalletSection } from './solana/SolanaWalletSection'\n\nexport const WalletManagement = (props: SolanaWalletSectionProps) => (\n <SolanaWalletSection {...props} />\n)\n","import { useState } from 'react'\nimport { Dialog, DialogContent } from '../../ui/dialog'\nimport { ChevronDown, ChevronUp } from 'lucide-react'\n\ninterface WalletDefinition {\n id: string\n name: string\n icon: string\n}\n\nconst wallets: WalletDefinition[] = [\n {\n id: 'phantom',\n name: 'Phantom',\n icon: 'https://phantom.app/img/logo.png',\n },\n {\n id: 'solflare',\n name: 'Solflare',\n icon: 'https://solflare.com/favicon.ico',\n },\n]\n\nexport interface WalletModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\nexport const WalletModal: React.FC<WalletModalProps> = ({ open, onOpenChange }) => {\n const [expandedWallet, setExpandedWallet] = useState<string | null>(null)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-md border border-border bg-background\">\n <div className=\"space-y-4\">\n {wallets.map((wallet) => (\n <div key={wallet.id} className=\"rounded-lg border border-border/80\">\n <button\n className=\"flex w-full items-center justify-between px-4 py-3\"\n onClick={() => setExpandedWallet((prev) => (prev === wallet.id ? null : wallet.id))}\n >\n <div className=\"flex items-center gap-3 text-left\">\n <img src={wallet.icon} alt={wallet.name} className=\"h-8 w-8 rounded-full\" />\n <div>\n <p className=\"font-semibold\">{wallet.name}</p>\n <p className=\"text-sm text-muted-foreground\">Connect via browser extension</p>\n </div>\n </div>\n {expandedWallet === wallet.id ? (\n <ChevronUp className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n {expandedWallet === wallet.id && (\n <div className=\"border-t border-border/60 px-4 py-3 text-sm text-muted-foreground\">\n Follow the prompts in your {wallet.name} wallet to approve access.\n </div>\n )}\n </div>\n ))}\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import * as React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check } from 'lucide-react'\nimport { cn } from '../lib/utils'\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn('flex items-center justify-center text-current')}\n >\n <Check className=\"h-3 w-3\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import { useMemo, useState } from 'react'\nimport {\n AlertDialog,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n} from '../../ui/alert-dialog'\nimport { Button } from '../../ui/button'\nimport { Input } from '../../ui/input'\nimport { Checkbox } from '../../ui/checkbox'\nimport { Label } from '../../ui/label'\nimport { Shield, CreditCard, Calendar, KeyRound, UserRound } from 'lucide-react'\n\nexport interface WalletDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n}\n\ninterface WalletFormState {\n nameOnCard: string\n cardNumber: string\n expiration: string\n cvv: string\n termsAccepted: boolean\n}\n\ntype WalletValidators = {\n [K in keyof WalletFormState]: (value: WalletFormState[K]) => string | undefined\n}\n\nconst initialState: WalletFormState = {\n nameOnCard: '',\n cardNumber: '',\n expiration: '',\n cvv: '',\n termsAccepted: false,\n}\n\nexport const WalletDialog: React.FC<WalletDialogProps> = ({ open, onOpenChange }) => {\n const [form, setForm] = useState<WalletFormState>(initialState)\n const [errors, setErrors] = useState<Partial<Record<keyof WalletFormState, string>>>({})\n\n const validators = useMemo<WalletValidators>(\n () => ({\n nameOnCard: (value) => (!value ? 'Name is required' : undefined),\n cardNumber: (value) =>\n /^\\d{16}$/.test(value)\n ? undefined\n : 'Card number must be 16 digits',\n expiration: (value) =>\n /^(0[1-9]|1[0-2])\\/([2-9]\\d)$/.test(value)\n ? undefined\n : 'Must be in MM/YY format',\n cvv: (value) => (/^\\d{3,4}$/.test(value) ? undefined : 'CVV must be 3 or 4 digits'),\n termsAccepted: (value) => (value ? undefined : 'You must accept the terms'),\n }),\n []\n )\n\n const updateField = <K extends keyof WalletFormState>(field: K, value: WalletFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value } as WalletFormState))\n setErrors((prev) => ({ ...prev, [field]: undefined }))\n }\n\n const validate = () => {\n const next: Partial<Record<keyof WalletFormState, string>> = {}\n ;(Object.keys(validators) as Array<keyof WalletFormState>).forEach((key) => {\n const validator = validators[key] as (value: WalletFormState[keyof WalletFormState]) => string | undefined\n const message = validator?.(form[key])\n if (message) {\n next[key] = message\n }\n })\n setErrors(next)\n return Object.keys(next).length === 0\n }\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n if (!validate()) return\n console.log('[payments-ui] wallet dialog submit', form)\n onOpenChange(false)\n setForm(initialState)\n }\n\n return (\n <AlertDialog open={open} onOpenChange={onOpenChange}>\n <AlertDialogContent className=\"max-h-[95vh] max-w-lg overflow-y-auto rounded-2xl border border-border bg-background\">\n <AlertDialogHeader className=\"border-b border-border/60 pb-4\">\n <div className=\"flex items-center justify-center gap-2\">\n <Shield className=\"h-5 w-5 text-primary\" />\n <AlertDialogTitle className=\"text-center text-base font-semibold uppercase tracking-wide\">\n Secure Payment via Mobius Pay\n </AlertDialogTitle>\n </div>\n <p className=\"mt-2 text-center text-sm text-muted-foreground\">\n $23 USD per month, cancel at any time.\n </p>\n </AlertDialogHeader>\n\n <form onSubmit={handleSubmit} className=\"space-y-5 px-2 py-4 sm:px-4\">\n <div className=\"space-y-4\">\n <div>\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Name on Card</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <UserRound className=\"h-4 w-4\" />\n </span>\n <Input value={form.nameOnCard} onChange={(e) => updateField('nameOnCard', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.nameOnCard && <p className=\"mt-1 text-xs text-destructive\">{errors.nameOnCard}</p>}\n </div>\n\n <div>\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Credit Card Number</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <CreditCard className=\"h-4 w-4\" />\n </span>\n <Input value={form.cardNumber} onChange={(e) => updateField('cardNumber', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.cardNumber && <p className=\"mt-1 text-xs text-destructive\">{errors.cardNumber}</p>}\n </div>\n\n <div className=\"flex gap-4\">\n <div className=\"flex-1\">\n <Label className=\"mb-1 block text-sm text-muted-foreground\">Expiration</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <Calendar className=\"h-4 w-4\" />\n </span>\n <Input value={form.expiration} onChange={(e) => updateField('expiration', e.target.value)} className=\"pl-10\" placeholder=\"MM/YY\" />\n </div>\n {errors.expiration && <p className=\"mt-1 text-xs text-destructive\">{errors.expiration}</p>}\n </div>\n <div className=\"flex-1\">\n <Label className=\"mb-1 block text-sm text-muted-foreground\">CVV</Label>\n <div className=\"relative\">\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground\">\n <KeyRound className=\"h-4 w-4\" />\n </span>\n <Input value={form.cvv} onChange={(e) => updateField('cvv', e.target.value)} className=\"pl-10\" />\n </div>\n {errors.cvv && <p className=\"mt-1 text-xs text-destructive\">{errors.cvv}</p>}\n </div>\n </div>\n </div>\n\n <div className=\"flex items-start gap-3 rounded-xl border border-border/70 bg-muted/10 p-4\">\n <Checkbox id=\"terms-agree\" checked={form.termsAccepted} onCheckedChange={(checked) => updateField('termsAccepted', Boolean(checked))} />\n <Label htmlFor=\"terms-agree\" className=\"text-sm text-muted-foreground\">\n By completing this order, I confirm that I am 18 years or older and agree to your privacy policy and terms.\n </Label>\n </div>\n {errors.termsAccepted && <p className=\"text-xs text-destructive\">{errors.termsAccepted}</p>}\n\n <AlertDialogFooter className=\"flex gap-2\">\n <Button type=\"submit\" className=\"flex-1\">\n Subscribe\n </Button>\n <AlertDialogCancel asChild>\n <Button variant=\"outline\" className=\"flex-1\">\n Close\n </Button>\n </AlertDialogCancel>\n </AlertDialogFooter>\n </form>\n </AlertDialogContent>\n </AlertDialog>\n )\n}\n","import React from 'react'\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '../../ui/dialog'\nimport { Button } from '../../ui/button'\nimport { CheckCircle } from 'lucide-react'\n\ninterface SubscriptionSuccessDialogProps {\n open: boolean\n planName?: string\n amountLabel?: string\n billingPeriodLabel?: string\n onClose: () => void\n}\n\nexport const SubscriptionSuccessDialog: React.FC<SubscriptionSuccessDialogProps> = ({\n open,\n planName = 'Premium Plan',\n amountLabel = '$0.00',\n billingPeriodLabel = 'billing period',\n onClose,\n}) => {\n return (\n <Dialog open={open} onOpenChange={(value) => {\n if (!value) onClose()\n }}>\n <DialogContent className=\"max-w-sm text-center\">\n <DialogHeader>\n <DialogTitle className=\"flex flex-col items-center gap-3 text-foreground\">\n <CheckCircle className=\"h-10 w-10 text-primary\" />\n Subscription activated\n </DialogTitle>\n <DialogDescription className=\"text-base text-muted-foreground\">\n You now have access to {planName}. Billing: {amountLabel} / {billingPeriodLabel}.\n </DialogDescription>\n </DialogHeader>\n <Button className=\"mt-6 w-full\" onClick={onClose}>\n Continue\n </Button>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useCallback } from 'react'\nimport { usePaymentContext } from '../context/PaymentContext'\nimport type { BillingDetails } from '../types/billing'\nimport type {\n CCBillSubscribePayload,\n FlexFormResponse,\n GenerateFlexFormURLBodyParams,\n NmiSubscribePayload,\n SubscriptionResponse,\n} from '../types/subscription'\n\nexport interface SubscribeWithCardParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentToken: string\n billing: BillingDetails\n}\n\nexport interface SubscribeWithSavedMethodParams {\n priceId?: string | null\n processor?: string\n provider?: string\n paymentMethodId: string\n email?: string\n}\n\nexport interface SubscribeWithCCBillParams {\n priceId?: string | null\n email: string\n firstName: string\n lastName: string\n zipCode: string\n country: string\n processor?: string\n}\n\nexport interface GenerateFlexFormParams {\n priceId?: string | null\n firstName: string\n lastName: string\n address1: string\n city: string\n state: string\n zipCode: string\n country: string\n}\n\nexport const useSubscriptionActions = () => {\n const { services } = usePaymentContext()\n\n const ensurePrice = (priceId?: string | null) => {\n if (!priceId) {\n throw new Error('payments-ui: priceId is required for subscription actions')\n }\n return priceId\n }\n\n const subscribeWithCard = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentToken,\n billing,\n }: SubscribeWithCardParams): Promise<SubscriptionResponse> => {\n const payload: NmiSubscribePayload = {\n priceId: ensurePrice(priceId),\n paymentToken,\n processor,\n provider,\n email: billing.email,\n firstName: billing.firstName,\n lastName: billing.lastName,\n address1: billing.address1,\n city: billing.city,\n state: billing.stateRegion,\n zipCode: billing.postalCode,\n country: billing.country,\n }\n return services.subscriptions.subscribe('nmi', payload)\n },\n [services]\n )\n\n const subscribeWithSavedMethod = useCallback(\n async ({\n priceId,\n processor = 'nmi',\n provider,\n paymentMethodId,\n email,\n }: SubscribeWithSavedMethodParams): Promise<SubscriptionResponse> => {\n const payload: NmiSubscribePayload = {\n priceId: ensurePrice(priceId),\n paymentMethodId,\n processor,\n provider,\n email,\n }\n return services.subscriptions.subscribe('nmi', payload)\n },\n [services]\n )\n\n const subscribeWithCCBill = useCallback(\n async ({\n priceId,\n email,\n firstName,\n lastName,\n zipCode,\n country,\n processor = 'ccbill',\n }: SubscribeWithCCBillParams): Promise<SubscriptionResponse> => {\n const payload: CCBillSubscribePayload = {\n priceId: ensurePrice(priceId),\n email,\n firstName,\n lastName,\n zipCode,\n country,\n processor,\n }\n return services.subscriptions.subscribe('ccbill', payload)\n },\n [services]\n )\n\n const generateFlexFormUrl = useCallback(\n async ({\n priceId,\n firstName,\n lastName,\n address1,\n city,\n state,\n zipCode,\n country,\n }: GenerateFlexFormParams): Promise<FlexFormResponse> => {\n const payload: GenerateFlexFormURLBodyParams = {\n price_id: ensurePrice(priceId),\n first_name: firstName,\n last_name: lastName,\n address1,\n city,\n state,\n zip_code: zipCode,\n country,\n }\n return services.subscriptions.generateFlexFormUrl(payload)\n },\n [services]\n )\n\n return {\n subscribeWithCard,\n subscribeWithSavedMethod,\n subscribeWithCCBill,\n generateFlexFormUrl,\n }\n}\n","import React, { useCallback, useMemo, useState } from 'react'\nimport { Dialog, DialogContent } from '../../ui/dialog'\nimport { Button } from '../../ui/button'\nimport { AlertCircle } from 'lucide-react'\nimport { PaymentExperience } from '../PaymentExperience'\nimport { SubscriptionSuccessDialog } from './SubscriptionSuccessDialog'\nimport { useSubscriptionActions } from '../../hooks/useSubscriptionActions'\nimport type { BillingDetails, SubmitPaymentResponse } from '../../types'\n\ninterface SubscriptionCheckoutModalProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n priceId?: string | null\n usdAmount?: number\n planName?: string\n amountLabel?: string\n billingPeriodLabel?: string\n userEmail?: string | null\n provider?: string\n onSuccess?: () => void\n enableSolanaPay?: boolean\n}\n\nexport const SubscriptionCheckoutModal: React.FC<SubscriptionCheckoutModalProps> = ({\n open,\n onOpenChange,\n priceId,\n usdAmount = 0,\n planName,\n amountLabel,\n billingPeriodLabel,\n userEmail,\n provider = 'mobius',\n onSuccess,\n enableSolanaPay = true,\n}) => {\n const [showSuccess, setShowSuccess] = useState(false)\n const { subscribeWithCard, subscribeWithSavedMethod } = useSubscriptionActions()\n\n const handleClose = useCallback(\n (nextOpen: boolean) => {\n onOpenChange(nextOpen)\n if (!nextOpen) {\n setShowSuccess(false)\n }\n },\n [onOpenChange]\n )\n\n const ensurePrice = () => {\n if (!priceId) {\n throw new Error('Select a plan before subscribing.')\n }\n return priceId\n }\n\n const notifySuccess = (result?: SubmitPaymentResponse | string) => {\n setShowSuccess(true)\n onSuccess?.()\n if (result && typeof window !== 'undefined') {\n console.debug('[payments-ui] subscription success', result)\n }\n }\n\n const handleNewCardPayment = async ({ token, billing }: { token: string; billing: BillingDetails }) => {\n await subscribeWithCard({\n priceId: ensurePrice(),\n provider,\n paymentToken: token,\n billing,\n })\n notifySuccess()\n }\n\n const handleSavedMethodPayment = async ({ paymentMethodId }: { paymentMethodId: string }) => {\n await subscribeWithSavedMethod({\n priceId: ensurePrice(),\n provider,\n paymentMethodId,\n email: userEmail ?? '',\n })\n notifySuccess()\n }\n\n const solanaSuccess = (result: SubmitPaymentResponse | string) => {\n notifySuccess(result)\n onOpenChange(false)\n }\n\n const summary = useMemo(() => {\n if (!planName && !amountLabel) return null\n return (\n <div className=\"rounded-xl border border-border/60 bg-muted/10 p-3 text-sm text-muted-foreground\">\n <p className=\"font-medium text-foreground\">{planName ?? 'Selected plan'}</p>\n <p>{amountLabel ?? `$${usdAmount.toFixed(2)}`} {billingPeriodLabel ? `/ ${billingPeriodLabel}` : ''}</p>\n </div>\n )\n }, [planName, amountLabel, billingPeriodLabel, usdAmount])\n\n return (\n <>\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"sm:max-w-3xl\">\n {!priceId && (\n <div className=\"mb-4 flex items-center gap-2 rounded-lg border border-destructive/40 bg-destructive/10 px-3 py-2 text-sm text-destructive\">\n <AlertCircle className=\"h-4 w-4\" /> Select a subscription plan to continue.\n </div>\n )}\n <PaymentExperience\n priceId={priceId ?? ''}\n usdAmount={usdAmount}\n checkoutSummary={summary}\n onNewCardPayment={priceId ? handleNewCardPayment : undefined}\n onSavedMethodPayment={priceId ? handleSavedMethodPayment : undefined}\n enableNewCard={Boolean(priceId)}\n enableStoredMethods={Boolean(priceId)}\n enableSolanaPay={enableSolanaPay && Boolean(priceId)}\n onSolanaSuccess={solanaSuccess}\n />\n </DialogContent>\n </Dialog>\n <SubscriptionSuccessDialog\n open={showSuccess}\n onClose={() => setShowSuccess(false)}\n planName={planName}\n amountLabel={amountLabel ?? `$${usdAmount.toFixed(2)}`}\n billingPeriodLabel={billingPeriodLabel}\n />\n </>\n )\n}\n","import { useState, useEffect, useCallback, useMemo } from 'react'\nimport { useWallet, useConnection } from '@solana/wallet-adapter-react'\nimport { PublicKey } from '@solana/web3.js'\nimport { getAssociatedTokenAddress, getAccount } from '@solana/spl-token'\nimport { TokenBalance, TokenInfo } from '../types'\n\nexport const useTokenBalance = (tokens: TokenInfo[]) => {\n const { publicKey } = useWallet()\n const { connection } = useConnection()\n\n const [balances, setBalances] = useState<TokenBalance[]>([])\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n // Fetch balance for a specific token\n const fetchTokenBalance = useCallback(\n async (\n token: TokenInfo,\n walletAddress: PublicKey\n ): Promise<TokenBalance> => {\n try {\n const mintPublicKey = new PublicKey(token.mint)\n\n // Get the associated token account address\n const associatedTokenAddress = await getAssociatedTokenAddress(\n mintPublicKey,\n walletAddress\n )\n\n try {\n // Get the token account info\n const tokenAccount = await getAccount(\n connection,\n associatedTokenAddress\n )\n\n const balance = Number(tokenAccount.amount)\n const uiAmount = balance / Math.pow(10, token.decimals)\n\n return {\n token,\n balance,\n uiAmount,\n hasBalance: balance > 0,\n }\n } catch (accountError) {\n // Account doesn't exist, balance is 0\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n } catch (error) {\n console.error(`Failed to fetch balance for ${token.symbol}:`, error)\n return {\n token,\n balance: 0,\n uiAmount: 0,\n hasBalance: false,\n }\n }\n },\n [connection]\n )\n\n // Memoize token serialization to prevent unnecessary refetches\n const tokensKey = useMemo(() => tokens.map((t) => t.mint).join(','), [tokens])\n\n // Auto-fetch balances when wallet or tokens change\n useEffect(() => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n const fetchAllBalances = async () => {\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }\n\n fetchAllBalances()\n }, [publicKey, tokensKey, fetchTokenBalance]) // Use stable dependencies\n\n // Get balance for a specific token\n const getTokenBalance = useCallback(\n (tokenSymbol: string): TokenBalance | undefined => {\n return balances.find((balance) => balance.token.symbol === tokenSymbol)\n },\n [balances]\n )\n\n // Check if user has sufficient balance for a payment\n const hasSufficientBalance = useCallback(\n (tokenSymbol: string, requiredAmount: number): boolean => {\n const balance = getTokenBalance(tokenSymbol)\n return balance ? balance.uiAmount >= requiredAmount : false\n },\n [getTokenBalance]\n )\n\n // Get formatted balance string\n const getFormattedBalance = useCallback(\n (tokenSymbol: string): string => {\n const balance = getTokenBalance(tokenSymbol)\n if (!balance) return '0.00'\n\n // Format with appropriate decimal places\n if (balance.uiAmount < 0.01) {\n return balance.uiAmount.toFixed(6)\n } else if (balance.uiAmount < 1) {\n return balance.uiAmount.toFixed(4)\n } else {\n return balance.uiAmount.toFixed(2)\n }\n },\n [getTokenBalance]\n )\n\n // Refresh balances manually\n const refreshBalances = useCallback(async () => {\n if (!publicKey || tokens.length === 0) {\n setBalances([])\n return\n }\n\n setIsLoading(true)\n setError(null)\n\n try {\n const balancePromises = tokens.map((token) =>\n fetchTokenBalance(token, publicKey)\n )\n const tokenBalances = await Promise.all(balancePromises)\n\n setBalances(tokenBalances)\n } catch (error) {\n const errorMessage =\n error instanceof Error\n ? error.message\n : 'Failed to fetch token balances'\n setError(errorMessage)\n console.error('Failed to fetch token balances:', error)\n } finally {\n setIsLoading(false)\n }\n }, [publicKey, tokens, fetchTokenBalance])\n\n // Get total USD value of balances (would need price data)\n const getTotalValue = useCallback(\n (priceData?: Record<string, number>): number => {\n if (!priceData) return 0\n\n return balances.reduce((total, balance) => {\n const price = priceData[balance.token.symbol] || 0\n return total + balance.uiAmount * price\n }, 0)\n },\n [balances]\n )\n\n // Sort balances by amount (highest first)\n const sortedBalances = [...balances].sort((a, b) => b.uiAmount - a.uiAmount)\n\n // Get balances with positive amounts only\n const positiveBalances = balances.filter((balance) => balance.hasBalance)\n\n return {\n balances: sortedBalances,\n positiveBalances,\n isLoading,\n error,\n refreshBalances,\n getTokenBalance,\n hasSufficientBalance,\n getFormattedBalance,\n getTotalValue,\n hasAnyBalance: positiveBalances.length > 0,\n isConnected: !!publicKey,\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useWallet } from '@solana/wallet-adapter-react'\nimport { Transaction } from '@solana/web3.js'\nimport { Buffer } from 'buffer'\nimport { TokenInfo, SubmitPaymentResponse } from '../types'\nimport { useSolanaService } from './useSolanaService'\n\ninterface DirectPaymentState {\n loading: boolean\n error: string | null\n success: boolean\n transactionId: string | null\n}\n\ninterface UseDirectWalletPaymentReturn {\n paymentState: DirectPaymentState\n payWithWallet: (token: TokenInfo, priceId: string) => Promise<void>\n resetPayment: () => void\n}\n\nexport const useDirectWalletPayment = (): UseDirectWalletPaymentReturn => {\n const { publicKey, signTransaction, connected } = useWallet()\n const solanaService = useSolanaService()\n\n const [paymentState, setPaymentState] = useState<DirectPaymentState>({\n loading: false,\n error: null,\n success: false,\n transactionId: null,\n })\n\n const resetPayment = useCallback(() => {\n setPaymentState({\n loading: false,\n error: null,\n success: false,\n transactionId: null,\n })\n }, [])\n\n const payWithWallet = useCallback(\n async (token: TokenInfo, priceId: string) => {\n if (!connected || !publicKey || !signTransaction) {\n setPaymentState((prev) => ({\n ...prev,\n error: 'Wallet not connected. Please connect your wallet first.',\n }))\n return\n }\n\n setPaymentState({\n loading: true,\n error: null,\n success: false,\n transactionId: null,\n })\n\n try {\n console.log('Generating payment transaction...', {\n token: token.symbol,\n priceId,\n })\n const paymentData = await solanaService.generatePayment(\n priceId,\n token.symbol,\n publicKey.toBase58()\n )\n\n const transactionBuffer = Buffer.from(paymentData.transaction, 'base64')\n const transaction = Transaction.from(transactionBuffer)\n\n console.log('Requesting wallet signature...')\n const signedTransaction = await signTransaction(transaction)\n\n const signedTransactionBase64 = signedTransaction\n .serialize()\n .toString('base64')\n\n console.log('Submitting signed transaction...')\n const submitResult: SubmitPaymentResponse = await solanaService.submitPayment(\n signedTransactionBase64,\n priceId,\n paymentData.intent_id\n )\n\n setPaymentState({\n loading: false,\n error: null,\n success: true,\n transactionId: submitResult.transaction_id,\n })\n\n console.log('Payment successful!', submitResult)\n } catch (err: unknown) {\n console.error('Payment failed:', err)\n\n let errorMessage = 'Payment failed. Please try again.'\n const message =\n err instanceof Error ? err.message : typeof err === 'string' ? err : ''\n\n if (message.includes('User rejected')) {\n errorMessage = 'Payment cancelled by user.'\n } else if (/insufficient\\s+funds/i.test(message)) {\n errorMessage = `Insufficient ${token.symbol} balance.`\n } else if (/network/i.test(message)) {\n errorMessage = 'Network error. Please check your connection.'\n } else if (message) {\n errorMessage = message\n }\n\n setPaymentState({\n loading: false,\n error: errorMessage,\n success: false,\n transactionId: null,\n })\n }\n },\n [connected, publicKey, signTransaction, solanaService]\n )\n\n return {\n paymentState,\n payWithWallet,\n resetPayment,\n }\n}\n","import { useState, useEffect, useCallback, useRef } from 'react'\nimport { useConnection } from '@solana/wallet-adapter-react'\nimport { TransactionStatus, PaymentStatusResponse } from '../types'\nimport { usePaymentContext } from '../context/PaymentContext'\n\ninterface PaymentStatusHookOptions {\n transactionId?: string\n purchaseId?: string\n onConfirmed?: () => void\n onFailed?: (error: string) => void\n maxRetries?: number\n retryInterval?: number // milliseconds\n}\n\nexport const usePaymentStatus = (options: PaymentStatusHookOptions = {}) => {\n const { connection } = useConnection()\n const { services } = usePaymentContext()\n const billingApi = services.billingApi\n const {\n transactionId,\n purchaseId,\n onConfirmed,\n onFailed,\n maxRetries = 30, // 5 minutes with 10s intervals\n retryInterval = 10000, // 10 seconds\n } = options\n\n const [status, setStatus] = useState<TransactionStatus | null>(null)\n const [paymentStatus, setPaymentStatus] =\n useState<PaymentStatusResponse | null>(null)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [retryCount, setRetryCount] = useState(0)\n\n const intervalRef = useRef<NodeJS.Timeout | null>(null)\n const isMonitoringRef = useRef(false)\n\n // Clear interval on unmount\n useEffect(() => {\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n }\n }, [])\n\n // Check transaction status on Solana blockchain\n const checkTransactionStatus = useCallback(\n async (signature: string): Promise<TransactionStatus> => {\n try {\n const statusResponse = await connection.getSignatureStatus(signature, {\n searchTransactionHistory: true,\n })\n\n if (statusResponse.value === null) {\n return {\n signature,\n confirmationStatus: 'processed',\n confirmations: 0,\n error: 'Transaction not found',\n }\n }\n\n const { confirmationStatus, confirmations, slot, err } =\n statusResponse.value\n\n // Get block time if we have a slot\n let blockTime: number | undefined\n if (slot) {\n try {\n blockTime = (await connection.getBlockTime(slot)) || undefined\n } catch (error) {\n // Block time not available\n }\n }\n\n return {\n signature,\n confirmationStatus: err\n ? 'failed'\n : confirmationStatus || 'processed',\n confirmations: confirmations || 0,\n slot,\n blockTime,\n error: err ? `Transaction failed: ${err}` : undefined,\n }\n } catch (error) {\n console.error('Failed to check transaction status:', {\n signature,\n error,\n })\n return {\n signature,\n confirmationStatus: 'failed',\n confirmations: 0,\n error:\n error instanceof Error\n ? error.message\n : 'Failed to check transaction status',\n }\n }\n },\n [connection]\n )\n\n // Check payment status from backend\n const checkPaymentStatus = useCallback(\n async (id: string): Promise<PaymentStatusResponse | null> => {\n try {\n const data = await billingApi.get<PaymentStatusResponse>(\n `/payment/status/${id}`\n )\n return data\n } catch (error: any) {\n if (error?.status === 404) {\n return null // Payment not found\n }\n console.error('Failed to check payment status:', {\n purchaseId: id,\n error,\n })\n return null\n }\n },\n [billingApi]\n )\n\n // Monitor transaction until confirmed or failed\n const startMonitoring = useCallback(async () => {\n if (isMonitoringRef.current || (!transactionId && !purchaseId)) {\n return\n }\n\n isMonitoringRef.current = true\n setIsLoading(true)\n setError(null)\n setRetryCount(0)\n\n const monitor = async () => {\n try {\n let currentStatus: TransactionStatus | null = null\n let currentPaymentStatus: PaymentStatusResponse | null = null\n\n // Check blockchain status if we have a transaction ID\n if (transactionId) {\n currentStatus = await checkTransactionStatus(transactionId)\n setStatus(currentStatus)\n }\n\n // Check backend payment status if we have a purchase ID\n if (purchaseId) {\n currentPaymentStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(currentPaymentStatus)\n }\n\n // Determine if we should stop monitoring\n const isBlockchainConfirmed =\n currentStatus?.confirmationStatus === 'finalized' ||\n currentStatus?.confirmationStatus === 'confirmed'\n const isBackendConfirmed = currentPaymentStatus?.status === 'confirmed'\n const isBlockchainFailed =\n currentStatus?.confirmationStatus === 'failed' || currentStatus?.error\n const isBackendFailed = currentPaymentStatus?.status === 'failed'\n\n if (isBlockchainConfirmed || isBackendConfirmed) {\n // Payment confirmed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n onConfirmed?.()\n return\n }\n\n if (isBlockchainFailed || isBackendFailed) {\n // Payment failed\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const errorMessage = currentStatus?.error || 'Payment failed'\n setError(errorMessage)\n onFailed?.(errorMessage)\n return\n }\n\n // Continue monitoring\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n // Max retries reached\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const timeoutError =\n 'Payment confirmation timeout - please check your transaction manually'\n setError(timeoutError)\n onFailed?.(timeoutError)\n return\n }\n } catch (error) {\n console.error('Error monitoring payment:', {\n transactionId,\n purchaseId,\n error,\n })\n setRetryCount((prev) => prev + 1)\n\n if (retryCount >= maxRetries) {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n const monitorError = 'Failed to monitor payment status'\n setError(monitorError)\n onFailed?.(monitorError)\n }\n }\n }\n\n // Start monitoring immediately\n await monitor()\n\n // Continue monitoring at intervals\n intervalRef.current = setInterval(monitor, retryInterval)\n }, [\n transactionId,\n purchaseId,\n checkTransactionStatus,\n checkPaymentStatus,\n onConfirmed,\n onFailed,\n maxRetries,\n retryInterval,\n retryCount,\n ])\n\n // Stop monitoring\n const stopMonitoring = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n }\n isMonitoringRef.current = false\n setIsLoading(false)\n }, [])\n\n // Manual status check\n const checkStatus = useCallback(async () => {\n if (!transactionId && !purchaseId) return\n\n setIsLoading(true)\n setError(null)\n\n try {\n if (transactionId) {\n const txStatus = await checkTransactionStatus(transactionId)\n setStatus(txStatus)\n }\n\n if (purchaseId) {\n const payStatus = await checkPaymentStatus(purchaseId)\n setPaymentStatus(payStatus)\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to check status'\n setError(errorMessage)\n console.error('Failed to check payment status:', {\n transactionId,\n purchaseId,\n error,\n })\n } finally {\n setIsLoading(false)\n }\n }, [transactionId, purchaseId, checkTransactionStatus, checkPaymentStatus])\n\n // Auto-start monitoring when transaction/purchase ID is provided\n useEffect(() => {\n if ((transactionId || purchaseId) && !isMonitoringRef.current) {\n startMonitoring()\n }\n\n return () => {\n stopMonitoring()\n }\n }, [transactionId, purchaseId, startMonitoring, stopMonitoring])\n\n // Get current confirmation status\n const getConfirmationStatus = useCallback(() => {\n if (paymentStatus?.status === 'confirmed') return 'confirmed'\n if (paymentStatus?.status === 'failed') return 'failed'\n if (status?.confirmationStatus === 'finalized') return 'confirmed'\n if (status?.confirmationStatus === 'confirmed') return 'confirmed'\n if (status?.confirmationStatus === 'failed' || status?.error)\n return 'failed'\n return 'pending'\n }, [status, paymentStatus])\n\n // Get Solscan URL for transaction\n const getSolscanUrl = useCallback(\n (signature?: string) => {\n const txId = signature || transactionId\n if (!txId) return null\n return `https://solscan.io/tx/${txId}`\n },\n [transactionId]\n )\n\n return {\n status,\n paymentStatus,\n isLoading,\n error,\n retryCount,\n maxRetries,\n isMonitoring: isMonitoringRef.current,\n confirmationStatus: getConfirmationStatus(),\n startMonitoring,\n stopMonitoring,\n checkStatus,\n getSolscanUrl,\n isConfirmed: getConfirmationStatus() === 'confirmed',\n isFailed: getConfirmationStatus() === 'failed',\n isPending: getConfirmationStatus() === 'pending',\n }\n}\n","import { useState, useCallback } from 'react'\nimport { useSubscriptionActions } from './useSubscriptionActions'\n\ninterface FlexFormPayload {\n priceId: string\n firstName: string\n lastName: string\n address1: string\n city: string\n state: string\n zipCode: string\n country: string\n}\n\nexport const useAlternativePaymentProvider = () => {\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const { generateFlexFormUrl } = useSubscriptionActions()\n\n const openFlexForm = useCallback(\n async (payload: FlexFormPayload) => {\n setIsLoading(true)\n setError(null)\n try {\n const response = await generateFlexFormUrl(payload)\n if (response?.iframe_url) {\n window.location.href = response.iframe_url\n } else {\n throw new Error('Unable to launch payment provider.')\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to open payment provider.'\n setError(message)\n console.error('[payments-ui] failed to open alternative payment provider', err)\n } finally {\n setIsLoading(false)\n }\n },\n [generateFlexFormUrl]\n )\n\n return { openFlexForm, isLoading, error }\n}\n"]}
|