@sazito/checkout 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +46 -1
  2. package/dist/chunks/{labels-CnPllzhT.cjs → labels-DlZCs2z3.cjs} +24 -10
  3. package/dist/chunks/labels-DlZCs2z3.cjs.map +1 -0
  4. package/dist/chunks/{labels-e8w4zRbg.js → labels-DxIkDijU.js} +24 -10
  5. package/dist/chunks/labels-DxIkDijU.js.map +1 -0
  6. package/dist/chunks/{use-checkout-DPtLgxlA.cjs → use-checkout-BPcxdj0A.cjs} +31 -10
  7. package/dist/chunks/use-checkout-BPcxdj0A.cjs.map +1 -0
  8. package/dist/chunks/{use-checkout-BM810__v.js → use-checkout-tQfM_-7X.js} +31 -10
  9. package/dist/chunks/use-checkout-tQfM_-7X.js.map +1 -0
  10. package/dist/core/index.cjs +2 -1
  11. package/dist/core/index.cjs.map +1 -1
  12. package/dist/core/index.d.cts +14 -2
  13. package/dist/core/index.d.ts +14 -2
  14. package/dist/core/index.js +2 -2
  15. package/dist/next/index.cjs +48 -11
  16. package/dist/next/index.cjs.map +1 -1
  17. package/dist/next/index.d.cts +26 -4
  18. package/dist/next/index.d.ts +26 -4
  19. package/dist/next/index.js +49 -12
  20. package/dist/next/index.js.map +1 -1
  21. package/dist/next/payment-return.cjs +40 -0
  22. package/dist/next/payment-return.cjs.map +1 -1
  23. package/dist/next/payment-return.d.cts +7 -1
  24. package/dist/next/payment-return.d.ts +7 -1
  25. package/dist/next/payment-return.js +40 -1
  26. package/dist/next/payment-return.js.map +1 -1
  27. package/dist/react/index.cjs +3 -2
  28. package/dist/react/index.cjs.map +1 -1
  29. package/dist/react/index.d.cts +6 -0
  30. package/dist/react/index.d.ts +6 -0
  31. package/dist/react/index.js +3 -2
  32. package/dist/react/index.js.map +1 -1
  33. package/dist/styles.css +263 -5
  34. package/package.json +1 -1
  35. package/dist/chunks/labels-CnPllzhT.cjs.map +0 -1
  36. package/dist/chunks/labels-e8w4zRbg.js.map +0 -1
  37. package/dist/chunks/use-checkout-BM810__v.js.map +0 -1
  38. package/dist/chunks/use-checkout-DPtLgxlA.cjs.map +0 -1
