@sdkrouter/payments 0.1.2
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/README.md +122 -0
- package/dist/PaymentContent-BRE2P6SS.cjs +14 -0
- package/dist/PaymentContent-BRE2P6SS.cjs.map +1 -0
- package/dist/PaymentContent-HEOBMWSU.mjs +5 -0
- package/dist/PaymentContent-HEOBMWSU.mjs.map +1 -0
- package/dist/_api/index.cjs +29 -0
- package/dist/_api/index.cjs.map +1 -0
- package/dist/_api/index.d.cts +950 -0
- package/dist/_api/index.d.ts +950 -0
- package/dist/_api/index.mjs +4 -0
- package/dist/_api/index.mjs.map +1 -0
- package/dist/chunk-3W2GRACB.cjs +580 -0
- package/dist/chunk-3W2GRACB.cjs.map +1 -0
- package/dist/chunk-4QQBPIIT.mjs +1289 -0
- package/dist/chunk-4QQBPIIT.mjs.map +1 -0
- package/dist/chunk-MCTTQUAM.mjs +4 -0
- package/dist/chunk-MCTTQUAM.mjs.map +1 -0
- package/dist/chunk-N3LT7RRW.mjs +561 -0
- package/dist/chunk-N3LT7RRW.mjs.map +1 -0
- package/dist/chunk-P3RGFDH4.cjs +1298 -0
- package/dist/chunk-P3RGFDH4.cjs.map +1 -0
- package/dist/chunk-RSPZZ5K2.cjs +5 -0
- package/dist/chunk-RSPZZ5K2.cjs.map +1 -0
- package/dist/index.cjs +993 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +143 -0
- package/dist/index.d.ts +143 -0
- package/dist/index.mjs +933 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/hooks/usePaymentLink.ts","../src/hooks/usePaymentIdentity.ts","../src/context/PaymentContext.tsx","../src/hooks/useCustomerPayments.ts","../src/components/CustomerPaymentHistory/CustomerPaymentHistory.tsx","../src/components/PaymentInfo/PaymentInfo.tsx","../src/types.ts","../src/components/PaymentForm/PaymentForm.tsx","../src/hooks/useInvoicePolling.ts","../src/hooks/useCountdown.ts","../src/components/PaymentStatus/PaymentStatus.tsx","../src/components/PaymentContent/PaymentContent.tsx"],"names":["useState","useRef","useEffect","createPaymentsApi","useCallback","createContext","useContext","jsx","jsxs","ShoppingBag","AlertCircle","Loader2","useMemo","moment","Check","Copy","Clock","CircleCheck","CircleX","CircleAlert","Fragment","Wallet","QRCode","ArrowLeft"],"mappings":"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","file":"chunk-3W2GRACB.cjs","sourcesContent":["/** Default configuration and constants. */\n\nexport const PROD_BASE_URL = 'https://api.sdkrouter.com';\n\nexport const DEFAULTS = {\n baseUrl: PROD_BASE_URL,\n theme: 'auto' as const,\n} as const;\n\nexport const STYLE_ID = 'sdkr-pay-styles';\n\nexport const CSS_PREFIX = 'sdkr-pay';\n\n/** Resolve base URL: explicit baseUrl → fallback to prod */\nexport function resolveBaseUrl(baseUrl?: string): string {\n return baseUrl || PROD_BASE_URL;\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\nimport { createPaymentsApi } from '../_api/BaseClient';\nimport { resolveBaseUrl } from '../config';\nimport type { API } from '../_api/generated/payments';\nimport type { PaymentLinkInfo, PaymentResult, PaymentFormData, PaymentStep } from '../types';\n\nexport interface UsePaymentLinkOptions {\n linkId: string;\n baseUrl?: string;\n customerId?: string;\n onSuccess?: (result: PaymentResult) => void;\n onError?: (error: string) => void;\n}\n\nexport interface UsePaymentLinkReturn {\n link: PaymentLinkInfo | null;\n isLoading: boolean;\n error: string | null;\n step: PaymentStep;\n pay: (data: PaymentFormData) => Promise<void>;\n paymentResult: PaymentResult | null;\n isPaying: boolean;\n reset: () => void;\n}\n\nexport function usePaymentLink(options: UsePaymentLinkOptions): UsePaymentLinkReturn {\n const { linkId, baseUrl, customerId, onSuccess, onError } = options;\n\n const [link, setLink] = useState<PaymentLinkInfo | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [step, setStep] = useState<PaymentStep>('form');\n const [paymentResult, setPaymentResult] = useState<PaymentResult | null>(null);\n const [isPaying, setIsPaying] = useState(false);\n\n const apiRef = useRef<API | null>(null);\n\n useEffect(() => {\n const resolved = resolveBaseUrl(baseUrl);\n apiRef.current = createPaymentsApi(resolved);\n\n let cancelled = false;\n setIsLoading(true);\n setError(null);\n\n apiRef.current.payments_payments.publicLinksRetrieve(linkId).then((raw) => {\n if (!cancelled) {\n setLink({\n id: raw.id,\n title: raw.title,\n description: raw.description,\n amountUsd: raw.amount_usd ? parseFloat(String(raw.amount_usd)) : null,\n network: raw.network ?? null,\n });\n setIsLoading(false);\n }\n }).catch((err: unknown) => {\n if (!cancelled) {\n const e = err as Record<string, unknown>;\n const msg = e?.statusCode === 404\n ? 'Payment link not found'\n : (String(e?.errorMessage ?? e?.message ?? 'Failed to load payment link'));\n setError(msg);\n setIsLoading(false);\n onError?.(msg);\n }\n });\n\n return () => { cancelled = true; };\n }, [linkId, baseUrl]);\n\n const pay = useCallback(async (data: PaymentFormData) => {\n if (!apiRef.current) return;\n\n setIsPaying(true);\n setStep('processing');\n setError(null);\n\n try {\n const raw = await apiRef.current.payments_payments.publicLinksPayCreate(linkId, {\n email: data.email || undefined,\n name: data.name || undefined,\n amount_usd: data.amountUsd != null ? data.amountUsd.toFixed(2) : undefined,\n external_id: data.externalId || customerId || undefined,\n });\n\n const result: PaymentResult = {\n success: !!raw.invoice_id,\n paymentId: raw.invoice_id ?? null,\n paymentUrl: null,\n payAddress: raw.pay_address ?? null,\n payAmount: raw.pay_amount ? String(raw.pay_amount) : null,\n coin: raw.coin ?? \"USDT\",\n network: raw.network ?? null,\n expiresAt: raw.expires_at ?? null,\n error: null,\n };\n\n setPaymentResult(result);\n setStep('status');\n onSuccess?.(result);\n } catch (err: unknown) {\n const e = err as Record<string, unknown>;\n const msg = String(e?.errorMessage ?? e?.message ?? 'Payment failed');\n setError(msg);\n setStep('form');\n onError?.(msg);\n } finally {\n setIsPaying(false);\n }\n }, [linkId, onSuccess, onError]);\n\n const reset = useCallback(() => {\n setStep('form');\n setPaymentResult(null);\n setError(null);\n }, []);\n\n return { link, isLoading, error, step, pay, paymentResult, isPaying, reset };\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nconst KEY_PREFIX = 'sdkr_pay_id';\n\nexport interface PaymentIdentity {\n customerId: string;\n projectSlug: string;\n}\n\n/**\n * Persists customerId + projectSlug to localStorage per linkId.\n *\n * - Props provided → saves and returns them\n * - No props → reads from store (returning visitor)\n */\nexport function usePaymentIdentity(opts: {\n linkId: string;\n customerId?: string;\n projectSlug?: string;\n}): PaymentIdentity | null {\n const { linkId, customerId, projectSlug } = opts;\n const key = `${KEY_PREFIX}_${linkId}`;\n\n const [identity, setIdentity] = useState<PaymentIdentity | null>(null);\n\n useEffect(() => {\n // Props provided — save\n if (customerId && projectSlug) {\n const value: PaymentIdentity = { customerId, projectSlug };\n setIdentity(value);\n try { localStorage.setItem(key, JSON.stringify(value)); } catch { /* quota */ }\n return;\n }\n\n // No props — try read from store\n try {\n const raw = localStorage.getItem(key);\n if (raw) setIdentity(JSON.parse(raw));\n } catch { /* ignore */ }\n }, [key, customerId, projectSlug]);\n\n return identity;\n}\n","'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\nimport { usePaymentLink } from '../hooks/usePaymentLink';\nimport { usePaymentIdentity } from '../hooks/usePaymentIdentity';\nimport type { PaymentLinkConfig, PaymentLinkInfo, PaymentResult, PaymentFormData, PaymentStep } from '../types';\n\nexport interface PaymentContextValue {\n link: PaymentLinkInfo | null;\n isLoading: boolean;\n error: string | null;\n step: PaymentStep;\n pay: (data: PaymentFormData) => Promise<void>;\n paymentResult: PaymentResult | null;\n isPaying: boolean;\n reset: () => void;\n config: PaymentLinkConfig;\n}\n\nconst PaymentContext = createContext<PaymentContextValue | null>(null);\n\nexport function usePayment(): PaymentContextValue {\n const ctx = useContext(PaymentContext);\n if (!ctx) throw new Error('usePayment must be used within PaymentProvider');\n return ctx;\n}\n\nexport interface PaymentProviderProps extends PaymentLinkConfig {\n children: ReactNode;\n}\n\nexport function PaymentProvider({ children, ...config }: PaymentProviderProps) {\n const identity = usePaymentIdentity({\n linkId: config.linkId,\n customerId: config.customerId,\n projectSlug: config.projectSlug,\n });\n\n const customerId = identity?.customerId ?? config.customerId;\n const projectSlug = identity?.projectSlug ?? config.projectSlug;\n\n const hook = usePaymentLink({\n linkId: config.linkId,\n baseUrl: config.baseUrl,\n customerId,\n onSuccess: config.onSuccess,\n onError: config.onError,\n });\n\n const resolvedConfig: PaymentLinkConfig = { ...config, customerId, projectSlug };\n\n return (\n <PaymentContext.Provider value={{ ...hook, config: resolvedConfig }}>\n {children}\n </PaymentContext.Provider>\n );\n}\n","'use client';\n\nimport { useState, useEffect, useRef } from 'react';\nimport { createPaymentsApi } from '../_api/BaseClient';\nimport { resolveBaseUrl } from '../config';\nimport type { API } from '../_api/generated/payments';\nimport type { CustomerPayment } from '../types';\n\nexport interface UseCustomerPaymentsOptions {\n projectSlug?: string;\n customerId?: string;\n baseUrl?: string;\n}\n\nexport interface UseCustomerPaymentsReturn {\n payments: CustomerPayment[];\n loading: boolean;\n error: string | null;\n}\n\nexport function useCustomerPayments(options: UseCustomerPaymentsOptions): UseCustomerPaymentsReturn {\n const { projectSlug, customerId, baseUrl } = options;\n const [payments, setPayments] = useState<CustomerPayment[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const apiRef = useRef<API | null>(null);\n\n const enabled = Boolean(projectSlug && customerId);\n\n useEffect(() => {\n if (!enabled) return;\n\n const resolved = resolveBaseUrl(baseUrl);\n apiRef.current = createPaymentsApi(resolved);\n\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n apiRef.current.payments_payments\n .customerInvoicesList()\n .then((data: unknown) => {\n if (!cancelled) {\n const results = (data as { results?: CustomerPayment[] })?.results;\n setPayments(Array.isArray(results) ? results : []);\n setLoading(false);\n }\n })\n .catch((err: unknown) => {\n if (!cancelled) {\n const msg = (err as Error)?.message ?? 'Failed to load payment history';\n console.warn('[useCustomerPayments]', msg);\n setError(msg);\n setLoading(false);\n }\n });\n\n return () => { cancelled = true; };\n }, [projectSlug, customerId, baseUrl, enabled]);\n\n return { payments, loading, error };\n}\n","'use client';\n\nimport { usePayment } from '../../context';\nimport { useCustomerPayments } from '../../hooks/useCustomerPayments';\n\nexport function CustomerPaymentHistory() {\n const { config } = usePayment();\n const { payments, loading } = useCustomerPayments({\n projectSlug: config.projectSlug,\n customerId: config.customerId,\n baseUrl: config.baseUrl,\n });\n\n const enabled = Boolean(config.customerId && config.projectSlug);\n const hasHistory = !loading && payments.length > 0;\n\n if (!enabled || !hasHistory) return null;\n\n const items = payments.map((p) => ({\n id: p.id,\n amount: `$${p.amount_usd}`,\n status: p.status,\n statusClass: `sdkr-pay-history-status sdkr-pay-history-status--${p.status}`,\n date: new Date(p.created_at).toLocaleDateString(),\n }));\n\n return (\n <div className=\"sdkr-pay-history\">\n <div className=\"sdkr-pay-history-title\">Your payments</div>\n {items.map((item) => (\n <div key={item.id} className=\"sdkr-pay-history-item\">\n <span className=\"sdkr-pay-history-amount\">{item.amount}</span>\n <span className={item.statusClass}>{item.status}</span>\n <span className=\"sdkr-pay-history-date\">{item.date}</span>\n </div>\n ))}\n </div>\n );\n}\n","'use client';\n\nimport { ShoppingBag } from 'lucide-react';\nimport { usePayment } from '../../context';\n\nexport function PaymentInfo() {\n const { link, step } = usePayment();\n if (!link || step === 'status') return null;\n\n return (\n <div className=\"sdkr-pay-info\">\n <div className=\"sdkr-pay-info-icon\">\n <ShoppingBag size={20} />\n </div>\n <h1 className=\"sdkr-pay-title\">{link.title}</h1>\n {link.description && (\n <p className=\"sdkr-pay-description\">{link.description}</p>\n )}\n {link.amountUsd != null && (\n <div className=\"sdkr-pay-amount-badge\">\n <span className=\"sdkr-pay-amount-value\">${link.amountUsd.toFixed(2)}</span>\n <span className=\"sdkr-pay-amount-currency\">\n USDT{link.network ? ` · ${link.network}` : ''}\n </span>\n </div>\n )}\n </div>\n );\n}\n","export interface PaymentLinkConfig {\n linkId: string;\n /** API base URL. Default: https://api.sdkrouter.com */\n baseUrl?: string;\n /** Customer external ID — auto-passed to pay request, enables payment history */\n customerId?: string;\n /** Project slug — scopes customer payments to a project */\n projectSlug?: string;\n onSuccess?: (payment: PaymentResult) => void;\n onError?: (error: string) => void;\n theme?: 'light' | 'dark' | 'auto';\n /** Locale for UI strings (ISO 639-1, e.g. 'en', 'ru', 'ko'). Default: 'en' */\n locale?: string;\n}\n\nexport interface CustomerPayment {\n id: string;\n amount_usd: string;\n currency_code: string;\n status: string;\n created_at: string;\n}\n\nexport interface PaymentLinkInfo {\n id: string;\n title: string;\n description: string;\n amountUsd: number | null;\n network: string | null;\n}\n\nexport interface PaymentResult {\n paymentId: string | null;\n paymentUrl: string | null;\n payAddress: string | null;\n payAmount: string | null;\n coin: string | null;\n network: string | null;\n expiresAt: string | null;\n error: string | null;\n success: boolean;\n}\n\nexport interface PaymentFormData {\n email?: string;\n name?: string;\n amountUsd?: number;\n externalId?: string;\n}\n\nexport type PaymentStep = 'form' | 'processing' | 'status';\n\n/** Minimum payment amount in USD */\nexport const MIN_AMOUNT_USD = 20;\n\n/** Maximum payment amount in USD */\nexport const MAX_AMOUNT_USD = 50_000;\n","'use client';\n\nimport { useState } from 'react';\nimport { AlertCircle, Loader2 } from 'lucide-react';\nimport { usePayment } from '../../context';\nimport { MIN_AMOUNT_USD, MAX_AMOUNT_USD } from '../../types';\nimport type { PaymentFormData } from '../../types';\n\nexport function PaymentForm() {\n const { link, pay, isPaying, error, step, config } = usePayment();\n\n const [form, setForm] = useState<PaymentFormData>({\n email: '',\n name: '',\n amountUsd: undefined,\n });\n const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});\n\n if (!link || step === 'status') return null;\n\n const isCustomAmount = link.amountUsd == null;\n\n const setField = <K extends keyof PaymentFormData>(key: K, value: PaymentFormData[K]) => {\n setForm(prev => ({ ...prev, [key]: value }));\n setFieldErrors(prev => {\n const next = { ...prev };\n delete next[key];\n return next;\n });\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const errors: Record<string, string> = {};\n\n if (isCustomAmount) {\n if (!form.amountUsd || form.amountUsd < MIN_AMOUNT_USD) {\n errors.amountUsd = `Minimum $${MIN_AMOUNT_USD}`;\n } else if (form.amountUsd > MAX_AMOUNT_USD) {\n errors.amountUsd = `Maximum $${MAX_AMOUNT_USD.toLocaleString()}`;\n }\n }\n\n if (form.email && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(form.email)) {\n errors.email = 'Invalid email address';\n }\n\n if (Object.keys(errors).length > 0) {\n setFieldErrors(errors);\n return;\n }\n\n const data: PaymentFormData = {};\n if (form.email) data.email = form.email;\n if (form.name) data.name = form.name;\n if (isCustomAmount && form.amountUsd) data.amountUsd = form.amountUsd;\n if (config.customerId) data.externalId = config.customerId;\n\n pay(data);\n };\n\n const displayAmount = isCustomAmount\n ? form.amountUsd ? `$${form.amountUsd.toFixed(2)}` : null\n : `$${link.amountUsd!.toFixed(2)}`;\n\n const visibleError = step === 'form' ? error : null;\n\n return (\n <form className=\"sdkr-pay-form\" onSubmit={handleSubmit}>\n {visibleError && (\n <div className=\"sdkr-pay-error\">\n <AlertCircle size={14} />\n <span>{visibleError}</span>\n </div>\n )}\n\n {isCustomAmount && (\n <div className=\"sdkr-pay-field\">\n <label className=\"sdkr-pay-label\">Amount (USD)</label>\n <div className=\"sdkr-pay-amount-prefix\">\n <input\n className={`sdkr-pay-input ${fieldErrors.amountUsd ? 'sdkr-pay-input-error' : ''}`}\n type=\"number\"\n step=\"0.01\"\n min={MIN_AMOUNT_USD}\n inputMode=\"decimal\"\n placeholder=\"0.00\"\n value={form.amountUsd ?? ''}\n onChange={(e) => setField('amountUsd', e.target.value ? parseFloat(e.target.value) : undefined)}\n disabled={isPaying}\n />\n </div>\n {fieldErrors.amountUsd && (\n <div className=\"sdkr-pay-field-error\">\n <AlertCircle size={12} />\n {fieldErrors.amountUsd}\n </div>\n )}\n </div>\n )}\n\n <div className=\"sdkr-pay-field\">\n <label className=\"sdkr-pay-label\">\n Email <span className=\"sdkr-pay-label-optional\">(optional)</span>\n </label>\n <input\n className={`sdkr-pay-input ${fieldErrors.email ? 'sdkr-pay-input-error' : ''}`}\n type=\"email\"\n inputMode=\"email\"\n autoComplete=\"email\"\n placeholder=\"buyer@example.com\"\n value={form.email ?? ''}\n onChange={(e) => setField('email', e.target.value)}\n disabled={isPaying}\n />\n {fieldErrors.email && (\n <div className=\"sdkr-pay-field-error\">\n <AlertCircle size={12} />\n {fieldErrors.email}\n </div>\n )}\n </div>\n\n <div className=\"sdkr-pay-field\">\n <label className=\"sdkr-pay-label\">\n Name <span className=\"sdkr-pay-label-optional\">(optional)</span>\n </label>\n <input\n className=\"sdkr-pay-input\"\n type=\"text\"\n autoComplete=\"name\"\n placeholder=\"John Doe\"\n value={form.name ?? ''}\n onChange={(e) => setField('name', e.target.value)}\n disabled={isPaying}\n maxLength={200}\n />\n </div>\n\n <button className=\"sdkr-pay-btn\" type=\"submit\" disabled={isPaying}>\n {isPaying ? (\n <span className=\"sdkr-pay-btn-content\">\n <Loader2 size={16} className=\"sdkr-pay-btn-spinner\" />\n Processing...\n </span>\n ) : (\n displayAmount ? `Pay ${displayAmount}` : 'Pay'\n )}\n </button>\n </form>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState, useCallback } from 'react';\nimport { createPaymentsApi } from '../_api/BaseClient';\nimport { resolveBaseUrl } from '../config';\nimport type { API } from '../_api/generated/payments';\n\nexport interface InvoiceStatus {\n invoiceId: string;\n status: string;\n confirmTimes: string | null;\n txId: string | null;\n completedAt: string | null;\n}\n\nconst POLL_INTERVAL = 15_000; // 15 seconds\nconst TERMINAL_STATUSES = new Set(['paid', 'expired', 'cancelled', 'overpaid', 'underpaid']);\n\nexport function useInvoicePolling(\n invoiceId: string | null,\n baseUrl?: string,\n onPaid?: (status: InvoiceStatus) => void,\n) {\n const [invoiceStatus, setInvoiceStatus] = useState<InvoiceStatus | null>(null);\n const [isPolling, setIsPolling] = useState(false);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const apiRef = useRef<API | null>(null);\n\n const stopPolling = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n setIsPolling(false);\n }, []);\n\n const poll = useCallback(async () => {\n if (!invoiceId || !apiRef.current) return;\n\n try {\n // Call public invoice status endpoint\n const resolved = resolveBaseUrl(baseUrl);\n const resp = await fetch(`${resolved}/api/payments/invoices/${invoiceId}/status/`);\n if (!resp.ok) return;\n\n const data = await resp.json();\n const status: InvoiceStatus = {\n invoiceId: data.invoice_id,\n status: data.status,\n confirmTimes: data.confirm_times || null,\n txId: data.tx_id || null,\n completedAt: data.completed_at || null,\n };\n\n setInvoiceStatus(status);\n\n if (TERMINAL_STATUSES.has(status.status)) {\n stopPolling();\n if (status.status === 'paid') {\n onPaid?.(status);\n }\n }\n } catch {\n // Silently fail — will retry on next interval\n }\n }, [invoiceId, baseUrl, onPaid, stopPolling]);\n\n useEffect(() => {\n if (!invoiceId) return;\n\n apiRef.current = createPaymentsApi(resolveBaseUrl(baseUrl));\n setIsPolling(true);\n\n // Initial poll\n poll();\n\n // Start interval\n intervalRef.current = setInterval(poll, POLL_INTERVAL);\n\n return () => {\n stopPolling();\n };\n }, [invoiceId]);\n\n return { invoiceStatus, isPolling, stopPolling };\n}\n","'use client';\n\nimport { useState, useEffect, useMemo } from 'react';\nimport moment from 'moment';\n\nexport interface CountdownState {\n /** Formatted string: \"45:23\" or \"1:23:45\" or \"Expired\" */\n display: string;\n /** Total seconds remaining */\n totalSeconds: number;\n /** Whether the countdown has expired */\n isExpired: boolean;\n /** Whether less than 5 minutes remain */\n isUrgent: boolean;\n /** Minutes remaining */\n minutes: number;\n /** Seconds remaining */\n seconds: number;\n}\n\nexport function useCountdown(expiresAt: string | null): CountdownState {\n const expiresAtMoment = useMemo(\n () => (expiresAt ? moment.utc(expiresAt) : null),\n [expiresAt],\n );\n\n const [now, setNow] = useState(() => moment.utc());\n\n useEffect(() => {\n if (!expiresAtMoment) return;\n\n const interval = setInterval(() => {\n setNow(moment.utc());\n }, 1000);\n\n return () => clearInterval(interval);\n }, [expiresAtMoment]);\n\n if (!expiresAtMoment) {\n return { display: '--:--', totalSeconds: 0, isExpired: false, isUrgent: false, minutes: 0, seconds: 0 };\n }\n\n const diff = expiresAtMoment.diff(now, 'seconds');\n const totalSeconds = Math.max(0, diff);\n const isExpired = totalSeconds <= 0;\n const isUrgent = totalSeconds > 0 && totalSeconds < 300; // < 5 min\n\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n const display = isExpired\n ? 'Expired'\n : hours > 0\n ? `${hours}:${pad(minutes)}:${pad(seconds)}`\n : `${pad(minutes)}:${pad(seconds)}`;\n\n return { display, totalSeconds, isExpired, isUrgent, minutes, seconds };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport QRCode from 'react-qr-code';\nimport {\n Copy, Check, Clock, CircleAlert, CircleCheck, CircleX,\n Loader2, ArrowLeft, Wallet,\n} from 'lucide-react';\nimport { usePayment } from '../../context';\nimport { useInvoicePolling } from '../../hooks/useInvoicePolling';\nimport { useCountdown } from '../../hooks/useCountdown';\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n\n const copy = useCallback(() => {\n navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n }, [text]);\n\n return (\n <button onClick={copy} className=\"sdkr-pay-copy-btn\" title=\"Copy to clipboard\">\n {copied ? <Check size={14} /> : <Copy size={14} />}\n </button>\n );\n}\n\nconst STATUS_CONFIG = {\n waiting: {\n icon: Clock,\n iconClass: 'sdkr-pay-status-icon--waiting',\n title: 'Awaiting Payment',\n },\n paid: {\n icon: CircleCheck,\n iconClass: 'sdkr-pay-status-icon--paid',\n title: 'Payment Received',\n },\n expired: {\n icon: CircleX,\n iconClass: 'sdkr-pay-status-icon--error',\n title: 'Payment Expired',\n },\n error: {\n icon: CircleAlert,\n iconClass: 'sdkr-pay-status-icon--error',\n title: 'Payment Error',\n },\n} as const;\n\ntype VisualStatus = keyof typeof STATUS_CONFIG;\n\nexport function PaymentStatus() {\n const { paymentResult, step, reset, config } = usePayment();\n\n const invoiceId = paymentResult?.paymentId ?? null;\n const { invoiceStatus, isPolling } = useInvoicePolling(\n step === 'status' && !paymentResult?.error ? invoiceId : null,\n config.baseUrl,\n );\n\n const countdown = useCountdown(paymentResult?.expiresAt ?? null);\n\n if (step !== 'status' || !paymentResult) return null;\n\n const hasError = !!paymentResult.error;\n const coin = paymentResult.coin || 'USDT';\n const network = paymentResult.network || '';\n const isPaid = invoiceStatus?.status === 'paid';\n const isExpired = invoiceStatus?.status === 'expired' || countdown.isExpired;\n const isActive = !hasError && !isPaid && !isExpired;\n\n const visualStatus: VisualStatus = hasError ? 'error' : isPaid ? 'paid' : isExpired ? 'expired' : 'waiting';\n const { icon: StatusLucide, iconClass, title } = STATUS_CONFIG[visualStatus];\n\n const subtitle = hasError\n ? paymentResult.error || 'Something went wrong'\n : isPaid\n ? invoiceStatus?.txId ? `Confirmed · ${invoiceStatus.txId.slice(0, 16)}...` : 'Transaction confirmed'\n : isExpired\n ? 'This invoice has expired'\n : 'Send the exact amount to the address below';\n\n return (\n <div className=\"sdkr-pay-status\">\n {/* Header — icon + title + subtitle */}\n <div className=\"sdkr-pay-status-header\">\n <div className={`sdkr-pay-status-icon ${iconClass}`}>\n <StatusLucide size={24} />\n </div>\n <h2 className=\"sdkr-pay-status-title\">{title}</h2>\n <p className=\"sdkr-pay-status-subtitle\">{subtitle}</p>\n </div>\n\n {isActive && (\n <>\n {/* Hero: Amount to send */}\n {paymentResult.payAmount && (\n <div className=\"sdkr-pay-hero-amount\">\n <Wallet size={16} className=\"sdkr-pay-hero-amount-icon\" />\n <span className=\"sdkr-pay-hero-amount-value\">{paymentResult.payAmount}</span>\n <span className=\"sdkr-pay-hero-amount-coin\">{coin}</span>\n <CopyButton text={paymentResult.payAmount} />\n </div>\n )}\n\n {/* QR Code */}\n {paymentResult.payAddress && (\n <div className=\"sdkr-pay-qr\">\n <QRCode\n value={paymentResult.payAddress}\n size={160}\n level=\"M\"\n bgColor=\"var(--sdkr-pay-qr-bg)\"\n fgColor=\"var(--sdkr-pay-qr-fg)\"\n />\n </div>\n )}\n\n {/* Address */}\n {paymentResult.payAddress && (\n <div className=\"sdkr-pay-detail\">\n <div className=\"sdkr-pay-detail-label\">\n Deposit Address\n {network && <span className=\"sdkr-pay-network-badge\">{network}</span>}\n </div>\n <div className=\"sdkr-pay-detail-value sdkr-pay-detail-mono sdkr-pay-detail-copyable\">\n <span>{paymentResult.payAddress}</span>\n <CopyButton text={paymentResult.payAddress} />\n </div>\n </div>\n )}\n\n {/* Timer */}\n {paymentResult.expiresAt && (\n <div className={`sdkr-pay-countdown ${countdown.isUrgent ? 'sdkr-pay-countdown--urgent' : ''}`}>\n <Clock size={14} className=\"sdkr-pay-countdown-icon\" />\n <span className=\"sdkr-pay-countdown-value\">{countdown.display}</span>\n </div>\n )}\n\n {/* Live status */}\n {invoiceStatus?.confirmTimes && (\n <div className=\"sdkr-pay-confirmations\">\n <Loader2 size={14} className=\"sdkr-pay-confirmations-icon\" />\n Confirmations: <strong>{invoiceStatus.confirmTimes}</strong>\n </div>\n )}\n\n {isPolling && !invoiceStatus?.confirmTimes && (\n <div className=\"sdkr-pay-polling\">\n <span className=\"sdkr-pay-polling-dot\" /> Checking for payment...\n </div>\n )}\n\n {/* Warning */}\n <div className=\"sdkr-pay-warning\">\n <CircleAlert size={12} />\n <span>Send exactly <strong>{paymentResult.payAmount} {coin}</strong> — different amount won't be matched</span>\n </div>\n </>\n )}\n\n {/* Action */}\n <div className=\"sdkr-pay-status-actions\">\n <button className=\"sdkr-pay-btn sdkr-pay-btn--ghost\" onClick={reset}>\n <ArrowLeft size={14} />\n {hasError || isExpired ? 'Try again' : isPaid ? 'New payment' : 'Cancel'}\n </button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { AlertCircle } from 'lucide-react';\nimport { usePayment } from '../../context';\nimport { CustomerPaymentHistory } from '../CustomerPaymentHistory';\nimport { PaymentInfo } from '../PaymentInfo';\nimport { PaymentForm } from '../PaymentForm';\nimport { PaymentStatus } from '../PaymentStatus';\n\nexport function PaymentContent() {\n const { isLoading, error, step, link } = usePayment();\n\n const showErrorOnly = Boolean(error) && step === 'form' && !link;\n\n if (isLoading) {\n return (\n <div className=\"sdkr-pay-loading\">\n <span className=\"sdkr-pay-spinner\" />\n </div>\n );\n }\n\n if (showErrorOnly) {\n return (\n <div className=\"sdkr-pay-error-page\">\n <div className=\"sdkr-pay-status-icon sdkr-pay-status-icon--error\">\n <AlertCircle size={24} />\n </div>\n <p className=\"sdkr-pay-error-text\">{error}</p>\n </div>\n );\n }\n\n return (\n <div className={`sdkr-pay-content sdkr-pay-step--${step}`}>\n <PaymentInfo />\n {Boolean(link) && step !== 'status' && <hr className=\"sdkr-pay-separator\" />}\n <PaymentForm />\n <PaymentStatus />\n <CustomerPaymentHistory />\n </div>\n );\n}\n"]}
|