@easypayment/medusa-paypal-ui 1.0.44 → 1.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client/http.ts","../src/client/paypal.ts","../src/hooks/usePayPalConfig.ts","../src/components/PayPalProvider.tsx","../src/components/PayPalCurrencyNotice.tsx","../src/components/PayPalSmartButtons.tsx","../src/components/PayPalAdvancedCard.tsx","../src/adapters/MedusaNextPayPalAdapter.tsx","../src/components/PayPalPaymentSection.tsx","../src/hooks/usePayPalPaymentMethods.ts"],"names":["useMemo","useState","useRef","useEffect","jsx","PayPalScriptProvider","jsxs","PayPalButtons","SPIN_STYLE","markPaymentComplete","usePayPalCardFields","PayPalCardFieldsProvider","PayPalNumberField","PayPalExpiryField","PayPalCVVField","useCallback","_cache","CACHE_TTL","cacheKey"],"mappings":"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","file":"index.cjs","sourcesContent":["export type HttpOptions = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n}\r\n\r\nfunction toHeaderRecord(headers?: RequestInit[\"headers\"]): Record<string, string> {\r\n if (!headers) {\r\n return {}\r\n }\r\n\r\n if (headers instanceof Headers) {\r\n return Object.fromEntries(headers.entries())\r\n }\r\n\r\n if (Array.isArray(headers)) {\r\n return Object.fromEntries(headers)\r\n }\r\n\r\n return { ...headers }\r\n}\r\n\r\nexport function createHttpClient(opts: HttpOptions) {\r\n const base = opts.baseUrl.replace(/\\/+$/, \"\")\r\n\r\n async function request<T>(path: string, init?: RequestInit): Promise<T> {\r\n const url = `${base}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`\r\n const headers: Record<string, string> = {\r\n Accept: \"application/json\",\r\n ...toHeaderRecord(init?.headers),\r\n }\r\n\r\n if (opts.publishableApiKey) {\r\n headers[\"x-publishable-api-key\"] = opts.publishableApiKey\r\n }\r\n\r\n const res = await fetch(url, { ...init, headers, credentials: \"include\" })\r\n const text = await res.text().catch(() => \"\")\r\n\r\n if (!res.ok) {\r\n if (res.status === 401) {\r\n throw new Error(\r\n \"[PayPal] Unauthorized (401) — check that your publishable API key is correct and set in NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY\"\r\n )\r\n }\r\n if (res.status === 403) {\r\n throw new Error(\r\n \"[PayPal] Forbidden (403) — this request is not allowed. Check your CORS and API key settings.\"\r\n )\r\n }\r\n throw new Error(text || `Request failed (${res.status})`)\r\n }\r\n if (!text) return {} as T\r\n\r\n const contentType = res.headers.get(\"content-type\") || \"\"\r\n if (!contentType.includes(\"application/json\")) {\r\n console.warn(\"[PayPal] Unexpected non-JSON response:\", contentType, text.slice(0, 200))\r\n return {} as T\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T\r\n } catch {\r\n console.warn(\"[PayPal] Failed to parse JSON response:\", text.slice(0, 200))\r\n return {} as T\r\n }\r\n }\r\n\r\n return { request }\r\n}\r\n","import type { PayPalConfig, PayPalSettingsResponse } from \"./types\"\r\nimport { createHttpClient, type HttpOptions } from \"./http\"\r\n\r\nexport function createPayPalStoreApi(opts: HttpOptions) {\r\n const http = createHttpClient(opts)\r\n\r\n return {\r\n getConfig(cartId?: string, signal?: AbortSignal) {\r\n const q = cartId ? `?cart_id=${encodeURIComponent(cartId)}` : \"\"\r\n return http.request<PayPalConfig>(`/store/paypal/config${q}`, { signal })\r\n },\r\n\r\n getSettings() {\r\n return http.request<PayPalSettingsResponse>(`/store/paypal/settings`)\r\n },\r\n\r\n createOrder(cartId: string, isCardPayment = false) {\r\n return http.request<{ id: string }>(`/store/paypal/create-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, is_card_payment: isCardPayment }),\r\n })\r\n },\r\n\r\n captureOrder(cartId: string, orderId: string) {\r\n return http.request<Record<string, unknown>>(`/store/paypal/capture-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, order_id: orderId }),\r\n })\r\n },\r\n }\r\n}\r\n","import { useEffect, useMemo, useRef, useState } from \"react\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\ntype Args = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId?: string\r\n enabled?: boolean\r\n}\r\n\r\nconst _cache = new Map<string, { config: PayPalConfig; at: number }>()\r\nconst CACHE_TTL = 5 * 60 * 1000\r\n\r\nfunction cacheKey(baseUrl: string, cartId?: string) {\r\n return `${baseUrl}::${cartId ?? \"\"}`\r\n}\r\n\r\nexport function usePayPalConfig({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled = true,\r\n}: Args) {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const key = cacheKey(baseUrl, cartId)\r\n const hit = _cache.get(key)\r\n const seedConfig = hit && Date.now() - hit.at < CACHE_TTL ? hit.config : null\r\n\r\n const [config, setConfig] = useState<PayPalConfig | null>(seedConfig)\r\n const [loading, setLoading] = useState<boolean>(seedConfig === null && enabled)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n const fetchIdRef = useRef(0)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setLoading(false)\r\n setError(null)\r\n return\r\n }\r\n\r\n const k = cacheKey(baseUrl, cartId)\r\n const cached = _cache.get(k)\r\n if (cached && Date.now() - cached.at < CACHE_TTL) {\r\n setConfig(cached.config)\r\n setLoading(false)\r\n setError(null)\r\n return\r\n }\r\n\r\n const id = ++fetchIdRef.current\r\n let mounted = true\r\n const controller = new AbortController()\r\n\r\n setLoading(true)\r\n setError(null)\r\n\r\n ;(async () => {\r\n try {\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (!mounted || id !== fetchIdRef.current) return\r\n _cache.set(k, { config: cfg, at: Date.now() })\r\n setConfig(cfg)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (!mounted || id !== fetchIdRef.current) return\r\n setError(e?.message || \"Failed to load PayPal config\")\r\n } finally {\r\n if (mounted && id === fetchIdRef.current) setLoading(false)\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, baseUrl, cartId, enabled])\r\n\r\n return { config, loading, error }\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo } from \"react\"\r\nimport { PayPalScriptProvider } from \"@paypal/react-paypal-js\"\r\nimport type { ReactPayPalScriptOptions } from \"@paypal/react-paypal-js\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nconst BN_CODE = \"MBJTechnolabs_SI_SPB\"\r\n\r\nexport function PayPalProvider(props: {\r\n config: PayPalConfig\r\n intent?: \"capture\" | \"authorize\"\r\n disableFunding?: string\r\n children: React.ReactNode\r\n}) {\r\n const { config, intent = \"capture\", disableFunding, children } = props\r\n\r\n const options = useMemo((): ReactPayPalScriptOptions => {\r\n return {\r\n clientId: config.client_id,\r\n \"client-id\": config.client_id,\r\n currency: config.currency,\r\n intent,\r\n components: config.client_token ? \"buttons,card-fields\" : \"buttons\",\r\n \"data-client-token\": config.client_token || undefined,\r\n \"disable-funding\": disableFunding,\r\n \"data-partner-attribution-id\": BN_CODE,\r\n }\r\n }, [config, intent, disableFunding])\r\n\r\n return (\r\n <PayPalScriptProvider\r\n key={`${options.clientId}-${options[\"data-client-token\"] ?? \"no-token\"}`}\r\n options={options}\r\n >\r\n {children}\r\n </PayPalScriptProvider>\r\n )\r\n}\r\n","\"use client\"\n\nimport React from \"react\"\nimport type { PayPalConfig } from \"../client/types\"\n\nexport function PayPalCurrencyNotice({ config }: { config: PayPalConfig }) {\n if (config.currency_supported) return null\n\n return (\n <div style={{ padding: 12, border: \"1px solid #ddd\", borderRadius: 10 }}>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>PayPal currency issue</div>\n <ul style={{ margin: 0, paddingLeft: 18 }}>\n {(config.currency_errors || []).map((e, i) => (\n <li key={i}>{e}</li>\n ))}\n </ul>\n </div>\n )\n}\n","\"use client\"\r\nimport React, { useMemo, useState } from \"react\"\r\nimport { PayPalButtons } from \"@paypal/react-paypal-js\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst BUTTON_WIDTH_MAP: Record<string, string> = {\r\n small: \"300px\",\r\n medium: \"400px\",\r\n large: \"500px\",\r\n responsive: \"100%\",\r\n}\r\n\r\nasync function markPaymentComplete(\r\n baseUrl: string,\r\n cartId: string,\r\n publishableApiKey?: string\r\n): Promise<void> {\r\n try {\r\n await fetch(`${baseUrl.replace(/\\/$/, \"\")}/store/paypal-complete`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...(publishableApiKey ? { \"x-publishable-api-key\": publishableApiKey } : {}),\r\n },\r\n body: JSON.stringify({ cart_id: cartId }),\r\n credentials: \"include\",\r\n })\r\n } catch (e) {\r\n console.warn(\"[PayPal] paypal-complete call failed:\", e)\r\n }\r\n}\r\n\r\nexport function PayPalSmartButtons(props: {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId: string\r\n config: PayPalConfig\r\n onPaid?: (result: Record<string, unknown>) => void\r\n onError?: (message: string) => void\r\n}) {\r\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const [processing, setProcessing] = useState(false)\r\n\r\n if (!config.currency_supported) return null\r\n\r\n const containerWidth = BUTTON_WIDTH_MAP[config.button_width ?? \"responsive\"] ?? \"100%\"\r\n\r\n return (\r\n <div style={{ width: containerWidth, position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {processing && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 10,\r\n background: \"rgba(255,255,255,0.90)\",\r\n borderRadius: 8,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 10,\r\n minHeight: 60,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 28,\r\n height: 28,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 13, color: \"#374151\", fontWeight: 500 }}>\r\n Processing your payment…\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 4 }}>\r\n Please do not close or refresh this page\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {config.environment === \"sandbox\" && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 8,\r\n padding: \"10px 14px\",\r\n background: \"#eff6ff\",\r\n border: \"1px solid #bfdbfe\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#1e40af\",\r\n lineHeight: 1.5,\r\n marginBottom: 10,\r\n }}\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"#1e40af\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n style={{ flexShrink: 0, marginTop: 1 }}\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <path d=\"M12 8v4M12 16h.01\" />\r\n </svg>\r\n <span>\r\n Sandbox mode — you will not be charged. Use your PayPal sandbox\r\n account to complete the payment.\r\n </span>\r\n </div>\r\n )}\r\n\r\n <PayPalButtons\r\n style={{\r\n layout: \"vertical\",\r\n color: config.button_color,\r\n shape: config.button_shape,\r\n label: config.button_label,\r\n height: config.button_height,\r\n }}\r\n createOrder={async () => {\r\n setError(null)\r\n const r = await api.createOrder(cartId)\r\n return r.id\r\n }}\r\n onApprove={async (data: { orderID?: string }) => {\r\n try {\r\n setProcessing(true)\r\n setError(null)\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\r\n\r\n await markPaymentComplete(baseUrl, cartId, publishableApiKey)\r\n\r\n onPaid?.(result)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : \"Payment capture failed\"\r\n setError(msg)\r\n onError?.(msg)\r\n setProcessing(false)\r\n }\r\n }}\r\n onCancel={() => {\r\n setProcessing(false)\r\n }}\r\n onError={(err: Error | { message?: string }) => {\r\n setProcessing(false)\r\n const msg = err instanceof Error ? err.message : err?.message || \"PayPal error\"\r\n setError(msg)\r\n onError?.(msg)\r\n }}\r\n />\r\n\r\n {error ? (\r\n <div\r\n style={{\r\n marginTop: 10,\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 8,\r\n padding: \"10px 14px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n <span style={{ flexShrink: 0, fontSize: 15 }}>⚠️</span>\r\n <span>{error}</span>\r\n </div>\r\n ) : null}\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo, useState } from \"react\"\r\nimport {\r\n PayPalCardFieldsProvider,\r\n PayPalNumberField,\r\n PayPalExpiryField,\r\n PayPalCVVField,\r\n usePayPalCardFields,\r\n} from \"@paypal/react-paypal-js\"\r\n\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst cardStyle = {\r\n input: {\r\n \"font-size\": \"15px\",\r\n \"font-family\": \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\r\n \"font-weight\": \"400\",\r\n color: \"#111827\",\r\n padding: \"0 14px\",\r\n height: \"42px\",\r\n \"border-radius\": \"8px\",\r\n border: \"1px solid #d1d5db\",\r\n background: \"#ffffff\",\r\n \"box-shadow\": \"none\",\r\n transition: \"border-color 0.15s ease\",\r\n },\r\n \"::placeholder\": {\r\n color: \"#9ca3af\",\r\n },\r\n \".invalid\": {\r\n color: \"#dc2626\",\r\n border: \"1px solid #fca5a5\",\r\n background: \"#fff7f7\",\r\n \"box-shadow\": \"none\",\r\n },\r\n \".valid\": {\r\n color: \"#111827\",\r\n border: \"1px solid #d1d5db\",\r\n \"box-shadow\": \"none\",\r\n },\r\n \"input:focus\": {\r\n outline: \"none\",\r\n border: \"1px solid #2563eb\",\r\n \"box-shadow\": \"0 0 0 3px rgba(37,99,235,0.12)\",\r\n },\r\n}\r\n\r\nconst labelStyle: React.CSSProperties = {\r\n display: \"block\",\r\n fontSize: 13,\r\n fontWeight: 500,\r\n color: \"#374151\",\r\n marginBottom: 6,\r\n letterSpacing: \"0.01em\",\r\n}\r\n\r\nasync function markPaymentComplete(\r\n baseUrl: string,\r\n cartId: string,\r\n publishableApiKey?: string\r\n): Promise<void> {\r\n try {\r\n await fetch(`${baseUrl.replace(/\\/$/, \"\")}/store/paypal-complete`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...(publishableApiKey ? { \"x-publishable-api-key\": publishableApiKey } : {}),\r\n },\r\n body: JSON.stringify({ cart_id: cartId }),\r\n credentials: \"include\",\r\n })\r\n } catch (e) {\r\n console.warn(\"[PayPal Card] paypal-complete call failed:\", e)\r\n }\r\n}\r\n\r\nfunction SubmitButton({\r\n disabled,\r\n label,\r\n onSubmit,\r\n}: {\r\n disabled: boolean\r\n label: string\r\n onSubmit: () => void\r\n}) {\r\n const { cardFieldsForm } = usePayPalCardFields()\r\n const isDisabled = disabled || !cardFieldsForm\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n disabled={isDisabled}\r\n onClick={() => {\r\n onSubmit()\r\n cardFieldsForm?.submit()\r\n }}\r\n style={{\r\n width: \"100%\",\r\n height: 48,\r\n padding: \"0 20px\",\r\n borderRadius: 8,\r\n border: \"none\",\r\n background: isDisabled\r\n ? \"#e5e7eb\"\r\n : \"linear-gradient(180deg, #2563eb 0%, #1d4ed8 100%)\",\r\n color: isDisabled ? \"#9ca3af\" : \"#ffffff\",\r\n fontSize: 15,\r\n fontWeight: 600,\r\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\r\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\r\n letterSpacing: \"0.01em\",\r\n boxShadow: isDisabled\r\n ? \"none\"\r\n : \"0 1px 3px rgba(37,99,235,0.3), 0 1px 2px rgba(0,0,0,0.06)\",\r\n transition: \"all 0.15s ease\",\r\n }}\r\n onMouseEnter={(e) => {\r\n if (!isDisabled) {\r\n ;(e.target as HTMLButtonElement).style.background =\r\n \"linear-gradient(180deg, #1d4ed8 0%, #1e40af 100%)\"\r\n ;(e.target as HTMLButtonElement).style.boxShadow =\r\n \"0 4px 6px rgba(37,99,235,0.35), 0 2px 4px rgba(0,0,0,0.06)\"\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (!isDisabled) {\r\n ;(e.target as HTMLButtonElement).style.background =\r\n \"linear-gradient(180deg, #2563eb 0%, #1d4ed8 100%)\"\r\n ;(e.target as HTMLButtonElement).style.boxShadow =\r\n \"0 1px 3px rgba(37,99,235,0.3), 0 1px 2px rgba(0,0,0,0.06)\"\r\n }\r\n }}\r\n >\r\n {label}\r\n </button>\r\n )\r\n}\r\n\r\nexport function PayPalAdvancedCard(props: {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId: string\r\n config: PayPalConfig\r\n onPaid?: (result: Record<string, unknown>) => void\r\n onError?: (message: string) => void\r\n}) {\r\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\r\n\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const [submitting, setSubmitting] = useState(false)\r\n\r\n if (!config.currency_supported) return null\r\n\r\n if (!config.client_token) {\r\n return (\r\n <div\r\n style={{\r\n padding: \"12px 16px\",\r\n background: \"#fefce8\",\r\n border: \"1px solid #fde68a\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#92400e\",\r\n }}\r\n >\r\n Card fields unavailable — missing client token from backend.\r\n </div>\r\n )\r\n }\r\n\r\n const isSandbox = config.environment === \"sandbox\"\r\n\r\n return (\r\n <div style={{ position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {submitting && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 20,\r\n background: \"rgba(255,255,255,0.92)\",\r\n borderRadius: 12,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 14,\r\n minHeight: 180,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 36,\r\n height: 36,\r\n borderRadius: \"50%\",\r\n border: \"3px solid #dbeafe\",\r\n borderTopColor: \"#2563eb\",\r\n animation: \"_pp_spin .75s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 15, fontWeight: 600, color: \"#111827\" }}>\r\n Processing your payment…\r\n </div>\r\n <div style={{ fontSize: 13, color: \"#6b7280\", marginTop: 4 }}>\r\n Please do not close or refresh this page\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <PayPalCardFieldsProvider\r\n style={cardStyle}\r\n createOrder={async () => {\r\n setError(null)\r\n const r = await api.createOrder(cartId)\r\n return r.id\r\n }}\r\n onApprove={async (data: { orderID?: string }) => {\r\n try {\r\n setError(null)\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\r\n\r\n await markPaymentComplete(baseUrl, cartId, publishableApiKey)\r\n\r\n onPaid?.(result)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : \"Card payment failed\"\r\n setError(msg)\r\n onError?.(msg)\r\n setSubmitting(false)\r\n }\r\n }}\r\n onCancel={() => {\r\n setSubmitting(false)\r\n }}\r\n onError={(e: Error | { message?: string }) => {\r\n const msg = e instanceof Error ? e.message : e?.message || \"CardFields error\"\r\n setError(msg)\r\n onError?.(msg)\r\n setSubmitting(false)\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 16,\r\n width: \"100%\",\r\n }}\r\n >\r\n {isSandbox && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 10,\r\n padding: \"10px 14px\",\r\n background: \"#eff6ff\",\r\n border: \"1px solid #bfdbfe\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#1e40af\",\r\n lineHeight: 1.55,\r\n }}\r\n >\r\n <span style={{ fontSize: 15, flexShrink: 0, marginTop: 1 }}>🧪</span>\r\n <span>\r\n Sandbox mode — use test card{\" \"}\r\n <strong style={{ fontFamily: \"monospace\", letterSpacing: \"0.05em\" }}>\r\n 4111 1111 1111 1111\r\n </strong>{\" \"}\r\n with any future date and any CVV.\r\n </span>\r\n </div>\r\n )}\r\n\r\n <div>\r\n <label style={labelStyle}>Card number</label>\r\n <PayPalNumberField />\r\n </div>\r\n\r\n <div\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr 1fr\",\r\n gap: 16,\r\n }}\r\n >\r\n <div>\r\n <label style={labelStyle}>Expiration date</label>\r\n <PayPalExpiryField />\r\n </div>\r\n <div>\r\n <label style={labelStyle}>Security code</label>\r\n <PayPalCVVField />\r\n </div>\r\n </div>\r\n\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 6,\r\n fontSize: 12,\r\n color: \"#6b7280\",\r\n }}\r\n >\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"#10b981\"\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\r\n </svg>\r\n <span>Your payment is secured with 256-bit SSL encryption</span>\r\n </div>\r\n\r\n <SubmitButton\r\n disabled={submitting}\r\n label={submitting ? \"Processing…\" : \"Pay by Card\"}\r\n onSubmit={() => {\r\n setError(null)\r\n setSubmitting(true)\r\n }}\r\n />\r\n\r\n {error && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 10,\r\n padding: \"10px 14px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n <span style={{ flexShrink: 0, marginTop: 1 }}>⚠️</span>\r\n <span>{error}</span>\r\n </div>\r\n )}\r\n </div>\r\n </PayPalCardFieldsProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useCallback } from \"react\"\r\nimport { PayPalCurrencyNotice } from \"../components/PayPalCurrencyNotice\"\r\nimport { PayPalAdvancedCard } from \"../components/PayPalAdvancedCard\"\r\nimport { PayPalProvider } from \"../components/PayPalProvider\"\r\nimport { PayPalSmartButtons } from \"../components/PayPalSmartButtons\"\r\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\r\n\r\nconst DEFAULT_PAYPAL_PROVIDER_ID = \"pp_paypal_paypal\"\r\nconst DEFAULT_PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\"\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nfunction PayPalLoadingCard() {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 12,\r\n padding: \"14px 16px\",\r\n background: \"#f9fafb\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: 10,\r\n }}\r\n >\r\n <style>{SPIN_STYLE}</style>\r\n <div\r\n style={{\r\n width: 22,\r\n height: 22,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <div>\r\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\r\n Connecting to PayPal…\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\r\n Setting up secure payment\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction PayPalErrorCard({ message }: { message: string }) {\r\n return (\r\n <div\r\n style={{\r\n padding: \"12px 16px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 10,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {message}\r\n </div>\r\n )\r\n}\r\n\r\nexport type MedusaNextPayPalAdapterProps = {\r\n cartId: string\r\n selectedProviderId: string | null | undefined\r\n baseUrl: string\r\n publishableApiKey?: string\r\n providerIds?: {\r\n paypal?: string\r\n paypalCard?: string\r\n }\r\n onSuccess?: (cartId: string) => void\r\n onError?: (message: string) => void\r\n onPaid?: (result: unknown) => void\r\n}\r\n\r\nexport function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps) {\r\n const {\r\n cartId,\r\n selectedProviderId,\r\n baseUrl,\r\n publishableApiKey,\r\n providerIds,\r\n onSuccess,\r\n onError,\r\n onPaid,\r\n } = props\r\n\r\n const paypalProviderId = providerIds?.paypal || DEFAULT_PAYPAL_PROVIDER_ID\r\n const paypalCardProviderId = providerIds?.paypalCard || DEFAULT_PAYPAL_CARD_PROVIDER_ID\r\n\r\n const shouldRender =\r\n selectedProviderId === paypalProviderId ||\r\n selectedProviderId === paypalCardProviderId\r\n\r\n const { config, loading, error } = usePayPalConfig({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled: shouldRender,\r\n })\r\n\r\n const handlePaid = useCallback(\r\n (captureResult: unknown) => {\r\n onPaid?.(captureResult)\r\n onSuccess?.(cartId)\r\n },\r\n [cartId, onPaid, onSuccess]\r\n )\r\n\r\n if (!shouldRender) return null\r\n\r\n if (loading) return <PayPalLoadingCard />\r\n\r\n if (error) return <PayPalErrorCard message={error} />\r\n\r\n if (!config) return null\r\n if (config.paypal_enabled === false) return null\r\n\r\n const isCardProvider = selectedProviderId === paypalCardProviderId\r\n if (selectedProviderId === paypalCardProviderId && config.card_enabled === false) return null\r\n\r\n const disableFunding = Array.isArray(config.disable_buttons)\r\n ? config.disable_buttons.join(\",\")\r\n : undefined\r\n\r\n return (\r\n <div key={selectedProviderId} style={{ display: \"grid\", gap: 12 }}>\r\n <PayPalCurrencyNotice config={config} />\r\n <PayPalProvider\r\n config={config}\r\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\r\n disableFunding={disableFunding}\r\n >\r\n {selectedProviderId === paypalCardProviderId ? (\r\n <PayPalAdvancedCard\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n ) : (\r\n <PayPalSmartButtons\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n )}\r\n </PayPalProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useCallback } from \"react\"\r\nimport { PayPalCurrencyNotice } from \"./PayPalCurrencyNotice\"\r\nimport { PayPalAdvancedCard } from \"./PayPalAdvancedCard\"\r\nimport { PayPalProvider } from \"./PayPalProvider\"\r\nimport { PayPalSmartButtons } from \"./PayPalSmartButtons\"\r\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\r\n\r\nexport const PAYPAL_WALLET_PROVIDER_ID = \"pp_paypal_paypal\" as const\r\nexport const PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\" as const\r\n\r\nconst PAYPAL_PROVIDER_IDS = [\r\n PAYPAL_WALLET_PROVIDER_ID,\r\n PAYPAL_CARD_PROVIDER_ID,\r\n] as const\r\n\r\nexport function isPayPalProviderId(id?: string | null): boolean {\r\n if (!id) return false\r\n return PAYPAL_PROVIDER_IDS.includes(id as (typeof PAYPAL_PROVIDER_IDS)[number])\r\n}\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_section_spin { to { transform: rotate(360deg) } }`\r\n\r\nfunction SessionInitCard() {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 12,\r\n padding: \"14px 16px\",\r\n marginTop: 8,\r\n background: \"#f9fafb\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: 10,\r\n }}\r\n >\r\n <style>{SPIN_STYLE}</style>\r\n <div\r\n style={{\r\n width: 20,\r\n height: 20,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_section_spin .7s linear infinite\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\r\n Setting up payment…\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction ConfigLoadingCard() {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 12,\r\n padding: \"14px 16px\",\r\n background: \"#f9fafb\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: 10,\r\n }}\r\n >\r\n <style>{SPIN_STYLE}</style>\r\n <div\r\n style={{\r\n width: 22,\r\n height: 22,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_section_spin .7s linear infinite\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <div>\r\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\r\n Connecting to PayPal…\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\r\n Setting up secure payment\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction ErrorCard({ message }: { message: string }) {\r\n return (\r\n <div\r\n style={{\r\n padding: \"12px 16px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 10,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {message}\r\n </div>\r\n )\r\n}\r\n\r\nexport type PayPalPaymentSectionProps = {\r\n cartId: string\r\n selectedProviderId: string | null | undefined\r\n baseUrl: string\r\n publishableApiKey?: string\r\n sessionLoading?: boolean\r\n onSuccess?: (cartId: string) => void\r\n onError?: (message: string) => void\r\n onPaid?: (result: unknown) => void\r\n}\r\n\r\nexport function PayPalPaymentSection({\r\n cartId,\r\n selectedProviderId,\r\n baseUrl,\r\n publishableApiKey,\r\n sessionLoading = false,\r\n onSuccess,\r\n onError,\r\n onPaid,\r\n}: PayPalPaymentSectionProps) {\r\n const shouldRender = isPayPalProviderId(selectedProviderId)\r\n\r\n const { config, loading, error } = usePayPalConfig({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled: shouldRender,\r\n })\r\n\r\n const handlePaid = useCallback(\r\n (captureResult: unknown) => {\r\n onPaid?.(captureResult)\r\n onSuccess?.(cartId)\r\n },\r\n [cartId, onPaid, onSuccess]\r\n )\r\n\r\n if (!shouldRender) return null\r\n if (sessionLoading) return <SessionInitCard />\r\n if (loading) return <ConfigLoadingCard />\r\n if (error) return <ErrorCard message={error} />\r\n if (!config) return null\r\n\r\n if (config.paypal_enabled === false && selectedProviderId === PAYPAL_WALLET_PROVIDER_ID) {\r\n return null\r\n }\r\n\r\n const isCardProvider = selectedProviderId === PAYPAL_CARD_PROVIDER_ID\r\n if (isCardProvider && config.card_enabled === false) return null\r\n\r\n const disableFunding = Array.isArray(config.disable_buttons)\r\n ? config.disable_buttons.join(\",\")\r\n : undefined\r\n\r\n return (\r\n <div key={selectedProviderId} style={{ display: \"grid\", gap: 12 }}>\r\n <PayPalCurrencyNotice config={config} />\r\n <PayPalProvider\r\n config={config}\r\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\r\n disableFunding={disableFunding}\r\n >\r\n {isCardProvider ? (\r\n <PayPalAdvancedCard\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n ) : (\r\n <PayPalSmartButtons\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n )}\r\n </PayPalProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\n\r\nimport { useEffect, useMemo, useRef, useState } from \"react\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\n\r\ntype Args = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId?: string\r\n enabled?: boolean\r\n}\r\n\r\ntype Result = {\r\n paypalEnabled: boolean\r\n paypalTitle: string\r\n cardEnabled: boolean\r\n cardTitle: string\r\n loading: boolean\r\n}\r\n\r\nconst _cache = new Map<string, { result: Result; at: number }>()\r\nconst CACHE_TTL = 5 * 60 * 1000\r\n\r\nfunction cacheKey(baseUrl: string, cartId?: string) {\r\n return `ppm::${baseUrl}::${cartId ?? \"\"}`\r\n}\r\n\r\nconst DEFAULT_RESULT: Result = {\r\n paypalEnabled: true,\r\n paypalTitle: \"PayPal\",\r\n cardEnabled: true,\r\n cardTitle: \"Credit or Debit Card\",\r\n loading: false,\r\n}\r\n\r\nexport function usePayPalPaymentMethods({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled = true,\r\n}: Args): Result {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const key = cacheKey(baseUrl, cartId)\r\n const hit = _cache.get(key)\r\n const seed = hit && Date.now() - hit.at < CACHE_TTL ? hit.result : null\r\n\r\n const [result, setResult] = useState<Result>(seed ?? { ...DEFAULT_RESULT, loading: enabled })\r\n const fetchIdRef = useRef(0)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setResult((prev) => ({ ...prev, loading: false }))\r\n return\r\n }\r\n\r\n const k = cacheKey(baseUrl, cartId)\r\n const cached = _cache.get(k)\r\n if (cached && Date.now() - cached.at < CACHE_TTL) {\r\n setResult(cached.result)\r\n return\r\n }\r\n\r\n const id = ++fetchIdRef.current\r\n let mounted = true\r\n const controller = new AbortController()\r\n\r\n setResult((prev) => ({ ...prev, loading: true }))\r\n\r\n ;(async () => {\r\n try {\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (!mounted || id !== fetchIdRef.current) return\r\n\r\n const next: Result = {\r\n paypalEnabled: cfg.paypal_enabled !== false,\r\n paypalTitle:\r\n typeof cfg.paypal_title === \"string\" && cfg.paypal_title\r\n ? cfg.paypal_title\r\n : \"PayPal\",\r\n cardEnabled: cfg.card_enabled !== false,\r\n cardTitle:\r\n typeof cfg.card_title === \"string\" && cfg.card_title\r\n ? cfg.card_title\r\n : \"Credit or Debit Card\",\r\n loading: false,\r\n }\r\n\r\n _cache.set(k, { result: next, at: Date.now() })\r\n setResult(next)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (!mounted || id !== fetchIdRef.current) return\r\n\r\n if (e?.message?.includes(\"403\") || e?.message?.includes(\"Forbidden\")) {\r\n const disabled: Result = {\r\n ...DEFAULT_RESULT,\r\n paypalEnabled: false,\r\n cardEnabled: false,\r\n loading: false,\r\n }\r\n setResult(disabled)\r\n return\r\n }\r\n\r\n setResult({ ...DEFAULT_RESULT, loading: false })\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, baseUrl, cartId, enabled])\r\n\r\n return result\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client/http.ts","../src/client/paypal.ts","../src/hooks/usePayPalConfig.ts","../src/components/PayPalProvider.tsx","../src/components/PayPalCurrencyNotice.tsx","../src/components/PayPalSmartButtons.tsx","../src/components/PayPalAdvancedCard.tsx","../src/adapters/MedusaNextPayPalAdapter.tsx","../src/components/PayPalPaymentSection.tsx","../src/hooks/usePayPalPaymentMethods.ts"],"sourcesContent":["export * from \"./client/types\"\r\nexport * from \"./client/paypal\"\r\nexport * from \"./hooks/usePayPalConfig\"\r\nexport * from \"./components/PayPalProvider\"\r\nexport * from \"./components/PayPalCurrencyNotice\"\r\nexport * from \"./components/PayPalSmartButtons\"\r\nexport * from \"./components/PayPalAdvancedCard\"\r\nexport * from \"./adapters/MedusaNextPayPalAdapter\"\r\nexport * from \"./components/PayPalPaymentSection\"\r\nexport * from \"./hooks/usePayPalPaymentMethods\"\r\n","export type HttpOptions = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n}\r\n\r\nfunction toHeaderRecord(headers?: RequestInit[\"headers\"]): Record<string, string> {\r\n if (!headers) {\r\n return {}\r\n }\r\n\r\n if (headers instanceof Headers) {\r\n return Object.fromEntries(headers.entries())\r\n }\r\n\r\n if (Array.isArray(headers)) {\r\n return Object.fromEntries(headers)\r\n }\r\n\r\n return { ...headers }\r\n}\r\n\r\nexport function createHttpClient(opts: HttpOptions) {\r\n const base = opts.baseUrl.replace(/\\/+$/, \"\")\r\n\r\n async function request<T>(path: string, init?: RequestInit): Promise<T> {\r\n const url = `${base}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`\r\n const headers: Record<string, string> = {\r\n Accept: \"application/json\",\r\n ...toHeaderRecord(init?.headers),\r\n }\r\n\r\n if (opts.publishableApiKey) {\r\n headers[\"x-publishable-api-key\"] = opts.publishableApiKey\r\n }\r\n\r\n const res = await fetch(url, { ...init, headers, credentials: \"include\" })\r\n const text = await res.text().catch(() => \"\")\r\n\r\n if (!res.ok) {\r\n if (res.status === 401) {\r\n throw new Error(\r\n \"[PayPal] Unauthorized (401) — check that your publishable API key is correct and set in NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY\"\r\n )\r\n }\r\n if (res.status === 403) {\r\n throw new Error(\r\n \"[PayPal] Forbidden (403) — this request is not allowed. Check your CORS and API key settings.\"\r\n )\r\n }\r\n throw new Error(\r\n text.slice(0, 500).replace(/<[^>]*>/g, \"\") || `Request failed (${res.status})`\r\n )\r\n }\r\n if (!text) {\r\n throw new Error(`[PayPal] Empty response body from ${path} (${res.status})`)\r\n }\r\n\r\n const contentType = res.headers.get(\"content-type\") || \"\"\r\n if (!contentType.includes(\"application/json\")) {\r\n throw new Error(\r\n `[PayPal] Unexpected non-JSON response (${contentType}) from ${path}`\r\n )\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T\r\n } catch {\r\n throw new Error(`[PayPal] Failed to parse JSON response from ${path}`)\r\n }\r\n }\r\n\r\n return { request }\r\n}\r\n","import type { PayPalConfig, PayPalSettingsResponse } from \"./types\"\r\nimport { createHttpClient, type HttpOptions } from \"./http\"\r\n\r\nexport async function markPaymentComplete(\r\n baseUrl: string,\r\n cartId: string,\r\n publishableApiKey?: string\r\n): Promise<void> {\r\n try {\r\n await fetch(`${baseUrl.replace(/\\/$/, \"\")}/store/paypal-complete`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n ...(publishableApiKey ? { \"x-publishable-api-key\": publishableApiKey } : {}),\r\n },\r\n body: JSON.stringify({ cart_id: cartId }),\r\n credentials: \"include\",\r\n })\r\n } catch (e) {\r\n console.warn(\"[PayPal] paypal-complete call failed:\", e)\r\n }\r\n}\r\n\r\nexport function createPayPalStoreApi(opts: HttpOptions) {\r\n const http = createHttpClient(opts)\r\n\r\n return {\r\n getConfig(cartId?: string, signal?: AbortSignal) {\r\n const q = cartId ? `?cart_id=${encodeURIComponent(cartId)}` : \"\"\r\n return http.request<PayPalConfig>(`/store/paypal/config${q}`, { signal })\r\n },\r\n\r\n getSettings() {\r\n return http.request<PayPalSettingsResponse>(`/store/paypal/settings`)\r\n },\r\n\r\n createOrder(cartId: string, isCardPayment = false) {\r\n return http.request<{ id: string }>(`/store/paypal/create-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, is_card_payment: isCardPayment }),\r\n })\r\n },\r\n\r\n captureOrder(cartId: string, orderId: string) {\r\n return http.request<Record<string, unknown>>(`/store/paypal/capture-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, order_id: orderId }),\r\n })\r\n },\r\n }\r\n}\r\n","\"use client\"\r\n\r\nimport { useEffect, useMemo, useRef, useState } from \"react\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\ntype Args = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId?: string\r\n enabled?: boolean\r\n}\r\n\r\nconst _cache = new Map<string, { config: PayPalConfig; at: number }>()\r\nconst CACHE_TTL = 5 * 60 * 1000\r\n\r\nfunction cacheKey(baseUrl: string, cartId?: string) {\r\n return `${baseUrl}::${cartId ?? \"\"}`\r\n}\r\n\r\nexport function usePayPalConfig({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled = true,\r\n}: Args) {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const key = cacheKey(baseUrl, cartId)\r\n const hit = _cache.get(key)\r\n const seedConfig = hit && Date.now() - hit.at < CACHE_TTL ? hit.config : null\r\n\r\n const [config, setConfig] = useState<PayPalConfig | null>(seedConfig)\r\n const [loading, setLoading] = useState<boolean>(seedConfig === null && enabled)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n const fetchIdRef = useRef(0)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setLoading(false)\r\n setError(null)\r\n return\r\n }\r\n\r\n const k = cacheKey(baseUrl, cartId)\r\n const cached = _cache.get(k)\r\n if (cached && Date.now() - cached.at < CACHE_TTL) {\r\n setConfig(cached.config)\r\n setLoading(false)\r\n setError(null)\r\n return\r\n }\r\n\r\n const id = ++fetchIdRef.current\r\n let mounted = true\r\n const controller = new AbortController()\r\n\r\n setLoading(true)\r\n setError(null)\r\n\r\n ;(async () => {\r\n try {\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (!mounted || id !== fetchIdRef.current) return\r\n _cache.set(k, { config: cfg, at: Date.now() })\r\n setConfig(cfg)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (!mounted || id !== fetchIdRef.current) return\r\n setError(e?.message || \"Failed to load PayPal config\")\r\n } finally {\r\n if (mounted && id === fetchIdRef.current) setLoading(false)\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, baseUrl, cartId, enabled])\r\n\r\n return { config, loading, error }\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo } from \"react\"\r\nimport { PayPalScriptProvider } from \"@paypal/react-paypal-js\"\r\nimport type { ReactPayPalScriptOptions } from \"@paypal/react-paypal-js\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nconst BN_CODE = \"MBJTechnolabs_SI_SPB\"\r\n\r\nexport function PayPalProvider(props: {\r\n config: PayPalConfig\r\n intent?: \"capture\" | \"authorize\"\r\n disableFunding?: string\r\n children: React.ReactNode\r\n}) {\r\n const { config, intent = \"capture\", disableFunding, children } = props\r\n\r\n const options = useMemo((): ReactPayPalScriptOptions => {\r\n return {\r\n clientId: config.client_id,\r\n currency: config.currency,\r\n intent,\r\n components: config.client_token ? \"buttons,card-fields\" : \"buttons\",\r\n \"data-client-token\": config.client_token || undefined,\r\n \"disable-funding\": disableFunding,\r\n \"data-partner-attribution-id\": BN_CODE,\r\n }\r\n }, [config, intent, disableFunding])\r\n\r\n return (\r\n <PayPalScriptProvider\r\n key={`${options.clientId}-${options[\"data-client-token\"] ?? \"no-token\"}`}\r\n options={options}\r\n >\r\n {children}\r\n </PayPalScriptProvider>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React from \"react\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nexport function PayPalCurrencyNotice({ config }: { config: PayPalConfig }) {\r\n if (config.currency_supported) return null\r\n\r\n return (\r\n <div style={{ padding: 12, border: \"1px solid #ddd\", borderRadius: 10 }}>\r\n <div style={{ fontWeight: 600, marginBottom: 6 }}>PayPal currency issue</div>\r\n <ul style={{ margin: 0, paddingLeft: 18 }}>\r\n {(config.currency_errors || []).map((e) => (\r\n <li key={e}>{e}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\nimport React, { useMemo, useState } from \"react\"\r\nimport { PayPalButtons } from \"@paypal/react-paypal-js\"\r\nimport { createPayPalStoreApi, markPaymentComplete } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst BUTTON_WIDTH_MAP: Record<string, string> = {\r\n small: \"300px\",\r\n medium: \"400px\",\r\n large: \"500px\",\r\n responsive: \"100%\",\r\n}\r\n\r\nexport function PayPalSmartButtons(props: {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId: string\r\n config: PayPalConfig\r\n onPaid?: (result: Record<string, unknown>) => void\r\n onError?: (message: string) => void\r\n}) {\r\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const [processing, setProcessing] = useState(false)\r\n\r\n if (!config.currency_supported) return null\r\n\r\n const containerWidth = BUTTON_WIDTH_MAP[config.button_width ?? \"responsive\"] ?? \"100%\"\r\n\r\n return (\r\n <div style={{ width: containerWidth, position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {processing && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 10,\r\n background: \"rgba(255,255,255,0.90)\",\r\n borderRadius: 8,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 10,\r\n minHeight: 60,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 28,\r\n height: 28,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 13, color: \"#374151\", fontWeight: 500 }}>\r\n Processing your payment…\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 4 }}>\r\n Please do not close or refresh this page\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {config.environment === \"sandbox\" && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 8,\r\n padding: \"10px 14px\",\r\n background: \"#eff6ff\",\r\n border: \"1px solid #bfdbfe\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#1e40af\",\r\n lineHeight: 1.5,\r\n marginBottom: 10,\r\n }}\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"#1e40af\"\r\n strokeWidth=\"2\"\r\n strokeLinecap=\"round\"\r\n style={{ flexShrink: 0, marginTop: 1 }}\r\n >\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <path d=\"M12 8v4M12 16h.01\" />\r\n </svg>\r\n <span>\r\n Sandbox mode — you will not be charged. Use your PayPal sandbox\r\n account to complete the payment.\r\n </span>\r\n </div>\r\n )}\r\n\r\n <PayPalButtons\r\n style={{\r\n layout: \"vertical\",\r\n color: config.button_color,\r\n shape: config.button_shape,\r\n label: config.button_label,\r\n height: config.button_height,\r\n }}\r\n createOrder={async () => {\r\n setError(null)\r\n const r = await api.createOrder(cartId)\r\n return r.id\r\n }}\r\n onApprove={async (data: { orderID?: string }) => {\r\n try {\r\n setProcessing(true)\r\n setError(null)\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\r\n\r\n await markPaymentComplete(baseUrl, cartId, publishableApiKey)\r\n\r\n onPaid?.(result)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : \"Payment capture failed\"\r\n setError(msg)\r\n onError?.(msg)\r\n } finally {\r\n setProcessing(false)\r\n }\r\n }}\r\n onCancel={() => {\r\n setProcessing(false)\r\n }}\r\n onError={(err: Error | { message?: string }) => {\r\n setProcessing(false)\r\n const msg = err instanceof Error ? err.message : err?.message || \"PayPal error\"\r\n setError(msg)\r\n onError?.(msg)\r\n }}\r\n />\r\n\r\n {error ? (\r\n <div\r\n style={{\r\n marginTop: 10,\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 8,\r\n padding: \"10px 14px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n <span style={{ flexShrink: 0, fontSize: 15 }}>⚠️</span>\r\n <span>{error}</span>\r\n </div>\r\n ) : null}\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo, useState } from \"react\"\r\nimport {\r\n PayPalCardFieldsProvider,\r\n PayPalNumberField,\r\n PayPalExpiryField,\r\n PayPalCVVField,\r\n usePayPalCardFields,\r\n} from \"@paypal/react-paypal-js\"\r\n\r\nimport { createPayPalStoreApi, markPaymentComplete } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst cardStyle = {\r\n input: {\r\n \"font-size\": \"15px\",\r\n \"font-family\": \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\r\n \"font-weight\": \"400\",\r\n color: \"#111827\",\r\n padding: \"0 14px\",\r\n height: \"42px\",\r\n \"border-radius\": \"8px\",\r\n border: \"1px solid #d1d5db\",\r\n background: \"#ffffff\",\r\n \"box-shadow\": \"none\",\r\n transition: \"border-color 0.15s ease\",\r\n },\r\n \"::placeholder\": {\r\n color: \"#9ca3af\",\r\n },\r\n \".invalid\": {\r\n color: \"#dc2626\",\r\n border: \"1px solid #fca5a5\",\r\n background: \"#fff7f7\",\r\n \"box-shadow\": \"none\",\r\n },\r\n \".valid\": {\r\n color: \"#111827\",\r\n border: \"1px solid #d1d5db\",\r\n \"box-shadow\": \"none\",\r\n },\r\n \"input:focus\": {\r\n outline: \"none\",\r\n border: \"1px solid #2563eb\",\r\n \"box-shadow\": \"0 0 0 3px rgba(37,99,235,0.12)\",\r\n },\r\n}\r\n\r\nconst labelStyle: React.CSSProperties = {\r\n display: \"block\",\r\n fontSize: 13,\r\n fontWeight: 500,\r\n color: \"#374151\",\r\n marginBottom: 6,\r\n letterSpacing: \"0.01em\",\r\n}\r\n\r\nfunction SubmitButton({\r\n disabled,\r\n label,\r\n onSubmit,\r\n}: {\r\n disabled: boolean\r\n label: string\r\n onSubmit: () => void\r\n}) {\r\n const { cardFieldsForm } = usePayPalCardFields()\r\n const isDisabled = disabled || !cardFieldsForm\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n disabled={isDisabled}\r\n onClick={() => {\r\n onSubmit()\r\n cardFieldsForm?.submit()\r\n }}\r\n style={{\r\n width: \"100%\",\r\n height: 48,\r\n padding: \"0 20px\",\r\n borderRadius: 8,\r\n border: \"none\",\r\n background: isDisabled\r\n ? \"#e5e7eb\"\r\n : \"linear-gradient(180deg, #2563eb 0%, #1d4ed8 100%)\",\r\n color: isDisabled ? \"#9ca3af\" : \"#ffffff\",\r\n fontSize: 15,\r\n fontWeight: 600,\r\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\r\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\r\n letterSpacing: \"0.01em\",\r\n boxShadow: isDisabled\r\n ? \"none\"\r\n : \"0 1px 3px rgba(37,99,235,0.3), 0 1px 2px rgba(0,0,0,0.06)\",\r\n transition: \"all 0.15s ease\",\r\n }}\r\n onMouseEnter={(e) => {\r\n if (!isDisabled) {\r\n ;(e.target as HTMLButtonElement).style.background =\r\n \"linear-gradient(180deg, #1d4ed8 0%, #1e40af 100%)\"\r\n ;(e.target as HTMLButtonElement).style.boxShadow =\r\n \"0 4px 6px rgba(37,99,235,0.35), 0 2px 4px rgba(0,0,0,0.06)\"\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (!isDisabled) {\r\n ;(e.target as HTMLButtonElement).style.background =\r\n \"linear-gradient(180deg, #2563eb 0%, #1d4ed8 100%)\"\r\n ;(e.target as HTMLButtonElement).style.boxShadow =\r\n \"0 1px 3px rgba(37,99,235,0.3), 0 1px 2px rgba(0,0,0,0.06)\"\r\n }\r\n }}\r\n >\r\n {label}\r\n </button>\r\n )\r\n}\r\n\r\nexport function PayPalAdvancedCard(props: {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId: string\r\n config: PayPalConfig\r\n onPaid?: (result: Record<string, unknown>) => void\r\n onError?: (message: string) => void\r\n}) {\r\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\r\n\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const [submitting, setSubmitting] = useState(false)\r\n\r\n if (!config.currency_supported) return null\r\n\r\n if (!config.client_token) {\r\n return (\r\n <div\r\n style={{\r\n padding: \"12px 16px\",\r\n background: \"#fefce8\",\r\n border: \"1px solid #fde68a\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#92400e\",\r\n }}\r\n >\r\n Card fields unavailable — missing client token from backend.\r\n </div>\r\n )\r\n }\r\n\r\n const isSandbox = config.environment === \"sandbox\"\r\n\r\n return (\r\n <div style={{ position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {submitting && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 20,\r\n background: \"rgba(255,255,255,0.92)\",\r\n borderRadius: 12,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 14,\r\n minHeight: 180,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 36,\r\n height: 36,\r\n borderRadius: \"50%\",\r\n border: \"3px solid #dbeafe\",\r\n borderTopColor: \"#2563eb\",\r\n animation: \"_pp_spin .75s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 15, fontWeight: 600, color: \"#111827\" }}>\r\n Processing your payment…\r\n </div>\r\n <div style={{ fontSize: 13, color: \"#6b7280\", marginTop: 4 }}>\r\n Please do not close or refresh this page\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <PayPalCardFieldsProvider\r\n style={cardStyle}\r\n createOrder={async () => {\r\n setError(null)\r\n const r = await api.createOrder(cartId, true)\r\n return r.id\r\n }}\r\n onApprove={async (data: { orderID?: string }) => {\r\n try {\r\n setError(null)\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\r\n\r\n await markPaymentComplete(baseUrl, cartId, publishableApiKey)\r\n\r\n onPaid?.(result)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : \"Card payment failed\"\r\n setError(msg)\r\n onError?.(msg)\r\n } finally {\r\n setSubmitting(false)\r\n }\r\n }}\r\n onCancel={() => {\r\n setSubmitting(false)\r\n }}\r\n onError={(e: Error | { message?: string }) => {\r\n const msg = e instanceof Error ? e.message : e?.message || \"CardFields error\"\r\n setError(msg)\r\n onError?.(msg)\r\n setSubmitting(false)\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: 16,\r\n width: \"100%\",\r\n }}\r\n >\r\n {isSandbox && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 10,\r\n padding: \"10px 14px\",\r\n background: \"#eff6ff\",\r\n border: \"1px solid #bfdbfe\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#1e40af\",\r\n lineHeight: 1.55,\r\n }}\r\n >\r\n <span style={{ fontSize: 15, flexShrink: 0, marginTop: 1 }}>🧪</span>\r\n <span>\r\n Sandbox mode — use test card{\" \"}\r\n <strong style={{ fontFamily: \"monospace\", letterSpacing: \"0.05em\" }}>\r\n 4111 1111 1111 1111\r\n </strong>{\" \"}\r\n with any future date and any CVV.\r\n </span>\r\n </div>\r\n )}\r\n\r\n <div>\r\n <label style={labelStyle}>Card number</label>\r\n <PayPalNumberField />\r\n </div>\r\n\r\n <div\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"1fr 1fr\",\r\n gap: 16,\r\n }}\r\n >\r\n <div>\r\n <label style={labelStyle}>Expiration date</label>\r\n <PayPalExpiryField />\r\n </div>\r\n <div>\r\n <label style={labelStyle}>Security code</label>\r\n <PayPalCVVField />\r\n </div>\r\n </div>\r\n\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 6,\r\n fontSize: 12,\r\n color: \"#6b7280\",\r\n }}\r\n >\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"#10b981\"\r\n strokeWidth=\"2.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\r\n </svg>\r\n <span>Your payment is secured with 256-bit SSL encryption</span>\r\n </div>\r\n\r\n <SubmitButton\r\n disabled={submitting}\r\n label={submitting ? \"Processing…\" : \"Pay by Card\"}\r\n onSubmit={() => {\r\n setError(null)\r\n setSubmitting(true)\r\n }}\r\n />\r\n\r\n {error && (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"flex-start\",\r\n gap: 10,\r\n padding: \"10px 14px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 8,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n lineHeight: 1.5,\r\n }}\r\n >\r\n <span style={{ flexShrink: 0, marginTop: 1 }}>⚠️</span>\r\n <span>{error}</span>\r\n </div>\r\n )}\r\n </div>\r\n </PayPalCardFieldsProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useCallback } from \"react\"\r\nimport { PayPalCurrencyNotice } from \"../components/PayPalCurrencyNotice\"\r\nimport { PayPalAdvancedCard } from \"../components/PayPalAdvancedCard\"\r\nimport { PayPalProvider } from \"../components/PayPalProvider\"\r\nimport { PayPalSmartButtons } from \"../components/PayPalSmartButtons\"\r\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\r\n\r\nconst DEFAULT_PAYPAL_PROVIDER_ID = \"pp_paypal_paypal\"\r\nconst DEFAULT_PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\"\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nfunction PayPalLoadingCard() {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 12,\r\n padding: \"14px 16px\",\r\n background: \"#f9fafb\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: 10,\r\n }}\r\n >\r\n <style>{SPIN_STYLE}</style>\r\n <div\r\n style={{\r\n width: 22,\r\n height: 22,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <div>\r\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\r\n Connecting to PayPal…\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\r\n Setting up secure payment\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction PayPalErrorCard({ message }: { message: string }) {\r\n return (\r\n <div\r\n style={{\r\n padding: \"12px 16px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 10,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {message}\r\n </div>\r\n )\r\n}\r\n\r\nexport type MedusaNextPayPalAdapterProps = {\r\n cartId: string\r\n selectedProviderId: string | null | undefined\r\n baseUrl: string\r\n publishableApiKey?: string\r\n providerIds?: {\r\n paypal?: string\r\n paypalCard?: string\r\n }\r\n onSuccess?: (cartId: string) => void\r\n onError?: (message: string) => void\r\n onPaid?: (result: unknown) => void\r\n}\r\n\r\nexport function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps) {\r\n const {\r\n cartId,\r\n selectedProviderId,\r\n baseUrl,\r\n publishableApiKey,\r\n providerIds,\r\n onSuccess,\r\n onError,\r\n onPaid,\r\n } = props\r\n\r\n const paypalProviderId = providerIds?.paypal || DEFAULT_PAYPAL_PROVIDER_ID\r\n const paypalCardProviderId = providerIds?.paypalCard || DEFAULT_PAYPAL_CARD_PROVIDER_ID\r\n\r\n const shouldRender =\r\n selectedProviderId === paypalProviderId ||\r\n selectedProviderId === paypalCardProviderId\r\n\r\n const { config, loading, error } = usePayPalConfig({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled: shouldRender,\r\n })\r\n\r\n const handlePaid = useCallback(\r\n (captureResult: unknown) => {\r\n onPaid?.(captureResult)\r\n onSuccess?.(cartId)\r\n },\r\n [cartId, onPaid, onSuccess]\r\n )\r\n\r\n if (!shouldRender) return null\r\n\r\n if (loading) return <PayPalLoadingCard />\r\n\r\n if (error) return <PayPalErrorCard message={error} />\r\n\r\n if (!config) return null\r\n\r\n const isCardProvider = selectedProviderId === paypalCardProviderId\r\n if (config.paypal_enabled === false && !isCardProvider) return null\r\n if (isCardProvider && config.card_enabled === false) return null\r\n\r\n const disableFunding = Array.isArray(config.disable_buttons)\r\n ? config.disable_buttons.join(\",\")\r\n : undefined\r\n\r\n return (\r\n <div key={selectedProviderId} style={{ display: \"grid\", gap: 12 }}>\r\n <PayPalCurrencyNotice config={config} />\r\n <PayPalProvider\r\n config={config}\r\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\r\n disableFunding={disableFunding}\r\n >\r\n {isCardProvider ? (\r\n <PayPalAdvancedCard\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n ) : (\r\n <PayPalSmartButtons\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n )}\r\n </PayPalProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useCallback } from \"react\"\r\nimport { PayPalCurrencyNotice } from \"./PayPalCurrencyNotice\"\r\nimport { PayPalAdvancedCard } from \"./PayPalAdvancedCard\"\r\nimport { PayPalProvider } from \"./PayPalProvider\"\r\nimport { PayPalSmartButtons } from \"./PayPalSmartButtons\"\r\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\r\n\r\nexport const PAYPAL_WALLET_PROVIDER_ID = \"pp_paypal_paypal\" as const\r\nexport const PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\" as const\r\n\r\nconst PAYPAL_PROVIDER_IDS = [\r\n PAYPAL_WALLET_PROVIDER_ID,\r\n PAYPAL_CARD_PROVIDER_ID,\r\n] as const\r\n\r\nexport function isPayPalProviderId(id?: string | null): boolean {\r\n if (!id) return false\r\n return PAYPAL_PROVIDER_IDS.includes(id as (typeof PAYPAL_PROVIDER_IDS)[number])\r\n}\r\n\r\nconst SPIN_STYLE = `@keyframes _pp_section_spin { to { transform: rotate(360deg) } }`\r\n\r\nfunction SessionInitCard() {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 12,\r\n padding: \"14px 16px\",\r\n marginTop: 8,\r\n background: \"#f9fafb\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: 10,\r\n }}\r\n >\r\n <style>{SPIN_STYLE}</style>\r\n <div\r\n style={{\r\n width: 20,\r\n height: 20,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_section_spin .7s linear infinite\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\r\n Setting up payment…\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction ConfigLoadingCard() {\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 12,\r\n padding: \"14px 16px\",\r\n background: \"#f9fafb\",\r\n border: \"1px solid #e5e7eb\",\r\n borderRadius: 10,\r\n }}\r\n >\r\n <style>{SPIN_STYLE}</style>\r\n <div\r\n style={{\r\n width: 22,\r\n height: 22,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_section_spin .7s linear infinite\",\r\n flexShrink: 0,\r\n }}\r\n />\r\n <div>\r\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\r\n Connecting to PayPal…\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\r\n Setting up secure payment\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nfunction ErrorCard({ message }: { message: string }) {\r\n return (\r\n <div\r\n style={{\r\n padding: \"12px 16px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 10,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {message}\r\n </div>\r\n )\r\n}\r\n\r\nexport type PayPalPaymentSectionProps = {\r\n cartId: string\r\n selectedProviderId: string | null | undefined\r\n baseUrl: string\r\n publishableApiKey?: string\r\n sessionLoading?: boolean\r\n onSuccess?: (cartId: string) => void\r\n onError?: (message: string) => void\r\n onPaid?: (result: unknown) => void\r\n}\r\n\r\nexport function PayPalPaymentSection({\r\n cartId,\r\n selectedProviderId,\r\n baseUrl,\r\n publishableApiKey,\r\n sessionLoading = false,\r\n onSuccess,\r\n onError,\r\n onPaid,\r\n}: PayPalPaymentSectionProps) {\r\n const shouldRender = isPayPalProviderId(selectedProviderId)\r\n\r\n const { config, loading, error } = usePayPalConfig({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled: shouldRender,\r\n })\r\n\r\n const handlePaid = useCallback(\r\n (captureResult: unknown) => {\r\n onPaid?.(captureResult)\r\n onSuccess?.(cartId)\r\n },\r\n [cartId, onPaid, onSuccess]\r\n )\r\n\r\n if (!shouldRender) return null\r\n if (sessionLoading) return <SessionInitCard />\r\n if (loading) return <ConfigLoadingCard />\r\n if (error) return <ErrorCard message={error} />\r\n if (!config) return null\r\n\r\n if (config.paypal_enabled === false && selectedProviderId === PAYPAL_WALLET_PROVIDER_ID) {\r\n return null\r\n }\r\n\r\n const isCardProvider = selectedProviderId === PAYPAL_CARD_PROVIDER_ID\r\n if (isCardProvider && config.card_enabled === false) return null\r\n\r\n const disableFunding = Array.isArray(config.disable_buttons)\r\n ? config.disable_buttons.join(\",\")\r\n : undefined\r\n\r\n return (\r\n <div key={selectedProviderId} style={{ display: \"grid\", gap: 12 }}>\r\n <PayPalCurrencyNotice config={config} />\r\n <PayPalProvider\r\n config={config}\r\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\r\n disableFunding={disableFunding}\r\n >\r\n {isCardProvider ? (\r\n <PayPalAdvancedCard\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n ) : (\r\n <PayPalSmartButtons\r\n baseUrl={baseUrl}\r\n publishableApiKey={publishableApiKey}\r\n cartId={cartId}\r\n config={config}\r\n onPaid={handlePaid}\r\n onError={onError}\r\n />\r\n )}\r\n </PayPalProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\n\r\nimport { useEffect, useMemo, useRef, useState } from \"react\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\n\r\ntype Args = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId?: string\r\n enabled?: boolean\r\n}\r\n\r\ntype Result = {\r\n paypalEnabled: boolean\r\n paypalTitle: string\r\n cardEnabled: boolean\r\n cardTitle: string\r\n loading: boolean\r\n}\r\n\r\nconst _cache = new Map<string, { result: Result; at: number }>()\r\nconst CACHE_TTL = 5 * 60 * 1000\r\n\r\nfunction cacheKey(baseUrl: string, cartId?: string) {\r\n return `ppm::${baseUrl}::${cartId ?? \"\"}`\r\n}\r\n\r\nconst DEFAULT_RESULT: Result = {\r\n paypalEnabled: true,\r\n paypalTitle: \"PayPal\",\r\n cardEnabled: true,\r\n cardTitle: \"Credit or Debit Card\",\r\n loading: false,\r\n}\r\n\r\nexport function usePayPalPaymentMethods({\r\n baseUrl,\r\n publishableApiKey,\r\n cartId,\r\n enabled = true,\r\n}: Args): Result {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const key = cacheKey(baseUrl, cartId)\r\n const hit = _cache.get(key)\r\n const seed = hit && Date.now() - hit.at < CACHE_TTL ? hit.result : null\r\n\r\n const [result, setResult] = useState<Result>(seed ?? { ...DEFAULT_RESULT, loading: enabled })\r\n const fetchIdRef = useRef(0)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setResult((prev) => ({ ...prev, loading: false }))\r\n return\r\n }\r\n\r\n const k = cacheKey(baseUrl, cartId)\r\n const cached = _cache.get(k)\r\n if (cached && Date.now() - cached.at < CACHE_TTL) {\r\n setResult(cached.result)\r\n return\r\n }\r\n\r\n const id = ++fetchIdRef.current\r\n let mounted = true\r\n const controller = new AbortController()\r\n\r\n setResult((prev) => ({ ...prev, loading: true }))\r\n\r\n ;(async () => {\r\n try {\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (!mounted || id !== fetchIdRef.current) return\r\n\r\n const next: Result = {\r\n paypalEnabled: cfg.paypal_enabled !== false,\r\n paypalTitle:\r\n typeof cfg.paypal_title === \"string\" && cfg.paypal_title\r\n ? cfg.paypal_title\r\n : \"PayPal\",\r\n cardEnabled: cfg.card_enabled !== false,\r\n cardTitle:\r\n typeof cfg.card_title === \"string\" && cfg.card_title\r\n ? cfg.card_title\r\n : \"Credit or Debit Card\",\r\n loading: false,\r\n }\r\n\r\n _cache.set(k, { result: next, at: Date.now() })\r\n setResult(next)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (!mounted || id !== fetchIdRef.current) return\r\n\r\n if (e?.message?.includes(\"403\") || e?.message?.includes(\"Forbidden\")) {\r\n const disabled: Result = {\r\n ...DEFAULT_RESULT,\r\n paypalEnabled: false,\r\n cardEnabled: false,\r\n loading: false,\r\n }\r\n setResult(disabled)\r\n return\r\n }\r\n\r\n setResult({ ...DEFAULT_RESULT, loading: false })\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, baseUrl, cartId, enabled])\r\n\r\n return result\r\n}\r\n"],"mappings":"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","names":["import_react","import_jsx_runtime","import_react","import_react_paypal_js","import_jsx_runtime","import_react","import_react_paypal_js","import_jsx_runtime","SPIN_STYLE","import_react","import_jsx_runtime","SPIN_STYLE","import_react","import_jsx_runtime","SPIN_STYLE","import_react","_cache","CACHE_TTL","cacheKey"]}
package/dist/index.d.cts CHANGED
@@ -1,136 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
3
-
4
- type PayPalConfig = {
5
- environment: "sandbox" | "live";
6
- client_id: string;
7
- currency: string;
8
- currency_supported: boolean;
9
- currency_errors: string[];
10
- supported_currencies: string[];
11
- client_token?: string;
12
- intent?: "capture" | "authorize";
13
- paypal_enabled?: boolean;
14
- paypal_title?: string;
15
- card_enabled?: boolean;
16
- card_title?: string;
17
- card_three_ds?: "sli" | "when_required" | "always";
18
- button_color?: "gold" | "blue" | "silver" | "black" | "white";
19
- button_shape?: "rect" | "pill" | "sharp";
20
- button_width?: string;
21
- button_height?: number;
22
- button_label?: "paypal" | "checkout" | "buynow" | "pay" | "installment";
23
- disable_buttons?: string[];
24
- };
25
- type PayPalSettingsResponse = {
26
- data?: {
27
- api_details?: {
28
- currency_code?: string;
29
- };
30
- paypal_settings?: Record<string, unknown>;
31
- onboarding_config?: Record<string, unknown>;
32
- };
33
- [key: string]: unknown;
34
- };
35
-
36
- type HttpOptions = {
37
- baseUrl: string;
38
- publishableApiKey?: string;
39
- };
40
-
41
- declare function createPayPalStoreApi(opts: HttpOptions): {
42
- getConfig(cartId?: string, signal?: AbortSignal): Promise<PayPalConfig>;
43
- getSettings(): Promise<PayPalSettingsResponse>;
44
- createOrder(cartId: string, isCardPayment?: boolean): Promise<{
45
- id: string;
46
- }>;
47
- captureOrder(cartId: string, orderId: string): Promise<Record<string, unknown>>;
48
- };
49
-
50
- type Args$1 = {
51
- baseUrl: string;
52
- publishableApiKey?: string;
53
- cartId?: string;
54
- enabled?: boolean;
55
- };
56
- declare function usePayPalConfig({ baseUrl, publishableApiKey, cartId, enabled, }: Args$1): {
57
- config: PayPalConfig | null;
58
- loading: boolean;
59
- error: string | null;
60
- };
61
-
62
- declare function PayPalProvider(props: {
63
- config: PayPalConfig;
64
- intent?: "capture" | "authorize";
65
- disableFunding?: string;
66
- children: React.ReactNode;
67
- }): react_jsx_runtime.JSX.Element;
68
-
69
- declare function PayPalCurrencyNotice({ config }: {
70
- config: PayPalConfig;
71
- }): react_jsx_runtime.JSX.Element | null;
72
-
73
- declare function PayPalSmartButtons(props: {
74
- baseUrl: string;
75
- publishableApiKey?: string;
76
- cartId: string;
77
- config: PayPalConfig;
78
- onPaid?: (result: Record<string, unknown>) => void;
79
- onError?: (message: string) => void;
80
- }): react_jsx_runtime.JSX.Element | null;
81
-
82
- declare function PayPalAdvancedCard(props: {
83
- baseUrl: string;
84
- publishableApiKey?: string;
85
- cartId: string;
86
- config: PayPalConfig;
87
- onPaid?: (result: Record<string, unknown>) => void;
88
- onError?: (message: string) => void;
89
- }): react_jsx_runtime.JSX.Element | null;
90
-
91
- type MedusaNextPayPalAdapterProps = {
92
- cartId: string;
93
- selectedProviderId: string | null | undefined;
94
- baseUrl: string;
95
- publishableApiKey?: string;
96
- providerIds?: {
97
- paypal?: string;
98
- paypalCard?: string;
99
- };
100
- onSuccess?: (cartId: string) => void;
101
- onError?: (message: string) => void;
102
- onPaid?: (result: unknown) => void;
103
- };
104
- declare function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps): react_jsx_runtime.JSX.Element | null;
105
-
106
- declare const PAYPAL_WALLET_PROVIDER_ID: "pp_paypal_paypal";
107
- declare const PAYPAL_CARD_PROVIDER_ID: "pp_paypal_card_paypal_card";
108
- declare function isPayPalProviderId(id?: string | null): boolean;
109
- type PayPalPaymentSectionProps = {
110
- cartId: string;
111
- selectedProviderId: string | null | undefined;
112
- baseUrl: string;
113
- publishableApiKey?: string;
114
- sessionLoading?: boolean;
115
- onSuccess?: (cartId: string) => void;
116
- onError?: (message: string) => void;
117
- onPaid?: (result: unknown) => void;
118
- };
119
- declare function PayPalPaymentSection({ cartId, selectedProviderId, baseUrl, publishableApiKey, sessionLoading, onSuccess, onError, onPaid, }: PayPalPaymentSectionProps): react_jsx_runtime.JSX.Element | null;
120
-
121
- type Args = {
122
- baseUrl: string;
123
- publishableApiKey?: string;
124
- cartId?: string;
125
- enabled?: boolean;
126
- };
127
- type Result = {
128
- paypalEnabled: boolean;
129
- paypalTitle: string;
130
- cardEnabled: boolean;
131
- cardTitle: string;
132
- loading: boolean;
133
- };
134
- declare function usePayPalPaymentMethods({ baseUrl, publishableApiKey, cartId, enabled, }: Args): Result;
135
-
136
- export { MedusaNextPayPalAdapter, type MedusaNextPayPalAdapterProps, PAYPAL_CARD_PROVIDER_ID, PAYPAL_WALLET_PROVIDER_ID, PayPalAdvancedCard, type PayPalConfig, PayPalCurrencyNotice, PayPalPaymentSection, type PayPalPaymentSectionProps, PayPalProvider, type PayPalSettingsResponse, PayPalSmartButtons, createPayPalStoreApi, isPayPalProviderId, usePayPalConfig, usePayPalPaymentMethods };
1
+ export * from './client/types';
2
+ export * from './client/paypal';
3
+ export * from './hooks/usePayPalConfig';
4
+ export * from './components/PayPalProvider';
5
+ export * from './components/PayPalCurrencyNotice';
6
+ export * from './components/PayPalSmartButtons';
7
+ export * from './components/PayPalAdvancedCard';
8
+ export * from './adapters/MedusaNextPayPalAdapter';
9
+ export * from './components/PayPalPaymentSection';
10
+ export * from './hooks/usePayPalPaymentMethods';
package/dist/index.d.ts CHANGED
@@ -1,136 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
3
-
4
- type PayPalConfig = {
5
- environment: "sandbox" | "live";
6
- client_id: string;
7
- currency: string;
8
- currency_supported: boolean;
9
- currency_errors: string[];
10
- supported_currencies: string[];
11
- client_token?: string;
12
- intent?: "capture" | "authorize";
13
- paypal_enabled?: boolean;
14
- paypal_title?: string;
15
- card_enabled?: boolean;
16
- card_title?: string;
17
- card_three_ds?: "sli" | "when_required" | "always";
18
- button_color?: "gold" | "blue" | "silver" | "black" | "white";
19
- button_shape?: "rect" | "pill" | "sharp";
20
- button_width?: string;
21
- button_height?: number;
22
- button_label?: "paypal" | "checkout" | "buynow" | "pay" | "installment";
23
- disable_buttons?: string[];
24
- };
25
- type PayPalSettingsResponse = {
26
- data?: {
27
- api_details?: {
28
- currency_code?: string;
29
- };
30
- paypal_settings?: Record<string, unknown>;
31
- onboarding_config?: Record<string, unknown>;
32
- };
33
- [key: string]: unknown;
34
- };
35
-
36
- type HttpOptions = {
37
- baseUrl: string;
38
- publishableApiKey?: string;
39
- };
40
-
41
- declare function createPayPalStoreApi(opts: HttpOptions): {
42
- getConfig(cartId?: string, signal?: AbortSignal): Promise<PayPalConfig>;
43
- getSettings(): Promise<PayPalSettingsResponse>;
44
- createOrder(cartId: string, isCardPayment?: boolean): Promise<{
45
- id: string;
46
- }>;
47
- captureOrder(cartId: string, orderId: string): Promise<Record<string, unknown>>;
48
- };
49
-
50
- type Args$1 = {
51
- baseUrl: string;
52
- publishableApiKey?: string;
53
- cartId?: string;
54
- enabled?: boolean;
55
- };
56
- declare function usePayPalConfig({ baseUrl, publishableApiKey, cartId, enabled, }: Args$1): {
57
- config: PayPalConfig | null;
58
- loading: boolean;
59
- error: string | null;
60
- };
61
-
62
- declare function PayPalProvider(props: {
63
- config: PayPalConfig;
64
- intent?: "capture" | "authorize";
65
- disableFunding?: string;
66
- children: React.ReactNode;
67
- }): react_jsx_runtime.JSX.Element;
68
-
69
- declare function PayPalCurrencyNotice({ config }: {
70
- config: PayPalConfig;
71
- }): react_jsx_runtime.JSX.Element | null;
72
-
73
- declare function PayPalSmartButtons(props: {
74
- baseUrl: string;
75
- publishableApiKey?: string;
76
- cartId: string;
77
- config: PayPalConfig;
78
- onPaid?: (result: Record<string, unknown>) => void;
79
- onError?: (message: string) => void;
80
- }): react_jsx_runtime.JSX.Element | null;
81
-
82
- declare function PayPalAdvancedCard(props: {
83
- baseUrl: string;
84
- publishableApiKey?: string;
85
- cartId: string;
86
- config: PayPalConfig;
87
- onPaid?: (result: Record<string, unknown>) => void;
88
- onError?: (message: string) => void;
89
- }): react_jsx_runtime.JSX.Element | null;
90
-
91
- type MedusaNextPayPalAdapterProps = {
92
- cartId: string;
93
- selectedProviderId: string | null | undefined;
94
- baseUrl: string;
95
- publishableApiKey?: string;
96
- providerIds?: {
97
- paypal?: string;
98
- paypalCard?: string;
99
- };
100
- onSuccess?: (cartId: string) => void;
101
- onError?: (message: string) => void;
102
- onPaid?: (result: unknown) => void;
103
- };
104
- declare function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps): react_jsx_runtime.JSX.Element | null;
105
-
106
- declare const PAYPAL_WALLET_PROVIDER_ID: "pp_paypal_paypal";
107
- declare const PAYPAL_CARD_PROVIDER_ID: "pp_paypal_card_paypal_card";
108
- declare function isPayPalProviderId(id?: string | null): boolean;
109
- type PayPalPaymentSectionProps = {
110
- cartId: string;
111
- selectedProviderId: string | null | undefined;
112
- baseUrl: string;
113
- publishableApiKey?: string;
114
- sessionLoading?: boolean;
115
- onSuccess?: (cartId: string) => void;
116
- onError?: (message: string) => void;
117
- onPaid?: (result: unknown) => void;
118
- };
119
- declare function PayPalPaymentSection({ cartId, selectedProviderId, baseUrl, publishableApiKey, sessionLoading, onSuccess, onError, onPaid, }: PayPalPaymentSectionProps): react_jsx_runtime.JSX.Element | null;
120
-
121
- type Args = {
122
- baseUrl: string;
123
- publishableApiKey?: string;
124
- cartId?: string;
125
- enabled?: boolean;
126
- };
127
- type Result = {
128
- paypalEnabled: boolean;
129
- paypalTitle: string;
130
- cardEnabled: boolean;
131
- cardTitle: string;
132
- loading: boolean;
133
- };
134
- declare function usePayPalPaymentMethods({ baseUrl, publishableApiKey, cartId, enabled, }: Args): Result;
135
-
136
- export { MedusaNextPayPalAdapter, type MedusaNextPayPalAdapterProps, PAYPAL_CARD_PROVIDER_ID, PAYPAL_WALLET_PROVIDER_ID, PayPalAdvancedCard, type PayPalConfig, PayPalCurrencyNotice, PayPalPaymentSection, type PayPalPaymentSectionProps, PayPalProvider, type PayPalSettingsResponse, PayPalSmartButtons, createPayPalStoreApi, isPayPalProviderId, usePayPalConfig, usePayPalPaymentMethods };
1
+ export * from './client/types';
2
+ export * from './client/paypal';
3
+ export * from './hooks/usePayPalConfig';
4
+ export * from './components/PayPalProvider';
5
+ export * from './components/PayPalCurrencyNotice';
6
+ export * from './components/PayPalSmartButtons';
7
+ export * from './components/PayPalAdvancedCard';
8
+ export * from './adapters/MedusaNextPayPalAdapter';
9
+ export * from './components/PayPalPaymentSection';
10
+ export * from './hooks/usePayPalPaymentMethods';