@rovela-ai/sdk 0.24.1 → 0.25.0

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.
Files changed (114) hide show
  1. package/dist/admin/api/index.d.ts +1 -0
  2. package/dist/admin/api/index.d.ts.map +1 -1
  3. package/dist/admin/api/index.js +2 -0
  4. package/dist/admin/api/index.js.map +1 -1
  5. package/dist/admin/api/payment-providers.d.ts +69 -0
  6. package/dist/admin/api/payment-providers.d.ts.map +1 -0
  7. package/dist/admin/api/payment-providers.js +206 -0
  8. package/dist/admin/api/payment-providers.js.map +1 -0
  9. package/dist/admin/api/settings.d.ts.map +1 -1
  10. package/dist/admin/api/settings.js +4 -1
  11. package/dist/admin/api/settings.js.map +1 -1
  12. package/dist/admin/components/OrderDetails.d.ts.map +1 -1
  13. package/dist/admin/components/OrderDetails.js +11 -2
  14. package/dist/admin/components/OrderDetails.js.map +1 -1
  15. package/dist/admin/components/PaymentProviderPanels.d.ts +3 -0
  16. package/dist/admin/components/PaymentProviderPanels.d.ts.map +1 -0
  17. package/dist/admin/components/PaymentProviderPanels.js +202 -0
  18. package/dist/admin/components/PaymentProviderPanels.js.map +1 -0
  19. package/dist/admin/components/PaymentSettings.d.ts.map +1 -1
  20. package/dist/admin/components/PaymentSettings.js +2 -1
  21. package/dist/admin/components/PaymentSettings.js.map +1 -1
  22. package/dist/admin/components/index.d.ts +1 -0
  23. package/dist/admin/components/index.d.ts.map +1 -1
  24. package/dist/admin/components/index.js +1 -0
  25. package/dist/admin/components/index.js.map +1 -1
  26. package/dist/admin/integrations/registry.d.ts.map +1 -1
  27. package/dist/admin/integrations/registry.js +5 -73
  28. package/dist/admin/integrations/registry.js.map +1 -1
  29. package/dist/checkout/api/index.d.ts +6 -0
  30. package/dist/checkout/api/index.d.ts.map +1 -1
  31. package/dist/checkout/api/index.js +6 -0
  32. package/dist/checkout/api/index.js.map +1 -1
  33. package/dist/checkout/api/payment-methods.d.ts +22 -6
  34. package/dist/checkout/api/payment-methods.d.ts.map +1 -1
  35. package/dist/checkout/api/payment-methods.js +46 -6
  36. package/dist/checkout/api/payment-methods.js.map +1 -1
  37. package/dist/checkout/api/paypal-capture.d.ts +38 -0
  38. package/dist/checkout/api/paypal-capture.d.ts.map +1 -0
  39. package/dist/checkout/api/paypal-capture.js +126 -0
  40. package/dist/checkout/api/paypal-capture.js.map +1 -0
  41. package/dist/checkout/api/paypal-webhook.d.ts +24 -0
  42. package/dist/checkout/api/paypal-webhook.d.ts.map +1 -0
  43. package/dist/checkout/api/paypal-webhook.js +122 -0
  44. package/dist/checkout/api/paypal-webhook.js.map +1 -0
  45. package/dist/checkout/api/paypal.d.ts +30 -0
  46. package/dist/checkout/api/paypal.d.ts.map +1 -0
  47. package/dist/checkout/api/paypal.js +70 -0
  48. package/dist/checkout/api/paypal.js.map +1 -0
  49. package/dist/checkout/api/up2pay-ipn.d.ts +28 -0
  50. package/dist/checkout/api/up2pay-ipn.d.ts.map +1 -0
  51. package/dist/checkout/api/up2pay-ipn.js +88 -0
  52. package/dist/checkout/api/up2pay-ipn.js.map +1 -0
  53. package/dist/checkout/api/up2pay.d.ts +34 -0
  54. package/dist/checkout/api/up2pay.d.ts.map +1 -0
  55. package/dist/checkout/api/up2pay.js +82 -0
  56. package/dist/checkout/api/up2pay.js.map +1 -0
  57. package/dist/checkout/components/CheckoutFlow.d.ts.map +1 -1
  58. package/dist/checkout/components/CheckoutFlow.js +38 -8
  59. package/dist/checkout/components/CheckoutFlow.js.map +1 -1
  60. package/dist/checkout/components/PayPalCheckoutButtons.d.ts +32 -0
  61. package/dist/checkout/components/PayPalCheckoutButtons.d.ts.map +1 -0
  62. package/dist/checkout/components/PayPalCheckoutButtons.js +116 -0
  63. package/dist/checkout/components/PayPalCheckoutButtons.js.map +1 -0
  64. package/dist/checkout/components/index.d.ts +2 -0
  65. package/dist/checkout/components/index.d.ts.map +1 -1
  66. package/dist/checkout/components/index.js +1 -0
  67. package/dist/checkout/components/index.js.map +1 -1
  68. package/dist/checkout/hooks/useCheckout.d.ts.map +1 -1
  69. package/dist/checkout/hooks/useCheckout.js +160 -0
  70. package/dist/checkout/hooks/useCheckout.js.map +1 -1
  71. package/dist/checkout/server/confirm-order.d.ts +54 -0
  72. package/dist/checkout/server/confirm-order.d.ts.map +1 -0
  73. package/dist/checkout/server/confirm-order.js +147 -0
  74. package/dist/checkout/server/confirm-order.js.map +1 -0
  75. package/dist/checkout/server/external-checkout.d.ts +68 -0
  76. package/dist/checkout/server/external-checkout.d.ts.map +1 -0
  77. package/dist/checkout/server/external-checkout.js +184 -0
  78. package/dist/checkout/server/external-checkout.js.map +1 -0
  79. package/dist/checkout/server/paypal.d.ts +127 -0
  80. package/dist/checkout/server/paypal.d.ts.map +1 -0
  81. package/dist/checkout/server/paypal.js +274 -0
  82. package/dist/checkout/server/paypal.js.map +1 -0
  83. package/dist/checkout/server/up2pay.d.ts +152 -0
  84. package/dist/checkout/server/up2pay.d.ts.map +1 -0
  85. package/dist/checkout/server/up2pay.js +287 -0
  86. package/dist/checkout/server/up2pay.js.map +1 -0
  87. package/dist/checkout/types.d.ts +26 -1
  88. package/dist/checkout/types.d.ts.map +1 -1
  89. package/dist/core/db/queries.d.ts +68 -39
  90. package/dist/core/db/queries.d.ts.map +1 -1
  91. package/dist/core/db/queries.js +96 -0
  92. package/dist/core/db/queries.js.map +1 -1
  93. package/dist/core/db/schema.d.ts +210 -5
  94. package/dist/core/db/schema.d.ts.map +1 -1
  95. package/dist/core/db/schema.js +33 -0
  96. package/dist/core/db/schema.js.map +1 -1
  97. package/dist/core/i18n/messages/en.d.ts.map +1 -1
  98. package/dist/core/i18n/messages/en.js +5 -0
  99. package/dist/core/i18n/messages/en.js.map +1 -1
  100. package/dist/core/i18n/messages/fr.d.ts.map +1 -1
  101. package/dist/core/i18n/messages/fr.js +5 -0
  102. package/dist/core/i18n/messages/fr.js.map +1 -1
  103. package/docs/changelog/epoch-12-payment-providers.md +105 -0
  104. package/package.json +26 -2
  105. package/templates/store-template/.claude/skills/build-feature/SKILL.md +2 -1
  106. package/templates/store-template/app/api/admin/payments/paypal/route.ts +10 -0
  107. package/templates/store-template/app/api/admin/payments/up2pay/route.ts +10 -0
  108. package/templates/store-template/app/api/checkout/paypal/capture/route.ts +8 -0
  109. package/templates/store-template/app/api/checkout/paypal/return/route.ts +9 -0
  110. package/templates/store-template/app/api/checkout/paypal/route.ts +9 -0
  111. package/templates/store-template/app/api/checkout/paypal/webhook/route.ts +9 -0
  112. package/templates/store-template/app/api/checkout/up2pay/ipn/route.ts +8 -0
  113. package/templates/store-template/app/api/checkout/up2pay/route.ts +9 -0
  114. package/templates/store-template/package.json +2 -2
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @rovela/sdk/checkout/components/PayPalCheckoutButtons
3
+ *
4
+ * PayPal Smart Buttons for the checkout review step (SDK 0.25.0). Loads
5
+ * PayPal's official JS directly from paypal.com (no npm wrapper — the
6
+ * client id parameterizes the script URL and is public by design) and
7
+ * wires createOrder/onApprove to the server routes, where all money logic
8
+ * lives.
9
+ *
10
+ * Graceful degradation is built in: if the script fails to load (ad
11
+ * blocker, CSP, network), a plain "Continue to PayPal" button renders
12
+ * instead, driving the SAME two server legs through the hosted approval
13
+ * link — zero extra server code.
14
+ */
15
+ 'use client';
16
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
17
+ import { useCallback, useEffect, useRef, useState } from 'react';
18
+ import { Loader2 } from 'lucide-react';
19
+ import { useT } from '../../core';
20
+ /** One script load per (clientId, currency) — shared across re-mounts. */
21
+ const scriptPromises = new Map();
22
+ function loadPaypalScript(clientId, currency) {
23
+ const key = `${clientId}:${currency}`;
24
+ const existing = scriptPromises.get(key);
25
+ if (existing)
26
+ return existing;
27
+ const promise = new Promise((resolve, reject) => {
28
+ const w = window;
29
+ const src = `https://www.paypal.com/sdk/js?client-id=${encodeURIComponent(clientId)}&currency=${encodeURIComponent(currency)}&intent=capture&components=buttons`;
30
+ const el = document.createElement('script');
31
+ el.src = src;
32
+ el.async = true;
33
+ el.onload = () => {
34
+ if (w.paypal)
35
+ resolve(w.paypal);
36
+ else
37
+ reject(new Error('PayPal SDK loaded without a namespace'));
38
+ };
39
+ el.onerror = () => reject(new Error('PayPal SDK failed to load'));
40
+ document.head.appendChild(el);
41
+ });
42
+ // A failed load must not poison later retries (e.g. ad-blocker toggled off).
43
+ promise.catch(() => scriptPromises.delete(key));
44
+ scriptPromises.set(key, promise);
45
+ return promise;
46
+ }
47
+ export function PayPalCheckoutButtons({ clientId, currency, disabled, createOrder, onApprove, }) {
48
+ const t = useT();
49
+ const containerRef = useRef(null);
50
+ const [scriptState, setScriptState] = useState('loading');
51
+ const [isRedirecting, setIsRedirecting] = useState(false);
52
+ // Latest-callback refs: the Buttons instance is created once; callbacks
53
+ // must see current cart/address state, not the mount-time closure.
54
+ const createOrderRef = useRef(createOrder);
55
+ createOrderRef.current = createOrder;
56
+ const onApproveRef = useRef(onApprove);
57
+ onApproveRef.current = onApprove;
58
+ useEffect(() => {
59
+ let cancelled = false;
60
+ let buttons = null;
61
+ loadPaypalScript(clientId, currency)
62
+ .then((paypal) => {
63
+ if (cancelled || !containerRef.current)
64
+ return;
65
+ buttons = paypal.Buttons({
66
+ style: { layout: 'vertical', label: 'paypal', height: 48 },
67
+ createOrder: async () => {
68
+ const result = await createOrderRef.current();
69
+ if (!result)
70
+ throw new Error('Order creation failed');
71
+ return result.paypalOrderId;
72
+ },
73
+ onApprove: async (data) => {
74
+ await onApproveRef.current(data.orderID);
75
+ },
76
+ onError: (err) => {
77
+ console.error('[PayPal Buttons] error:', err);
78
+ },
79
+ });
80
+ containerRef.current.innerHTML = '';
81
+ return buttons.render(containerRef.current).then(() => {
82
+ if (!cancelled) {
83
+ // Pattern C — populate state from async-loaded data.
84
+ setScriptState('ready');
85
+ }
86
+ });
87
+ })
88
+ .catch(() => {
89
+ if (!cancelled)
90
+ setScriptState('failed');
91
+ });
92
+ return () => {
93
+ cancelled = true;
94
+ buttons?.close?.().catch(() => { });
95
+ };
96
+ }, [clientId, currency]);
97
+ /** Redirect fallback: same server legs, hosted approval page. */
98
+ const handleFallbackClick = useCallback(async () => {
99
+ setIsRedirecting(true);
100
+ try {
101
+ const result = await createOrder();
102
+ if (result?.approveUrl) {
103
+ window.location.href = result.approveUrl;
104
+ return;
105
+ }
106
+ }
107
+ finally {
108
+ setIsRedirecting(false);
109
+ }
110
+ }, [createOrder]);
111
+ if (scriptState === 'failed') {
112
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx("button", { type: "button", onClick: handleFallbackClick, disabled: disabled || isRedirecting, className: "w-full px-4 py-4 rounded-md font-medium text-lg bg-[#ffc439] text-[#003087] hover:brightness-95 transition-all disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center gap-2", children: isRedirecting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "h-5 w-5 animate-spin" }), t('common.processing')] })) : (t('checkout.continueToPaypal')) }), _jsx("p", { className: "text-xs text-center text-muted-foreground", children: t('checkout.pspRedirectNote') })] }));
113
+ }
114
+ return (_jsxs("div", { className: disabled ? 'pointer-events-none opacity-50' : undefined, children: [scriptState === 'loading' && (_jsx("div", { className: "flex items-center justify-center py-4 text-muted-foreground", children: _jsx(Loader2, { className: "h-5 w-5 animate-spin" }) })), _jsx("div", { ref: containerRef })] }));
115
+ }
116
+ //# sourceMappingURL=PayPalCheckoutButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayPalCheckoutButtons.js","sourceRoot":"","sources":["../../../src/checkout/components/PayPalCheckoutButtons.tsx"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export { CheckoutSuccess } from './CheckoutSuccess';
9
9
  export { OrderSummary } from './OrderSummary';
