@sazito/client-sdk 1.2.2 → 1.2.3
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/README.md +60 -6
- package/dist/index.d.ts +142 -71
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/index.umd.js +1 -1
- package/package.json +1 -1
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).SazitoSDK={})}(this,function(t){"use strict";const e={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 a(t){return{...e,...t,retry:{...e.retry,...t.retry},cache:{...e.cache,...t.cache},customFetchApi:t.customFetchApi||("undefined"!=typeof fetch?fetch:void 0)}}class i{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 r{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 n={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",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"},s=Object.values(n).reduce((t,e)=>(t[e]=(t[e]||0)+1,t),{}),o=Object.entries(n).reduce((t,[e,a])=>(1===s[a]&&(t[a]=e),t),{});function c(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function d(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function p(t){return!(null===t||"object"!=typeof t||Array.isArray(t)||t instanceof Date)}function u(t,e){const a={...t};for(const t of e)delete a[t];return a}function l(t){if(!p(t))return Array.isArray(t)?t.map(t=>l(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=n[a];t||(t=c(a)),p(i)?e[t]=l(i):Array.isArray(i)?e[t]=i.map(t=>l(t)):e[t]=i}return e}function m(t){if(!p(t))return Array.isArray(t)?t.map(t=>m(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=o[a];t||(t=d(a)),p(i)?e[t]=m(i):Array.isArray(i)?e[t]=i.map(t=>m(t)):e[t]=i}return e}function h(t){const e=t;if(p(e?.data?.result)){const t=e.data.result,a=Object.keys(t);return 1===a.length&&p(t[a[0]])?l(t[a[0]]):l(t)}return l(t)}function y(t){if(!t)return{};if(!p(t))return{};const{general:e,shop:a,checkout:i,features:r,wallet:n,tajrobe:s,domain:o,enamad:c,google:d,logo:u,social:l,...m}=t,h={...p(e)?e:{},...p(a)?a:{}},{registerType:y,showProductStockNumber:b,...v}=h||{};let w=i;if(p(i)){const t={...i};void 0===t.preventRedirect&&void 0!==t.manual&&(t.preventRedirect=t.manual),delete t.manual,w=t}return{...m,scripts:{enamad:c,google:d},shop:_({...v,domain:o,logo:u,social:l}),settings:{checkout:w,features:P(r),wallet:A(n),tajrobe:I(s),registerType:g(y),showProductStockNumber:f(b)}}}function g(t){return"string"==typeof t?t:""}function f(t){return"boolean"==typeof t?t:p(t)&&Object.prototype.hasOwnProperty.call(t,"enabled")?f(t.enabled):1===t||"1"===t||"true"===t}function _(t){if(!p(t))return{};const e={...t};if(p(e.city)){const t=u(e.city,["createdAt","updatedAt"]);let a=t.region;p(a)&&(a=u(a,["createdAt","updatedAt","cities"])),t.region=a,e.city=t}return e}const b={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"},v=new Set(["activateAlopeykAdvanced","activate_alopeyk_advanced"]),w=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 P(t){if(!p(t))return{};const e={},a=(t,a)=>{if(v.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)};p(t.flags)&&Object.entries(t.flags).forEach(([t,e])=>{a(t,e)}),p(t.configurations)&&Object.entries(t.configurations).forEach(([t,e])=>{a(t,e)}),Object.entries(t).forEach(([t,e])=>{"flags"!==t&&"premium"!==t&&"configurations"!==t&&(p(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=b[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);w.has(a)||(i[a]=e)});const r={...i};return p(t.premium)&&(r.premium=t.premium),r}function A(t){if(!p(t))return{};const e=p(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 I(t){if(!p(t))return{};const e=p(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 C(t){const e=h(t);if(!p(e))return{};const a=Array.isArray(e.items)?e.items.map(t=>function(t){if(!p(t))return{};const e=M(t),a=D(t.productVariantId??e.variantId)??e.variantId;return{id:x(t.id??t.cartProductId)??"",productVariantId:a,quantity:D(t.quantity)??0,unitPrice:D(t.unitPrice)??0,lineTotal:D(t.lineTotal)??0,product:e,formAttributes:t.formAttributes,formFields:t.formFields,bookingAttributes:t.bookingAttributes}}(t)):[];return{...e,items:a,netTotal:D(e.netTotal)??0,grossTotal:D(e.grossTotal),needsShipping:Boolean(e.needsShipping),minBasketLimitViolated:Boolean(e.minBasketLimitViolated),deleteCoupon:void 0===e.deleteCoupon?void 0:Boolean(e.deleteCoupon)}}function S(t){const e=h(t);if(!p(e))return{};const a=u(e,["shippingMethod","user","userData"]),i=Array.isArray(e.items)?e.items.map(t=>function(t){if(!p(t))return{};const e=M(t),a=D(t.productVariantId??e.variantId)??e.variantId,i=Array.isArray(e.attributes)?e.attributes:[],r=F(e.hasMaxOrder??t.hasMaxOrder);return{id:x(t.id??t.invoiceItemId??t.cartProductId)??"",productVariantId:a,productId:D(e.productId??t.productId),name:G(t.name)??G(e.name)??"",url:G(e.url)??G(t.url),attributes:i,productType:G(e.productType)??G(t.productType),hasMaxOrder:r,maxOrderQuantity:D(e.maxOrderQuantity??t.maxOrderQuantity),minOrderQuantity:D(e.minOrderQuantity??t.minOrderQuantity),image:j(t.image??e.image),quantity:D(t.quantity)??0,unitPrice:D(t.unitPrice)??0,lineTotal:D(t.lineTotal)??0,rawPrice:D(t.rawPrice??t.originalPrice)??0,customerProfit:D(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=p(n)&&p(n.discountCode)?G(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}}(k(e.shippingAddress)),shippingItems:Array.isArray(e.shippingItems)?e.shippingItems.map(t=>function(t){if(!p(t))return{};const e=p(t.rate)?t.rate:p(t.shippingRate)?t.shippingRate:p(t.shippingMethod)?t.shippingMethod:t;return{invoiceItemIds:O(t),rate:W(e)}}(t)):[],discountUsages:r,netTotal:D(e.netTotal)??0,finalTotal:D(e.finalTotal)??0,vat:D(e.vat)??0,vatPercent:D(e.vatPercent)??0,itemsDiscount:D(e.itemsDiscount)??0,discountTotal:D(e.discountTotal)??0,customerProfit:D(e.customerProfit)??0,customerProfitPercentage:D(e.customerProfitPercentage)??0,itemsTotalRawPrice:D(e.itemsTotalRawPrice)??0,couponTotal:D(e.couponTotal)??0,shippingTotal:D(e.shippingTotal)??0,creditTotal:D(e.creditTotal)??0,needsShipping:Boolean(e.needsShipping),userComment:"string"==typeof e.userComment?e.userComment:void 0,discountCode:s}}function z(t){return k(t)}function T(t){const e=h(t);if(p(e))return E(e)}function E(t){if(!t)return;const e=function(t){const e=$(t);if(!e)return;if(1===Object.keys(e).length&&p(e.user))return $(e.user)??e.user;return e}(t);if(!e)return;const a={},i=D(e.id);void 0!==i&&(a.id=i);const r=G(e.email);r&&(a.email=r);const n=G(e.mobilePhone)??G(e.phoneNumber);n&&(a.mobilePhone=n);const s=G(e.phoneNumber);s&&s!==n&&(a.phoneNumber=s);const o=G(e.firstName);o&&(a.firstName=o);const c=G(e.lastName);c&&(a.lastName=c);const d=G(e.birthDate);return d&&(a.birthDate=d),Object.keys(a).length>0?a:void 0}function k(t){if(!t)return;const e=E(t.user),a=$(t.region),i=$(t.city),r=$(i?.region),n=G(t.regionName)??R(t.region),s=N(a??t.region,{fallbackId:D(t.regionId),fallbackName:n})??N(r,{fallbackId:D(t.regionId),fallbackName:n}),o=D(t.regionId)??s?.id,c=G(t.cityName)??G(i?.name)??R(t.city),d=function(t,e={}){if(null==t)return;const a=$(t),i=D(a?.id)??D(t)??e.fallbackId,r=G(a?.name)??R(t)??e.fallbackName;if(void 0===i||!r)return;const n={id:i,name:r},s=D(a?.regionId)??e.fallbackRegionId;void 0!==s&&(n.regionId=s);const o=D(a?.latitude);void 0!==o&&(n.latitude=o);const c=D(a?.longitude);void 0!==c&&(n.longitude=c);return n}(i??t.city,{fallbackId:D(t.cityId),fallbackName:c,fallbackRegionId:o}),p=G(t.firstName)??e?.firstName??"",u=G(t.lastName)??e?.lastName??"",l={id:D(t.id)??0,identifier:G(t.identifier)??"",firstName:p,lastName:u,city:d??{id:D(t.cityId??t.city)??0,name:c??"",...void 0!==o?{regionId:o}:{}},address:G(t.address)??""},m=G(t.mobilePhone)??G(t.phoneNumber)??e?.mobilePhone??e?.phoneNumber,h=G(t.phoneNumber)??e?.phoneNumber;m&&(l.mobilePhone=m),h&&h!==m&&(l.phoneNumber=h);const y=G(t.email)??e?.email;y&&(l.email=y),s&&(l.region=s);const g=G(t.postalCode);g&&(l.postalCode=g);const f=D(t.latitude);void 0!==f&&(l.latitude=f);const _=D(t.longitude);void 0!==_&&(l.longitude=_);const b=F(t.userSetCoordinatesBefore);return void 0!==b&&(l.userSetCoordinatesBefore=b),l}function N(t,e={}){if(null==t)return;const a=$(t),i=D(a?.id)??D(t)??e.fallbackId,r=G(a?.name)??R(t)??e.fallbackName;return void 0!==i&&r?{id:i,name:r}:void 0}function $(t){if(p(t))return p(t.data)?t.data:t}function R(t){const e=G(t);if(e)return void 0===D(e)?e:void 0}function O(t){return(Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:void 0!==t.invoiceItemId?[t.invoiceItemId]:[]).map(t=>x(t)).filter(t=>void 0!==t)}function D(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 G(t){if("string"!=typeof t)return;const e=t.trim();return e.length>0?e:void 0}function F(t){return"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0}function x(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 M(t){if(!p(t))return{variantId:0,name:"",attributes:[]};const e=p(t.variant)?t.variant:void 0,a=p(e?.product)?e.product:void 0,i=p(t.product)?t.product:void 0,r=D(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:D(i?.productId??t.productId??a?.id),name:G(i?.name)??G(t.name)??"",url:G(i?.url)??G(t.url)??G(a?.url),image:j(i?.image??t.image),attributes:n,productType:G(i?.productType)??G(t.productType)??G(a?.productType),hasMaxOrder:i?.hasMaxOrder??t.hasMaxOrder??e?.hasMaxOrder,maxOrderQuantity:D(i?.maxOrderQuantity??t.maxOrderQuantity??e?.maxOrderQuantity),minOrderQuantity:D(i?.minOrderQuantity??t.minOrderQuantity??e?.minOrderQuantity)}}function K(t){if(!p(t))return{};const e=u(t,["staticUrl","summary","tags","slug"]);return e.variants&&Array.isArray(e.variants)&&(e.variants=e.variants.map(t=>p(t)?u(t,["name","title","product","status","soldCount"]):{})),e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(t=>p(t)?{id:t.id,name:t.name,url:t.url}:{})),e.images&&Array.isArray(e.images)&&(e.images=e.images.map(t=>j(t)??{})),e}function j(t){return p(t)?u(t,["widthRatio","heightRatio","thumb","order"]):t}function U(t){const e=K(t);return e?u(e,["themeConfig"]):e}function B(t){const e=h(t);if(e.items&&Array.isArray(e.items)){const t=D(e.total)??e.items.length,a=D(e.pageSize)??e.items.length,i=D(e.page)??1,r=D(e.totalPages)??Math.ceil(t/a);return{items:e.items.map(t=>U(t)),total:t,page:i,pageSize:a,totalPages:r}}return e}function q(t){if(!p(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=>U(t)),a.products.total=D(e.productsCount)??0,a.products.page=D(e.productsPageNumber)??1,a.products.pageSize=D(e.productsPageSize)??20),Array.isArray(e.blogPages)&&(a.blogPages.items=e.blogPages.map(t=>X(t)),a.blogPages.total=D(e.blogPagesCount)??0,a.blogPages.page=D(e.blogPagesPageNumber)??1,a.blogPages.pageSize=D(e.blogPagesPageSize)??20),Array.isArray(e.cmsPages)&&(a.cmsPages.items=e.cmsPages.map(t=>X(t)),a.cmsPages.total=D(e.cmsPagesCount)??0,a.cmsPages.page=D(e.cmsPagesPageNumber)??1,a.cmsPages.pageSize=D(e.cmsPagesPageSize)??20),Array.isArray(e.categories)&&(a.productCategories.items=e.categories.map(t=>J(t)),a.productCategories.total=D(e.productCategoriesCount)??0,a.productCategories.page=D(e.productCategoriesPageNumber)??1,a.productCategories.pageSize=D(e.productCategoriesPageSize)??20),a}function L(t){const e=h(t);if(!p(e))return[];return(Array.isArray(e.paymentTypes)?e.paymentTypes:Array.isArray(e.methods)?e.methods:[]).map(t=>p(t)?{id:D(t.id)??0,code:t.code,isDefault:Boolean(t.isDefault)}:{id:0,code:"",isDefault:!1})}function Y(t){const e=h(t);return(Array.isArray(e)?e:p(e)&&Array.isArray(e.shippingMethods)?e.shippingMethods:[]).map(t=>Q(t))}function V(t){const e=h(t);if(!p(e))return{shippingMethods:[],groupedShippingRates:{},itemsShippingRate:[]};const a=p(e.groupedShippingRates)?Object.entries(e.groupedShippingRates).reduce((t,[e,a])=>(t[e]=Array.isArray(a)?a.map(t=>W(t)):[],t),{}):{};return{shippingMethods:Array.isArray(e.shippingMethods)?e.shippingMethods.map(t=>Q(t)):[],groupedShippingRates:a,itemsShippingRate:Array.isArray(e.itemsShippingRate)?e.itemsShippingRate.map(t=>p(t)?{invoiceItemId:x(t.invoiceItemId)??O(t)[0]??"",shippingRate:W(t.shippingRate??t.rate??t)}:{invoiceItemId:"",shippingRate:W(void 0)}):[]}}function Q(t){return p(t)?{id:D(t.id)??0,name:G(t.name)??"",type:G(t.type)??""}:{id:0,name:"",type:""}}function W(t){return p(t)?{id:D(t.id??t.rateId)??0,name:G(t.name)??"",price:D(t.price??t.amount)??0,icon:G(t.icon),color:G(t.color),type:G(t.type)}:{id:0,name:"",price:0}}function H(t){return p(t)?u(t,["staticUrl","products","items"]):{}}function J(t){const e=H(t);return e?u(e,["themeConfig"]):{}}function Z(t){return p(t)?u(t,["staticUrl","urlKey"]):{}}function X(t){const e=Z(t);return e?u(e,["themeConfig"]):{}}function tt(t){const e=h(t);if(!e||!e.route)return e??{};const a=p(e.route)?e.route:{};if(a.entity){switch(a.entityType){case"product":a.entity=K(a.entity);break;case"product_category":a.entity=H(a.entity);break;case"cms_page":case"blog_page":a.entity=Z(a.entity)}p(a.entity)&&(a.entity=u(a.entity,["id"])),!a.url&&p(a.entity)&&a.entity.url&&(a.url=a.entity.url)}return a}function et(t){if(!p(t))return{};const e={...t};return e.entity&&(e.entity=J(e.entity),p(e.entity)&&(e.entity=u(e.entity,["id"]))),e.children&&Array.isArray(e.children)&&(e.children=e.children.map(et)),e}function at(t){const e=h(t);return e?e.cmsPages&&Array.isArray(e.cmsPages)?{items:e.cmsPages.map(X),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=>X(t)),total:e.total||e.items.length,page:e.page||1,pageSize:e.pageSize||e.items.length}:e:{}}function it(t){if(!p(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 rt(t){if(!p(t))return{};const e={};if(t.entityType&&(e.entityType=t.entityType),void 0!==t.entityId&&(e.entityId=t.entityId),p(t.entity)){const a=u(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=>rt(t))),e}function nt(t){const e=h(t);if(!e||!e.tree)return e??{};const a=p(e.tree)?e.tree:{};return p(a.treeStructure)&&Array.isArray(a.treeStructure.nodes)&&(a.treeStructure.nodes=a.treeStructure.nodes.map(t=>rt(t))),e}class st{constructor(t){this.config=t,this.baseUrl="http://api.sazito.com:8080",this.domain=t.domain,this.tokenStorage=new i,this.cache=new r,this.fetchApi=t.customFetchApi.bind(globalThis)}async get(t,e){const a=this.buildUrl(t,e?.params),i=r.generateKey("GET",a,e?.params);if(!1!==e?.cache){const e=this.getApiName(t),a=this.config.cache[e];if(a?.enabled&&a.ttl){const e=this.cache.get(i,a.ttl);if(e)return this.config.debug&&console.log("[Sazito SDK] Cache hit:",t),{data:e}}}const n=await this.request("GET",a,e);return n.data&&!1!==e?.cache&&this.cache.set(i,n.data),n}async post(t,e,a){const i=this.buildUrl(t),r=this.isMultipartBody(e),n=e?r?e:m(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("POST",i,{...a,body:n,rawBody:r,omitJsonContentType:r})}async put(t,e,a){const i=this.buildUrl(t),r=this.isMultipartBody(e),n=e?r?e:m(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 c=r.headers.get("content-type");let d;d=c?.includes("application/json")?await r.json():await r.text();const p=void 0!==d?.result?d.result:d;this.config.debug&&console.log(`[Sazito SDK] ${t} ${e}:`,{status:r.status,data:p});let u=p?l(p):p;const m=["cart","product","user","order","invoice","payment","shippingAddress"];if(u&&"object"==typeof u&&!Array.isArray(u)){const t=Object.keys(u);1===t.length&&m.includes(t[0])&&"object"==typeof u[t[0]]&&null!==u[t[0]]&&(u=u[t[0]])}return r.ok?{data:u}:{error:{status:r.status,message:u?.message||p?.message||r.statusText||"Request failed",type:"api",details:u}}}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: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}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}clearCache(){this.cache.clear()}}class ot{constructor(){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"}getCartCredentials(){return this.getItem(this.CART_KEY)}setCartCredentials(t){this.setItem(this.CART_KEY,t)}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){if("undefined"==typeof localStorage)return null;try{const e=localStorage.getItem(t);return e?JSON.parse(e):null}catch(e){return console.error(`[Sazito SDK] Error reading ${t} from localStorage:`,e),null}}setItem(t,e){if("undefined"!=typeof localStorage)try{localStorage.setItem(t,JSON.stringify(e))}catch(e){console.error(`[Sazito SDK] Error writing ${t} to localStorage:`,e)}else console.warn("[Sazito SDK] localStorage not available")}removeItem(t){if("undefined"!=typeof localStorage)try{localStorage.removeItem(t)}catch(e){console.error(`[Sazito SDK] Error removing ${t} from localStorage:`,e)}}}const ct="/api/v1/product_categories",dt="/api/v1/search",pt="/api/v2/carts",ut="/api/v2/invoices",lt="/api/v2/shipping_addresses",mt="/api/v2/payments",ht="/api/v1/orders",yt="/api/v1/users",gt="/api/v1/sessions",ft="/api/v1/feedbacks",_t="/api/v1/cms_pages",bt="/api/v1/images",vt="/api/v1/scheduler/events",wt="/api/v1/scheduler/bookings",Pt="/api/v1/entity_route/route",At="/api/v1/feedbacks/comments/details";class It{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(Pt,{...e,params:{url_part:a}});if(i.data){const t=tt(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:B(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(dt,{...a,params:i});if(r.data){return{data:q(r.data)}}return r}}class Ct{constructor(t){this.http=t}async get(t,e){const a=await this.http.get(`${ct}/${t}`,e);if(a.data){const t=function(t){const e=h(t);return e?H(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(ct,{...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(J)),p(e.tree)&&p(e.tree.treeStructure)&&Array.isArray(e.tree.treeStructure.nodes)&&(e.tree.treeStructure.nodes=e.tree.treeStructure.nodes.map(et)),e):{}}(i.data);return{data:t}}return i}}class St{constructor(t,e){this.http=t,this.credentials=e}persistCartCredentials(t){this.credentials.setCartCredentials({id:t.id,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(`${pt}/${e.id}`,{...t,params:{identifier:e.identifier}});return a.data?{data:C(a.data)}:(a.error&&this.clearCart(),a)}async create(t,e){const a=await this.http.post(pt,t,e);if(!a.data)return a;const i=C(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(`${pt}/${r.id}/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=C(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(`${pt}/${n.id}/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=C(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(`${pt}/${i.id}/remove_products_from_cart`,{identifier:i.identifier,cartProductId:String(t),variants:[{id:e}]},a);if(r.data){const t=C(r.data);return this.persistCartCredentials(t),{data:t}}return r}clearCart(){this.credentials.clearCartCredentials()}}class zt{constructor(t){this.http=t}async list(t,e){const a={page_number:t?.pageNumber??1,page_size:t?.pageSize??100};return t?.filters&&t.filters.length>0&&(a.filters=JSON.stringify(t.filters)),this.http.get(ht,{...e,params:a})}async get(t,e){return this.http.get(`${ht}/${t}`,e)}}class Tt{constructor(t,e){this.http=t,this.credentials=e}normalizeInvoiceResponse(t){return t.data?{data:S(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(`${ut}/${a.id}/refresh`,{cart_id:String(e.id),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(ut,{cart_id:String(e.id),cart_identifier:e.identifier},t);if(a.data){const t=S(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(`${ut}/${a.id}/refresh`,{cart_id:String(e.id),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(`${ut}/${r.id}/add_shipping_address`,{identifier:r.identifier,shipping_address_id:t,shipping_address_identifier:e,cart_id:i.id,cart_identifier:i.identifier},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(`${ut}/${a.id}/add_discount_code`,{identifier:a.identifier,discount_code:t.toUpperCase()},e);return i.data?(this.credentials.setDiscountCode(t.toUpperCase()),{data:S(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(`${ut}/${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(`${ut}/${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(`${ut}/${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(`${ut}/${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(`${ut}/${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(`${ut}/${e.id}/applicable_shipping_methods`,{...t,params:{identifier:e.identifier}});return a.data?{data:V(a.data)}:a}clearInvoice(){this.credentials.clearInvoiceCredentials()}}class Et{constructor(t,e){this.http=t,this.credentials=e}sanitizeAddressInput(t){const e={...t};return delete e.user,e}async createAddress(t,e){const a=this.sanitizeAddressInput(t),i=await this.http.post(lt,{shipping_address:a},e);if(i.data){const t=z(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(lt,{identifier:a.identifier,shipping_address:i},e);if(r.data){const t=z(r.data);return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):r}return r}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(`${lt}/${e.id}`,{...t,params:{identifier:e.identifier}});if(a.data){const t=z(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:Y(e.data)}:e.error?{error:e.error}:{data:[]}}clearAddress(){this.credentials.clearShippingCredentials()}}class kt{constructor(t,e){this.http=t,this.credentials=e,this.pinchedPayments=new Set}async getMethods(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${mt}/list`,{invoice_identifier:e.identifier},t);return a.data?{data:L(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(mt,{invoice_identifier:a.identifier,payment_type:t},e);if(i.data){const t=this.normalizePayment(i.data);return this.credentials.setPaymentCredentials({id:t.id,identifier:t.identifier}),{data:t}}return i}async initialize(t){const e=this.credentials.getPaymentCredentials();if(!e)return{error:{message:"No payment found. Please create a payment first.",type:"validation"}};const a=await this.http.post(`${mt}/${e.id}/process_payment_step`,{paymentIdentifier:e.identifier},this.withExactJsonHeader(t));if(!a.data)return a;const i=this.normalizeAction(a.data);return await this.callPinchAfterSuccessfulPayment(i,e.id,t),{data:i}}async processStep(t,e){const a=this.credentials.getPaymentCredentials();if(!a)return{error:{message:"No payment found",type:"validation"}};const{paymentIdentifier:i,...r}=t,n=await this.http.post(`${mt}/${a.id}/process_payment_step`,{paymentIdentifier:i||a.identifier,...r},this.withExactJsonHeader(e));if(!n.data)return n;const s=this.normalizeAction(n.data);return await this.callPinchAfterSuccessfulPayment(s,a.id,e),{data:s}}async processStepForm(t,e){const a=this.credentials.getPaymentCredentials();if(!a)return{error:{message:"No payment found",type:"validation"}};const i=this.buildProcessStepFormData(t,a.identifier);if(!i)return{error:{message:"FormData is not available in this runtime.",type:"validation"}};const r=await this.http.post(`${mt}/${a.id}/process_payment_step`,i,e);if(!r.data)return r;const n=this.normalizeAction(r.data);return await this.callPinchAfterSuccessfulPayment(n,a.id,e),{data:n}}async pollUntilSettled(t,e=15e3){let a=!0;for(;a;){const i=await this.initialize(t);if(!i.data)return i;if("pending"!==i.data.action)return a=!1,i;await new Promise(t=>setTimeout(t,e))}return{error:{message:"Payment polling exited unexpectedly",type:"network"}}}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"}}}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=m(t),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}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,""))}normalizePayment(t){if(!t||"object"!=typeof t)return t;if("paymentType"in t&&t.paymentType&&"object"==typeof t.paymentType&&"title"in t.paymentType){const e={...t.paymentType};return delete e.title,{...t,paymentType:e}}return t}normalizeAction(t){return"show_order"===t?.action?{...t,action:"showOrder"}:t}async callPinchAfterSuccessfulPayment(t,e,a){if("showOrder"!==t.action)return;if(this.pinchedPayments.has(e))return;this.pinchedPayments.add(e);(await this.http.post("/api/v1/pinch/order",{},a)).error&&this.pinchedPayments.delete(e)}}class Nt{constructor(t){this.http=t}normalizeUserResponse(t){if(!t.data)return t;const e=T(t.data);return e?{data:e}:t}normalizeLoginResponse(t){if(!t.data||!t.data.user)return t;const e=T(t.data.user);return e?{data:{...t.data,user:e}}:t}async login(t,e){const a=await this.http.post(`${gt}/login`,t,e);return this.normalizeLoginResponse(a)}async requestMobileOTP(t,e){return this.http.post(`${gt}/login_request`,t,e)}async verifyMobileOTP(t,e){const a=await this.http.post(`${gt}/login_request_verification`,t,e);return this.normalizeLoginResponse(a)}async requestEmailLogin(t,e){return this.http.post(`${yt}/email_login_request`,t,e)}async register(t,e){const a=await this.http.post(`${yt}/register`,t,e);return this.normalizeUserResponse(a)}async getCurrentUser(t){const e=await this.http.get(`${yt}/current`,t);return this.normalizeUserResponse(e)}async updateProfile(t,e,a){const i=await this.http.put(`${yt}/${t}`,e,a);return this.normalizeUserResponse(i)}async requestMobilePhoneUpdate(t,e){return this.http.post(`${yt}/update_mobile_phone_request`,t,e)}async verifyMobilePhoneUpdate(t,e){const a=await this.http.post(`${yt}/update_mobile_phone_verification`,t,e);return this.normalizeUserResponse(a)}async forgotPassword(t,e){return this.http.post(`${yt}/forgot_password`,t,e)}async revivePassword(t,e){const a=await this.http.post(`${yt}/revive_password`,t,e);return this.normalizeLoginResponse(a)}async mergeUser(t){return this.http.post(`${yt}/merge_user`,{},t)}}class $t{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(dt,{...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:q(r.data)}}return r}}class Rt{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(At,t,e)}async getProductStatistics(t,e){const a=await this.http.get(`${At}/${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(`${At}/${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(ft,{...e,params:this.transformLegacyFilters(t)})}async create(t,e){return this.http.post(ft,t,e)}async get(t,e){return this.http.get(`${ft}/${t}`,e)}}class Ot{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?.page_number??1,i=t?.page_size??100;return this.http.get("/api/v1/wallet/transactions",{...e,params:{page_number:a,page_size:i}})}async applyCredit(t,e){const a=this.validateInvoiceId(t);return a||this.http.post(`${ut}/${t}/add_credit`,{},e)}async removeCredit(t,e){const a=this.validateInvoiceId(t);return a||this.http.post(`${ut}/${t}/remove_credit`,{},e)}}class Dt{constructor(t){this.http=t}async getPage(t,e){const a=await this.http.get(Pt,{...e,params:{url_part:t}}),i=tt(a.data);if("cms_page"!==i.entityType)throw new Error(`Expected CMS page at ${t}, but got ${i.entityType}`);if("blog"===i.entity.cmsPageType)throw new Error(`Expected CMS page at ${t}, but got blog page`);return{...a,data:i.entity}}async listPages(t,e){const a=it({...t,cmsPageTypes:"normal"}),i=await this.http.get(_t,{...e,params:a});return{...i,data:at(i.data)}}async getBlogPost(t,e){const a=await this.http.get(Pt,{...e,params:{url_part:t}}),i=tt(a.data);if("cms_page"!==i.entityType)throw new Error(`Expected blog post at ${t}, but got ${i.entityType}`);if("blog"!==i.entity.cmsPageType)throw new Error(`Expected blog post at ${t}, but got CMS page`);return{...a,data:i.entity}}async listBlogPosts(t,e){const a=it({...t,cmsPageTypes:"blog"}),i=await this.http.get(_t,{...e,params:a});return{...i,data:at(i.data)}}async listAll(t,e){const a=it(t),i=await this.http.get(_t,{...e,params:a});return{...i,data:at(i.data)}}}class Gt{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(bt,a,{...e,headers:i})}async delete(t,e){return this.http.delete(`${bt}/${t}`,e)}}class Ft{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 xt{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(vt,{...e,params:this.transformEventFilters(t)})}async getEvent(t,e){const a=await this.http.get(`${vt}/${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(wt,t,e)}async listBookings(t){return this.http.get(wt,t)}async cancelBooking(t,e){return this.http.post(`${wt}/${t}/cancel`,{},e)}}class Mt{constructor(t){this.http=t}async resolve(t,e){const a=await this.http.get(Pt,{...e,params:{url_part:t}});if(a.data){return{data:tt(a.data)}}return a}}class Kt{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}}),i=a.data?nt(a.data):a.data,r=i?.tree?.treeStructure?.nodes||[],n=this.convertRawTreeToNavigation(r);return{...a,data:n}}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{entityType:e,details:a,entity:i}=t;return a&&!a.isTitleDefault&&a.title?a.title:a&&!a.isTitleDefault&&a.name?a.name:"product_category"===e||"product"===e?i?.name||"":("cms_page"===e||"blog_page"===e)&&i?.name||""}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 jt{constructor(t){this.http=t}async getInfo(t){const e=await this.http.get("/api/v2/general/info",t);return e.data?{data:y(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 Ut{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 Bt(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function qt(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 Lt(t){return"string"==typeof t?t.trim():""}class Yt{constructor(t){this.http=t}normalizeCity(t){return Bt(t)?{id:qt(t.id),name:Lt(t.name),latitude:qt(t.latitude),longitude:qt(t.longitude)}:{id:0,name:"",latitude:0,longitude:0}}normalizeRegion(t){if(!Bt(t))return{id:0,name:"",cities:[]};const e=Array.isArray(t.cities)?t.cities:[];return{id:qt(t.id),name:Lt(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:Bt(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 Vt{constructor(t){const e=a(t);this.http=new st(e),this.tokenStorage=this.http.getTokenStorage(),this.credentialsManager=new ot,this.products=new It(this.http),this.categories=new Ct(this.http),this.cart=new St(this.http,this.credentialsManager),this.invoices=new Tt(this.http,this.credentialsManager),this.shipping=new Et(this.http,this.credentialsManager),this.payments=new kt(this.http,this.credentialsManager),this.orders=new zt(this.http),this.users=new Nt(this.http),this.search=new $t(this.http),this.feedbacks=new Rt(this.http),this.wallet=new Ot(this.http),this.cms=new Dt(this.http),this.images=new Gt(this.http),this.visits=new Ft(this.http),this.booking=new xt(this.http),this.entityRoutes=new Mt(this.http),this.menu=new Kt(this.http),this.general=new jt(this.http),this.dynamicForms=new Ut(this.http),this.regions=new Yt(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()}clearAll(){this.clearAuth(),this.clearCache(),this.clearCredentials()}async searchQuery(t,e,a){return this.search.query(t,e,a)}}function Qt(t){return function(t){if(!t||"object"!=typeof t)return!1;const e=t;return e.http instanceof st&&e.credentials instanceof ot}(t)?t:function(t){const e=a(t);return{http:new st(e),credentials:new ot}}(t)}function Wt(t){const{http:e}=Qt(t);return new It(e)}function Ht(t){const{http:e}=Qt(t);return new Ct(e)}function Jt(t){const{http:e,credentials:a}=Qt(t);return new St(e,a)}function Zt(t){const{http:e}=Qt(t);return new zt(e)}function Xt(t){const{http:e,credentials:a}=Qt(t);return new Tt(e,a)}function te(t){const{http:e,credentials:a}=Qt(t);return new Et(e,a)}function ee(t){const{http:e,credentials:a}=Qt(t);return new kt(e,a)}function ae(t){const{http:e}=Qt(t);return new Nt(e)}function ie(t){const{http:e}=Qt(t);return new $t(e)}function re(t){const{http:e}=Qt(t);return new Rt(e)}function ne(t){const{http:e}=Qt(t);return new Ot(e)}function se(t){const{http:e}=Qt(t);return new Dt(e)}function oe(t){const{http:e}=Qt(t);return new Gt(e)}function ce(t){const{http:e}=Qt(t);return new Ft(e)}function de(t){const{http:e}=Qt(t);return new xt(e)}function pe(t){const{http:e}=Qt(t);return new Mt(e)}function ue(t){const{http:e}=Qt(t);return new Kt(e)}function le(t){const{http:e}=Qt(t);return new jt(e)}function me(t){const{http:e}=Qt(t);return new Ut(e)}function he(t){const{http:e}=Qt(t);return new Yt(e)}t.CredentialsManager=ot,t.HttpClient=st,t.SazitoClient=Vt,t.TokenStorage=i,t.booking=de,t.cart=Jt,t.categories=Ht,t.cms=se,t.createBookingAPI=de,t.createCMSAPI=se,t.createCartAPI=Jt,t.createCategoriesAPI=Ht,t.createDynamicFormsAPI=me,t.createEntityRoutesAPI=pe,t.createFeedbacksAPI=re,t.createGeneralAPI=le,t.createImagesAPI=oe,t.createInvoicesAPI=Xt,t.createMenuAPI=ue,t.createOrdersAPI=Zt,t.createPaymentsAPI=ee,t.createProductsAPI=Wt,t.createRegionsAPI=he,t.createSazitoClient=function(t){return new Vt(t)},t.createSearchAPI=ie,t.createShippingAPI=te,t.createUsersAPI=ae,t.createVisitsAPI=ce,t.createWalletAPI=ne,t.dynamicForms=me,t.entityRoutes=pe,t.feedbacks=re,t.general=le,t.images=oe,t.invoices=Xt,t.menu=ue,t.orders=Zt,t.payments=ee,t.products=Wt,t.regions=he,t.search=ie,t.shipping=te,t.transformAddToCartInput=function(t,e,a){const i={product_variants:[{id:t,count:e}]};return a&&(i.form_attributes=m(a)),i},t.transformApiResponse=h,t.transformCartResponse=C,t.transformCreateCartInput=function(t){if(!p(t))return{product_variants:[]};const e=t.variants||t.productVariants||[],a={product_variants:Array.isArray(e)?e.map(t=>p(t)?{id:t.id||t.variantId,count:t.count||t.quantity,form_attributes:t.formAttributes?m(t.formAttributes):void 0}:{}):[]};return t.coupon&&(a.coupon=t.coupon),a},t.transformInvoiceResponse=S,t.transformProductListResponse=B,t.transformRequestKeys=m,t.transformResponseKeys=l,t.transformShippingAddressInput=function(t){if(p(t)){const e={...t};return delete e.user,{shipping_address:m(e)}}return{shipping_address:m(t)}},t.users=ae,t.visits=ce,t.wallet=ne});
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).SazitoSDK={})}(this,function(t){"use strict";const e={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 a(t){return{...e,...t,retry:{...e.retry,...t.retry},cache:{...e.cache,...t.cache},customFetchApi:t.customFetchApi||("undefined"!=typeof fetch?fetch:void 0)}}class i{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 r{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 n=new Set(["mobile_phone","phone_number"]);function s(t){return t.replace(/[۰-۹٠-٩]/g,t=>{const e=t.charCodeAt(0);return String(e>=1776?e-1776:e-1632)})}const o={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",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"},d=Object.values(o).reduce((t,e)=>(t[e]=(t[e]||0)+1,t),{}),c=Object.entries(o).reduce((t,[e,a])=>(1===d[a]&&(t[a]=e),t),{});function p(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function u(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function l(t){return!(null===t||"object"!=typeof t||Array.isArray(t)||t instanceof Date)}function m(t,e){const a={...t};for(const t of e)delete a[t];return a}function h(t){if(!l(t))return Array.isArray(t)?t.map(t=>h(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=o[a];t||(t=p(a)),l(i)?e[t]=h(i):Array.isArray(i)?e[t]=i.map(t=>h(t)):e[t]=i}return e}function y(t){if(!l(t))return Array.isArray(t)?t.map(t=>y(t)):t;const e={};for(const[a,i]of Object.entries(t)){let t=c[a];t||(t=u(a)),l(i)?e[t]=y(i):Array.isArray(i)?e[t]=i.map(t=>y(t)):e[t]="string"==typeof i&&n.has(t)?s(i):i}return e}function g(t){const e=t;if(l(e?.data?.result)){const t=e.data.result,a=Object.keys(t);return 1===a.length&&l(t[a[0]])?h(t[a[0]]):h(t)}return h(t)}function f(t){if(!t)return{};if(!l(t))return{};const{general:e,shop:a,checkout:i,features:r,wallet:n,tajrobe:s,domain:o,enamad:d,google:c,logo:p,social:u,...m}=t,h={...l(e)?e:{},...l(a)?a:{}},{registerType:y,showProductStockNumber:g,...f}=h||{};return{...m,scripts:{enamad:d,google:c},shop:w({...f,domain:o,logo:p,social:u}),settings:{checkout:_(i),features:C(r),wallet:S(n),tajrobe:T(s),registerType:b(y),showProductStockNumber:v(g)}}}function _(t){if(!l(t))return{};const e=l(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 b(t){return"string"==typeof t?t:""}function v(t){return"boolean"==typeof t?t:l(t)&&Object.prototype.hasOwnProperty.call(t,"enabled")?v(t.enabled):1===t||"1"===t||"true"===t}function w(t){if(!l(t))return{};const e={...t};if(l(e.city)){const t=m(e.city,["createdAt","updatedAt"]);let a=t.region;l(a)&&(a=m(a,["createdAt","updatedAt","cities"])),t.region=a,e.city=t}return e}const A={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"},P=new Set(["activateAlopeykAdvanced","activate_alopeyk_advanced"]),I=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 C(t){if(!l(t))return{};const e={},a=(t,a)=>{if(P.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)};l(t.flags)&&Object.entries(t.flags).forEach(([t,e])=>{a(t,e)}),l(t.configurations)&&Object.entries(t.configurations).forEach(([t,e])=>{a(t,e)}),Object.entries(t).forEach(([t,e])=>{"flags"!==t&&"premium"!==t&&"configurations"!==t&&(l(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("_")?p(t):t,a=A[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);I.has(a)||(i[a]=e)});const r={...i};return l(t.premium)&&(r.premium=t.premium),r}function S(t){if(!l(t))return{};const e=l(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 T(t){if(!l(t))return{};const e=l(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 z(t){const e=g(t);if(!l(e))return{};const a=Array.isArray(e.items)?e.items.map(t=>function(t){if(!l(t))return{};const e=U(t),a=x(t.productVariantId??e.variantId)??e.variantId;return{id:B(t.id??t.cartProductId)??"",productVariantId:a,quantity:x(t.quantity)??0,unitPrice:x(t.unitPrice)??0,lineTotal:x(t.lineTotal)??0,product:e,formAttributes:t.formAttributes,formFields:t.formFields,bookingAttributes:t.bookingAttributes}}(t)):[];return{...e,items:a,netTotal:x(e.netTotal)??0,grossTotal:x(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=g(t);if(!l(e))return{};const a=m(e,["shippingMethod","user","userData"]),i=Array.isArray(e.items)?e.items.map(t=>function(t){if(!l(t))return{};const e=U(t),a=x(t.productVariantId??e.variantId)??e.variantId,i=Array.isArray(e.attributes)?e.attributes:[],r=j(e.hasMaxOrder??t.hasMaxOrder);return{id:B(t.id??t.invoiceItemId??t.cartProductId)??"",productVariantId:a,productId:x(e.productId??t.productId),name:M(t.name)??M(e.name)??"",url:M(e.url)??M(t.url),attributes:i,productType:M(e.productType)??M(t.productType),hasMaxOrder:r,maxOrderQuantity:x(e.maxOrderQuantity??t.maxOrderQuantity),minOrderQuantity:x(e.minOrderQuantity??t.minOrderQuantity),image:q(t.image??e.image),quantity:x(t.quantity)??0,unitPrice:x(t.unitPrice)??0,lineTotal:x(t.lineTotal)??0,rawPrice:x(t.rawPrice??t.originalPrice)??0,customerProfit:x(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=l(n)&&l(n.discountCode)?M(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}}(O(e.shippingAddress)),shippingItems:Array.isArray(e.shippingItems)?e.shippingItems.map(t=>function(t){if(!l(t))return{};const e=l(t.rate)?t.rate:l(t.shippingRate)?t.shippingRate:l(t.shippingMethod)?t.shippingMethod:t;return{invoiceItemIds:F(t),rate:J(e)}}(t)):[],discountUsages:r,netTotal:x(e.netTotal)??0,finalTotal:x(e.finalTotal)??0,vat:x(e.vat)??0,vatPercent:x(e.vatPercent)??0,itemsDiscount:x(e.itemsDiscount)??0,discountTotal:x(e.discountTotal)??0,customerProfit:x(e.customerProfit)??0,customerProfitPercentage:x(e.customerProfitPercentage)??0,itemsTotalRawPrice:x(e.itemsTotalRawPrice)??0,couponTotal:x(e.couponTotal)??0,shippingTotal:x(e.shippingTotal)??0,creditTotal:x(e.creditTotal)??0,needsShipping:Boolean(e.needsShipping),userComment:"string"==typeof e.userComment?e.userComment:void 0,discountCode:s}}function k(t){return O(t)}function N(t){const e=g(t);if(l(e))return R(e)}function R(t){if(!t)return;const e=function(t){const e=D(t);if(!e)return;if(1===Object.keys(e).length&&l(e.user))return D(e.user)??e.user;return e}(t);if(!e)return;const a={},i=x(e.id);void 0!==i&&(a.id=i);const r=M(e.email);r&&(a.email=r);const n=M(e.mobilePhone)??M(e.phoneNumber);n&&(a.mobilePhone=n);const s=M(e.phoneNumber);s&&s!==n&&(a.phoneNumber=s);const o=M(e.firstName);o&&(a.firstName=o);const d=M(e.lastName);d&&(a.lastName=d);const c=M(e.birthDate);return c&&(a.birthDate=c),Object.keys(a).length>0?a:void 0}function O(t){if(!t||0===Object.keys(t).length)return;const e=R(t.user),a=D(t.region),i=D(t.city),r=D(i?.region),n=M(t.regionName)??G(t.region),s=$(a??t.region,{fallbackId:x(t.regionId),fallbackName:n})??$(r,{fallbackId:x(t.regionId),fallbackName:n}),o=x(t.regionId)??s?.id,d=M(t.cityName)??M(i?.name)??G(t.city),c=function(t,e={}){if(null==t)return;const a=D(t),i=x(a?.id)??x(t)??e.fallbackId,r=M(a?.name)??G(t)??e.fallbackName;if(void 0===i||!r)return;const n={id:i,name:r},s=x(a?.regionId)??e.fallbackRegionId;void 0!==s&&(n.regionId=s);const o=x(a?.latitude);void 0!==o&&(n.latitude=o);const d=x(a?.longitude);void 0!==d&&(n.longitude=d);return n}(i??t.city,{fallbackId:x(t.cityId),fallbackName:d,fallbackRegionId:o}),p=M(t.firstName)??e?.firstName??"",u=M(t.lastName)??e?.lastName??"",l={id:x(t.id)??0,identifier:M(t.identifier)??"",firstName:p,lastName:u,city:c??{id:x(t.cityId??t.city)??0,name:d??"",...void 0!==o?{regionId:o}:{}},address:M(t.address)??""},m=M(t.mobilePhone)??M(t.phoneNumber)??e?.mobilePhone??e?.phoneNumber,h=M(t.phoneNumber)??e?.phoneNumber;m&&(l.mobilePhone=m),h&&h!==m&&(l.phoneNumber=h);const y=M(t.email)??e?.email;y&&(l.email=y),s&&(l.region=s);const g=M(t.postalCode);g&&(l.postalCode=g);const f=M(t.description);f&&(l.description=f);const _=x(t.latitude);void 0!==_&&(l.latitude=_);const b=x(t.longitude);void 0!==b&&(l.longitude=b);const v=j(t.userSetCoordinatesBefore);return void 0!==v&&(l.userSetCoordinatesBefore=v),l}function $(t,e={}){if(null==t)return;const a=D(t),i=x(a?.id)??x(t)??e.fallbackId,r=M(a?.name)??G(t)??e.fallbackName;return void 0!==i&&r?{id:i,name:r}:void 0}function D(t){if(l(t))return l(t.data)?t.data:t}function G(t){const e=M(t);if(e)return void 0===x(e)?e:void 0}function F(t){return(Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:void 0!==t.invoiceItemId?[t.invoiceItemId]:[]).map(t=>B(t)).filter(t=>void 0!==t)}function x(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 M(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 B(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 U(t){if(!l(t))return{variantId:0,name:"",attributes:[]};const e=l(t.variant)?t.variant:void 0,a=l(e?.product)?e.product:void 0,i=l(t.product)?t.product:void 0,r=x(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:x(i?.productId??t.productId??a?.id),name:M(i?.name)??M(t.name)??"",url:M(i?.url)??M(t.url)??M(a?.url),image:q(i?.image??t.image),attributes:n,productType:M(i?.productType)??M(t.productType)??M(a?.productType),hasMaxOrder:i?.hasMaxOrder??t.hasMaxOrder??e?.hasMaxOrder,maxOrderQuantity:x(i?.maxOrderQuantity??t.maxOrderQuantity??e?.maxOrderQuantity),minOrderQuantity:x(i?.minOrderQuantity??t.minOrderQuantity??e?.minOrderQuantity)}}function K(t){if(!l(t))return{};const e=m(t,["staticUrl","summary","tags","slug"]);return e.variants&&Array.isArray(e.variants)&&(e.variants=e.variants.map(t=>l(t)?m(t,["name","title","product","status","soldCount"]):{})),e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(t=>l(t)?{id:t.id,name:t.name,url:t.url}:{})),e.images&&Array.isArray(e.images)&&(e.images=e.images.map(t=>q(t)??{})),e}function q(t){return l(t)?m(t,["widthRatio","heightRatio","thumb","order"]):t}function L(t){const e=K(t);return e?m(e,["themeConfig"]):e}function Y(t){const e=g(t);if(e.items&&Array.isArray(e.items)){const t=x(e.total)??e.items.length,a=x(e.pageSize)??e.items.length,i=x(e.page)??1,r=x(e.totalPages)??Math.ceil(t/a);return{items:e.items.map(t=>L(t)),total:t,page:i,pageSize:a,totalPages:r}}return e}function V(t){if(!l(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=>L(t)),a.products.total=x(e.productsCount)??0,a.products.page=x(e.productsPageNumber)??1,a.products.pageSize=x(e.productsPageSize)??20),Array.isArray(e.blogPages)&&(a.blogPages.items=e.blogPages.map(t=>et(t)),a.blogPages.total=x(e.blogPagesCount)??0,a.blogPages.page=x(e.blogPagesPageNumber)??1,a.blogPages.pageSize=x(e.blogPagesPageSize)??20),Array.isArray(e.cmsPages)&&(a.cmsPages.items=e.cmsPages.map(t=>et(t)),a.cmsPages.total=x(e.cmsPagesCount)??0,a.cmsPages.page=x(e.cmsPagesPageNumber)??1,a.cmsPages.pageSize=x(e.cmsPagesPageSize)??20),Array.isArray(e.categories)&&(a.productCategories.items=e.categories.map(t=>X(t)),a.productCategories.total=x(e.productCategoriesCount)??0,a.productCategories.page=x(e.productCategoriesPageNumber)??1,a.productCategories.pageSize=x(e.productCategoriesPageSize)??20),a}function Q(t){const e=g(t);if(!l(e))return[];return(Array.isArray(e.paymentTypes)?e.paymentTypes:Array.isArray(e.methods)?e.methods:[]).map(t=>l(t)?{id:x(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:x(t.paymentSubType)??null,order:x(t.order)??0,isDefault:Boolean(t.isDefault)}:{id:0,code:"",title:"",titleFa:"",description:null,paymentSubType:null,order:0,isDefault:!1})}function W(t){const e=g(t);return(Array.isArray(e)?e:l(e)&&Array.isArray(e.shippingMethods)?e.shippingMethods:[]).map(t=>function(t){if(!l(t))return{id:0,name:"",type:""};return{id:x(t.id)??0,name:M(t.name)??"",type:M(t.type)??""}}(t))}function H(t){const e=g(t);if(!l(e))return{shippingMethods:[],groupedShippingRates:{},itemsShippingRate:[]};const a={};if(Array.isArray(e.shippingMethods)&&e.shippingMethods.forEach((t,e)=>{if(!l(t))return;const i=Array.isArray(t.shippingRate)?t.shippingRate.map(t=>J(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&&l(e.groupedShippingRates))for(const[t,i]of Object.entries(e.groupedShippingRates))a[t]=Array.isArray(i)?i.map(t=>J(t)):[];return{shippingMethods:[],groupedShippingRates:a,itemsShippingRate:Array.isArray(e.itemsShippingRate)?e.itemsShippingRate.map(t=>l(t)?{invoiceItemId:B(t.invoiceItemId)??F(t)[0]??"",shippingRate:J(t.shippingRate??t.rate??t)}:{invoiceItemId:"",shippingRate:J(void 0)}):[]}}function J(t){return l(t)?{id:x(t.id??t.rateId)??0,name:M(t.name)??"",price:x(t.price??t.amount)??0,description:M(t.description??t.deliveryDescription??t.details),icon:M(t.icon??t.iconUrl??t.logo),color:M(t.color??t.bgColor??t.backgroundColor??t.iconColor),type:M(t.type)}:{id:0,name:"",price:0}}function Z(t){return l(t)?m(t,["staticUrl","products","items"]):{}}function X(t){const e=Z(t);return e?m(e,["themeConfig"]):{}}function tt(t){return l(t)?m(t,["staticUrl","urlKey"]):{}}function et(t){const e=tt(t);return e?m(e,["themeConfig"]):{}}function at(t){const e=g(t);if(!e||!e.route)return e??{};const a=l(e.route)?e.route:{};if(a.entity){switch(a.entityType){case"product":a.entity=K(a.entity);break;case"product_category":a.entity=Z(a.entity);break;case"cms_page":case"blog_page":a.entity=tt(a.entity)}l(a.entity)&&(a.entity=m(a.entity,["id"])),!a.url&&l(a.entity)&&a.entity.url&&(a.url=a.entity.url)}return a}function it(t){if(!l(t))return{};const e={...t};return e.entity&&(e.entity=X(e.entity),l(e.entity)&&(e.entity=m(e.entity,["id"]))),e.children&&Array.isArray(e.children)&&(e.children=e.children.map(it)),e}function rt(t){const e=g(t);return e?e.cmsPages&&Array.isArray(e.cmsPages)?{items:e.cmsPages.map(et),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=>et(t)),total:e.total||e.items.length,page:e.page||1,pageSize:e.pageSize||e.items.length}:e:{}}function nt(t){if(!l(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 st(t){if(!l(t))return{};const e={};if(t.entityType&&(e.entityType=t.entityType),void 0!==t.entityId&&(e.entityId=t.entityId),l(t.entity)){const a=m(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=>st(t))),e}function ot(t){const e=g(t);if(!e||!e.tree)return e??{};const a=l(e.tree)?e.tree:{};return l(a.treeStructure)&&Array.isArray(a.treeStructure.nodes)&&(a.treeStructure.nodes=a.treeStructure.nodes.map(t=>st(t))),e}class dt{constructor(t){this.config=t,this.baseUrl="http://api.sazito.com:8080",this.domain=t.domain,this.tokenStorage=new i,this.cache=new r,this.fetchApi=t.customFetchApi.bind(globalThis)}async get(t,e){const a=this.buildUrl(t,e?.params),i=r.generateKey("GET",a,e?.params);if(!1!==e?.cache){const e=this.getApiName(t),a=this.config.cache[e];if(a?.enabled&&a.ttl){const e=this.cache.get(i,a.ttl);if(e)return this.config.debug&&console.log("[Sazito SDK] Cache hit:",t),{data:e}}}const n=await this.request("GET",a,e);return n.data&&!1!==e?.cache&&this.cache.set(i,n.data),n}async post(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("POST",i,{...a,body:n,rawBody:r,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=r.headers.get("content-type");let c;if(c=d?.includes("application/json")?await r.json():await r.text(),a?.skipTransform&&r.ok)return{data:c};const p=void 0!==c?.result?c.result:c;this.config.debug&&console.log(`[Sazito SDK] ${t} ${e}:`,{status:r.status,data:p});let u=p?h(p):p;const l=["cart","product","user","order","invoice","payment","shippingAddress"];if(u&&"object"==typeof u&&!Array.isArray(u)){const t=Object.keys(u);1===t.length&&l.includes(t[0])&&"object"==typeof u[t[0]]&&null!==u[t[0]]&&(u=u[t[0]])}return r.ok?{data:u}:{error:{status:r.status,message:u?.message||p?.message||r.statusText||"Request failed",type:"api",details:u}}}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: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}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}clearCache(){this.cache.clear()}}class ct{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 pt{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 ct)}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 ut="/api/v1/product_categories",lt="/api/v1/search",mt="/api/v2/carts",ht="/api/v2/invoices",yt="/api/v2/shipping_addresses",gt="/api/v2/payments",ft="/api/v1/orders",_t="/api/v1/users",bt="/api/v1/sessions",vt="/api/v1/feedbacks",wt="/api/v1/cms_pages",At="/api/v1/images",Pt="/api/v1/scheduler/events",It="/api/v1/scheduler/bookings",Ct="/api/v1/entity_route/route",St="/api/v1/feedbacks/comments/details";class Tt{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(Ct,{...e,params:{url_part:a}});if(i.data){const t=at(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:Y(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(lt,{...a,params:i});if(r.data){return{data:V(r.data)}}return r}}class zt{constructor(t){this.http=t}async get(t,e){const a=await this.http.get(`${ut}/${t}`,e);if(a.data){const t=function(t){const e=g(t);return e?Z(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(ut,{...e,params:a});if(i.data){const t=function(t){const e=g(t);return e?(e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(X)),l(e.tree)&&l(e.tree.treeStructure)&&Array.isArray(e.tree.treeStructure.nodes)&&(e.tree.treeStructure.nodes=e.tree.treeStructure.nodes.map(it)),e):{}}(i.data);return{data:t}}return i}}class Et{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(`${mt}/0`,{...t,params:{identifier:e.identifier}});return a.data?{data:z(a.data)}:(a.error&&this.clearCart(),a)}async create(t,e){const a=await this.http.post(mt,t,e);if(!a.data)return a;const i=z(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(`${mt}/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=z(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(`${mt}/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=z(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(`${mt}/0/remove_products_from_cart`,{identifier:i.identifier,cartProductId:String(t),variants:[{id:e}]},a);if(r.data){const t=z(r.data);return this.persistCartCredentials(t),{data:t}}return r}clearCart(){this.credentials.clearCartCredentials()}}class kt{constructor(t){this.http=t}async list(t,e){const a={page_number:t?.pageNumber??1,page_size:t?.pageSize??100};return t?.filters&&t.filters.length>0&&(a.filters=JSON.stringify(t.filters)),this.http.get(ft,{...e,params:a})}async get(t,e){return this.http.get(`${ft}/${t}`,e)}}class Nt{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(`${ht}/${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(ht,{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(`${ht}/${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(`${ht}/${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(`${ht}/${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(`${ht}/${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(`${ht}/${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(`${ht}/${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(`${ht}/${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(`${ht}/${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(`${ht}/${e.id}/applicable_shipping_methods`,{...t,cache:t?.cache??!1,params:{identifier:e.identifier}});return a.data?{data:H(a.data)}:a}clearInvoice(){this.credentials.clearInvoiceCredentials()}}class Rt{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(yt,{shipping_address:a},e);if(i.data){const t=k(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(yt,{identifier:a.identifier,shipping_address:i},e);if(r.data){const t=k(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(yt,{...t,cache:t?.cache??!1});if(e.error)return{error:e.error};return{data:this.extractAddressList(e.data).map(t=>k(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(`${yt}/${e.id}`,{...t,params:{identifier:e.identifier}});if(a.data){const t=k(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:W(e.data)}:e.error?{error:e.error}:{data:[]}}clearAddress(){this.credentials.clearShippingCredentials()}}class Ot{constructor(t,e){this.http=t,this.credentials=e,this.pinchedPayments=new Set}async getMethods(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${gt}/list`,{invoice_identifier:e.identifier},t);return a.data?{data:Q(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(gt,{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,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.submitPaymentStep(void 0,t)}async verify(t,e){return this.submitPaymentStep(t,e)}async processStep(t,e){return this.submitPaymentStep(t,e)}async submitPaymentStep(t,e){const a=this.credentials.getPaymentCredentials();if(!a)return{error:{message:"No payment found. Please create a payment first.",type:"validation"}};const{paymentIdentifier:i,...r}=t??{},n=await this.http.post(`${gt}/${a.id}/process_payment_step`,{paymentIdentifier:i||a.identifier,...r},this.withExactJsonHeader(e));return this.finalizeStepResponse(n,a.id,e)}async processStepForm(t,e){const a=this.credentials.getPaymentCredentials();if(!a)return{error:{message:"No payment found",type:"validation"}};const i=this.buildProcessStepFormData(t,a.identifier);if(!i)return{error:{message:"FormData is not available in this runtime.",type:"validation"}};const r=await this.http.post(`${gt}/${a.id}/process_payment_step`,i,e);return this.finalizeStepResponse(r,a.id,e)}async pollUntilSettled(t,e=15e3){let a=!0;for(;a;){const i=await this.verify(void 0,t);if(!i.data)return i;if("pending"!==i.data.action)return a=!1,i;await new Promise(t=>setTimeout(t,e))}return{error:{message:"Payment polling exited unexpectedly",type:"network"}}}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"}}}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=y(t),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}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,""))}async finalizeStepResponse(t,e,a){if(!t.data)return t;const i=t=>!!t&&"object"==typeof t&&!Array.isArray(t);let r=t.data;if("string"==typeof r)try{r=JSON.parse(r)}catch{return{error:{message:"Invalid payment step response",type:"api"}}}const n=r;if(i(n)){const t="string"==typeof n.error?n.error:"",e=Number(n.error_code??0);if(t||e)return{error:{message:t||"Payment step failed",type:"api",status:Number(n.status)||void 0}}}const s=i(n)&&i(n.result)?n.result:n,o=this.normalizeAction(s);return await this.callPinchAfterSuccessfulPayment(o,e,a),{data:o}}normalizeAction(t){return"show_order"===t?.action?{...t,action:"showOrder"}:t}async callPinchAfterSuccessfulPayment(t,e,a){if("showOrder"!==t.action)return;if(this.pinchedPayments.has(e))return;this.pinchedPayments.add(e);(await this.http.post("/api/v1/pinch/order",{},a)).error&&this.pinchedPayments.delete(e)}}class $t{constructor(t){this.http=t}normalizeUserResponse(t){if(!t.data)return t;const e=N(t.data);return e?{data:e}:t}normalizeLoginResponse(t){if(!t.data||!t.data.user)return t;const e=N(t.data.user);return e?{data:{...t.data,user:e}}:t}async login(t,e){const a=await this.http.post(`${bt}/login`,t,e);return this.normalizeLoginResponse(a)}async requestMobileOTP(t,e){return this.http.post(`${bt}/login_request`,t,e)}async verifyMobileOTP(t,e){const a=await this.http.post(`${bt}/login_request_verification`,t,e);return this.normalizeLoginResponse(a)}async requestEmailLogin(t,e){return this.http.post(`${_t}/email_login_request`,t,e)}async register(t,e){const a=await this.http.post(`${_t}/register`,t,e);return this.normalizeUserResponse(a)}async getCurrentUser(t){const e=await this.http.get(`${_t}/current`,t);return this.normalizeUserResponse(e)}async updateProfile(t,e,a){const i=await this.http.put(`${_t}/${t}`,e,a);return this.normalizeUserResponse(i)}async requestMobilePhoneUpdate(t,e){return this.http.post(`${_t}/update_mobile_phone_request`,t,e)}async verifyMobilePhoneUpdate(t,e){const a=await this.http.post(`${_t}/update_mobile_phone_verification`,t,e);return this.normalizeUserResponse(a)}async forgotPassword(t,e){return this.http.post(`${_t}/forgot_password`,t,e)}async revivePassword(t,e){const a=await this.http.post(`${_t}/revive_password`,t,e);return this.normalizeLoginResponse(a)}async mergeUser(t){return this.http.post(`${_t}/merge_user`,{},t)}}class Dt{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(lt,{...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:V(r.data)}}return r}}class Gt{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(St,t,e)}async getProductStatistics(t,e){const a=await this.http.get(`${St}/${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(`${St}/${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(vt,{...e,params:this.transformLegacyFilters(t)})}async create(t,e){return this.http.post(vt,t,e)}async get(t,e){return this.http.get(`${vt}/${t}`,e)}}class Ft{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?.page_number??1,i=t?.page_size??100;return this.http.get("/api/v1/wallet/transactions",{...e,params:{page_number:a,page_size:i}})}async applyCredit(t,e){const a=this.validateInvoiceId(t);return a||this.http.post(`${ht}/${t}/add_credit`,{},e)}async removeCredit(t,e){const a=this.validateInvoiceId(t);return a||this.http.post(`${ht}/${t}/remove_credit`,{},e)}}class xt{constructor(t){this.http=t}async getPage(t,e){const a=await this.http.get(Ct,{...e,params:{url_part:t}}),i=at(a.data);if("cms_page"!==i.entityType)throw new Error(`Expected CMS page at ${t}, but got ${i.entityType}`);if("blog"===i.entity.cmsPageType)throw new Error(`Expected CMS page at ${t}, but got blog page`);return{...a,data:i.entity}}async listPages(t,e){const a=nt({...t,cmsPageTypes:"normal"}),i=await this.http.get(wt,{...e,params:a});return{...i,data:rt(i.data)}}async getBlogPost(t,e){const a=await this.http.get(Ct,{...e,params:{url_part:t}}),i=at(a.data);if("cms_page"!==i.entityType)throw new Error(`Expected blog post at ${t}, but got ${i.entityType}`);if("blog"!==i.entity.cmsPageType)throw new Error(`Expected blog post at ${t}, but got CMS page`);return{...a,data:i.entity}}async listBlogPosts(t,e){const a=nt({...t,cmsPageTypes:"blog"}),i=await this.http.get(wt,{...e,params:a});return{...i,data:rt(i.data)}}async listAll(t,e){const a=nt(t),i=await this.http.get(wt,{...e,params:a});return{...i,data:rt(i.data)}}}class Mt{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(At,a,{...e,headers:i})}async delete(t,e){return this.http.delete(`${At}/${t}`,e)}}class jt{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 Bt{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(Pt,{...e,params:this.transformEventFilters(t)})}async getEvent(t,e){const a=await this.http.get(`${Pt}/${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(It,t,e)}async listBookings(t){return this.http.get(It,t)}async cancelBooking(t,e){return this.http.post(`${It}/${t}/cancel`,{},e)}}class Ut{constructor(t){this.http=t}async resolve(t,e){const a=await this.http.get(Ct,{...e,params:{url_part:t}});if(a.data){return{data:at(a.data)}}return a}}class Kt{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}}),i=a.data?ot(a.data):a.data,r=i?.tree?.treeStructure?.nodes||[],n=this.convertRawTreeToNavigation(r);return{...a,data:n}}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{entityType:e,details:a,entity:i}=t;return a&&!a.isTitleDefault&&a.title?a.title:a&&!a.isTitleDefault&&a.name?a.name:"product_category"===e||"product"===e?i?.name||"":("cms_page"===e||"blog_page"===e)&&i?.name||""}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 qt{constructor(t){this.http=t}async getInfo(t){const e=await this.http.get("/api/v2/general/info",t);return e.data?{data:f(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 Lt{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 Yt(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function Vt(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 Qt(t){return"string"==typeof t?t.trim():""}class Wt{constructor(t){this.http=t}normalizeCity(t){return Yt(t)?{id:Vt(t.id),name:Qt(t.name),latitude:Vt(t.latitude),longitude:Vt(t.longitude)}:{id:0,name:"",latitude:0,longitude:0}}normalizeRegion(t){if(!Yt(t))return{id:0,name:"",cities:[]};const e=Array.isArray(t.cities)?t.cities:[];return{id:Vt(t.id),name:Qt(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:Yt(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 Ht{constructor(t,e){const i=a(t);this.http=new dt(i),this.tokenStorage=this.http.getTokenStorage(),this.credentialsManager=e??new pt,this.products=new Tt(this.http),this.categories=new zt(this.http),this.cart=new Et(this.http,this.credentialsManager),this.invoices=new Nt(this.http,this.credentialsManager),this.shipping=new Rt(this.http,this.credentialsManager),this.payments=new Ot(this.http,this.credentialsManager),this.orders=new kt(this.http),this.users=new $t(this.http),this.search=new Dt(this.http),this.feedbacks=new Gt(this.http),this.wallet=new Ft(this.http),this.cms=new xt(this.http),this.images=new Mt(this.http),this.visits=new jt(this.http),this.booking=new Bt(this.http),this.entityRoutes=new Ut(this.http),this.menu=new Kt(this.http),this.general=new qt(this.http),this.dynamicForms=new Lt(this.http),this.regions=new Wt(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 Jt(t){return function(t){if(!t||"object"!=typeof t)return!1;const e=t;return e.http instanceof dt&&e.credentials instanceof pt}(t)?t:function(t){const e=a(t);return{http:new dt(e),credentials:new pt}}(t)}function Zt(t){const{http:e}=Jt(t);return new Tt(e)}function Xt(t){const{http:e}=Jt(t);return new zt(e)}function te(t){const{http:e,credentials:a}=Jt(t);return new Et(e,a)}function ee(t){const{http:e}=Jt(t);return new kt(e)}function ae(t){const{http:e,credentials:a}=Jt(t);return new Nt(e,a)}function ie(t){const{http:e,credentials:a}=Jt(t);return new Rt(e,a)}function re(t){const{http:e,credentials:a}=Jt(t);return new Ot(e,a)}function ne(t){const{http:e}=Jt(t);return new $t(e)}function se(t){const{http:e}=Jt(t);return new Dt(e)}function oe(t){const{http:e}=Jt(t);return new Gt(e)}function de(t){const{http:e}=Jt(t);return new Ft(e)}function ce(t){const{http:e}=Jt(t);return new xt(e)}function pe(t){const{http:e}=Jt(t);return new Mt(e)}function ue(t){const{http:e}=Jt(t);return new jt(e)}function le(t){const{http:e}=Jt(t);return new Bt(e)}function me(t){const{http:e}=Jt(t);return new Ut(e)}function he(t){const{http:e}=Jt(t);return new Kt(e)}function ye(t){const{http:e}=Jt(t);return new qt(e)}function ge(t){const{http:e}=Jt(t);return new Lt(e)}function fe(t){const{http:e}=Jt(t);return new Wt(e)}t.CredentialsManager=pt,t.HttpClient=dt,t.MemoryStorage=ct,t.SazitoClient=Ht,t.TokenStorage=i,t.booking=le,t.cart=te,t.categories=Xt,t.cms=ce,t.createBookingAPI=le,t.createCMSAPI=ce,t.createCartAPI=te,t.createCategoriesAPI=Xt,t.createDynamicFormsAPI=ge,t.createEntityRoutesAPI=me,t.createFeedbacksAPI=oe,t.createGeneralAPI=ye,t.createImagesAPI=pe,t.createInvoicesAPI=ae,t.createMenuAPI=he,t.createOrdersAPI=ee,t.createPaymentsAPI=re,t.createProductsAPI=Zt,t.createRegionsAPI=fe,t.createSazitoClient=function(t,e){return new Ht(t,e)},t.createSearchAPI=se,t.createShippingAPI=ie,t.createUsersAPI=ne,t.createVisitsAPI=ue,t.createWalletAPI=de,t.dynamicForms=ge,t.entityRoutes=me,t.feedbacks=oe,t.general=ye,t.images=pe,t.invoices=ae,t.menu=he,t.orders=ee,t.payments=re,t.products=Zt,t.regions=fe,t.search=se,t.shipping=ie,t.toEnglishDigits=s,t.transformAddToCartInput=function(t,e,a){const i={product_variants:[{id:t,count:e}]};return a&&(i.form_attributes=y(a)),i},t.transformApiResponse=g,t.transformCartResponse=z,t.transformCreateCartInput=function(t){if(!l(t))return{product_variants:[]};const e=t.variants||t.productVariants||[],a={product_variants:Array.isArray(e)?e.map(t=>l(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},t.transformInvoiceResponse=E,t.transformProductListResponse=Y,t.transformRequestKeys=y,t.transformResponseKeys=h,t.transformShippingAddressInput=function(t){if(l(t)){const e={...t};return delete e.user,{shipping_address:y(e)}}return{shipping_address:y(t)}},t.users=ne,t.visits=ue,t.wallet=de});
|
package/package.json
CHANGED