@sazito/checkout 0.4.19 → 0.4.21

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 (47) hide show
  1. package/README.md +22 -37
  2. package/dist/chunks/{labels-Cy05dLJx.cjs → labels-BYJQjaT_.cjs} +9 -5
  3. package/dist/chunks/labels-BYJQjaT_.cjs.map +1 -0
  4. package/dist/chunks/{labels-Cysz2BgA.js → labels-Cqrb2MwA.js} +9 -5
  5. package/dist/chunks/labels-Cqrb2MwA.js.map +1 -0
  6. package/dist/chunks/{use-checkout-uWEi8iqK.js → use-checkout-BRDfZp4Z.js} +8 -5
  7. package/dist/chunks/use-checkout-BRDfZp4Z.js.map +1 -0
  8. package/dist/chunks/{use-checkout-wHkKNkbK.cjs → use-checkout-MM-Ld0Ew.cjs} +7 -4
  9. package/dist/chunks/use-checkout-MM-Ld0Ew.cjs.map +1 -0
  10. package/dist/core/index.cjs +3 -1
  11. package/dist/core/index.cjs.map +1 -1
  12. package/dist/core/index.d.cts +18 -4
  13. package/dist/core/index.d.ts +18 -4
  14. package/dist/core/index.js +2 -2
  15. package/dist/next/index.cjs +12 -6
  16. package/dist/next/index.cjs.map +1 -1
  17. package/dist/next/index.d.cts +10 -3
  18. package/dist/next/index.d.ts +10 -3
  19. package/dist/next/index.js +14 -8
  20. package/dist/next/index.js.map +1 -1
  21. package/dist/next/payment-return.cjs +52 -0
  22. package/dist/next/payment-return.cjs.map +1 -1
  23. package/dist/next/payment-return.d.cts +16 -2
  24. package/dist/next/payment-return.d.ts +16 -2
  25. package/dist/next/payment-return.js +51 -1
  26. package/dist/next/payment-return.js.map +1 -1
  27. package/dist/next/server.cjs +10 -0
  28. package/dist/next/server.cjs.map +1 -0
  29. package/dist/next/server.d.cts +33 -0
  30. package/dist/next/server.d.ts +33 -0
  31. package/dist/next/server.js +4 -0
  32. package/dist/next/server.js.map +1 -0
  33. package/dist/react/index.cjs +2 -2
  34. package/dist/react/index.d.cts +3 -2
  35. package/dist/react/index.d.ts +3 -2
  36. package/dist/react/index.js +2 -2
  37. package/dist/server/index.cjs +205 -0
  38. package/dist/server/index.cjs.map +1 -0
  39. package/dist/server/index.d.cts +33 -0
  40. package/dist/server/index.d.ts +33 -0
  41. package/dist/server/index.js +203 -0
  42. package/dist/server/index.js.map +1 -0
  43. package/package.json +30 -2
  44. package/dist/chunks/labels-Cy05dLJx.cjs.map +0 -1
  45. package/dist/chunks/labels-Cysz2BgA.js.map +0 -1
  46. package/dist/chunks/use-checkout-uWEi8iqK.js.map +0 -1
  47. package/dist/chunks/use-checkout-wHkKNkbK.cjs.map +0 -1
@@ -105,7 +105,14 @@ interface CheckoutPaymentReturn {
105
105
  identifier: string;
106
106
  };
107
107
  params: Record<string, string>;
108
+ /**
109
+ * `callback` forwards gateway fields for verification. `status` is emitted
110
+ * by the SDK server handler after it has already verified the gateway POST,
111
+ * so the browser performs only an authoritative status read.
112
+ */
113
+ resolution?: PaymentReturnResolution;
108
114
  }
115
+ type PaymentReturnResolution = 'callback' | 'status';
109
116
  /** Search-param shape exposed by current Next.js App Router pages. */
110
117
  type PaymentReturnSearchParams = Record<string, string | string[] | undefined>;