package/README.md CHANGED
@@ -97,6 +97,15 @@ export default async function CheckoutPage({
97
97
  `paymentReturnParams` remains available for existing query-only callback
98
98
  integrations.
99
99
 
100
+ As a fallback, `SazitoCheckoutPage` also recognizes this callback suffix from
101
+ the browser URL when `paymentReturn` is omitted. The catch-all route is still
102
+ required so Next.js serves the callback URL, and explicit server parsing remains
103
+ recommended because it validates the route before rendering.
104
+
105
+ The same browser fallback runs in `CheckoutProvider`, so storefronts that
106
+ compose `CheckoutProvider` and `SazitoCheckout` directly also resolve the
107
+ payment return instead of bootstrapping the cart step.
108
+
100
109
  ### Theme variables
101
110
 
102
111
  `config.theme` (or the `theme` prop on `SazitoCheckout`) accepts:
@@ -175,6 +184,40 @@ The built-in empty-cart screen can be customized without replacing its layout:
175
184
  For complete control, use `renderEmptyCart`; it receives the resolved title,
176
185
  description, action label, icon, and continue-shopping URL.
177
186
 
187
+ The post-payment screen has the same replacement path through `renderResult`:
188
+
189
+ ```tsx
190
+ <SazitoCheckoutPage
191
+ config={{ continueShoppingUrl: '/products' }}
192
+ renderResult={({ status, order, result, continueShoppingUrl, onRetry }) => (
193
+ <StorefrontOrderResult
194
+ status={status}
195
+ order={order}
196
+ message={result?.message}
197
+ continueHref={continueShoppingUrl}
198
+ onRetry={onRetry}
199
+ />
200
+ )}
201
+ />
202
+ ```
203
+
204
+ The custom renderer receives the normalized result status, finalized order,
205
+ continue-shopping URL, and a retry action. Payment verification and pending
206
+ polling remain managed by the checkout engine.
207
+
208
+ | `RenderResultProps` field | Type | Meaning |
209
+ |---|---|---|
210
+ | `result` | `CheckoutResult \| null` | Full result, backend message, and optional order |
211
+ | `status` | `success \| failed \| pending \| stock_violated` | Normalized result status |
212
+ | `order` | `Order \| undefined` | Finalized order convenience reference |
213
+ | `continueShoppingUrl` | `string \| undefined` | Configured storefront destination |
214
+ | `onRetry` | `() => void` | Return to the payment step |
215
+
216
+ `renderResult` is called only on the result step. It replaces the built-in
217
+ `ResultStep`, while checkout verification, polling, the root theme/direction,
218
+ the stepper, and the `.szc-result-wrap` layout remain active. The same prop is
219
+ available on `SazitoCheckout` when composing `CheckoutProvider` manually.
220
+
178
221
  ## Flow (v1 scope)
179
222
 
180
223
  4 states — `cart → shipping → payment → result`:
@@ -184,7 +227,9 @@ description, action label, icon, and continue-shopping URL.
184
227
  switching** for physical items; digital items skip shipping.
185
228
  - **Payment** — payment-method selection + discount code; the **Finish purchase**
186
229
  (پایان خرید) CTA places the order directly (redirect / POST / pending-poll).
187
- - **Result** — success / failed / pending, with order reference.
230
+ - **Result** — success / failed / pending, with the order code, public ID,
231
+ shipping methods, purchased items, quantities, line totals, and invoice totals
232
+ whenever the payment response includes an order.
188
233
 
189
234
  Deferred (post-v1): card-to-card upload, invoice dynamic forms, wallet credit
190
235
  UI (engine keeps `toggleCredit`), multi-rate item reallocation, the legacy
@@ -867,7 +867,7 @@ function createCheckoutEngine(options) {
867
867
  fields: stringifyFields(action.payload)
868
868
  });
869
869
  return;
870
- case 'showOrder':
870
+ case 'show_order':
871
871
  set({
872
872
  step: 'result',
873
873
  status: 'idle',
@@ -876,6 +876,8 @@ function createCheckoutEngine(options) {
876
876
  emit('payment_succeeded', { step: 'result' });
877
877
  return;
878
878
  case 'FAIL':
879
+ case 'payment_fail_error':
880
+ case 'show_error':
879
881
  set({
880
882
  step: 'result',
881
883
  status: 'idle',
@@ -892,11 +894,16 @@ function createCheckoutEngine(options) {
892
894
  setError(makeError('stock_violated', get().locale, 'result'));
893
895
  return;
894
896
  case 'pending':
895
- set({ step: 'result', status: 'polling', result: { status: 'pending' } });
897
+ set({
898
+ step: 'result',
899
+ status: 'polling',
900
+ result: { status: 'pending', order: action.order, message: action.message }
901
+ });
896
902
  emit('payment_pending', { step: 'result' });
897
903
  void pollPending();
898
904
  return;
899
905
  case 'UPLOAD':
906
+ case 'show_otp_modal':
900
907
  // Card-to-card upload is out of scope for v1; surface a clear failure.
901
908
  set({
902
909
  step: 'result',
@@ -904,11 +911,6 @@ function createCheckoutEngine(options) {
904
911
  result: { status: 'failed', message: action.message }
905
912
  });
906
913
  return;
907
- default:
908
- // Unknown/unhandled action from the gateway — never stall silently.
909
- console.error('[Sazito Checkout] Unhandled payment action:', action);
910
- failResult(action.message || makeError('payment_failed', get().locale, 'result').message);
911
- return;
912
914
  }
913
915
  }
914
916
  async function pollPending() {
@@ -1613,7 +1615,13 @@ const fa = {
1613
1615
  paymentFailed: 'پرداخت ناموفق بود',
1614
1616
  paymentPending: 'در حال بررسی پرداخت',
1615
1617
  paymentPendingHint: 'پرداخت شما در حال پردازش است. لطفاً صبر کنید.',
1616
- orderNumber: 'شماره سفارش',
1618
+ orderNumber: 'کد سفارش',
1619
+ orderId: 'شناسه سفارش',
1620
+ orderConfirmedHint: 'سفارش شما با موفقیت ثبت شد.',
1621
+ orderDetails: 'جزئیات سفارش',
1622
+ orderItems: 'اقلام سفارش',
1623
+ product: 'محصول',
1624
+ lineTotal: 'جمع قیمت',
1617
1625
  tryAgain: 'تلاش دوباره',
1618
1626
  loading: 'در حال بارگذاری…',
1619
1627
  processing: 'در حال پردازش…',
@@ -1694,7 +1702,13 @@ const en = {
1694
1702
  paymentFailed: 'Payment failed',
1695
1703
  paymentPending: 'Verifying payment',
1696
1704
  paymentPendingHint: 'Your payment is being processed. Please wait.',
1697
- orderNumber: 'Order number',
1705
+ orderNumber: 'Order code',
1706
+ orderId: 'Order ID',
1707
+ orderConfirmedHint: 'Your order is confirmed. Its details and purchased items are shown below.',
1708
+ orderDetails: 'Order details',
1709
+ orderItems: 'Order items',
1710
+ product: 'Product',
1711
+ lineTotal: 'Line total',
1698
1712
  tryAgain: 'Try again',
1699
1713
  loading: 'Loading…',
1700
1714
  processing: 'Processing…',
@@ -1781,4 +1795,4 @@ exports.sortCartItemsNewestFirst = sortCartItemsNewestFirst;
1781
1795
  exports.strings = strings;
1782
1796
  exports.toEnglishDigits = toEnglishDigits;
1783
1797
  exports.toPersianDigits = toPersianDigits;
1784
- //# sourceMappingURL=labels-CnPllzhT.cjs.map
1798
+ //# sourceMappingURL=labels-DlZCs2z3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels-DlZCs2z3.cjs","sources":["../../src/core/store.ts","../../src/core/sdk-binding.ts","../../src/core/errors.ts","../../src/core/events.ts","../../src/core/effects.ts","../../src/core/selectors.ts","../../src/core/orchestrator.ts","../../src/core/format.ts","../../src/core/labels.ts"],"sourcesContent":["/**\n * Minimal zero-dependency observable store.\n *\n * `getState` returns the current immutable snapshot; `setState` shallow-merges\n * a partial (or applies an updater) and notifies subscribers. Designed to plug\n * straight into React's `useSyncExternalStore`.\n */\nexport interface Store<T> {\n getState(): T;\n setState(partial: Partial<T> | ((prev: T) => Partial<T>)): void;\n subscribe(listener: () => void): () => void;\n batch<R>(callback: () => R): R;\n}\n\nexport function createStore<T extends object>(initialState: T): Store<T> {\n let state = initialState;\n const listeners = new Set<() => void>();\n let batchDepth = 0;\n let pendingNotification = false;\n\n function notify(): void {\n if (batchDepth > 0) {\n pendingNotification = true;\n return;\n }\n listeners.forEach((listener) => listener());\n }\n\n function finishBatch(): void {\n batchDepth -= 1;\n if (batchDepth === 0 && pendingNotification) {\n pendingNotification = false;\n listeners.forEach((listener) => listener());\n }\n }\n\n return {\n getState() {\n return state;\n },\n setState(partial) {\n const patch = typeof partial === 'function' ? partial(state) : partial;\n state = { ...state, ...patch };\n notify();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n batch<R>(callback: () => R): R {\n batchDepth += 1;\n try {\n const result = callback();\n if (result && typeof (result as unknown as PromiseLike<unknown>).then === 'function') {\n return Promise.resolve(result).finally(finishBatch) as R;\n }\n finishBatch();\n return result;\n } catch (error) {\n finishBatch();\n throw error;\n }\n }\n };\n}\n","import {\n CredentialsManager,\n type SazitoClient\n} from '@sazito/client-sdk';\nimport type { CheckoutCredentials, CheckoutEngineOptions } from './types';\n\nexport interface CheckoutSdkBinding {\n client: SazitoClient;\n credentials: CredentialsManager;\n hasCart(): boolean;\n hasInvoice(): boolean;\n}\n\nexport function createSdkBinding(options: CheckoutEngineOptions): CheckoutSdkBinding {\n const client = options.client as SazitoClient | undefined;\n\n if (!client) {\n throw new Error(\n '[@sazito/checkout] No client found. Wrap your app with <SazitoProvider client={sazito}> or pass a `client` prop to CheckoutProvider.'\n );\n }\n\n const credentials = getClientCredentialsManager(client) ?? new CredentialsManager();\n seedCredentials(credentials, options.credentials);\n\n return {\n client,\n credentials,\n hasCart() {\n return credentials.getCartCredentials() !== null;\n },\n hasInvoice() {\n return credentials.getInvoiceCredentials() !== null;\n }\n };\n}\n\nfunction getClientCredentialsManager(client: SazitoClient): CredentialsManager | undefined {\n const candidate = client as unknown as {\n getCredentialsManager?: () => CredentialsManager;\n credentialsManager?: CredentialsManager;\n };\n\n if (typeof candidate.getCredentialsManager === 'function') {\n return candidate.getCredentialsManager();\n }\n\n if (candidate.credentialsManager instanceof CredentialsManager) {\n return candidate.credentialsManager;\n }\n\n return undefined;\n}\n\nfunction seedCredentials(\n credentials: CredentialsManager,\n seed?: CheckoutCredentials\n): void {\n if (!seed) return;\n if (seed.cart?.identifier) {\n credentials.setCartCredentials({ identifier: seed.cart.identifier });\n }\n if (seed.invoice?.identifier && typeof seed.invoice.id === 'number') {\n credentials.setInvoiceCredentials({ id: seed.invoice.id, identifier: seed.invoice.identifier });\n }\n if (seed.payment?.identifier && typeof seed.payment.id === 'number') {\n credentials.setPaymentCredentials({ id: seed.payment.id, identifier: seed.payment.identifier });\n }\n}\n","/**\n * Error taxonomy + mapping from SDK responses to typed checkout errors.\n */\nimport type { SazitoResponse } from '@sazito/client-sdk';\nimport type { CheckoutError, CheckoutErrorCode, CheckoutLocale, CheckoutStep } from './types';\n\ntype SdkError = NonNullable<SazitoResponse<unknown>['error']>;\n\n/** Map an HTTP status (per SALES_FLOW docs) to a checkout error code. */\nfunction codeForStatus(status?: number): CheckoutErrorCode | undefined {\n switch (status) {\n case 416:\n return 'min_basket';\n case 418:\n return 'rate_limited';\n case 422:\n return 'cart_invalid';\n case 423:\n return 'invoice_locked';\n default:\n return undefined;\n }\n}\n\nconst MESSAGES: Record<CheckoutErrorCode, Record<CheckoutLocale, string>> = {\n no_cart: {\n fa: 'سبد خریدی یافت نشد. لطفاً ابتدا یک سبد خرید ایجاد کنید.',\n en: 'No cart found. Please create a cart first.'\n },\n no_invoice: {\n fa: 'فاکتوری یافت نشد.',\n en: 'No invoice found.'\n },\n min_basket: {\n fa: 'حداقل مبلغ سبد خرید رعایت نشده است.',\n en: 'Minimum basket amount not reached.'\n },\n rate_limited: {\n fa: 'درخواست‌های زیادی ارسال شد. کمی صبر کنید.',\n en: 'Too many requests. Please wait a moment.'\n },\n cart_invalid: {\n fa: 'سبد خرید نامعتبر است و بازنشانی شد.',\n en: 'Cart is invalid and was reset.'\n },\n invoice_locked: {\n fa: 'فاکتور قفل شده است. لطفاً صفحه را بازخوانی کنید.',\n en: 'Invoice is locked. Please reload the page.'\n },\n stock_violated: {\n fa: 'موجودی برخی از محصولات سبد خرید رزرو شده یا کافی نیست.',\n en: 'Some products are out of stock or reserved.'\n },\n shipping_required: {\n fa: 'لطفاً روش ارسال را انتخاب کنید.',\n en: 'Please select a shipping method.'\n },\n address_required: {\n fa: 'لطفاً اطلاعات ارسال را کامل وارد کنید.',\n en: 'Please complete the shipping information.'\n },\n payment_failed: {\n fa: 'پرداخت ناموفق بود. لطفاً دوباره تلاش کنید.',\n en: 'Payment failed. Please try again.'\n },\n network: {\n fa: 'خطای ارتباط با سرور. لطفاً دوباره تلاش کنید.',\n en: 'Network error. Please try again.'\n },\n validation: {\n fa: 'اطلاعات واردشده نامعتبر است.',\n en: 'The provided information is invalid.'\n },\n unknown: {\n fa: 'خطای ناشناخته‌ای رخ داد.',\n en: 'An unexpected error occurred.'\n }\n};\n\nexport function messageForCode(code: CheckoutErrorCode, locale: CheckoutLocale): string {\n return MESSAGES[code][locale];\n}\n\nexport function fromSdkError(\n error: SdkError,\n locale: CheckoutLocale,\n step?: CheckoutStep\n): CheckoutError {\n const code =\n (error.status === 404 && step === 'cart' ? 'no_cart' : undefined) ??\n (error.status === 404 && step === 'shipping' ? 'no_invoice' : undefined) ??\n (error.type === 'validation' && step === 'cart' ? 'no_cart' : undefined) ??\n codeForStatus(error.status) ??\n (error.type === 'network' ? 'network' : error.type === 'validation' ? 'validation' : 'unknown');\n\n // Prefer the server message when present, otherwise the localized default.\n const message = error.message?.trim() || messageForCode(code, locale);\n return { message, code, status: error.status, step };\n}\n\nexport function makeError(\n code: CheckoutErrorCode,\n locale: CheckoutLocale,\n step?: CheckoutStep\n): CheckoutError {\n return { message: messageForCode(code, locale), code, step };\n}\n","/**\n * Typed event bus helpers.\n */\nimport type { CheckoutEvent, CheckoutEventName, CheckoutStep } from './types';\n\nexport function makeEvent(\n name: CheckoutEventName,\n data?: { step?: CheckoutStep; value?: number; metadata?: Record<string, unknown> }\n): CheckoutEvent {\n return {\n name,\n step: data?.step,\n value: data?.value,\n metadata: data?.metadata,\n timestamp: Date.now()\n };\n}\n","/**\n * Side-effect types + the default browser executor.\n *\n * The engine never touches the DOM directly; it emits effects and a host-\n * provided executor performs them. This keeps the engine SSR-safe and testable.\n */\nimport type { CheckoutConfig, CheckoutEffect, CheckoutEffectExecutor } from './types';\n\n/**\n * Performs a gateway POST by building and submitting a hidden HTML form,\n * matching the legacy `action: 'POST'` payment behavior.\n */\nfunction submitPostForm(url: string, fields: Record<string, string>): void {\n if (typeof document === 'undefined') {\n return;\n }\n const form = document.createElement('form');\n form.method = 'POST';\n form.action = url;\n form.style.display = 'none';\n\n Object.entries(fields).forEach(([name, value]) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = name;\n input.value = value == null ? '' : String(value);\n form.appendChild(input);\n });\n\n document.body.appendChild(form);\n form.submit();\n}\n\n/**\n * Build the default browser executor. `onEvent` (from config) receives `emit`\n * effects so analytics adapters can subscribe.\n */\nexport function createBrowserEffectExecutor(config?: CheckoutConfig): CheckoutEffectExecutor {\n return (effect: CheckoutEffect) => {\n switch (effect.type) {\n case 'redirect':\n if (typeof window !== 'undefined') {\n window.location.href = effect.url;\n }\n return;\n case 'post-form':\n submitPostForm(effect.url, effect.fields);\n return;\n case 'emit':\n config?.onEvent?.(effect.event);\n return;\n }\n };\n}\n\n/** A no-op executor for SSR / tests. */\nexport const noopEffectExecutor: CheckoutEffectExecutor = () => {};\n","/**\n * Pure derivations over invoice / shipping data: shipping groups, summary\n * lines, address form mapping and validation. No SDK calls, no side-effects.\n */\nimport type {\n AddressFormValues,\n ApplicableShippingMethods,\n AppliedDiscount,\n CartProduct,\n CheckoutRegion,\n Invoice,\n InvoiceItem,\n InvoiceShippingAddress,\n ShippingAddress,\n ShippingAssignment,\n ShippingGroup,\n ShippingRate\n} from './types';\n\nconst idStr = (value: number | string): string => String(value);\n\nfunction cartItemCreatedAt(item: CartProduct): number | null {\n if (!item.createdAt) return null;\n const timestamp = Date.parse(item.createdAt);\n return Number.isFinite(timestamp) ? timestamp : null;\n}\n\n/** Return cart lines newest-first without mutating SDK state. */\nexport function sortCartItemsNewestFirst(items: CartProduct[]): CartProduct[] {\n return [...items].sort((a, b) => {\n const aCreatedAt = cartItemCreatedAt(a);\n const bCreatedAt = cartItemCreatedAt(b);\n if (aCreatedAt != null || bCreatedAt != null) {\n if (aCreatedAt == null) return 1;\n if (bCreatedAt == null) return -1;\n if (aCreatedAt !== bCreatedAt) return bCreatedAt - aCreatedAt;\n }\n\n const aId = Number(a.id);\n const bId = Number(b.id);\n return Number.isFinite(aId) && Number.isFinite(bId) ? bId - aId : 0;\n });\n}\n\nexport function emptyAddressForm(): AddressFormValues {\n return {\n firstName: '',\n lastName: '',\n mobilePhone: '',\n email: '',\n phoneNumber: '',\n regionId: null,\n cityId: null,\n postalCode: '',\n address: '',\n description: ''\n };\n}\n\n/**\n * After regions load, the city ID stored in the invoice address may not match\n * any city in the regions list (different ID schemes). Try to match by city\n * name; if no match, reset cityId so the user can pick again.\n */\nexport function reconcileAddressWithRegions(\n form: AddressFormValues,\n regions: CheckoutRegion[],\n savedCityName?: string\n): AddressFormValues {\n if (form.regionId == null) return form;\n const region = regions.find((r) => r.id === form.regionId);\n if (!region) return { ...form, regionId: null, cityId: null };\n if (form.cityId != null && region.cities.some((c) => c.id === form.cityId)) {\n return form; // already valid\n }\n if (savedCityName) {\n const match = region.cities.find((c) => c.name === savedCityName);\n if (match) return { ...form, cityId: match.id };\n }\n return { ...form, cityId: null };\n}\n\n/* Accepts both saved-address shapes: standalone addresses carry `city` at the\n top level, invoice addresses nest it under `region.city`. */\nexport function addressFormFromSavedAddress(\n addr: InvoiceShippingAddress | ShippingAddress | null | undefined\n): AddressFormValues {\n const base = emptyAddressForm();\n if (!addr) {\n return base;\n }\n const nestedCity = (addr as InvoiceShippingAddress).region?.city;\n const topLevelCity = (addr as ShippingAddress).city;\n return {\n firstName: addr.firstName ?? '',\n lastName: addr.lastName ?? '',\n mobilePhone: addr.mobilePhone ?? '',\n email: addr.email ?? '',\n phoneNumber: addr.phoneNumber ?? '',\n regionId: addr.region?.id ?? null,\n cityId: nestedCity?.id ?? topLevelCity?.id ?? null,\n postalCode: addr.postalCode ?? '',\n address: addr.address ?? '',\n description: addr.description ?? ''\n };\n}\n\nexport function addressFormFromInvoice(invoice: Invoice | null): AddressFormValues {\n return addressFormFromSavedAddress(invoice?.shippingAddress);\n}\n\n/** City name of a saved address regardless of shape — used to reconcile\n region/city ids against the loaded regions list. */\nexport function savedAddressCityName(\n addr: InvoiceShippingAddress | ShippingAddress | null | undefined\n): string | undefined {\n if (!addr) return undefined;\n return (\n (addr as InvoiceShippingAddress).region?.city?.name ??\n (addr as ShippingAddress).city?.name\n );\n}\n\nexport function isAddressComplete(\n form: AddressFormValues,\n needsShipping: boolean,\n postalCodeMandatory = false,\n emailMandatory = false\n): boolean {\n const hasContact =\n form.firstName.trim() !== '' &&\n form.lastName.trim() !== '' &&\n form.mobilePhone.trim() !== '' &&\n (!emailMandatory || form.email.trim() !== '');\n if (!needsShipping) {\n return hasContact;\n }\n return (\n hasContact &&\n form.regionId != null &&\n form.cityId != null &&\n (!postalCodeMandatory || form.postalCode.trim() !== '') &&\n form.address.trim() !== ''\n );\n}\n\n/** Has the form diverged from what's saved on the invoice? */\nexport function isAddressDirty(form: AddressFormValues, invoice: Invoice | null): boolean {\n const saved = addressFormFromInvoice(invoice);\n return (Object.keys(form) as Array<keyof AddressFormValues>).some(\n (key) => form[key] !== saved[key]\n );\n}\n\nfunction uniqueRates(rates: ShippingRate[]): ShippingRate[] {\n const seen = new Set<number>();\n const out: ShippingRate[] = [];\n for (const rate of rates) {\n if (!seen.has(rate.id)) {\n seen.add(rate.id);\n out.push(rate);\n }\n }\n return out;\n}\n\nfunction isDigitalServiceLabel(value: string | undefined): boolean {\n if (!value) return false;\n const normalized = value.trim().toLocaleLowerCase('en-US');\n return (\n normalized.includes('digital') ||\n normalized.includes('service') ||\n normalized.includes('دیجیتال') ||\n normalized.includes('خدمات') ||\n normalized.includes('خدمت')\n );\n}\n\nfunction isDigitalServiceItem(item: InvoiceItem): boolean {\n return isDigitalServiceLabel(item.productType);\n}\n\n/** True for the API's automatic digital/service delivery group. */\nexport function isDigitalServiceGroup(group: ShippingGroup): boolean {\n if (isDigitalServiceLabel(group.key) || isDigitalServiceLabel(group.title)) {\n return true;\n }\n const ratesAreDigitalService =\n group.rates.length > 0 &&\n group.rates.every((rate) =>\n isDigitalServiceLabel(rate.type) || isDigitalServiceLabel(rate.name)\n );\n return ratesAreDigitalService || (\n group.items.length > 0 && group.items.every(isDigitalServiceItem)\n );\n}\n\n/**\n * Group invoice items into shippable bundles with their switchable rates and\n * the currently selected rate. Digital-only invoices yield an empty list.\n *\n * The Sazito API returns:\n * groupedShippingRates — all applicable rates per \"bundle\" (keyed by group ID)\n * itemsShippingRate — one entry per item with its DEFAULT/current rate\n *\n * The default rate ID in itemsShippingRate may NOT match any rate in\n * groupedShippingRates (different IDs for the same method type). We therefore\n * assign items by the currently ASSIGNED rate from invoice.shippingItems first,\n * then fall back to the default rate, and finally use positional assignment\n * (all physical items in the single group when there is only one group).\n */\nexport function deriveShippingGroups(\n invoice: Invoice | null,\n applicable: ApplicableShippingMethods | null\n): ShippingGroup[] {\n if (!invoice || !invoice.needsShipping || !applicable) {\n return [];\n }\n\n const itemById = new Map<string, InvoiceItem>(\n invoice.items.map((item) => [idStr(item.id), item])\n );\n\n // The API's plain `digital` products never receive a shipping assignment.\n // Other digital/service variants may arrive through an automatic fulfillment\n // rate; retain those groups for the API assignment and hide them in the UI.\n const physicalItemsRate = (applicable.itemsShippingRate ?? []).filter((isr) => {\n const item = itemById.get(idStr(isr.invoiceItemId));\n return !item || item.productType?.trim().toLocaleLowerCase('en-US') !== 'digital';\n });\n\n if (physicalItemsRate.length === 0) return [];\n\n const physicalItemIds = physicalItemsRate.map((isr) => idStr(isr.invoiceItemId));\n\n // item -> currently assigned rate id (from the saved invoice assignment)\n const assignedRateById = new Map<string, number>();\n for (const si of invoice.shippingItems ?? []) {\n for (const itemId of si.invoiceItemIds) {\n assignedRateById.set(idStr(itemId), si.rate.id);\n }\n }\n\n // item -> default rate from applicable methods\n const defaultRateByItem = new Map<string, ShippingRate>();\n for (const isr of physicalItemsRate) {\n defaultRateByItem.set(idStr(isr.invoiceItemId), isr.shippingRate);\n }\n\n const resolveItems = (ids: string[]) =>\n ids.map((id) => itemById.get(id)).filter((i): i is InvoiceItem => Boolean(i));\n\n // Pick selected rate: prefer the saved assignment if it's in the group's rates,\n // otherwise use the default, otherwise the first rate.\n const resolveSelected = (itemIds: string[], rates: ShippingRate[]): number | null => {\n const rateSet = new Set(rates.map((r) => r.id));\n for (const id of itemIds) {\n const assigned = assignedRateById.get(id);\n if (assigned != null && rateSet.has(assigned)) return assigned;\n }\n for (const id of itemIds) {\n const def = defaultRateByItem.get(id);\n if (def && rateSet.has(def.id)) return def.id;\n }\n // assigned or default rate isn't in this group's rate list — still prefer it\n for (const id of itemIds) {\n const assigned = assignedRateById.get(id);\n if (assigned != null) return assigned;\n }\n return rates[0]?.id ?? null;\n };\n\n const groupedEntries = Object.entries(applicable.groupedShippingRates ?? {});\n\n // Single group → all physical items belong to it, show ALL its rates.\n if (groupedEntries.length === 1) {\n const [key, rates] = groupedEntries[0];\n const allRates = uniqueRates(rates);\n return [\n {\n key,\n title: '',\n itemIds: physicalItemIds,\n items: resolveItems(physicalItemIds),\n rates: allRates,\n selectedRateId: resolveSelected(physicalItemIds, allRates)\n }\n ];\n }\n\n // Multiple groups — try to assign items by assigned/default rate membership.\n if (groupedEntries.length > 1) {\n const groups: ShippingGroup[] = [];\n for (const [key, rates] of groupedEntries) {\n const rateSet = new Set(rates.map((r) => r.id));\n const itemIds = physicalItemsRate\n .filter((isr) => {\n const itemId = idStr(isr.invoiceItemId);\n const assigned = assignedRateById.get(itemId);\n return (assigned != null && rateSet.has(assigned)) || rateSet.has(isr.shippingRate.id);\n })\n .map((isr) => idStr(isr.invoiceItemId));\n if (itemIds.length === 0) continue;\n const allRates = uniqueRates(rates);\n groups.push({\n key,\n title: '',\n itemIds,\n items: resolveItems(itemIds),\n rates: allRates,\n selectedRateId: resolveSelected(itemIds, allRates)\n });\n }\n if (groups.length > 0) return groups;\n }\n\n // Fallback: one group with all physical items and ALL rates from every group.\n const allRates = uniqueRates([\n ...Object.values(applicable.groupedShippingRates ?? {}).flat(),\n ...physicalItemsRate.map((isr) => isr.shippingRate)\n ]);\n return [\n {\n key: 'all',\n title: 'shipping',\n itemIds: physicalItemIds,\n items: resolveItems(physicalItemIds),\n rates: allRates,\n selectedRateId: resolveSelected(physicalItemIds, allRates)\n }\n ];\n}\n\n/** Build the API payload from physical shipping selections. */\nexport function buildShippingAssignments(groups: ShippingGroup[]): ShippingAssignment[] {\n return groups\n .filter((group) => !isDigitalServiceGroup(group) && group.selectedRateId != null)\n .map((group) => ({\n rateId: group.selectedRateId as number,\n invoiceItemIds: group.itemIds\n }));\n}\n\n/** True once every physical shipping group has a selected rate. */\nexport function isShippingComplete(invoice: Invoice | null, groups: ShippingGroup[]): boolean {\n if (!invoice?.needsShipping) {\n return true;\n }\n const physicalGroups = groups.filter((group) => !isDigitalServiceGroup(group));\n if (physicalGroups.length === 0) {\n // The API may set needsShipping for an automatic Digital/Service group.\n // It is fulfillment metadata, not a customer-selectable shipping method.\n return groups.length > 0 && groups.every(isDigitalServiceGroup);\n }\n return physicalGroups.every((group) => group.selectedRateId != null);\n}\n\nconst codeDiscountTotal = (invoice: Invoice): number =>\n (invoice.couponTotal || 0) + (invoice.discountTotal || 0);\n\n/**\n * The documented API contract has no discount \"type\" field — codes only show\n * up as totals on the invoice. Classify by comparing the invoice before/after\n * the code was applied:\n * - shipping got cheaper, items total unchanged → free shipping\n * - items total dropped by a near-integer % → percentage\n * - items total dropped by anything else → fixed amount\n * If the backend ever sends an explicit type on the discount usage\n * (`discount_type` / `amount_type`), trust it over the heuristics.\n * `before` is null when the code was restored from a saved invoice; deltas\n * then fall back to the absolute totals and free shipping is undetectable.\n */\nexport function classifyAppliedDiscount(\n before: Invoice | null,\n after: Invoice,\n code: string\n): AppliedDiscount {\n const amount = Math.max(0, codeDiscountTotal(after) - (before ? codeDiscountTotal(before) : 0));\n const shippingSaved = before\n ? Math.max(0, (before.shippingTotal || 0) - (after.shippingTotal || 0))\n : 0;\n const base: AppliedDiscount = { code, kind: 'unknown', amount, shippingSaved };\n\n const rawUsage = (after.discountUsages?.[0]?.discountCode ?? {}) as Record<string, unknown>;\n const rawType = [rawUsage.discountType, rawUsage.amountType]\n .find((v): v is string => typeof v === 'string')\n ?.toLowerCase();\n if (rawType) {\n if (rawType.includes('percent')) {\n const rawPercent = Number(rawUsage.percent ?? rawUsage.percentage);\n const percent =\n Number.isFinite(rawPercent) && rawPercent > 0\n ? rawPercent\n : detectPercent(after, amount) ?? undefined;\n return { ...base, kind: 'percentage', percent };\n }\n if (rawType.includes('ship')) return { ...base, kind: 'free_shipping' };\n if (rawType.includes('fix') || rawType.includes('amount')) {\n return { ...base, kind: 'fixed_amount' };\n }\n }\n\n if (amount <= 0) {\n return shippingSaved > 0 ? { ...base, kind: 'free_shipping' } : base;\n }\n const percent = detectPercent(after, amount);\n return percent != null\n ? { ...base, kind: 'percentage', percent }\n : { ...base, kind: 'fixed_amount' };\n}\n\n/**\n * A percentage code produces an amount that is a near-exact integer percent of\n * the items total (raw, or net of item-level discounts). A round fixed amount\n * can coincidentally match — the misclassification only changes the badge\n * label, and both readings are true statements of the saving.\n */\nfunction detectPercent(invoice: Invoice, amount: number): number | null {\n const raw = invoice.itemsTotalRawPrice || 0;\n for (const basis of [raw - (invoice.itemsDiscount || 0), raw]) {\n if (basis <= 0) continue;\n const percent = (amount / basis) * 100;\n const rounded = Math.round(percent);\n if (rounded >= 1 && rounded <= 100 && Math.abs(percent - rounded) < 0.05) {\n return rounded;\n }\n }\n return null;\n}\n\nexport type SummaryLineKey = 'subtotal' | 'discount' | 'shipping' | 'credit' | 'vat';\n\nexport interface SummaryLine {\n key: SummaryLineKey;\n amount: number;\n negative?: boolean;\n free?: boolean;\n /** Discount line only: amount as a percentage of subtotal (rounded). */\n percent?: number;\n}\n\nexport interface CheckoutSummary {\n lines: SummaryLine[];\n total: number;\n}\n\nexport function selectSummary(invoice: Invoice | null): CheckoutSummary {\n if (!invoice) {\n return { lines: [], total: 0 };\n }\n\n const subtotal = invoice.itemsTotalRawPrice || invoice.netTotal || 0;\n const discount =\n (invoice.itemsDiscount || 0) + (invoice.discountTotal || 0) + (invoice.couponTotal || 0);\n\n const lines: SummaryLine[] = [{ key: 'subtotal', amount: subtotal }];\n\n if (discount > 0) {\n // Backend savings percentage for the \"your savings\" line; fall back to amount/subtotal.\n // Keep it fractional — a 5,000 discount on a 23M order is ~0.02%, not 0.\n const percent =\n (invoice.customerProfitPercentage || 0) > 0\n ? invoice.customerProfitPercentage\n : subtotal > 0\n ? (discount / subtotal) * 100\n : 0;\n lines.push({ key: 'discount', amount: discount, negative: true, percent });\n }\n // Only show shipping line once a method has been assigned.\n if (invoice.needsShipping && (invoice.shippingItems?.length ?? 0) > 0) {\n lines.push({ key: 'shipping', amount: invoice.shippingTotal || 0, free: !invoice.shippingTotal });\n }\n if ((invoice.creditTotal || 0) > 0) {\n lines.push({ key: 'credit', amount: invoice.creditTotal, negative: true });\n }\n if ((invoice.vat || 0) > 0) {\n lines.push({ key: 'vat', amount: invoice.vat, percent: Math.round(invoice.vatPercent || 0) });\n }\n\n return { lines, total: invoice.finalTotal || 0 };\n}\n\n/** Items that don't require shipping (digital), for display in the shipping step. */\nexport function selectDigitalItems(\n invoice: Invoice | null,\n groups: ShippingGroup[],\n applicable: ApplicableShippingMethods | null\n): InvoiceItem[] {\n if (!invoice) return [];\n if (!invoice.needsShipping) return invoice.items;\n // Before shipping methods are loaded, only explicitly-digital items are known.\n // Showing everything as \"digital\" when applicable is null would be wrong.\n if (applicable == null) {\n return invoice.items.filter(isDigitalServiceItem);\n }\n // The backend may model digital/service fulfillment as an automatic zero-cost\n // shipping group. Treat its products as non-shippable in the UI while keeping\n // the group in state so its assignment can still be submitted.\n const digitalGroupItems = new Set(\n groups\n .filter(isDigitalServiceGroup)\n .flatMap((group) => group.itemIds.map(idStr))\n );\n const groupedItems = new Set(groups.flatMap((group) => group.itemIds.map(idStr)));\n return invoice.items.filter((item) =>\n isDigitalServiceItem(item) ||\n digitalGroupItems.has(idStr(item.id)) ||\n !groupedItems.has(idStr(item.id))\n );\n}\n","/**\n * The checkout engine: a framework-agnostic port of the legacy `operateCart`\n * state machine on top of @sazito/client-sdk. Owns the store, serializes\n * mutations, and emits typed side-effects for the host to perform.\n */\nimport type { PaymentAction, PaymentStepInput, ShippingAddress, ShippingAddressInput, Invoice } from '@sazito/client-sdk';\nimport { createStore, type Store } from './store';\nimport { createSdkBinding, type CheckoutSdkBinding } from './sdk-binding';\nimport { fromSdkError, makeError } from './errors';\nimport { makeEvent } from './events';\nimport { noopEffectExecutor } from './effects';\nimport {\n addressFormFromInvoice,\n addressFormFromSavedAddress,\n buildShippingAssignments,\n classifyAppliedDiscount,\n deriveShippingGroups,\n emptyAddressForm,\n isAddressComplete,\n isAddressDirty,\n isShippingComplete,\n reconcileAddressWithRegions,\n savedAddressCityName\n} from './selectors';\nimport type {\n AddressFormValues,\n CheckoutActions,\n CheckoutConfig,\n CheckoutEffect,\n CheckoutEffectExecutor,\n CheckoutEngineOptions,\n CheckoutError,\n CheckoutFlags,\n CheckoutRegion,\n CheckoutState,\n CheckoutStep,\n ShippingGroup\n} from './types';\n\nexport interface CheckoutEngine {\n getState(): CheckoutState;\n subscribe(listener: () => void): () => void;\n actions: CheckoutActions;\n setEffectExecutor(executor: CheckoutEffectExecutor): void;\n destroy(): void;\n}\n\nconst STEP_ORDER: CheckoutStep[] = ['cart', 'shipping', 'payment', 'result'];\nconst ADDRESS_AUTOSUBMIT_DEBOUNCE_MS = 350;\n\nfunction initialFlags(): CheckoutFlags {\n return {\n bootstrapping: false,\n updatingCart: false,\n savingAddress: false,\n loadingShipping: false,\n selectingRate: false,\n applyingDiscount: false,\n loadingPayments: false,\n placingOrder: false\n };\n}\n\nfunction initialState(config: CheckoutConfig): CheckoutState {\n const locale = config.locale ?? 'fa';\n return {\n step: 'cart',\n status: 'idle',\n locale,\n direction: config.direction ?? (locale === 'fa' ? 'rtl' : 'ltr'),\n cart: null,\n invoice: null,\n regions: [],\n addressForm: emptyAddressForm(),\n postalCodeMandatory: false,\n emailMandatory: false,\n addressDirty: true,\n applicable: null,\n shippingGroups: [],\n paymentMethods: [],\n selectedPaymentMethodId: null,\n discountCode: '',\n appliedDiscountCode: null,\n appliedDiscount: null,\n discountError: null,\n result: null,\n error: null,\n flags: initialFlags()\n };\n}\n\nexport function createCheckoutEngine(options: CheckoutEngineOptions): CheckoutEngine {\n const config: CheckoutConfig = options.config ?? {};\n const binding: CheckoutSdkBinding = createSdkBinding(options);\n const store: Store<CheckoutState> = createStore(initialState(config));\n\n let effectExecutor: CheckoutEffectExecutor = noopEffectExecutor;\n let lock: Promise<unknown> = Promise.resolve();\n let startPromise: Promise<void> | null = null;\n let addressRevision = 0;\n let addressAutoSubmitTimer: ReturnType<typeof setTimeout> | null = null;\n\n // ---- internal helpers -------------------------------------------------\n\n const get = () => store.getState();\n const set = store.setState;\n\n function runEffect(effect: CheckoutEffect): void {\n effectExecutor(effect);\n }\n\n function emit(...args: Parameters<typeof makeEvent>): void {\n runEffect({ type: 'emit', event: makeEvent(...args) });\n }\n\n function setFlag(flag: keyof CheckoutFlags, value: boolean): void {\n set((prev) => ({ flags: { ...prev.flags, [flag]: value } }));\n }\n\n function setError(error: CheckoutState['error']): void {\n set({ error, status: error ? 'error' : 'idle' });\n }\n\n function withLock<T>(fn: () => Promise<T>): Promise<T> {\n const next = lock.then(fn, fn);\n lock = next.then(\n () => undefined,\n () => undefined\n );\n return next as Promise<T>;\n }\n\n function clearAddressAutoSubmit(): void {\n if (addressAutoSubmitTimer) {\n clearTimeout(addressAutoSubmitTimer);\n addressAutoSubmitTimer = null;\n }\n }\n\n function scheduleAddressAutoSubmit(delay = ADDRESS_AUTOSUBMIT_DEBOUNCE_MS): void {\n clearAddressAutoSubmit();\n addressAutoSubmitTimer = setTimeout(() => {\n addressAutoSubmitTimer = null;\n void withLock(submitAddressInternal);\n }, delay);\n }\n\n function recomputeGroups(): ShippingGroup[] {\n const { invoice, applicable } = get();\n const groups = deriveShippingGroups(invoice, applicable);\n set({ shippingGroups: groups });\n return groups;\n }\n\n // ---- SDK steps --------------------------------------------------------\n\n /** Fetch cart; returns false (and sets error) when unavailable. */\n async function loadCart(): Promise<boolean> {\n if (!binding.hasCart()) {\n setError(makeError('no_cart', get().locale, 'cart'));\n return false;\n }\n const res = await binding.client.cart.get();\n if (res.error || !res.data) {\n setError(fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'cart'));\n return false;\n }\n set({ cart: res.data });\n return true;\n }\n\n /** Create invoice when missing (checked via state), otherwise refresh it. */\n async function ensureInvoice(): Promise<boolean> {\n const res = get().invoice != null\n ? await binding.client.invoices.refresh()\n : await binding.client.invoices.create();\n if (res.error || !res.data) {\n setError(fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'shipping'));\n return false;\n }\n set({ invoice: res.data });\n return true;\n }\n\n async function loadRegions(): Promise<void> {\n const res = await binding.client.regions.list();\n if (res.data) {\n set({ regions: res.data as unknown as CheckoutRegion[] });\n }\n }\n\n async function loadGeneralInfo(): Promise<void> {\n const getInfo = binding.client.general?.getInfo;\n if (!getInfo) {\n return;\n }\n const res = await getInfo.call(binding.client.general);\n if (res.data) {\n const postalCodeMandatory = readPostalCodeMandatory(res.data);\n if (postalCodeMandatory !== undefined) {\n set({ postalCodeMandatory });\n }\n const emailMandatory = readEmailMandatory(res.data);\n if (emailMandatory !== undefined) {\n set({ emailMandatory });\n }\n }\n }\n\n async function refreshInvoice(): Promise<void> {\n const res = await binding.client.invoices.refresh();\n if (res.data) {\n set({ invoice: res.data });\n recomputeGroups();\n }\n }\n\n async function loadApplicableShipping(expectedAddressRevision: number): Promise<boolean> {\n setFlag('loadingShipping', true);\n const res = await binding.client.invoices.getApplicableShippingMethods();\n setFlag('loadingShipping', false);\n if (addressRevision !== expectedAddressRevision) {\n return false;\n }\n if (res.error || !res.data) {\n setError(fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'shipping'));\n return false;\n }\n set({ applicable: res.data });\n recomputeGroups();\n return true;\n }\n\n async function assignCurrentShipping(): Promise<void> {\n const groups = get().shippingGroups;\n const assignments = buildShippingAssignments(groups);\n if (assignments.length === 0) {\n return;\n }\n const res = await binding.client.invoices.assignShippingMethod(assignments);\n if (res.error || !res.data) {\n setError(fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'shipping'));\n return;\n }\n set({ invoice: res.data });\n recomputeGroups();\n }\n\n async function loadPaymentMethods(): Promise<void> {\n setFlag('loadingPayments', true);\n const res = await binding.client.payments.getMethods();\n setFlag('loadingPayments', false);\n if (res.error || !res.data) {\n setError(fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'payment'));\n return;\n }\n const methods = res.data;\n const current = get().selectedPaymentMethodId;\n const preferred =\n current ?? methods.find((m) => m.isDefault)?.id ?? methods[0]?.id ?? null;\n set({ paymentMethods: methods, selectedPaymentMethodId: preferred });\n }\n\n // ---- payment resolution ----------------------------------------------\n\n // Push a terminal failure onto the result step (step 4) with a visible message.\n function failResult(message: string, err?: CheckoutError): void {\n set({\n step: 'result',\n status: 'idle',\n result: { status: 'failed', message },\n error: err ?? null\n });\n emit('payment_failed', { step: 'result' });\n }\n\n function handlePaymentAction(action: PaymentAction): void {\n switch (action.action) {\n case 'REDIRECT':\n if (!action.address) {\n console.error('[Sazito Checkout] REDIRECT action has no address:', action);\n failResult(makeError('payment_failed', get().locale, 'result').message);\n return;\n }\n set({ status: 'redirecting' });\n runEffect({ type: 'redirect', url: action.address });\n return;\n case 'POST':\n if (!action.address) {\n console.error('[Sazito Checkout] POST action has no address:', action);\n failResult(makeError('payment_failed', get().locale, 'result').message);\n return;\n }\n set({ status: 'redirecting' });\n runEffect({\n type: 'post-form',\n url: action.address,\n fields: stringifyFields(action.payload)\n });\n return;\n case 'show_order':\n set({\n step: 'result',\n status: 'idle',\n result: { status: 'success', order: action.order }\n });\n emit('payment_succeeded', { step: 'result' });\n return;\n case 'FAIL':\n case 'payment_fail_error':\n case 'show_error':\n set({\n step: 'result',\n status: 'idle',\n result: { status: 'failed', message: action.message }\n });\n emit('payment_failed', { step: 'result' });\n return;\n case 'StockViolated':\n set({\n step: 'result',\n status: 'idle',\n result: { status: 'stock_violated', message: action.message }\n });\n setError(makeError('stock_violated', get().locale, 'result'));\n return;\n case 'pending':\n set({\n step: 'result',\n status: 'polling',\n result: { status: 'pending', order: action.order, message: action.message }\n });\n emit('payment_pending', { step: 'result' });\n void pollPending();\n return;\n case 'UPLOAD':\n case 'show_otp_modal':\n // Card-to-card upload is out of scope for v1; surface a clear failure.\n set({\n step: 'result',\n status: 'idle',\n result: { status: 'failed', message: action.message }\n });\n return;\n }\n }\n\n async function pollPending(): Promise<void> {\n const interval = config.pollIntervalMs ?? 15000;\n const res = await binding.client.payments.pollUntilSettled(undefined, interval);\n if (res.error || !res.data) {\n setError(fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'result'));\n return;\n }\n handlePaymentAction(res.data);\n }\n\n // ---- public actions ---------------------------------------------------\n\n function goToStep(step: CheckoutStep): void {\n if (step !== 'shipping') {\n clearAddressAutoSubmit();\n }\n set({ step, error: null });\n emit('step_viewed', { step });\n // When landing on shipping with a complete address but no methods fetched yet,\n // auto-submit so methods appear without requiring a manual Continue press.\n if (step === 'shipping') {\n const { addressForm, addressDirty, invoice, applicable, shippingGroups } = get();\n const methodsUnresolved = Boolean(invoice?.needsShipping) && shippingGroups.length === 0;\n if ((addressDirty || !applicable || methodsUnresolved) && isAddressComplete(\n addressForm,\n invoice?.needsShipping ?? true,\n get().postalCodeMandatory,\n get().emailMandatory\n )) {\n void withLock(submitAddressInternal);\n }\n }\n }\n\n function isUsableSavedAddress(\n addr: Invoice['shippingAddress'] | ShippingAddress | null | undefined\n ): boolean {\n return Boolean(addr && (addr.firstName || addr.lastName || addr.address));\n }\n\n /* Authenticated users load their latest account address. Stored credentials\n are also a safe fallback because createAddress refreshes them every time. */\n async function loadSavedAddress(): Promise<ShippingAddress | null> {\n try {\n if (binding.client.isAuthenticated()) {\n const res = await binding.client.shipping.listAddresses();\n const latest = res.data?.find(isUsableSavedAddress);\n if (latest) {\n return latest;\n }\n if (res.error) {\n console.warn('[Sazito Checkout] account-address prefill failed:', res.error.message);\n }\n }\n\n if (!binding.credentials.getShippingCredentials()) {\n return null;\n }\n\n const guestRes = await binding.client.shipping.getAddress();\n if (guestRes.data && isUsableSavedAddress(guestRes.data)) {\n return guestRes.data;\n }\n console.warn(\n '[Sazito Checkout] guest-address prefill skipped:',\n guestRes.error?.message ?? 'address response missing usable fields',\n guestRes.data ?? null\n );\n } catch (e) {\n console.warn('[Sazito Checkout] saved-address prefill failed:', e);\n }\n return null;\n }\n\n const actions: CheckoutActions = {\n async start() {\n if (!startPromise) {\n startPromise = store.batch(() => withLock(async () => {\n setFlag('bootstrapping', true);\n set({ status: 'bootstrapping', error: null });\n\n // Regions and shop settings are independent. Invoice creation is not:\n // it must only run after the cart identifier has resolved to a real cart,\n // otherwise its secondary \"no cart\" error can overwrite the useful\n // empty-cart state from loadCart().\n const cartPromise = loadCart();\n const supportingDataPromise = Promise.all([loadRegions(), loadGeneralInfo()]);\n const cartOk = await cartPromise;\n const invoiceOk = cartOk ? await ensureInvoice() : false;\n await supportingDataPromise;\n if (!cartOk || !invoiceOk) {\n setFlag('bootstrapping', false);\n return;\n }\n\n const invoice = get().invoice;\n const hasInvoiceAddress = isUsableSavedAddress(invoice?.shippingAddress);\n let rawForm = addressFormFromInvoice(invoice);\n let savedCityName = invoice?.shippingAddress?.region?.city?.name;\n // Fresh invoices carry no address. Authenticated users get their latest\n // account address; guests get the address persisted by SDK credentials.\n if (!hasInvoiceAddress) {\n const saved = await loadSavedAddress();\n if (saved) {\n rawForm = addressFormFromSavedAddress(saved);\n savedCityName = savedAddressCityName(saved);\n }\n }\n // A code applied in an earlier session survives on the invoice — reflect\n // it as applied (no before-invoice, so the type falls back to totals).\n const savedCode = invoice?.discountCode?.toUpperCase();\n setFlag('bootstrapping', false);\n set({\n status: 'idle',\n addressForm: reconcileAddressWithRegions(rawForm, get().regions, savedCityName),\n addressDirty: !hasInvoiceAddress,\n ...(savedCode && invoice\n ? {\n appliedDiscountCode: savedCode,\n appliedDiscount: classifyAppliedDiscount(null, invoice, savedCode)\n }\n : {})\n });\n emit('checkout_viewed', { step: 'cart' });\n emit('step_viewed', { step: 'cart' });\n }));\n }\n\n await startPromise;\n if (get().error) {\n startPromise = null;\n }\n },\n\n goToStep,\n\n back() {\n const idx = STEP_ORDER.indexOf(get().step);\n if (idx > 0) {\n goToStep(STEP_ORDER[idx - 1]);\n }\n },\n\n async next() {\n await withLock(async () => {\n const state = get();\n setError(null);\n\n if (state.step === 'cart') {\n set({ status: 'working' });\n const ok = await ensureInvoice();\n set({ status: 'idle' });\n if (ok) {\n // A fresh invoice has no address yet. Keep the form hydrated from\n // the base SDK's saved address instead of clearing it just before\n // the Shipping step becomes visible.\n const invoice = get().invoice;\n if (isUsableSavedAddress(invoice?.shippingAddress)) {\n const addressForm = reconcileAddressWithRegions(\n addressFormFromInvoice(invoice),\n get().regions,\n savedAddressCityName(invoice?.shippingAddress)\n );\n set({\n addressForm,\n addressDirty: isAddressDirty(addressForm, invoice)\n });\n }\n goToStep('shipping');\n }\n return;\n }\n\n if (state.step === 'shipping') {\n clearAddressAutoSubmit();\n // Phase 1: address not saved yet (or changed) → save it and reveal the\n // shipping methods, staying on the shipping step.\n const needsSave = state.addressDirty || !state.applicable;\n if (needsSave) {\n const saved = await submitAddressInternal();\n if (!saved) return;\n // Stay on the step so the customer can pick / switch a method.\n if (state.invoice?.needsShipping) {\n return;\n }\n }\n // Phase 2: methods resolved → validate and proceed to payment.\n const invoice = get().invoice;\n if (!isShippingComplete(invoice, get().shippingGroups)) {\n setError(makeError('shipping_required', state.locale, 'shipping'));\n return;\n }\n set({ status: 'working' });\n await loadPaymentMethods();\n set({ status: 'idle' });\n if (!get().error) goToStep('payment');\n return;\n }\n\n if (state.step === 'payment') {\n if (state.selectedPaymentMethodId == null) {\n setError(makeError('validation', state.locale, 'payment'));\n return;\n }\n // No review step — finalize directly from payment.\n await placeOrderInternal();\n return;\n }\n });\n },\n\n async updateItemQuantity(cartProductId, variantId, quantity) {\n await withLock(async () => {\n if (quantity < 1) return;\n setFlag('updatingCart', true);\n const res = await binding.client.cart.updateItem(cartProductId, variantId, quantity);\n if (res.data) {\n set({ cart: res.data });\n await refreshInvoice();\n } else if (res.error) {\n setError(fromSdkError(res.error, get().locale, 'cart'));\n }\n setFlag('updatingCart', false);\n });\n },\n\n async removeItem(cartProductId, variantId) {\n await withLock(async () => {\n setFlag('updatingCart', true);\n const res = await binding.client.cart.removeItem(cartProductId, variantId);\n if (res.data) {\n set({ cart: res.data });\n await refreshInvoice();\n } else if (res.error) {\n setError(fromSdkError(res.error, get().locale, 'cart'));\n }\n setFlag('updatingCart', false);\n });\n },\n\n setAddressField(key, value) {\n const before = get().addressForm;\n const changed = before[key] !== value || (key === 'regionId' && before.cityId !== null);\n const destinationChanged = changed && (key === 'regionId' || key === 'cityId');\n if (changed) {\n addressRevision += 1;\n }\n set((prev) => {\n const addressForm: AddressFormValues = { ...prev.addressForm, [key]: value };\n // Reset city when region changes.\n if (key === 'regionId') {\n addressForm.cityId = null;\n }\n const addressDirty = isAddressDirty(addressForm, prev.invoice);\n return {\n addressForm,\n addressDirty,\n // Shipping rates depend on region/city. Contact and street edits must\n // not discard valid methods for the same destination.\n ...(destinationChanged ? { applicable: null, shippingGroups: [] } : {})\n };\n });\n\n // Browser autofill often populates the selects before the final required\n // text field. Once the form becomes complete, debounce text changes and\n // submit automatically; a discrete city selection can submit immediately.\n if (changed && get().step === 'shipping') {\n const state = get();\n const methodsUnresolved = !state.applicable\n || (Boolean(state.invoice?.needsShipping) && state.shippingGroups.length === 0);\n if (isAddressComplete(\n state.addressForm,\n state.invoice?.needsShipping ?? true,\n state.postalCodeMandatory,\n state.emailMandatory\n ) && (destinationChanged || methodsUnresolved)) {\n scheduleAddressAutoSubmit(key === 'cityId' ? 0 : undefined);\n } else if (!isAddressComplete(\n state.addressForm,\n state.invoice?.needsShipping ?? true,\n state.postalCodeMandatory,\n state.emailMandatory\n )) {\n clearAddressAutoSubmit();\n }\n }\n },\n\n async submitAddress() {\n clearAddressAutoSubmit();\n return withLock(submitAddressInternal);\n },\n\n async selectShippingRate(groupKey, rateId) {\n await withLock(async () => {\n setFlag('selectingRate', true);\n set((prev) => ({\n shippingGroups: prev.shippingGroups.map((group) =>\n group.key === groupKey ? { ...group, selectedRateId: rateId } : group\n )\n }));\n await assignCurrentShipping();\n await refreshInvoice();\n setFlag('selectingRate', false);\n emit('shipping_rate_selected', { step: 'shipping', metadata: { groupKey, rateId } });\n });\n },\n\n setDiscountCode(code) {\n set({ discountCode: code, discountError: null });\n },\n\n async applyDiscount() {\n await withLock(async () => {\n const code = get().discountCode.trim();\n if (!code) return;\n setFlag('applyingDiscount', true);\n set({ discountError: null });\n const before = get().invoice;\n const res = await binding.client.invoices.addDiscountCode(code);\n setFlag('applyingDiscount', false);\n if (res.error || !res.data) {\n // Inline error on the discount field instead of the global banner.\n const err = fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'payment');\n set({ discountError: err.message });\n return;\n }\n const applied = classifyAppliedDiscount(before, res.data, code.toUpperCase());\n set({\n invoice: res.data,\n appliedDiscountCode: applied.code,\n appliedDiscount: applied,\n discountError: null\n });\n recomputeGroups();\n emit('discount_applied', { step: 'payment', metadata: { code, kind: applied.kind } });\n });\n },\n\n async removeDiscount() {\n await withLock(async () => {\n // No dedicated remove endpoint; clear the saved code and re-sync.\n setFlag('applyingDiscount', true);\n binding.credentials.clearDiscountCode();\n set({ appliedDiscountCode: null, appliedDiscount: null, discountCode: '', discountError: null });\n await refreshInvoice();\n setFlag('applyingDiscount', false);\n emit('discount_removed', { step: 'payment' });\n });\n },\n\n selectPaymentMethod(id) {\n set({ selectedPaymentMethodId: id });\n emit('payment_method_selected', { step: 'payment', metadata: { id } });\n },\n\n async placeOrder() {\n await withLock(placeOrderInternal);\n },\n\n async resolvePaymentReturn(params) {\n await withLock(async () => {\n set({ step: 'result', status: 'polling', result: { status: 'pending' } });\n const input = paymentReturnInput(params);\n if (\n input?.id != null &&\n Number.isInteger(input.id) &&\n input.id > 0 &&\n input.paymentIdentifier?.trim()\n ) {\n binding.credentials.setPaymentCredentials({\n id: input.id,\n identifier: input.paymentIdentifier.trim()\n });\n }\n const action = await binding.client.payments.verify(input);\n if (action.error || !action.data) {\n setError(fromSdkError(action.error ?? { message: '', type: 'api' }, get().locale, 'result'));\n return;\n }\n handlePaymentAction(action.data);\n });\n },\n\n reset() {\n addressRevision += 1;\n set(initialState(config));\n }\n };\n\n // Internal (lock-free) order placement shared by `placeOrder` & `next` (payment step).\n async function placeOrderInternal(): Promise<void> {\n const { selectedPaymentMethodId, locale } = get();\n if (selectedPaymentMethodId == null) {\n setError(makeError('validation', locale, 'payment'));\n return;\n }\n\n setFlag('placingOrder', true);\n setError(null);\n try {\n const created = await binding.client.payments.create(selectedPaymentMethodId);\n if (created.error || !created.data) {\n console.error('[Sazito Checkout] payments.create failed:', created.error);\n const err = fromSdkError(created.error ?? { message: '', type: 'api' }, locale, 'result');\n failResult(err.message, err);\n return;\n }\n\n emit('payment_initiated', { step: 'payment', value: get().invoice?.finalTotal });\n const action = await binding.client.payments.initialize();\n if (action.error || !action.data) {\n console.error('[Sazito Checkout] payments.initialize failed:', action.error);\n const err = fromSdkError(action.error ?? { message: '', type: 'api' }, locale, 'result');\n failResult(err.message, err);\n return;\n }\n console.debug('[Sazito Checkout] payment init action:', action.data);\n handlePaymentAction(action.data);\n } catch (e) {\n // Network/unexpected throw — never leave the button spinning silently.\n console.error('[Sazito Checkout] place order threw:', e);\n const err = fromSdkError({ message: (e as Error)?.message || '', type: 'network' }, locale, 'result');\n failResult(err.message, err);\n } finally {\n setFlag('placingOrder', false);\n }\n }\n\n // Internal (lock-free) address submission shared by `submitAddress` & `next`.\n async function submitAddressInternal(): Promise<boolean> {\n const state = get();\n const submittedAddressRevision = addressRevision;\n const needsShipping = state.invoice?.needsShipping ?? true;\n const shouldReloadShipping = needsShipping\n && (!state.applicable || state.shippingGroups.length === 0);\n\n const abandonStaleSubmission = (invoice?: Invoice): false => {\n set({\n ...(invoice ? { invoice } : {}),\n addressDirty: true,\n applicable: null,\n shippingGroups: []\n });\n setFlag('savingAddress', false);\n return false;\n };\n\n if (!isAddressComplete(state.addressForm, needsShipping, state.postalCodeMandatory, state.emailMandatory)) {\n setError(makeError('address_required', state.locale, 'shipping'));\n return false;\n }\n\n // Skip the round-trip if nothing changed and shipping is already resolved.\n if (!state.addressDirty && state.applicable && isShippingComplete(state.invoice, state.shippingGroups)) {\n return true;\n }\n\n setFlag('savingAddress', true);\n const input = toAddressInput(state.addressForm);\n // Addresses attached to invoices are immutable order snapshots. Updating\n // the previous address would also rewrite historical orders, so checkout\n // always creates a new address and persists its new guest credentials.\n const addrRes = await binding.client.shipping.createAddress(input);\n if (addrRes.error || !addrRes.data) {\n setFlag('savingAddress', false);\n setError(fromSdkError(addrRes.error ?? { message: '', type: 'api' }, state.locale, 'shipping'));\n return false;\n }\n if (addressRevision !== submittedAddressRevision) {\n return abandonStaleSubmission();\n }\n\n const address = addrRes.data;\n const linkRes = await binding.client.invoices.addShippingAddress(address.id, address.identifier);\n if (linkRes.error || !linkRes.data) {\n setFlag('savingAddress', false);\n setError(fromSdkError(linkRes.error ?? { message: '', type: 'api' }, state.locale, 'shipping'));\n return false;\n }\n if (addressRevision !== submittedAddressRevision) {\n return abandonStaleSubmission(linkRes.data);\n }\n set({ invoice: linkRes.data, addressDirty: false });\n\n if (needsShipping) {\n let ok = true;\n if (shouldReloadShipping) {\n ok = await loadApplicableShipping(submittedAddressRevision);\n } else if (recomputeGroups().length === 0) {\n // Invoice item IDs can change when the new address snapshot is linked.\n // Reload only if the existing applicable data can no longer form groups.\n ok = await loadApplicableShipping(submittedAddressRevision);\n }\n if (ok) {\n await assignCurrentShipping();\n if (addressRevision !== submittedAddressRevision) {\n return abandonStaleSubmission();\n }\n await refreshInvoice();\n if (addressRevision !== submittedAddressRevision) {\n return abandonStaleSubmission();\n }\n } else if (addressRevision !== submittedAddressRevision) {\n return abandonStaleSubmission();\n }\n }\n\n setFlag('savingAddress', false);\n emit('address_submitted', { step: 'shipping' });\n return !get().error;\n }\n\n return {\n getState: store.getState,\n subscribe: store.subscribe,\n actions,\n setEffectExecutor(executor) {\n effectExecutor = executor;\n },\n destroy() {\n clearAddressAutoSubmit();\n effectExecutor = noopEffectExecutor;\n }\n };\n}\n\nfunction readEmailMandatory(data: unknown): boolean | undefined {\n const root = asRecord(data);\n const general = asRecord(root.general);\n const generalInfo = asRecord(\n general.generalInfo ?? general.general_info ?? root.generalInfo ?? root.general_info\n );\n const normalizedSettings = asRecord(root.settings);\n const checkout = asRecord(\n generalInfo.checkout ?? root.checkout ?? normalizedSettings.checkout\n );\n\n const optional = readCheckoutSettingBoolean(\n checkout.emailOptional ?? checkout.email_optional\n );\n if (optional !== undefined) return !optional;\n return readCheckoutSettingBoolean(\n checkout.emailMandatory ?? checkout.email_mandatory\n );\n}\n\nfunction readPostalCodeMandatory(data: unknown): boolean | undefined {\n const root = asRecord(data);\n const general = asRecord(root.general);\n const generalInfo = asRecord(\n general.generalInfo ?? general.general_info ?? root.generalInfo ?? root.general_info\n );\n const normalizedSettings = asRecord(root.settings);\n const checkout = asRecord(\n generalInfo.checkout ?? root.checkout ?? normalizedSettings.checkout\n );\n\n return readCheckoutSettingBoolean(\n checkout.postalCodeMandatory ?? checkout.postal_code_mandatory\n );\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === 'object'\n ? value as Record<string, unknown>\n : {};\n}\n\nfunction readCheckoutSettingBoolean(value: unknown): boolean | undefined {\n if (value && typeof value === 'object' && 'enabled' in value) {\n return readCheckoutSettingBoolean((value as { enabled: unknown }).enabled);\n }\n if (value === true || value === 1 || value === '1' || value === 'true') return true;\n if (value === false || value === 0 || value === '0' || value === 'false') return false;\n return undefined;\n}\n\nfunction toAddressInput(form: AddressFormValues): ShippingAddressInput {\n return {\n firstName: form.firstName.trim(),\n lastName: form.lastName.trim(),\n mobilePhone: form.mobilePhone.trim(),\n email: form.email.trim() || undefined,\n phoneNumber: form.phoneNumber.trim() || undefined,\n regionId: form.regionId ?? undefined,\n cityId: form.cityId ?? undefined,\n address: form.address.trim(),\n postalCode: form.postalCode.trim() || undefined,\n description: form.description.trim() || undefined\n };\n}\n\n// Map raw gateway-return query params into the typed payment-step input.\n// Only the string-valued callback fields are forwarded; `trackingData` /\n// `payload` are parsed from JSON when the gateway sends them encoded.\nfunction paymentReturnInput(params: Record<string, string>): PaymentStepInput | undefined {\n if (!params || Object.keys(params).length === 0) {\n return undefined;\n }\n\n const input: PaymentStepInput = {};\n if (params.tatoken != null) input.tatoken = params.tatoken;\n if (params.isFailed != null) input.isFailed = params.isFailed;\n if (params.code != null) input.code = params.code;\n if (params.imageUrl != null) input.imageUrl = params.imageUrl;\n if (params.id != null && Number.isFinite(Number(params.id))) input.id = Number(params.id);\n if (params.paymentIdentifier != null) input.paymentIdentifier = params.paymentIdentifier;\n\n const trackingData = parseJsonObject(params.trackingData);\n if (trackingData) input.trackingData = trackingData as PaymentStepInput['trackingData'];\n const payload = parseJsonObject(params.payload);\n if (payload) input.payload = payload as PaymentStepInput['payload'];\n\n return Object.keys(input).length > 0 ? input : undefined;\n}\n\nfunction parseJsonObject(value: string | undefined): Record<string, unknown> | undefined {\n if (!value) return undefined;\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction stringifyFields(payload: Record<string, string | number> | undefined): Record<string, string> {\n const fields: Record<string, string> = {};\n if (payload && typeof payload === 'object') {\n for (const [key, value] of Object.entries(payload)) {\n fields[key] = value == null ? '' : String(value);\n }\n }\n return fields;\n}\n","/**\n * Locale-aware number / currency formatting.\n * Amounts are integer Toman values from the Sazito API.\n */\nimport type { CheckoutLocale } from './types';\n\nconst FA_DIGITS = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];\n\nexport function toPersianDigits(input: string): string {\n return input.replace(/\\d/g, (d) => FA_DIGITS[Number(d)]);\n}\n\nexport function toEnglishDigits(input: string): string {\n return input.replace(/[۰-۹٠-٩]/g, (digit) => {\n const code = digit.charCodeAt(0);\n const value = code >= 0x06f0 ? code - 0x06f0 : code - 0x0660;\n return String(value);\n });\n}\n\nexport function formatNumber(value: number, locale: CheckoutLocale): string {\n const grouped = Math.round(value || 0).toLocaleString('en-US');\n return locale === 'fa' ? toPersianDigits(grouped) : grouped;\n}\n\n/**\n * Format a percentage with up to `maxDecimals` digits, trimming trailing zeros.\n * Keeps small fractions visible (e.g. 0.02%) where `formatNumber` would round to 0.\n */\nexport function formatPercent(value: number, locale: CheckoutLocale, maxDecimals = 2): string {\n const safe = value || 0;\n const rounded = Number(safe.toFixed(maxDecimals));\n const text = String(rounded);\n return locale === 'fa' ? toPersianDigits(text) : text;\n}\n\nexport function defaultCurrencyLabel(locale: CheckoutLocale): string {\n return locale === 'fa' ? 'تومان' : 'Toman';\n}\n\nexport function formatMoney(\n value: number,\n locale: CheckoutLocale,\n currencyLabel?: string\n): string {\n const label = currencyLabel ?? defaultCurrencyLabel(locale);\n return `${formatNumber(value, locale)} ${label}`;\n}\n\n/**\n * Normalize an Iranian phone number to the 11-digit 0XXXXXXXXXX format.\n * Accepts: 09..., +989..., 00989..., 989..., 9... (10 digits without leading 0)\n */\nexport function normalizeIranianPhone(raw: string): string {\n let s = toEnglishDigits(raw).replace(/[\\s\\-().]/g, '');\n if (s.startsWith('+98')) s = '0' + s.slice(3);\n else if (s.startsWith('0098')) s = '0' + s.slice(4);\n else if (/^98\\d{9}$/.test(s)) s = '0' + s.slice(2);\n else if (/^9\\d{9}$/.test(s)) s = '0' + s;\n return s;\n}\n\nexport function isValidIranianPhone(s: string): boolean {\n return /^0[0-9]{10}$/.test(s);\n}\n\nexport function isValidIranianMobile(s: string): boolean {\n return /^09[0-9]{9}$/.test(s);\n}\n\n/** Free price shown when a rate / delivery costs nothing. */\nexport function formatPrice(\n value: number,\n locale: CheckoutLocale,\n currencyLabel?: string\n): string {\n if (!value || value <= 0) {\n return locale === 'fa' ? 'رایگان' : 'Free';\n }\n return formatMoney(value, locale, currencyLabel);\n}\n","/**\n * UI strings (fa/en) and domain label helpers (payment gateways, shipping).\n */\nimport type { CheckoutLocale, PaymentGateway } from './types';\n\nexport interface Strings {\n // steps\n stepCart: string;\n stepShipping: string;\n stepPayment: string;\n stepReview: string;\n stepResult: string;\n /** Mobile header title for the shipping step. */\n stepShippingInfo: string;\n /** Mobile header progress, e.g. \"مرحله ۲ از ۳\" / \"Step 2 of 3\". */\n stepOf: (current: string, total: string) => string;\n // common\n next: string;\n placeOrder: string;\n saveShippingDetails: string;\n continueToPayment: string;\n finalizeOrder: string;\n finishPurchase: string;\n back: string;\n continueShopping: string;\n orderSummary: string;\n subtotal: string;\n shipping: string;\n discount: string;\n credit: string;\n vat: string;\n total: string;\n totalAmount: string;\n free: string;\n quantity: string;\n optional: string;\n // cart\n cartTitle: string;\n cartEmpty: string;\n cartEmptyHint: string;\n remove: string;\n itemDiscount: (amount: string) => string;\n yourSavings: string;\n // shipping / address\n contactInfo: string;\n firstName: string;\n lastName: string;\n mobilePhone: string;\n email: string;\n phoneNumber: string;\n region: string;\n city: string;\n postalCode: string;\n addressLine: string;\n description: string;\n selectRegion: string;\n selectCity: string;\n shippingMethod: string;\n shippingMethods: string;\n shippingMethodsHint: string;\n digitalNoShipping: string;\n digitalNoShippingHint: string;\n // validation errors\n errorRequired: string;\n errorMobilePhone: string;\n errorEmail: string;\n changeTo: string;\n productCount: (n: string) => string;\n // payment\n paymentMethod: string;\n discountCode: string;\n discountPlaceholder: string;\n apply: string;\n applied: string;\n discountPercentOff: (percent: string) => string;\n discountAmountOff: (amount: string) => string;\n discountFreeShipping: string;\n // review\n reviewTitle: string;\n reviewContact: string;\n reviewAddress: string;\n reviewShipping: string;\n reviewPayment: string;\n payNow: string;\n edit: string;\n // result\n paymentSuccess: string;\n paymentFailed: string;\n paymentPending: string;\n paymentPendingHint: string;\n orderNumber: string;\n orderId: string;\n orderConfirmedHint: string;\n orderDetails: string;\n orderItems: string;\n product: string;\n lineTotal: string;\n tryAgain: string;\n // status / errors\n loading: string;\n processing: string;\n redirecting: string;\n}\n\nconst fa: Strings = {\n stepCart: 'سبد خرید',\n stepShipping: 'ارسال',\n stepPayment: 'پرداخت',\n stepReview: 'بازبینی',\n stepResult: 'پایان خرید',\n stepShippingInfo: 'اطلاعات ارسال',\n stepOf: (current, total) => `مرحله ${current} از ${total}`,\n next: 'ادامه',\n placeOrder: 'ثبت سفارش',\n saveShippingDetails: 'ثبت اطلاعات ارسال',\n continueToPayment: 'ادامه به پرداخت',\n finalizeOrder: 'نهایی‌سازی سفارش',\n finishPurchase: 'پایان خرید',\n back: 'بازگشت',\n continueShopping: 'ادامه خرید',\n orderSummary: 'خلاصه سفارش',\n subtotal: 'جمع کل',\n shipping: 'هزینه ارسال',\n discount: 'تخفیف',\n credit: 'اعتبار',\n vat: 'مالیات',\n total: 'مبلغ قابل پرداخت',\n totalAmount: 'مبلغ کل',\n free: 'رایگان',\n quantity: 'تعداد',\n optional: 'اختیاری',\n cartTitle: 'سبد خرید شما',\n cartEmpty: 'سبد خرید شما خالی است',\n cartEmptyHint: 'محصولات موردعلاقه را اضافه کنید تا اینجا ببینید.',\n remove: 'حذف',\n itemDiscount: (amount) => `${amount} تخفیف`,\n yourSavings: 'سود شما از این خرید',\n contactInfo: 'اطلاعات تماس',\n firstName: 'نام',\n lastName: 'نام خانوادگی',\n mobilePhone: 'شماره موبایل',\n email: 'ایمیل',\n phoneNumber: 'تلفن ثابت',\n region: 'استان',\n city: 'شهر',\n postalCode: 'کد پستی',\n addressLine: 'نشانی کامل',\n description: 'توضیحات',\n selectRegion: 'انتخاب استان',\n selectCity: 'انتخاب شهر',\n shippingMethod: 'روش ارسال',\n shippingMethods: 'روش‌های ارسال',\n shippingMethodsHint: 'پس از ثبت نشانی، روش‌های قابل استفاده نمایش داده می‌شوند.',\n digitalNoShipping: 'محصولات دیجیتال و خدمات',\n digitalNoShippingHint: 'این موارد به ارسال فیزیکی نیاز ندارند.',\n errorRequired: 'این فیلد اجباری است',\n errorMobilePhone: 'شماره موبایل معتبر وارد کنید (مثلاً ۰۹۱۲۳۴۵۶۷۸۹)',\n errorEmail: 'آدرس ایمیل معتبر نیست',\n changeTo: 'تغییر به',\n productCount: (n) => `${n} محصول`,\n paymentMethod: 'روش پرداخت',\n discountCode: 'کد تخفیف',\n discountPlaceholder: 'کد تخفیف را وارد کنید',\n apply: 'اعمال',\n applied: 'اعمال شد',\n discountPercentOff: (percent) => `${percent}٪ تخفیف`,\n discountAmountOff: (amount) => `${amount} تخفیف`,\n discountFreeShipping: 'ارسال رایگان',\n reviewTitle: 'بازبینی سفارش',\n reviewContact: 'مشخصات گیرنده',\n reviewAddress: 'آدرس ارسال',\n reviewShipping: 'روش ارسال',\n reviewPayment: 'روش پرداخت',\n payNow: 'پرداخت',\n edit: 'ویرایش',\n paymentSuccess: 'پرداخت با موفقیت انجام شد',\n paymentFailed: 'پرداخت ناموفق بود',\n paymentPending: 'در حال بررسی پرداخت',\n paymentPendingHint: 'پرداخت شما در حال پردازش است. لطفاً صبر کنید.',\n orderNumber: 'کد سفارش',\n orderId: 'شناسه سفارش',\n orderConfirmedHint: 'سفارش شما با موفقیت ثبت شد.',\n orderDetails: 'جزئیات سفارش',\n orderItems: 'اقلام سفارش',\n product: 'محصول',\n lineTotal: 'جمع قیمت',\n tryAgain: 'تلاش دوباره',\n loading: 'در حال بارگذاری…',\n processing: 'در حال پردازش…',\n redirecting: 'در حال انتقال به درگاه پرداخت…'\n};\n\nconst en: Strings = {\n stepCart: 'Cart',\n stepShipping: 'Shipping',\n stepPayment: 'Payment',\n stepReview: 'Review',\n stepResult: 'Finish',\n stepShippingInfo: 'Shipping details',\n stepOf: (current, total) => `Step ${current} of ${total}`,\n next: 'Continue',\n placeOrder: 'Place order',\n saveShippingDetails: 'Save shipping details',\n continueToPayment: 'Continue to payment',\n finalizeOrder: 'Finalize order',\n finishPurchase: 'Finish purchase',\n back: 'Back',\n continueShopping: 'Continue shopping',\n orderSummary: 'Order Summary',\n subtotal: 'Subtotal',\n shipping: 'Shipping',\n discount: 'Discount',\n credit: 'Credit',\n vat: 'VAT',\n total: 'Total',\n totalAmount: 'Total amount',\n free: 'Free',\n quantity: 'Qty',\n optional: 'Optional',\n cartTitle: 'Your cart',\n cartEmpty: 'Your cart is empty',\n cartEmptyHint: 'Add a few items and they’ll show up here.',\n remove: 'Remove',\n itemDiscount: (amount) => `Save ${amount}`,\n yourSavings: 'Your savings',\n contactInfo: 'Contact information',\n firstName: 'First name',\n lastName: 'Last name',\n mobilePhone: 'Mobile phone',\n phoneNumber: 'Phone number',\n email: 'Email',\n region: 'Province',\n city: 'City',\n postalCode: 'Postal code',\n addressLine: 'Full address',\n description: 'Description',\n selectRegion: 'Select province',\n selectCity: 'Select city',\n shippingMethod: 'Shipping method',\n shippingMethods: 'Shipping methods',\n shippingMethodsHint: 'Available delivery options will appear after you save this address.',\n digitalNoShipping: 'Digital products and services',\n digitalNoShippingHint: 'These items do not require physical delivery.',\n errorRequired: 'This field is required',\n errorMobilePhone: 'Enter a valid mobile number (e.g. 09123456789)',\n errorEmail: 'Enter a valid email address',\n changeTo: 'Switch to',\n productCount: (n) => `${n} item(s)`,\n paymentMethod: 'Payment method',\n discountCode: 'Discount code',\n discountPlaceholder: 'Enter discount code',\n apply: 'Apply',\n applied: 'Applied',\n discountPercentOff: (percent) => `${percent}% off`,\n discountAmountOff: (amount) => `${amount} off`,\n discountFreeShipping: 'Free shipping',\n reviewTitle: 'Review your order',\n reviewContact: 'Recipient',\n reviewAddress: 'Shipping address',\n reviewShipping: 'Shipping method',\n reviewPayment: 'Payment method',\n payNow: 'Pay',\n edit: 'Edit',\n paymentSuccess: 'Payment completed successfully',\n paymentFailed: 'Payment failed',\n paymentPending: 'Verifying payment',\n paymentPendingHint: 'Your payment is being processed. Please wait.',\n orderNumber: 'Order code',\n orderId: 'Order ID',\n orderConfirmedHint: 'Your order is confirmed. Its details and purchased items are shown below.',\n orderDetails: 'Order details',\n orderItems: 'Order items',\n product: 'Product',\n lineTotal: 'Line total',\n tryAgain: 'Try again',\n loading: 'Loading…',\n processing: 'Processing…',\n redirecting: 'Redirecting to the payment gateway…'\n};\n\nconst DICTS: Record<CheckoutLocale, Strings> = { fa, en };\n\nexport function strings(locale: CheckoutLocale): Strings {\n return DICTS[locale];\n}\n\n/** Visual family of a payment method — drives the icon shown in the UI. */\nexport type PaymentMethodKind = 'card' | 'cod' | 'bnpl' | 'wallet' | 'gateway' | 'free';\n\nexport interface PaymentMethodInfo {\n title: string;\n description: string;\n kind: PaymentMethodKind;\n}\n\ninterface GatewayMeta {\n kind: PaymentMethodKind;\n title: Record<CheckoutLocale, string>;\n}\n\n/** Brand/title + family per gateway. Unlisted codes fall back to a generic online gateway. */\nconst GATEWAYS: Partial<Record<PaymentGateway, GatewayMeta>> = {\n cardtocardpayment: { kind: 'card', title: { fa: 'کارت به کارت', en: 'Card to card' } },\n paymentinplace: { kind: 'cod', title: { fa: 'پرداخت در محل', en: 'Pay on delivery' } },\n freepayment: { kind: 'free', title: { fa: 'پرداخت رایگان', en: 'Free' } },\n // BNPL / installment\n snapppayment: { kind: 'bnpl', title: { fa: 'اسنپ‌پی', en: 'SnappPay' } },\n torobpaypayment: { kind: 'bnpl', title: { fa: 'ترب‌پی', en: 'TorobPay' } },\n azkipayment: { kind: 'bnpl', title: { fa: 'ازکی‌وام', en: 'Azki' } },\n digipaypayment: { kind: 'bnpl', title: { fa: 'دیجی‌پی', en: 'DigiPay' } },\n tarapayment: { kind: 'bnpl', title: { fa: 'تارا', en: 'Tara' } },\n tomanpayment: { kind: 'bnpl', title: { fa: 'تومان', en: 'Toman' } },\n novapaypayment: { kind: 'bnpl', title: { fa: 'نوادپی', en: 'NovaPay' } },\n // wallets\n vandarpayment: { kind: 'wallet', title: { fa: 'کیف پول وندار', en: 'Vandar wallet' } },\n zarinpalpayment: { kind: 'wallet', title: { fa: 'زرین‌پال', en: 'ZarinPal' } },\n zarinpluspayment: { kind: 'wallet', title: { fa: 'زرین‌پلاس', en: 'ZarinPlus' } },\n paypingpayment: { kind: 'wallet', title: { fa: 'پی‌پینگ', en: 'PayPing' } }\n};\n\nconst KIND_DESC: Record<PaymentMethodKind, Record<CheckoutLocale, string>> = {\n card: { fa: 'انتقال مستقیم به شماره‌کارت فروشنده', en: 'Transfer directly to the seller’s card' },\n cod: { fa: 'هنگام تحویل سفارش پرداخت کنید', en: 'Pay when your order is delivered' },\n bnpl: { fa: 'خرید اعتباری و پرداخت اقساطی', en: 'Buy now, pay later in installments' },\n wallet: { fa: 'پرداخت از موجودی کیف پول', en: 'Pay from your wallet balance' },\n gateway: { fa: 'انتقال امن به درگاه بانکی', en: 'Secure redirect to the bank gateway' },\n free: { fa: 'مبلغی برای پرداخت وجود ندارد', en: 'Nothing to pay for this order' }\n};\n\nconst FALLBACK_TITLE: Record<CheckoutLocale, string> = { fa: 'پرداخت آنلاین', en: 'Online payment' };\n\n/** Human label for a payment gateway code. Online gateways fall back generically. */\nexport function paymentMethodLabel(code: PaymentGateway, locale: CheckoutLocale): string {\n return GATEWAYS[code]?.title[locale] ?? FALLBACK_TITLE[locale];\n}\n\n/** Title + description + visual family for a payment gateway code. */\nexport function paymentMethodInfo(code: PaymentGateway, locale: CheckoutLocale): PaymentMethodInfo {\n const meta = GATEWAYS[code];\n const kind = meta?.kind ?? 'gateway';\n return {\n title: meta?.title[locale] ?? FALLBACK_TITLE[locale],\n description: KIND_DESC[kind][locale],\n kind\n };\n}\n"],"names":["CredentialsManager"],"mappings":"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"}
@@ -865,7 +865,7 @@ function createCheckoutEngine(options) {
865
865
  fields: stringifyFields(action.payload)
866
866
  });
867
867
  return;
868
- case 'showOrder':
868
+ case 'show_order':
869
869
  set({
870
870
  step: 'result',
871
871
  status: 'idle',
@@ -874,6 +874,8 @@ function createCheckoutEngine(options) {
874
874
  emit('payment_succeeded', { step: 'result' });
875
875
  return;
876
876
  case 'FAIL':
877
+ case 'payment_fail_error':
878
+ case 'show_error':
877
879
  set({
878
880
  step: 'result',
879
881
  status: 'idle',
@@ -890,11 +892,16 @@ function createCheckoutEngine(options) {
890
892
  setError(makeError('stock_violated', get().locale, 'result'));
891
893
  return;
892
894
  case 'pending':
893
- set({ step: 'result', status: 'polling', result: { status: 'pending' } });
895
+ set({
896
+ step: 'result',
897
+ status: 'polling',
898
+ result: { status: 'pending', order: action.order, message: action.message }
899
+ });
894
900
  emit('payment_pending', { step: 'result' });
895
901
  void pollPending();
896
902
  return;
897
903
  case 'UPLOAD':
904
+ case 'show_otp_modal':
898
905
  // Card-to-card upload is out of scope for v1; surface a clear failure.
899
906
  set({
900
907
  step: 'result',
@@ -902,11 +909,6 @@ function createCheckoutEngine(options) {
902
909
  result: { status: 'failed', message: action.message }
903
910
  });
904
911
  return;
905
- default:
906
- // Unknown/unhandled action from the gateway — never stall silently.
907
- console.error('[Sazito Checkout] Unhandled payment action:', action);
908
- failResult(action.message || makeError('payment_failed', get().locale, 'result').message);
909
- return;
910
912
  }
911
913
  }
912
914
  async function pollPending() {
@@ -1611,7 +1613,13 @@ const fa = {
1611
1613
  paymentFailed: 'پرداخت ناموفق بود',
1612
1614
  paymentPending: 'در حال بررسی پرداخت',
1613
1615
  paymentPendingHint: 'پرداخت شما در حال پردازش است. لطفاً صبر کنید.',
1614
- orderNumber: 'شماره سفارش',
1616
+ orderNumber: 'کد سفارش',
1617
+ orderId: 'شناسه سفارش',
1618
+ orderConfirmedHint: 'سفارش شما با موفقیت ثبت شد.',
1619
+ orderDetails: 'جزئیات سفارش',
1620
+ orderItems: 'اقلام سفارش',
1621
+ product: 'محصول',
1622
+ lineTotal: 'جمع قیمت',
1615
1623
  tryAgain: 'تلاش دوباره',
1616
1624
  loading: 'در حال بارگذاری…',
1617
1625
  processing: 'در حال پردازش…',
@@ -1692,7 +1700,13 @@ const en = {
1692
1700
  paymentFailed: 'Payment failed',
1693
1701
  paymentPending: 'Verifying payment',
1694
1702
  paymentPendingHint: 'Your payment is being processed. Please wait.',
1695
- orderNumber: 'Order number',
1703
+ orderNumber: 'Order code',
1704
+ orderId: 'Order ID',
1705
+ orderConfirmedHint: 'Your order is confirmed. Its details and purchased items are shown below.',
1706
+ orderDetails: 'Order details',
1707
+ orderItems: 'Order items',
1708
+ product: 'Product',
1709
+ lineTotal: 'Line total',
1696
1710
  tryAgain: 'Try again',
1697
1711
  loading: 'Loading…',
1698
1712
  processing: 'Processing…',
@@ -1746,4 +1760,4 @@ function paymentMethodInfo(code, locale) {
1746
1760
  }
1747
1761
 
1748
1762
  export { paymentMethodInfo as A, paymentMethodLabel as B, selectDigitalItems as C, selectSummary as D, sortCartItemsNewestFirst as E, strings as F, toEnglishDigits as G, toPersianDigits as H, addressFormFromInvoice as a, buildShippingAssignments as b, classifyAppliedDiscount as c, createBrowserEffectExecutor as d, createCheckoutEngine as e, createSdkBinding as f, createStore as g, defaultCurrencyLabel as h, deriveShippingGroups as i, emptyAddressForm as j, formatMoney as k, formatNumber as l, formatPercent as m, formatPrice as n, fromSdkError as o, isAddressComplete as p, isAddressDirty as q, isDigitalServiceGroup as r, isShippingComplete as s, isValidIranianMobile as t, isValidIranianPhone as u, makeError as v, makeEvent as w, messageForCode as x, noopEffectExecutor as y, normalizeIranianPhone as z };
1749
- //# sourceMappingURL=labels-e8w4zRbg.js.map
1763
+ //# sourceMappingURL=labels-DxIkDijU.js.map