10
10
  export { OrderTimeline } from './OrderTimeline';
11
11
  export type { OrderTimelineProps } from './OrderTimeline';
12
+ export { PayPalCheckoutButtons } from './PayPalCheckoutButtons';
13
+ export type { PayPalCheckoutButtonsProps } from './PayPalCheckoutButtons';
12
14
  export { ShippingForm } from './ShippingForm';
13
15
  export { ShippingOptions } from './ShippingOptions';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checkout/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/checkout/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
@@ -8,6 +8,7 @@ export { CheckoutFlow } from './CheckoutFlow';
8
8
  export { CheckoutSuccess } from './CheckoutSuccess';
9
9
  export { OrderSummary } from './OrderSummary';
10
10
  export { OrderTimeline } from './OrderTimeline';
11
+ export { PayPalCheckoutButtons } from './PayPalCheckoutButtons';
11
12
  export { ShippingForm } from './ShippingForm';
12
13
  export { ShippingOptions } from './ShippingOptions';
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkout/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/checkout/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCheckout.d.ts","sourceRoot":"","sources":["../../../src/checkout/hooks/useCheckout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAGV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAMjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAoN3E"}
1
+ {"version":3,"file":"useCheckout.d.ts","sourceRoot":"","sources":["../../../src/checkout/hooks/useCheckout.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAGV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,UAAU,CAAA;AAMjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CA4X3E"}
@@ -223,9 +223,169 @@ export function useCheckout(options) {
223
223
  setIsLoading(false);
224
224
  }
225
225
  }, [options, activeLocale]);
