@easypayment/medusa-paypal-ui 1.0.33 β†’ 1.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -196,7 +196,10 @@ function PayPalSmartButtons(props) {
196
196
  }
197
197
  }
198
198
  ),
199
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 13, color: "#374151", fontWeight: 500 }, children: "Processing payment\u2026" })
199
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "center" }, children: [
200
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: "#374151", fontWeight: 500 }, children: "Processing your payment\u2026" }),
201
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
202
+ ] })
200
203
  ]
201
204
  }
202
205
  ),
@@ -212,12 +215,12 @@ function PayPalSmartButtons(props) {
212
215
  },
213
216
  createOrder: async () => {
214
217
  setError(null);
215
- setProcessing(true);
216
218
  const r = await api.createOrder(cartId);
217
219
  return r.id;
218
220
  },
219
221
  onApprove: async (data) => {
220
222
  try {
223
+ setProcessing(true);
221
224
  setError(null);
222
225
  const orderId = String(data?.orderID || "");
223
226
  const result = await api.captureOrder(cartId, orderId);
@@ -226,10 +229,12 @@ function PayPalSmartButtons(props) {
226
229
  const msg = e instanceof Error ? e.message : "Payment capture failed";
227
230
  setError(msg);
228
231
  onError?.(msg);
229
- } finally {
230
232
  setProcessing(false);
231
233
  }
232
234
  },
235
+ onCancel: () => {
236
+ setProcessing(false);
237
+ },
233
238
  onError: (err) => {
234
239
  setProcessing(false);
235
240
  const msg = err instanceof Error ? err.message : err?.message || "PayPal error";
@@ -299,7 +304,8 @@ var labelStyle = {
299
304
  };
300
305
  function SubmitButton({
301
306
  disabled,
302
- label
307
+ label,
308
+ onSubmit
303
309
  }) {
304
310
  const { cardFieldsForm } = reactPaypalJs.usePayPalCardFields();
305
311
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -307,7 +313,10 @@ function SubmitButton({
307
313
  {
308
314
  type: "button",
309
315
  disabled: disabled || !cardFieldsForm,
310
- onClick: () => cardFieldsForm?.submit(),
316
+ onClick: () => {
317
+ onSubmit();
318
+ cardFieldsForm?.submit();
319
+ },
311
320
  style: {
312
321
  width: "100%",
313
322
  height: 52,
@@ -387,8 +396,8 @@ function PayPalAdvancedCard(props) {
387
396
  }
388
397
  ),
389
398
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "center" }, children: [
390
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your card\u2026" }),
391
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close this page" })
399
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your payment\u2026" }),
400
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
392
401
  ] })
393
402
  ]
394
403
  }
@@ -404,7 +413,6 @@ function PayPalAdvancedCard(props) {
404
413
  },
405
414
  onApprove: async (data) => {
406
415
  try {
407
- setSubmitting(true);
408
416
  setError(null);
409
417
  const orderId = String(data?.orderID || "");
410
418
  const result = await api.captureOrder(cartId, orderId);
@@ -413,14 +421,17 @@ function PayPalAdvancedCard(props) {
413
421
  const msg = e instanceof Error ? e.message : "Card payment failed";
414
422
  setError(msg);
415
423
  onError?.(msg);
416
- } finally {
417
424
  setSubmitting(false);
418
425
  }
419
426
  },
427
+ onCancel: () => {
428
+ setSubmitting(false);
429
+ },
420
430
  onError: (e) => {
421
431
  const msg = e instanceof Error ? e.message : e?.message || "CardFields error";
422
432
  setError(msg);
423
433
  onError?.(msg);
434
+ setSubmitting(false);
424
435
  },
425
436
  children: /* @__PURE__ */ jsxRuntime.jsxs(
426
437
  "div",
@@ -479,7 +490,11 @@ function PayPalAdvancedCard(props) {
479
490
  SubmitButton,
480
491
  {
481
492
  disabled: submitting,
482
- label: submitting ? "Processing..." : "Pay by Card"
493
+ label: submitting ? "Processing..." : "Pay by Card",
494
+ onSubmit: () => {
495
+ setError(null);
496
+ setSubmitting(true);
497
+ }
483
498
  }
484
499
  ) }),
485
500
  error ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -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"],"names":["useMemo","useState","useEffect","jsx","PayPalScriptProvider","jsxs","PayPalButtons","SPIN_STYLE","usePayPalCardFields","PayPalCardFieldsProvider","PayPalNumberField","PayPalExpiryField","PayPalCVVField","useCallback"],"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, 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\nexport function usePayPalConfig({ baseUrl, publishableApiKey, cartId, enabled = true }: Args) {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [config, setConfig] = useState<PayPalConfig | null>(null)\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setLoading(false)\r\n setError(null)\r\n setConfig(null)\r\n return\r\n }\r\n\r\n let mounted = true\r\n const controller = new AbortController()\r\n ;(async () => {\r\n try {\r\n setLoading(true)\r\n setError(null)\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (mounted) setConfig(cfg)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (mounted) setError(e?.message || \"Failed to load PayPal config\")\r\n } finally {\r\n if (mounted) setLoading(false)\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, 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\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 }\r\n }, [config, intent, disableFunding])\r\n\r\n return <PayPalScriptProvider options={options}>{children}</PayPalScriptProvider>\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\"\nimport React, { useMemo, useState } from \"react\"\nimport { PayPalButtons } from \"@paypal/react-paypal-js\"\nimport { createPayPalStoreApi } from \"../client/paypal\"\nimport type { PayPalConfig } from \"../client/types\"\n\n// ─── Spinner keyframes ────────────────────────────────────────────────────────\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\nconst BUTTON_WIDTH_MAP: Record<string, string> = {\n small: \"300px\",\n medium: \"400px\",\n large: \"500px\",\n responsive: \"100%\",\n}\n\nexport function PayPalSmartButtons(props: {\n baseUrl: string\n publishableApiKey?: string\n cartId: string\n config: PayPalConfig\n onPaid?: (result: Record<string, unknown>) => void\n onError?: (message: string) => void\n}) {\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\n const api = useMemo(\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\n [baseUrl, publishableApiKey]\n )\n\n const [error, setError] = useState<string | null>(null)\n // ── ADDED: track when PayPal payment is in-flight ─────────────────────────\n const [processing, setProcessing] = useState(false)\n\n if (!config.currency_supported) return null\n\n const containerWidth = BUTTON_WIDTH_MAP[config.button_width ?? \"responsive\"] ?? \"100%\"\n\n return (\n // ── CHANGED: added position: relative so the overlay can sit on top ──────\n <div style={{ width: containerWidth, position: \"relative\" }}>\n <style>{SPIN_STYLE}</style>\n\n {/* ── ADDED: processing overlay ────────────────────────────────────── */}\n {processing && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 10,\n background: \"rgba(255,255,255,0.90)\",\n borderRadius: 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n minHeight: 60,\n }}\n >\n <div\n style={{\n width: 28,\n height: 28,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#0070ba\",\n animation: \"_pp_spin .7s linear infinite\",\n }}\n />\n <span style={{ fontSize: 13, color: \"#374151\", fontWeight: 500 }}>\n Processing payment…\n </span>\n </div>\n )}\n\n <PayPalButtons\n style={{\n layout: \"vertical\",\n color: config.button_color,\n shape: config.button_shape,\n label: config.button_label,\n height: config.button_height,\n }}\n createOrder={async () => {\n setError(null)\n setProcessing(true) // ── ADDED: show spinner immediately ───────────\n const r = await api.createOrder(cartId)\n return r.id\n }}\n onApprove={async (data: { orderID?: string }) => {\n try {\n setError(null)\n const orderId = String(data?.orderID || \"\")\n const result = await api.captureOrder(cartId, orderId)\n onPaid?.(result)\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : \"Payment capture failed\"\n setError(msg)\n onError?.(msg)\n } finally {\n setProcessing(false) // ── ADDED: always hide spinner when done ────\n }\n }}\n onError={(err: Error | { message?: string }) => {\n setProcessing(false) // ── ADDED: hide spinner on PayPal error ────────\n const msg = err instanceof Error ? err.message : err?.message || \"PayPal error\"\n setError(msg)\n onError?.(msg)\n }}\n />\n\n {/* ── CHANGED: styled error box instead of plain crimson text ──────── */}\n {error ? (\n <div\n style={{\n marginTop: 10,\n padding: \"8px 12px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 6,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {error}\n </div>\n ) : null}\n </div>\n )\n}\n","\"use client\"\n\nimport React, { useMemo, useState } from \"react\"\nimport {\n PayPalCardFieldsProvider,\n PayPalNumberField,\n PayPalExpiryField,\n PayPalCVVField,\n usePayPalCardFields,\n} from \"@paypal/react-paypal-js\"\n\nimport { createPayPalStoreApi } from \"../client/paypal\"\nimport type { PayPalConfig } from \"../client/types\"\n\n// ─── Spinner keyframes ────────────────────────────────────────────────────────\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\nconst cardStyle = {\n input: {\n \"font-size\": \"16px\",\n \"font-family\": \"Helvetica, Arial, sans-serif\",\n \"font-weight\": \"400\",\n color: \"#2f2f2f\",\n padding: \"0 14px\",\n height: \"44px\",\n \"border-radius\": \"4px\",\n border: \"1px solid #c7c7c7\",\n background: \"#ffffff\",\n \"box-shadow\": \"none\",\n },\n\n \"::placeholder\": {\n color: \"#a0aec0\",\n },\n\n \".invalid\": {\n color: \"#b42318\",\n border: \"1px solid #d92d20\",\n \"box-shadow\": \"none\",\n },\n\n \".valid\": {\n color: \"#2f2f2f\",\n border: \"1px solid #c7c7c7\",\n \"box-shadow\": \"none\",\n },\n\n \"input:focus\": {\n outline: \"none\",\n border: \"1px solid #c7c7c7\",\n \"box-shadow\": \"none\",\n },\n}\n\nconst labelStyle: React.CSSProperties = {\n display: \"block\",\n fontSize: 15,\n lineHeight: \"22px\",\n fontWeight: 700,\n color: \"#4a4a4a\",\n marginBottom: 10,\n}\n\nfunction SubmitButton({\n disabled,\n label,\n}: {\n disabled: boolean\n label: string\n}) {\n const { cardFieldsForm } = usePayPalCardFields()\n\n return (\n <button\n type=\"button\"\n disabled={disabled || !cardFieldsForm}\n onClick={() => cardFieldsForm?.submit()}\n style={{\n width: \"100%\",\n height: 52,\n padding: \"0 16px\",\n borderRadius: 4,\n border: \"1px solid #c7c7c7\",\n background: \"#f5f5f5\",\n color: \"#2f363d\",\n fontSize: 16,\n fontWeight: 700,\n fontFamily: \"Helvetica, Arial, sans-serif\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.7 : 1,\n boxShadow: \"none\",\n }}\n >\n {label}\n </button>\n )\n}\n\nexport function PayPalAdvancedCard(props: {\n baseUrl: string\n publishableApiKey?: string\n cartId: string\n config: PayPalConfig\n onPaid?: (result: Record<string, unknown>) => void\n onError?: (message: string) => void\n}) {\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\n\n const api = useMemo(\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\n [baseUrl, publishableApiKey]\n )\n\n const [error, setError] = useState<string | null>(null)\n const [submitting, setSubmitting] = useState(false)\n\n if (!config.currency_supported) return null\n\n if (!config.client_token) {\n return (\n <div\n style={{\n padding: 12,\n border: \"1px solid #ddd\",\n borderRadius: 4,\n fontSize: 13,\n color: \"#3c434a\",\n }}\n >\n CardFields unavailable: missing client_token from backend.\n </div>\n )\n }\n\n const isSandbox = config.environment === \"sandbox\"\n\n return (\n // ── ADDED: wrapper div with position relative so overlay works ────────────\n <div style={{ position: \"relative\" }}>\n <style>{SPIN_STYLE}</style>\n\n {/* ── ADDED: full overlay shown while card payment processes ─────────── */}\n {submitting && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 20,\n background: \"rgba(255,255,255,0.90)\",\n borderRadius: 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n minHeight: 120,\n }}\n >\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#1877f2\",\n animation: \"_pp_spin .7s linear infinite\",\n }}\n />\n <div style={{ textAlign: \"center\" }}>\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#111827\" }}>\n Processing your card…\n </div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 4 }}>\n Please do not close this page\n </div>\n </div>\n </div>\n )}\n\n {/* ── UNCHANGED: PayPalCardFieldsProvider and all its children are exactly as before ── */}\n <PayPalCardFieldsProvider\n style={cardStyle}\n createOrder={async () => {\n setError(null)\n const r = await api.createOrder(cartId)\n return r.id\n }}\n onApprove={async (data: { orderID?: string }) => {\n try {\n setSubmitting(true)\n setError(null)\n\n const orderId = String(data?.orderID || \"\")\n const result = await api.captureOrder(cartId, orderId)\n\n onPaid?.(result)\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : \"Card payment failed\"\n setError(msg)\n onError?.(msg)\n } finally {\n setSubmitting(false)\n }\n }}\n onError={(e: Error | { message?: string }) => {\n const msg =\n e instanceof Error ? e.message : e?.message || \"CardFields error\"\n\n setError(msg)\n onError?.(msg)\n }}\n >\n <div\n style={{\n display: \"grid\",\n gap: 18,\n width: \"100%\",\n maxWidth: 516,\n }}\n >\n {isSandbox && (\n <div\n style={{\n fontSize: 15,\n lineHeight: 1.5,\n color: \"#4a4a4a\",\n marginBottom: 2,\n }}\n >\n Sandbox Mode Enabled.\n <br />\n Use test card <strong>4111 1111 1111 1111</strong> with any future\n expiration date and any CVV.\n </div>\n )}\n\n <div style={{ width: \"100%\" }}>\n <label style={labelStyle}>Card number</label>\n <PayPalNumberField />\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr) minmax(0, 1fr)\",\n columnGap: 18,\n alignItems: \"start\",\n }}\n >\n <div>\n <label style={labelStyle}>Expiration date</label>\n <PayPalExpiryField />\n </div>\n\n <div>\n <label style={labelStyle}>Security code</label>\n <PayPalCVVField />\n </div>\n </div>\n\n <div style={{ marginTop: 2 }}>\n <SubmitButton\n disabled={submitting}\n label={submitting ? \"Processing...\" : \"Pay by Card\"}\n />\n </div>\n\n {/* ── CHANGED: styled error box instead of plain colored text ──── */}\n {error ? (\n <div\n style={{\n padding: \"8px 12px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 6,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {error}\n </div>\n ) : null}\n </div>\n </PayPalCardFieldsProvider>\n </div>\n )\n}\n","\"use client\"\n\nimport React, { useCallback } from \"react\"\nimport { PayPalCurrencyNotice } from \"../components/PayPalCurrencyNotice\"\nimport { PayPalAdvancedCard } from \"../components/PayPalAdvancedCard\"\nimport { PayPalProvider } from \"../components/PayPalProvider\"\nimport { PayPalSmartButtons } from \"../components/PayPalSmartButtons\"\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\n\nconst DEFAULT_PAYPAL_PROVIDER_ID = \"pp_paypal_paypal\"\nconst DEFAULT_PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\"\n\n// ─── Spinner keyframes (injected once, scoped to this component) ──────────────\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\n// ─── Loading card β€” replaces the old plain \"Loading PayPal…\" div ─────────────\nfunction PayPalLoadingCard() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n padding: \"14px 16px\",\n background: \"#f9fafb\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 10,\n }}\n >\n <style>{SPIN_STYLE}</style>\n <div\n style={{\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#0070ba\",\n animation: \"_pp_spin .7s linear infinite\",\n flexShrink: 0,\n }}\n />\n <div>\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\n Connecting to PayPal…\n </div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\n Setting up secure payment\n </div>\n </div>\n </div>\n )\n}\n\n// ─── Error card β€” replaces the old plain crimson div ─────────────────────────\nfunction PayPalErrorCard({ message }: { message: string }) {\n return (\n <div\n style={{\n padding: \"12px 16px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 10,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {message}\n </div>\n )\n}\n\nexport type MedusaNextPayPalAdapterProps = {\n cartId: string\n selectedProviderId: string | null | undefined\n baseUrl: string\n publishableApiKey?: string\n providerIds?: {\n paypal?: string\n paypalCard?: string\n }\n /**\n * Called after PayPal capture succeeds.\n * The storefront must call placeOrder(cartId) here β€” that is the only\n * correct way to clear the _medusa_cart_id cookie, because placeOrder\n * is a Next.js Server Action that calls removeCartId() server-side.\n * A client-side fetch cannot clear an httpOnly cookie set by the server.\n */\n onSuccess?: (cartId: string) => void\n onError?: (message: string) => void\n /** @deprecated use onSuccess */\n onPaid?: (result: unknown) => void\n}\n\nexport function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps) {\n const {\n cartId,\n selectedProviderId,\n baseUrl,\n publishableApiKey,\n providerIds,\n onSuccess,\n onError,\n onPaid,\n } = props\n\n const paypalProviderId = providerIds?.paypal || DEFAULT_PAYPAL_PROVIDER_ID\n const paypalCardProviderId = providerIds?.paypalCard || DEFAULT_PAYPAL_CARD_PROVIDER_ID\n\n const shouldRender =\n selectedProviderId === paypalProviderId ||\n selectedProviderId === paypalCardProviderId\n\n const { config, loading, error } = usePayPalConfig({\n baseUrl,\n publishableApiKey,\n cartId,\n enabled: shouldRender,\n })\n\n // After capture succeeds: call both the legacy onPaid and the new onSuccess.\n // Cart completion and cookie clearing must happen in the storefront via\n // placeOrder() β€” we intentionally do NOT call /store/carts/:id/complete here\n // because that endpoint does not clear the Next.js server-side cart cookie.\n const handlePaid = useCallback(\n (captureResult: unknown) => {\n onPaid?.(captureResult)\n onSuccess?.(cartId)\n },\n [cartId, onPaid, onSuccess]\n )\n\n if (!shouldRender) return null\n\n // ── CHANGED: was <div>Loading PayPal…</div> ───────────────────────────────\n if (loading) return <PayPalLoadingCard />\n\n // ── CHANGED: was <div style={{ color: \"crimson\" }}>{error}</div> ──────────\n if (error) return <PayPalErrorCard message={error} />\n\n if (!config) return null\n if (config.paypal_enabled === false) return null\n\n const isCardProvider = selectedProviderId === paypalCardProviderId\n if (selectedProviderId === paypalCardProviderId && config.card_enabled === false) return null\n\n const disableFunding = Array.isArray(config.disable_buttons)\n ? config.disable_buttons.join(\",\")\n : undefined\n\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n <PayPalCurrencyNotice config={config} />\n <PayPalProvider\n config={config}\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\n disableFunding={disableFunding}\n >\n {selectedProviderId === paypalCardProviderId ? (\n <PayPalAdvancedCard\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n ) : (\n <PayPalSmartButtons\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n )}\n </PayPalProvider>\n </div>\n )\n}\n"]}
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"],"names":["useMemo","useState","useEffect","jsx","PayPalScriptProvider","jsxs","PayPalButtons","SPIN_STYLE","usePayPalCardFields","PayPalCardFieldsProvider","PayPalNumberField","PayPalExpiryField","PayPalCVVField","useCallback"],"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, 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\nexport function usePayPalConfig({ baseUrl, publishableApiKey, cartId, enabled = true }: Args) {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [config, setConfig] = useState<PayPalConfig | null>(null)\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setLoading(false)\r\n setError(null)\r\n setConfig(null)\r\n return\r\n }\r\n\r\n let mounted = true\r\n const controller = new AbortController()\r\n ;(async () => {\r\n try {\r\n setLoading(true)\r\n setError(null)\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (mounted) setConfig(cfg)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (mounted) setError(e?.message || \"Failed to load PayPal config\")\r\n } finally {\r\n if (mounted) setLoading(false)\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, 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\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 }\r\n }, [config, intent, disableFunding])\r\n\r\n return <PayPalScriptProvider options={options}>{children}</PayPalScriptProvider>\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\n// ─── Spinner keyframes ────────────────────────────────────────────────────────\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 // ── ADDED: track when PayPal payment is in-flight ─────────────────────────\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 // ── CHANGED: added position: relative so the overlay can sit on top ──────\r\n <div style={{ width: containerWidth, position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {/* ── ADDED: processing overlay ────────────────────────────────────── */}\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 <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 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 {/* ── CHANGED: styled error box instead of plain crimson text ──────── */}\r\n {error ? (\r\n <div\r\n style={{\r\n marginTop: 10,\r\n padding: \"8px 12px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 6,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {error}\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\n// ─── Spinner keyframes ────────────────────────────────────────────────────────\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst cardStyle = {\r\n input: {\r\n \"font-size\": \"16px\",\r\n \"font-family\": \"Helvetica, Arial, sans-serif\",\r\n \"font-weight\": \"400\",\r\n color: \"#2f2f2f\",\r\n padding: \"0 14px\",\r\n height: \"44px\",\r\n \"border-radius\": \"4px\",\r\n border: \"1px solid #c7c7c7\",\r\n background: \"#ffffff\",\r\n \"box-shadow\": \"none\",\r\n },\r\n\r\n \"::placeholder\": {\r\n color: \"#a0aec0\",\r\n },\r\n\r\n \".invalid\": {\r\n color: \"#b42318\",\r\n border: \"1px solid #d92d20\",\r\n \"box-shadow\": \"none\",\r\n },\r\n\r\n \".valid\": {\r\n color: \"#2f2f2f\",\r\n border: \"1px solid #c7c7c7\",\r\n \"box-shadow\": \"none\",\r\n },\r\n\r\n \"input:focus\": {\r\n outline: \"none\",\r\n border: \"1px solid #c7c7c7\",\r\n \"box-shadow\": \"none\",\r\n },\r\n}\r\n\r\nconst labelStyle: React.CSSProperties = {\r\n display: \"block\",\r\n fontSize: 15,\r\n lineHeight: \"22px\",\r\n fontWeight: 700,\r\n color: \"#4a4a4a\",\r\n marginBottom: 10,\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\r\n return (\r\n <button\r\n type=\"button\"\r\n disabled={disabled || !cardFieldsForm}\r\n onClick={() => {\r\n onSubmit()\r\n cardFieldsForm?.submit()\r\n }}\r\n style={{\r\n width: \"100%\",\r\n height: 52,\r\n padding: \"0 16px\",\r\n borderRadius: 4,\r\n border: \"1px solid #c7c7c7\",\r\n background: \"#f5f5f5\",\r\n color: \"#2f363d\",\r\n fontSize: 16,\r\n fontWeight: 700,\r\n fontFamily: \"Helvetica, Arial, sans-serif\",\r\n cursor: disabled ? \"not-allowed\" : \"pointer\",\r\n opacity: disabled ? 0.7 : 1,\r\n boxShadow: \"none\",\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: 12,\r\n border: \"1px solid #ddd\",\r\n borderRadius: 4,\r\n fontSize: 13,\r\n color: \"#3c434a\",\r\n }}\r\n >\r\n CardFields 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 // ── ADDED: wrapper div with position relative so overlay works ────────────\r\n <div style={{ position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {/* ── ADDED: full overlay shown while card payment processes ─────────── */}\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.90)\",\r\n borderRadius: 8,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 12,\r\n minHeight: 120,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 32,\r\n height: 32,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#1877f2\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#111827\" }}>\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 {/* ── UNCHANGED: PayPalCardFieldsProvider and all its children are exactly as before ── */}\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\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\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 =\r\n e instanceof Error ? e.message : e?.message || \"CardFields error\"\r\n\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: \"grid\",\r\n gap: 18,\r\n width: \"100%\",\r\n maxWidth: 516,\r\n }}\r\n >\r\n {isSandbox && (\r\n <div\r\n style={{\r\n fontSize: 15,\r\n lineHeight: 1.5,\r\n color: \"#4a4a4a\",\r\n marginBottom: 2,\r\n }}\r\n >\r\n Sandbox Mode Enabled.\r\n <br />\r\n Use test card <strong>4111 1111 1111 1111</strong> with any future\r\n expiration date and any CVV.\r\n </div>\r\n )}\r\n\r\n <div style={{ width: \"100%\" }}>\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: \"minmax(0, 1fr) minmax(0, 1fr)\",\r\n columnGap: 18,\r\n alignItems: \"start\",\r\n }}\r\n >\r\n <div>\r\n <label style={labelStyle}>Expiration date</label>\r\n <PayPalExpiryField />\r\n </div>\r\n\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 style={{ marginTop: 2 }}>\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 </div>\r\n\r\n {/* ── CHANGED: styled error box instead of plain colored text ──── */}\r\n {error ? (\r\n <div\r\n style={{\r\n padding: \"8px 12px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 6,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {error}\r\n </div>\r\n ) : null}\r\n </div>\r\n </PayPalCardFieldsProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\n\nimport React, { useCallback } from \"react\"\nimport { PayPalCurrencyNotice } from \"../components/PayPalCurrencyNotice\"\nimport { PayPalAdvancedCard } from \"../components/PayPalAdvancedCard\"\nimport { PayPalProvider } from \"../components/PayPalProvider\"\nimport { PayPalSmartButtons } from \"../components/PayPalSmartButtons\"\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\n\nconst DEFAULT_PAYPAL_PROVIDER_ID = \"pp_paypal_paypal\"\nconst DEFAULT_PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\"\n\n// ─── Spinner keyframes (injected once, scoped to this component) ──────────────\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\n// ─── Loading card β€” replaces the old plain \"Loading PayPal…\" div ─────────────\nfunction PayPalLoadingCard() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n padding: \"14px 16px\",\n background: \"#f9fafb\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 10,\n }}\n >\n <style>{SPIN_STYLE}</style>\n <div\n style={{\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#0070ba\",\n animation: \"_pp_spin .7s linear infinite\",\n flexShrink: 0,\n }}\n />\n <div>\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\n Connecting to PayPal…\n </div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\n Setting up secure payment\n </div>\n </div>\n </div>\n )\n}\n\n// ─── Error card β€” replaces the old plain crimson div ─────────────────────────\nfunction PayPalErrorCard({ message }: { message: string }) {\n return (\n <div\n style={{\n padding: \"12px 16px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 10,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {message}\n </div>\n )\n}\n\nexport type MedusaNextPayPalAdapterProps = {\n cartId: string\n selectedProviderId: string | null | undefined\n baseUrl: string\n publishableApiKey?: string\n providerIds?: {\n paypal?: string\n paypalCard?: string\n }\n /**\n * Called after PayPal capture succeeds.\n * The storefront must call placeOrder(cartId) here β€” that is the only\n * correct way to clear the _medusa_cart_id cookie, because placeOrder\n * is a Next.js Server Action that calls removeCartId() server-side.\n * A client-side fetch cannot clear an httpOnly cookie set by the server.\n */\n onSuccess?: (cartId: string) => void\n onError?: (message: string) => void\n /** @deprecated use onSuccess */\n onPaid?: (result: unknown) => void\n}\n\nexport function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps) {\n const {\n cartId,\n selectedProviderId,\n baseUrl,\n publishableApiKey,\n providerIds,\n onSuccess,\n onError,\n onPaid,\n } = props\n\n const paypalProviderId = providerIds?.paypal || DEFAULT_PAYPAL_PROVIDER_ID\n const paypalCardProviderId = providerIds?.paypalCard || DEFAULT_PAYPAL_CARD_PROVIDER_ID\n\n const shouldRender =\n selectedProviderId === paypalProviderId ||\n selectedProviderId === paypalCardProviderId\n\n const { config, loading, error } = usePayPalConfig({\n baseUrl,\n publishableApiKey,\n cartId,\n enabled: shouldRender,\n })\n\n // After capture succeeds: call both the legacy onPaid and the new onSuccess.\n // Cart completion and cookie clearing must happen in the storefront via\n // placeOrder() β€” we intentionally do NOT call /store/carts/:id/complete here\n // because that endpoint does not clear the Next.js server-side cart cookie.\n const handlePaid = useCallback(\n (captureResult: unknown) => {\n onPaid?.(captureResult)\n onSuccess?.(cartId)\n },\n [cartId, onPaid, onSuccess]\n )\n\n if (!shouldRender) return null\n\n // ── CHANGED: was <div>Loading PayPal…</div> ───────────────────────────────\n if (loading) return <PayPalLoadingCard />\n\n // ── CHANGED: was <div style={{ color: \"crimson\" }}>{error}</div> ──────────\n if (error) return <PayPalErrorCard message={error} />\n\n if (!config) return null\n if (config.paypal_enabled === false) return null\n\n const isCardProvider = selectedProviderId === paypalCardProviderId\n if (selectedProviderId === paypalCardProviderId && config.card_enabled === false) return null\n\n const disableFunding = Array.isArray(config.disable_buttons)\n ? config.disable_buttons.join(\",\")\n : undefined\n\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n <PayPalCurrencyNotice config={config} />\n <PayPalProvider\n config={config}\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\n disableFunding={disableFunding}\n >\n {selectedProviderId === paypalCardProviderId ? (\n <PayPalAdvancedCard\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n ) : (\n <PayPalSmartButtons\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n )}\n </PayPalProvider>\n </div>\n )\n}\n"]}
package/dist/index.mjs CHANGED
@@ -194,7 +194,10 @@ function PayPalSmartButtons(props) {
194
194
  }
195
195
  }
196
196
  ),
197
- /* @__PURE__ */ jsx("span", { style: { fontSize: 13, color: "#374151", fontWeight: 500 }, children: "Processing payment\u2026" })
197
+ /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
198
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: "#374151", fontWeight: 500 }, children: "Processing your payment\u2026" }),
199
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
200
+ ] })
198
201
  ]
