@sazito/checkout 0.4.13 → 0.4.15

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.
@@ -1043,8 +1043,10 @@ function createCheckoutEngine(options) {
1043
1043
  }
1044
1044
  : {})
1045
1045
  });
1046
- emit('checkout_viewed', { step: 'cart' });
1047
- emit('step_viewed', { step: 'cart' });
1046
+ if (get().step === 'cart') {
1047
+ emit('checkout_viewed', { step: 'cart' });
1048
+ emit('step_viewed', { step: 'cart' });
1049
+ }
1048
1050
  }));
1049
1051
  }
1050
1052
  await startPromise;
@@ -1252,6 +1254,42 @@ function createCheckoutEngine(options) {
1252
1254
  async placeOrder() {
1253
1255
  await withLock(placeOrderInternal);
1254
1256
  },
1257
+ async retryPayment() {
1258
+ // Payment-return pages verify immediately and intentionally skip the
1259
+ // normal cart bootstrap. Rehydrate that state before reopening payment,
1260
+ // otherwise the step has no invoice summary or payment methods.
1261
+ set((prev) => ({
1262
+ step: 'payment',
1263
+ status: 'working',
1264
+ result: null,
1265
+ error: null,
1266
+ flags: { ...prev.flags, loadingPayments: true }
1267
+ }));
1268
+ emit('step_viewed', { step: 'payment' });
1269
+ try {
1270
+ // A failed gateway attempt must not remain the active payment when the
1271
+ // customer starts a new one for the same invoice.
1272
+ binding.credentials.clearPaymentCredentials();
1273
+ await actions.start();
1274
+ if (get().error)
1275
+ return;
1276
+ await withLock(async () => {
1277
+ if (get().paymentMethods.length === 0) {
1278
+ await loadPaymentMethods();
1279
+ }
1280
+ if (get().error)
1281
+ return;
1282
+ if (get().paymentMethods.length === 0) {
1283
+ setError(makeError('payment_failed', get().locale, 'payment'));
1284
+ return;
1285
+ }
1286
+ set({ status: 'idle' });
1287
+ });
1288
+ }
1289
+ finally {
1290
+ setFlag('loadingPayments', false);
1291
+ }
1292
+ },
1255
1293
  async resolvePaymentReturn(params) {
1256
1294
  const resolutionKey = serializePaymentReturnParams(params);
1257
1295
  if (get().result?.status === 'success') {
@@ -1427,7 +1465,6 @@ function createCheckoutEngine(options) {
1427
1465
  failResult(err.message, err);
1428
1466
  return;
1429
1467
  }
1430
- console.debug('[Sazito Checkout] payment init action:', action.data);
1431
1468
  handlePaymentAction(action.data);
1432
1469
  }
1433
1470
  catch (e) {
@@ -1690,6 +1727,7 @@ const fa = {
1690
1727
  finishPurchase: 'پایان خرید',
1691
1728
  back: 'بازگشت',
1692
1729
  continueShopping: 'ادامه خرید',
1730
+ backToShop: 'بازگشت به فروشگاه',
1693
1731
  orderSummary: 'خلاصه سفارش',
1694
1732
  subtotal: 'جمع کل',
1695
1733
  shipping: 'هزینه ارسال',
@@ -1777,6 +1815,7 @@ const en = {
1777
1815
  finishPurchase: 'Finish purchase',
1778
1816
  back: 'Back',
1779
1817
  continueShopping: 'Continue shopping',
1818
+ backToShop: 'Back to shop',
1780
1819
  orderSummary: 'Order Summary',
1781
1820
  subtotal: 'Subtotal',
1782
1821
  shipping: 'Shipping',
@@ -1929,4 +1968,4 @@ exports.sortCartItemsNewestFirst = sortCartItemsNewestFirst;
1929
1968
  exports.strings = strings;
1930
1969
  exports.toEnglishDigits = toEnglishDigits;
1931
1970
  exports.toPersianDigits = toPersianDigits;
1932
- //# sourceMappingURL=labels-BfqHC6_h.cjs.map
1971
+ //# sourceMappingURL=labels-Cb5obEcJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels-Cb5obEcJ.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 { CheckoutOrder, 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 let paymentVerificationTraceSequence = 0;\n let paymentReturnResolution: { key: string; promise: Promise<void> } | null = null;\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 // A gateway callback may be replayed by React effects or the host router.\n // Once the backend has returned a confirmed order, a later replay must not\n // replace that terminal success with payment_fail_error.\n if (get().result?.status === 'success') return;\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, traceId?: string): void {\n logPaymentVerification(traceId, 'action_received', summarizePaymentAction(action));\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: normalizeResultOrder(action.order) },\n error: null\n });\n logPaymentVerification(traceId, 'state_changed', summarizePaymentState());\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 logPaymentVerification(traceId, 'state_changed', summarizePaymentState());\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 logPaymentVerification(traceId, 'state_changed', summarizePaymentState());\n return;\n case 'pending':\n set({\n step: 'result',\n status: 'polling',\n result: {\n status: 'pending',\n order: normalizeResultOrder(action.order),\n message: action.message\n },\n error: null\n });\n logPaymentVerification(traceId, 'state_changed', summarizePaymentState());\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 case 'unknown':\n failResult(action.message ?? makeError('payment_failed', get().locale, 'result').message);\n return;\n }\n }\n\n async function pollPending(): Promise<void> {\n const interval = config.pollIntervalMs ?? 15000;\n const traceId = nextPaymentVerificationTraceId('poll');\n logPaymentVerification(traceId, 'started', { intervalMs: interval });\n const res = await binding.client.payments.pollUntilSettled(undefined, interval);\n logPaymentVerification(traceId, 'sdk_response', res);\n if (res.error || !res.data) {\n const err = fromSdkError(res.error ?? { message: '', type: 'api' }, get().locale, 'result');\n logPaymentVerification(traceId, 'failed', { sdkError: res.error, checkoutError: err });\n failResult(err.message, err);\n return;\n }\n handlePaymentAction(res.data, traceId);\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 if (get().step === 'cart') {\n emit('checkout_viewed', { step: 'cart' });\n emit('step_viewed', { step: 'cart' });\n }\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 retryPayment() {\n // Payment-return pages verify immediately and intentionally skip the\n // normal cart bootstrap. Rehydrate that state before reopening payment,\n // otherwise the step has no invoice summary or payment methods.\n set((prev) => ({\n step: 'payment',\n status: 'working',\n result: null,\n error: null,\n flags: { ...prev.flags, loadingPayments: true }\n }));\n emit('step_viewed', { step: 'payment' });\n try {\n // A failed gateway attempt must not remain the active payment when the\n // customer starts a new one for the same invoice.\n binding.credentials.clearPaymentCredentials();\n await actions.start();\n if (get().error) return;\n\n await withLock(async () => {\n if (get().paymentMethods.length === 0) {\n await loadPaymentMethods();\n }\n if (get().error) return;\n if (get().paymentMethods.length === 0) {\n setError(makeError('payment_failed', get().locale, 'payment'));\n return;\n }\n\n set({ status: 'idle' });\n });\n } finally {\n setFlag('loadingPayments', false);\n }\n },\n\n async resolvePaymentReturn(params) {\n const resolutionKey = serializePaymentReturnParams(params);\n if (get().result?.status === 'success') {\n logPaymentVerification(undefined, 'callback_after_success_skipped', {\n callbackParameterNames: Object.keys(params),\n paymentId: params.id,\n paymentIdentifier: params.paymentIdentifier\n });\n return;\n }\n if (paymentReturnResolution?.key === resolutionKey) {\n logPaymentVerification(undefined, 'duplicate_callback_skipped', {\n callbackParameterNames: Object.keys(params),\n paymentId: params.id,\n paymentIdentifier: params.paymentIdentifier\n });\n await paymentReturnResolution.promise;\n return;\n }\n\n const resolutionPromise = withLock(async () => {\n // Another callback may have completed while this one waited for the\n // engine lock. A confirmed order is terminal for this engine instance.\n if (get().result?.status === 'success') {\n logPaymentVerification(undefined, 'queued_callback_after_success_skipped', {\n callbackParameterNames: Object.keys(params),\n paymentId: params.id,\n paymentIdentifier: params.paymentIdentifier\n });\n return;\n }\n const traceId = nextPaymentVerificationTraceId('callback');\n logPaymentVerification(traceId, 'started', {\n callbackParameterNames: Object.keys(params),\n paymentId: params.id,\n paymentIdentifier: params.paymentIdentifier\n });\n set({ step: 'result', status: 'polling', result: { status: 'pending' }, error: null });\n const input = paymentReturnInput(params);\n logPaymentVerification(traceId, 'input_parsed', {\n paymentId: input?.id,\n paymentIdentifier: input?.paymentIdentifier,\n payloadFieldNames: input?.payload ? Object.keys(input.payload) : []\n });\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 logPaymentVerification(traceId, 'credentials_restored', {\n paymentId: input.id,\n paymentIdentifier: input.paymentIdentifier\n });\n }\n logPaymentVerification(traceId, 'sdk_verify_started', {\n hasInput: Boolean(input)\n });\n const action = await binding.client.payments.verify(input);\n logPaymentVerification(traceId, 'sdk_verify_finished', action);\n if (action.error || !action.data) {\n const err = fromSdkError(action.error ?? { message: '', type: 'api' }, get().locale, 'result');\n logPaymentVerification(traceId, 'failed', {\n sdkError: action.error,\n checkoutError: err\n });\n failResult(err.message, err);\n return;\n }\n handlePaymentAction(action.data, traceId);\n });\n paymentReturnResolution = { key: resolutionKey, promise: resolutionPromise };\n await resolutionPromise;\n },\n\n reset() {\n addressRevision += 1;\n paymentReturnResolution = null;\n set(initialState(config));\n }\n };\n\n // Older compatible SDK releases may pass the backend's nullable collection\n // fields through unchanged. Keep the checkout result UI safe even when it is\n // paired with one of those versions.\n function normalizeResultOrder(order: CheckoutOrder | undefined): CheckoutOrder | undefined {\n if (!order) return undefined;\n const invoice = order.invoice;\n return {\n ...order,\n invoice: {\n ...invoice,\n invoiceItems: Array.isArray(invoice?.invoiceItems) ? invoice.invoiceItems : [],\n shippingItems: Array.isArray(invoice?.shippingItems) ? invoice.shippingItems : []\n }\n };\n }\n\n function nextPaymentVerificationTraceId(operation: 'callback' | 'poll'): string {\n paymentVerificationTraceSequence += 1;\n return `${operation}-${Date.now()}-${paymentVerificationTraceSequence}`;\n }\n\n function logPaymentVerification(\n traceId: string | undefined,\n stage: string,\n details: unknown\n ): void {\n if (!config.debug) return;\n console.debug(\n `[Sazito Checkout][Payment Verification][${traceId ?? 'untracked'}] ${stage}`,\n redactPaymentLogValue(details)\n );\n }\n\n function redactPaymentLogValue(value: unknown, key = ''): unknown {\n const sensitiveKey = /authorization|cookie|password|secret|token|identifier|tracking|mobile|phone|email|postal|address|first.?name|last.?name|receipt.?ref|ref.?id/i;\n if (sensitiveKey.test(key)) {\n if (value === undefined || value === null || value === '') return value;\n const text = String(value);\n return text.length <= 4 ? '[REDACTED]' : `[REDACTED:${text.slice(-4)}]`;\n }\n if (Array.isArray(value)) return value.map((entry) => redactPaymentLogValue(entry));\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([entryKey, entryValue]) => [\n entryKey,\n redactPaymentLogValue(entryValue, entryKey)\n ])\n );\n }\n return value;\n }\n\n function summarizePaymentAction(action: PaymentAction): Record<string, unknown> {\n return {\n action: action.action,\n message: action.message,\n backendAction: action.action === 'unknown' ? action.backendAction : undefined,\n order: 'order' in action && action.order ? {\n id: action.order.id,\n orderNumber: action.order.orderNumber,\n orderIdentifier: action.order.orderIdentifier,\n invoiceItemCount: action.order.invoice?.invoiceItems?.length ?? 0,\n shippingItemCount: action.order.invoice?.shippingItems?.length ?? 0\n } : undefined,\n raw: action.raw\n };\n }\n\n function summarizePaymentState(): Record<string, unknown> {\n const state = get();\n return {\n step: state.step,\n status: state.status,\n resultStatus: state.result?.status,\n resultMessage: state.result?.message,\n orderId: state.result?.order?.id,\n error: state.error\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 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// Preserve every gateway-return field and its original casing. The SDK sends\n// these values as direct fields in the form-encoded verification call.\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.id != null && Number.isFinite(Number(params.id))) input.id = Number(params.id);\n if (params.paymentIdentifier != null) input.paymentIdentifier = params.paymentIdentifier;\n\n const payload: Record<string, string> = {};\n for (const [name, value] of Object.entries(params)) {\n if (name !== 'id' && name !== 'paymentIdentifier') payload[name] = value;\n }\n if (Object.keys(payload).length > 0) input.payload = payload;\n\n return Object.keys(input).length > 0 ? input : undefined;\n}\n\nfunction serializePaymentReturnParams(params: Record<string, string>): string {\n return JSON.stringify(\n Object.entries(params).sort(([left], [right]) => left.localeCompare(right))\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 backToShop: 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 backToShop: 'بازگشت به فروشگاه',\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 backToShop: 'Back to shop',\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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"}
@@ -1041,8 +1041,10 @@ function createCheckoutEngine(options) {
1041
1041
  }
1042
1042
  : {})
1043
1043
  });
1044
- emit('checkout_viewed', { step: 'cart' });
1045
- emit('step_viewed', { step: 'cart' });
1044
+ if (get().step === 'cart') {
1045
+ emit('checkout_viewed', { step: 'cart' });
1046
+ emit('step_viewed', { step: 'cart' });
1047
+ }
1046
1048
  }));