226
+ /**
227
+ * Shared request body for the external-provider start routes (PayPal,
228
+ * Up2pay) — identical to the manual body minus paymentMethodId.
229
+ */
230
+ const buildExternalBody = useCallback(() => {
231
+ const items = getCartItemsWithFallback();
232
+ if (items.length === 0) {
233
+ const emptyError = { error: 'Your cart is empty', code: 'EMPTY_CART' };
234
+ setError(emptyError);
235
+ options?.onError?.(emptyError);
236
+ return null;
237
+ }
238
+ const visitorId = getVisitorId();
239
+ const { id: sessionId } = getSessionId();
240
+ return {
241
+ locale: activeLocale,
242
+ items: items.map((item) => ({
243
+ productId: item.productId,
244
+ variantId: item.variantId,
245
+ name: item.name,
246
+ price: Math.round(item.price * 100),
247
+ quantity: item.quantity,
248
+ image: item.image,
249
+ previewImages: item.previewImages,
250
+ })),
251
+ customerEmail: options?.customerEmail,
252
+ customerId: options?.customerId,
253
+ shippingAddress: options?.shippingAddress,
254
+ billingAddress: options?.billingAddress,
255
+ selectedShipping: options?.selectedShipping,
256
+ discountCode: options?.discountCode,
257
+ metadata: {
258
+ ...(visitorId ? { rovela_visitor_id: visitorId } : {}),
259
+ ...(sessionId ? { rovela_session_id: sessionId } : {}),
260
+ ...options?.metadata,
261
+ },
262
+ idempotencyKey: typeof crypto !== 'undefined' && 'randomUUID' in crypto ? crypto.randomUUID() : undefined,
263
+ };
264
+ }, [options, activeLocale]);
265
+ /**
266
+ * Up2pay e-Transactions: start the payment, then auto-submit the signed
267
+ * form to the hosted payment page. Field ORDER is part of the signature —
268
+ * the form is built exactly as returned. Cart clears on the success page
269
+ * only (the customer may cancel at the hosted page and come back).
270
+ */
271
+ const checkoutUp2pay = useCallback(async () => {
272
+ setError(null);
273
+ const body = buildExternalBody();
274
+ if (!body)
275
+ return;
276
+ setIsLoading(true);
277
+ try {
278
+ const response = await fetch('/api/checkout/up2pay', {
279
+ method: 'POST',
280
+ headers: { 'Content-Type': 'application/json' },
281
+ body: JSON.stringify(body),
282
+ });
283
+ const data = await response.json();
284
+ if (!response.ok) {
285
+ const apiError = data;
286
+ setError(apiError);
287
+ options?.onError?.(apiError);
288
+ return;
289
+ }
290
+ const result = data;
291
+ const form = document.createElement('form');
292
+ form.method = 'POST';
293
+ form.action = result.url;
294
+ form.style.display = 'none';
295
+ for (const field of result.fields) {
296
+ const input = document.createElement('input');
297
+ input.type = 'hidden';
298
+ input.name = field.name;
299
+ input.value = field.value;
300
+ form.appendChild(input);
301
+ }
302
+ document.body.appendChild(form);
303
+ form.submit();
304
+ // isLoading stays true through the navigation — deliberate.
305
+ }
306
+ catch {
307
+ const networkError = {
308
+ error: 'Network error. Please try again.',
309
+ code: 'CHECKOUT_ERROR',
310
+ };
311
+ setError(networkError);
312
+ options?.onError?.(networkError);
313
+ setIsLoading(false);
314
+ }
315
+ }, [options, buildExternalBody]);
316
+ /** PayPal leg 1: pending order + PayPal order (Smart Buttons createOrder). */
317
+ const createPaypalOrder = useCallback(async () => {
318
+ setError(null);
319
+ const body = buildExternalBody();
320
+ if (!body)
321
+ return null;
322
+ try {
323
+ const response = await fetch('/api/checkout/paypal', {
324
+ method: 'POST',
325
+ headers: { 'Content-Type': 'application/json' },
326
+ body: JSON.stringify(body),
327
+ });
328
+ const data = await response.json();
329
+ if (!response.ok) {
330
+ const apiError = data;
331
+ setError(apiError);
332
+ options?.onError?.(apiError);
333
+ return null;
334
+ }
335
+ const result = data;
336
+ return { paypalOrderId: result.paypalOrderId, approveUrl: result.approveUrl };
337
+ }
338
+ catch {
339
+ const networkError = {
340
+ error: 'Network error. Please try again.',
341
+ code: 'CHECKOUT_ERROR',
342
+ };
343
+ setError(networkError);
344
+ options?.onError?.(networkError);
345
+ return null;
346
+ }
347
+ }, [options, buildExternalBody]);
348
+ /** PayPal leg 2: server-side capture (Smart Buttons onApprove). */
349
+ const capturePaypalOrder = useCallback(async (paypalOrderId) => {
350
+ setError(null);
351
+ setIsLoading(true);
352
+ try {
353
+ const response = await fetch('/api/checkout/paypal/capture', {
354
+ method: 'POST',
355
+ headers: { 'Content-Type': 'application/json' },
356
+ body: JSON.stringify({ paypalOrderId }),
357
+ });
358
+ const data = await response.json();
359
+ if (!response.ok) {
360
+ const apiError = data;
361
+ setError(apiError);
362
+ options?.onError?.(apiError);
363
+ return null;
364
+ }
365
+ const result = data;
366
+ // Cart is cleared on the success page (same contract as Stripe).
367
+ window.location.href = `/checkout/success?orderId=${encodeURIComponent(result.orderId)}`;
368
+ return { orderId: result.orderId };
369
+ }
370
+ catch {
371
+ const networkError = {
372
+ error: 'Network error. Please try again.',
373
+ code: 'CHECKOUT_ERROR',
374
+ };
375
+ setError(networkError);
376
+ options?.onError?.(networkError);
377
+ return null;
378
+ }
379
+ finally {
380
+ setIsLoading(false);
381
+ }
382
+ }, [options]);
226
383
  return {
227
384
  checkout,
228
385
  checkoutManual,
386
+ checkoutUp2pay,
387
+ createPaypalOrder,
388
+ capturePaypalOrder,
229
389
  isLoading,
230
390
  error,
231
391
  clearError: useCallback(() => setError(null), []),
@@ -1 +1 @@
1
- {"version":3,"file":"useCheckout.js","sourceRoot":"","sources":["../../../src/checkout/hooks/useCheckout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useCheckout.js","sourceRoot":"","sources":["../../../src/checkout/hooks/useCheckout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @rovela/sdk/checkout/server/confirm-order
3
+ *
4
+ * The shared "external payment confirmed" helper — the ONE place a pending
5
+ * external-provider order (PayPal, Up2pay) flips to paid. Both providers'
6
+ * proof-of-payment paths call it: the PayPal capture route + webhook
7
+ * backstop, and the Up2pay IPN.
8
+ *
9
+ * MONEY INVARIANTS (do not weaken):
10
+ * - The flip is an ATOMIC conditional UPDATE (claimPendingOrderPaid) —
11
+ * duplicate IPNs / capture-vs-webhook races produce exactly ONE email.
12
+ * - The paid amount is verified against the DB ORDER (never the callback's
13
+ * own claims about what was owed). A mismatch NEVER flips the order.
14
+ * - Every side effect (metafields stamp, email) is guarded — a failure
15
+ * after the claim can never un-pay the order or throw to the caller.
16
+ */
17
+ export type ConfirmExternalOrderResult = {
18
+ status: 'confirmed';
19
+ orderId: string;
20
+ } | {
21
+ status: 'already_processed';
22
+ orderId: string;
23
+ } | {
24
+ status: 'not_found';
25
+ } | {
26
+ status: 'amount_mismatch';
27
+ orderId: string;
28
+ expectedCents: number;
29
+ paidCents: number;
30
+ };
31
+ export interface ConfirmExternalOrderInput {
32
+ /** The payment reference (paypal_… / up2pay_…) stored on the order. */
33
+ reference: string;
34
+ /** The provider this proof came from — a cross-provider reference is rejected. */
35
+ expectedProvider: 'paypal' | 'up2pay';
36
+ /** Human label for the email's payment status line (e.g. 'PayPal'). */
37
+ providerLabel: string;
38
+ /**
39
+ * The amount the provider says was paid, in cents. When provided it MUST
40
+ * equal the DB order total or the confirmation is refused. Pass null only
41
+ * when the channel already guarantees the amount (never for Up2pay IPNs).
42
+ */
43
+ paidAmountCents?: number | null;
44
+ /** The paid currency (uppercase ISO) — checked against the order when both known. */
45
+ paidCurrency?: string | null;
46
+ /** Provider transaction identifiers, stamped into orders.metafields. */
47
+ transaction?: Array<{
48
+ key: string;
49
+ label: string;
50
+ value: string;
51
+ }>;
52
+ }
53
+ export declare function confirmExternalOrderPaid(input: ConfirmExternalOrderInput): Promise<ConfirmExternalOrderResult>;
54
+ //# sourceMappingURL=confirm-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-order.d.ts","sourceRoot":"","sources":["../../../src/checkout/server/confirm-order.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgBH,MAAM,MAAM,0BAA0B,GAClC;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F,MAAM,WAAW,yBAAyB;IACxC,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAA;IACjB,kFAAkF;IAClF,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACrC,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,wEAAwE;IACxE,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,0BAA0B,CAAC,CAgErC"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * @rovela/sdk/checkout/server/confirm-order
3
+ *
4
+ * The shared "external payment confirmed" helper — the ONE place a pending
5
+ * external-provider order (PayPal, Up2pay) flips to paid. Both providers'
6
+ * proof-of-payment paths call it: the PayPal capture route + webhook
7
+ * backstop, and the Up2pay IPN.
8
+ *
9
+ * MONEY INVARIANTS (do not weaken):
10
+ * - The flip is an ATOMIC conditional UPDATE (claimPendingOrderPaid) —
11
+ * duplicate IPNs / capture-vs-webhook races produce exactly ONE email.
12
+ * - The paid amount is verified against the DB ORDER (never the callback's
13
+ * own claims about what was owed). A mismatch NEVER flips the order.
14
+ * - Every side effect (metafields stamp, email) is guarded — a failure
15
+ * after the claim can never un-pay the order or throw to the caller.
16
+ */
17
+ import { findOrderByPaymentIntent, findOrderById, claimPendingOrderPaid, appendOrderMetafields, } from '../../core/db/queries';
18
+ import { sendOrderConfirmation, formatPrice, formatDate, formatOrderNumber, } from '../../emails';
19
+ export async function confirmExternalOrderPaid(input) {
20
+ const order = await findOrderByPaymentIntent(input.reference);
21
+ if (!order) {
22
+ console.warn(`[Checkout Confirm] no order for reference ${input.reference}`);
23
+ return { status: 'not_found' };
24
+ }
25
+ if (order.paymentProvider !== input.expectedProvider) {
26
+ console.error(`[Checkout Confirm] provider mismatch for ${input.reference}: order=${order.paymentProvider} proof=${input.expectedProvider}`);
27
+ return { status: 'not_found' };
28
+ }
29
+ // ── Amount check against the DB (the order priced by buildQuote) ──────────
30
+ const expectedCents = Math.round(parseFloat(order.total) * 100);
31
+ if (input.paidAmountCents != null && input.paidAmountCents !== expectedCents) {
32
+ console.error(`[Checkout Confirm] AMOUNT MISMATCH for ${input.reference}: expected ${expectedCents}, provider reported ${input.paidAmountCents} — order left pending`);
33
+ return {
34
+ status: 'amount_mismatch',
35
+ orderId: order.id,
36
+ expectedCents,
37
+ paidCents: input.paidAmountCents,
38
+ };
39
+ }
40
+ if (input.paidCurrency &&
41
+ order.currency &&
42
+ input.paidCurrency.toUpperCase() !== order.currency.toUpperCase()) {
43
+ console.error(`[Checkout Confirm] CURRENCY MISMATCH for ${input.reference}: order ${order.currency}, provider ${input.paidCurrency} — order left pending`);
44
+ return {
45
+ status: 'amount_mismatch',
46
+ orderId: order.id,
47
+ expectedCents,
48
+ paidCents: input.paidAmountCents ?? expectedCents,
49
+ };
50
+ }
51
+ // ── Atomic pending → paid claim (exactly one winner) ─────────────────────
52
+ const claimed = await claimPendingOrderPaid(order.id);
53
+ if (!claimed) {
54
+ return { status: 'already_processed', orderId: order.id };
55
+ }
56
+ // ── Side effects: all guarded, never fail the confirmation ───────────────
57
+ if (input.transaction && input.transaction.length > 0) {
58
+ try {
59
+ await appendOrderMetafields(order.id, input.transaction);
60
+ }
61
+ catch (err) {
62
+ console.error('[Checkout Confirm] metafields stamp failed:', err);
63
+ }
64
+ }
65
+ try {
66
+ await sendPaidConfirmationEmail(order.id, input.providerLabel);
67
+ }
68
+ catch (err) {
69
+ console.error('[Checkout Confirm] confirmation email failed:', err);
70
+ }
71
+ return { status: 'confirmed', orderId: order.id };
72
+ }
73
+ /**
74
+ * Build + send the order confirmation from DB state (the order row + its
75
+ * items) — external providers confirm asynchronously, so unlike the manual
76
+ * path there is no in-memory Quote to read from. AWAITED by callers (the
77
+ * serverless-freeze rule): the caller's response must not return before the
78
+ * send resolves.
79
+ */
80
+ async function sendPaidConfirmationEmail(orderId, providerLabel) {
81
+ const order = await findOrderById(orderId);
82
+ if (!order || !order.email)
83
+ return;
84
+ const currency = order.currency ?? 'USD';
85
+ const storeUrl = process.env.NEXT_PUBLIC_APP_URL || '';
86
+ const addr = order.shippingAddress;
87
+ const pickup = !!order.pickupLocationId;
88
+ const emailItems = order.items.map((item) => {
89
+ const attrs = (item.attributes ?? {});
90
+ const variantRef = typeof attrs.variantRef === 'string' ? attrs.variantRef : null;
91
+ return {
92
+ name: item.name,
93
+ quantity: item.quantity,
94
+ // order_items.price is a decimal STRING — exactly what formatPrice wants.
95
+ price: formatPrice(item.price, currency),
96
+ imageUrl: item.image ?? undefined,
97
+ // Configurator lines (non-UUID variant refs) attach their design preview,
98
+ // mirroring the manual + webhook paths (0.24.1).
99
+ attachImage: !!(item.image && variantRef),
100
+ };
101
+ });
102
+ // Every order on this path snapshots a shipping address at create time
103
+ // (delivery = entered address, pickup = the location's, relay = the
104
+ // point's); the empty-string fallback only guards hand-edited rows.
105
+ const emailAddress = {
106
+ name: pickup
107
+ ? `Pickup — ${(order.shippingMethod ?? '').replace(/^Pickup — /, '')}`.trim()
108
+ : order.relay
109
+ ? `Point relais — ${order.relay.name}`
110
+ : `${addr?.firstName ?? ''} ${addr?.lastName ?? ''}`.trim() ||
111
+ order.email.split('@')[0] ||
112
+ 'Customer',
113
+ line1: addr?.line1 ?? '',
114
+ line2: addr?.line2,
115
+ city: addr?.city ?? '',
116
+ state: addr?.state ?? '',
117
+ postalCode: addr?.postalCode ?? '',
118
+ country: addr?.country ?? '',
119
+ };
120
+ const discountCents = order.discountAmount ? Math.round(parseFloat(order.discountAmount) * 100) : 0;
121
+ const shippingCents = Math.round(parseFloat(order.shipping) * 100);
122
+ await sendOrderConfirmation({
123
+ locale: order.locale ?? null,
124
+ to: order.email,
125
+ customerName: addr?.firstName || order.email.split('@')[0] || 'Customer',
126
+ orderNumber: formatOrderNumber(order.id),
127
+ pickup,
128
+ orderDate: formatDate(new Date(order.createdAt)),
129
+ paymentStatus: `Paid — ${providerLabel}`,
130
+ items: emailItems,
131
+ subtotal: formatPrice(order.subtotal, currency),
132
+ discount: discountCents > 0 ? `-${formatPrice(order.discountAmount, currency)}` : undefined,
133
+ discountCode: order.discountCode ?? undefined,
134
+ shippingCost: shippingCents > 0 ? formatPrice(order.shipping, currency) : 'Free',
135
+ tax: formatPrice(order.tax, currency),
136
+ taxBreakdown: order.taxBreakdown && order.taxBreakdown.length > 1
137
+ ? order.taxBreakdown.map((e) => ({
138
+ rate: e.rate,
139
+ amount: formatPrice((e.taxCents / 100).toFixed(2), currency),
140
+ }))
141
+ : undefined,
142
+ total: formatPrice(order.total, currency),
143
+ shippingAddress: emailAddress,
144
+ orderTrackingUrl: `${storeUrl}/account/orders/${order.id}`,
145
+ });
146
+ }
147
+ //# sourceMappingURL=confirm-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-order.js","sourceRoot":"","sources":["../../../src/checkout/server/confirm-order.ts"],"names":[],"mappings":"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"}