111
118
  interface PaymentReturnParserOptions {
@@ -259,8 +266,8 @@ interface CheckoutActions {
259
266
  placeOrder(): Promise<void>;
260
267
  /** Rehydrate a failed gateway return and reopen a usable payment step. */
261
268
  retryPayment(): Promise<void>;
262
- /** Resolve a return from the payment gateway (query params from the URL). */
263
- resolvePaymentReturn(params: Record<string, string>): Promise<void>;
269
+ /** Resolve a gateway callback or a server-verified payment status return. */
270
+ resolvePaymentReturn(params: Record<string, string>, resolution?: PaymentReturnResolution): Promise<void>;
264
271
  reset(): void;
265
272
  }
266
273
 
@@ -311,6 +318,13 @@ declare function createBrowserEffectExecutor(config?: CheckoutConfig): CheckoutE
311
318
  /** A no-op executor for SSR / tests. */
312
319
  declare const noopEffectExecutor: CheckoutEffectExecutor;
313
320
 
321
+ declare const SAZITO_PAYMENT_STATUS_QUERY: {
322
+ readonly resolution: "sazito_payment_return";
323
+ readonly paymentId: "sazito_payment_id";
324
+ readonly paymentIdentifier: "sazito_payment_identifier";
325
+ };
326
+ /** Remove internal payment-return credentials from the visible URL after they are read. */
327
+ declare function stripPaymentStatusReturn(url: string | URL): string | undefined;
314
328
  declare const SAZITO_PAYMENT_RESULT_MARKERS: readonly ["mellatpaymentresult", "pecpaymentresult", "uppaymentresult", "seppaymentresult", "vandarpaymentresult", "yourgatepaymentresult", "bazarpaymentresult", "zifypaymentresult", "zibalpaymentresult", "snapppaypaymentresult", "torobpaypaymentresult", "ghestapaypaymentresult", "azkipaymentresult", "digipaypaymentresult", "greenpaypaymentresult", "novapaypaymentresult", "zarinpluspaymentresult", "tomanpaymentresult", "tarapaymentresult", "ozonpaymentresult", "millipaypaymentresult", "ayriapaymentresult", "sadadpaymentresult", "freepaymentresult", "paymentinplaceresult", "cardtocardpaymentresult", "zarinpalpaymentresult", "directpayresult", "paypingpaymentresult", "podpaymentresult", "sabinpaymentresult", "firoozepaymentresult", "technopaypaymentresult", "buywithdigikalaresult"];
315
329
  /**
316
330
  * Parse Sazito's nested payment callback path into checkout-ready data.
@@ -538,5 +552,5 @@ declare function selectSummary(invoice: Invoice | null): CheckoutSummary;
538
552
  /** Items that don't require shipping (digital), for display in the shipping step. */
539
553
  declare function selectDigitalItems(invoice: Invoice | null, groups: ShippingGroup[], applicable: ApplicableShippingMethods | null): InvoiceItem[];
540
554
 
541
- export { SAZITO_PAYMENT_RESULT_MARKERS, addressFormFromInvoice, buildShippingAssignments, classifyAppliedDiscount, createBrowserEffectExecutor, createCheckoutEngine, createSdkBinding, createStore, defaultCurrencyLabel, deriveShippingGroups, emptyAddressForm, formatMoney, formatNumber, formatPercent, formatPrice, fromSdkError, isAddressComplete, isAddressDirty, isDigitalServiceGroup, isShippingComplete, isValidIranianMobile, isValidIranianPhone, makeError, makeEvent, messageForCode, noopEffectExecutor, normalizeIranianPhone, parsePaymentReturn, parsePaymentReturnUrl, paymentMethodInfo, paymentMethodLabel, selectDigitalItems, selectSummary, sortCartItemsNewestFirst, strings, toEnglishDigits, toPersianDigits };
542
- export type { AddressFormValues, AppliedDiscount, CheckoutActions, CheckoutCity, CheckoutConfig, CheckoutCredentials, CheckoutDirection, CheckoutEffect, CheckoutEffectExecutor, CheckoutEngine, CheckoutEngineOptions, CheckoutError, CheckoutErrorCode, CheckoutEvent, CheckoutEventName, CheckoutFlags, CheckoutLocale, CheckoutPaymentReturn, CheckoutRegion, CheckoutResult, CheckoutResultStatus, CheckoutSdkBinding, CheckoutState, CheckoutStatus, CheckoutStep, CheckoutSummary, CheckoutTheme, DiscountKind, PaymentMethodInfo, PaymentMethodKind, PaymentReturnParserOptions, PaymentReturnSearchParams, ShippingGroup, Store, Strings, SummaryLine, SummaryLineKey };
555
+ export { SAZITO_PAYMENT_RESULT_MARKERS, SAZITO_PAYMENT_STATUS_QUERY, addressFormFromInvoice, buildShippingAssignments, classifyAppliedDiscount, createBrowserEffectExecutor, createCheckoutEngine, createSdkBinding, createStore, defaultCurrencyLabel, deriveShippingGroups, emptyAddressForm, formatMoney, formatNumber, formatPercent, formatPrice, fromSdkError, isAddressComplete, isAddressDirty, isDigitalServiceGroup, isShippingComplete, isValidIranianMobile, isValidIranianPhone, makeError, makeEvent, messageForCode, noopEffectExecutor, normalizeIranianPhone, parsePaymentReturn, parsePaymentReturnUrl, paymentMethodInfo, paymentMethodLabel, selectDigitalItems, selectSummary, sortCartItemsNewestFirst, strings, stripPaymentStatusReturn, toEnglishDigits, toPersianDigits };
556
+ export type { AddressFormValues, AppliedDiscount, CheckoutActions, CheckoutCity, CheckoutConfig, CheckoutCredentials, CheckoutDirection, CheckoutEffect, CheckoutEffectExecutor, CheckoutEngine, CheckoutEngineOptions, CheckoutError, CheckoutErrorCode, CheckoutEvent, CheckoutEventName, CheckoutFlags, CheckoutLocale, CheckoutPaymentReturn, CheckoutRegion, CheckoutResult, CheckoutResultStatus, CheckoutSdkBinding, CheckoutState, CheckoutStatus, CheckoutStep, CheckoutSummary, CheckoutTheme, DiscountKind, PaymentMethodInfo, PaymentMethodKind, PaymentReturnParserOptions, PaymentReturnResolution, PaymentReturnSearchParams, ShippingGroup, Store, Strings, SummaryLine, SummaryLineKey };
@@ -1,4 +1,4 @@
1
- export { a as addressFormFromInvoice, b as buildShippingAssignments, c as classifyAppliedDiscount, d as createBrowserEffectExecutor, e as createCheckoutEngine, f as createSdkBinding, g as createStore, h as defaultCurrencyLabel, i as deriveShippingGroups, j as emptyAddressForm, k as formatMoney, l as formatNumber, m as formatPercent, n as formatPrice, o as fromSdkError, p as isAddressComplete, q as isAddressDirty, r as isDigitalServiceGroup, s as isShippingComplete, t as isValidIranianMobile, u as isValidIranianPhone, v as makeError, w as makeEvent, x as messageForCode, y as noopEffectExecutor, z as normalizeIranianPhone, A as paymentMethodInfo, B as paymentMethodLabel, C as selectDigitalItems, D as selectSummary, E as sortCartItemsNewestFirst, F as strings, G as toEnglishDigits, H as toPersianDigits } from '../chunks/labels-Cysz2BgA.js';
2
- export { SAZITO_PAYMENT_RESULT_MARKERS, parsePaymentReturn, parsePaymentReturnUrl } from '../next/payment-return.js';
1
+ export { a as addressFormFromInvoice, b as buildShippingAssignments, c as classifyAppliedDiscount, d as createBrowserEffectExecutor, e as createCheckoutEngine, f as createSdkBinding, g as createStore, h as defaultCurrencyLabel, i as deriveShippingGroups, j as emptyAddressForm, k as formatMoney, l as formatNumber, m as formatPercent, n as formatPrice, o as fromSdkError, p as isAddressComplete, q as isAddressDirty, r as isDigitalServiceGroup, s as isShippingComplete, t as isValidIranianMobile, u as isValidIranianPhone, v as makeError, w as makeEvent, x as messageForCode, y as noopEffectExecutor, z as normalizeIranianPhone, A as paymentMethodInfo, B as paymentMethodLabel, C as selectDigitalItems, D as selectSummary, E as sortCartItemsNewestFirst, F as strings, G as toEnglishDigits, H as toPersianDigits } from '../chunks/labels-Cqrb2MwA.js';
2
+ export { SAZITO_PAYMENT_RESULT_MARKERS, SAZITO_PAYMENT_STATUS_QUERY, parsePaymentReturn, parsePaymentReturnUrl, stripPaymentStatusReturn } from '../next/payment-return.js';
3
3
  import '@sazito/client-sdk';
4
4
  //# sourceMappingURL=index.js.map
@@ -3,8 +3,8 @@
3
3
 
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var react = require('react');
6
- var useCheckout = require('../chunks/use-checkout-wHkKNkbK.cjs');
7
- var labels = require('../chunks/labels-Cy05dLJx.cjs');
6
+ var useCheckout = require('../chunks/use-checkout-MM-Ld0Ew.cjs');
7
+ var labels = require('../chunks/labels-BYJQjaT_.cjs');
8
8
  var next_paymentReturn = require('./payment-return.cjs');
9
9
  require('@sazito/client-sdk');
10
10
 
@@ -935,14 +935,15 @@ function SazitoCheckoutPage({ credentials, config, paymentReturn, paymentReturnP
935
935
  : undefined;
936
936
  const resolvedPaymentReturn = paymentReturn ?? detectedPaymentReturn;
937
937
  const returnParams = resolvedPaymentReturn?.params ?? paymentReturnParams;
938
+ const returnResolution = resolvedPaymentReturn?.resolution ?? 'callback';
938
939
  const isReturn = returnParams != null;
939
940
  const checkoutCredentials = resolvedPaymentReturn
940
941
  ? { ...credentials, payment: resolvedPaymentReturn.payment }
941
942
  : credentials;
942
943
  const client = useCheckout.useSazitoClient();
943
- return (jsxRuntime.jsxs(useCheckout.CheckoutProvider, { client: client, credentials: checkoutCredentials, config: config, autoStart: !isReturn, children: [returnParams ? jsxRuntime.jsx(ResolveReturn, { params: returnParams }) : null, jsxRuntime.jsx(SazitoCheckout, { theme: config?.theme, continueShoppingUrl: config?.continueShoppingUrl, className: className, renderNextButton: renderNextButton, renderBackButton: renderBackButton, renderEmptyCart: renderEmptyCart, renderResult: renderResult, emptyCart: emptyCart })] }));
944
+ return (jsxRuntime.jsxs(useCheckout.CheckoutProvider, { client: client, credentials: checkoutCredentials, config: config, autoStart: !isReturn, children: [returnParams ? (jsxRuntime.jsx(ResolveReturn, { params: returnParams, resolution: returnResolution })) : null, jsxRuntime.jsx(SazitoCheckout, { theme: config?.theme, continueShoppingUrl: config?.continueShoppingUrl, className: className, renderNextButton: renderNextButton, renderBackButton: renderBackButton, renderEmptyCart: renderEmptyCart, renderResult: renderResult, emptyCart: emptyCart })] }));
944
945
  }
945
- function ResolveReturn({ params }) {
946
+ function ResolveReturn({ params, resolution }) {
946
947
  const { actions } = useCheckout.useCheckout();
947
948
  const resolvedKey = react.useRef(null);
948
949
  const paramsKey = JSON.stringify(Object.entries(params).sort(([a], [b]) => a.localeCompare(b)));
@@ -950,8 +951,13 @@ function ResolveReturn({ params }) {
950
951
  if (resolvedKey.current === paramsKey)
951
952
  return;
952
953
  resolvedKey.current = paramsKey;
953
- void actions.resolvePaymentReturn(params);
954
- }, [actions, params, paramsKey]);
954
+ void actions.resolvePaymentReturn(params, resolution);
955
+ if (typeof window !== 'undefined') {
956
+ const cleanUrl = next_paymentReturn.stripPaymentStatusReturn(window.location.href);
957
+ if (cleanUrl)
958
+ window.history.replaceState(window.history.state, '', cleanUrl);
959
+ }
960
+ }, [actions, params, paramsKey, resolution]);
955
961
  return null;
956
962
  }
957
963