@sazito/client-sdk 1.2.16 → 1.2.18
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.
- package/dist/index.d.mts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.umd.js +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const t={apiBaseUrl:"http://api.sazito.com:8080",paymentsBasePath:"/api/v2/payments",timeout:3e4,retry:{enabled:!0,retries:3,retryDelay:1e3},cache:{products:{enabled:!0,ttl:6e5},categories:{enabled:!0,ttl:6e5},cart:{enabled:!1},orders:{enabled:!1},search:{enabled:!0,ttl:3e5},cms:{enabled:!0,ttl:6e5},tags:{enabled:!0,ttl:6e5},entityRoutes:{enabled:!0,ttl:6e5}},debug:!1};function e(e){return{...t,...e,retry:{...t.retry,...e.retry},cache:{...t.cache,...e.cache},customFetchApi:e.customFetchApi||("undefined"!=typeof fetch?fetch:void 0)}}class a{constructor(){this.tokenKey="user_id_token"}get(){if("undefined"==typeof window||"undefined"==typeof document)return null;const t=this.getFromLocalStorage();if(t)return t;return this.parseCookies()[this.tokenKey]||null}set(t,e){if("undefined"==typeof window||"undefined"==typeof document)return void console.warn("[Sazito SDK] Cannot set token in SSR environment");this.setInLocalStorage(t);const a={secure:!0,sameSite:"Lax",maxAge:2592e3,path:"/",...e};this.setCookie(this.tokenKey,t,a)}remove(){"undefined"!=typeof window&&"undefined"!=typeof document&&(this.removeFromLocalStorage(),this.setCookie(this.tokenKey,"",{maxAge:-1,path:"/"}))}getFromLocalStorage(){try{return window.localStorage.getItem(this.tokenKey)}catch{return null}}setInLocalStorage(t){try{window.localStorage.setItem(this.tokenKey,t)}catch{}}removeFromLocalStorage(){try{window.localStorage.removeItem(this.tokenKey)}catch{}}parseCookies(){return"undefined"==typeof document?{}:document.cookie.split(";").reduce((t,e)=>{const[a,i]=e.trim().split("=");return a&&i&&(t[a]=decodeURIComponent(i)),t},{})}setCookie(t,e,a){let i=`${t}=${encodeURIComponent(e)}`;void 0!==a.maxAge&&(i+=`; Max-Age=${a.maxAge}`),a.path&&(i+=`; Path=${a.path}`),a.domain&&(i+=`; Domain=${a.domain}`),a.secure&&(i+="; Secure"),a.httpOnly&&(i+="; HttpOnly"),a.sameSite&&(i+=`; SameSite=${a.sameSite}`),document.cookie=i}}class i{constructor(){this.cache=new Map}get(t,e){const a=this.cache.get(t);return a?e&&Date.now()-a.timestamp>e?(this.cache.delete(t),null):a.data:null}set(t,e){this.cache.set(t,{data:e,timestamp:Date.now()})}delete(t){this.cache.delete(t)}deletePattern(t){const e=new RegExp(t),a=[];this.cache.forEach((t,i)=>{e.test(i)&&a.push(i)}),a.forEach(t=>this.cache.delete(t))}clear(){this.cache.clear()}static generateKey(t,e,a){return`${t}:${e}:${a?JSON.stringify(a):""}`}}const r=new Set(["mobile_phone","phone_number"]);function n(t){return t.replace(/[۰-۹٠-٩]/g,t=>{const e=t.charCodeAt(0);return String(e>=1776?e-1776:e-1632)})}const s={no_of_items:"quantity",single_item_price:"unitPrice",total_items_price:"lineTotal",items_total_raw_price:"itemsTotalRawPrice",items_discount:"itemsDiscount",customer_profit:"customerProfit",customer_profit_percentage:"customerProfitPercentage",total_amount:"totalAmount",net_total:"netTotal",gross_total:"grossTotal",final_total:"finalTotal",discount_total:"discountTotal",shipping_total:"shippingTotal",tax_total:"taxTotal",unique_identifier:"identifier",invoice_identifier:"identifier",payment_identifier:"identifier",shipping_address_identifier:"identifier",first_name:"firstName",last_name:"lastName",mobile_phone:"mobilePhone",phone_number:"phoneNumber",postal_code:"postalCode",user_comment:"userComment",product_id:"productId",variant_id:"variantId",product_name:"name",product_image:"image",product_variant:"variant",product_variants:"variants",product_categories:"categories",product_attributes:"attributes",variant_attributes:"attributes",product_type:"productType",short_description:"shortDescription",stock_quantity:"stockQuantity",stock_number:"stockQuantity",sale_price:"salePrice",raw_price:"originalPrice",has_max_order:"hasMaxOrder",max_no_of_order:"maxOrderQuantity",min_order_count:"minOrderQuantity",sold_count:"soldCount",static_url:"staticUrl",dynamic_form_id:"dynamicFormId",event_entity_id:"eventEntityId",theme_config:"themeConfig",image_id:"imageId",is_stock_managed:"isStockManaged",commercial_files:"commercialFiles",sort_index:"sortIndex",attribute_type:"attributeType",cart_products:"items",cart_product_id:"cartProductId",min_basket_limit_violated:"minBasketLimitViolated",invoice_items:"items",products:"items",total_count:"total",shipping_method_needed:"needsShipping",shipping_method:"shippingMethod",shipping_address:"shippingAddress",shipping_items:"shippingItems",delivery_time:"deliveryTime",min_delivery_days:"minDays",max_delivery_days:"maxDays",payment_type:"paymentType",payment_types:"paymentTypes",payment_amount:"amount",reference_code:"code",is_default:"isDefault",is_available:"isAvailable",delete_coupon:"deleteCoupon",form_attributes:"formAttributes",booking_attributes:"bookingAttributes",readable_form_attr:"formFields",created_at:"createdAt",updated_at:"updatedAt",page_number:"page",page_size:"pageSize",total_count_raw:"totalCountRaw",max_price:"maxPrice",min_price:"minPrice",stock_alert_limit:"stockAlertLimit",sub_categories:"subCategories",order_number:"orderNumber",sort_order:"sortOrder",pinned_ids:"pinnedIds",region_id:"regionId",city_id:"cityId",parent_id:"parentId",discount_code:"discountCode",entity_name:"entityType",entity_id:"entityId",other_props:"entity",shipping_methods:"shippingMethods",shipping_rates:"shippingRates",grouped_shipping_rates:"groupedShippingRates",items_shipping_rate:"itemsShippingRate",shipping_rate:"shippingRate",rate_id:"rateId",invoice_item_id:"invoiceItemId",invoice_item_ids:"invoiceItemIds",scheduler_booking_attributes:"schedulerBookingAttributes",inventory_count:"inventoryCount",order_identifier:"orderIdentifier",self_only:"selfOnly",coupon:"coupon",discount_usages:"discountUsages",user_set_coordinates_before:"userSetCoordinatesBefore",show_order:"showOrder",alt:"alt",url:"url",activate_add_to_cart_alert:"addToCardAlert",activate_advanced_card_to_card:"advancedCardToCard",activate_ayria_payment_customization:"ayriaPaymentGateway",activate_azki_payment_customization:"azkiPaymentGateway",activate_bazar_payment_customization:"bazarPaymentGateway",activate_blog:"shopBlog",activate_card_to_card_payment:"cardToCardPayment",activate_checkout_dynamic_form:"checkoutDynamicForm",activate_different_register_customization:"multiTypeRegister",activate_digipay_payment:"digipayPaymentGateway",activate_digipay_payment_customization:"digipayPaymentGateway",activate_filter_products:"productFilters",activate_ghesta_payment_customization:"ghestaPaymentGateway",activate_mega_footer:"megaFooter",activate_mellat_payment_customization:"mellatPaymentGateway",activate_min_basket:"checkoutMinimumAmount",activate_novapay_payment_customization:"novapayPaymentGateway",activate_ozon_payment_customization:"ozonPaymentGateway",activate_payment_in_place:"paymentInPlace",activate_payping_payment:"paypingPaymentGateway",activate_pec_payment_customization:"pecPaymentGateway",activate_sabin_payment_customization:"sabinPaymentGateway",activate_sadad_payment_customization:"sadadPaymentGateway",activate_search:"shopSearch",activate_sep_payment_customization:"sepPaymentGateway",activate_shop_vat:"shopVat",activate_snapppay_payment_customization:"snapppayPaymentGateway",activate_tajrobe:"tajrobe",activate_tara_payment_customization:"taraPaymentGateway",activate_theme_config_settings:"themeConfigSettings",activate_toman_payment_customization:"tomanPaymentGateway",activate_torobpay_payment_customization:"torobpayPaymentGateway",activate_up_payment_customization:"asanpardakhtPaymentGateway",activate_vandar_payment_customization:"vandarPaymentGateway",activate_wallet:"wallet",activate_yourgate_payment_customization:"yourgatePaymentGateway",activate_zarinpal_payment:"zarinpalPaymentGateway",activate_zarinplus_payment_customization:"zarinplusPaymentGateway",activate_zibal_payment_customization:"zibalPaymentGateway",activate_zify_payment_customization:"zifyPaymentGateway",disable_ordering:"disableOrdering",pwa:"progressiveWebApp",remove_front_basket:"hideCheckout",remove_front_taint:"sazitoBrandingRemoval"},o=Object.values(s).reduce((t,e)=>(t[e]=(t[e]||0)+1,t),{}),d=Object.entries(s).reduce((t,[e,a])=>(1===o[a]&&(t[a]=e),t),{});function c(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function p(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function u(t){return!(null===t||"object"!=typeof t||Array.isArray(t)||t instanceof Date)}function l(t,e){const a={...t};for(const t of e)delete a[t];return a}function m(t){if(!u(t))return Array.isArray(t)?t.map(t=>m(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=s[a];t||(t=c(a)),u(i)?e[t]=m(i):Array.isArray(i)?e[t]=i.map(t=>m(t)):e[t]=i}return e}function y(t){if(!u(t))return Array.isArray(t)?t.map(t=>y(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=d[a];t||(t=p(a)),u(i)?e[t]=y(i):Array.isArray(i)?e[t]=i.map(t=>y(t)):e[t]="string"==typeof i&&r.has(t)?n(i):i}return e}function h(t){const e=t;if(u(e?.data?.result)){const t=e.data.result,a=Object.keys(t);return 1===a.length&&u(t[a[0]])?m(t[a[0]]):m(t)}return m(t)}function g(t){if(!t)return{};if(!u(t))return{};const{general:e,shop:a,checkout:i,features:r,wallet:n,tajrobe:s,domain:o,enamad:d,google:c,logo:p,social:l,...m}=t,y={...u(e)?e:{},...u(a)?a:{}},{registerType:h,showProductStockNumber:g,...w}=y||{};return{...m,scripts:{enamad:d,google:c},shop:v({...w,domain:o,logo:p,social:l}),settings:{checkout:f(i),features:I(r),wallet:C(n),tajrobe:S(s),registerType:b(h),showProductStockNumber:_(g)}}}function f(t){if(!u(t))return{};const e=u(t.minBasket)?t.minBasket:{},a=e.minAmount??e.minBasket,i="number"==typeof a?a:Number(a),r={...t,addToCartAlert:_(t.addToCartAlert),dynamicForm:_(t.dynamicForm),emailOptional:_(t.emailOptional??t.email_optional),preventRedirect:_(t.preventRedirect??t.manual),minBasket:{enabled:_(e.enabled),minAmount:Number.isFinite(i)?i:0},miniCart:_(t.miniCart),postalCodeMandatory:_(t.postalCodeMandatory),quickAddToCart:_(t.quickAddToCart)};return delete r.manual,r}function b(t){return"string"==typeof t?t:""}function _(t){return"boolean"==typeof t?t:u(t)&&Object.prototype.hasOwnProperty.call(t,"enabled")?_(t.enabled):1===t||"1"===t||"true"===t}function v(t){if(!u(t))return{};const e={...t};if(u(e.city)){const t=l(e.city,["createdAt","updatedAt"]);let a=t.region;u(a)&&(a=l(a,["createdAt","updatedAt","cities"])),t.region=a,e.city=t}return e}const w={addToCardAlert:"addToCartAlertEnabled",addToCartAlert:"addToCartAlertEnabled",advancedCardToCard:"advancedCardToCardEnabled",cardToCardPayment:"cardToCardPaymentEnabled",checkoutDynamicForm:"checkoutDynamicFormEnabled",multiTypeRegister:"multiTypeRegisterEnabled",productFilters:"productFiltersEnabled",megaFooter:"megaFooterEnabled",checkoutMinimumAmount:"checkoutMinimumAmountEnabled",paymentInPlace:"paymentInPlaceEnabled",shopBlog:"blogEnabled",shopSearch:"searchEnabled",shopVat:"shopVatEnabled",tajrobe:"tajrobeEnabled",themeConfigSettings:"themeConfigSettingsEnabled",wallet:"walletEnabled",progressiveWebApp:"progressiveWebAppEnabled",disableOrdering:"orderingDisabled",hideCheckout:"checkoutHidden",sazitoBrandingRemoval:"sazitoBrandingRemoved",ayriaPaymentGateway:"ayriaPaymentGatewayEnabled",azkiPaymentGateway:"azkiPaymentGatewayEnabled",bazarPaymentGateway:"bazarPaymentGatewayEnabled",digipayPaymentGateway:"digipayPaymentGatewayEnabled",ghestaPaymentGateway:"ghestaPaymentGatewayEnabled",mellatPaymentGateway:"mellatPaymentGatewayEnabled",novapayPaymentGateway:"novapayPaymentGatewayEnabled",ozonPaymentGateway:"ozonPaymentGatewayEnabled",paypingPaymentGateway:"paypingPaymentGatewayEnabled",pecPaymentGateway:"pecPaymentGatewayEnabled",sabinPaymentGateway:"sabinPaymentGatewayEnabled",sadadPaymentGateway:"sadadPaymentGatewayEnabled",sepPaymentGateway:"sepPaymentGatewayEnabled",snapppayPaymentGateway:"snapppayPaymentGatewayEnabled",taraPaymentGateway:"taraPaymentGatewayEnabled",tomanPaymentGateway:"tomanPaymentGatewayEnabled",torobpayPaymentGateway:"torobpayPaymentGatewayEnabled",asanpardakhtPaymentGateway:"asanpardakhtPaymentGatewayEnabled",vandarPaymentGateway:"vandarPaymentGatewayEnabled",yourgatePaymentGateway:"yourgatePaymentGatewayEnabled",zarinpalPaymentGateway:"zarinpalPaymentGatewayEnabled",zarinplusPaymentGateway:"zarinplusPaymentGatewayEnabled",zibalPaymentGateway:"zibalPaymentGatewayEnabled",zifyPaymentGateway:"zifyPaymentGatewayEnabled",activateEditOrderCustomization:"editOrderEnabled",activateEditOrderCustomizationEnabled:"editOrderEnabled"},A=new Set(["activateAlopeykAdvanced","activate_alopeyk_advanced"]),P=new Set(["auditLogEnabled","editOrderEnabled","rahkaranAccountingCustomizationEnabled","advancedThemeDesignerEnabled","checkoutHidden","eventPublisherEnabled","exportOrdersEnabled","exportProductsEnabled","exportUsersEnabled","fontCustomizationEnabled","forwardShippingEnabled","podroShippingEnabled","postexShippingEnabled","quotaNotificationsEnabled","recaptchaEnabled","rolePoliciesEnabled","sepidarAccountingCustomizationEnabled","shortUrlEnabled","skuSearchEnabled","snappShopCustomizationEnabled","snappboxShippingEnabled","stockAlertNotificationsEnabled","tapsipackShippingEnabled","themeConfigSettingsEnabled","advancedTextEditorEnabled","advancedShippingEnabled","bulkActionEnabled","discountBulkEnabled","discountCodeEnabled","orderBulkActionEnabled","importProductsEnabled","mahakAccountingCustomizationEnabled","millipayPaymentCustomizationEnabled","orderSmsNotificationsEnabled"]);function I(t){if(!u(t))return{};const e={},a=(t,a)=>{if(A.has(t))return;const i=(t=>{if("boolean"==typeof t)return t;if("number"==typeof t)return 1===t||0!==t&&void 0;if("string"==typeof t){const e=t.trim().toLowerCase();return"true"===e||"1"===e||"false"!==e&&"0"!==e&&void 0}})(a);void 0!==i&&(e[t]=i)};u(t.flags)&&Object.entries(t.flags).forEach(([t,e])=>{a(t,e)}),u(t.configurations)&&Object.entries(t.configurations).forEach(([t,e])=>{a(t,e)}),Object.entries(t).forEach(([t,e])=>{"flags"!==t&&"premium"!==t&&"configurations"!==t&&(u(e)&&Object.prototype.hasOwnProperty.call(e,"enabled")?a(t,e.enabled):a(t,e))});const i={};Object.entries(e).forEach(([t,e])=>{const a=function(t){const e=t.includes("_")?c(t):t,a=w[e];if(a)return a;const i=e.startsWith("activate")&&e.length>8?`${e.charAt(8).toLowerCase()}${e.slice(9)}`:e;return i.endsWith("Enabled")||i.endsWith("Disabled")||i.endsWith("Hidden")||i.endsWith("Removed")?i:`${i}Enabled`}(t);P.has(a)||(i[a]=e)});const r={...i};return u(t.premium)&&(r.premium=t.premium),r}function C(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t},a=t=>"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0;return{enabled:a(e.enabled)??!1,useWithDiscount:a(e.useWithDiscount)??!1,minAmount:(t=>{if("number"==typeof t&&Number.isFinite(t))return t;const e=Number(t);return Number.isFinite(e)?e:void 0})(e.minAmount??e.walletMinAmount)??0,minAmountRequired:a(e.minAmountRequired??e.walletMinStatus)??!1}}function S(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t};let a=!1;return"boolean"==typeof e.enabled?a=e.enabled:1!==e.enabled&&"1"!==e.enabled&&"true"!==e.enabled||(a=!0),{enabled:a}}function T(t){const e=h(t);if(!u(e))return{};const a=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=W(t),a=K(t.productVariantId??e.variantId)??e.variantId;return{id:Q(t.id??t.cartProductId)??"",createdAt:Y(t.createdAt),updatedAt:Y(t.updatedAt),productVariantId:a,quantity:K(t.quantity)??0,unitPrice:K(t.unitPrice)??0,lineTotal:K(t.lineTotal)??0,product:e,formAttributes:t.formAttributes,formFields:t.formFields,bookingAttributes:t.bookingAttributes}}(t)):[];return{...e,items:a,netTotal:K(e.netTotal)??0,grossTotal:K(e.grossTotal),needsShipping:Boolean(e.needsShipping),minBasketLimitViolated:Boolean(e.minBasketLimitViolated),deleteCoupon:void 0===e.deleteCoupon?void 0:Boolean(e.deleteCoupon)}}function E(t){const e=h(t);if(!u(e))return{};const a=l(e,["shippingMethod","user","userData"]),i=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=W(t),a=K(t.productVariantId??e.variantId)??e.variantId,i=Array.isArray(e.attributes)?e.attributes:[],r=J(e.hasMaxOrder??t.hasMaxOrder);return{id:Q(t.id??t.invoiceItemId??t.cartProductId)??"",productVariantId:a,productId:K(e.productId??t.productId),name:Y(t.name)??Y(e.name)??"",url:Y(e.url)??Y(t.url),attributes:i,productType:Y(e.productType)??Y(t.productType),hasMaxOrder:r,maxOrderQuantity:K(e.maxOrderQuantity??t.maxOrderQuantity),minOrderQuantity:K(e.minOrderQuantity??t.minOrderQuantity),image:Z(t.image??e.image),quantity:K(t.quantity)??0,unitPrice:K(t.unitPrice)??0,lineTotal:K(t.lineTotal)??0,rawPrice:K(t.rawPrice??t.originalPrice)??0,customerProfit:K(t.customerProfit)??0,commercialFiles:t.commercialFiles,formAttributes:t.formAttributes,bookingAttributes:t.bookingAttributes,formFields:t.formFields}}(t)):[],r=Array.isArray(e.discountUsages)?e.discountUsages:[],n=r[0],s=u(n)&&u(n.discountCode)?Y(n.discountCode.code):void 0;return{...a,items:i,shippingAddress:function(t){if(!t)return;const{id:e,city:a,region:i,...r}=t,n={id:i?.id??a.regionId??0,name:i?.name??"",city:a};return{...r,region:n}}(B(e.shippingAddress)),shippingItems:Array.isArray(e.shippingItems)?e.shippingItems.map(t=>function(t){if(!u(t))return{};const e=u(t.rate)?t.rate:u(t.shippingRate)?t.shippingRate:u(t.shippingMethod)?t.shippingMethod:t;return{invoiceItemIds:L(t),rate:dt(e)}}(t)):[],discountUsages:r,netTotal:K(e.netTotal)??0,finalTotal:K(e.finalTotal)??0,vat:K(e.vat)??0,vatPercent:K(e.vatPercent)??0,itemsDiscount:K(e.itemsDiscount)??0,discountTotal:K(e.discountTotal)??0,customerProfit:K(e.customerProfit)??0,customerProfitPercentage:K(e.customerProfitPercentage)??0,itemsTotalRawPrice:K(e.itemsTotalRawPrice)??0,couponTotal:K(e.couponTotal)??0,shippingTotal:K(e.shippingTotal)??0,creditTotal:K(e.creditTotal)??0,needsShipping:Boolean(e.needsShipping),userComment:"string"==typeof e.userComment?e.userComment:void 0,discountCode:s}}function k(t){const e=h(t);if(!u(e))return{};if(!u(e.invoice))return e;const a=E(e.invoice),{items:i,...r}=a;return{...e,invoice:{...r,invoiceItems:Array.isArray(i)?i:[]}}}function z(t){const e=h(t);if(!u(e))return{};const a=Array.isArray(e.orders)?e.orders.map(t=>k(t)):[],i=K(e.pageNumber??e.page),r=K(e.pageSize),n=K(e.totalCount??e.total)??a.length;return{...l(e,["page","total"]),orders:a,totalCount:n,...void 0!==i?{pageNumber:i}:{},...void 0!==r?{pageSize:r}:{}}}function N(t){const e=function(t){if(!u(t))return{};if(u(t.data)&&u(t.data.result))return t.data.result;return u(t.result)?t.result:t}(t),a=u(e.order)?e.order:e;if(!u(a))return{};const i=u(a.invoice)?a.invoice:{},r=Array.isArray(i.invoice_items)?i.invoice_items.map(R):[],n=Array.isArray(i.shipping_items)?i.shipping_items.map(D):[];return{id:Q(a.id),orderNumber:Q(a.order_number),orderIdentifier:Y(a.order_identifier),invoice:{invoiceItems:r,shippingItems:n,netTotal:K(i.net_total),finalTotal:K(i.final_total),shippingTotal:K(i.shipping_total),discountTotal:K(i.discount_total),creditTotal:K(i.credit_total),vat:K(i.vat),vatPercent:K(i.vat_percent),itemsDiscount:K(i.items_discount),itemsTotalRawPrice:K(i.items_total_raw_price),customerProfit:K(i.customer_profit),customerProfitPercentage:K(i.customer_profit_percentage),discountUsages:Array.isArray(i.discount_usages)?i.discount_usages.map(F):void 0}}}function R(t){if(!u(t))return{};const e=u(t.product_variant)?t.product_variant:{},a=u(e.product)?e.product:{};return{productVariantId:Q(t.product_variant_id??e.id),name:Y(t.name),image:u(t.image)?{url:Y(t.image.url)}:void 0,variantAttributes:Array.isArray(t.variant_attributes)?t.variant_attributes.map(O):[],singleItemPrice:K(t.single_item_price),noOfItems:K(t.no_of_items),totalItemsPrice:K(t.total_items_price),customerProfit:K(t.customer_profit),formAttributes:t.form_attributes,bookingAttributes:t.booking_attributes,productVariant:{commercialFiles:Array.isArray(e.commercial_files)?e.commercial_files.map($):void 0,product:{productType:Y(a.product_type)}}}}function D(t){return u(t)&&u(t.rate)?{id:Q(t.id),invoiceItemIds:Array.isArray(t.invoice_item_ids)?t.invoice_item_ids.map(Q).filter(t=>void 0!==t):[],rate:{id:Q(t.rate.id),name:Y(t.rate.name),price:K(t.rate.price),type:Y(t.rate.type),icon:Y(t.rate.icon),color:Y(t.rate.color)}}:{}}function O(t){return u(t)?{name:Y(t.name),value:Y(t.value)}:{}}function $(t){return u(t)?{id:Q(t.id)}:{}}function F(t){return u(t)&&u(t.discount_code)?{discountCode:{code:Y(t.discount_code.code)}}:{}}function G(t){const e=h(t);if(!u(e))return{};const a=Array.isArray(e.transactions)?e.transactions:Array.isArray(e.walletTransactions)?e.walletTransactions:[],i=K(e.pageNumber??e.page),r=K(e.pageSize),n=K(e.totalCount??e.total);return{...l(e,["page","total","walletTransactions"]),transactions:a,...void 0!==i?{pageNumber:i}:{},...void 0!==r?{pageSize:r}:{},...void 0!==n?{totalCount:n}:{}}}function x(t){return B(t)}function V(t){const e=h(t);if(u(e))return M(e)}function M(t){if(!t)return;const e=function(t){const e=j(t);if(!e)return;if(1===Object.keys(e).length&&u(e.user))return j(e.user)??e.user;return e}(t);if(!e)return;const a={},i=K(e.id);void 0!==i&&(a.id=i);const r=Y(e.email);r&&(a.email=r);const n=Y(e.mobilePhone)??Y(e.phoneNumber);n&&(a.mobilePhone=n);const s=Y(e.phoneNumber);s&&s!==n&&(a.phoneNumber=s);const o=Y(e.firstName);o&&(a.firstName=o);const d=Y(e.lastName);d&&(a.lastName=d);const c=Y(e.birthDate);return c&&(a.birthDate=c),Object.keys(a).length>0?a:void 0}function B(t){if(!t||0===Object.keys(t).length)return;const e=M(t.user),a=j(t.region),i=j(t.city),r=j(i?.region),n=Y(t.regionName)??q(t.region),s=U(a??t.region,{fallbackId:K(t.regionId),fallbackName:n})??U(r,{fallbackId:K(t.regionId),fallbackName:n}),o=K(t.regionId)??s?.id,d=Y(t.cityName)??Y(i?.name)??q(t.city),c=function(t,e={}){if(null==t)return;const a=j(t),i=K(a?.id)??K(t)??e.fallbackId,r=Y(a?.name)??q(t)??e.fallbackName;if(void 0===i||!r)return;const n={id:i,name:r},s=K(a?.regionId)??e.fallbackRegionId;void 0!==s&&(n.regionId=s);const o=K(a?.latitude);void 0!==o&&(n.latitude=o);const d=K(a?.longitude);void 0!==d&&(n.longitude=d);return n}(i??t.city,{fallbackId:K(t.cityId),fallbackName:d,fallbackRegionId:o}),p=Y(t.firstName)??e?.firstName??"",u=Y(t.lastName)??e?.lastName??"",l={id:K(t.id)??0,identifier:Y(t.identifier)??"",firstName:p,lastName:u,city:c??{id:K(t.cityId??t.city)??0,name:d??"",...void 0!==o?{regionId:o}:{}},address:Y(t.address)??""},m=Y(t.mobilePhone)??Y(t.phoneNumber)??e?.mobilePhone??e?.phoneNumber,y=Y(t.phoneNumber)??e?.phoneNumber;m&&(l.mobilePhone=m),y&&y!==m&&(l.phoneNumber=y);const h=Y(t.email)??e?.email;h&&(l.email=h),s&&(l.region=s);const g=Y(t.postalCode);g&&(l.postalCode=g);const f=Y(t.description);f&&(l.description=f);const b=K(t.latitude);void 0!==b&&(l.latitude=b);const _=K(t.longitude);void 0!==_&&(l.longitude=_);const v=J(t.userSetCoordinatesBefore);return void 0!==v&&(l.userSetCoordinatesBefore=v),l}function U(t,e={}){if(null==t)return;const a=j(t),i=K(a?.id)??K(t)??e.fallbackId,r=Y(a?.name)??q(t)??e.fallbackName;return void 0!==i&&r?{id:i,name:r}:void 0}function j(t){if(u(t))return u(t.data)?t.data:t}function q(t){const e=Y(t);if(e)return void 0===K(e)?e:void 0}function L(t){return(Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:void 0!==t.invoiceItemId?[t.invoiceItemId]:[]).map(t=>Q(t)).filter(t=>void 0!==t)}function K(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"!=typeof t)return;const e=Number(t);return Number.isFinite(e)?e:void 0}function Y(t){if("string"!=typeof t)return;const e=t.trim();return e.length>0?e:void 0}function J(t){return"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0}function Q(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"==typeof t){const e=t.trim();return e.length>0?e:void 0}}function W(t){if(!u(t))return{variantId:0,name:"",attributes:[]};const e=u(t.variant)?t.variant:void 0,a=u(e?.product)?e.product:void 0,i=u(t.product)?t.product:void 0,r=K(i?.variantId??e?.id??t.productVariantId??t.variantId)??0,n=Array.isArray(i?.attributes)?i.attributes:Array.isArray(e?.attributes)?e.attributes:Array.isArray(t.attributes)?t.attributes:[];return{variantId:r,productId:K(i?.productId??t.productId??a?.id),name:Y(i?.name)??Y(t.name)??"",url:Y(i?.url)??Y(t.url)??Y(a?.url),image:Z(i?.image??t.image),attributes:n,productType:Y(i?.productType)??Y(t.productType)??Y(a?.productType),hasMaxOrder:i?.hasMaxOrder??t.hasMaxOrder??e?.hasMaxOrder,maxOrderQuantity:K(i?.maxOrderQuantity??t.maxOrderQuantity??e?.maxOrderQuantity),minOrderQuantity:K(i?.minOrderQuantity??t.minOrderQuantity??e?.minOrderQuantity)}}function H(t){if(!u(t))return{};const e=l(t,["staticUrl","summary","tags","slug"]);return e.variants&&Array.isArray(e.variants)&&(e.variants=e.variants.map(t=>u(t)?l(t,["name","title","product","status","soldCount"]):{})),e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(t=>u(t)?{id:t.id,name:t.name,url:t.url}:{})),e.images&&Array.isArray(e.images)&&(e.images=e.images.map(t=>Z(t)??{})),e}function Z(t){return u(t)?l(t,["widthRatio","heightRatio","thumb","order"]):t}function X(t){const e=H(t);return e?l(e,["themeConfig"]):e}function tt(t){const e=h(t);if(e.items&&Array.isArray(e.items)){const t=K(e.total)??e.items.length,a=K(e.pageSize)??e.items.length,i=K(e.page)??1,r=K(e.totalPages)??Math.ceil(t/a);return{items:e.items.map(t=>X(t)),total:t,page:i,pageSize:a,totalPages:r}}return e}function et(t){if(!u(t))return{products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};const e=t,a={products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};return Array.isArray(e.items)&&(a.products.items=e.items.map(t=>X(t)),a.products.total=K(e.productsCount)??0,a.products.page=K(e.productsPageNumber)??1,a.products.pageSize=K(e.productsPageSize)??20),Array.isArray(e.blogPages)&&(a.blogPages.items=e.blogPages.map(t=>lt(t)),a.blogPages.total=K(e.blogPagesCount)??0,a.blogPages.page=K(e.blogPagesPageNumber)??1,a.blogPages.pageSize=K(e.blogPagesPageSize)??20),Array.isArray(e.cmsPages)&&(a.cmsPages.items=e.cmsPages.map(t=>lt(t)),a.cmsPages.total=K(e.cmsPagesCount)??0,a.cmsPages.page=K(e.cmsPagesPageNumber)??1,a.cmsPages.pageSize=K(e.cmsPagesPageSize)??20),Array.isArray(e.categories)&&(a.productCategories.items=e.categories.map(t=>pt(t)),a.productCategories.total=K(e.productCategoriesCount)??0,a.productCategories.page=K(e.productCategoriesPageNumber)??1,a.productCategories.pageSize=K(e.productCategoriesPageSize)??20),a}function at(t){if(u(t)){const e={...t};return delete e.user,{shipping_address:y(e)}}return{shipping_address:y(t)}}function it(t,e,a){const i={product_variants:[{id:t,count:e}]};return a&&(i.form_attributes=y(a)),i}function rt(t){if(!u(t))return{product_variants:[]};const e=t.variants||t.productVariants||[],a={product_variants:Array.isArray(e)?e.map(t=>u(t)?{id:t.id||t.variantId,count:t.count||t.quantity,form_attributes:t.formAttributes?y(t.formAttributes):void 0}:{}):[]};return t.coupon&&(a.coupon=t.coupon),a}function nt(t){const e=h(t);if(!u(e))return[];return(Array.isArray(e.paymentTypes)?e.paymentTypes:Array.isArray(e.methods)?e.methods:[]).map(t=>u(t)?{id:K(t.id)??0,code:t.code,title:"string"==typeof t.title?t.title:"",titleFa:"string"==typeof t.titleFa?t.titleFa:"",description:"string"==typeof t.description?t.description:null,paymentSubType:K(t.paymentSubType)??null,order:K(t.order)??0,isDefault:Boolean(t.isDefault)}:{id:0,code:"",title:"",titleFa:"",description:null,paymentSubType:null,order:0,isDefault:!1})}function st(t){const e=h(t);return(Array.isArray(e)?e:u(e)&&Array.isArray(e.shippingMethods)?e.shippingMethods:[]).map(t=>function(t){if(!u(t))return{id:0,name:"",type:""};return{id:K(t.id)??0,name:Y(t.name)??"",type:Y(t.type)??""}}(t))}function ot(t){const e=h(t);if(!u(e))return{shippingMethods:[],groupedShippingRates:{},itemsShippingRate:[]};const a={};if(Array.isArray(e.shippingMethods)&&e.shippingMethods.forEach((t,e)=>{if(!u(t))return;const i=Array.isArray(t.shippingRate)?t.shippingRate.map(t=>dt(t)):[];if(0===i.length)return;const r=Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:[],n=r.length>0?r.map(String).sort().join(","):String(e);a[n]=i}),0===Object.keys(a).length&&u(e.groupedShippingRates))for(const[t,i]of Object.entries(e.groupedShippingRates))a[t]=Array.isArray(i)?i.map(t=>dt(t)):[];return{shippingMethods:[],groupedShippingRates:a,itemsShippingRate:Array.isArray(e.itemsShippingRate)?e.itemsShippingRate.map(t=>u(t)?{invoiceItemId:Q(t.invoiceItemId)??L(t)[0]??"",shippingRate:dt(t.shippingRate??t.rate??t)}:{invoiceItemId:"",shippingRate:dt(void 0)}):[]}}function dt(t){return u(t)?{id:K(t.id??t.rateId)??0,name:Y(t.name)??"",price:K(t.price??t.amount)??0,description:Y(t.description??t.deliveryDescription??t.details),icon:Y(t.icon??t.iconUrl??t.logo),color:Y(t.color??t.bgColor??t.backgroundColor??t.iconColor),type:Y(t.type)}:{id:0,name:"",price:0}}function ct(t){return u(t)?l(t,["staticUrl","products","items"]):{}}function pt(t){const e=ct(t);return e?l(e,["themeConfig"]):{}}function ut(t){return u(t)?l(t,["staticUrl","urlKey"]):{}}function lt(t){const e=ut(t);return e?l(e,["themeConfig"]):{}}function mt(t){const e=h(t);if(!e||!e.route)return e??{};const a=u(e.route)?e.route:{};if(a.entity){switch(a.entityType){case"product":a.entity=H(a.entity);break;case"product_category":a.entity=ct(a.entity);break;case"cms_page":case"blog_page":a.entity=ut(a.entity)}u(a.entity)&&(a.entity=l(a.entity,["id"])),!a.url&&u(a.entity)&&a.entity.url&&(a.url=a.entity.url)}return a}function yt(t){if(!u(t))return{};const e={...t};return e.entity&&(e.entity=pt(e.entity),u(e.entity)&&(e.entity=l(e.entity,["id"]))),e.children&&Array.isArray(e.children)&&(e.children=e.children.map(yt)),e}function ht(t){const e=h(t);return e?e.cmsPages&&Array.isArray(e.cmsPages)?{items:e.cmsPages.map(lt),total:e.total||e.cmsPages.length,page:e.page||e.pageNumber||1,pageSize:e.pageSize||e.cmsPages.length}:e.items&&Array.isArray(e.items)?{items:e.items.map(t=>lt(t)),total:e.total||e.items.length,page:e.page||1,pageSize:e.pageSize||e.items.length}:e:{}}function gt(t){if(!u(t))return{};const e={};if(void 0!==t.page&&(e.page_number=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),t.cmsPageTypes){const a=Array.isArray(t.cmsPageTypes)?t.cmsPageTypes[0]:t.cmsPageTypes;e["filters[]"]=JSON.stringify({name:"cms_page_types",value:a})}return e}function ft(t){if(!u(t))return{};const e={};if(t.entityType&&(e.entityType=t.entityType),void 0!==t.entityId&&(e.entityId=t.entityId),u(t.entity)){const a=l(t.entity,["staticUrl","id"]);Object.keys(a).length>0&&(e.entity=a)}return t.details&&(e.details=t.details),t.children&&Array.isArray(t.children)&&(e.children=t.children.map(t=>ft(t))),e}function bt(t){const e=h(t);if(!e||!e.tree)return e??{};const a=u(e.tree)?e.tree:{};return u(a.treeStructure)&&Array.isArray(a.treeStructure.nodes)&&(a.treeStructure.nodes=a.treeStructure.nodes.map(t=>ft(t))),e}class _t{constructor(t){this.config=t,this.baseUrl=t.apiBaseUrl.replace(/\/$/,""),this.domain=t.domain,this.tokenStorage=new a,this.cache=new i,this.fetchApi=t.customFetchApi.bind(globalThis)}async get(t,e){const a=e?.params?y(e.params):void 0,r=this.buildUrl(t,a),n=i.generateKey("GET",r,a);if(!1!==e?.cache){const e=this.getApiName(t),a=this.config.cache[e];if(a?.enabled&&a.ttl){const e=this.cache.get(n,a.ttl);if(e)return this.config.debug&&console.log("[Sazito SDK] Cache hit:",t),{data:e}}}const s=await this.request("GET",r,e);return s.data&&!1!==e?.cache&&this.cache.set(n,s.data),s}async post(t,e,a){const i=this.buildUrl(t),r=this.isMultipartBody(e),n=this.isFormUrlEncodedBody(e),s=r||n,o=e?s||a?.skipRequestTransform?e:y(e):void 0,d=this.getApiName(t);return this.cache.deletePattern(`GET:.*${d}`),this.request("POST",i,{...a,body:o,rawBody:s,omitJsonContentType:r})}async put(t,e,a){const i=this.buildUrl(t),r=this.isMultipartBody(e),n=e?r?e:y(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("PUT",i,{...a,body:n,rawBody:r,omitJsonContentType:r})}async delete(t,e){const a=this.buildUrl(t),i=this.getApiName(t);return this.cache.deletePattern(`GET:.*${i}`),this.request("DELETE",a,e)}async request(t,e,a,i=0){const r=new AbortController,n=a?.signal||r.signal,s=a?.timeout||this.config.timeout,o=setTimeout(()=>r.abort(),s);try{const r=await this.fetchApi(e,{method:t,headers:this.getHeaders(a?.headers,a?.omitJsonContentType),body:a?.body?a.rawBody?a.body:JSON.stringify(a.body):void 0,signal:n});clearTimeout(o);const s=void 0!==a?.retries?a.retries:this.config.retry.retries;if(!r.ok&&this.shouldRetry(r.status)&&i<s)return this.config.debug&&console.log(`[Sazito SDK] Retrying request (${i+1}/${s}):`,e),await this.delay(this.config.retry.retryDelay*(i+1)),this.request(t,e,a,i+1);const d=await this.parseResponseBody(r);if(a?.skipTransform&&r.ok)return{data:d};const c=void 0!==d?.result?d.result:d;this.config.debug&&console.log(`[Sazito SDK] ${t} ${e}:`,this.redactDebugValue({status:r.status,data:c}));let p=c?m(c):c;const u=["cart","product","user","order","invoice","payment","shippingAddress"];if(p&&"object"==typeof p&&!Array.isArray(p)){const t=Object.keys(p);1===t.length&&u.includes(t[0])&&"object"==typeof p[t[0]]&&null!==p[t[0]]&&(p=p[t[0]])}return r.ok?{data:p}:{error:{status:r.status,message:this.extractErrorMessage(p,r.statusText),type:"api",details:p}}}catch(t){return clearTimeout(o),this.config.debug&&console.error("[Sazito SDK] Request failed:",t),{error:{message:"AbortError"===t?.name?"Request timeout":t?.message||"Network error",type:"network",details:this.serializeErrorDetails(t)}}}}async parseResponseBody(t){const e=await t.text();if(!e)return;const a=t.headers.get("content-type");if(!a?.includes("application/json"))return e;try{return JSON.parse(e)}catch{return e}}extractErrorMessage(t,e){const a=t=>{if("string"==typeof t)return t.trim()||void 0;if(Array.isArray(t))for(const e of t){const t=a(e);if(t)return t}else if(t&&"object"==typeof t)for(const e of["message","error","errors","detail","title"]){const i=a(t[e]);if(i)return i}};return a(t)||e||"Request failed"}serializeErrorDetails(t){return{name:"string"==typeof t?.name?t.name:"Error",message:"string"==typeof t?.message?t.message:String(t)}}redactDebugValue(t,e=""){if(/authorization|cookie|password|secret|token|identifier|tracking|mobile|phone|email|postal|address|first.?name|last.?name|receipt.?ref|ref.?id/i.test(e)){if(null==t||""===t)return t;const e=String(t);return e.length<=4?"[REDACTED]":`[REDACTED:${e.slice(-4)}]`}return Array.isArray(t)?t.map(t=>this.redactDebugValue(t)):t&&"object"==typeof t?Object.fromEntries(Object.entries(t).map(([t,e])=>[t,this.redactDebugValue(e,t)])):t}buildUrl(t,e){const a=`${this.baseUrl}${t}`;if(!e||0===Object.keys(e).length)return a;const i=new URLSearchParams;return Object.entries(e).forEach(([t,e])=>{null!=e&&i.append(t,String(e))}),`${a}?${i.toString()}`}getHeaders(t,e=!1){const a={"x-forwarded-host":this.domain,...t};e?delete a["Content-Type"]:a["Content-Type"]=a["Content-Type"]||"application/json";const i=this.tokenStorage.get();return i&&(a.Authorization=i),a}isMultipartBody(t){return"undefined"!=typeof FormData&&t instanceof FormData}isFormUrlEncodedBody(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}shouldRetry(t){return t>=500&&t<600}delay(t){return new Promise(e=>setTimeout(e,t))}getApiName(t){return t.includes("/products")?"products":t.includes("/product_categories")?"categories":t.includes("/cart")?"cart":t.includes("/orders")?"orders":t.includes("/search")?"search":t.includes("/tags")?"tags":t.includes("/entity_route")?"entityRoutes":"cms"}getTokenStorage(){return this.tokenStorage}isDebugEnabled(){return this.config.debug}clearCache(){this.cache.clear()}}class vt{constructor(){this.data=new Map}getItem(t){return this.data.get(t)??null}setItem(t,e){this.data.set(t,e)}removeItem(t){this.data.delete(t)}}class wt{constructor(t){this.CART_KEY="CART_CREDENTIALS",this.INVOICE_KEY="INVOICE_CREDENTIALS",this.SHIPPING_KEY="SHIPPING_ADDRESS_CREDENTIALS",this.PAYMENT_KEY="PAYMENT_CREDENTIALS",this.DISCOUNT_KEY="DISCOUNT_CODE_INFO",this.storage=t??("undefined"!=typeof window&&"undefined"!=typeof localStorage&&"function"==typeof localStorage.getItem?localStorage:new vt)}getCartCredentials(){const t=this.getItem(this.CART_KEY),e=t?.identifier?.trim();return e?{identifier:e}:null}setCartCredentials(t){const e=t.identifier.trim();if(!e)throw new Error("Cart identifier is required.");this.setItem(this.CART_KEY,{identifier:e})}clearCartCredentials(){this.removeItem(this.CART_KEY)}getInvoiceCredentials(){return this.getItem(this.INVOICE_KEY)}setInvoiceCredentials(t){this.setItem(this.INVOICE_KEY,t)}clearInvoiceCredentials(){this.removeItem(this.INVOICE_KEY)}getShippingCredentials(){return this.getItem(this.SHIPPING_KEY)}setShippingCredentials(t){this.setItem(this.SHIPPING_KEY,t)}clearShippingCredentials(){this.removeItem(this.SHIPPING_KEY)}getPaymentCredentials(){return this.getItem(this.PAYMENT_KEY)}setPaymentCredentials(t){this.setItem(this.PAYMENT_KEY,t)}clearPaymentCredentials(){this.removeItem(this.PAYMENT_KEY)}getDiscountCode(){return this.getItem(this.DISCOUNT_KEY)}setDiscountCode(t){this.setItem(this.DISCOUNT_KEY,t)}clearDiscountCode(){this.removeItem(this.DISCOUNT_KEY)}clearAll(){this.clearCartCredentials(),this.clearInvoiceCredentials(),this.clearShippingCredentials(),this.clearPaymentCredentials(),this.clearDiscountCode()}getItem(t){try{const e=this.storage.getItem(t);return e?JSON.parse(e):null}catch{return null}}setItem(t,e){try{this.storage.setItem(t,JSON.stringify(e))}catch{}}removeItem(t){try{this.storage.removeItem(t)}catch{}}}const At="/api/v1/product_categories",Pt="/api/v1/search",It="/api/v2/carts",Ct="/api/v2/invoices",St="/api/v2/shipping_addresses",Tt="/api/v1/pinch",Et="/api/v1/orders",kt="/api/v1/users",zt="/api/v1/sessions",Nt="/api/v1/feedbacks",Rt="/api/v1/cms_pages",Dt="/api/v1/images",Ot="/api/v1/scheduler/events",$t="/api/v1/scheduler/bookings",Ft="/api/v1/entity_route/route",Gt="/api/v1/feedbacks/comments/details";class xt{constructor(t){this.http=t}mapSortToApi(t){if(!t)return null;return{newest:{sort:"date"},"best-selling":{sort:"sold"},availability:{sort:"stock_status"},discount:{sort:"raw_price"},"!price":{sort:"price",sortOrder:"asc"},price:{sort:"price"}}[t]||null}transformFilters(t){if(!t)return{};const e={},a=[];if(t.categories){const e=Array.isArray(t.categories)?t.categories:[t.categories];e.length>0&&a.push({name:"product_categories",value:e.join(",")})}if(!1===t.availableOnly&&a.push({name:"in_stock"}),t.discountedOnly&&a.push({name:"has_raw_price",value:!0}),t.similarTo&&a.push({name:"similar_to",value:{entity_name:"product",entity_id:t.similarTo}}),a.length>0&&(e["filters[]"]=JSON.stringify(a)),t.pinnedIds&&t.pinnedIds.length>0&&(e.pinned_ids=JSON.stringify(t.pinnedIds)),t.sort){const a=this.mapSortToApi(t.sort);a&&(e.sort=a.sort,a.sortOrder&&(e.sort_order=a.sortOrder))}return void 0!==t.priceMin&&(e.min_price=t.priceMin),void 0!==t.priceMax&&(e.max_price=t.priceMax),t.page&&(e.page=t.page),t.pageSize&&(e.page_size=t.pageSize),e}async get(t,e){const a=t.startsWith("/product/")?t:`/product/${t}`,i=await this.http.get(Ft,{...e,params:{url_part:a}});if(i.data){const t=mt(i.data);return"product"===t.entityType&&t.entity?{data:t.entity}:"unknown"===t.entityType?{error:{message:"Product not found",type:"api",status:404}}:{error:{message:`Invalid entity type: expected 'product', got '${t.entityType}'`,type:"api",status:400}}}return i.error?{error:i.error}:{error:{message:"No data returned from product endpoint",type:"api"}}}async list(t,e){const a=this.transformFilters(t),i=await this.http.get("/api/v1/products",{...e,params:a});if(i.data){return{data:tt(i.data)}}return i}async search(t,e,a){const i={query:t,search_direction:"center",page_size:e?.pageSize||20,page_number:e?.page||1},r=await this.http.get(Pt,{...a,params:i});if(r.data){return{data:et(r.data)}}return r}}class Vt{constructor(t){this.http=t}async get(t,e){const a=await this.http.get(`${At}/${t}`,e);if(a.data){const t=function(t){const e=h(t);return e?ct(e.productCategory||e):{}}(a.data);return{data:t}}return a}async list(t,e){const a={};void 0!==t?.page&&(a.page_number=t.page),void 0!==t?.pageSize&&(a.page_size=t.pageSize);const i=await this.http.get(At,{...e,params:a});if(i.data){const t=function(t){const e=h(t);return e?(e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(pt)),u(e.tree)&&u(e.tree.treeStructure)&&Array.isArray(e.tree.treeStructure.nodes)&&(e.tree.treeStructure.nodes=e.tree.treeStructure.nodes.map(yt)),e):{}}(i.data);return{data:t}}return i}}class Mt{constructor(t,e){this.http=t,this.credentials=e}persistCartCredentials(t){this.credentials.setCartCredentials({identifier:t.identifier})}async get(t){const e=this.credentials.getCartCredentials();if(!e)return{error:{message:"No cart found. Please create a cart first.",type:"validation"}};const a=await this.http.get(`${It}/0`,{...t,params:{identifier:e.identifier}});return a.data?{data:T(a.data)}:(a.error&&this.clearCart(),a)}async create(t,e){const a=await this.http.post(It,t,e);if(!a.data)return a;const i=T(a.data);return this.persistCartCredentials(i),{data:i}}async addItem(t,e,a,i){return this.addItemWithAttributes(t,e,{formAttributes:a},i)}async addItemWithAttributes(t,e,a,i){const r=this.credentials.getCartCredentials();if(!r)return this.create({variants:[{id:t,count:e,formAttributes:a?.formAttributes}],schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},i);const n=await this.http.post(`${It}/0/add_products_to_cart`,{identifier:r.identifier,variants:[{id:t,count:e}],formAttributes:a?.formAttributes,schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},i);if(n.data){const t=T(n.data);return this.persistCartCredentials(t),{data:t}}return 422===n.error?.status&&this.clearCart(),n}async updateItem(t,e,a,i,r){return this.updateItemWithAttributes(t,e,a,{formAttributes:i},r)}async updateItemWithAttributes(t,e,a,i,r){const n=this.credentials.getCartCredentials();if(!n)return{error:{message:"No cart found",type:"validation"}};const s=await this.http.post(`${It}/0/update_products_in_cart`,{identifier:n.identifier,cartProductId:String(t),variants:[{id:e,count:a}],formAttributes:i?.formAttributes,coupon:i?.coupon,deleteCoupon:i?.deleteCoupon},r);if(s.data){const t=T(s.data);return this.persistCartCredentials(t),{data:t}}return s}async removeItem(t,e,a){const i=this.credentials.getCartCredentials();if(!i)return{error:{message:"No cart found",type:"validation"}};const r=await this.http.post(`${It}/0/remove_products_from_cart`,{identifier:i.identifier,cartProductId:String(t),variants:[{id:e}]},a);if(r.data){const t=T(r.data);return this.persistCartCredentials(t),{data:t}}return r}clearCart(){this.credentials.clearCartCredentials()}}class Bt{constructor(t){this.http=t}async list(t,e){const a={pageNumber:t?.pageNumber??1,pageSize:t?.pageSize??20};t?.filters&&t.filters.length>0&&(a.filters=JSON.stringify(t.filters));const i=await this.http.get(Et,{...e,params:a});return i.data?{data:z(i.data)}:i}async get(t,e){const a=await this.http.get(`${Et}/${t}`,e);return a.data?{data:k(a.data)}:a}}class Ut{constructor(t,e){this.http=t,this.credentials=e}normalizeInvoiceResponse(t){return t.data?{data:E(t.data)}:(423===t.error?.status&&this.credentials.clearInvoiceCredentials(),t)}async get(t){const e=this.credentials.getCartCredentials(),a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found. Please create an invoice first.",type:"validation"}};if(!e)return{error:{message:"No cart found. Please create or restore cart credentials first.",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(i)}async create(t){const e=this.credentials.getCartCredentials();if(!e)return{error:{message:"No cart found. Please create a cart first.",type:"validation"}};const a=await this.http.post(Ct,{cart_id:String(0),cart_identifier:e.identifier},t);if(a.data){const t=E(a.data);return this.credentials.setInvoiceCredentials({id:t.id,identifier:t.identifier}),{data:t}}return a}async refresh(t){const e=this.credentials.getCartCredentials(),a=this.credentials.getInvoiceCredentials();if(!e||!a)return{error:{message:"No cart or invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(i)}async addShippingAddress(t,e,a){const i=this.credentials.getCartCredentials(),r=this.credentials.getInvoiceCredentials();if(!i||!r)return{error:{message:"No cart or invoice found",type:"validation"}};const n=await this.http.post(`${Ct}/${r.id}/add_shipping_address`,{identifier:r.identifier,shipping_address_identifier:e,cart_id:0,cart_identifier:i.identifier,...t>0?{shipping_address_id:t}:{}},a);return this.normalizeInvoiceResponse(n)}async addDiscountCode(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/add_discount_code`,{identifier:a.identifier,discount_code:t.toUpperCase()},e);return i.data?(this.credentials.setDiscountCode(t.toUpperCase()),{data:E(i.data)}):i}async assignShippingMethod(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=t.map(t=>({...t,invoiceItemIds:t.invoiceItemIds.map(t=>String(t))})),r=await this.http.post(`${Ct}/${a.id}/add_shipping_method`,{identifier:a.identifier,shippings:i},e);return this.normalizeInvoiceResponse(r)}async addDetails(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/add_invoice_details`,{identifier:a.identifier,user_comment:t},e);return this.normalizeInvoiceResponse(i)}async addForm(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/add_form`,{invoiceIdentifier:t.invoiceIdentifier||t.identifier||a.identifier,formAttributes:t.formAttributes},e);return this.normalizeInvoiceResponse(i)}async addCredit(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${Ct}/${e.id}/add_credit`,{identifier:e.identifier},t);return this.normalizeInvoiceResponse(a)}async removeCredit(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${Ct}/${e.id}/remove_credit`,{identifier:e.identifier},t);return this.normalizeInvoiceResponse(a)}async toggleCredit(t){const e=await this.get(t);return e.data?e.data.creditTotal>0?this.removeCredit(t):this.addCredit(t):e}async getApplicableShippingMethods(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.get(`${Ct}/${e.id}/applicable_shipping_methods`,{...t,cache:t?.cache??!1,params:{identifier:e.identifier}});return a.data?{data:ot(a.data)}:a}clearInvoice(){this.credentials.clearInvoiceCredentials()}}class jt{constructor(t,e){this.http=t,this.credentials=e}sanitizeAddressInput(t){const e={...t};return delete e.user,e}unwrapAddressPayload(t){let e=t;const a=new Set;for(;e&&"object"==typeof e&&!Array.isArray(e)&&!a.has(e);){a.add(e);const t=e,i=t.shippingAddress??t.shipping_address??t.data;if(void 0===i)break;e=i}return e}extractAddressList(t){if(Array.isArray(t))return t;if(!t||"object"!=typeof t)return[];const e=t,a=[e.shippingAddresses,e.addresses,e.items,e.data];for(const t of a)if(Array.isArray(t))return t;return[]}async createAddress(t,e){const a=this.sanitizeAddressInput(t),i=await this.http.post(St,{shipping_address:a},e);if(i.data){const t=x(this.unwrapAddressPayload(i.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):i}return i}async updateAddress(t,e){const a=this.credentials.getShippingCredentials();if(!a)return this.createAddress(t,e);const i=this.sanitizeAddressInput(t),r=await this.http.post(St,{identifier:a.identifier,shipping_address:i},e);if(r.data){const t=x(this.unwrapAddressPayload(r.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):r}return r}async listAddresses(t){const e=await this.http.get(St,{...t,cache:t?.cache??!1});if(e.error)return{error:e.error};return{data:this.extractAddressList(e.data).map(t=>x(this.unwrapAddressPayload(t))).filter(t=>Boolean(t?.identifier)).sort((t,e)=>e.id-t.id)}}async getAddress(t){const e=this.credentials.getShippingCredentials();if(!e)return{error:{message:"No shipping address found",type:"validation"}};const a=await this.http.get(`${St}/${e.id}`,{...t,params:{identifier:e.identifier}});if(a.data){const t=x(this.unwrapAddressPayload(a.data));return t?{data:t}:a}return a}async getMethods(t){const e=await this.http.get("/api/v2/shipping_methods",t);return e.data?{data:st(e.data)}:e.error?{error:e.error}:{data:[]}}clearAddress(){this.credentials.clearShippingCredentials()}}class qt{constructor(t,e,a="/api/v2/payments"){this.http=t,this.credentials=e,this.paymentsBasePath=a,this.pinchedPayments=new Set,this.verificationTraceSequence=0}async getMethods(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${this.paymentsBasePath}/list`,{invoice_identifier:e.identifier},t);return a.data?{data:nt(a.data)}:a.error?{error:a.error}:{data:[]}}async create(t,e){if(!Number.isInteger(t)||t<=0)return{error:{message:"Invalid paymentTypeId. Provide a positive integer from payments.getMethods().",type:"validation"}};const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(this.paymentsBasePath,{invoice_identifier:a.identifier,payment_type:t},{...e,skipTransform:!0});if(i.error)return{error:i.error};if(i.data){const t=i.data,e=t&&"object"==typeof t&&"result"in t?t.result?.payment:t.payment;if(e&&"object"==typeof e){const t=String(e.payment_identifier??""),a=Number(e.id??0),i=e.payment_type;if(null===this.normalizePaymentId(a)||!t.trim())return{error:{message:"Payment creation response is missing a valid payment ID or identifier.",type:"api"}};const r={id:a,identifier:t,amount:Number(e.payment_amount??0),paymentType:{id:null!=i?.id?Number(i.id):void 0,code:i?.reference_code??""}};return t&&this.credentials.setPaymentCredentials({id:a,identifier:t}),{data:r}}}return{data:i.data}}async initialize(t){return this.submitJsonPaymentStep(void 0,t)}async verify(t,e){if(!t)return this.getPaymentStep(e);const a=this.resolvePaymentCredentials(t.id,t.paymentIdentifier);return"error"in a?{error:a.error}:this.verifyPaymentCallback({paymentId:a.data.id,paymentIdentifier:a.data.identifier,body:this.paymentStepInputToCallbackFields(t)},e)}async verifyPaymentCallback(t,e){const a=this.nextVerificationTraceId("callback"),i=this.normalizePaymentId(t.paymentId),r=t.paymentIdentifier?.trim();if(this.logVerification(a,"started",{paymentId:t.paymentId,paymentIdentifier:r,body:t.body,query:t.query,callbackFieldNames:Object.keys({...t.body??{},...t.query??{}})}),null===i||!r)return this.logVerification(a,"validation_failed",{reason:"Invalid payment callback credentials",normalizedPaymentId:i,hasPaymentIdentifier:Boolean(r)}),{error:{message:"Invalid payment callback credentials.",type:"validation"}};const n=new URLSearchParams,s={...t.body??{},...t.query??{}};for(const[t,e]of Object.entries(s))this.appendCallbackValue(n,`payload[${t}]`,e);n.set("payment_identifier",r);const o=`${this.paymentsBasePath}/${encodeURIComponent(String(i))}/process_payment_step`;this.logVerification(a,"request_prepared",{method:"POST",endpoint:o,contentType:"application/x-www-form-urlencoded;charset=UTF-8",form:Object.fromEntries(n.entries())});const d=await this.http.post(o,n,{...e,headers:this.withContentType(e?.headers,"application/x-www-form-urlencoded;charset=UTF-8"),skipTransform:!0});return this.logVerification(a,"response_received",d),this.finalizeStepResponse(d,i,e,a)}async getPaymentStep(t){return this.submitJsonPaymentStep(void 0,t)}async processStep(t,e){return this.submitJsonPaymentStep(t,e)}async submitJsonPaymentStep(t,e){const a=this.nextVerificationTraceId("status"),i=this.resolvePaymentCredentials(t?.id,t?.paymentIdentifier);if("error"in i)return this.logVerification(a,"validation_failed",i),{error:i.error};const r=i.data,n=`${this.paymentsBasePath}/${r.id}/process_payment_step`;this.logVerification(a,"request_prepared",{method:"POST",endpoint:n,contentType:"application/json",credentialSource:null!=t?.id||null!=t?.paymentIdentifier?"input":"storage",paymentId:r.id});const s=await this.http.post(n,this.buildProcessStepBody(t,r.identifier),{...this.withExactJsonHeader(e),skipRequestTransform:!0});return this.logVerification(a,"response_received",s),this.finalizeStepResponse(s,r.id,e,a)}async processStepForm(t,e){const a=this.resolvePaymentCredentials();if("error"in a)return{error:a.error};const i=a.data,r=this.buildProcessStepFormData(t,i.identifier);if(!r)return{error:{message:"FormData is not available in this runtime.",type:"validation"}};const n=await this.http.post(`${this.paymentsBasePath}/${i.id}/process_payment_step`,r,{...e,skipTransform:!0});return this.finalizeStepResponse(n,i.id,e)}async pollUntilSettled(t,e=15e3){const a=this.nextVerificationTraceId("poll"),i=t?.intervalMs??e,r=t?.pollingTimeoutMs??3e5,n=t?.maxAttempts,s=Date.now();let o,d=0;if(this.logVerification(a,"poll_started",{intervalMs:i,pollingTimeoutMs:r,maxAttempts:n,immediate:t?.immediate??!1,signalAborted:t?.signal?.aborted??!1}),!Number.isFinite(i)||i<0||!Number.isFinite(r)||r<=0||void 0!==n&&(!Number.isInteger(n)||n<=0)){const t={error:{message:"Invalid payment polling options.",type:"validation"}};return this.logVerification(a,"poll_validation_failed",t),t}for(;!o;){const e=Date.now()-s;if(e>=r||void 0!==n&&d>=n){const t={error:{message:"Payment verification timed out.",type:"network"}};return this.logVerification(a,"poll_timed_out",{attempt:d,elapsed:e,result:t}),t}if(!t?.immediate||d>0){const n=await this.waitForPoll(Math.min(i,r-e),t?.signal);if(n)return this.logVerification(a,"poll_cancelled",{attempt:d,result:n}),n}if(Date.now()-s>=r){const t={error:{message:"Payment verification timed out.",type:"network"}};return this.logVerification(a,"poll_timed_out",{attempt:d,elapsed:Date.now()-s,result:t}),t}d+=1,this.logVerification(a,"poll_request_started",{attempt:d});const c=await this.getPaymentStep(t);this.logVerification(a,"poll_response_received",{attempt:d,response:c}),c.data&&"pending"===c.data.action||(o=c)}return this.logVerification(a,"poll_settled",{attempts:d,elapsedMs:Date.now()-s,response:o}),o}clearPayment(){this.credentials.clearPaymentCredentials()}withExactJsonHeader(t){const e={...t?.headers||{}};return delete e["Content-Type"],delete e["content-type"],{...t,headers:{...e,"Content-Type":"application/json"},skipTransform:!0}}buildProcessStepFormData(t,e){if("undefined"==typeof FormData)return null;if(t instanceof FormData)return t.has("payment_identifier")||t.append("payment_identifier",e),t;const a=this.buildProcessStepBody(t,e),i=new FormData;return Object.entries(a).forEach(([t,e])=>{this.appendFormValue(i,t,e)}),i.has("payment_identifier")||i.append("payment_identifier",e),i}buildProcessStepBody(t,e){const a={payment_identifier:e};return t?("payload"in t&&void 0!==t.payload&&(a.payload=t.payload),"tatoken"in t&&void 0!==t.tatoken&&(a.tatoken=t.tatoken),"trackingData"in t&&void 0!==t.trackingData&&(a.tracking_data=t.trackingData),"isFailed"in t&&void 0!==t.isFailed&&(a.is_failed=t.isFailed),"imageUrl"in t&&void 0!==t.imageUrl&&(a.image_url=t.imageUrl),"code"in t&&void 0!==t.code&&(a.code=t.code),a):a}appendFormValue(t,e,a){void 0!==a&&(null!==a?Array.isArray(a)?a.forEach(a=>this.appendFormValue(t,e,a)):"object"!=typeof a?t.append(e,String(a)):t.append(e,JSON.stringify(a)):t.append(e,""))}resolvePaymentCredentials(t,e){const a=e?.trim();if(null!=t||null!=e){if(!Number.isSafeInteger(t)||Number(t)<=0||!a)return{error:{message:"Invalid payment callback credentials.",type:"validation"}};const e={id:Number(t),identifier:a};return this.credentials.setPaymentCredentials(e),{data:e}}const i=this.credentials.getPaymentCredentials();if(!i)return{error:{message:"No payment found. Please create a payment first.",type:"validation"}};const r=this.normalizePaymentId(i.id),n="string"==typeof i.identifier?i.identifier.trim():"";return null!==r&&n?{data:{id:r,identifier:n}}:{error:{message:"Stored payment credentials are invalid. Restore the payment ID and identifier from the original gateway return URL.",type:"validation"}}}normalizePaymentId(t){const e="string"==typeof t&&t.trim()?Number(t):t;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?e:null}paymentStepInputToCallbackFields(t){const e={...t.payload??{}};return void 0!==t.tatoken&&(e.tatoken=t.tatoken),void 0!==t.trackingData&&(e.trackingData=t.trackingData),void 0!==t.isFailed&&(e.isFailed=t.isFailed),void 0!==t.imageUrl&&(e.imageUrl=t.imageUrl),void 0!==t.code&&(e.code=t.code),e}appendCallbackValue(t,e,a){void 0!==a&&(Array.isArray(a)?a.forEach(a=>this.appendCallbackValue(t,e,a)):null!==a?t.append(e,"object"==typeof a?JSON.stringify(a):String(a)):t.append(e,""))}withContentType(t,e){const a={...t??{}};return delete a["Content-Type"],delete a["content-type"],{...a,"Content-Type":e}}waitForPoll(t,e){return e?.aborted?Promise.resolve({error:{message:"Payment verification cancelled.",type:"network"}}):new Promise(a=>{const i=()=>{clearTimeout(r),a({error:{message:"Payment verification cancelled.",type:"network"}})},r=setTimeout(()=>{e?.removeEventListener("abort",i),a(null)},t);e?.addEventListener("abort",i,{once:!0})})}async finalizeStepResponse(t,e,a,i){if(!t.data)return this.logVerification(i,"finished_without_data",t),t;const r=t=>!!t&&"object"==typeof t&&!Array.isArray(t);let n=t.data;if("string"==typeof n)try{n=JSON.parse(n)}catch{return this.logVerification(i,"response_parse_failed",{rawResponse:t.data}),{error:{message:"Invalid payment step response",type:"api"}}}const s=n,o=r(s)&&r(s.response)?s.response:s;if(this.logVerification(i,"envelope_unwrapped",{hadProxyResponseWrapper:o!==s,envelope:o}),r(o)){const t="string"==typeof o.error?o.error:"",e=Number(o.error_code??0);if(t||e)return this.logVerification(i,"envelope_error",{error:t,errorCode:e,status:o.status}),{error:{message:t||"Payment step failed",type:"api",status:Number(o.status)||void 0}}}const d=r(o)&&r(o.result)?o.result:o;this.logVerification(i,"action_extracted",d);const c=this.normalizeAction(d);return c?(this.logVerification(i,"action_normalized",c),await this.callPinchAfterSuccessfulPayment(c,e,a,i),this.logVerification(i,"finished",{paymentId:e,action:c.action}),{data:c}):(this.logVerification(i,"action_invalid",{reason:"Missing or malformed payment action fields",actionPayload:d}),{error:{message:"Invalid payment step result",type:"api"}})}normalizeAction(t){const e="string"==typeof t.action?t.action:"",a="string"==typeof t.message?t.message:void 0;switch(e){case"POST":return"string"==typeof t.address&&this.isPostPayload(t.payload)?{action:"POST",address:t.address,payload:t.payload,message:a,raw:t}:null;case"REDIRECT":return"string"==typeof t.address?{action:"REDIRECT",address:t.address,message:a,raw:t}:null;case"UPLOAD":return{action:"UPLOAD",time:this.optionalNumber(t.time),message:a,raw:t};case"show_otp_modal":return{action:"show_otp_modal",time:this.optionalNumber(t.time),message:a,raw:t};case"show_order":case"pending":{if(!t.order||"object"!=typeof t.order||Array.isArray(t.order))return null;const i=N(t.order);return this.isCheckoutOrder(i)?"show_order"===e?{action:"show_order",order:i,message:a,raw:t}:{action:"pending",order:i,message:a,raw:t}:null}case"payment_fail_error":return{action:"payment_fail_error",message:a,raw:t};case"show_error":return{action:"show_error",message:a,raw:t};case"FAIL":return{action:"FAIL",message:a,raw:t};case"StockViolated":return{action:"StockViolated",message:a,raw:t};default:return e?{action:"unknown",backendAction:e,raw:t,message:a}:null}}optionalNumber(t){return"number"==typeof t&&Number.isFinite(t)?t:void 0}isPostPayload(t){return!!t&&"object"==typeof t&&!Array.isArray(t)&&Object.values(t).every(t=>"string"==typeof t||"number"==typeof t)}isCheckoutOrder(t){const e=t=>"number"==typeof t&&Number.isFinite(t)||"string"==typeof t&&t.length>0,a=t.invoice;return e(t.id)&&e(t.orderNumber)&&"string"==typeof t.orderIdentifier&&t.orderIdentifier.length>0&&!!a&&Array.isArray(a.invoiceItems)&&Array.isArray(a.shippingItems)&&(void 0===a.netTotal||"number"==typeof a.netTotal&&Number.isFinite(a.netTotal))&&(void 0===a.finalTotal||"number"==typeof a.finalTotal&&Number.isFinite(a.finalTotal))&&a.invoiceItems.every(t=>e(t.productVariantId)&&"string"==typeof t.name&&Array.isArray(t.variantAttributes)&&t.variantAttributes.every(t=>"string"==typeof t.name&&"string"==typeof t.value)&&"number"==typeof t.singleItemPrice&&Number.isFinite(t.singleItemPrice)&&"number"==typeof t.noOfItems&&Number.isFinite(t.noOfItems)&&"number"==typeof t.totalItemsPrice&&Number.isFinite(t.totalItemsPrice)&&"string"==typeof t.productVariant?.product?.productType)&&a.shippingItems.every(t=>e(t.id)&&Array.isArray(t.invoiceItemIds)&&"string"==typeof t.rate?.name&&"number"==typeof t.rate?.price&&Number.isFinite(t.rate.price))}async callPinchAfterSuccessfulPayment(t,e,a,i){if("show_order"!==t.action)return void this.logVerification(i,"pinch_skipped",{reason:"Payment action is not show_order",action:t.action});if(this.pinchedPayments.has(e))return void this.logVerification(i,"pinch_skipped",{reason:"Payment was already pinched",paymentId:e});this.pinchedPayments.add(e),this.logVerification(i,"pinch_started",{method:"POST",endpoint:`${Tt}/order`,paymentId:e});const r=await this.http.post(`${Tt}/order`,{},a);if(r.error)return this.pinchedPayments.delete(e),void this.logVerification(i,"pinch_failed",r);this.logVerification(i,"pinch_succeeded",r)}nextVerificationTraceId(t){return this.verificationTraceSequence+=1,`${t}-${Date.now()}-${this.verificationTraceSequence}`}logVerification(t,e,a){this.http.isDebugEnabled()&&console.debug(`[Sazito SDK][Payment Verification][${t??"untracked"}] ${e}`,this.redactVerificationLogValue(a))}redactVerificationLogValue(t,e=""){if(/authorization|cookie|password|secret|token|identifier|tracking|mobile|phone|email|postal|address|first.?name|last.?name|receipt.?ref|ref.?id/i.test(e)){if(null==t||""===t)return t;const e=String(t);return e.length<=4?"[REDACTED]":`[REDACTED:${e.slice(-4)}]`}return Array.isArray(t)?t.map(t=>this.redactVerificationLogValue(t)):t&&"object"==typeof t?Object.fromEntries(Object.entries(t).map(([t,e])=>[t,this.redactVerificationLogValue(e,t)])):t}}class Lt{constructor(t){this.http=t}normalizeUserResponse(t){if(!t.data)return t;const e=V(t.data);return e?{data:e}:t}normalizeLoginResponse(t){if(!t.data||!t.data.user)return t;const e=V(t.data.user);return e?{data:{...t.data,user:e}}:t}async login(t,e){const a=await this.http.post(`${zt}/login`,t,e);return this.normalizeLoginResponse(a)}async requestMobileOTP(t,e){return this.http.post(`${zt}/login_request`,t,e)}async verifyMobileOTP(t,e){const a=await this.http.post(`${zt}/login_request_verification`,t,e);return this.normalizeLoginResponse(a)}async requestEmailLogin(t,e){return this.http.post(`${kt}/email_login_request`,t,e)}async register(t,e){const a=await this.http.post(`${kt}/register`,t,e);return this.normalizeUserResponse(a)}async getCurrentUser(t){const e=await this.http.get(`${kt}/current`,t);return this.normalizeUserResponse(e)}async updateProfile(t,e,a){const i=await this.http.put(`${kt}/${t}`,e,a);return this.normalizeUserResponse(i)}async requestMobilePhoneUpdate(t,e){return this.http.post(`${kt}/update_mobile_phone_request`,t,e)}async verifyMobilePhoneUpdate(t,e){const a=await this.http.post(`${kt}/update_mobile_phone_verification`,t,e);return this.normalizeUserResponse(a)}async forgotPassword(t,e){return this.http.post(`${kt}/forgot_password`,t,e)}async revivePassword(t,e){const a=await this.http.post(`${kt}/revive_password`,t,e);return this.normalizeLoginResponse(a)}async mergeUser(t){return this.http.post(`${kt}/merge_user`,{},t)}}class Kt{constructor(t){this.http=t}transformFilters(t){if(!t)return{};const e={};return void 0!==t.page&&(e.page_number=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),void 0!==t.categoryId&&(e.category_id=t.categoryId),void 0!==t.minPrice&&(e.min_price=t.minPrice),void 0!==t.maxPrice&&(e.max_price=t.maxPrice),e}async query(t,e,a){const i=this.transformFilters(e),r=await this.http.get(Pt,{...a,params:{...i,query:t,page_number:i.page_number??1,page_size:i.page_size??20,search_direction:"center"}});if(r.data){return{data:et(r.data)}}return r}}class Yt{constructor(t){this.http=t}normalizeSeedItem(t){return{productId:String(t?.productId??""),productVariantId:String(t?.productVariantId??""),productName:String(t?.productName??t?.name??""),productAttributes:Array.isArray(t?.productAttributes)?t.productAttributes:Array.isArray(t?.attributes)?t.attributes:[],productImage:t?.productImage||t?.image||{url:"",alt:""}}}normalizeSeed(t){const e=Array.isArray(t?.items)?t.items:[];return{orderId:String(t?.orderId??""),orderIdentifier:String(t?.orderIdentifier??""),hasCommentAlready:Boolean(t?.hasCommentAlready),items:e.map(t=>this.normalizeSeedItem(t))}}normalizeProductReview(t){const e=t?.metadata||{};return{...t,metadata:{variantOptions:Array.isArray(e.variantOptions)?e.variantOptions:[],productName:String(e.productName??e.name??""),variantId:String(e.variantId??"")}}}normalizeProductReviewsResponse(t){const e=Array.isArray(t?.entities)?t.entities:[],a=t?.recommendations||{};return{entities:e.map(t=>this.normalizeProductReview(t)),pageNumber:Number(t?.pageNumber??1),pageSize:Number(t?.pageSize??10),totalCount:Number(t?.totalCount??e.length),averageRate:Number(t?.averageRate??0),recommendations:{recommendedPercentage:Number(a.recommendedPercentage??0),recommendedTotalCount:Number(a.recommendedTotalCount??0)}}}transformLegacyFilters(t){if(!t)return{};const e={};return void 0!==t.productId&&(e.product_id=t.productId),void 0!==t.page&&(e.page=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),e}async getSeed(t,e){const a=await this.http.get(`/api/v1/feedbacks/seed/${t}`,e);if(a.data){const t=a.data.seed||a.data.data||a.data;return{data:this.normalizeSeed(t)}}return a}async createOrderRating(t,e){const a=await this.http.post("/api/v1/feedbacks/comments",t,e);if(a.data){const t=a.data.id??a.data.commentId??a.data.comment?.id;return{data:{id:String(t??"")}}}return a}async submitProductReview(t,e){return this.http.post(Gt,t,e)}async getProductStatistics(t,e){const a=await this.http.get(`${Gt}/${t}`,{...e,params:{exclude:"comments"}});if(a.data){return{data:{productStatistics:a.data.productStatistics||a.data.data?.productStatistics||a.data}}}return a}async getProductReviews(t,e,a){const i=await this.http.get(`${Gt}/${t}`,{...a,params:{page_number:e?.pageNumber??1,page_size:e?.pageSize??10}});if(i.data){const t=i.data.data||i.data;return{data:this.normalizeProductReviewsResponse(t)}}return i}async uploadReviewImages(t,e){const a=new FormData;t.forEach((t,e)=>{a.append("images[][file]",t.file),a.append("images[][name]",t.name||`image-${e+1}`),a.append("images[][alt]",t.alt||t.name||`image-${e+1}`)});const i=await this.http.post("/api/v1/service/filemanager/uploads/public/tajrobe",a,e);if(i.data){return{data:{images:Array.isArray(i.data.images)?i.data.images:Array.isArray(i.data.data?.images)?i.data.data.images:Array.isArray(i.data.result?.images)?i.data.result.images:[]}}}return i}async list(t,e){return this.http.get(Nt,{...e,params:this.transformLegacyFilters(t)})}async create(t,e){return this.http.post(Nt,t,e)}async get(t,e){return this.http.get(`${Nt}/${t}`,e)}}class Jt{constructor(t){this.http=t}validateInvoiceId(t){return!Number.isFinite(t)||t<=0?{error:{message:"Invalid invoice ID",type:"validation"}}:null}async getBalance(t){return this.http.get("/api/v1/users/wallet/balance",t)}async listTransactions(t,e){const a=t?.pageNumber??t?.page_number??1,i=t?.pageSize??t?.page_size??20,r=await this.http.get("/api/v1/wallet/transactions",{...e,params:{pageNumber:a,pageSize:i}});return r.data?{data:G(r.data)}:r}async applyCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const i=await this.http.post(`${Ct}/${t}/add_credit`,{},e);return i.data?{data:E(i.data)}:i}async removeCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const i=await this.http.post(`${Ct}/${t}/remove_credit`,{},e);return i.data?{data:E(i.data)}:i}}class Qt{constructor(t){this.http=t}missingDataError(t){return{error:{message:`No data returned from ${t} endpoint`,type:"api"}}}unexpectedEntityError(t,e,a,i=400){return{error:{message:`Expected ${t} at ${a}, but got ${e}`,type:"api",status:i,details:{expected:t,actual:e,urlPath:a}}}}async getPage(t,e){const a=await this.http.get(Ft,{...e,params:{url_part:t}});if(a.error)return{error:a.error};if(!a.data)return this.missingDataError("CMS page");const i=mt(a.data);return"cms_page"===i.entityType&&i.entity?"blog"===i.entity.cmsPageType?this.unexpectedEntityError("CMS page","blog page",t):{data:i.entity}:this.unexpectedEntityError("CMS page",i.entityType||"unknown entity",t,"unknown"===i.entityType?404:400)}async listPages(t,e){const a=gt({...t,cmsPageTypes:"normal"}),i=await this.http.get(Rt,{...e,params:a});return i.error?{error:i.error}:i.data?{data:ht(i.data)}:this.missingDataError("CMS pages")}async getBlogPost(t,e){const a=await this.http.get(Ft,{...e,params:{url_part:t}});if(a.error)return{error:a.error};if(!a.data)return this.missingDataError("blog post");const i=mt(a.data);return"cms_page"===i.entityType&&i.entity?"blog"!==i.entity.cmsPageType?this.unexpectedEntityError("blog post","CMS page",t):{data:i.entity}:this.unexpectedEntityError("blog post",i.entityType||"unknown entity",t,"unknown"===i.entityType?404:400)}async listBlogPosts(t,e){const a=gt({...t,cmsPageTypes:"blog"}),i=await this.http.get(Rt,{...e,params:a});return i.error?{error:i.error}:i.data?{data:ht(i.data)}:this.missingDataError("blog posts")}async listAll(t,e){const a=gt(t),i=await this.http.get(Rt,{...e,params:a});return i.error?{error:i.error}:i.data?{data:ht(i.data)}:this.missingDataError("CMS content")}}class Wt{constructor(t){this.http=t}async upload(t,e){const a=new FormData;a.append("image",t);const i={...e?.headers};return delete i["Content-Type"],this.http.post(Dt,a,{...e,headers:i})}async delete(t,e){return this.http.delete(`${Dt}/${t}`,e)}}class Ht{constructor(t){this.http=t}async track(t,e){const a=e??((i=t)&&"object"==typeof i&&("retries"in i||"timeout"in i||"cache"in i||"headers"in i||"signal"in i)?t:void 0);var i;return this.http.post("/api/v1/visits/add",void 0,a)}async trackProduct(t,e,a){return this.track(a)}async trackCategory(t,e,a){return this.track(a)}}class Zt{constructor(t){this.http=t}transformEventFilters(t){if(!t)return{};const e={};return void 0===t.startDate&&void 0===t.start_date||(e.start_date=t.startDate??t.start_date),void 0===t.endDate&&void 0===t.end_date||(e.end_date=t.endDate??t.end_date),void 0===t.availableOnly&&void 0===t.available_only||(e.available_only=t.availableOnly??t.available_only),void 0!==t.page&&(e.page=t.page),void 0===t.pageSize&&void 0===t.page_size||(e.page_size=t.pageSize??t.page_size),e}async listEvents(t,e){return this.http.get(Ot,{...e,params:this.transformEventFilters(t)})}async getEvent(t,e){const a=await this.http.get(`${Ot}/${t}`,e);if(a.data){return{data:a.data.event||a.data}}return a}async getEventAvailabilities(t,e){const a=await this.http.get("/api/v1/scheduler/availabilities",{...e,params:{eventEntityId:t.eventEntityId,duration:t.duration,fromDate:t.fromDate,toDate:t.toDate,timezone:t.timezone}});if(a.data){return{data:{availableDays:a.data.availableDays||a.data.data?.availableDays||[]}}}return a}async createBooking(t,e){return this.http.post($t,t,e)}async listBookings(t){return this.http.get($t,t)}async cancelBooking(t,e){return this.http.post(`${$t}/${t}/cancel`,{},e)}}class Xt{constructor(t){this.http=t}async resolve(t,e){const a=await this.http.get(Ft,{...e,params:{url_part:t}});if(a.data){return{data:mt(a.data)}}return a}}class te{constructor(t){this.http=t}async getHeaderMenu(t="headermenu",e){const a=await this.http.get("/api/v1/trees/fetch_single",{...e,params:{identifier:t}});if(a.error)return{error:a.error};const i=bt(a.data),r=i?.tree?.treeStructure?.nodes||[];return{data:this.convertRawTreeToNavigation(r)}}convertRawTreeToNavigation(t){if(!t||0===t.length)return[];return t.map(t=>({name:this.findNodeTitle(t),url:this.findNodeUrl(t),children:this.convertRawTreeToNavigation(t.children||[]),shouldBeDropped:this.shouldDropNode(t)})).filter(t=>!t.shouldBeDropped).map(({shouldBeDropped:t,...e})=>e)}findNodeTitle(t){const{details:e,entity:a}=t,i=this.firstNonEmpty(e?.title,e?.name),r=this.firstNonEmpty(a?.title,a?.name);return!0===e?.isTitleDefault?r||i:i||r}firstNonEmpty(...t){return t.find(t=>"string"==typeof t&&t.trim().length>0)||""}findNodeUrl(t){return"product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType?t.entity?.url||"#":"url"===t.entityType&&t.details?.url||"#"}shouldDropNode(t){return("product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType)&&!t.entity?.enabled}}class ee{constructor(t){this.http=t}async getInfo(t){const e=await this.http.get("/api/v2/general/info",t);return e.data?{data:g(e.data)}:e.error?{error:e.error}:{error:{type:"api",message:"No data returned from general info endpoint."}}}async getFeatures(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.features}}async getCheckoutConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.checkout}}async getWalletConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.wallet}}async getTajrobeConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.tajrobe}}}class ae{constructor(t){this.http=t}normalizeField(t){return{key:String(t?.key??""),name:String(t?.name??""),type:t?.type,label:String(t?.label??""),value:t?.value,placeholder:String(t?.placeholder??""),required:Boolean(t?.required),inputOptions:Array.isArray(t?.inputOptions)?t.inputOptions:[],allowedExtensions:Array.isArray(t?.allowedExtensions)?t.allowedExtensions:[]}}normalizeForm(t){const e=Array.isArray(t?.fields)?t.fields:[];return{id:Number(t?.id??0),title:String(t?.title??t?.name??""),description:String(t?.description??""),fields:e.map(t=>this.normalizeField(t))}}async getForm(t,e){const a=await this.http.get(`/api/v1/dynamic_form/${t}`,e);if(a.data){const t=a.data.form||a.data.data||a.data;return{data:this.normalizeForm(t)}}return a}async uploadProductFormFile(t,e){const a=new FormData;a.append("file",t);const i=await this.http.post("/api/v1/service/filemanager/uploads/private/productform",a,e);if(i.data){const t=i.data?.data?.file?.serveKey||i.data?.file?.serveKey||i.data?.serveKey;return{data:{serveKey:String(t??"")}}}return i}}function ie(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function re(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"==typeof t){const e=Number(t);return Number.isFinite(e)?e:0}return 0}function ne(t){return"string"==typeof t?t.trim():""}class se{constructor(t){this.http=t}normalizeCity(t){return ie(t)?{id:re(t.id),name:ne(t.name),latitude:re(t.latitude),longitude:re(t.longitude)}:{id:0,name:"",latitude:0,longitude:0}}normalizeRegion(t){if(!ie(t))return{id:0,name:"",cities:[]};const e=Array.isArray(t.cities)?t.cities:[];return{id:re(t.id),name:ne(t.name),cities:e.map(t=>this.normalizeCity(t)).filter(t=>t.id>0&&t.name.length>0)}}extractRegions(t){return Array.isArray(t)?t:ie(t)?Array.isArray(t.regions)?t.regions:Array.isArray(t.items)?t.items:[]:[]}sortAlphabetically(t){return[...t].map(t=>({...t,cities:[...t.cities].sort((t,e)=>t.name.localeCompare(e.name,"fa"))})).sort((t,e)=>t.name.localeCompare(e.name,"fa"))}async list(t){const e=await this.http.get("/api/v2/regions",t);if(e.error)return{error:e.error};const a=this.extractRegions(e.data).map(t=>this.normalizeRegion(t)).filter(t=>t.id>0&&t.name.length>0);return{data:this.sortAlphabetically(a)}}}class oe{constructor(t,a){const i=e(t);this.http=new _t(i),this.tokenStorage=this.http.getTokenStorage(),this.credentialsManager=a??new wt,this.products=new xt(this.http),this.categories=new Vt(this.http),this.cart=new Mt(this.http,this.credentialsManager),this.invoices=new Ut(this.http,this.credentialsManager),this.shipping=new jt(this.http,this.credentialsManager),this.payments=new qt(this.http,this.credentialsManager,i.paymentsBasePath),this.orders=new Bt(this.http),this.users=new Lt(this.http),this.search=new Kt(this.http),this.feedbacks=new Yt(this.http),this.wallet=new Jt(this.http),this.cms=new Qt(this.http),this.images=new Wt(this.http),this.visits=new Ht(this.http),this.booking=new Zt(this.http),this.entityRoutes=new Xt(this.http),this.menu=new te(this.http),this.general=new ee(this.http),this.dynamicForms=new ae(this.http),this.regions=new se(this.http)}setAuthToken(t){this.tokenStorage.set(t)}getAuthToken(){return this.tokenStorage.get()}clearAuth(){this.tokenStorage.remove()}isAuthenticated(){return null!==this.tokenStorage.get()}clearCache(){this.http.clearCache()}clearCredentials(){this.credentialsManager.clearAll()}getCredentialsManager(){return this.credentialsManager}clearAll(){this.clearAuth(),this.clearCache(),this.clearCredentials()}async searchQuery(t,e,a){return this.search.query(t,e,a)}}function de(t,e){return new oe(t,e)}function ce(t){if(!t||"object"!=typeof t)return!1;const e=t;return e.http instanceof _t&&e.credentials instanceof wt}function pe(t){return ce(t)?t:function(t){const a=e(t);return{http:new _t(a),credentials:new wt}}(t)}function ue(t){const{http:e}=pe(t);return new xt(e)}function le(t){const{http:e}=pe(t);return new Vt(e)}function me(t){const{http:e,credentials:a}=pe(t);return new Mt(e,a)}function ye(t){const{http:e}=pe(t);return new Bt(e)}function he(t){const{http:e,credentials:a}=pe(t);return new Ut(e,a)}function ge(t){const{http:e,credentials:a}=pe(t);return new jt(e,a)}function fe(t){const{http:a,credentials:i}=pe(t),r=ce(t)?void 0:e(t).paymentsBasePath;return new qt(a,i,r)}function be(t){const{http:e}=pe(t);return new Lt(e)}function _e(t){const{http:e}=pe(t);return new Kt(e)}function ve(t){const{http:e}=pe(t);return new Yt(e)}function we(t){const{http:e}=pe(t);return new Jt(e)}function Ae(t){const{http:e}=pe(t);return new Qt(e)}function Pe(t){const{http:e}=pe(t);return new Wt(e)}function Ie(t){const{http:e}=pe(t);return new Ht(e)}function Ce(t){const{http:e}=pe(t);return new Zt(e)}function Se(t){const{http:e}=pe(t);return new Xt(e)}function Te(t){const{http:e}=pe(t);return new te(e)}function Ee(t){const{http:e}=pe(t);return new ee(e)}function ke(t){const{http:e}=pe(t);return new ae(e)}function ze(t){const{http:e}=pe(t);return new se(e)}export{wt as CredentialsManager,_t as HttpClient,vt as MemoryStorage,oe as SazitoClient,a as TokenStorage,Ce as booking,me as cart,le as categories,Ae as cms,Ce as createBookingAPI,Ae as createCMSAPI,me as createCartAPI,le as createCategoriesAPI,ke as createDynamicFormsAPI,Se as createEntityRoutesAPI,ve as createFeedbacksAPI,Ee as createGeneralAPI,Pe as createImagesAPI,he as createInvoicesAPI,Te as createMenuAPI,ye as createOrdersAPI,fe as createPaymentsAPI,ue as createProductsAPI,ze as createRegionsAPI,de as createSazitoClient,_e as createSearchAPI,ge as createShippingAPI,be as createUsersAPI,Ie as createVisitsAPI,we as createWalletAPI,ke as dynamicForms,Se as entityRoutes,ve as feedbacks,Ee as general,Pe as images,he as invoices,Te as menu,ye as orders,fe as payments,ue as products,ze as regions,_e as search,ge as shipping,n as toEnglishDigits,it as transformAddToCartInput,h as transformApiResponse,T as transformCartResponse,rt as transformCreateCartInput,E as transformInvoiceResponse,tt as transformProductListResponse,y as transformRequestKeys,m as transformResponseKeys,at as transformShippingAddressInput,be as users,Ie as visits,we as wallet};
|
|
1
|
+
const t={apiBaseUrl:"http://api.sazito.com:8080",paymentsBasePath:"/api/v2/payments",timeout:3e4,retry:{enabled:!0,retries:3,retryDelay:1e3},cache:{products:{enabled:!0,ttl:6e5},categories:{enabled:!0,ttl:6e5},cart:{enabled:!1},orders:{enabled:!1},search:{enabled:!0,ttl:3e5},cms:{enabled:!0,ttl:6e5},tags:{enabled:!0,ttl:6e5},entityRoutes:{enabled:!0,ttl:6e5}},debug:!1};function e(e){return{...t,...e,retry:{...t.retry,...e.retry},cache:{...t.cache,...e.cache},customFetchApi:e.customFetchApi||("undefined"!=typeof fetch?fetch:void 0)}}class a{constructor(){this.tokenKey="user_id_token"}get(){if("undefined"==typeof window||"undefined"==typeof document)return null;const t=this.getFromLocalStorage();if(t)return t;return this.parseCookies()[this.tokenKey]||null}set(t,e){if("undefined"==typeof window||"undefined"==typeof document)return void console.warn("[Sazito SDK] Cannot set token in SSR environment");this.setInLocalStorage(t);const a={secure:!0,sameSite:"Lax",maxAge:2592e3,path:"/",...e};this.setCookie(this.tokenKey,t,a)}remove(){"undefined"!=typeof window&&"undefined"!=typeof document&&(this.removeFromLocalStorage(),this.setCookie(this.tokenKey,"",{maxAge:-1,path:"/"}))}getFromLocalStorage(){try{return window.localStorage.getItem(this.tokenKey)}catch{return null}}setInLocalStorage(t){try{window.localStorage.setItem(this.tokenKey,t)}catch{}}removeFromLocalStorage(){try{window.localStorage.removeItem(this.tokenKey)}catch{}}parseCookies(){return"undefined"==typeof document?{}:document.cookie.split(";").reduce((t,e)=>{const[a,i]=e.trim().split("=");return a&&i&&(t[a]=decodeURIComponent(i)),t},{})}setCookie(t,e,a){let i=`${t}=${encodeURIComponent(e)}`;void 0!==a.maxAge&&(i+=`; Max-Age=${a.maxAge}`),a.path&&(i+=`; Path=${a.path}`),a.domain&&(i+=`; Domain=${a.domain}`),a.secure&&(i+="; Secure"),a.httpOnly&&(i+="; HttpOnly"),a.sameSite&&(i+=`; SameSite=${a.sameSite}`),document.cookie=i}}class i{constructor(){this.cache=new Map}get(t,e){const a=this.cache.get(t);return a?e&&Date.now()-a.timestamp>e?(this.cache.delete(t),null):a.data:null}set(t,e){this.cache.set(t,{data:e,timestamp:Date.now()})}delete(t){this.cache.delete(t)}deletePattern(t){const e=new RegExp(t),a=[];this.cache.forEach((t,i)=>{e.test(i)&&a.push(i)}),a.forEach(t=>this.cache.delete(t))}clear(){this.cache.clear()}static generateKey(t,e,a){return`${t}:${e}:${a?JSON.stringify(a):""}`}}const r=new Set(["mobile_phone","phone_number"]);function n(t){return t.replace(/[۰-۹٠-٩]/g,t=>{const e=t.charCodeAt(0);return String(e>=1776?e-1776:e-1632)})}const s={no_of_items:"quantity",single_item_price:"unitPrice",total_items_price:"lineTotal",items_total_raw_price:"itemsTotalRawPrice",items_discount:"itemsDiscount",customer_profit:"customerProfit",customer_profit_percentage:"customerProfitPercentage",total_amount:"totalAmount",net_total:"netTotal",gross_total:"grossTotal",final_total:"finalTotal",discount_total:"discountTotal",shipping_total:"shippingTotal",tax_total:"taxTotal",unique_identifier:"identifier",invoice_identifier:"identifier",payment_identifier:"identifier",shipping_address_identifier:"identifier",first_name:"firstName",last_name:"lastName",mobile_phone:"mobilePhone",phone_number:"phoneNumber",postal_code:"postalCode",user_comment:"userComment",product_id:"productId",variant_id:"variantId",product_name:"name",product_image:"image",product_variant:"variant",product_variants:"variants",product_categories:"categories",product_attributes:"attributes",variant_attributes:"attributes",product_type:"productType",short_description:"shortDescription",stock_quantity:"stockQuantity",stock_number:"stockQuantity",sale_price:"salePrice",raw_price:"originalPrice",has_max_order:"hasMaxOrder",max_no_of_order:"maxOrderQuantity",min_order_count:"minOrderQuantity",sold_count:"soldCount",static_url:"staticUrl",dynamic_form_id:"dynamicFormId",event_entity_id:"eventEntityId",theme_config:"themeConfig",image_id:"imageId",is_stock_managed:"isStockManaged",commercial_files:"commercialFiles",sort_index:"sortIndex",attribute_type:"attributeType",cart_products:"items",cart_product_id:"cartProductId",min_basket_limit_violated:"minBasketLimitViolated",invoice_items:"items",products:"items",total_count:"total",shipping_method_needed:"needsShipping",shipping_method:"shippingMethod",shipping_address:"shippingAddress",shipping_items:"shippingItems",delivery_time:"deliveryTime",min_delivery_days:"minDays",max_delivery_days:"maxDays",payment_type:"paymentType",payment_types:"paymentTypes",payment_amount:"amount",reference_code:"code",is_default:"isDefault",is_available:"isAvailable",delete_coupon:"deleteCoupon",form_attributes:"formAttributes",booking_attributes:"bookingAttributes",readable_form_attr:"formFields",created_at:"createdAt",updated_at:"updatedAt",page_number:"page",page_size:"pageSize",total_count_raw:"totalCountRaw",max_price:"maxPrice",min_price:"minPrice",stock_alert_limit:"stockAlertLimit",sub_categories:"subCategories",order_number:"orderNumber",sort_order:"sortOrder",pinned_ids:"pinnedIds",region_id:"regionId",city_id:"cityId",parent_id:"parentId",discount_code:"discountCode",entity_name:"entityType",entity_id:"entityId",other_props:"entity",shipping_methods:"shippingMethods",shipping_rates:"shippingRates",grouped_shipping_rates:"groupedShippingRates",items_shipping_rate:"itemsShippingRate",shipping_rate:"shippingRate",rate_id:"rateId",invoice_item_id:"invoiceItemId",invoice_item_ids:"invoiceItemIds",scheduler_booking_attributes:"schedulerBookingAttributes",inventory_count:"inventoryCount",order_identifier:"orderIdentifier",self_only:"selfOnly",coupon:"coupon",discount_usages:"discountUsages",user_set_coordinates_before:"userSetCoordinatesBefore",show_order:"showOrder",alt:"alt",url:"url",activate_add_to_cart_alert:"addToCardAlert",activate_advanced_card_to_card:"advancedCardToCard",activate_ayria_payment_customization:"ayriaPaymentGateway",activate_azki_payment_customization:"azkiPaymentGateway",activate_bazar_payment_customization:"bazarPaymentGateway",activate_blog:"shopBlog",activate_card_to_card_payment:"cardToCardPayment",activate_checkout_dynamic_form:"checkoutDynamicForm",activate_different_register_customization:"multiTypeRegister",activate_digipay_payment:"digipayPaymentGateway",activate_digipay_payment_customization:"digipayPaymentGateway",activate_filter_products:"productFilters",activate_ghesta_payment_customization:"ghestaPaymentGateway",activate_mega_footer:"megaFooter",activate_mellat_payment_customization:"mellatPaymentGateway",activate_min_basket:"checkoutMinimumAmount",activate_novapay_payment_customization:"novapayPaymentGateway",activate_ozon_payment_customization:"ozonPaymentGateway",activate_payment_in_place:"paymentInPlace",activate_payping_payment:"paypingPaymentGateway",activate_pec_payment_customization:"pecPaymentGateway",activate_sabin_payment_customization:"sabinPaymentGateway",activate_sadad_payment_customization:"sadadPaymentGateway",activate_search:"shopSearch",activate_sep_payment_customization:"sepPaymentGateway",activate_shop_vat:"shopVat",activate_snapppay_payment_customization:"snapppayPaymentGateway",activate_tajrobe:"tajrobe",activate_tara_payment_customization:"taraPaymentGateway",activate_theme_config_settings:"themeConfigSettings",activate_toman_payment_customization:"tomanPaymentGateway",activate_torobpay_payment_customization:"torobpayPaymentGateway",activate_up_payment_customization:"asanpardakhtPaymentGateway",activate_vandar_payment_customization:"vandarPaymentGateway",activate_wallet:"wallet",activate_yourgate_payment_customization:"yourgatePaymentGateway",activate_zarinpal_payment:"zarinpalPaymentGateway",activate_zarinplus_payment_customization:"zarinplusPaymentGateway",activate_zibal_payment_customization:"zibalPaymentGateway",activate_zify_payment_customization:"zifyPaymentGateway",disable_ordering:"disableOrdering",pwa:"progressiveWebApp",remove_front_basket:"hideCheckout",remove_front_taint:"sazitoBrandingRemoval"},o=Object.values(s).reduce((t,e)=>(t[e]=(t[e]||0)+1,t),{}),d=Object.entries(s).reduce((t,[e,a])=>(1===o[a]&&(t[a]=e),t),{});function c(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function p(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function u(t){return!(null===t||"object"!=typeof t||Array.isArray(t)||t instanceof Date)}function l(t,e){const a={...t};for(const t of e)delete a[t];return a}function m(t){if(!u(t))return Array.isArray(t)?t.map(t=>m(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=s[a];t||(t=c(a)),u(i)?e[t]=m(i):Array.isArray(i)?e[t]=i.map(t=>m(t)):e[t]=i}return e}function y(t){if(!u(t))return Array.isArray(t)?t.map(t=>y(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=d[a];t||(t=p(a)),u(i)?e[t]=y(i):Array.isArray(i)?e[t]=i.map(t=>y(t)):e[t]="string"==typeof i&&r.has(t)?n(i):i}return e}function h(t){const e=t;if(u(e?.data?.result)){const t=e.data.result,a=Object.keys(t);return 1===a.length&&u(t[a[0]])?m(t[a[0]]):m(t)}return m(t)}function g(t){if(!t)return{};if(!u(t))return{};const{general:e,shop:a,checkout:i,features:r,wallet:n,tajrobe:s,domain:o,enamad:d,google:c,logo:p,social:l,...m}=t,y={...u(e)?e:{},...u(a)?a:{}},{registerType:h,showProductStockNumber:g,...w}=y||{};return{...m,scripts:{enamad:d,google:c},shop:b({...w,domain:o,logo:p,social:l}),settings:{checkout:f(i),features:I(r),wallet:C(n),tajrobe:S(s),registerType:_(h),showProductStockNumber:v(g)}}}function f(t){if(!u(t))return{};const e=u(t.minBasket)?t.minBasket:{},a=e.minAmount??e.minBasket,i="number"==typeof a?a:Number(a),r={...t,addToCartAlert:v(t.addToCartAlert),dynamicForm:v(t.dynamicForm),emailOptional:v(t.emailOptional??t.email_optional),preventRedirect:v(t.preventRedirect??t.manual),minBasket:{enabled:v(e.enabled),minAmount:Number.isFinite(i)?i:0},miniCart:v(t.miniCart),postalCodeMandatory:v(t.postalCodeMandatory),quickAddToCart:v(t.quickAddToCart)};return delete r.manual,r}function _(t){return"string"==typeof t?t:""}function v(t){return"boolean"==typeof t?t:u(t)&&Object.prototype.hasOwnProperty.call(t,"enabled")?v(t.enabled):1===t||"1"===t||"true"===t}function b(t){if(!u(t))return{};const e={...t};if(u(e.city)){const t=l(e.city,["createdAt","updatedAt"]);let a=t.region;u(a)&&(a=l(a,["createdAt","updatedAt","cities"])),t.region=a,e.city=t}return e}const w={addToCardAlert:"addToCartAlertEnabled",addToCartAlert:"addToCartAlertEnabled",advancedCardToCard:"advancedCardToCardEnabled",cardToCardPayment:"cardToCardPaymentEnabled",checkoutDynamicForm:"checkoutDynamicFormEnabled",multiTypeRegister:"multiTypeRegisterEnabled",productFilters:"productFiltersEnabled",megaFooter:"megaFooterEnabled",checkoutMinimumAmount:"checkoutMinimumAmountEnabled",paymentInPlace:"paymentInPlaceEnabled",shopBlog:"blogEnabled",shopSearch:"searchEnabled",shopVat:"shopVatEnabled",tajrobe:"tajrobeEnabled",themeConfigSettings:"themeConfigSettingsEnabled",wallet:"walletEnabled",progressiveWebApp:"progressiveWebAppEnabled",disableOrdering:"orderingDisabled",hideCheckout:"checkoutHidden",sazitoBrandingRemoval:"sazitoBrandingRemoved",ayriaPaymentGateway:"ayriaPaymentGatewayEnabled",azkiPaymentGateway:"azkiPaymentGatewayEnabled",bazarPaymentGateway:"bazarPaymentGatewayEnabled",digipayPaymentGateway:"digipayPaymentGatewayEnabled",ghestaPaymentGateway:"ghestaPaymentGatewayEnabled",mellatPaymentGateway:"mellatPaymentGatewayEnabled",novapayPaymentGateway:"novapayPaymentGatewayEnabled",ozonPaymentGateway:"ozonPaymentGatewayEnabled",paypingPaymentGateway:"paypingPaymentGatewayEnabled",pecPaymentGateway:"pecPaymentGatewayEnabled",sabinPaymentGateway:"sabinPaymentGatewayEnabled",sadadPaymentGateway:"sadadPaymentGatewayEnabled",sepPaymentGateway:"sepPaymentGatewayEnabled",snapppayPaymentGateway:"snapppayPaymentGatewayEnabled",taraPaymentGateway:"taraPaymentGatewayEnabled",tomanPaymentGateway:"tomanPaymentGatewayEnabled",torobpayPaymentGateway:"torobpayPaymentGatewayEnabled",asanpardakhtPaymentGateway:"asanpardakhtPaymentGatewayEnabled",vandarPaymentGateway:"vandarPaymentGatewayEnabled",yourgatePaymentGateway:"yourgatePaymentGatewayEnabled",zarinpalPaymentGateway:"zarinpalPaymentGatewayEnabled",zarinplusPaymentGateway:"zarinplusPaymentGatewayEnabled",zibalPaymentGateway:"zibalPaymentGatewayEnabled",zifyPaymentGateway:"zifyPaymentGatewayEnabled",activateEditOrderCustomization:"editOrderEnabled",activateEditOrderCustomizationEnabled:"editOrderEnabled"},A=new Set(["activateAlopeykAdvanced","activate_alopeyk_advanced"]),P=new Set(["auditLogEnabled","editOrderEnabled","rahkaranAccountingCustomizationEnabled","advancedThemeDesignerEnabled","checkoutHidden","eventPublisherEnabled","exportOrdersEnabled","exportProductsEnabled","exportUsersEnabled","fontCustomizationEnabled","forwardShippingEnabled","podroShippingEnabled","postexShippingEnabled","quotaNotificationsEnabled","recaptchaEnabled","rolePoliciesEnabled","sepidarAccountingCustomizationEnabled","shortUrlEnabled","skuSearchEnabled","snappShopCustomizationEnabled","snappboxShippingEnabled","stockAlertNotificationsEnabled","tapsipackShippingEnabled","themeConfigSettingsEnabled","advancedTextEditorEnabled","advancedShippingEnabled","bulkActionEnabled","discountBulkEnabled","discountCodeEnabled","orderBulkActionEnabled","importProductsEnabled","mahakAccountingCustomizationEnabled","millipayPaymentCustomizationEnabled","orderSmsNotificationsEnabled"]);function I(t){if(!u(t))return{};const e={},a=(t,a)=>{if(A.has(t))return;const i=(t=>{if("boolean"==typeof t)return t;if("number"==typeof t)return 1===t||0!==t&&void 0;if("string"==typeof t){const e=t.trim().toLowerCase();return"true"===e||"1"===e||"false"!==e&&"0"!==e&&void 0}})(a);void 0!==i&&(e[t]=i)};u(t.flags)&&Object.entries(t.flags).forEach(([t,e])=>{a(t,e)}),u(t.configurations)&&Object.entries(t.configurations).forEach(([t,e])=>{a(t,e)}),Object.entries(t).forEach(([t,e])=>{"flags"!==t&&"premium"!==t&&"configurations"!==t&&(u(e)&&Object.prototype.hasOwnProperty.call(e,"enabled")?a(t,e.enabled):a(t,e))});const i={};Object.entries(e).forEach(([t,e])=>{const a=function(t){const e=t.includes("_")?c(t):t,a=w[e];if(a)return a;const i=e.startsWith("activate")&&e.length>8?`${e.charAt(8).toLowerCase()}${e.slice(9)}`:e;return i.endsWith("Enabled")||i.endsWith("Disabled")||i.endsWith("Hidden")||i.endsWith("Removed")?i:`${i}Enabled`}(t);P.has(a)||(i[a]=e)});const r={...i};return u(t.premium)&&(r.premium=t.premium),r}function C(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t},a=t=>"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0;return{enabled:a(e.enabled)??!1,useWithDiscount:a(e.useWithDiscount)??!1,minAmount:(t=>{if("number"==typeof t&&Number.isFinite(t))return t;const e=Number(t);return Number.isFinite(e)?e:void 0})(e.minAmount??e.walletMinAmount)??0,minAmountRequired:a(e.minAmountRequired??e.walletMinStatus)??!1}}function S(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t};let a=!1;return"boolean"==typeof e.enabled?a=e.enabled:1!==e.enabled&&"1"!==e.enabled&&"true"!==e.enabled||(a=!0),{enabled:a}}function T(t){const e=h(t);if(!u(e))return{};const a=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=W(t),a=K(t.productVariantId??e.variantId)??e.variantId;return{id:Q(t.id??t.cartProductId)??"",createdAt:Y(t.createdAt),updatedAt:Y(t.updatedAt),productVariantId:a,quantity:K(t.quantity)??0,unitPrice:K(t.unitPrice)??0,lineTotal:K(t.lineTotal)??0,product:e,formAttributes:t.formAttributes,formFields:t.formFields,bookingAttributes:t.bookingAttributes}}(t)):[];return{...e,items:a,netTotal:K(e.netTotal)??0,grossTotal:K(e.grossTotal),needsShipping:Boolean(e.needsShipping),minBasketLimitViolated:Boolean(e.minBasketLimitViolated),deleteCoupon:void 0===e.deleteCoupon?void 0:Boolean(e.deleteCoupon)}}function k(t){const e=h(t);if(!u(e))return{};const a=l(e,["shippingMethod","user","userData"]),i=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=W(t),a=K(t.productVariantId??e.variantId)??e.variantId,i=Array.isArray(e.attributes)?e.attributes:[],r=J(e.hasMaxOrder??t.hasMaxOrder);return{id:Q(t.id??t.invoiceItemId??t.cartProductId)??"",productVariantId:a,productId:K(e.productId??t.productId),name:Y(t.name)??Y(e.name)??"",url:Y(e.url)??Y(t.url),attributes:i,productType:Y(e.productType)??Y(t.productType),hasMaxOrder:r,maxOrderQuantity:K(e.maxOrderQuantity??t.maxOrderQuantity),minOrderQuantity:K(e.minOrderQuantity??t.minOrderQuantity),image:Z(t.image??e.image),quantity:K(t.quantity)??0,unitPrice:K(t.unitPrice)??0,lineTotal:K(t.lineTotal)??0,rawPrice:K(t.rawPrice??t.originalPrice)??0,customerProfit:K(t.customerProfit)??0,commercialFiles:t.commercialFiles,formAttributes:t.formAttributes,bookingAttributes:t.bookingAttributes,formFields:t.formFields}}(t)):[],r=Array.isArray(e.discountUsages)?e.discountUsages:[],n=r[0],s=u(n)&&u(n.discountCode)?Y(n.discountCode.code):void 0;return{...a,items:i,shippingAddress:function(t){if(!t)return;const{id:e,city:a,region:i,...r}=t,n={id:i?.id??a.regionId??0,name:i?.name??"",city:a};return{...r,region:n}}(B(e.shippingAddress)),shippingItems:Array.isArray(e.shippingItems)?e.shippingItems.map(t=>function(t){if(!u(t))return{};const e=u(t.rate)?t.rate:u(t.shippingRate)?t.shippingRate:u(t.shippingMethod)?t.shippingMethod:t;return{invoiceItemIds:L(t),rate:dt(e)}}(t)):[],discountUsages:r,netTotal:K(e.netTotal)??0,finalTotal:K(e.finalTotal)??0,vat:K(e.vat)??0,vatPercent:K(e.vatPercent)??0,itemsDiscount:K(e.itemsDiscount)??0,discountTotal:K(e.discountTotal)??0,customerProfit:K(e.customerProfit)??0,customerProfitPercentage:K(e.customerProfitPercentage)??0,itemsTotalRawPrice:K(e.itemsTotalRawPrice)??0,couponTotal:K(e.couponTotal)??0,shippingTotal:K(e.shippingTotal)??0,creditTotal:K(e.creditTotal)??0,needsShipping:Boolean(e.needsShipping),userComment:"string"==typeof e.userComment?e.userComment:void 0,discountCode:s}}function E(t){const e=h(t);if(!u(e))return{};if(!u(e.invoice))return e;const a=k(e.invoice),{items:i,...r}=a;return{...e,invoice:{...r,invoiceItems:Array.isArray(i)?i:[]}}}function z(t){const e=h(t);if(!u(e))return{};const a=Array.isArray(e.orders)?e.orders.map(t=>E(t)):[],i=K(e.pageNumber??e.page),r=K(e.pageSize),n=K(e.totalCount??e.total)??a.length;return{...l(e,["page","total"]),orders:a,totalCount:n,...void 0!==i?{pageNumber:i}:{},...void 0!==r?{pageSize:r}:{}}}function N(t){const e=function(t){if(!u(t))return{};if(u(t.data)&&u(t.data.result))return t.data.result;return u(t.result)?t.result:t}(t),a=u(e.order)?e.order:e;if(!u(a))return{};const i=u(a.invoice)?a.invoice:{},r=Array.isArray(i.invoice_items)?i.invoice_items.map(D):[],n=Array.isArray(i.shipping_items)?i.shipping_items.map(R):[];return{id:Q(a.id),orderNumber:Q(a.order_number),orderIdentifier:Y(a.order_identifier),invoice:{invoiceItems:r,shippingItems:n,netTotal:K(i.net_total),finalTotal:K(i.final_total),shippingTotal:K(i.shipping_total),discountTotal:K(i.discount_total),creditTotal:K(i.credit_total),vat:K(i.vat),vatPercent:K(i.vat_percent),itemsDiscount:K(i.items_discount),itemsTotalRawPrice:K(i.items_total_raw_price),customerProfit:K(i.customer_profit),customerProfitPercentage:K(i.customer_profit_percentage),discountUsages:Array.isArray(i.discount_usages)?i.discount_usages.map(F):void 0}}}function D(t){if(!u(t))return{};const e=u(t.product_variant)?t.product_variant:{},a=u(e.product)?e.product:{};return{productVariantId:Q(t.product_variant_id??e.id),name:Y(t.name),image:u(t.image)?{url:Y(t.image.url)}:void 0,variantAttributes:Array.isArray(t.variant_attributes)?t.variant_attributes.map(O):[],singleItemPrice:K(t.single_item_price),noOfItems:K(t.no_of_items),totalItemsPrice:K(t.total_items_price),customerProfit:K(t.customer_profit),formAttributes:t.form_attributes,bookingAttributes:t.booking_attributes,productVariant:{commercialFiles:Array.isArray(e.commercial_files)?e.commercial_files.map($):void 0,product:{productType:Y(a.product_type)}}}}function R(t){return u(t)&&u(t.rate)?{id:Q(t.id),invoiceItemIds:Array.isArray(t.invoice_item_ids)?t.invoice_item_ids.map(Q).filter(t=>void 0!==t):[],rate:{id:Q(t.rate.id),name:Y(t.rate.name),price:K(t.rate.price),type:Y(t.rate.type),icon:Y(t.rate.icon),color:Y(t.rate.color)}}:{}}function O(t){return u(t)?{name:Y(t.name),value:Y(t.value)}:{}}function $(t){return u(t)?{id:Q(t.id)}:{}}function F(t){return u(t)&&u(t.discount_code)?{discountCode:{code:Y(t.discount_code.code)}}:{}}function G(t){const e=h(t);if(!u(e))return{};const a=Array.isArray(e.transactions)?e.transactions:Array.isArray(e.walletTransactions)?e.walletTransactions:[],i=K(e.pageNumber??e.page),r=K(e.pageSize),n=K(e.totalCount??e.total);return{...l(e,["page","total","walletTransactions"]),transactions:a,...void 0!==i?{pageNumber:i}:{},...void 0!==r?{pageSize:r}:{},...void 0!==n?{totalCount:n}:{}}}function x(t){return B(t)}function V(t){const e=h(t);if(u(e))return M(e)}function M(t){if(!t)return;const e=function(t){const e=U(t);if(!e)return;if(1===Object.keys(e).length&&u(e.user))return U(e.user)??e.user;return e}(t);if(!e)return;const a={},i=K(e.id);void 0!==i&&(a.id=i);const r=Y(e.email);r&&(a.email=r);const n=Y(e.mobilePhone)??Y(e.phoneNumber);n&&(a.mobilePhone=n);const s=Y(e.phoneNumber);s&&s!==n&&(a.phoneNumber=s);const o=Y(e.firstName);o&&(a.firstName=o);const d=Y(e.lastName);d&&(a.lastName=d);const c=Y(e.birthDate);return c&&(a.birthDate=c),Object.keys(a).length>0?a:void 0}function B(t){if(!t||0===Object.keys(t).length)return;const e=M(t.user),a=U(t.region),i=U(t.city),r=U(i?.region),n=Y(t.regionName)??q(t.region),s=j(a??t.region,{fallbackId:K(t.regionId),fallbackName:n})??j(r,{fallbackId:K(t.regionId),fallbackName:n}),o=K(t.regionId)??s?.id,d=Y(t.cityName)??Y(i?.name)??q(t.city),c=function(t,e={}){if(null==t)return;const a=U(t),i=K(a?.id)??K(t)??e.fallbackId,r=Y(a?.name)??q(t)??e.fallbackName;if(void 0===i||!r)return;const n={id:i,name:r},s=K(a?.regionId)??e.fallbackRegionId;void 0!==s&&(n.regionId=s);const o=K(a?.latitude);void 0!==o&&(n.latitude=o);const d=K(a?.longitude);void 0!==d&&(n.longitude=d);return n}(i??t.city,{fallbackId:K(t.cityId),fallbackName:d,fallbackRegionId:o}),p=Y(t.firstName)??e?.firstName??"",u=Y(t.lastName)??e?.lastName??"",l={id:K(t.id)??0,identifier:Y(t.identifier)??"",firstName:p,lastName:u,city:c??{id:K(t.cityId??t.city)??0,name:d??"",...void 0!==o?{regionId:o}:{}},address:Y(t.address)??""},m=Y(t.mobilePhone)??Y(t.phoneNumber)??e?.mobilePhone??e?.phoneNumber,y=Y(t.phoneNumber)??e?.phoneNumber;m&&(l.mobilePhone=m),y&&y!==m&&(l.phoneNumber=y);const h=Y(t.email)??e?.email;h&&(l.email=h),s&&(l.region=s);const g=Y(t.postalCode);g&&(l.postalCode=g);const f=Y(t.description);f&&(l.description=f);const _=K(t.latitude);void 0!==_&&(l.latitude=_);const v=K(t.longitude);void 0!==v&&(l.longitude=v);const b=J(t.userSetCoordinatesBefore);return void 0!==b&&(l.userSetCoordinatesBefore=b),l}function j(t,e={}){if(null==t)return;const a=U(t),i=K(a?.id)??K(t)??e.fallbackId,r=Y(a?.name)??q(t)??e.fallbackName;return void 0!==i&&r?{id:i,name:r}:void 0}function U(t){if(u(t))return u(t.data)?t.data:t}function q(t){const e=Y(t);if(e)return void 0===K(e)?e:void 0}function L(t){return(Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:void 0!==t.invoiceItemId?[t.invoiceItemId]:[]).map(t=>Q(t)).filter(t=>void 0!==t)}function K(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"!=typeof t)return;const e=Number(t);return Number.isFinite(e)?e:void 0}function Y(t){if("string"!=typeof t)return;const e=t.trim();return e.length>0?e:void 0}function J(t){return"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0}function Q(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"==typeof t){const e=t.trim();return e.length>0?e:void 0}}function W(t){if(!u(t))return{variantId:0,name:"",attributes:[]};const e=u(t.variant)?t.variant:void 0,a=u(e?.product)?e.product:void 0,i=u(t.product)?t.product:void 0,r=K(i?.variantId??e?.id??t.productVariantId??t.variantId)??0,n=Array.isArray(i?.attributes)?i.attributes:Array.isArray(e?.attributes)?e.attributes:Array.isArray(t.attributes)?t.attributes:[];return{variantId:r,productId:K(i?.productId??t.productId??a?.id),name:Y(i?.name)??Y(t.name)??"",url:Y(i?.url)??Y(t.url)??Y(a?.url),image:Z(i?.image??t.image),attributes:n,productType:Y(i?.productType)??Y(t.productType)??Y(a?.productType),hasMaxOrder:i?.hasMaxOrder??t.hasMaxOrder??e?.hasMaxOrder,maxOrderQuantity:K(i?.maxOrderQuantity??t.maxOrderQuantity??e?.maxOrderQuantity),minOrderQuantity:K(i?.minOrderQuantity??t.minOrderQuantity??e?.minOrderQuantity)}}function H(t){if(!u(t))return{};const e=l(t,["staticUrl","summary","tags","slug"]);return e.variants&&Array.isArray(e.variants)&&(e.variants=e.variants.map(t=>u(t)?l(t,["name","title","product","status","soldCount"]):{})),e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(t=>u(t)?{id:t.id,name:t.name,url:t.url}:{})),e.images&&Array.isArray(e.images)&&(e.images=e.images.map(t=>Z(t)??{})),e}function Z(t){return u(t)?l(t,["widthRatio","heightRatio","thumb","order"]):t}function X(t){const e=H(t);return e?l(e,["themeConfig"]):e}function tt(t){const e=h(t);if(e.items&&Array.isArray(e.items)){const t=K(e.total)??e.items.length,a=K(e.pageSize)??e.items.length,i=K(e.page)??1,r=K(e.totalPages)??Math.ceil(t/a);return{items:e.items.map(t=>X(t)),total:t,page:i,pageSize:a,totalPages:r}}return e}function et(t){if(!u(t))return{products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};const e=t,a={products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};return Array.isArray(e.items)&&(a.products.items=e.items.map(t=>X(t)),a.products.total=K(e.productsCount)??0,a.products.page=K(e.productsPageNumber)??1,a.products.pageSize=K(e.productsPageSize)??20),Array.isArray(e.blogPages)&&(a.blogPages.items=e.blogPages.map(t=>lt(t)),a.blogPages.total=K(e.blogPagesCount)??0,a.blogPages.page=K(e.blogPagesPageNumber)??1,a.blogPages.pageSize=K(e.blogPagesPageSize)??20),Array.isArray(e.cmsPages)&&(a.cmsPages.items=e.cmsPages.map(t=>lt(t)),a.cmsPages.total=K(e.cmsPagesCount)??0,a.cmsPages.page=K(e.cmsPagesPageNumber)??1,a.cmsPages.pageSize=K(e.cmsPagesPageSize)??20),Array.isArray(e.categories)&&(a.productCategories.items=e.categories.map(t=>pt(t)),a.productCategories.total=K(e.productCategoriesCount)??0,a.productCategories.page=K(e.productCategoriesPageNumber)??1,a.productCategories.pageSize=K(e.productCategoriesPageSize)??20),a}function at(t){if(u(t)){const e={...t};return delete e.user,{shipping_address:y(e)}}return{shipping_address:y(t)}}function it(t,e,a){const i={product_variants:[{id:t,count:e}]};return a&&(i.form_attributes=y(a)),i}function rt(t){if(!u(t))return{product_variants:[]};const e=t.variants||t.productVariants||[],a={product_variants:Array.isArray(e)?e.map(t=>u(t)?{id:t.id||t.variantId,count:t.count||t.quantity,form_attributes:t.formAttributes?y(t.formAttributes):void 0}:{}):[]};return t.coupon&&(a.coupon=t.coupon),a}function nt(t){const e=h(t);if(!u(e))return[];return(Array.isArray(e.paymentTypes)?e.paymentTypes:Array.isArray(e.methods)?e.methods:[]).map(t=>u(t)?{id:K(t.id)??0,code:t.code,title:"string"==typeof t.title?t.title:"",titleFa:"string"==typeof t.titleFa?t.titleFa:"",description:"string"==typeof t.description?t.description:null,paymentSubType:K(t.paymentSubType)??null,order:K(t.order)??0,isDefault:Boolean(t.isDefault)}:{id:0,code:"",title:"",titleFa:"",description:null,paymentSubType:null,order:0,isDefault:!1})}function st(t){const e=h(t);return(Array.isArray(e)?e:u(e)&&Array.isArray(e.shippingMethods)?e.shippingMethods:[]).map(t=>function(t){if(!u(t))return{id:0,name:"",type:""};return{id:K(t.id)??0,name:Y(t.name)??"",type:Y(t.type)??""}}(t))}function ot(t){const e=h(t);if(!u(e))return{shippingMethods:[],groupedShippingRates:{},itemsShippingRate:[]};const a={};if(Array.isArray(e.shippingMethods)&&e.shippingMethods.forEach((t,e)=>{if(!u(t))return;const i=Array.isArray(t.shippingRate)?t.shippingRate.map(t=>dt(t)):[];if(0===i.length)return;const r=Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:[],n=r.length>0?r.map(String).sort().join(","):String(e);a[n]=i}),0===Object.keys(a).length&&u(e.groupedShippingRates))for(const[t,i]of Object.entries(e.groupedShippingRates))a[t]=Array.isArray(i)?i.map(t=>dt(t)):[];return{shippingMethods:[],groupedShippingRates:a,itemsShippingRate:Array.isArray(e.itemsShippingRate)?e.itemsShippingRate.map(t=>u(t)?{invoiceItemId:Q(t.invoiceItemId)??L(t)[0]??"",shippingRate:dt(t.shippingRate??t.rate??t)}:{invoiceItemId:"",shippingRate:dt(void 0)}):[]}}function dt(t){return u(t)?{id:K(t.id??t.rateId)??0,name:Y(t.name)??"",price:K(t.price??t.amount)??0,description:Y(t.description??t.deliveryDescription??t.details),icon:Y(t.icon??t.iconUrl??t.logo),color:Y(t.color??t.bgColor??t.backgroundColor??t.iconColor),type:Y(t.type)}:{id:0,name:"",price:0}}function ct(t){return u(t)?l(t,["staticUrl","products","items"]):{}}function pt(t){const e=ct(t);return e?l(e,["themeConfig"]):{}}function ut(t){return u(t)?l(t,["staticUrl","urlKey"]):{}}function lt(t){const e=ut(t);return e?l(e,["themeConfig"]):{}}function mt(t){const e=h(t);if(!e||!e.route)return e??{};const a=u(e.route)?e.route:{};if(a.entity){switch(a.entityType){case"product":a.entity=H(a.entity);break;case"product_category":a.entity=ct(a.entity);break;case"cms_page":case"blog_page":a.entity=ut(a.entity)}u(a.entity)&&(a.entity=l(a.entity,["id"])),!a.url&&u(a.entity)&&a.entity.url&&(a.url=a.entity.url)}return a}function yt(t){if(!u(t))return{};const e={...t};return e.entity&&(e.entity=pt(e.entity),u(e.entity)&&(e.entity=l(e.entity,["id"]))),e.children&&Array.isArray(e.children)&&(e.children=e.children.map(yt)),e}function ht(t){const e=h(t);return e?e.cmsPages&&Array.isArray(e.cmsPages)?{items:e.cmsPages.map(lt),total:e.total||e.cmsPages.length,page:e.page||e.pageNumber||1,pageSize:e.pageSize||e.cmsPages.length}:e.items&&Array.isArray(e.items)?{items:e.items.map(t=>lt(t)),total:e.total||e.items.length,page:e.page||1,pageSize:e.pageSize||e.items.length}:e:{}}function gt(t){if(!u(t))return{};const e={};if(void 0!==t.page&&(e.page_number=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),t.cmsPageTypes){const a=Array.isArray(t.cmsPageTypes)?t.cmsPageTypes[0]:t.cmsPageTypes;e["filters[]"]=JSON.stringify({name:"cms_page_types",value:a})}return e}function ft(t){if(!u(t))return{};const e={};if(t.entityType&&(e.entityType=t.entityType),void 0!==t.entityId&&(e.entityId=t.entityId),u(t.entity)){const a=l(t.entity,["staticUrl","id"]);Object.keys(a).length>0&&(e.entity=a)}return t.details&&(e.details=t.details),t.children&&Array.isArray(t.children)&&(e.children=t.children.map(t=>ft(t))),e}function _t(t){const e=h(t);if(!e||!e.tree)return e??{};const a=u(e.tree)?e.tree:{};return u(a.treeStructure)&&Array.isArray(a.treeStructure.nodes)&&(a.treeStructure.nodes=a.treeStructure.nodes.map(t=>ft(t))),e}class vt{constructor(t){this.config=t,this.baseUrl=t.apiBaseUrl.replace(/\/$/,""),this.domain=t.domain,this.tokenStorage=new a,this.cache=new i,this.fetchApi=t.customFetchApi.bind(globalThis)}async get(t,e){const a=e?.params?y(e.params):void 0,r=this.buildUrl(t,a),n=i.generateKey("GET",r,a);if(!1!==e?.cache){const e=this.getApiName(t),a=this.config.cache[e];if(a?.enabled&&a.ttl){const e=this.cache.get(n,a.ttl);if(e)return this.config.debug&&console.log("[Sazito SDK] Cache hit:",t),{data:e}}}const s=await this.request("GET",r,e);return s.data&&!1!==e?.cache&&this.cache.set(n,s.data),s}async post(t,e,a){const i=this.buildUrl(t),r=this.isMultipartBody(e),n=this.isFormUrlEncodedBody(e),s=r||n,o=e?s||a?.skipRequestTransform?e:y(e):void 0,d=this.getApiName(t);return this.cache.deletePattern(`GET:.*${d}`),this.request("POST",i,{...a,body:o,rawBody:s,omitJsonContentType:r})}async put(t,e,a){const i=this.buildUrl(t),r=this.isMultipartBody(e),n=e?r?e:y(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("PUT",i,{...a,body:n,rawBody:r,omitJsonContentType:r})}async delete(t,e){const a=this.buildUrl(t),i=this.getApiName(t);return this.cache.deletePattern(`GET:.*${i}`),this.request("DELETE",a,e)}async request(t,e,a,i=0){const r=new AbortController,n=a?.signal||r.signal,s=a?.timeout||this.config.timeout,o=setTimeout(()=>r.abort(),s);try{const r=await this.fetchApi(e,{method:t,headers:this.getHeaders(a?.headers,a?.omitJsonContentType),body:a?.body?a.rawBody?a.body:JSON.stringify(a.body):void 0,signal:n});clearTimeout(o);const s=void 0!==a?.retries?a.retries:this.config.retry.retries;if(!r.ok&&this.shouldRetry(r.status)&&i<s)return this.config.debug&&console.log(`[Sazito SDK] Retrying request (${i+1}/${s}):`,e),await this.delay(this.config.retry.retryDelay*(i+1)),this.request(t,e,a,i+1);const d=await this.parseResponseBody(r);if(a?.skipTransform&&r.ok)return{data:d};const c=void 0!==d?.result?d.result:d;this.config.debug&&console.log(`[Sazito SDK] ${t} ${e}:`,this.redactDebugValue({status:r.status,data:c}));let p=c?m(c):c;const u=["cart","product","user","order","invoice","payment","shippingAddress"];if(p&&"object"==typeof p&&!Array.isArray(p)){const t=Object.keys(p);1===t.length&&u.includes(t[0])&&"object"==typeof p[t[0]]&&null!==p[t[0]]&&(p=p[t[0]])}return r.ok?{data:p}:{error:{status:r.status,message:this.extractErrorMessage(p,r.statusText),type:"api",details:p}}}catch(t){return clearTimeout(o),this.config.debug&&console.error("[Sazito SDK] Request failed:",t),{error:{message:"AbortError"===t?.name?"Request timeout":t?.message||"Network error",type:"network",details:this.serializeErrorDetails(t)}}}}async parseResponseBody(t){const e=await t.text();if(!e)return;const a=t.headers.get("content-type");if(!a?.includes("application/json"))return e;try{return JSON.parse(e)}catch{return e}}extractErrorMessage(t,e){const a=t=>{if("string"==typeof t)return t.trim()||void 0;if(Array.isArray(t))for(const e of t){const t=a(e);if(t)return t}else if(t&&"object"==typeof t)for(const e of["message","error","errors","detail","title"]){const i=a(t[e]);if(i)return i}};return a(t)||e||"Request failed"}serializeErrorDetails(t){return{name:"string"==typeof t?.name?t.name:"Error",message:"string"==typeof t?.message?t.message:String(t)}}redactDebugValue(t,e=""){if(/authorization|cookie|password|secret|token|identifier|tracking|mobile|phone|email|postal|address|first.?name|last.?name|receipt.?ref|ref.?id/i.test(e)){if(null==t||""===t)return t;const e=String(t);return e.length<=4?"[REDACTED]":`[REDACTED:${e.slice(-4)}]`}return Array.isArray(t)?t.map(t=>this.redactDebugValue(t)):t&&"object"==typeof t?Object.fromEntries(Object.entries(t).map(([t,e])=>[t,this.redactDebugValue(e,t)])):t}buildUrl(t,e){const a=`${this.baseUrl}${t}`;if(!e||0===Object.keys(e).length)return a;const i=new URLSearchParams;return Object.entries(e).forEach(([t,e])=>{null!=e&&i.append(t,String(e))}),`${a}?${i.toString()}`}getHeaders(t,e=!1){const a={"x-forwarded-host":this.domain,...t};e?delete a["Content-Type"]:a["Content-Type"]=a["Content-Type"]||"application/json";const i=this.tokenStorage.get();return i&&(a.Authorization=i),a}isMultipartBody(t){return"undefined"!=typeof FormData&&t instanceof FormData}isFormUrlEncodedBody(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams}shouldRetry(t){return t>=500&&t<600}delay(t){return new Promise(e=>setTimeout(e,t))}getApiName(t){return t.includes("/products")?"products":t.includes("/product_categories")?"categories":t.includes("/cart")?"cart":t.includes("/orders")?"orders":t.includes("/search")?"search":t.includes("/tags")?"tags":t.includes("/entity_route")?"entityRoutes":"cms"}getTokenStorage(){return this.tokenStorage}isDebugEnabled(){return this.config.debug}clearCache(){this.cache.clear()}}class bt{constructor(){this.data=new Map}getItem(t){return this.data.get(t)??null}setItem(t,e){this.data.set(t,e)}removeItem(t){this.data.delete(t)}}class wt{constructor(t){this.CART_KEY="CART_CREDENTIALS",this.INVOICE_KEY="INVOICE_CREDENTIALS",this.SHIPPING_KEY="SHIPPING_ADDRESS_CREDENTIALS",this.PAYMENT_KEY="PAYMENT_CREDENTIALS",this.DISCOUNT_KEY="DISCOUNT_CODE_INFO",this.storage=t??("undefined"!=typeof window&&"undefined"!=typeof localStorage&&"function"==typeof localStorage.getItem?localStorage:new bt)}getCartCredentials(){const t=this.getItem(this.CART_KEY),e=t?.identifier?.trim();return e?{identifier:e}:null}setCartCredentials(t){const e=t.identifier.trim();if(!e)throw new Error("Cart identifier is required.");this.setItem(this.CART_KEY,{identifier:e})}clearCartCredentials(){this.removeItem(this.CART_KEY)}getInvoiceCredentials(){return this.getItem(this.INVOICE_KEY)}setInvoiceCredentials(t){this.setItem(this.INVOICE_KEY,t)}clearInvoiceCredentials(){this.removeItem(this.INVOICE_KEY)}getShippingCredentials(){return this.getItem(this.SHIPPING_KEY)}setShippingCredentials(t){this.setItem(this.SHIPPING_KEY,t)}clearShippingCredentials(){this.removeItem(this.SHIPPING_KEY)}getPaymentCredentials(){return this.getItem(this.PAYMENT_KEY)}setPaymentCredentials(t){this.setItem(this.PAYMENT_KEY,t)}clearPaymentCredentials(){this.removeItem(this.PAYMENT_KEY)}getDiscountCode(){return this.getItem(this.DISCOUNT_KEY)}setDiscountCode(t){this.setItem(this.DISCOUNT_KEY,t)}clearDiscountCode(){this.removeItem(this.DISCOUNT_KEY)}clearAll(){this.clearCartCredentials(),this.clearInvoiceCredentials(),this.clearShippingCredentials(),this.clearPaymentCredentials(),this.clearDiscountCode()}getItem(t){try{const e=this.storage.getItem(t);return e?JSON.parse(e):null}catch{return null}}setItem(t,e){try{this.storage.setItem(t,JSON.stringify(e))}catch{}}removeItem(t){try{this.storage.removeItem(t)}catch{}}}const At="/api/v1/product_categories",Pt="/api/v1/search",It="/api/v2/carts",Ct="/api/v2/invoices",St="/api/v2/shipping_addresses",Tt="/api/v1/pinch",kt="/api/v1/orders",Et="/api/v1/users",zt="/api/v1/sessions",Nt="/api/v1/feedbacks",Dt="/api/v1/cms_pages",Rt="/api/v1/images",Ot="/api/v1/scheduler/events",$t="/api/v1/scheduler/bookings",Ft="/api/v1/entity_route/route",Gt="/api/v1/feedbacks/comments/details";class xt{constructor(t){this.http=t}mapSortToApi(t){if(!t)return null;return{newest:{sort:"date"},"best-selling":{sort:"sold"},availability:{sort:"stock_status"},discount:{sort:"raw_price"},"!price":{sort:"price",sortOrder:"asc"},price:{sort:"price"}}[t]||null}transformFilters(t){if(!t)return{};const e={},a=[];if(t.categories){const e=Array.isArray(t.categories)?t.categories:[t.categories];e.length>0&&a.push({name:"product_categories",value:e.join(",")})}if(!1===t.availableOnly&&a.push({name:"in_stock"}),t.discountedOnly&&a.push({name:"has_raw_price",value:!0}),t.similarTo&&a.push({name:"similar_to",value:{entity_name:"product",entity_id:t.similarTo}}),a.length>0&&(e["filters[]"]=JSON.stringify(a)),t.pinnedIds&&t.pinnedIds.length>0&&(e.pinned_ids=JSON.stringify(t.pinnedIds)),t.sort){const a=this.mapSortToApi(t.sort);a&&(e.sort=a.sort,a.sortOrder&&(e.sort_order=a.sortOrder))}return void 0!==t.priceMin&&(e.min_price=t.priceMin),void 0!==t.priceMax&&(e.max_price=t.priceMax),t.page&&(e.page=t.page),t.pageSize&&(e.page_size=t.pageSize),e}async get(t,e){const a=t.startsWith("/product/")?t:`/product/${t}`,i=await this.http.get(Ft,{...e,params:{url_part:a}});if(i.data){const t=mt(i.data);return"product"===t.entityType&&t.entity?{data:t.entity}:"unknown"===t.entityType?{error:{message:"Product not found",type:"api",status:404}}:{error:{message:`Invalid entity type: expected 'product', got '${t.entityType}'`,type:"api",status:400}}}return i.error?{error:i.error}:{error:{message:"No data returned from product endpoint",type:"api"}}}async list(t,e){const a=this.transformFilters(t),i=await this.http.get("/api/v1/products",{...e,params:a});if(i.data){return{data:tt(i.data)}}return i}async search(t,e,a){const i={query:t,search_direction:"center",page_size:e?.pageSize||20,page_number:e?.page||1},r=await this.http.get(Pt,{...a,params:i});if(r.data){return{data:et(r.data)}}return r}}class Vt{constructor(t){this.http=t}async get(t,e){const a=await this.http.get(`${At}/${t}`,e);if(a.data){const t=function(t){const e=h(t);return e?ct(e.productCategory||e):{}}(a.data);return{data:t}}return a}async list(t,e){const a={};void 0!==t?.page&&(a.page_number=t.page),void 0!==t?.pageSize&&(a.page_size=t.pageSize);const i=await this.http.get(At,{...e,params:a});if(i.data){const t=function(t){const e=h(t);return e?(e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(pt)),u(e.tree)&&u(e.tree.treeStructure)&&Array.isArray(e.tree.treeStructure.nodes)&&(e.tree.treeStructure.nodes=e.tree.treeStructure.nodes.map(yt)),e):{}}(i.data);return{data:t}}return i}}class Mt{constructor(t,e){this.http=t,this.credentials=e}persistCartCredentials(t){this.credentials.setCartCredentials({identifier:t.identifier})}async get(t){const e=this.credentials.getCartCredentials();if(!e)return{error:{message:"No cart found. Please create a cart first.",type:"validation"}};const a=await this.http.get(`${It}/0`,{...t,params:{identifier:e.identifier}});return a.data?{data:T(a.data)}:(a.error&&this.clearCart(),a)}async create(t,e){const a=await this.http.post(It,t,e);if(!a.data)return a;const i=T(a.data);return this.persistCartCredentials(i),{data:i}}async addItem(t,e,a,i){return this.addItemWithAttributes(t,e,{formAttributes:a},i)}async addItemWithAttributes(t,e,a,i){const r=this.credentials.getCartCredentials();if(!r)return this.create({variants:[{id:t,count:e,formAttributes:a?.formAttributes}],schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},i);const n=await this.http.post(`${It}/0/add_products_to_cart`,{identifier:r.identifier,variants:[{id:t,count:e}],formAttributes:a?.formAttributes,schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},i);if(n.data){const t=T(n.data);return this.persistCartCredentials(t),{data:t}}return 422===n.error?.status&&this.clearCart(),n}async updateItem(t,e,a,i,r){return this.updateItemWithAttributes(t,e,a,{formAttributes:i},r)}async updateItemWithAttributes(t,e,a,i,r){const n=this.credentials.getCartCredentials();if(!n)return{error:{message:"No cart found",type:"validation"}};const s=await this.http.post(`${It}/0/update_products_in_cart`,{identifier:n.identifier,cartProductId:String(t),variants:[{id:e,count:a}],formAttributes:i?.formAttributes,coupon:i?.coupon,deleteCoupon:i?.deleteCoupon},r);if(s.data){const t=T(s.data);return this.persistCartCredentials(t),{data:t}}return s}async removeItem(t,e,a){const i=this.credentials.getCartCredentials();if(!i)return{error:{message:"No cart found",type:"validation"}};const r=await this.http.post(`${It}/0/remove_products_from_cart`,{identifier:i.identifier,cartProductId:String(t),variants:[{id:e}]},a);if(r.data){const t=T(r.data);return this.persistCartCredentials(t),{data:t}}return r}clearCart(){this.credentials.clearCartCredentials()}}class Bt{constructor(t){this.http=t}async list(t,e){const a={pageNumber:t?.pageNumber??1,pageSize:t?.pageSize??20};t?.filters&&t.filters.length>0&&(a.filters=JSON.stringify(t.filters));const i=await this.http.get(kt,{...e,params:a});return i.data?{data:z(i.data)}:i}async get(t,e){const a=await this.http.get(`${kt}/${t}`,e);return a.data?{data:E(a.data)}:a}}class jt{constructor(t,e){this.http=t,this.credentials=e}normalizeInvoiceResponse(t){return t.data?{data:k(t.data)}:(423===t.error?.status&&this.credentials.clearInvoiceCredentials(),t)}async get(t){const e=this.credentials.getCartCredentials(),a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found. Please create an invoice first.",type:"validation"}};if(!e)return{error:{message:"No cart found. Please create or restore cart credentials first.",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(i)}async create(t){const e=this.credentials.getCartCredentials();if(!e)return{error:{message:"No cart found. Please create a cart first.",type:"validation"}};const a=await this.http.post(Ct,{cart_id:String(0),cart_identifier:e.identifier},t);if(a.data){const t=k(a.data);return this.credentials.setInvoiceCredentials({id:t.id,identifier:t.identifier}),{data:t}}return a}async refresh(t){const e=this.credentials.getCartCredentials(),a=this.credentials.getInvoiceCredentials();if(!e||!a)return{error:{message:"No cart or invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(i)}async addShippingAddress(t,e,a){const i=this.credentials.getCartCredentials(),r=this.credentials.getInvoiceCredentials();if(!i||!r)return{error:{message:"No cart or invoice found",type:"validation"}};const n=await this.http.post(`${Ct}/${r.id}/add_shipping_address`,{identifier:r.identifier,shipping_address_identifier:e,cart_id:0,cart_identifier:i.identifier,...t>0?{shipping_address_id:t}:{}},a);return this.normalizeInvoiceResponse(n)}async addDiscountCode(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/add_discount_code`,{identifier:a.identifier,discount_code:t.toUpperCase()},e);return i.data?(this.credentials.setDiscountCode(t.toUpperCase()),{data:k(i.data)}):i}async assignShippingMethod(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=t.map(t=>({...t,invoiceItemIds:t.invoiceItemIds.map(t=>String(t))})),r=await this.http.post(`${Ct}/${a.id}/add_shipping_method`,{identifier:a.identifier,shippings:i},e);return this.normalizeInvoiceResponse(r)}async addDetails(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/add_invoice_details`,{identifier:a.identifier,user_comment:t},e);return this.normalizeInvoiceResponse(i)}async addForm(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const i=await this.http.post(`${Ct}/${a.id}/add_form`,{invoiceIdentifier:t.invoiceIdentifier||t.identifier||a.identifier,formAttributes:t.formAttributes},e);return this.normalizeInvoiceResponse(i)}async addCredit(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${Ct}/${e.id}/add_credit`,{identifier:e.identifier},t);return this.normalizeInvoiceResponse(a)}async removeCredit(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${Ct}/${e.id}/remove_credit`,{identifier:e.identifier},t);return this.normalizeInvoiceResponse(a)}async toggleCredit(t){const e=await this.get(t);return e.data?e.data.creditTotal>0?this.removeCredit(t):this.addCredit(t):e}async getApplicableShippingMethods(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.get(`${Ct}/${e.id}/applicable_shipping_methods`,{...t,cache:t?.cache??!1,params:{identifier:e.identifier}});return a.data?{data:ot(a.data)}:a}clearInvoice(){this.credentials.clearInvoiceCredentials()}}class Ut{constructor(t,e){this.http=t,this.credentials=e}sanitizeAddressInput(t){const e={...t};return delete e.user,e}unwrapAddressPayload(t){let e=t;const a=new Set;for(;e&&"object"==typeof e&&!Array.isArray(e)&&!a.has(e);){a.add(e);const t=e,i=t.shippingAddress??t.shipping_address??t.data;if(void 0===i)break;e=i}return e}extractAddressList(t){if(Array.isArray(t))return t;if(!t||"object"!=typeof t)return[];const e=t,a=[e.shippingAddresses,e.addresses,e.items,e.data];for(const t of a)if(Array.isArray(t))return t;return[]}async createAddress(t,e){const a=this.sanitizeAddressInput(t),i=await this.http.post(St,{shipping_address:a},e);if(i.data){const t=x(this.unwrapAddressPayload(i.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):i}return i}async updateAddress(t,e){const a=this.credentials.getShippingCredentials();if(!a)return this.createAddress(t,e);const i=this.sanitizeAddressInput(t),r=await this.http.post(St,{identifier:a.identifier,shipping_address:i},e);if(r.data){const t=x(this.unwrapAddressPayload(r.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):r}return r}async listAddresses(t){const e=await this.http.get(St,{...t,cache:t?.cache??!1});if(e.error)return{error:e.error};return{data:this.extractAddressList(e.data).map(t=>x(this.unwrapAddressPayload(t))).filter(t=>Boolean(t?.identifier)).sort((t,e)=>e.id-t.id)}}async getAddress(t){const e=this.credentials.getShippingCredentials();if(!e)return{error:{message:"No shipping address found",type:"validation"}};const a=await this.http.get(`${St}/${e.id}`,{...t,params:{identifier:e.identifier}});if(a.data){const t=x(this.unwrapAddressPayload(a.data));return t?{data:t}:a}return a}async getMethods(t){const e=await this.http.get("/api/v2/shipping_methods",t);return e.data?{data:st(e.data)}:e.error?{error:e.error}:{data:[]}}clearAddress(){this.credentials.clearShippingCredentials()}}class qt{constructor(t,e,a="/api/v2/payments"){this.http=t,this.credentials=e,this.paymentsBasePath=a,this.pinchedPayments=new Set,this.verificationTraceSequence=0}async getMethods(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${this.paymentsBasePath}/list`,{invoice_identifier:e.identifier},t);return a.data?{data:nt(a.data)}:a.error?{error:a.error}:{data:[]}}async create(t,e){const a=this.nextVerificationTraceId("create");if(!Number.isInteger(t)||t<=0)return{error:{message:"Invalid paymentTypeId. Provide a positive integer from payments.getMethods().",type:"validation"}};const i=this.credentials.getInvoiceCredentials();if(!i)return this.logVerification(a,"validation_failed",{reason:"No invoice found"}),{error:{message:"No invoice found",type:"validation"}};const r=await this.http.post(this.paymentsBasePath,{invoice_id:i.id,invoice_identifier:i.identifier,payment_type:t},{...e,skipTransform:!0});if(this.logVerification(a,"create_response_received",r),r.error)return{error:r.error};if(r.data){const t=r.data,e=this.extractPaymentPayload(t);if(e&&"object"==typeof e){const t=String(e.payment_identifier??e.paymentIdentifier??e.identifier??"").trim(),i=Number(e.id??0),r=e.payment_type??e.paymentType;if(null===this.normalizePaymentId(i)||!t.trim())return this.logVerification(a,"create_response_invalid",{candidateKeys:Object.keys(e),paymentId:i,hasPaymentIdentifier:Boolean(t.trim())}),{error:{message:"Payment creation response is missing a valid payment ID or identifier.",type:"api"}};const n={id:i,identifier:t,amount:Number(e.payment_amount??e.paymentAmount??e.amount??0),paymentType:{id:null!=r?.id?Number(r.id):void 0,code:r?.reference_code??r?.referenceCode??r?.code??""}};return t&&this.credentials.setPaymentCredentials({id:i,identifier:t}),{data:n}}}return this.logVerification(a,"create_response_invalid",{reason:"No payment object found",responseData:r.data}),{error:{message:"Payment creation response is missing a valid payment ID or identifier.",type:"api"}}}async initialize(t){return this.submitJsonPaymentStep(void 0,t)}async verify(t,e){if(!t)return this.getPaymentStep(e);const a=this.resolvePaymentCredentials(t.id,t.paymentIdentifier);return"error"in a?{error:a.error}:this.verifyPaymentCallback({paymentId:a.data.id,paymentIdentifier:a.data.identifier,body:this.paymentStepInputToCallbackFields(t)},e)}async verifyPaymentCallback(t,e){const a=this.nextVerificationTraceId("callback"),i=this.normalizePaymentId(t.paymentId),r=t.paymentIdentifier?.trim();if(this.logVerification(a,"started",{paymentId:t.paymentId,paymentIdentifier:r,body:t.body,query:t.query,callbackFieldNames:Object.keys({...t.body??{},...t.query??{}})}),null===i||!r)return this.logVerification(a,"validation_failed",{reason:"Invalid payment callback credentials",normalizedPaymentId:i,hasPaymentIdentifier:Boolean(r)}),{error:{message:"Invalid payment callback credentials.",type:"validation"}};const n=new URLSearchParams,s={...t.body??{},...t.query??{}};for(const[t,e]of Object.entries(s))this.appendCallbackValue(n,`payload[${t}]`,e);n.set("payment_identifier",r);const o=`${this.paymentsBasePath}/${encodeURIComponent(String(i))}/process_payment_step`;this.logVerification(a,"request_prepared",{method:"POST",endpoint:o,contentType:"application/x-www-form-urlencoded;charset=UTF-8",form:Object.fromEntries(n.entries())});const d=await this.http.post(o,n,{...e,headers:this.withContentType(e?.headers,"application/x-www-form-urlencoded;charset=UTF-8"),skipTransform:!0});return this.logVerification(a,"response_received",d),this.finalizeStepResponse(d,i,e,a)}async getPaymentStep(t){return this.submitJsonPaymentStep(void 0,t)}async processStep(t,e){return this.submitJsonPaymentStep(t,e)}async submitJsonPaymentStep(t,e){const a=this.nextVerificationTraceId("status"),i=this.resolvePaymentCredentials(t?.id,t?.paymentIdentifier);if("error"in i)return this.logVerification(a,"validation_failed",i),{error:i.error};const r=i.data,n=`${this.paymentsBasePath}/${r.id}/process_payment_step`;this.logVerification(a,"request_prepared",{method:"POST",endpoint:n,contentType:"application/json",credentialSource:null!=t?.id||null!=t?.paymentIdentifier?"input":"storage",paymentId:r.id});const s=await this.http.post(n,this.buildProcessStepBody(t,r.identifier),{...this.withExactJsonHeader(e),skipRequestTransform:!0});return this.logVerification(a,"response_received",s),this.finalizeStepResponse(s,r.id,e,a)}async processStepForm(t,e){const a=this.resolvePaymentCredentials();if("error"in a)return{error:a.error};const i=a.data,r=this.buildProcessStepFormData(t,i.identifier);if(!r)return{error:{message:"FormData is not available in this runtime.",type:"validation"}};const n=await this.http.post(`${this.paymentsBasePath}/${i.id}/process_payment_step`,r,{...e,skipTransform:!0});return this.finalizeStepResponse(n,i.id,e)}async pollUntilSettled(t,e=15e3){const a=this.nextVerificationTraceId("poll"),i=t?.intervalMs??e,r=t?.pollingTimeoutMs??3e5,n=t?.maxAttempts,s=Date.now();let o,d=0;if(this.logVerification(a,"poll_started",{intervalMs:i,pollingTimeoutMs:r,maxAttempts:n,immediate:t?.immediate??!1,signalAborted:t?.signal?.aborted??!1}),!Number.isFinite(i)||i<0||!Number.isFinite(r)||r<=0||void 0!==n&&(!Number.isInteger(n)||n<=0)){const t={error:{message:"Invalid payment polling options.",type:"validation"}};return this.logVerification(a,"poll_validation_failed",t),t}for(;!o;){const e=Date.now()-s;if(e>=r||void 0!==n&&d>=n){const t={error:{message:"Payment verification timed out.",type:"network"}};return this.logVerification(a,"poll_timed_out",{attempt:d,elapsed:e,result:t}),t}if(!t?.immediate||d>0){const n=await this.waitForPoll(Math.min(i,r-e),t?.signal);if(n)return this.logVerification(a,"poll_cancelled",{attempt:d,result:n}),n}if(Date.now()-s>=r){const t={error:{message:"Payment verification timed out.",type:"network"}};return this.logVerification(a,"poll_timed_out",{attempt:d,elapsed:Date.now()-s,result:t}),t}d+=1,this.logVerification(a,"poll_request_started",{attempt:d});const c=await this.getPaymentStep(t);this.logVerification(a,"poll_response_received",{attempt:d,response:c}),c.data&&"pending"===c.data.action||(o=c)}return this.logVerification(a,"poll_settled",{attempts:d,elapsedMs:Date.now()-s,response:o}),o}clearPayment(){this.credentials.clearPaymentCredentials()}withExactJsonHeader(t){const e={...t?.headers||{}};return delete e["Content-Type"],delete e["content-type"],{...t,headers:{...e,"Content-Type":"application/json"},skipTransform:!0}}buildProcessStepFormData(t,e){if("undefined"==typeof FormData)return null;if(t instanceof FormData)return t.has("payment_identifier")||t.append("payment_identifier",e),t;const a=this.buildProcessStepBody(t,e),i=new FormData;return Object.entries(a).forEach(([t,e])=>{this.appendFormValue(i,t,e)}),i.has("payment_identifier")||i.append("payment_identifier",e),i}buildProcessStepBody(t,e){const a={payment_identifier:e};return t?("payload"in t&&void 0!==t.payload&&(a.payload=t.payload),"tatoken"in t&&void 0!==t.tatoken&&(a.tatoken=t.tatoken),"trackingData"in t&&void 0!==t.trackingData&&(a.tracking_data=t.trackingData),"isFailed"in t&&void 0!==t.isFailed&&(a.is_failed=t.isFailed),"imageUrl"in t&&void 0!==t.imageUrl&&(a.image_url=t.imageUrl),"code"in t&&void 0!==t.code&&(a.code=t.code),a):a}appendFormValue(t,e,a){void 0!==a&&(null!==a?Array.isArray(a)?a.forEach(a=>this.appendFormValue(t,e,a)):"object"!=typeof a?t.append(e,String(a)):t.append(e,JSON.stringify(a)):t.append(e,""))}resolvePaymentCredentials(t,e){const a=e?.trim();if(null!=t||null!=e){if(!Number.isSafeInteger(t)||Number(t)<=0||!a)return{error:{message:"Invalid payment callback credentials.",type:"validation"}};const e={id:Number(t),identifier:a};return this.credentials.setPaymentCredentials(e),{data:e}}const i=this.credentials.getPaymentCredentials();if(!i)return{error:{message:"No payment found. Please create a payment first.",type:"validation"}};const r=this.normalizePaymentId(i.id),n="string"==typeof i.identifier?i.identifier.trim():"";return null!==r&&n?{data:{id:r,identifier:n}}:{error:{message:"Stored payment credentials are invalid. Restore the payment ID and identifier from the original gateway return URL.",type:"validation"}}}extractPaymentPayload(t){const e=t=>Boolean(t&&"object"==typeof t&&!Array.isArray(t)),a=[],i=t=>{e(t)&&!a.includes(t)&&(a.push(t),e(t.response)&&i(t.response),e(t.result)&&i(t.result),e(t.payment)&&i(t.payment))};return i(t),a.find(t=>e(t.payment)||void 0!==t.id||void 0!==t.payment_identifier||void 0!==t.paymentIdentifier)?.payment??a.find(t=>void 0!==t.id||void 0!==t.payment_identifier||void 0!==t.paymentIdentifier)}normalizePaymentId(t){const e="string"==typeof t&&t.trim()?Number(t):t;return"number"==typeof e&&Number.isSafeInteger(e)&&e>0?e:null}paymentStepInputToCallbackFields(t){const e={...t.payload??{}};return void 0!==t.tatoken&&(e.tatoken=t.tatoken),void 0!==t.trackingData&&(e.trackingData=t.trackingData),void 0!==t.isFailed&&(e.isFailed=t.isFailed),void 0!==t.imageUrl&&(e.imageUrl=t.imageUrl),void 0!==t.code&&(e.code=t.code),e}appendCallbackValue(t,e,a){void 0!==a&&(Array.isArray(a)?a.forEach(a=>this.appendCallbackValue(t,e,a)):null!==a?t.append(e,"object"==typeof a?JSON.stringify(a):String(a)):t.append(e,""))}withContentType(t,e){const a={...t??{}};return delete a["Content-Type"],delete a["content-type"],{...a,"Content-Type":e}}waitForPoll(t,e){return e?.aborted?Promise.resolve({error:{message:"Payment verification cancelled.",type:"network"}}):new Promise(a=>{const i=()=>{clearTimeout(r),a({error:{message:"Payment verification cancelled.",type:"network"}})},r=setTimeout(()=>{e?.removeEventListener("abort",i),a(null)},t);e?.addEventListener("abort",i,{once:!0})})}async finalizeStepResponse(t,e,a,i){if(!t.data)return this.logVerification(i,"finished_without_data",t),t;const r=t=>!!t&&"object"==typeof t&&!Array.isArray(t);let n=t.data;if("string"==typeof n)try{n=JSON.parse(n)}catch{return this.logVerification(i,"response_parse_failed",{rawResponse:t.data}),{error:{message:"Invalid payment step response",type:"api"}}}const s=n,o=r(s)&&r(s.response)?s.response:s;if(this.logVerification(i,"envelope_unwrapped",{hadProxyResponseWrapper:o!==s,envelope:o}),r(o)){const t="string"==typeof o.error?o.error:"",e=Number(o.error_code??0);if(t||e)return this.logVerification(i,"envelope_error",{error:t,errorCode:e,status:o.status}),{error:{message:t||"Payment step failed",type:"api",status:Number(o.status)||void 0}}}const d=r(o)&&r(o.result)?o.result:o;this.logVerification(i,"action_extracted",d);const c=this.normalizeAction(d);return c?(this.logVerification(i,"action_normalized",c),await this.callPinchAfterSuccessfulPayment(c,e,a,i),this.logVerification(i,"finished",{paymentId:e,action:c.action}),{data:c}):(this.logVerification(i,"action_invalid",{reason:"Missing or malformed payment action fields",actionPayload:d}),{error:{message:"Invalid payment step result",type:"api"}})}normalizeAction(t){const e="string"==typeof t.action?t.action:"",a="string"==typeof t.message?t.message:void 0;switch(e){case"POST":return"string"==typeof t.address&&this.isPostPayload(t.payload)?{action:"POST",address:t.address,payload:t.payload,message:a,raw:t}:null;case"REDIRECT":return"string"==typeof t.address?{action:"REDIRECT",address:t.address,message:a,raw:t}:null;case"UPLOAD":return{action:"UPLOAD",time:this.optionalNumber(t.time),message:a,raw:t};case"show_otp_modal":return{action:"show_otp_modal",time:this.optionalNumber(t.time),message:a,raw:t};case"show_order":case"pending":{if(!t.order||"object"!=typeof t.order||Array.isArray(t.order))return null;const i=N(t.order);return this.isCheckoutOrder(i)?"show_order"===e?{action:"show_order",order:i,message:a,raw:t}:{action:"pending",order:i,message:a,raw:t}:null}case"payment_fail_error":return{action:"payment_fail_error",message:a,raw:t};case"show_error":return{action:"show_error",message:a,raw:t};case"FAIL":return{action:"FAIL",message:a,raw:t};case"StockViolated":return{action:"StockViolated",message:a,raw:t};default:return e?{action:"unknown",backendAction:e,raw:t,message:a}:null}}optionalNumber(t){return"number"==typeof t&&Number.isFinite(t)?t:void 0}isPostPayload(t){return!!t&&"object"==typeof t&&!Array.isArray(t)&&Object.values(t).every(t=>"string"==typeof t||"number"==typeof t)}isCheckoutOrder(t){const e=t=>"number"==typeof t&&Number.isFinite(t)||"string"==typeof t&&t.length>0,a=t.invoice;return e(t.id)&&e(t.orderNumber)&&"string"==typeof t.orderIdentifier&&t.orderIdentifier.length>0&&!!a&&Array.isArray(a.invoiceItems)&&Array.isArray(a.shippingItems)&&(void 0===a.netTotal||"number"==typeof a.netTotal&&Number.isFinite(a.netTotal))&&(void 0===a.finalTotal||"number"==typeof a.finalTotal&&Number.isFinite(a.finalTotal))&&a.invoiceItems.every(t=>e(t.productVariantId)&&"string"==typeof t.name&&Array.isArray(t.variantAttributes)&&t.variantAttributes.every(t=>"string"==typeof t.name&&"string"==typeof t.value)&&"number"==typeof t.singleItemPrice&&Number.isFinite(t.singleItemPrice)&&"number"==typeof t.noOfItems&&Number.isFinite(t.noOfItems)&&"number"==typeof t.totalItemsPrice&&Number.isFinite(t.totalItemsPrice)&&"string"==typeof t.productVariant?.product?.productType)&&a.shippingItems.every(t=>e(t.id)&&Array.isArray(t.invoiceItemIds)&&"string"==typeof t.rate?.name&&"number"==typeof t.rate?.price&&Number.isFinite(t.rate.price))}async callPinchAfterSuccessfulPayment(t,e,a,i){if("show_order"!==t.action)return void this.logVerification(i,"pinch_skipped",{reason:"Payment action is not show_order",action:t.action});if(this.pinchedPayments.has(e))return void this.logVerification(i,"pinch_skipped",{reason:"Payment was already pinched",paymentId:e});this.pinchedPayments.add(e),this.logVerification(i,"pinch_started",{method:"POST",endpoint:`${Tt}/order`,paymentId:e});const r=await this.http.post(`${Tt}/order`,{},a);if(r.error)return this.pinchedPayments.delete(e),void this.logVerification(i,"pinch_failed",r);this.logVerification(i,"pinch_succeeded",r)}nextVerificationTraceId(t){return this.verificationTraceSequence+=1,`${t}-${Date.now()}-${this.verificationTraceSequence}`}logVerification(t,e,a){this.http.isDebugEnabled()&&console.debug(`[Sazito SDK][Payment Verification][${t??"untracked"}] ${e}`,this.redactVerificationLogValue(a))}redactVerificationLogValue(t,e=""){if(/authorization|cookie|password|secret|token|identifier|tracking|mobile|phone|email|postal|address|first.?name|last.?name|receipt.?ref|ref.?id/i.test(e)){if(null==t||""===t)return t;const e=String(t);return e.length<=4?"[REDACTED]":`[REDACTED:${e.slice(-4)}]`}return Array.isArray(t)?t.map(t=>this.redactVerificationLogValue(t)):t&&"object"==typeof t?Object.fromEntries(Object.entries(t).map(([t,e])=>[t,this.redactVerificationLogValue(e,t)])):t}}class Lt{constructor(t){this.http=t}normalizeUserResponse(t){if(!t.data)return t;const e=V(t.data);return e?{data:e}:t}normalizeLoginResponse(t){if(!t.data||!t.data.user)return t;const e=V(t.data.user);return e?{data:{...t.data,user:e}}:t}async login(t,e){const a=await this.http.post(`${zt}/login`,t,e);return this.normalizeLoginResponse(a)}async requestMobileOTP(t,e){return this.http.post(`${zt}/login_request`,t,e)}async verifyMobileOTP(t,e){const a=await this.http.post(`${zt}/login_request_verification`,t,e);return this.normalizeLoginResponse(a)}async requestEmailLogin(t,e){return this.http.post(`${Et}/email_login_request`,t,e)}async register(t,e){const a=await this.http.post(`${Et}/register`,t,e);return this.normalizeUserResponse(a)}async getCurrentUser(t){const e=await this.http.get(`${Et}/current`,t);return this.normalizeUserResponse(e)}async updateProfile(t,e,a){const i=await this.http.put(`${Et}/${t}`,e,a);return this.normalizeUserResponse(i)}async requestMobilePhoneUpdate(t,e){return this.http.post(`${Et}/update_mobile_phone_request`,t,e)}async verifyMobilePhoneUpdate(t,e){const a=await this.http.post(`${Et}/update_mobile_phone_verification`,t,e);return this.normalizeUserResponse(a)}async forgotPassword(t,e){return this.http.post(`${Et}/forgot_password`,t,e)}async revivePassword(t,e){const a=await this.http.post(`${Et}/revive_password`,t,e);return this.normalizeLoginResponse(a)}async mergeUser(t){return this.http.post(`${Et}/merge_user`,{},t)}}class Kt{constructor(t){this.http=t}transformFilters(t){if(!t)return{};const e={};return void 0!==t.page&&(e.page_number=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),void 0!==t.categoryId&&(e.category_id=t.categoryId),void 0!==t.minPrice&&(e.min_price=t.minPrice),void 0!==t.maxPrice&&(e.max_price=t.maxPrice),e}async query(t,e,a){const i=this.transformFilters(e),r=await this.http.get(Pt,{...a,params:{...i,query:t,page_number:i.page_number??1,page_size:i.page_size??20,search_direction:"center"}});if(r.data){return{data:et(r.data)}}return r}}class Yt{constructor(t){this.http=t}normalizeSeedItem(t){return{productId:String(t?.productId??""),productVariantId:String(t?.productVariantId??""),productName:String(t?.productName??t?.name??""),productAttributes:Array.isArray(t?.productAttributes)?t.productAttributes:Array.isArray(t?.attributes)?t.attributes:[],productImage:t?.productImage||t?.image||{url:"",alt:""}}}normalizeSeed(t){const e=Array.isArray(t?.items)?t.items:[];return{orderId:String(t?.orderId??""),orderIdentifier:String(t?.orderIdentifier??""),hasCommentAlready:Boolean(t?.hasCommentAlready),items:e.map(t=>this.normalizeSeedItem(t))}}normalizeProductReview(t){const e=t?.metadata||{};return{...t,metadata:{variantOptions:Array.isArray(e.variantOptions)?e.variantOptions:[],productName:String(e.productName??e.name??""),variantId:String(e.variantId??"")}}}normalizeProductReviewsResponse(t){const e=Array.isArray(t?.entities)?t.entities:[],a=t?.recommendations||{};return{entities:e.map(t=>this.normalizeProductReview(t)),pageNumber:Number(t?.pageNumber??1),pageSize:Number(t?.pageSize??10),totalCount:Number(t?.totalCount??e.length),averageRate:Number(t?.averageRate??0),recommendations:{recommendedPercentage:Number(a.recommendedPercentage??0),recommendedTotalCount:Number(a.recommendedTotalCount??0)}}}transformLegacyFilters(t){if(!t)return{};const e={};return void 0!==t.productId&&(e.product_id=t.productId),void 0!==t.page&&(e.page=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),e}async getSeed(t,e){const a=await this.http.get(`/api/v1/feedbacks/seed/${t}`,e);if(a.data){const t=a.data.seed||a.data.data||a.data;return{data:this.normalizeSeed(t)}}return a}async createOrderRating(t,e){const a=await this.http.post("/api/v1/feedbacks/comments",t,e);if(a.data){const t=a.data.id??a.data.commentId??a.data.comment?.id;return{data:{id:String(t??"")}}}return a}async submitProductReview(t,e){return this.http.post(Gt,t,e)}async getProductStatistics(t,e){const a=await this.http.get(`${Gt}/${t}`,{...e,params:{exclude:"comments"}});if(a.data){return{data:{productStatistics:a.data.productStatistics||a.data.data?.productStatistics||a.data}}}return a}async getProductReviews(t,e,a){const i=await this.http.get(`${Gt}/${t}`,{...a,params:{page_number:e?.pageNumber??1,page_size:e?.pageSize??10}});if(i.data){const t=i.data.data||i.data;return{data:this.normalizeProductReviewsResponse(t)}}return i}async uploadReviewImages(t,e){const a=new FormData;t.forEach((t,e)=>{a.append("images[][file]",t.file),a.append("images[][name]",t.name||`image-${e+1}`),a.append("images[][alt]",t.alt||t.name||`image-${e+1}`)});const i=await this.http.post("/api/v1/service/filemanager/uploads/public/tajrobe",a,e);if(i.data){return{data:{images:Array.isArray(i.data.images)?i.data.images:Array.isArray(i.data.data?.images)?i.data.data.images:Array.isArray(i.data.result?.images)?i.data.result.images:[]}}}return i}async list(t,e){return this.http.get(Nt,{...e,params:this.transformLegacyFilters(t)})}async create(t,e){return this.http.post(Nt,t,e)}async get(t,e){return this.http.get(`${Nt}/${t}`,e)}}class Jt{constructor(t){this.http=t}validateInvoiceId(t){return!Number.isFinite(t)||t<=0?{error:{message:"Invalid invoice ID",type:"validation"}}:null}async getBalance(t){return this.http.get("/api/v1/users/wallet/balance",t)}async listTransactions(t,e){const a=t?.pageNumber??t?.page_number??1,i=t?.pageSize??t?.page_size??20,r=await this.http.get("/api/v1/wallet/transactions",{...e,params:{pageNumber:a,pageSize:i}});return r.data?{data:G(r.data)}:r}async applyCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const i=await this.http.post(`${Ct}/${t}/add_credit`,{},e);return i.data?{data:k(i.data)}:i}async removeCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const i=await this.http.post(`${Ct}/${t}/remove_credit`,{},e);return i.data?{data:k(i.data)}:i}}class Qt{constructor(t){this.http=t}missingDataError(t){return{error:{message:`No data returned from ${t} endpoint`,type:"api"}}}unexpectedEntityError(t,e,a,i=400){return{error:{message:`Expected ${t} at ${a}, but got ${e}`,type:"api",status:i,details:{expected:t,actual:e,urlPath:a}}}}async getPage(t,e){const a=await this.http.get(Ft,{...e,params:{url_part:t}});if(a.error)return{error:a.error};if(!a.data)return this.missingDataError("CMS page");const i=mt(a.data);return"cms_page"===i.entityType&&i.entity?"blog"===i.entity.cmsPageType?this.unexpectedEntityError("CMS page","blog page",t):{data:i.entity}:this.unexpectedEntityError("CMS page",i.entityType||"unknown entity",t,"unknown"===i.entityType?404:400)}async listPages(t,e){const a=gt({...t,cmsPageTypes:"normal"}),i=await this.http.get(Dt,{...e,params:a});return i.error?{error:i.error}:i.data?{data:ht(i.data)}:this.missingDataError("CMS pages")}async getBlogPost(t,e){const a=await this.http.get(Ft,{...e,params:{url_part:t}});if(a.error)return{error:a.error};if(!a.data)return this.missingDataError("blog post");const i=mt(a.data);return"cms_page"===i.entityType&&i.entity?"blog"!==i.entity.cmsPageType?this.unexpectedEntityError("blog post","CMS page",t):{data:i.entity}:this.unexpectedEntityError("blog post",i.entityType||"unknown entity",t,"unknown"===i.entityType?404:400)}async listBlogPosts(t,e){const a=gt({...t,cmsPageTypes:"blog"}),i=await this.http.get(Dt,{...e,params:a});return i.error?{error:i.error}:i.data?{data:ht(i.data)}:this.missingDataError("blog posts")}async listAll(t,e){const a=gt(t),i=await this.http.get(Dt,{...e,params:a});return i.error?{error:i.error}:i.data?{data:ht(i.data)}:this.missingDataError("CMS content")}}class Wt{constructor(t){this.http=t}async upload(t,e){const a=new FormData;a.append("image",t);const i={...e?.headers};return delete i["Content-Type"],this.http.post(Rt,a,{...e,headers:i})}async delete(t,e){return this.http.delete(`${Rt}/${t}`,e)}}class Ht{constructor(t){this.http=t}async track(t,e){const a=e??((i=t)&&"object"==typeof i&&("retries"in i||"timeout"in i||"cache"in i||"headers"in i||"signal"in i)?t:void 0);var i;return this.http.post("/api/v1/visits/add",void 0,a)}async trackProduct(t,e,a){return this.track(a)}async trackCategory(t,e,a){return this.track(a)}}class Zt{constructor(t){this.http=t}transformEventFilters(t){if(!t)return{};const e={};return void 0===t.startDate&&void 0===t.start_date||(e.start_date=t.startDate??t.start_date),void 0===t.endDate&&void 0===t.end_date||(e.end_date=t.endDate??t.end_date),void 0===t.availableOnly&&void 0===t.available_only||(e.available_only=t.availableOnly??t.available_only),void 0!==t.page&&(e.page=t.page),void 0===t.pageSize&&void 0===t.page_size||(e.page_size=t.pageSize??t.page_size),e}async listEvents(t,e){return this.http.get(Ot,{...e,params:this.transformEventFilters(t)})}async getEvent(t,e){const a=await this.http.get(`${Ot}/${t}`,e);if(a.data){return{data:a.data.event||a.data}}return a}async getEventAvailabilities(t,e){const a=await this.http.get("/api/v1/scheduler/availabilities",{...e,params:{eventEntityId:t.eventEntityId,duration:t.duration,fromDate:t.fromDate,toDate:t.toDate,timezone:t.timezone}});if(a.data){return{data:{availableDays:a.data.availableDays||a.data.data?.availableDays||[]}}}return a}async createBooking(t,e){return this.http.post($t,t,e)}async listBookings(t){return this.http.get($t,t)}async cancelBooking(t,e){return this.http.post(`${$t}/${t}/cancel`,{},e)}}class Xt{constructor(t){this.http=t}async resolve(t,e){const a=await this.http.get(Ft,{...e,params:{url_part:t}});if(a.data){return{data:mt(a.data)}}return a}}class te{constructor(t){this.http=t}async getHeaderMenu(t="headermenu",e){const a=await this.http.get("/api/v1/trees/fetch_single",{...e,params:{identifier:t}});if(a.error)return{error:a.error};const i=_t(a.data),r=i?.tree?.treeStructure?.nodes||[];return{data:this.convertRawTreeToNavigation(r)}}convertRawTreeToNavigation(t){if(!t||0===t.length)return[];return t.map(t=>({name:this.findNodeTitle(t),url:this.findNodeUrl(t),children:this.convertRawTreeToNavigation(t.children||[]),shouldBeDropped:this.shouldDropNode(t)})).filter(t=>!t.shouldBeDropped).map(({shouldBeDropped:t,...e})=>e)}findNodeTitle(t){const{details:e,entity:a}=t,i=this.firstNonEmpty(e?.title,e?.name),r=this.firstNonEmpty(a?.title,a?.name);return!0===e?.isTitleDefault?r||i:i||r}firstNonEmpty(...t){return t.find(t=>"string"==typeof t&&t.trim().length>0)||""}findNodeUrl(t){return"product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType?t.entity?.url||"#":"url"===t.entityType&&t.details?.url||"#"}shouldDropNode(t){return("product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType)&&!t.entity?.enabled}}class ee{constructor(t){this.http=t}async getInfo(t){const e=await this.http.get("/api/v2/general/info",t);return e.data?{data:g(e.data)}:e.error?{error:e.error}:{error:{type:"api",message:"No data returned from general info endpoint."}}}async getFeatures(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.features}}async getCheckoutConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.checkout}}async getWalletConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.wallet}}async getTajrobeConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.tajrobe}}}class ae{constructor(t){this.http=t}normalizeField(t){return{key:String(t?.key??""),name:String(t?.name??""),type:t?.type,label:String(t?.label??""),value:t?.value,placeholder:String(t?.placeholder??""),required:Boolean(t?.required),inputOptions:Array.isArray(t?.inputOptions)?t.inputOptions:[],allowedExtensions:Array.isArray(t?.allowedExtensions)?t.allowedExtensions:[]}}normalizeForm(t){const e=Array.isArray(t?.fields)?t.fields:[];return{id:Number(t?.id??0),title:String(t?.title??t?.name??""),description:String(t?.description??""),fields:e.map(t=>this.normalizeField(t))}}async getForm(t,e){const a=await this.http.get(`/api/v1/dynamic_form/${t}`,e);if(a.data){const t=a.data.form||a.data.data||a.data;return{data:this.normalizeForm(t)}}return a}async uploadProductFormFile(t,e){const a=new FormData;a.append("file",t);const i=await this.http.post("/api/v1/service/filemanager/uploads/private/productform",a,e);if(i.data){const t=i.data?.data?.file?.serveKey||i.data?.file?.serveKey||i.data?.serveKey;return{data:{serveKey:String(t??"")}}}return i}}function ie(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function re(t){if("number"==typeof t&&Number.isFinite(t))return t;if("string"==typeof t){const e=Number(t);return Number.isFinite(e)?e:0}return 0}function ne(t){return"string"==typeof t?t.trim():""}class se{constructor(t){this.http=t}normalizeCity(t){return ie(t)?{id:re(t.id),name:ne(t.name),latitude:re(t.latitude),longitude:re(t.longitude)}:{id:0,name:"",latitude:0,longitude:0}}normalizeRegion(t){if(!ie(t))return{id:0,name:"",cities:[]};const e=Array.isArray(t.cities)?t.cities:[];return{id:re(t.id),name:ne(t.name),cities:e.map(t=>this.normalizeCity(t)).filter(t=>t.id>0&&t.name.length>0)}}extractRegions(t){return Array.isArray(t)?t:ie(t)?Array.isArray(t.regions)?t.regions:Array.isArray(t.items)?t.items:[]:[]}sortAlphabetically(t){return[...t].map(t=>({...t,cities:[...t.cities].sort((t,e)=>t.name.localeCompare(e.name,"fa"))})).sort((t,e)=>t.name.localeCompare(e.name,"fa"))}async list(t){const e=await this.http.get("/api/v2/regions",t);if(e.error)return{error:e.error};const a=this.extractRegions(e.data).map(t=>this.normalizeRegion(t)).filter(t=>t.id>0&&t.name.length>0);return{data:this.sortAlphabetically(a)}}}class oe{constructor(t,a){const i=e(t);this.http=new vt(i),this.tokenStorage=this.http.getTokenStorage(),this.credentialsManager=a??new wt,this.products=new xt(this.http),this.categories=new Vt(this.http),this.cart=new Mt(this.http,this.credentialsManager),this.invoices=new jt(this.http,this.credentialsManager),this.shipping=new Ut(this.http,this.credentialsManager),this.payments=new qt(this.http,this.credentialsManager,i.paymentsBasePath),this.orders=new Bt(this.http),this.users=new Lt(this.http),this.search=new Kt(this.http),this.feedbacks=new Yt(this.http),this.wallet=new Jt(this.http),this.cms=new Qt(this.http),this.images=new Wt(this.http),this.visits=new Ht(this.http),this.booking=new Zt(this.http),this.entityRoutes=new Xt(this.http),this.menu=new te(this.http),this.general=new ee(this.http),this.dynamicForms=new ae(this.http),this.regions=new se(this.http)}setAuthToken(t){this.tokenStorage.set(t)}getAuthToken(){return this.tokenStorage.get()}clearAuth(){this.tokenStorage.remove()}isAuthenticated(){return null!==this.tokenStorage.get()}clearCache(){this.http.clearCache()}clearCredentials(){this.credentialsManager.clearAll()}getCredentialsManager(){return this.credentialsManager}clearAll(){this.clearAuth(),this.clearCache(),this.clearCredentials()}async searchQuery(t,e,a){return this.search.query(t,e,a)}}function de(t,e){return new oe(t,e)}function ce(t){if(!t||"object"!=typeof t)return!1;const e=t;return e.http instanceof vt&&e.credentials instanceof wt}function pe(t){return ce(t)?t:function(t){const a=e(t);return{http:new vt(a),credentials:new wt}}(t)}function ue(t){const{http:e}=pe(t);return new xt(e)}function le(t){const{http:e}=pe(t);return new Vt(e)}function me(t){const{http:e,credentials:a}=pe(t);return new Mt(e,a)}function ye(t){const{http:e}=pe(t);return new Bt(e)}function he(t){const{http:e,credentials:a}=pe(t);return new jt(e,a)}function ge(t){const{http:e,credentials:a}=pe(t);return new Ut(e,a)}function fe(t){const{http:a,credentials:i}=pe(t),r=ce(t)?void 0:e(t).paymentsBasePath;return new qt(a,i,r)}function _e(t){const{http:e}=pe(t);return new Lt(e)}function ve(t){const{http:e}=pe(t);return new Kt(e)}function be(t){const{http:e}=pe(t);return new Yt(e)}function we(t){const{http:e}=pe(t);return new Jt(e)}function Ae(t){const{http:e}=pe(t);return new Qt(e)}function Pe(t){const{http:e}=pe(t);return new Wt(e)}function Ie(t){const{http:e}=pe(t);return new Ht(e)}function Ce(t){const{http:e}=pe(t);return new Zt(e)}function Se(t){const{http:e}=pe(t);return new Xt(e)}function Te(t){const{http:e}=pe(t);return new te(e)}function ke(t){const{http:e}=pe(t);return new ee(e)}function Ee(t){const{http:e}=pe(t);return new ae(e)}function ze(t){const{http:e}=pe(t);return new se(e)}export{wt as CredentialsManager,vt as HttpClient,bt as MemoryStorage,oe as SazitoClient,a as TokenStorage,Ce as booking,me as cart,le as categories,Ae as cms,Ce as createBookingAPI,Ae as createCMSAPI,me as createCartAPI,le as createCategoriesAPI,Ee as createDynamicFormsAPI,Se as createEntityRoutesAPI,be as createFeedbacksAPI,ke as createGeneralAPI,Pe as createImagesAPI,he as createInvoicesAPI,Te as createMenuAPI,ye as createOrdersAPI,fe as createPaymentsAPI,ue as createProductsAPI,ze as createRegionsAPI,de as createSazitoClient,ve as createSearchAPI,ge as createShippingAPI,_e as createUsersAPI,Ie as createVisitsAPI,we as createWalletAPI,Ee as dynamicForms,Se as entityRoutes,be as feedbacks,ke as general,Pe as images,he as invoices,Te as menu,ye as orders,fe as payments,ue as products,ze as regions,ve as search,ge as shipping,n as toEnglishDigits,it as transformAddToCartInput,h as transformApiResponse,T as transformCartResponse,rt as transformCreateCartInput,k as transformInvoiceResponse,tt as transformProductListResponse,y as transformRequestKeys,m as transformResponseKeys,at as transformShippingAddressInput,_e as users,Ie as visits,we as wallet};
|