@sazito/checkout 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels-ChywPk2i.js","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}\n\nexport function createStore<T extends object>(initialState: T): Store<T> {\n let state = initialState;\n const listeners = new Set<() => void>();\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 listeners.forEach((listener) => listener());\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\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}\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 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 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\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\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 // Exclude digital items — they never go through physical shipping groups.\n const physicalItemsRate = (applicable.itemsShippingRate ?? []).filter((isr) => {\n const item = itemById.get(idStr(isr.invoiceItemId));\n return !item || item.productType !== '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 the current group selections. */\nexport function buildShippingAssignments(groups: ShippingGroup[]): ShippingAssignment[] {\n return groups\n .filter((group) => group.selectedRateId != null)\n .map((group) => ({\n rateId: group.selectedRateId as number,\n invoiceItemIds: group.itemIds\n }));\n}\n\n/** True once every shippable group has a selected rate. */\nexport function isShippingComplete(invoice: Invoice | null, groups: ShippingGroup[]): boolean {\n if (!invoice?.needsShipping) {\n return true;\n }\n if (groups.length === 0) {\n return false;\n }\n return groups.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((item) => item.productType === 'digital');\n }\n // After shipping methods load: items absent from all groups are non-shippable.\n const shippable = new Set(groups.flatMap((g) => g.itemIds.map(idStr)));\n return invoice.items.filter((item) => !shippable.has(idStr(item.id)));\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, Cart, 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'];\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 addressRevision = 0;\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 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 'showOrder':\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 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({ step: 'result', status: 'polling', result: { status: 'pending' } });\n emit('payment_pending', { step: 'result' });\n void pollPending();\n return;\n case 'UPLOAD':\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 default:\n // Unknown/unhandled action from the gateway — never stall silently.\n console.error('[Sazito Checkout] Unhandled payment action:', action);\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 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 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, invoice, applicable } = get();\n if (!applicable && 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 await withLock(async () => {\n setFlag('bootstrapping', true);\n set({ status: 'bootstrapping', error: null });\n\n const [cartOk, , , invoiceOk] = await Promise.all([\n loadCart(),\n loadRegions(),\n loadGeneralInfo(),\n ensureInvoice()\n ]);\n setFlag('bootstrapping', false);\n if (!cartOk || !invoiceOk) {\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 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 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 set({ addressForm: addressFormFromInvoice(invoice) });\n }\n goToStep('shipping');\n }\n return;\n }\n\n if (state.step === 'shipping') {\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 // Optimistically update summary from cart data, then confirm with server.\n const inv = get().invoice;\n if (inv) set({ invoice: applyCartToInvoice(inv, 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 const inv = get().invoice;\n if (inv) set({ invoice: applyCartToInvoice(inv, 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 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 // Rates are derived from the address snapshot. Never keep showing or\n // accepting rates fetched for a different form value.\n ...(addressDirty ? { applicable: null, shippingGroups: [] } : {})\n };\n });\n\n // City selection is a discrete destination change, so refresh rates\n // automatically. Text inputs still wait for Save/Continue to avoid an\n // address creation and shipping request on every keystroke.\n if (changed && key === 'cityId' && value != null && get().step === 'shipping') {\n const state = get();\n if (isAddressComplete(\n state.addressForm,\n state.invoice?.needsShipping ?? true,\n state.postalCodeMandatory,\n state.emailMandatory\n )) {\n void withLock(submitAddressInternal);\n }\n }\n },\n\n async submitAddress() {\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 action = await binding.client.payments.verify(paymentReturnInput(params));\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\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 const ok = await loadApplicableShipping(submittedAddressRevision);\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 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/**\n * Immediately derive updated invoice item quantities and totals from a fresh\n * cart response so the summary panel doesn't wait for the invoice refresh.\n */\nfunction applyCartToInvoice(invoice: Invoice, cart: Cart): Invoice {\n const byVariant = new Map(cart.items.map((i) => [i.productVariantId, i]));\n const newItems = invoice.items\n .filter((item) => byVariant.has(item.productVariantId))\n .map((item) => {\n const ci = byVariant.get(item.productVariantId)!;\n return { ...item, quantity: ci.quantity, lineTotal: ci.lineTotal };\n });\n const subtotal = newItems.reduce((s, i) => s + i.lineTotal, 0);\n const discount = (invoice.itemsDiscount || 0) + (invoice.discountTotal || 0) + (invoice.couponTotal || 0);\n const finalTotal = Math.max(0, subtotal - discount + (invoice.shippingTotal || 0) + (invoice.vat || 0) - (invoice.creditTotal || 0));\n return { ...invoice, items: newItems, itemsTotalRawPrice: subtotal, netTotal: subtotal, finalTotal };\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: PaymentAction['payload']): 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 // 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 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 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 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 product — no shipping required',\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 number',\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":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var labels = require('./labels-BlMZkOsV.cjs');
6
+
7
+ const CheckoutEngineContext = react.createContext(null);
8
+ function useCheckoutEngine() {
9
+ const engine = react.useContext(CheckoutEngineContext);
10
+ if (!engine) {
11
+ throw new Error('useCheckout must be used within <CheckoutProvider>.');
12
+ }
13
+ return engine;
14
+ }
15
+
16
+ const SazitoClientContext = react.createContext(null);
17
+ function SazitoProvider({ client, children }) {
18
+ return (jsxRuntime.jsx(SazitoClientContext.Provider, { value: { client }, children: children }));
19
+ }
20
+ function useSazitoClient() {
21
+ return react.useContext(SazitoClientContext)?.client;
22
+ }
23
+
24
+ function CheckoutProvider({ client: clientProp, credentials, config, autoStart = true, children }) {
25
+ const contextClient = useSazitoClient();
26
+ const client = clientProp ?? contextClient;
27
+ const cartIdentifier = credentials?.cart?.identifier;
28
+ const invoiceId = credentials?.invoice?.id;
29
+ const invoiceIdentifier = credentials?.invoice?.identifier;
30
+ const engine = react.useMemo(() => {
31
+ const nextEngine = labels.createCheckoutEngine({ client, credentials, config });
32
+ nextEngine.setEffectExecutor(labels.createBrowserEffectExecutor(config));
33
+ return nextEngine;
34
+ // Recreate only when the SDK/session changes. Config-only updates are applied below.
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, [client, cartIdentifier, invoiceId, invoiceIdentifier]);
37
+ react.useEffect(() => {
38
+ engine.setEffectExecutor(labels.createBrowserEffectExecutor(config));
39
+ }, [engine, config]);
40
+ react.useEffect(() => {
41
+ if (autoStart) {
42
+ void engine.actions.start();
43
+ }
44
+ return () => engine.destroy();
45
+ }, [engine, autoStart]);
46
+ const value = react.useMemo(() => engine, [engine]);
47
+ return jsxRuntime.jsx(CheckoutEngineContext.Provider, { value: value, children: children });
48
+ }
49
+
50
+ function useCheckout() {
51
+ const engine = useCheckoutEngine();
52
+ const state = react.useSyncExternalStore(engine.subscribe, engine.getState, engine.getState);
53
+ return {
54
+ state,
55
+ actions: engine.actions,
56
+ t: labels.strings(state.locale),
57
+ money: (value) => labels.formatMoney(value, state.locale),
58
+ price: (value) => labels.formatPrice(value, state.locale),
59
+ summary: labels.selectSummary(state.invoice),
60
+ digitalItems: labels.selectDigitalItems(state.invoice, state.shippingGroups, state.applicable)
61
+ };
62
+ }
63
+
64
+ exports.CheckoutProvider = CheckoutProvider;
65
+ exports.SazitoProvider = SazitoProvider;
66
+ exports.useCheckout = useCheckout;
67
+ exports.useCheckoutEngine = useCheckoutEngine;
68
+ exports.useSazitoClient = useSazitoClient;
69
+ //# sourceMappingURL=use-checkout-Cvp_K3UW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-checkout-Cvp_K3UW.cjs","sources":["../../src/react/context.ts","../../src/react/client-context.tsx","../../src/react/provider.tsx","../../src/react/use-checkout.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { CheckoutEngine } from '../core';\n\nexport const CheckoutEngineContext = createContext<CheckoutEngine | null>(null);\n\nexport function useCheckoutEngine(): CheckoutEngine {\n const engine = useContext(CheckoutEngineContext);\n if (!engine) {\n throw new Error('useCheckout must be used within <CheckoutProvider>.');\n }\n return engine;\n}\n","'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\n\ninterface SazitoContextValue {\n client: unknown;\n}\n\nconst SazitoClientContext = createContext<SazitoContextValue | null>(null);\n\nexport interface SazitoProviderProps {\n client: unknown;\n children: ReactNode;\n}\n\nexport function SazitoProvider({ client, children }: SazitoProviderProps) {\n return (\n <SazitoClientContext.Provider value={{ client }}>\n {children}\n </SazitoClientContext.Provider>\n );\n}\n\nexport function useSazitoClient(): unknown {\n return useContext(SazitoClientContext)?.client;\n}\n","'use client';\n\nimport { useEffect, useMemo, type ReactNode } from 'react';\nimport {\n createCheckoutEngine,\n createBrowserEffectExecutor,\n type CheckoutConfig,\n type CheckoutCredentials,\n type CheckoutEngine\n} from '../core';\nimport { CheckoutEngineContext } from './context';\nimport { useSazitoClient } from './client-context';\n\nexport interface CheckoutProviderProps {\n /** Override the SazitoProvider client for this checkout instance only. */\n client?: unknown;\n credentials?: CheckoutCredentials;\n config?: CheckoutConfig;\n autoStart?: boolean;\n children: ReactNode;\n}\n\nexport function CheckoutProvider({\n client: clientProp,\n credentials,\n config,\n autoStart = true,\n children\n}: CheckoutProviderProps) {\n const contextClient = useSazitoClient();\n const client = clientProp ?? contextClient;\n\n const cartIdentifier = credentials?.cart?.identifier;\n const invoiceId = credentials?.invoice?.id;\n const invoiceIdentifier = credentials?.invoice?.identifier;\n const engine = useMemo<CheckoutEngine>(() => {\n const nextEngine = createCheckoutEngine({ client, credentials, config });\n nextEngine.setEffectExecutor(createBrowserEffectExecutor(config));\n return nextEngine;\n // Recreate only when the SDK/session changes. Config-only updates are applied below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, cartIdentifier, invoiceId, invoiceIdentifier]);\n\n useEffect(() => {\n engine.setEffectExecutor(createBrowserEffectExecutor(config));\n }, [engine, config]);\n\n useEffect(() => {\n if (autoStart) {\n void engine.actions.start();\n }\n return () => engine.destroy();\n }, [engine, autoStart]);\n\n const value = useMemo(() => engine, [engine]);\n\n return <CheckoutEngineContext.Provider value={value}>{children}</CheckoutEngineContext.Provider>;\n}\n","'use client';\n\nimport { useSyncExternalStore } from 'react';\nimport {\n formatMoney,\n formatPrice,\n selectDigitalItems,\n selectSummary,\n strings,\n type CheckoutActions,\n type CheckoutState,\n type CheckoutSummary,\n type InvoiceItem,\n type Strings\n} from '../core';\nimport { useCheckoutEngine } from './context';\n\nexport interface UseCheckout {\n state: CheckoutState;\n actions: CheckoutActions;\n /** Localized UI strings. */\n t: Strings;\n /** Format an amount with the currency label for the active locale. */\n money(value: number): string;\n /** Like `money`, but renders 0 as \"Free\". */\n price(value: number): string;\n summary: CheckoutSummary;\n digitalItems: InvoiceItem[];\n}\n\nexport function useCheckout(): UseCheckout {\n const engine = useCheckoutEngine();\n const state = useSyncExternalStore(\n engine.subscribe,\n engine.getState,\n engine.getState\n );\n\n return {\n state,\n actions: engine.actions,\n t: strings(state.locale),\n money: (value: number) => formatMoney(value, state.locale),\n price: (value: number) => formatPrice(value, state.locale),\n summary: selectSummary(state.invoice),\n digitalItems: selectDigitalItems(state.invoice, state.shippingGroups, state.applicable)\n };\n}\n"],"names":["createContext","useContext","_jsx","useMemo","createCheckoutEngine","createBrowserEffectExecutor","useEffect","useSyncExternalStore","strings","formatMoney","formatPrice","selectSummary","selectDigitalItems"],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, useContext, useMemo, useEffect, useSyncExternalStore } from 'react';
3
+ import { e as createCheckoutEngine, d as createBrowserEffectExecutor, B as selectDigitalItems, C as selectSummary, n as formatPrice, k as formatMoney, D as strings } from './labels-ChywPk2i.js';
4
+
5
+ const CheckoutEngineContext = createContext(null);
6
+ function useCheckoutEngine() {
7
+ const engine = useContext(CheckoutEngineContext);
8
+ if (!engine) {
9
+ throw new Error('useCheckout must be used within <CheckoutProvider>.');
10
+ }
11
+ return engine;
12
+ }
13
+
14
+ const SazitoClientContext = createContext(null);
15
+ function SazitoProvider({ client, children }) {
16
+ return (jsx(SazitoClientContext.Provider, { value: { client }, children: children }));
17
+ }
18
+ function useSazitoClient() {
19
+ return useContext(SazitoClientContext)?.client;
20
+ }
21
+
22
+ function CheckoutProvider({ client: clientProp, credentials, config, autoStart = true, children }) {
23
+ const contextClient = useSazitoClient();
24
+ const client = clientProp ?? contextClient;
25
+ const cartIdentifier = credentials?.cart?.identifier;
26
+ const invoiceId = credentials?.invoice?.id;
27
+ const invoiceIdentifier = credentials?.invoice?.identifier;
28
+ const engine = useMemo(() => {
29
+ const nextEngine = createCheckoutEngine({ client, credentials, config });
30
+ nextEngine.setEffectExecutor(createBrowserEffectExecutor(config));
31
+ return nextEngine;
32
+ // Recreate only when the SDK/session changes. Config-only updates are applied below.
33
+ // eslint-disable-next-line react-hooks/exhaustive-deps
34
+ }, [client, cartIdentifier, invoiceId, invoiceIdentifier]);
35
+ useEffect(() => {
36
+ engine.setEffectExecutor(createBrowserEffectExecutor(config));
37
+ }, [engine, config]);
38
+ useEffect(() => {
39
+ if (autoStart) {
40
+ void engine.actions.start();
41
+ }
42
+ return () => engine.destroy();
43
+ }, [engine, autoStart]);
44
+ const value = useMemo(() => engine, [engine]);
45
+ return jsx(CheckoutEngineContext.Provider, { value: value, children: children });
46
+ }
47
+
48
+ function useCheckout() {
49
+ const engine = useCheckoutEngine();
50
+ const state = useSyncExternalStore(engine.subscribe, engine.getState, engine.getState);
51
+ return {
52
+ state,
53
+ actions: engine.actions,
54
+ t: strings(state.locale),
55
+ money: (value) => formatMoney(value, state.locale),
56
+ price: (value) => formatPrice(value, state.locale),
57
+ summary: selectSummary(state.invoice),
58
+ digitalItems: selectDigitalItems(state.invoice, state.shippingGroups, state.applicable)
59
+ };
60
+ }
61
+
62
+ export { CheckoutProvider as C, SazitoProvider as S, useCheckoutEngine as a, useSazitoClient as b, useCheckout as u };
63
+ //# sourceMappingURL=use-checkout-E0O8HsSs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-checkout-E0O8HsSs.js","sources":["../../src/react/context.ts","../../src/react/client-context.tsx","../../src/react/provider.tsx","../../src/react/use-checkout.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { CheckoutEngine } from '../core';\n\nexport const CheckoutEngineContext = createContext<CheckoutEngine | null>(null);\n\nexport function useCheckoutEngine(): CheckoutEngine {\n const engine = useContext(CheckoutEngineContext);\n if (!engine) {\n throw new Error('useCheckout must be used within <CheckoutProvider>.');\n }\n return engine;\n}\n","'use client';\n\nimport { createContext, useContext, type ReactNode } from 'react';\n\ninterface SazitoContextValue {\n client: unknown;\n}\n\nconst SazitoClientContext = createContext<SazitoContextValue | null>(null);\n\nexport interface SazitoProviderProps {\n client: unknown;\n children: ReactNode;\n}\n\nexport function SazitoProvider({ client, children }: SazitoProviderProps) {\n return (\n <SazitoClientContext.Provider value={{ client }}>\n {children}\n </SazitoClientContext.Provider>\n );\n}\n\nexport function useSazitoClient(): unknown {\n return useContext(SazitoClientContext)?.client;\n}\n","'use client';\n\nimport { useEffect, useMemo, type ReactNode } from 'react';\nimport {\n createCheckoutEngine,\n createBrowserEffectExecutor,\n type CheckoutConfig,\n type CheckoutCredentials,\n type CheckoutEngine\n} from '../core';\nimport { CheckoutEngineContext } from './context';\nimport { useSazitoClient } from './client-context';\n\nexport interface CheckoutProviderProps {\n /** Override the SazitoProvider client for this checkout instance only. */\n client?: unknown;\n credentials?: CheckoutCredentials;\n config?: CheckoutConfig;\n autoStart?: boolean;\n children: ReactNode;\n}\n\nexport function CheckoutProvider({\n client: clientProp,\n credentials,\n config,\n autoStart = true,\n children\n}: CheckoutProviderProps) {\n const contextClient = useSazitoClient();\n const client = clientProp ?? contextClient;\n\n const cartIdentifier = credentials?.cart?.identifier;\n const invoiceId = credentials?.invoice?.id;\n const invoiceIdentifier = credentials?.invoice?.identifier;\n const engine = useMemo<CheckoutEngine>(() => {\n const nextEngine = createCheckoutEngine({ client, credentials, config });\n nextEngine.setEffectExecutor(createBrowserEffectExecutor(config));\n return nextEngine;\n // Recreate only when the SDK/session changes. Config-only updates are applied below.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, cartIdentifier, invoiceId, invoiceIdentifier]);\n\n useEffect(() => {\n engine.setEffectExecutor(createBrowserEffectExecutor(config));\n }, [engine, config]);\n\n useEffect(() => {\n if (autoStart) {\n void engine.actions.start();\n }\n return () => engine.destroy();\n }, [engine, autoStart]);\n\n const value = useMemo(() => engine, [engine]);\n\n return <CheckoutEngineContext.Provider value={value}>{children}</CheckoutEngineContext.Provider>;\n}\n","'use client';\n\nimport { useSyncExternalStore } from 'react';\nimport {\n formatMoney,\n formatPrice,\n selectDigitalItems,\n selectSummary,\n strings,\n type CheckoutActions,\n type CheckoutState,\n type CheckoutSummary,\n type InvoiceItem,\n type Strings\n} from '../core';\nimport { useCheckoutEngine } from './context';\n\nexport interface UseCheckout {\n state: CheckoutState;\n actions: CheckoutActions;\n /** Localized UI strings. */\n t: Strings;\n /** Format an amount with the currency label for the active locale. */\n money(value: number): string;\n /** Like `money`, but renders 0 as \"Free\". */\n price(value: number): string;\n summary: CheckoutSummary;\n digitalItems: InvoiceItem[];\n}\n\nexport function useCheckout(): UseCheckout {\n const engine = useCheckoutEngine();\n const state = useSyncExternalStore(\n engine.subscribe,\n engine.getState,\n engine.getState\n );\n\n return {\n state,\n actions: engine.actions,\n t: strings(state.locale),\n money: (value: number) => formatMoney(value, state.locale),\n price: (value: number) => formatPrice(value, state.locale),\n summary: selectSummary(state.invoice),\n digitalItems: selectDigitalItems(state.invoice, state.shippingGroups, state.applicable)\n };\n}\n"],"names":["_jsx"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var labels = require('../chunks/labels-BlMZkOsV.cjs');
4
+ require('@sazito/client-sdk');
5
+
6
+
7
+
8
+ exports.addressFormFromInvoice = labels.addressFormFromInvoice;
9
+ exports.buildShippingAssignments = labels.buildShippingAssignments;
10
+ exports.classifyAppliedDiscount = labels.classifyAppliedDiscount;
11
+ exports.createBrowserEffectExecutor = labels.createBrowserEffectExecutor;
12
+ exports.createCheckoutEngine = labels.createCheckoutEngine;
13
+ exports.createSdkBinding = labels.createSdkBinding;
14
+ exports.createStore = labels.createStore;
15
+ exports.defaultCurrencyLabel = labels.defaultCurrencyLabel;
16
+ exports.deriveShippingGroups = labels.deriveShippingGroups;
17
+ exports.emptyAddressForm = labels.emptyAddressForm;
18
+ exports.formatMoney = labels.formatMoney;
19
+ exports.formatNumber = labels.formatNumber;
20
+ exports.formatPercent = labels.formatPercent;
21
+ exports.formatPrice = labels.formatPrice;
22
+ exports.fromSdkError = labels.fromSdkError;
23
+ exports.isAddressComplete = labels.isAddressComplete;
24
+ exports.isAddressDirty = labels.isAddressDirty;
25
+ exports.isShippingComplete = labels.isShippingComplete;
26
+ exports.isValidIranianMobile = labels.isValidIranianMobile;
27
+ exports.isValidIranianPhone = labels.isValidIranianPhone;
28
+ exports.makeError = labels.makeError;
29
+ exports.makeEvent = labels.makeEvent;
30
+ exports.messageForCode = labels.messageForCode;
31
+ exports.noopEffectExecutor = labels.noopEffectExecutor;
32
+ exports.normalizeIranianPhone = labels.normalizeIranianPhone;
33
+ exports.paymentMethodInfo = labels.paymentMethodInfo;
34
+ exports.paymentMethodLabel = labels.paymentMethodLabel;
35
+ exports.selectDigitalItems = labels.selectDigitalItems;
36
+ exports.selectSummary = labels.selectSummary;
37
+ exports.strings = labels.strings;
38
+ exports.toEnglishDigits = labels.toEnglishDigits;
39
+ exports.toPersianDigits = labels.toPersianDigits;
40
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}