1047
1049
  }
1048
1050
  await startPromise;
@@ -1250,6 +1252,42 @@ function createCheckoutEngine(options) {
1250
1252
  async placeOrder() {
1251
1253
  await withLock(placeOrderInternal);
1252
1254
  },
1255
+ async retryPayment() {
1256
+ // Payment-return pages verify immediately and intentionally skip the
1257
+ // normal cart bootstrap. Rehydrate that state before reopening payment,
1258
+ // otherwise the step has no invoice summary or payment methods.
1259
+ set((prev) => ({
1260
+ step: 'payment',
1261
+ status: 'working',
1262
+ result: null,
1263
+ error: null,
1264
+ flags: { ...prev.flags, loadingPayments: true }
1265
+ }));
1266
+ emit('step_viewed', { step: 'payment' });
1267
+ try {
1268
+ // A failed gateway attempt must not remain the active payment when the
1269
+ // customer starts a new one for the same invoice.
1270
+ binding.credentials.clearPaymentCredentials();
1271
+ await actions.start();
1272
+ if (get().error)
1273
+ return;
1274
+ await withLock(async () => {
1275
+ if (get().paymentMethods.length === 0) {
1276
+ await loadPaymentMethods();
1277
+ }
1278
+ if (get().error)
1279
+ return;
1280
+ if (get().paymentMethods.length === 0) {
1281
+ setError(makeError('payment_failed', get().locale, 'payment'));
1282
+ return;
1283
+ }
1284
+ set({ status: 'idle' });
1285
+ });
1286
+ }
1287
+ finally {
1288
+ setFlag('loadingPayments', false);
1289
+ }
1290
+ },
1253
1291
  async resolvePaymentReturn(params) {
1254
1292
  const resolutionKey = serializePaymentReturnParams(params);
1255
1293
  if (get().result?.status === 'success') {
@@ -1425,7 +1463,6 @@ function createCheckoutEngine(options) {
1425
1463
  failResult(err.message, err);
1426
1464
  return;
1427
1465
  }
1428
- console.debug('[Sazito Checkout] payment init action:', action.data);
1429
1466
  handlePaymentAction(action.data);
1430
1467
  }
1431
1468
  catch (e) {
@@ -1688,6 +1725,7 @@ const fa = {
1688
1725
  finishPurchase: 'پایان خرید',
1689
1726
  back: 'بازگشت',
1690
1727
  continueShopping: 'ادامه خرید',
1728
+ backToShop: 'بازگشت به فروشگاه',
1691
1729
  orderSummary: 'خلاصه سفارش',
1692
1730
  subtotal: 'جمع کل',
1693
1731
  shipping: 'هزینه ارسال',
@@ -1775,6 +1813,7 @@ const en = {
1775
1813
  finishPurchase: 'Finish purchase',
1776
1814
  back: 'Back',
1777
1815
  continueShopping: 'Continue shopping',
1816
+ backToShop: 'Back to shop',
1778
1817
  orderSummary: 'Order Summary',
1779
1818
  subtotal: 'Subtotal',
1780
1819
  shipping: 'Shipping',
@@ -1894,4 +1933,4 @@ function paymentMethodInfo(code, locale) {
1894
1933
  }
1895
1934
 
1896
1935
  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 };
1897
- //# sourceMappingURL=labels-Dlwf3S83.js.map
1936
+ //# sourceMappingURL=labels-TSPPdjAd.js.map