199
202
  }
200
203
  ),
@@ -210,12 +213,12 @@ function PayPalSmartButtons(props) {
210
213
  },
211
214
  createOrder: async () => {
212
215
  setError(null);
213
- setProcessing(true);
214
216
  const r = await api.createOrder(cartId);
215
217
  return r.id;
216
218
  },
217
219
  onApprove: async (data) => {
218
220
  try {
221
+ setProcessing(true);
219
222
  setError(null);
220
223
  const orderId = String(data?.orderID || "");
221
224
  const result = await api.captureOrder(cartId, orderId);
@@ -224,10 +227,12 @@ function PayPalSmartButtons(props) {
224
227
  const msg = e instanceof Error ? e.message : "Payment capture failed";
225
228
  setError(msg);
226
229
  onError?.(msg);
227
- } finally {
228
230
  setProcessing(false);
229
231
  }
230
232
  },
233
+ onCancel: () => {
234
+ setProcessing(false);
235
+ },
231
236
  onError: (err) => {
232
237
  setProcessing(false);
233
238
  const msg = err instanceof Error ? err.message : err?.message || "PayPal error";
@@ -297,7 +302,8 @@ var labelStyle = {
297
302
  };
298
303
  function SubmitButton({
299
304
  disabled,
300
- label
305
+ label,
306
+ onSubmit
301
307
  }) {
302
308
  const { cardFieldsForm } = usePayPalCardFields();
303
309
  return /* @__PURE__ */ jsx(
@@ -305,7 +311,10 @@ function SubmitButton({
305
311
  {
306
312
  type: "button",
307
313
  disabled: disabled || !cardFieldsForm,
308
- onClick: () => cardFieldsForm?.submit(),
314
+ onClick: () => {
315
+ onSubmit();
316
+ cardFieldsForm?.submit();
317
+ },
309
318
  style: {
310
319
  width: "100%",
311
320
  height: 52,
@@ -385,8 +394,8 @@ function PayPalAdvancedCard(props) {
385
394
  }
386
395
  ),
387
396
  /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
388
- /* @__PURE__ */ jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your card\u2026" }),
389
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close this page" })
397
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your payment\u2026" }),
398
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
390
399
  ] })
391
400
  ]
392
401
  }
@@ -402,7 +411,6 @@ function PayPalAdvancedCard(props) {
402
411
  },
403
412
  onApprove: async (data) => {
404
413
  try {
405
- setSubmitting(true);
406
414
  setError(null);
407
415
  const orderId = String(data?.orderID || "");
408
416
  const result = await api.captureOrder(cartId, orderId);
@@ -411,14 +419,17 @@ function PayPalAdvancedCard(props) {
411
419
  const msg = e instanceof Error ? e.message : "Card payment failed";
412
420
  setError(msg);
413
421
  onError?.(msg);
414
- } finally {
415
422
  setSubmitting(false);
416
423
  }
417
424
  },
425
+ onCancel: () => {
426
+ setSubmitting(false);
427
+ },
418
428
  onError: (e) => {
419
429
  const msg = e instanceof Error ? e.message : e?.message || "CardFields error";
420
430
  setError(msg);
421
431
  onError?.(msg);
432
+ setSubmitting(false);
422
433
  },
423
434
  children: /* @__PURE__ */ jsxs(
424
435
  "div",
@@ -477,7 +488,11 @@ function PayPalAdvancedCard(props) {
477
488
  SubmitButton,
478
489
  {
479
490
  disabled: submitting,
480
- label: submitting ? "Processing..." : "Pay by Card"
491
+ label: submitting ? "Processing..." : "Pay by Card",
492
+ onSubmit: () => {
493
+ setError(null);
494
+ setSubmitting(true);
495
+ }
481
496
  }
482
497
  ) }),
483
498
  error ? /* @__PURE__ */ jsx(