@sazito/client-sdk 1.2.5 → 1.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -37,19 +37,24 @@ interface JsonObject {
37
37
  [key: string]: JsonValue;
38
38
  }
39
39
  type JsonArray = JsonValue[];
40
+ /** Error returned by every SDK API method. */
41
+ interface SazitoError {
42
+ status?: number;
43
+ message: string;
44
+ type: 'network' | 'api' | 'validation';
45
+ details?: JsonValue;
46
+ }
40
47
  /**
41
- * Unified response pattern for all API calls
42
- * No exceptions are thrown - errors are returned in the error field
48
+ * Unified response pattern for all API calls.
49
+ * API failures are returned in `error`; public API methods do not throw them.
43
50
  */
44
- interface SazitoResponse<T> {
45
- data?: T;
46
- error?: {
47
- status?: number;
48
- message: string;
49
- type: 'network' | 'api' | 'validation';
50
- details?: JsonValue;
51
- };
52
- }
51
+ type SazitoResponse<T> = {
52
+ data: T;
53
+ error?: never;
54
+ } | {
55
+ data?: never;
56
+ error: SazitoError;
57
+ };
53
58
  /**
54
59
  * Paginated response wrapper
55
60
  */
@@ -869,6 +874,15 @@ declare class HttpClient {
869
874
  * Core request method
870
875
  */
871
876
  private request;
877
+ /**
878
+ * Parse JSON responses from text so an invalid JSON error body can still be
879
+ * returned using the standard API-error envelope.
880
+ */
881
+ private parseResponseBody;
882
+ /** Extract a useful message from the common backend error shapes. */
883
+ private extractErrorMessage;
884
+ /** Keep network error details serializable, matching `SazitoError.details`. */
885
+ private serializeErrorDetails;
872
886
  /**
873
887
  * Build full URL with query params
874
888
  */
@@ -1660,6 +1674,8 @@ interface CMSFilters {
1660
1674
  declare class CMSAPI {
1661
1675
  private http;
1662
1676
  constructor(http: HttpClient);
1677
+ private missingDataError;
1678
+ private unexpectedEntityError;
1663
1679
  /**
1664
1680
  * Get CMS page by URL path
1665
1681
  * Uses entity routes API (recommended approach)
@@ -2298,4 +2314,4 @@ declare function transformAddToCartInput(variantId: number, quantity: number, fo
2298
2314
  declare function transformCreateCartInput(input: TransformValue): TransformObject;
2299
2315
 
2300
2316
  export { CredentialsManager, HttpClient, MemoryStorage, SazitoClient, TokenStorage, createBookingAPI as booking, createCartAPI as cart, createCategoriesAPI as categories, createCMSAPI as cms, createBookingAPI, createCMSAPI, createCartAPI, createCategoriesAPI, createDynamicFormsAPI, createEntityRoutesAPI, createFeedbacksAPI, createGeneralAPI, createImagesAPI, createInvoicesAPI, createMenuAPI, createOrdersAPI, createPaymentsAPI, createProductsAPI, createRegionsAPI, createSazitoClient, createSearchAPI, createShippingAPI, createUsersAPI, createVisitsAPI, createWalletAPI, createDynamicFormsAPI as dynamicForms, createEntityRoutesAPI as entityRoutes, createFeedbacksAPI as feedbacks, createGeneralAPI as general, createImagesAPI as images, createInvoicesAPI as invoices, createMenuAPI as menu, createOrdersAPI as orders, createPaymentsAPI as payments, createProductsAPI as products, createRegionsAPI as regions, createSearchAPI as search, createShippingAPI as shipping, toEnglishDigits, transformAddToCartInput, transformApiResponse, transformCartResponse, transformCreateCartInput, transformInvoiceResponse, transformProductListResponse, transformRequestKeys, transformResponseKeys, transformShippingAddressInput, createUsersAPI as users, createVisitsAPI as visits, createWalletAPI as wallet };
2301
- export type { AddToCartInput, ApplicableShippingMethods, BlogPage, BlogPageEntityRoute, CMSPageEntityRoute, CMSPageType, CacheConfig, Cart, CartCredentials, CartProduct, CheckoutProductSnapshot, City$1 as City, CmsPage, CookieOptions, CreateCartInput, CreateInvoiceInput, CreatePaymentInput, EntityRoute, EntityRouteResponse, EntityType, FormAttributeValue, Image, Invoice, InvoiceCredentials, InvoiceItem, InvoiceItemFormAttributes, InvoiceShippingAddress, InvoiceShippingAddressRegion, ItemShippingRate, JsonArray, JsonObject, JsonPrimitive, JsonValue, MenuItem, MenuNode, MenuTree, Order, OrderFilters, OrdersListResponse, PaginatedResponse, Payment, PaymentAction, PaymentCredentials, PaymentGateway, PaymentMethod, PaymentStatus, PaymentStepFormFields, PaymentStepFormValue, PaymentStepInput, Product, ProductAttribute, ProductAttributeValueObject, ProductCategory, ProductCategoryEntityRoute, ProductEntityRoute, ProductFilters, ProductSort, ProductVariant, RefreshInvoiceInput, Region$1 as Region, RequestOptions, RetryConfig, SazitoConfig, SazitoResponse, SchedulerBookingAttributes, SearchFilters, SearchResponse, ShippingAddress, ShippingAddressCity, ShippingAddressCredentials, ShippingAddressInput, ShippingAddressRegion, ShippingAssignment, ShippingItem, ShippingMethod, ShippingRate, StorageAdapter, Tag, UnknownEntityRoute, UploadedFormFileAttribute, User };
2317
+ export type { AddToCartInput, ApplicableShippingMethods, BlogPage, BlogPageEntityRoute, CMSPageEntityRoute, CMSPageType, CacheConfig, Cart, CartCredentials, CartProduct, CheckoutProductSnapshot, City$1 as City, CmsPage, CookieOptions, CreateCartInput, CreateInvoiceInput, CreatePaymentInput, EntityRoute, EntityRouteResponse, EntityType, FormAttributeValue, Image, Invoice, InvoiceCredentials, InvoiceItem, InvoiceItemFormAttributes, InvoiceShippingAddress, InvoiceShippingAddressRegion, ItemShippingRate, JsonArray, JsonObject, JsonPrimitive, JsonValue, MenuItem, MenuNode, MenuTree, Order, OrderFilters, OrdersListResponse, PaginatedResponse, Payment, PaymentAction, PaymentCredentials, PaymentGateway, PaymentMethod, PaymentStatus, PaymentStepFormFields, PaymentStepFormValue, PaymentStepInput, Product, ProductAttribute, ProductAttributeValueObject, ProductCategory, ProductCategoryEntityRoute, ProductEntityRoute, ProductFilters, ProductSort, ProductVariant, RefreshInvoiceInput, Region$1 as Region, RequestOptions, RetryConfig, SazitoConfig, SazitoError, SazitoResponse, SchedulerBookingAttributes, SearchFilters, SearchResponse, ShippingAddress, ShippingAddressCity, ShippingAddressCredentials, ShippingAddressInput, ShippingAddressRegion, ShippingAssignment, ShippingItem, ShippingMethod, ShippingRate, StorageAdapter, Tag, UnknownEntityRoute, UploadedFormFileAttribute, User };
package/dist/index.d.ts CHANGED
@@ -37,19 +37,24 @@ interface JsonObject {
37
37
  [key: string]: JsonValue;
38
38
  }
39
39
  type JsonArray = JsonValue[];
40
+ /** Error returned by every SDK API method. */
41
+ interface SazitoError {
42
+ status?: number;
43
+ message: string;
44
+ type: 'network' | 'api' | 'validation';
45
+ details?: JsonValue;
46
+ }
40
47
  /**
41
- * Unified response pattern for all API calls
42
- * No exceptions are thrown - errors are returned in the error field
48
+ * Unified response pattern for all API calls.
49
+ * API failures are returned in `error`; public API methods do not throw them.
43
50
  */
44
- interface SazitoResponse<T> {
45
- data?: T;
46
- error?: {
47
- status?: number;
48
- message: string;
49
- type: 'network' | 'api' | 'validation';
50
- details?: JsonValue;
51
- };
52
- }
51
+ type SazitoResponse<T> = {
52
+ data: T;
53
+ error?: never;
54
+ } | {
55
+ data?: never;
56
+ error: SazitoError;
57
+ };
53
58
  /**
54
59
  * Paginated response wrapper
55
60
  */
@@ -869,6 +874,15 @@ declare class HttpClient {
869
874
  * Core request method
870
875
  */
871
876
  private request;
877
+ /**
878
+ * Parse JSON responses from text so an invalid JSON error body can still be
879
+ * returned using the standard API-error envelope.
880
+ */
881
+ private parseResponseBody;
882
+ /** Extract a useful message from the common backend error shapes. */
883
+ private extractErrorMessage;
884
+ /** Keep network error details serializable, matching `SazitoError.details`. */
885
+ private serializeErrorDetails;
872
886
  /**
873
887
  * Build full URL with query params
874
888
  */
@@ -1660,6 +1674,8 @@ interface CMSFilters {
1660
1674
  declare class CMSAPI {
1661
1675
  private http;
1662
1676
  constructor(http: HttpClient);
1677
+ private missingDataError;
1678
+ private unexpectedEntityError;
1663
1679
  /**
1664
1680
  * Get CMS page by URL path
1665
1681
  * Uses entity routes API (recommended approach)
@@ -2298,4 +2314,4 @@ declare function transformAddToCartInput(variantId: number, quantity: number, fo
2298
2314
  declare function transformCreateCartInput(input: TransformValue): TransformObject;
2299
2315
 
2300
2316
  export { CredentialsManager, HttpClient, MemoryStorage, SazitoClient, TokenStorage, createBookingAPI as booking, createCartAPI as cart, createCategoriesAPI as categories, createCMSAPI as cms, createBookingAPI, createCMSAPI, createCartAPI, createCategoriesAPI, createDynamicFormsAPI, createEntityRoutesAPI, createFeedbacksAPI, createGeneralAPI, createImagesAPI, createInvoicesAPI, createMenuAPI, createOrdersAPI, createPaymentsAPI, createProductsAPI, createRegionsAPI, createSazitoClient, createSearchAPI, createShippingAPI, createUsersAPI, createVisitsAPI, createWalletAPI, createDynamicFormsAPI as dynamicForms, createEntityRoutesAPI as entityRoutes, createFeedbacksAPI as feedbacks, createGeneralAPI as general, createImagesAPI as images, createInvoicesAPI as invoices, createMenuAPI as menu, createOrdersAPI as orders, createPaymentsAPI as payments, createProductsAPI as products, createRegionsAPI as regions, createSearchAPI as search, createShippingAPI as shipping, toEnglishDigits, transformAddToCartInput, transformApiResponse, transformCartResponse, transformCreateCartInput, transformInvoiceResponse, transformProductListResponse, transformRequestKeys, transformResponseKeys, transformShippingAddressInput, createUsersAPI as users, createVisitsAPI as visits, createWalletAPI as wallet };
2301
- export type { AddToCartInput, ApplicableShippingMethods, BlogPage, BlogPageEntityRoute, CMSPageEntityRoute, CMSPageType, CacheConfig, Cart, CartCredentials, CartProduct, CheckoutProductSnapshot, City$1 as City, CmsPage, CookieOptions, CreateCartInput, CreateInvoiceInput, CreatePaymentInput, EntityRoute, EntityRouteResponse, EntityType, FormAttributeValue, Image, Invoice, InvoiceCredentials, InvoiceItem, InvoiceItemFormAttributes, InvoiceShippingAddress, InvoiceShippingAddressRegion, ItemShippingRate, JsonArray, JsonObject, JsonPrimitive, JsonValue, MenuItem, MenuNode, MenuTree, Order, OrderFilters, OrdersListResponse, PaginatedResponse, Payment, PaymentAction, PaymentCredentials, PaymentGateway, PaymentMethod, PaymentStatus, PaymentStepFormFields, PaymentStepFormValue, PaymentStepInput, Product, ProductAttribute, ProductAttributeValueObject, ProductCategory, ProductCategoryEntityRoute, ProductEntityRoute, ProductFilters, ProductSort, ProductVariant, RefreshInvoiceInput, Region$1 as Region, RequestOptions, RetryConfig, SazitoConfig, SazitoResponse, SchedulerBookingAttributes, SearchFilters, SearchResponse, ShippingAddress, ShippingAddressCity, ShippingAddressCredentials, ShippingAddressInput, ShippingAddressRegion, ShippingAssignment, ShippingItem, ShippingMethod, ShippingRate, StorageAdapter, Tag, UnknownEntityRoute, UploadedFormFileAttribute, User };
2317
+ export type { AddToCartInput, ApplicableShippingMethods, BlogPage, BlogPageEntityRoute, CMSPageEntityRoute, CMSPageType, CacheConfig, Cart, CartCredentials, CartProduct, CheckoutProductSnapshot, City$1 as City, CmsPage, CookieOptions, CreateCartInput, CreateInvoiceInput, CreatePaymentInput, EntityRoute, EntityRouteResponse, EntityType, FormAttributeValue, Image, Invoice, InvoiceCredentials, InvoiceItem, InvoiceItemFormAttributes, InvoiceShippingAddress, InvoiceShippingAddressRegion, ItemShippingRate, JsonArray, JsonObject, JsonPrimitive, JsonValue, MenuItem, MenuNode, MenuTree, Order, OrderFilters, OrdersListResponse, PaginatedResponse, Payment, PaymentAction, PaymentCredentials, PaymentGateway, PaymentMethod, PaymentStatus, PaymentStepFormFields, PaymentStepFormValue, PaymentStepInput, Product, ProductAttribute, ProductAttributeValueObject, ProductCategory, ProductCategoryEntityRoute, ProductEntityRoute, ProductFilters, ProductSort, ProductVariant, RefreshInvoiceInput, Region$1 as Region, RequestOptions, RetryConfig, SazitoConfig, SazitoError, SazitoResponse, SchedulerBookingAttributes, SearchFilters, SearchResponse, ShippingAddress, ShippingAddressCity, ShippingAddressCredentials, ShippingAddressInput, ShippingAddressRegion, ShippingAssignment, ShippingItem, ShippingMethod, ShippingRate, StorageAdapter, Tag, UnknownEntityRoute, UploadedFormFileAttribute, User };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";const t={timeout:3e4,retry:{enabled:!0,retries:3,retryDelay:1e3},cache:{products:{enabled:!0,ttl:6e5},categories:{enabled:!0,ttl:6e5},cart:{enabled:!1},orders:{enabled:!1},search:{enabled:!0,ttl:3e5},cms:{enabled:!0,ttl:6e5},tags:{enabled:!0,ttl:6e5},entityRoutes:{enabled:!0,ttl:6e5}},debug:!1};function e(e){return{...t,...e,retry:{...t.retry,...e.retry},cache:{...t.cache,...e.cache},customFetchApi:e.customFetchApi||("undefined"!=typeof fetch?fetch:void 0)}}class a{constructor(){this.tokenKey="user_id_token"}get(){if("undefined"==typeof window||"undefined"==typeof document)return null;const t=this.getFromLocalStorage();if(t)return t;return this.parseCookies()[this.tokenKey]||null}set(t,e){if("undefined"==typeof window||"undefined"==typeof document)return void console.warn("[Sazito SDK] Cannot set token in SSR environment");this.setInLocalStorage(t);const a={secure:!0,sameSite:"Lax",maxAge:2592e3,path:"/",...e};this.setCookie(this.tokenKey,t,a)}remove(){"undefined"!=typeof window&&"undefined"!=typeof document&&(this.removeFromLocalStorage(),this.setCookie(this.tokenKey,"",{maxAge:-1,path:"/"}))}getFromLocalStorage(){try{return window.localStorage.getItem(this.tokenKey)}catch{return null}}setInLocalStorage(t){try{window.localStorage.setItem(this.tokenKey,t)}catch{}}removeFromLocalStorage(){try{window.localStorage.removeItem(this.tokenKey)}catch{}}parseCookies(){return"undefined"==typeof document?{}:document.cookie.split(";").reduce((t,e)=>{const[a,r]=e.trim().split("=");return a&&r&&(t[a]=decodeURIComponent(r)),t},{})}setCookie(t,e,a){let r=`${t}=${encodeURIComponent(e)}`;void 0!==a.maxAge&&(r+=`; Max-Age=${a.maxAge}`),a.path&&(r+=`; Path=${a.path}`),a.domain&&(r+=`; Domain=${a.domain}`),a.secure&&(r+="; Secure"),a.httpOnly&&(r+="; HttpOnly"),a.sameSite&&(r+=`; SameSite=${a.sameSite}`),document.cookie=r}}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,r)=>{e.test(r)&&a.push(r)}),a.forEach(t=>this.cache.delete(t))}clear(){this.cache.clear()}static generateKey(t,e,a){return`${t}:${e}:${a?JSON.stringify(a):""}`}}const i=new Set(["mobile_phone","phone_number"]);function n(t){return t.replace(/[۰-۹٠-٩]/g,t=>{const e=t.charCodeAt(0);return String(e>=1776?e-1776:e-1632)})}const s={no_of_items:"quantity",single_item_price:"unitPrice",total_items_price:"lineTotal",items_total_raw_price:"itemsTotalRawPrice",items_discount:"itemsDiscount",customer_profit:"customerProfit",customer_profit_percentage:"customerProfitPercentage",total_amount:"totalAmount",net_total:"netTotal",gross_total:"grossTotal",final_total:"finalTotal",discount_total:"discountTotal",shipping_total:"shippingTotal",tax_total:"taxTotal",unique_identifier:"identifier",invoice_identifier:"identifier",payment_identifier:"identifier",shipping_address_identifier:"identifier",first_name:"firstName",last_name:"lastName",mobile_phone:"mobilePhone",phone_number:"phoneNumber",postal_code:"postalCode",user_comment:"userComment",product_id:"productId",variant_id:"variantId",product_name:"name",product_image:"image",product_variant:"variant",product_variants:"variants",product_categories:"categories",product_attributes:"attributes",product_type:"productType",short_description:"shortDescription",stock_quantity:"stockQuantity",stock_number:"stockQuantity",sale_price:"salePrice",raw_price:"originalPrice",has_max_order:"hasMaxOrder",max_no_of_order:"maxOrderQuantity",min_order_count:"minOrderQuantity",sold_count:"soldCount",static_url:"staticUrl",dynamic_form_id:"dynamicFormId",event_entity_id:"eventEntityId",theme_config:"themeConfig",image_id:"imageId",is_stock_managed:"isStockManaged",commercial_files:"commercialFiles",sort_index:"sortIndex",attribute_type:"attributeType",cart_products:"items",cart_product_id:"cartProductId",min_basket_limit_violated:"minBasketLimitViolated",invoice_items:"items",products:"items",total_count:"total",shipping_method_needed:"needsShipping",shipping_method:"shippingMethod",shipping_address:"shippingAddress",shipping_items:"shippingItems",delivery_time:"deliveryTime",min_delivery_days:"minDays",max_delivery_days:"maxDays",payment_type:"paymentType",payment_types:"paymentTypes",payment_amount:"amount",reference_code:"code",is_default:"isDefault",is_available:"isAvailable",delete_coupon:"deleteCoupon",form_attributes:"formAttributes",booking_attributes:"bookingAttributes",readable_form_attr:"formFields",created_at:"createdAt",updated_at:"updatedAt",page_number:"page",page_size:"pageSize",total_count_raw:"totalCountRaw",max_price:"maxPrice",min_price:"minPrice",stock_alert_limit:"stockAlertLimit",sub_categories:"subCategories",order_number:"orderNumber",sort_order:"sortOrder",pinned_ids:"pinnedIds",region_id:"regionId",city_id:"cityId",parent_id:"parentId",discount_code:"discountCode",entity_name:"entityType",entity_id:"entityId",other_props:"entity",shipping_methods:"shippingMethods",shipping_rates:"shippingRates",grouped_shipping_rates:"groupedShippingRates",items_shipping_rate:"itemsShippingRate",shipping_rate:"shippingRate",rate_id:"rateId",invoice_item_id:"invoiceItemId",invoice_item_ids:"invoiceItemIds",scheduler_booking_attributes:"schedulerBookingAttributes",inventory_count:"inventoryCount",order_identifier:"orderIdentifier",self_only:"selfOnly",coupon:"coupon",discount_usages:"discountUsages",user_set_coordinates_before:"userSetCoordinatesBefore",show_order:"showOrder",alt:"alt",url:"url",activate_add_to_cart_alert:"addToCardAlert",activate_advanced_card_to_card:"advancedCardToCard",activate_ayria_payment_customization:"ayriaPaymentGateway",activate_azki_payment_customization:"azkiPaymentGateway",activate_bazar_payment_customization:"bazarPaymentGateway",activate_blog:"shopBlog",activate_card_to_card_payment:"cardToCardPayment",activate_checkout_dynamic_form:"checkoutDynamicForm",activate_different_register_customization:"multiTypeRegister",activate_digipay_payment:"digipayPaymentGateway",activate_digipay_payment_customization:"digipayPaymentGateway",activate_filter_products:"productFilters",activate_ghesta_payment_customization:"ghestaPaymentGateway",activate_mega_footer:"megaFooter",activate_mellat_payment_customization:"mellatPaymentGateway",activate_min_basket:"checkoutMinimumAmount",activate_novapay_payment_customization:"novapayPaymentGateway",activate_ozon_payment_customization:"ozonPaymentGateway",activate_payment_in_place:"paymentInPlace",activate_payping_payment:"paypingPaymentGateway",activate_pec_payment_customization:"pecPaymentGateway",activate_sabin_payment_customization:"sabinPaymentGateway",activate_sadad_payment_customization:"sadadPaymentGateway",activate_search:"shopSearch",activate_sep_payment_customization:"sepPaymentGateway",activate_shop_vat:"shopVat",activate_snapppay_payment_customization:"snapppayPaymentGateway",activate_tajrobe:"tajrobe",activate_tara_payment_customization:"taraPaymentGateway",activate_theme_config_settings:"themeConfigSettings",activate_toman_payment_customization:"tomanPaymentGateway",activate_torobpay_payment_customization:"torobpayPaymentGateway",activate_up_payment_customization:"asanpardakhtPaymentGateway",activate_vandar_payment_customization:"vandarPaymentGateway",activate_wallet:"wallet",activate_yourgate_payment_customization:"yourgatePaymentGateway",activate_zarinpal_payment:"zarinpalPaymentGateway",activate_zarinplus_payment_customization:"zarinplusPaymentGateway",activate_zibal_payment_customization:"zibalPaymentGateway",activate_zify_payment_customization:"zifyPaymentGateway",disable_ordering:"disableOrdering",pwa:"progressiveWebApp",remove_front_basket:"hideCheckout",remove_front_taint:"sazitoBrandingRemoval"},o=Object.values(s).reduce((t,e)=>(t[e]=(t[e]||0)+1,t),{}),d=Object.entries(s).reduce((t,[e,a])=>(1===o[a]&&(t[a]=e),t),{});function c(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function p(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function u(t){return!(null===t||"object"!=typeof t||Array.isArray(t)||t instanceof Date)}function l(t,e){const a={...t};for(const t of e)delete a[t];return a}function m(t){if(!u(t))return Array.isArray(t)?t.map(t=>m(t)):t;const e={};for(const[a,r]of Object.entries(t)){let t=s[a];t||(t=c(a)),u(r)?e[t]=m(r):Array.isArray(r)?e[t]=r.map(t=>m(t)):e[t]=r}return e}function h(t){if(!u(t))return Array.isArray(t)?t.map(t=>h(t)):t;const e={};for(const[a,r]of Object.entries(t)){let t=d[a];t||(t=p(a)),u(r)?e[t]=h(r):Array.isArray(r)?e[t]=r.map(t=>h(t)):e[t]="string"==typeof r&&i.has(t)?n(r):r}return e}function y(t){const e=t;if(u(e?.data?.result)){const t=e.data.result,a=Object.keys(t);return 1===a.length&&u(t[a[0]])?m(t[a[0]]):m(t)}return m(t)}function g(t){if(!t)return{};if(!u(t))return{};const{general:e,shop:a,checkout:r,features:i,wallet:n,tajrobe:s,domain:o,enamad:d,google:c,logo:p,social:l,...m}=t,h={...u(e)?e:{},...u(a)?a:{}},{registerType:y,showProductStockNumber:g,...w}=h||{};return{...m,scripts:{enamad:d,google:c},shop:v({...w,domain:o,logo:p,social:l}),settings:{checkout:f(r),features:I(i),wallet:C(n),tajrobe:S(s),registerType:b(y),showProductStockNumber:_(g)}}}function f(t){if(!u(t))return{};const e=u(t.minBasket)?t.minBasket:{},a=e.minAmount??e.minBasket,r="number"==typeof a?a:Number(a),i={...t,addToCartAlert:_(t.addToCartAlert),dynamicForm:_(t.dynamicForm),emailOptional:_(t.emailOptional??t.email_optional),preventRedirect:_(t.preventRedirect??t.manual),minBasket:{enabled:_(e.enabled),minAmount:Number.isFinite(r)?r:0},miniCart:_(t.miniCart),postalCodeMandatory:_(t.postalCodeMandatory),quickAddToCart:_(t.quickAddToCart)};return delete i.manual,i}function b(t){return"string"==typeof t?t:""}function _(t){return"boolean"==typeof t?t:u(t)&&Object.prototype.hasOwnProperty.call(t,"enabled")?_(t.enabled):1===t||"1"===t||"true"===t}function v(t){if(!u(t))return{};const e={...t};if(u(e.city)){const t=l(e.city,["createdAt","updatedAt"]);let a=t.region;u(a)&&(a=l(a,["createdAt","updatedAt","cities"])),t.region=a,e.city=t}return e}const w={addToCardAlert:"addToCartAlertEnabled",addToCartAlert:"addToCartAlertEnabled",advancedCardToCard:"advancedCardToCardEnabled",cardToCardPayment:"cardToCardPaymentEnabled",checkoutDynamicForm:"checkoutDynamicFormEnabled",multiTypeRegister:"multiTypeRegisterEnabled",productFilters:"productFiltersEnabled",megaFooter:"megaFooterEnabled",checkoutMinimumAmount:"checkoutMinimumAmountEnabled",paymentInPlace:"paymentInPlaceEnabled",shopBlog:"blogEnabled",shopSearch:"searchEnabled",shopVat:"shopVatEnabled",tajrobe:"tajrobeEnabled",themeConfigSettings:"themeConfigSettingsEnabled",wallet:"walletEnabled",progressiveWebApp:"progressiveWebAppEnabled",disableOrdering:"orderingDisabled",hideCheckout:"checkoutHidden",sazitoBrandingRemoval:"sazitoBrandingRemoved",ayriaPaymentGateway:"ayriaPaymentGatewayEnabled",azkiPaymentGateway:"azkiPaymentGatewayEnabled",bazarPaymentGateway:"bazarPaymentGatewayEnabled",digipayPaymentGateway:"digipayPaymentGatewayEnabled",ghestaPaymentGateway:"ghestaPaymentGatewayEnabled",mellatPaymentGateway:"mellatPaymentGatewayEnabled",novapayPaymentGateway:"novapayPaymentGatewayEnabled",ozonPaymentGateway:"ozonPaymentGatewayEnabled",paypingPaymentGateway:"paypingPaymentGatewayEnabled",pecPaymentGateway:"pecPaymentGatewayEnabled",sabinPaymentGateway:"sabinPaymentGatewayEnabled",sadadPaymentGateway:"sadadPaymentGatewayEnabled",sepPaymentGateway:"sepPaymentGatewayEnabled",snapppayPaymentGateway:"snapppayPaymentGatewayEnabled",taraPaymentGateway:"taraPaymentGatewayEnabled",tomanPaymentGateway:"tomanPaymentGatewayEnabled",torobpayPaymentGateway:"torobpayPaymentGatewayEnabled",asanpardakhtPaymentGateway:"asanpardakhtPaymentGatewayEnabled",vandarPaymentGateway:"vandarPaymentGatewayEnabled",yourgatePaymentGateway:"yourgatePaymentGatewayEnabled",zarinpalPaymentGateway:"zarinpalPaymentGatewayEnabled",zarinplusPaymentGateway:"zarinplusPaymentGatewayEnabled",zibalPaymentGateway:"zibalPaymentGatewayEnabled",zifyPaymentGateway:"zifyPaymentGatewayEnabled",activateEditOrderCustomization:"editOrderEnabled",activateEditOrderCustomizationEnabled:"editOrderEnabled"},A=new Set(["activateAlopeykAdvanced","activate_alopeyk_advanced"]),P=new Set(["auditLogEnabled","editOrderEnabled","rahkaranAccountingCustomizationEnabled","advancedThemeDesignerEnabled","checkoutHidden","eventPublisherEnabled","exportOrdersEnabled","exportProductsEnabled","exportUsersEnabled","fontCustomizationEnabled","forwardShippingEnabled","podroShippingEnabled","postexShippingEnabled","quotaNotificationsEnabled","recaptchaEnabled","rolePoliciesEnabled","sepidarAccountingCustomizationEnabled","shortUrlEnabled","skuSearchEnabled","snappShopCustomizationEnabled","snappboxShippingEnabled","stockAlertNotificationsEnabled","tapsipackShippingEnabled","themeConfigSettingsEnabled","advancedTextEditorEnabled","advancedShippingEnabled","bulkActionEnabled","discountBulkEnabled","discountCodeEnabled","orderBulkActionEnabled","importProductsEnabled","mahakAccountingCustomizationEnabled","millipayPaymentCustomizationEnabled","orderSmsNotificationsEnabled"]);function I(t){if(!u(t))return{};const e={},a=(t,a)=>{if(A.has(t))return;const r=(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!==r&&(e[t]=r)};u(t.flags)&&Object.entries(t.flags).forEach(([t,e])=>{a(t,e)}),u(t.configurations)&&Object.entries(t.configurations).forEach(([t,e])=>{a(t,e)}),Object.entries(t).forEach(([t,e])=>{"flags"!==t&&"premium"!==t&&"configurations"!==t&&(u(e)&&Object.prototype.hasOwnProperty.call(e,"enabled")?a(t,e.enabled):a(t,e))});const r={};Object.entries(e).forEach(([t,e])=>{const a=function(t){const e=t.includes("_")?c(t):t,a=w[e];if(a)return a;const r=e.startsWith("activate")&&e.length>8?`${e.charAt(8).toLowerCase()}${e.slice(9)}`:e;return r.endsWith("Enabled")||r.endsWith("Disabled")||r.endsWith("Hidden")||r.endsWith("Removed")?r:`${r}Enabled`}(t);P.has(a)||(r[a]=e)});const i={...r};return u(t.premium)&&(i.premium=t.premium),i}function C(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t},a=t=>"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0;return{enabled:a(e.enabled)??!1,useWithDiscount:a(e.useWithDiscount)??!1,minAmount:(t=>{if("number"==typeof t&&Number.isFinite(t))return t;const e=Number(t);return Number.isFinite(e)?e:void 0})(e.minAmount??e.walletMinAmount)??0,minAmountRequired:a(e.minAmountRequired??e.walletMinStatus)??!1}}function S(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t};let a=!1;return"boolean"==typeof e.enabled?a=e.enabled:1!==e.enabled&&"1"!==e.enabled&&"true"!==e.enabled||(a=!0),{enabled:a}}function z(t){const e=y(t);if(!u(e))return{};const a=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=q(t),a=j(t.productVariantId??e.variantId)??e.variantId;return{id:K(t.id??t.cartProductId)??"",createdAt:B(t.createdAt),updatedAt:B(t.updatedAt),productVariantId:a,quantity:j(t.quantity)??0,unitPrice:j(t.unitPrice)??0,lineTotal:j(t.lineTotal)??0,product:e,formAttributes:t.formAttributes,formFields:t.formFields,bookingAttributes:t.bookingAttributes}}(t)):[];return{...e,items:a,netTotal:j(e.netTotal)??0,grossTotal:j(e.grossTotal),needsShipping:Boolean(e.needsShipping),minBasketLimitViolated:Boolean(e.minBasketLimitViolated),deleteCoupon:void 0===e.deleteCoupon?void 0:Boolean(e.deleteCoupon)}}function T(t){const e=y(t);if(!u(e))return{};const a=l(e,["shippingMethod","user","userData"]),r=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=q(t),a=j(t.productVariantId??e.variantId)??e.variantId,r=Array.isArray(e.attributes)?e.attributes:[],i=U(e.hasMaxOrder??t.hasMaxOrder);return{id:K(t.id??t.invoiceItemId??t.cartProductId)??"",productVariantId:a,productId:j(e.productId??t.productId),name:B(t.name)??B(e.name)??"",url:B(e.url)??B(t.url),attributes:r,productType:B(e.productType)??B(t.productType),hasMaxOrder:i,maxOrderQuantity:j(e.maxOrderQuantity??t.maxOrderQuantity),minOrderQuantity:j(e.minOrderQuantity??t.minOrderQuantity),image:Y(t.image??e.image),quantity:j(t.quantity)??0,unitPrice:j(t.unitPrice)??0,lineTotal:j(t.lineTotal)??0,rawPrice:j(t.rawPrice??t.originalPrice)??0,customerProfit:j(t.customerProfit)??0,commercialFiles:t.commercialFiles,formAttributes:t.formAttributes,bookingAttributes:t.bookingAttributes,formFields:t.formFields}}(t)):[],i=Array.isArray(e.discountUsages)?e.discountUsages:[],n=i[0],s=u(n)&&u(n.discountCode)?B(n.discountCode.code):void 0;return{...a,items:r,shippingAddress:function(t){if(!t)return;const{id:e,city:a,region:r,...i}=t,n={id:r?.id??a.regionId??0,name:r?.name??"",city:a};return{...i,region:n}}($(e.shippingAddress)),shippingItems:Array.isArray(e.shippingItems)?e.shippingItems.map(t=>function(t){if(!u(t))return{};const e=u(t.rate)?t.rate:u(t.shippingRate)?t.shippingRate:u(t.shippingMethod)?t.shippingMethod:t;return{invoiceItemIds:M(t),rate:X(e)}}(t)):[],discountUsages:i,netTotal:j(e.netTotal)??0,finalTotal:j(e.finalTotal)??0,vat:j(e.vat)??0,vatPercent:j(e.vatPercent)??0,itemsDiscount:j(e.itemsDiscount)??0,discountTotal:j(e.discountTotal)??0,customerProfit:j(e.customerProfit)??0,customerProfitPercentage:j(e.customerProfitPercentage)??0,itemsTotalRawPrice:j(e.itemsTotalRawPrice)??0,couponTotal:j(e.couponTotal)??0,shippingTotal:j(e.shippingTotal)??0,creditTotal:j(e.creditTotal)??0,needsShipping:Boolean(e.needsShipping),userComment:"string"==typeof e.userComment?e.userComment:void 0,discountCode:s}}function E(t){const e=y(t);if(!u(e))return{};if(!u(e.invoice))return e;const a=T(e.invoice),{items:r,...i}=a;return{...e,invoice:{...i,invoiceItems:Array.isArray(r)?r:[]}}}function N(t){const e=y(t);if(!u(e))return{};const a=Array.isArray(e.orders)?e.orders.map(t=>E(t)):[],r=j(e.pageNumber??e.page),i=j(e.pageSize),n=j(e.totalCount??e.total)??a.length;return{...l(e,["page","total"]),orders:a,totalCount:n,...void 0!==r?{pageNumber:r}:{},...void 0!==i?{pageSize:i}:{}}}function k(t){const e=y(t);if(!u(e))return{};const a=Array.isArray(e.transactions)?e.transactions:Array.isArray(e.walletTransactions)?e.walletTransactions:[],r=j(e.pageNumber??e.page),i=j(e.pageSize),n=j(e.totalCount??e.total);return{...l(e,["page","total","walletTransactions"]),transactions:a,...void 0!==r?{pageNumber:r}:{},...void 0!==i?{pageSize:i}:{},...void 0!==n?{totalCount:n}:{}}}function x(t){return $(t)}function R(t){const e=y(t);if(u(e))return O(e)}function O(t){if(!t)return;const e=function(t){const e=G(t);if(!e)return;if(1===Object.keys(e).length&&u(e.user))return G(e.user)??e.user;return e}(t);if(!e)return;const a={},r=j(e.id);void 0!==r&&(a.id=r);const i=B(e.email);i&&(a.email=i);const n=B(e.mobilePhone)??B(e.phoneNumber);n&&(a.mobilePhone=n);const s=B(e.phoneNumber);s&&s!==n&&(a.phoneNumber=s);const o=B(e.firstName);o&&(a.firstName=o);const d=B(e.lastName);d&&(a.lastName=d);const c=B(e.birthDate);return c&&(a.birthDate=c),Object.keys(a).length>0?a:void 0}function $(t){if(!t||0===Object.keys(t).length)return;const e=O(t.user),a=G(t.region),r=G(t.city),i=G(r?.region),n=B(t.regionName)??F(t.region),s=D(a??t.region,{fallbackId:j(t.regionId),fallbackName:n})??D(i,{fallbackId:j(t.regionId),fallbackName:n}),o=j(t.regionId)??s?.id,d=B(t.cityName)??B(r?.name)??F(t.city),c=function(t,e={}){if(null==t)return;const a=G(t),r=j(a?.id)??j(t)??e.fallbackId,i=B(a?.name)??F(t)??e.fallbackName;if(void 0===r||!i)return;const n={id:r,name:i},s=j(a?.regionId)??e.fallbackRegionId;void 0!==s&&(n.regionId=s);const o=j(a?.latitude);void 0!==o&&(n.latitude=o);const d=j(a?.longitude);void 0!==d&&(n.longitude=d);return n}(r??t.city,{fallbackId:j(t.cityId),fallbackName:d,fallbackRegionId:o}),p=B(t.firstName)??e?.firstName??"",u=B(t.lastName)??e?.lastName??"",l={id:j(t.id)??0,identifier:B(t.identifier)??"",firstName:p,lastName:u,city:c??{id:j(t.cityId??t.city)??0,name:d??"",...void 0!==o?{regionId:o}:{}},address:B(t.address)??""},m=B(t.mobilePhone)??B(t.phoneNumber)??e?.mobilePhone??e?.phoneNumber,h=B(t.phoneNumber)??e?.phoneNumber;m&&(l.mobilePhone=m),h&&h!==m&&(l.phoneNumber=h);const y=B(t.email)??e?.email;y&&(l.email=y),s&&(l.region=s);const g=B(t.postalCode);g&&(l.postalCode=g);const f=B(t.description);f&&(l.description=f);const b=j(t.latitude);void 0!==b&&(l.latitude=b);const _=j(t.longitude);void 0!==_&&(l.longitude=_);const v=U(t.userSetCoordinatesBefore);return void 0!==v&&(l.userSetCoordinatesBefore=v),l}function D(t,e={}){if(null==t)return;const a=G(t),r=j(a?.id)??j(t)??e.fallbackId,i=B(a?.name)??F(t)??e.fallbackName;return void 0!==r&&i?{id:r,name:i}:void 0}function G(t){if(u(t))return u(t.data)?t.data:t}function F(t){const e=B(t);if(e)return void 0===j(e)?e:void 0}function M(t){return(Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:void 0!==t.invoiceItemId?[t.invoiceItemId]:[]).map(t=>K(t)).filter(t=>void 0!==t)}function j(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 B(t){if("string"!=typeof t)return;const e=t.trim();return e.length>0?e:void 0}function U(t){return"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0}function K(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 q(t){if(!u(t))return{variantId:0,name:"",attributes:[]};const e=u(t.variant)?t.variant:void 0,a=u(e?.product)?e.product:void 0,r=u(t.product)?t.product:void 0,i=j(r?.variantId??e?.id??t.productVariantId??t.variantId)??0,n=Array.isArray(r?.attributes)?r.attributes:Array.isArray(e?.attributes)?e.attributes:Array.isArray(t.attributes)?t.attributes:[];return{variantId:i,productId:j(r?.productId??t.productId??a?.id),name:B(r?.name)??B(t.name)??"",url:B(r?.url)??B(t.url)??B(a?.url),image:Y(r?.image??t.image),attributes:n,productType:B(r?.productType)??B(t.productType)??B(a?.productType),hasMaxOrder:r?.hasMaxOrder??t.hasMaxOrder??e?.hasMaxOrder,maxOrderQuantity:j(r?.maxOrderQuantity??t.maxOrderQuantity??e?.maxOrderQuantity),minOrderQuantity:j(r?.minOrderQuantity??t.minOrderQuantity??e?.minOrderQuantity)}}function L(t){if(!u(t))return{};const e=l(t,["staticUrl","summary","tags","slug"]);return e.variants&&Array.isArray(e.variants)&&(e.variants=e.variants.map(t=>u(t)?l(t,["name","title","product","status","soldCount"]):{})),e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(t=>u(t)?{id:t.id,name:t.name,url:t.url}:{})),e.images&&Array.isArray(e.images)&&(e.images=e.images.map(t=>Y(t)??{})),e}function Y(t){return u(t)?l(t,["widthRatio","heightRatio","thumb","order"]):t}function V(t){const e=L(t);return e?l(e,["themeConfig"]):e}function Q(t){const e=y(t);if(e.items&&Array.isArray(e.items)){const t=j(e.total)??e.items.length,a=j(e.pageSize)??e.items.length,r=j(e.page)??1,i=j(e.totalPages)??Math.ceil(t/a);return{items:e.items.map(t=>V(t)),total:t,page:r,pageSize:a,totalPages:i}}return e}function W(t){if(!u(t))return{products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};const e=t,a={products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};return Array.isArray(e.items)&&(a.products.items=e.items.map(t=>V(t)),a.products.total=j(e.productsCount)??0,a.products.page=j(e.productsPageNumber)??1,a.products.pageSize=j(e.productsPageSize)??20),Array.isArray(e.blogPages)&&(a.blogPages.items=e.blogPages.map(t=>rt(t)),a.blogPages.total=j(e.blogPagesCount)??0,a.blogPages.page=j(e.blogPagesPageNumber)??1,a.blogPages.pageSize=j(e.blogPagesPageSize)??20),Array.isArray(e.cmsPages)&&(a.cmsPages.items=e.cmsPages.map(t=>rt(t)),a.cmsPages.total=j(e.cmsPagesCount)??0,a.cmsPages.page=j(e.cmsPagesPageNumber)??1,a.cmsPages.pageSize=j(e.cmsPagesPageSize)??20),Array.isArray(e.categories)&&(a.productCategories.items=e.categories.map(t=>et(t)),a.productCategories.total=j(e.productCategoriesCount)??0,a.productCategories.page=j(e.productCategoriesPageNumber)??1,a.productCategories.pageSize=j(e.productCategoriesPageSize)??20),a}function H(t){const e=y(t);if(!u(e))return[];return(Array.isArray(e.paymentTypes)?e.paymentTypes:Array.isArray(e.methods)?e.methods:[]).map(t=>u(t)?{id:j(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:j(t.paymentSubType)??null,order:j(t.order)??0,isDefault:Boolean(t.isDefault)}:{id:0,code:"",title:"",titleFa:"",description:null,paymentSubType:null,order:0,isDefault:!1})}function J(t){const e=y(t);return(Array.isArray(e)?e:u(e)&&Array.isArray(e.shippingMethods)?e.shippingMethods:[]).map(t=>function(t){if(!u(t))return{id:0,name:"",type:""};return{id:j(t.id)??0,name:B(t.name)??"",type:B(t.type)??""}}(t))}function Z(t){const e=y(t);if(!u(e))return{shippingMethods:[],groupedShippingRates:{},itemsShippingRate:[]};const a={};if(Array.isArray(e.shippingMethods)&&e.shippingMethods.forEach((t,e)=>{if(!u(t))return;const r=Array.isArray(t.shippingRate)?t.shippingRate.map(t=>X(t)):[];if(0===r.length)return;const i=Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:[],n=i.length>0?i.map(String).sort().join(","):String(e);a[n]=r}),0===Object.keys(a).length&&u(e.groupedShippingRates))for(const[t,r]of Object.entries(e.groupedShippingRates))a[t]=Array.isArray(r)?r.map(t=>X(t)):[];return{shippingMethods:[],groupedShippingRates:a,itemsShippingRate:Array.isArray(e.itemsShippingRate)?e.itemsShippingRate.map(t=>u(t)?{invoiceItemId:K(t.invoiceItemId)??M(t)[0]??"",shippingRate:X(t.shippingRate??t.rate??t)}:{invoiceItemId:"",shippingRate:X(void 0)}):[]}}function X(t){return u(t)?{id:j(t.id??t.rateId)??0,name:B(t.name)??"",price:j(t.price??t.amount)??0,description:B(t.description??t.deliveryDescription??t.details),icon:B(t.icon??t.iconUrl??t.logo),color:B(t.color??t.bgColor??t.backgroundColor??t.iconColor),type:B(t.type)}:{id:0,name:"",price:0}}function tt(t){return u(t)?l(t,["staticUrl","products","items"]):{}}function et(t){const e=tt(t);return e?l(e,["themeConfig"]):{}}function at(t){return u(t)?l(t,["staticUrl","urlKey"]):{}}function rt(t){const e=at(t);return e?l(e,["themeConfig"]):{}}function it(t){const e=y(t);if(!e||!e.route)return e??{};const a=u(e.route)?e.route:{};if(a.entity){switch(a.entityType){case"product":a.entity=L(a.entity);break;case"product_category":a.entity=tt(a.entity);break;case"cms_page":case"blog_page":a.entity=at(a.entity)}u(a.entity)&&(a.entity=l(a.entity,["id"])),!a.url&&u(a.entity)&&a.entity.url&&(a.url=a.entity.url)}return a}function nt(t){if(!u(t))return{};const e={...t};return e.entity&&(e.entity=et(e.entity),u(e.entity)&&(e.entity=l(e.entity,["id"]))),e.children&&Array.isArray(e.children)&&(e.children=e.children.map(nt)),e}function st(t){const e=y(t);return e?e.cmsPages&&Array.isArray(e.cmsPages)?{items:e.cmsPages.map(rt),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=>rt(t)),total:e.total||e.items.length,page:e.page||1,pageSize:e.pageSize||e.items.length}:e:{}}function ot(t){if(!u(t))return{};const e={};if(void 0!==t.page&&(e.page_number=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),t.cmsPageTypes){const a=Array.isArray(t.cmsPageTypes)?t.cmsPageTypes[0]:t.cmsPageTypes;e["filters[]"]=JSON.stringify({name:"cms_page_types",value:a})}return e}function dt(t){if(!u(t))return{};const e={};if(t.entityType&&(e.entityType=t.entityType),void 0!==t.entityId&&(e.entityId=t.entityId),u(t.entity)){const a=l(t.entity,["staticUrl","id"]);Object.keys(a).length>0&&(e.entity=a)}return t.details&&(e.details=t.details),t.children&&Array.isArray(t.children)&&(e.children=t.children.map(t=>dt(t))),e}function ct(t){const e=y(t);if(!e||!e.tree)return e??{};const a=u(e.tree)?e.tree:{};return u(a.treeStructure)&&Array.isArray(a.treeStructure.nodes)&&(a.treeStructure.nodes=a.treeStructure.nodes.map(t=>dt(t))),e}class pt{constructor(t){this.config=t,this.baseUrl="http://api.sazito.com:8080",this.domain=t.domain,this.tokenStorage=new a,this.cache=new r,this.fetchApi=t.customFetchApi.bind(globalThis)}async get(t,e){const a=e?.params?h(e.params):void 0,i=this.buildUrl(t,a),n=r.generateKey("GET",i,a);if(!1!==e?.cache){const e=this.getApiName(t),a=this.config.cache[e];if(a?.enabled&&a.ttl){const e=this.cache.get(n,a.ttl);if(e)return this.config.debug&&console.log("[Sazito SDK] Cache hit:",t),{data:e}}}const s=await this.request("GET",i,e);return s.data&&!1!==e?.cache&&this.cache.set(n,s.data),s}async post(t,e,a){const r=this.buildUrl(t),i=this.isMultipartBody(e),n=e?i?e:h(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("POST",r,{...a,body:n,rawBody:i,omitJsonContentType:i})}async put(t,e,a){const r=this.buildUrl(t),i=this.isMultipartBody(e),n=e?i?e:h(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("PUT",r,{...a,body:n,rawBody:i,omitJsonContentType:i})}async delete(t,e){const a=this.buildUrl(t),r=this.getApiName(t);return this.cache.deletePattern(`GET:.*${r}`),this.request("DELETE",a,e)}async request(t,e,a,r=0){const i=new AbortController,n=a?.signal||i.signal,s=a?.timeout||this.config.timeout,o=setTimeout(()=>i.abort(),s);try{const i=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(!i.ok&&this.shouldRetry(i.status)&&r<s)return this.config.debug&&console.log(`[Sazito SDK] Retrying request (${r+1}/${s}):`,e),await this.delay(this.config.retry.retryDelay*(r+1)),this.request(t,e,a,r+1);const d=i.headers.get("content-type");let c;if(c=d?.includes("application/json")?await i.json():await i.text(),a?.skipTransform&&i.ok)return{data:c};const p=void 0!==c?.result?c.result:c;this.config.debug&&console.log(`[Sazito SDK] ${t} ${e}:`,{status:i.status,data:p});let u=p?m(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 i.ok?{data:u}:{error:{status:i.status,message:u?.message||p?.message||i.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 r=new URLSearchParams;return Object.entries(e).forEach(([t,e])=>{null!=e&&r.append(t,String(e))}),`${a}?${r.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 r=this.tokenStorage.get();return r&&(a.Authorization=r),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 ut{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 lt{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 ut)}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 mt="/api/v1/product_categories",ht="/api/v1/search",yt="/api/v2/carts",gt="/api/v2/invoices",ft="/api/v2/shipping_addresses",bt="/api/v2/payments",_t="/api/v1/orders",vt="/api/v1/users",wt="/api/v1/sessions",At="/api/v1/feedbacks",Pt="/api/v1/cms_pages",It="/api/v1/images",Ct="/api/v1/scheduler/events",St="/api/v1/scheduler/bookings",zt="/api/v1/entity_route/route",Tt="/api/v1/feedbacks/comments/details";class Et{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}`,r=await this.http.get(zt,{...e,params:{url_part:a}});if(r.data){const t=it(r.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 r.error?{error:r.error}:{error:{message:"No data returned from product endpoint",type:"api"}}}async list(t,e){const a=this.transformFilters(t),r=await this.http.get("/api/v1/products",{...e,params:a});if(r.data){return{data:Q(r.data)}}return r}async search(t,e,a){const r={query:t,search_direction:"center",page_size:e?.pageSize||20,page_number:e?.page||1},i=await this.http.get(ht,{...a,params:r});if(i.data){return{data:W(i.data)}}return i}}class Nt{constructor(t){this.http=t}async get(t,e){const a=await this.http.get(`${mt}/${t}`,e);if(a.data){const t=function(t){const e=y(t);return e?tt(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 r=await this.http.get(mt,{...e,params:a});if(r.data){const t=function(t){const e=y(t);return e?(e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(et)),u(e.tree)&&u(e.tree.treeStructure)&&Array.isArray(e.tree.treeStructure.nodes)&&(e.tree.treeStructure.nodes=e.tree.treeStructure.nodes.map(nt)),e):{}}(r.data);return{data:t}}return r}}class kt{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(`${yt}/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(yt,t,e);if(!a.data)return a;const r=z(a.data);return this.persistCartCredentials(r),{data:r}}async addItem(t,e,a,r){return this.addItemWithAttributes(t,e,{formAttributes:a},r)}async addItemWithAttributes(t,e,a,r){const i=this.credentials.getCartCredentials();if(!i)return this.create({variants:[{id:t,count:e,formAttributes:a?.formAttributes}],schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},r);const n=await this.http.post(`${yt}/0/add_products_to_cart`,{identifier:i.identifier,variants:[{id:t,count:e}],formAttributes:a?.formAttributes,schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},r);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,r,i){return this.updateItemWithAttributes(t,e,a,{formAttributes:r},i)}async updateItemWithAttributes(t,e,a,r,i){const n=this.credentials.getCartCredentials();if(!n)return{error:{message:"No cart found",type:"validation"}};const s=await this.http.post(`${yt}/0/update_products_in_cart`,{identifier:n.identifier,cartProductId:String(t),variants:[{id:e,count:a}],formAttributes:r?.formAttributes,coupon:r?.coupon,deleteCoupon:r?.deleteCoupon},i);if(s.data){const t=z(s.data);return this.persistCartCredentials(t),{data:t}}return s}async removeItem(t,e,a){const r=this.credentials.getCartCredentials();if(!r)return{error:{message:"No cart found",type:"validation"}};const i=await this.http.post(`${yt}/0/remove_products_from_cart`,{identifier:r.identifier,cartProductId:String(t),variants:[{id:e}]},a);if(i.data){const t=z(i.data);return this.persistCartCredentials(t),{data:t}}return i}clearCart(){this.credentials.clearCartCredentials()}}class xt{constructor(t){this.http=t}async list(t,e){const a={pageNumber:t?.pageNumber??1,pageSize:t?.pageSize??20};t?.filters&&t.filters.length>0&&(a.filters=JSON.stringify(t.filters));const r=await this.http.get(_t,{...e,params:a});return r.data?{data:N(r.data)}:r}async get(t,e){const a=await this.http.get(`${_t}/${t}`,e);return a.data?{data:E(a.data)}:a}}class Rt{constructor(t,e){this.http=t,this.credentials=e}normalizeInvoiceResponse(t){return t.data?{data:T(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 r=await this.http.post(`${gt}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(r)}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(gt,{cart_id:String(0),cart_identifier:e.identifier},t);if(a.data){const t=T(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 r=await this.http.post(`${gt}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(r)}async addShippingAddress(t,e,a){const r=this.credentials.getCartCredentials(),i=this.credentials.getInvoiceCredentials();if(!r||!i)return{error:{message:"No cart or invoice found",type:"validation"}};const n=await this.http.post(`${gt}/${i.id}/add_shipping_address`,{identifier:i.identifier,shipping_address_identifier:e,cart_id:0,cart_identifier:r.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 r=await this.http.post(`${gt}/${a.id}/add_discount_code`,{identifier:a.identifier,discount_code:t.toUpperCase()},e);return r.data?(this.credentials.setDiscountCode(t.toUpperCase()),{data:T(r.data)}):r}async assignShippingMethod(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const r=t.map(t=>({...t,invoiceItemIds:t.invoiceItemIds.map(t=>String(t))})),i=await this.http.post(`${gt}/${a.id}/add_shipping_method`,{identifier:a.identifier,shippings:r},e);return this.normalizeInvoiceResponse(i)}async addDetails(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const r=await this.http.post(`${gt}/${a.id}/add_invoice_details`,{identifier:a.identifier,user_comment:t},e);return this.normalizeInvoiceResponse(r)}async addForm(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const r=await this.http.post(`${gt}/${a.id}/add_form`,{invoiceIdentifier:t.invoiceIdentifier||t.identifier||a.identifier,formAttributes:t.formAttributes},e);return this.normalizeInvoiceResponse(r)}async addCredit(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${gt}/${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(`${gt}/${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(`${gt}/${e.id}/applicable_shipping_methods`,{...t,cache:t?.cache??!1,params:{identifier:e.identifier}});return a.data?{data:Z(a.data)}:a}clearInvoice(){this.credentials.clearInvoiceCredentials()}}class Ot{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,r=t.shippingAddress??t.shipping_address??t.data;if(void 0===r)break;e=r}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),r=await this.http.post(ft,{shipping_address:a},e);if(r.data){const t=x(this.unwrapAddressPayload(r.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):r}return r}async updateAddress(t,e){const a=this.credentials.getShippingCredentials();if(!a)return this.createAddress(t,e);const r=this.sanitizeAddressInput(t),i=await this.http.post(ft,{identifier:a.identifier,shipping_address:r},e);if(i.data){const t=x(this.unwrapAddressPayload(i.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):i}return i}async listAddresses(t){const e=await this.http.get(ft,{...t,cache:t?.cache??!1});if(e.error)return{error:e.error};return{data:this.extractAddressList(e.data).map(t=>x(this.unwrapAddressPayload(t))).filter(t=>Boolean(t?.identifier)).sort((t,e)=>e.id-t.id)}}async getAddress(t){const e=this.credentials.getShippingCredentials();if(!e)return{error:{message:"No shipping address found",type:"validation"}};const a=await this.http.get(`${ft}/${e.id}`,{...t,params:{identifier:e.identifier}});if(a.data){const t=x(this.unwrapAddressPayload(a.data));return t?{data:t}:a}return a}async getMethods(t){const e=await this.http.get("/api/v2/shipping_methods",t);return e.data?{data:J(e.data)}:e.error?{error:e.error}:{data:[]}}clearAddress(){this.credentials.clearShippingCredentials()}}class $t{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(`${bt}/list`,{invoice_identifier:e.identifier},t);return a.data?{data:H(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 r=await this.http.post(bt,{invoice_identifier:a.identifier,payment_type:t},{...e,skipTransform:!0});if(r.error)return{error:r.error};if(r.data){const t=r.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),r=e.payment_type,i={id:a,identifier:t,amount:Number(e.payment_amount??0),paymentType:{id:null!=r?.id?Number(r.id):void 0,code:r?.reference_code??""}};return t&&this.credentials.setPaymentCredentials({id:a,identifier:t}),{data:i}}}return{data:r.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:r,...i}=t??{},n=await this.http.post(`${bt}/${a.id}/process_payment_step`,{paymentIdentifier:r||a.identifier,...i},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 r=this.buildProcessStepFormData(t,a.identifier);if(!r)return{error:{message:"FormData is not available in this runtime.",type:"validation"}};const i=await this.http.post(`${bt}/${a.id}/process_payment_step`,r,e);return this.finalizeStepResponse(i,a.id,e)}async pollUntilSettled(t,e=15e3){let a=!0;for(;a;){const r=await this.verify(void 0,t);if(!r.data)return r;if("pending"!==r.data.action)return a=!1,r;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=h(t),r=new FormData;return Object.entries(a).forEach(([t,e])=>{this.appendFormValue(r,t,e)}),r.has("payment_identifier")||r.append("payment_identifier",e),r}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 r=t=>!!t&&"object"==typeof t&&!Array.isArray(t);let i=t.data;if("string"==typeof i)try{i=JSON.parse(i)}catch{return{error:{message:"Invalid payment step response",type:"api"}}}const n=i;if(r(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=r(n)&&r(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 Dt{constructor(t){this.http=t}normalizeUserResponse(t){if(!t.data)return t;const e=R(t.data);return e?{data:e}:t}normalizeLoginResponse(t){if(!t.data||!t.data.user)return t;const e=R(t.data.user);return e?{data:{...t.data,user:e}}:t}async login(t,e){const a=await this.http.post(`${wt}/login`,t,e);return this.normalizeLoginResponse(a)}async requestMobileOTP(t,e){return this.http.post(`${wt}/login_request`,t,e)}async verifyMobileOTP(t,e){const a=await this.http.post(`${wt}/login_request_verification`,t,e);return this.normalizeLoginResponse(a)}async requestEmailLogin(t,e){return this.http.post(`${vt}/email_login_request`,t,e)}async register(t,e){const a=await this.http.post(`${vt}/register`,t,e);return this.normalizeUserResponse(a)}async getCurrentUser(t){const e=await this.http.get(`${vt}/current`,t);return this.normalizeUserResponse(e)}async updateProfile(t,e,a){const r=await this.http.put(`${vt}/${t}`,e,a);return this.normalizeUserResponse(r)}async requestMobilePhoneUpdate(t,e){return this.http.post(`${vt}/update_mobile_phone_request`,t,e)}async verifyMobilePhoneUpdate(t,e){const a=await this.http.post(`${vt}/update_mobile_phone_verification`,t,e);return this.normalizeUserResponse(a)}async forgotPassword(t,e){return this.http.post(`${vt}/forgot_password`,t,e)}async revivePassword(t,e){const a=await this.http.post(`${vt}/revive_password`,t,e);return this.normalizeLoginResponse(a)}async mergeUser(t){return this.http.post(`${vt}/merge_user`,{},t)}}class Gt{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 r=this.transformFilters(e),i=await this.http.get(ht,{...a,params:{...r,query:t,page_number:r.page_number??1,page_size:r.page_size??20,search_direction:"center"}});if(i.data){return{data:W(i.data)}}return i}}class Ft{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(Tt,t,e)}async getProductStatistics(t,e){const a=await this.http.get(`${Tt}/${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 r=await this.http.get(`${Tt}/${t}`,{...a,params:{page_number:e?.pageNumber??1,page_size:e?.pageSize??10}});if(r.data){const t=r.data.data||r.data;return{data:this.normalizeProductReviewsResponse(t)}}return r}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 r=await this.http.post("/api/v1/service/filemanager/uploads/public/tajrobe",a,e);if(r.data){return{data:{images:Array.isArray(r.data.images)?r.data.images:Array.isArray(r.data.data?.images)?r.data.data.images:Array.isArray(r.data.result?.images)?r.data.result.images:[]}}}return r}async list(t,e){return this.http.get(At,{...e,params:this.transformLegacyFilters(t)})}async create(t,e){return this.http.post(At,t,e)}async get(t,e){return this.http.get(`${At}/${t}`,e)}}class Mt{constructor(t){this.http=t}validateInvoiceId(t){return!Number.isFinite(t)||t<=0?{error:{message:"Invalid invoice ID",type:"validation"}}:null}async getBalance(t){return this.http.get("/api/v1/users/wallet/balance",t)}async listTransactions(t,e){const a=t?.pageNumber??t?.page_number??1,r=t?.pageSize??t?.page_size??20,i=await this.http.get("/api/v1/wallet/transactions",{...e,params:{pageNumber:a,pageSize:r}});return i.data?{data:k(i.data)}:i}async applyCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const r=await this.http.post(`${gt}/${t}/add_credit`,{},e);return r.data?{data:T(r.data)}:r}async removeCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const r=await this.http.post(`${gt}/${t}/remove_credit`,{},e);return r.data?{data:T(r.data)}:r}}class jt{constructor(t){this.http=t}async getPage(t,e){const a=await this.http.get(zt,{...e,params:{url_part:t}}),r=it(a.data);if("cms_page"!==r.entityType)throw new Error(`Expected CMS page at ${t}, but got ${r.entityType}`);if("blog"===r.entity.cmsPageType)throw new Error(`Expected CMS page at ${t}, but got blog page`);return{...a,data:r.entity}}async listPages(t,e){const a=ot({...t,cmsPageTypes:"normal"}),r=await this.http.get(Pt,{...e,params:a});return{...r,data:st(r.data)}}async getBlogPost(t,e){const a=await this.http.get(zt,{...e,params:{url_part:t}}),r=it(a.data);if("cms_page"!==r.entityType)throw new Error(`Expected blog post at ${t}, but got ${r.entityType}`);if("blog"!==r.entity.cmsPageType)throw new Error(`Expected blog post at ${t}, but got CMS page`);return{...a,data:r.entity}}async listBlogPosts(t,e){const a=ot({...t,cmsPageTypes:"blog"}),r=await this.http.get(Pt,{...e,params:a});return{...r,data:st(r.data)}}async listAll(t,e){const a=ot(t),r=await this.http.get(Pt,{...e,params:a});return{...r,data:st(r.data)}}}class Bt{constructor(t){this.http=t}async upload(t,e){const a=new FormData;a.append("image",t);const r={...e?.headers};return delete r["Content-Type"],this.http.post(It,a,{...e,headers:r})}async delete(t,e){return this.http.delete(`${It}/${t}`,e)}}class Ut{constructor(t){this.http=t}async track(t,e){const a=e??((r=t)&&"object"==typeof r&&("retries"in r||"timeout"in r||"cache"in r||"headers"in r||"signal"in r)?t:void 0);var r;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 Kt{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(Ct,{...e,params:this.transformEventFilters(t)})}async getEvent(t,e){const a=await this.http.get(`${Ct}/${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(St,t,e)}async listBookings(t){return this.http.get(St,t)}async cancelBooking(t,e){return this.http.post(`${St}/${t}/cancel`,{},e)}}class qt{constructor(t){this.http=t}async resolve(t,e){const a=await this.http.get(zt,{...e,params:{url_part:t}});if(a.data){return{data:it(a.data)}}return a}}class Lt{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}}),r=a.data?ct(a.data):a.data,i=r?.tree?.treeStructure?.nodes||[],n=this.convertRawTreeToNavigation(i);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{details:e,entity:a}=t,r=this.firstNonEmpty(e?.title,e?.name),i=this.firstNonEmpty(a?.title,a?.name);return!0===e?.isTitleDefault?i||r:r||i}firstNonEmpty(...t){return t.find(t=>"string"==typeof t&&t.trim().length>0)||""}findNodeUrl(t){return"product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType?t.entity?.url||"#":"url"===t.entityType&&t.details?.url||"#"}shouldDropNode(t){return("product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType)&&!t.entity?.enabled}}class Yt{constructor(t){this.http=t}async getInfo(t){const e=await this.http.get("/api/v2/general/info",t);return e.data?{data:g(e.data)}:e.error?{error:e.error}:{error:{type:"api",message:"No data returned from general info endpoint."}}}async getFeatures(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.features}}async getCheckoutConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.checkout}}async getWalletConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.wallet}}async getTajrobeConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.tajrobe}}}class Vt{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 r=await this.http.post("/api/v1/service/filemanager/uploads/private/productform",a,e);if(r.data){const t=r.data?.data?.file?.serveKey||r.data?.file?.serveKey||r.data?.serveKey;return{data:{serveKey:String(t??"")}}}return r}}function Qt(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function Wt(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 Ht(t){return"string"==typeof t?t.trim():""}class Jt{constructor(t){this.http=t}normalizeCity(t){return Qt(t)?{id:Wt(t.id),name:Ht(t.name),latitude:Wt(t.latitude),longitude:Wt(t.longitude)}:{id:0,name:"",latitude:0,longitude:0}}normalizeRegion(t){if(!Qt(t))return{id:0,name:"",cities:[]};const e=Array.isArray(t.cities)?t.cities:[];return{id:Wt(t.id),name:Ht(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:Qt(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 Zt{constructor(t,a){const r=e(t);this.http=new pt(r),this.tokenStorage=this.http.getTokenStorage(),this.credentialsManager=a??new lt,this.products=new Et(this.http),this.categories=new Nt(this.http),this.cart=new kt(this.http,this.credentialsManager),this.invoices=new Rt(this.http,this.credentialsManager),this.shipping=new Ot(this.http,this.credentialsManager),this.payments=new $t(this.http,this.credentialsManager),this.orders=new xt(this.http),this.users=new Dt(this.http),this.search=new Gt(this.http),this.feedbacks=new Ft(this.http),this.wallet=new Mt(this.http),this.cms=new jt(this.http),this.images=new Bt(this.http),this.visits=new Ut(this.http),this.booking=new Kt(this.http),this.entityRoutes=new qt(this.http),this.menu=new Lt(this.http),this.general=new Yt(this.http),this.dynamicForms=new Vt(this.http),this.regions=new Jt(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 Xt(t){return function(t){if(!t||"object"!=typeof t)return!1;const e=t;return e.http instanceof pt&&e.credentials instanceof lt}(t)?t:function(t){const a=e(t);return{http:new pt(a),credentials:new lt}}(t)}function te(t){const{http:e}=Xt(t);return new Et(e)}function ee(t){const{http:e}=Xt(t);return new Nt(e)}function ae(t){const{http:e,credentials:a}=Xt(t);return new kt(e,a)}function re(t){const{http:e}=Xt(t);return new xt(e)}function ie(t){const{http:e,credentials:a}=Xt(t);return new Rt(e,a)}function ne(t){const{http:e,credentials:a}=Xt(t);return new Ot(e,a)}function se(t){const{http:e,credentials:a}=Xt(t);return new $t(e,a)}function oe(t){const{http:e}=Xt(t);return new Dt(e)}function de(t){const{http:e}=Xt(t);return new Gt(e)}function ce(t){const{http:e}=Xt(t);return new Ft(e)}function pe(t){const{http:e}=Xt(t);return new Mt(e)}function ue(t){const{http:e}=Xt(t);return new jt(e)}function le(t){const{http:e}=Xt(t);return new Bt(e)}function me(t){const{http:e}=Xt(t);return new Ut(e)}function he(t){const{http:e}=Xt(t);return new Kt(e)}function ye(t){const{http:e}=Xt(t);return new qt(e)}function ge(t){const{http:e}=Xt(t);return new Lt(e)}function fe(t){const{http:e}=Xt(t);return new Yt(e)}function be(t){const{http:e}=Xt(t);return new Vt(e)}function _e(t){const{http:e}=Xt(t);return new Jt(e)}exports.CredentialsManager=lt,exports.HttpClient=pt,exports.MemoryStorage=ut,exports.SazitoClient=Zt,exports.TokenStorage=a,exports.booking=he,exports.cart=ae,exports.categories=ee,exports.cms=ue,exports.createBookingAPI=he,exports.createCMSAPI=ue,exports.createCartAPI=ae,exports.createCategoriesAPI=ee,exports.createDynamicFormsAPI=be,exports.createEntityRoutesAPI=ye,exports.createFeedbacksAPI=ce,exports.createGeneralAPI=fe,exports.createImagesAPI=le,exports.createInvoicesAPI=ie,exports.createMenuAPI=ge,exports.createOrdersAPI=re,exports.createPaymentsAPI=se,exports.createProductsAPI=te,exports.createRegionsAPI=_e,exports.createSazitoClient=function(t,e){return new Zt(t,e)},exports.createSearchAPI=de,exports.createShippingAPI=ne,exports.createUsersAPI=oe,exports.createVisitsAPI=me,exports.createWalletAPI=pe,exports.dynamicForms=be,exports.entityRoutes=ye,exports.feedbacks=ce,exports.general=fe,exports.images=le,exports.invoices=ie,exports.menu=ge,exports.orders=re,exports.payments=se,exports.products=te,exports.regions=_e,exports.search=de,exports.shipping=ne,exports.toEnglishDigits=n,exports.transformAddToCartInput=function(t,e,a){const r={product_variants:[{id:t,count:e}]};return a&&(r.form_attributes=h(a)),r},exports.transformApiResponse=y,exports.transformCartResponse=z,exports.transformCreateCartInput=function(t){if(!u(t))return{product_variants:[]};const e=t.variants||t.productVariants||[],a={product_variants:Array.isArray(e)?e.map(t=>u(t)?{id:t.id||t.variantId,count:t.count||t.quantity,form_attributes:t.formAttributes?h(t.formAttributes):void 0}:{}):[]};return t.coupon&&(a.coupon=t.coupon),a},exports.transformInvoiceResponse=T,exports.transformProductListResponse=Q,exports.transformRequestKeys=h,exports.transformResponseKeys=m,exports.transformShippingAddressInput=function(t){if(u(t)){const e={...t};return delete e.user,{shipping_address:h(e)}}return{shipping_address:h(t)}},exports.users=oe,exports.visits=me,exports.wallet=pe;
1
+ "use strict";const t={timeout:3e4,retry:{enabled:!0,retries:3,retryDelay:1e3},cache:{products:{enabled:!0,ttl:6e5},categories:{enabled:!0,ttl:6e5},cart:{enabled:!1},orders:{enabled:!1},search:{enabled:!0,ttl:3e5},cms:{enabled:!0,ttl:6e5},tags:{enabled:!0,ttl:6e5},entityRoutes:{enabled:!0,ttl:6e5}},debug:!1};function e(e){return{...t,...e,retry:{...t.retry,...e.retry},cache:{...t.cache,...e.cache},customFetchApi:e.customFetchApi||("undefined"!=typeof fetch?fetch:void 0)}}class a{constructor(){this.tokenKey="user_id_token"}get(){if("undefined"==typeof window||"undefined"==typeof document)return null;const t=this.getFromLocalStorage();if(t)return t;return this.parseCookies()[this.tokenKey]||null}set(t,e){if("undefined"==typeof window||"undefined"==typeof document)return void console.warn("[Sazito SDK] Cannot set token in SSR environment");this.setInLocalStorage(t);const a={secure:!0,sameSite:"Lax",maxAge:2592e3,path:"/",...e};this.setCookie(this.tokenKey,t,a)}remove(){"undefined"!=typeof window&&"undefined"!=typeof document&&(this.removeFromLocalStorage(),this.setCookie(this.tokenKey,"",{maxAge:-1,path:"/"}))}getFromLocalStorage(){try{return window.localStorage.getItem(this.tokenKey)}catch{return null}}setInLocalStorage(t){try{window.localStorage.setItem(this.tokenKey,t)}catch{}}removeFromLocalStorage(){try{window.localStorage.removeItem(this.tokenKey)}catch{}}parseCookies(){return"undefined"==typeof document?{}:document.cookie.split(";").reduce((t,e)=>{const[a,r]=e.trim().split("=");return a&&r&&(t[a]=decodeURIComponent(r)),t},{})}setCookie(t,e,a){let r=`${t}=${encodeURIComponent(e)}`;void 0!==a.maxAge&&(r+=`; Max-Age=${a.maxAge}`),a.path&&(r+=`; Path=${a.path}`),a.domain&&(r+=`; Domain=${a.domain}`),a.secure&&(r+="; Secure"),a.httpOnly&&(r+="; HttpOnly"),a.sameSite&&(r+=`; SameSite=${a.sameSite}`),document.cookie=r}}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,r)=>{e.test(r)&&a.push(r)}),a.forEach(t=>this.cache.delete(t))}clear(){this.cache.clear()}static generateKey(t,e,a){return`${t}:${e}:${a?JSON.stringify(a):""}`}}const i=new Set(["mobile_phone","phone_number"]);function n(t){return t.replace(/[۰-۹٠-٩]/g,t=>{const e=t.charCodeAt(0);return String(e>=1776?e-1776:e-1632)})}const s={no_of_items:"quantity",single_item_price:"unitPrice",total_items_price:"lineTotal",items_total_raw_price:"itemsTotalRawPrice",items_discount:"itemsDiscount",customer_profit:"customerProfit",customer_profit_percentage:"customerProfitPercentage",total_amount:"totalAmount",net_total:"netTotal",gross_total:"grossTotal",final_total:"finalTotal",discount_total:"discountTotal",shipping_total:"shippingTotal",tax_total:"taxTotal",unique_identifier:"identifier",invoice_identifier:"identifier",payment_identifier:"identifier",shipping_address_identifier:"identifier",first_name:"firstName",last_name:"lastName",mobile_phone:"mobilePhone",phone_number:"phoneNumber",postal_code:"postalCode",user_comment:"userComment",product_id:"productId",variant_id:"variantId",product_name:"name",product_image:"image",product_variant:"variant",product_variants:"variants",product_categories:"categories",product_attributes:"attributes",product_type:"productType",short_description:"shortDescription",stock_quantity:"stockQuantity",stock_number:"stockQuantity",sale_price:"salePrice",raw_price:"originalPrice",has_max_order:"hasMaxOrder",max_no_of_order:"maxOrderQuantity",min_order_count:"minOrderQuantity",sold_count:"soldCount",static_url:"staticUrl",dynamic_form_id:"dynamicFormId",event_entity_id:"eventEntityId",theme_config:"themeConfig",image_id:"imageId",is_stock_managed:"isStockManaged",commercial_files:"commercialFiles",sort_index:"sortIndex",attribute_type:"attributeType",cart_products:"items",cart_product_id:"cartProductId",min_basket_limit_violated:"minBasketLimitViolated",invoice_items:"items",products:"items",total_count:"total",shipping_method_needed:"needsShipping",shipping_method:"shippingMethod",shipping_address:"shippingAddress",shipping_items:"shippingItems",delivery_time:"deliveryTime",min_delivery_days:"minDays",max_delivery_days:"maxDays",payment_type:"paymentType",payment_types:"paymentTypes",payment_amount:"amount",reference_code:"code",is_default:"isDefault",is_available:"isAvailable",delete_coupon:"deleteCoupon",form_attributes:"formAttributes",booking_attributes:"bookingAttributes",readable_form_attr:"formFields",created_at:"createdAt",updated_at:"updatedAt",page_number:"page",page_size:"pageSize",total_count_raw:"totalCountRaw",max_price:"maxPrice",min_price:"minPrice",stock_alert_limit:"stockAlertLimit",sub_categories:"subCategories",order_number:"orderNumber",sort_order:"sortOrder",pinned_ids:"pinnedIds",region_id:"regionId",city_id:"cityId",parent_id:"parentId",discount_code:"discountCode",entity_name:"entityType",entity_id:"entityId",other_props:"entity",shipping_methods:"shippingMethods",shipping_rates:"shippingRates",grouped_shipping_rates:"groupedShippingRates",items_shipping_rate:"itemsShippingRate",shipping_rate:"shippingRate",rate_id:"rateId",invoice_item_id:"invoiceItemId",invoice_item_ids:"invoiceItemIds",scheduler_booking_attributes:"schedulerBookingAttributes",inventory_count:"inventoryCount",order_identifier:"orderIdentifier",self_only:"selfOnly",coupon:"coupon",discount_usages:"discountUsages",user_set_coordinates_before:"userSetCoordinatesBefore",show_order:"showOrder",alt:"alt",url:"url",activate_add_to_cart_alert:"addToCardAlert",activate_advanced_card_to_card:"advancedCardToCard",activate_ayria_payment_customization:"ayriaPaymentGateway",activate_azki_payment_customization:"azkiPaymentGateway",activate_bazar_payment_customization:"bazarPaymentGateway",activate_blog:"shopBlog",activate_card_to_card_payment:"cardToCardPayment",activate_checkout_dynamic_form:"checkoutDynamicForm",activate_different_register_customization:"multiTypeRegister",activate_digipay_payment:"digipayPaymentGateway",activate_digipay_payment_customization:"digipayPaymentGateway",activate_filter_products:"productFilters",activate_ghesta_payment_customization:"ghestaPaymentGateway",activate_mega_footer:"megaFooter",activate_mellat_payment_customization:"mellatPaymentGateway",activate_min_basket:"checkoutMinimumAmount",activate_novapay_payment_customization:"novapayPaymentGateway",activate_ozon_payment_customization:"ozonPaymentGateway",activate_payment_in_place:"paymentInPlace",activate_payping_payment:"paypingPaymentGateway",activate_pec_payment_customization:"pecPaymentGateway",activate_sabin_payment_customization:"sabinPaymentGateway",activate_sadad_payment_customization:"sadadPaymentGateway",activate_search:"shopSearch",activate_sep_payment_customization:"sepPaymentGateway",activate_shop_vat:"shopVat",activate_snapppay_payment_customization:"snapppayPaymentGateway",activate_tajrobe:"tajrobe",activate_tara_payment_customization:"taraPaymentGateway",activate_theme_config_settings:"themeConfigSettings",activate_toman_payment_customization:"tomanPaymentGateway",activate_torobpay_payment_customization:"torobpayPaymentGateway",activate_up_payment_customization:"asanpardakhtPaymentGateway",activate_vandar_payment_customization:"vandarPaymentGateway",activate_wallet:"wallet",activate_yourgate_payment_customization:"yourgatePaymentGateway",activate_zarinpal_payment:"zarinpalPaymentGateway",activate_zarinplus_payment_customization:"zarinplusPaymentGateway",activate_zibal_payment_customization:"zibalPaymentGateway",activate_zify_payment_customization:"zifyPaymentGateway",disable_ordering:"disableOrdering",pwa:"progressiveWebApp",remove_front_basket:"hideCheckout",remove_front_taint:"sazitoBrandingRemoval"},o=Object.values(s).reduce((t,e)=>(t[e]=(t[e]||0)+1,t),{}),d=Object.entries(s).reduce((t,[e,a])=>(1===o[a]&&(t[a]=e),t),{});function c(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function p(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function u(t){return!(null===t||"object"!=typeof t||Array.isArray(t)||t instanceof Date)}function l(t,e){const a={...t};for(const t of e)delete a[t];return a}function m(t){if(!u(t))return Array.isArray(t)?t.map(t=>m(t)):t;const e={};for(const[a,r]of Object.entries(t)){let t=s[a];t||(t=c(a)),u(r)?e[t]=m(r):Array.isArray(r)?e[t]=r.map(t=>m(t)):e[t]=r}return e}function h(t){if(!u(t))return Array.isArray(t)?t.map(t=>h(t)):t;const e={};for(const[a,r]of Object.entries(t)){let t=d[a];t||(t=p(a)),u(r)?e[t]=h(r):Array.isArray(r)?e[t]=r.map(t=>h(t)):e[t]="string"==typeof r&&i.has(t)?n(r):r}return e}function y(t){const e=t;if(u(e?.data?.result)){const t=e.data.result,a=Object.keys(t);return 1===a.length&&u(t[a[0]])?m(t[a[0]]):m(t)}return m(t)}function g(t){if(!t)return{};if(!u(t))return{};const{general:e,shop:a,checkout:r,features:i,wallet:n,tajrobe:s,domain:o,enamad:d,google:c,logo:p,social:l,...m}=t,h={...u(e)?e:{},...u(a)?a:{}},{registerType:y,showProductStockNumber:g,...A}=h||{};return{...m,scripts:{enamad:d,google:c},shop:v({...A,domain:o,logo:p,social:l}),settings:{checkout:f(r),features:I(i),wallet:C(n),tajrobe:S(s),registerType:b(y),showProductStockNumber:_(g)}}}function f(t){if(!u(t))return{};const e=u(t.minBasket)?t.minBasket:{},a=e.minAmount??e.minBasket,r="number"==typeof a?a:Number(a),i={...t,addToCartAlert:_(t.addToCartAlert),dynamicForm:_(t.dynamicForm),emailOptional:_(t.emailOptional??t.email_optional),preventRedirect:_(t.preventRedirect??t.manual),minBasket:{enabled:_(e.enabled),minAmount:Number.isFinite(r)?r:0},miniCart:_(t.miniCart),postalCodeMandatory:_(t.postalCodeMandatory),quickAddToCart:_(t.quickAddToCart)};return delete i.manual,i}function b(t){return"string"==typeof t?t:""}function _(t){return"boolean"==typeof t?t:u(t)&&Object.prototype.hasOwnProperty.call(t,"enabled")?_(t.enabled):1===t||"1"===t||"true"===t}function v(t){if(!u(t))return{};const e={...t};if(u(e.city)){const t=l(e.city,["createdAt","updatedAt"]);let a=t.region;u(a)&&(a=l(a,["createdAt","updatedAt","cities"])),t.region=a,e.city=t}return e}const 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"},w=new Set(["activateAlopeykAdvanced","activate_alopeyk_advanced"]),P=new Set(["auditLogEnabled","editOrderEnabled","rahkaranAccountingCustomizationEnabled","advancedThemeDesignerEnabled","checkoutHidden","eventPublisherEnabled","exportOrdersEnabled","exportProductsEnabled","exportUsersEnabled","fontCustomizationEnabled","forwardShippingEnabled","podroShippingEnabled","postexShippingEnabled","quotaNotificationsEnabled","recaptchaEnabled","rolePoliciesEnabled","sepidarAccountingCustomizationEnabled","shortUrlEnabled","skuSearchEnabled","snappShopCustomizationEnabled","snappboxShippingEnabled","stockAlertNotificationsEnabled","tapsipackShippingEnabled","themeConfigSettingsEnabled","advancedTextEditorEnabled","advancedShippingEnabled","bulkActionEnabled","discountBulkEnabled","discountCodeEnabled","orderBulkActionEnabled","importProductsEnabled","mahakAccountingCustomizationEnabled","millipayPaymentCustomizationEnabled","orderSmsNotificationsEnabled"]);function I(t){if(!u(t))return{};const e={},a=(t,a)=>{if(w.has(t))return;const r=(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!==r&&(e[t]=r)};u(t.flags)&&Object.entries(t.flags).forEach(([t,e])=>{a(t,e)}),u(t.configurations)&&Object.entries(t.configurations).forEach(([t,e])=>{a(t,e)}),Object.entries(t).forEach(([t,e])=>{"flags"!==t&&"premium"!==t&&"configurations"!==t&&(u(e)&&Object.prototype.hasOwnProperty.call(e,"enabled")?a(t,e.enabled):a(t,e))});const r={};Object.entries(e).forEach(([t,e])=>{const a=function(t){const e=t.includes("_")?c(t):t,a=A[e];if(a)return a;const r=e.startsWith("activate")&&e.length>8?`${e.charAt(8).toLowerCase()}${e.slice(9)}`:e;return r.endsWith("Enabled")||r.endsWith("Disabled")||r.endsWith("Hidden")||r.endsWith("Removed")?r:`${r}Enabled`}(t);P.has(a)||(r[a]=e)});const i={...r};return u(t.premium)&&(i.premium=t.premium),i}function C(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t},a=t=>"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0;return{enabled:a(e.enabled)??!1,useWithDiscount:a(e.useWithDiscount)??!1,minAmount:(t=>{if("number"==typeof t&&Number.isFinite(t))return t;const e=Number(t);return Number.isFinite(e)?e:void 0})(e.minAmount??e.walletMinAmount)??0,minAmountRequired:a(e.minAmountRequired??e.walletMinStatus)??!1}}function S(t){if(!u(t))return{};const e=u(t.configurations)?{...t,...t.configurations}:{...t};let a=!1;return"boolean"==typeof e.enabled?a=e.enabled:1!==e.enabled&&"1"!==e.enabled&&"true"!==e.enabled||(a=!0),{enabled:a}}function E(t){const e=y(t);if(!u(e))return{};const a=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=q(t),a=j(t.productVariantId??e.variantId)??e.variantId;return{id:K(t.id??t.cartProductId)??"",createdAt:B(t.createdAt),updatedAt:B(t.updatedAt),productVariantId:a,quantity:j(t.quantity)??0,unitPrice:j(t.unitPrice)??0,lineTotal:j(t.lineTotal)??0,product:e,formAttributes:t.formAttributes,formFields:t.formFields,bookingAttributes:t.bookingAttributes}}(t)):[];return{...e,items:a,netTotal:j(e.netTotal)??0,grossTotal:j(e.grossTotal),needsShipping:Boolean(e.needsShipping),minBasketLimitViolated:Boolean(e.minBasketLimitViolated),deleteCoupon:void 0===e.deleteCoupon?void 0:Boolean(e.deleteCoupon)}}function z(t){const e=y(t);if(!u(e))return{};const a=l(e,["shippingMethod","user","userData"]),r=Array.isArray(e.items)?e.items.map(t=>function(t){if(!u(t))return{};const e=q(t),a=j(t.productVariantId??e.variantId)??e.variantId,r=Array.isArray(e.attributes)?e.attributes:[],i=U(e.hasMaxOrder??t.hasMaxOrder);return{id:K(t.id??t.invoiceItemId??t.cartProductId)??"",productVariantId:a,productId:j(e.productId??t.productId),name:B(t.name)??B(e.name)??"",url:B(e.url)??B(t.url),attributes:r,productType:B(e.productType)??B(t.productType),hasMaxOrder:i,maxOrderQuantity:j(e.maxOrderQuantity??t.maxOrderQuantity),minOrderQuantity:j(e.minOrderQuantity??t.minOrderQuantity),image:Y(t.image??e.image),quantity:j(t.quantity)??0,unitPrice:j(t.unitPrice)??0,lineTotal:j(t.lineTotal)??0,rawPrice:j(t.rawPrice??t.originalPrice)??0,customerProfit:j(t.customerProfit)??0,commercialFiles:t.commercialFiles,formAttributes:t.formAttributes,bookingAttributes:t.bookingAttributes,formFields:t.formFields}}(t)):[],i=Array.isArray(e.discountUsages)?e.discountUsages:[],n=i[0],s=u(n)&&u(n.discountCode)?B(n.discountCode.code):void 0;return{...a,items:r,shippingAddress:function(t){if(!t)return;const{id:e,city:a,region:r,...i}=t,n={id:r?.id??a.regionId??0,name:r?.name??"",city:a};return{...i,region:n}}($(e.shippingAddress)),shippingItems:Array.isArray(e.shippingItems)?e.shippingItems.map(t=>function(t){if(!u(t))return{};const e=u(t.rate)?t.rate:u(t.shippingRate)?t.shippingRate:u(t.shippingMethod)?t.shippingMethod:t;return{invoiceItemIds:M(t),rate:X(e)}}(t)):[],discountUsages:i,netTotal:j(e.netTotal)??0,finalTotal:j(e.finalTotal)??0,vat:j(e.vat)??0,vatPercent:j(e.vatPercent)??0,itemsDiscount:j(e.itemsDiscount)??0,discountTotal:j(e.discountTotal)??0,customerProfit:j(e.customerProfit)??0,customerProfitPercentage:j(e.customerProfitPercentage)??0,itemsTotalRawPrice:j(e.itemsTotalRawPrice)??0,couponTotal:j(e.couponTotal)??0,shippingTotal:j(e.shippingTotal)??0,creditTotal:j(e.creditTotal)??0,needsShipping:Boolean(e.needsShipping),userComment:"string"==typeof e.userComment?e.userComment:void 0,discountCode:s}}function T(t){const e=y(t);if(!u(e))return{};if(!u(e.invoice))return e;const a=z(e.invoice),{items:r,...i}=a;return{...e,invoice:{...i,invoiceItems:Array.isArray(r)?r:[]}}}function N(t){const e=y(t);if(!u(e))return{};const a=Array.isArray(e.orders)?e.orders.map(t=>T(t)):[],r=j(e.pageNumber??e.page),i=j(e.pageSize),n=j(e.totalCount??e.total)??a.length;return{...l(e,["page","total"]),orders:a,totalCount:n,...void 0!==r?{pageNumber:r}:{},...void 0!==i?{pageSize:i}:{}}}function k(t){const e=y(t);if(!u(e))return{};const a=Array.isArray(e.transactions)?e.transactions:Array.isArray(e.walletTransactions)?e.walletTransactions:[],r=j(e.pageNumber??e.page),i=j(e.pageSize),n=j(e.totalCount??e.total);return{...l(e,["page","total","walletTransactions"]),transactions:a,...void 0!==r?{pageNumber:r}:{},...void 0!==i?{pageSize:i}:{},...void 0!==n?{totalCount:n}:{}}}function x(t){return $(t)}function R(t){const e=y(t);if(u(e))return O(e)}function O(t){if(!t)return;const e=function(t){const e=G(t);if(!e)return;if(1===Object.keys(e).length&&u(e.user))return G(e.user)??e.user;return e}(t);if(!e)return;const a={},r=j(e.id);void 0!==r&&(a.id=r);const i=B(e.email);i&&(a.email=i);const n=B(e.mobilePhone)??B(e.phoneNumber);n&&(a.mobilePhone=n);const s=B(e.phoneNumber);s&&s!==n&&(a.phoneNumber=s);const o=B(e.firstName);o&&(a.firstName=o);const d=B(e.lastName);d&&(a.lastName=d);const c=B(e.birthDate);return c&&(a.birthDate=c),Object.keys(a).length>0?a:void 0}function $(t){if(!t||0===Object.keys(t).length)return;const e=O(t.user),a=G(t.region),r=G(t.city),i=G(r?.region),n=B(t.regionName)??F(t.region),s=D(a??t.region,{fallbackId:j(t.regionId),fallbackName:n})??D(i,{fallbackId:j(t.regionId),fallbackName:n}),o=j(t.regionId)??s?.id,d=B(t.cityName)??B(r?.name)??F(t.city),c=function(t,e={}){if(null==t)return;const a=G(t),r=j(a?.id)??j(t)??e.fallbackId,i=B(a?.name)??F(t)??e.fallbackName;if(void 0===r||!i)return;const n={id:r,name:i},s=j(a?.regionId)??e.fallbackRegionId;void 0!==s&&(n.regionId=s);const o=j(a?.latitude);void 0!==o&&(n.latitude=o);const d=j(a?.longitude);void 0!==d&&(n.longitude=d);return n}(r??t.city,{fallbackId:j(t.cityId),fallbackName:d,fallbackRegionId:o}),p=B(t.firstName)??e?.firstName??"",u=B(t.lastName)??e?.lastName??"",l={id:j(t.id)??0,identifier:B(t.identifier)??"",firstName:p,lastName:u,city:c??{id:j(t.cityId??t.city)??0,name:d??"",...void 0!==o?{regionId:o}:{}},address:B(t.address)??""},m=B(t.mobilePhone)??B(t.phoneNumber)??e?.mobilePhone??e?.phoneNumber,h=B(t.phoneNumber)??e?.phoneNumber;m&&(l.mobilePhone=m),h&&h!==m&&(l.phoneNumber=h);const y=B(t.email)??e?.email;y&&(l.email=y),s&&(l.region=s);const g=B(t.postalCode);g&&(l.postalCode=g);const f=B(t.description);f&&(l.description=f);const b=j(t.latitude);void 0!==b&&(l.latitude=b);const _=j(t.longitude);void 0!==_&&(l.longitude=_);const v=U(t.userSetCoordinatesBefore);return void 0!==v&&(l.userSetCoordinatesBefore=v),l}function D(t,e={}){if(null==t)return;const a=G(t),r=j(a?.id)??j(t)??e.fallbackId,i=B(a?.name)??F(t)??e.fallbackName;return void 0!==r&&i?{id:r,name:i}:void 0}function G(t){if(u(t))return u(t.data)?t.data:t}function F(t){const e=B(t);if(e)return void 0===j(e)?e:void 0}function M(t){return(Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:void 0!==t.invoiceItemId?[t.invoiceItemId]:[]).map(t=>K(t)).filter(t=>void 0!==t)}function j(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 B(t){if("string"!=typeof t)return;const e=t.trim();return e.length>0?e:void 0}function U(t){return"boolean"==typeof t?t:1===t||"1"===t||"true"===t||0!==t&&"0"!==t&&"false"!==t&&void 0}function K(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 q(t){if(!u(t))return{variantId:0,name:"",attributes:[]};const e=u(t.variant)?t.variant:void 0,a=u(e?.product)?e.product:void 0,r=u(t.product)?t.product:void 0,i=j(r?.variantId??e?.id??t.productVariantId??t.variantId)??0,n=Array.isArray(r?.attributes)?r.attributes:Array.isArray(e?.attributes)?e.attributes:Array.isArray(t.attributes)?t.attributes:[];return{variantId:i,productId:j(r?.productId??t.productId??a?.id),name:B(r?.name)??B(t.name)??"",url:B(r?.url)??B(t.url)??B(a?.url),image:Y(r?.image??t.image),attributes:n,productType:B(r?.productType)??B(t.productType)??B(a?.productType),hasMaxOrder:r?.hasMaxOrder??t.hasMaxOrder??e?.hasMaxOrder,maxOrderQuantity:j(r?.maxOrderQuantity??t.maxOrderQuantity??e?.maxOrderQuantity),minOrderQuantity:j(r?.minOrderQuantity??t.minOrderQuantity??e?.minOrderQuantity)}}function L(t){if(!u(t))return{};const e=l(t,["staticUrl","summary","tags","slug"]);return e.variants&&Array.isArray(e.variants)&&(e.variants=e.variants.map(t=>u(t)?l(t,["name","title","product","status","soldCount"]):{})),e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(t=>u(t)?{id:t.id,name:t.name,url:t.url}:{})),e.images&&Array.isArray(e.images)&&(e.images=e.images.map(t=>Y(t)??{})),e}function Y(t){return u(t)?l(t,["widthRatio","heightRatio","thumb","order"]):t}function V(t){const e=L(t);return e?l(e,["themeConfig"]):e}function Q(t){const e=y(t);if(e.items&&Array.isArray(e.items)){const t=j(e.total)??e.items.length,a=j(e.pageSize)??e.items.length,r=j(e.page)??1,i=j(e.totalPages)??Math.ceil(t/a);return{items:e.items.map(t=>V(t)),total:t,page:r,pageSize:a,totalPages:i}}return e}function W(t){if(!u(t))return{products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};const e=t,a={products:{items:[],total:0,page:1,pageSize:20},blogPages:{items:[],total:0,page:1,pageSize:20},cmsPages:{items:[],total:0,page:1,pageSize:20},productCategories:{items:[],total:0,page:1,pageSize:20}};return Array.isArray(e.items)&&(a.products.items=e.items.map(t=>V(t)),a.products.total=j(e.productsCount)??0,a.products.page=j(e.productsPageNumber)??1,a.products.pageSize=j(e.productsPageSize)??20),Array.isArray(e.blogPages)&&(a.blogPages.items=e.blogPages.map(t=>rt(t)),a.blogPages.total=j(e.blogPagesCount)??0,a.blogPages.page=j(e.blogPagesPageNumber)??1,a.blogPages.pageSize=j(e.blogPagesPageSize)??20),Array.isArray(e.cmsPages)&&(a.cmsPages.items=e.cmsPages.map(t=>rt(t)),a.cmsPages.total=j(e.cmsPagesCount)??0,a.cmsPages.page=j(e.cmsPagesPageNumber)??1,a.cmsPages.pageSize=j(e.cmsPagesPageSize)??20),Array.isArray(e.categories)&&(a.productCategories.items=e.categories.map(t=>et(t)),a.productCategories.total=j(e.productCategoriesCount)??0,a.productCategories.page=j(e.productCategoriesPageNumber)??1,a.productCategories.pageSize=j(e.productCategoriesPageSize)??20),a}function J(t){const e=y(t);if(!u(e))return[];return(Array.isArray(e.paymentTypes)?e.paymentTypes:Array.isArray(e.methods)?e.methods:[]).map(t=>u(t)?{id:j(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:j(t.paymentSubType)??null,order:j(t.order)??0,isDefault:Boolean(t.isDefault)}:{id:0,code:"",title:"",titleFa:"",description:null,paymentSubType:null,order:0,isDefault:!1})}function H(t){const e=y(t);return(Array.isArray(e)?e:u(e)&&Array.isArray(e.shippingMethods)?e.shippingMethods:[]).map(t=>function(t){if(!u(t))return{id:0,name:"",type:""};return{id:j(t.id)??0,name:B(t.name)??"",type:B(t.type)??""}}(t))}function Z(t){const e=y(t);if(!u(e))return{shippingMethods:[],groupedShippingRates:{},itemsShippingRate:[]};const a={};if(Array.isArray(e.shippingMethods)&&e.shippingMethods.forEach((t,e)=>{if(!u(t))return;const r=Array.isArray(t.shippingRate)?t.shippingRate.map(t=>X(t)):[];if(0===r.length)return;const i=Array.isArray(t.invoiceItemIds)?t.invoiceItemIds:[],n=i.length>0?i.map(String).sort().join(","):String(e);a[n]=r}),0===Object.keys(a).length&&u(e.groupedShippingRates))for(const[t,r]of Object.entries(e.groupedShippingRates))a[t]=Array.isArray(r)?r.map(t=>X(t)):[];return{shippingMethods:[],groupedShippingRates:a,itemsShippingRate:Array.isArray(e.itemsShippingRate)?e.itemsShippingRate.map(t=>u(t)?{invoiceItemId:K(t.invoiceItemId)??M(t)[0]??"",shippingRate:X(t.shippingRate??t.rate??t)}:{invoiceItemId:"",shippingRate:X(void 0)}):[]}}function X(t){return u(t)?{id:j(t.id??t.rateId)??0,name:B(t.name)??"",price:j(t.price??t.amount)??0,description:B(t.description??t.deliveryDescription??t.details),icon:B(t.icon??t.iconUrl??t.logo),color:B(t.color??t.bgColor??t.backgroundColor??t.iconColor),type:B(t.type)}:{id:0,name:"",price:0}}function tt(t){return u(t)?l(t,["staticUrl","products","items"]):{}}function et(t){const e=tt(t);return e?l(e,["themeConfig"]):{}}function at(t){return u(t)?l(t,["staticUrl","urlKey"]):{}}function rt(t){const e=at(t);return e?l(e,["themeConfig"]):{}}function it(t){const e=y(t);if(!e||!e.route)return e??{};const a=u(e.route)?e.route:{};if(a.entity){switch(a.entityType){case"product":a.entity=L(a.entity);break;case"product_category":a.entity=tt(a.entity);break;case"cms_page":case"blog_page":a.entity=at(a.entity)}u(a.entity)&&(a.entity=l(a.entity,["id"])),!a.url&&u(a.entity)&&a.entity.url&&(a.url=a.entity.url)}return a}function nt(t){if(!u(t))return{};const e={...t};return e.entity&&(e.entity=et(e.entity),u(e.entity)&&(e.entity=l(e.entity,["id"]))),e.children&&Array.isArray(e.children)&&(e.children=e.children.map(nt)),e}function st(t){const e=y(t);return e?e.cmsPages&&Array.isArray(e.cmsPages)?{items:e.cmsPages.map(rt),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=>rt(t)),total:e.total||e.items.length,page:e.page||1,pageSize:e.pageSize||e.items.length}:e:{}}function ot(t){if(!u(t))return{};const e={};if(void 0!==t.page&&(e.page_number=t.page),void 0!==t.pageSize&&(e.page_size=t.pageSize),t.cmsPageTypes){const a=Array.isArray(t.cmsPageTypes)?t.cmsPageTypes[0]:t.cmsPageTypes;e["filters[]"]=JSON.stringify({name:"cms_page_types",value:a})}return e}function dt(t){if(!u(t))return{};const e={};if(t.entityType&&(e.entityType=t.entityType),void 0!==t.entityId&&(e.entityId=t.entityId),u(t.entity)){const a=l(t.entity,["staticUrl","id"]);Object.keys(a).length>0&&(e.entity=a)}return t.details&&(e.details=t.details),t.children&&Array.isArray(t.children)&&(e.children=t.children.map(t=>dt(t))),e}function ct(t){const e=y(t);if(!e||!e.tree)return e??{};const a=u(e.tree)?e.tree:{};return u(a.treeStructure)&&Array.isArray(a.treeStructure.nodes)&&(a.treeStructure.nodes=a.treeStructure.nodes.map(t=>dt(t))),e}class pt{constructor(t){this.config=t,this.baseUrl="http://api.sazito.com:8080",this.domain=t.domain,this.tokenStorage=new a,this.cache=new r,this.fetchApi=t.customFetchApi.bind(globalThis)}async get(t,e){const a=e?.params?h(e.params):void 0,i=this.buildUrl(t,a),n=r.generateKey("GET",i,a);if(!1!==e?.cache){const e=this.getApiName(t),a=this.config.cache[e];if(a?.enabled&&a.ttl){const e=this.cache.get(n,a.ttl);if(e)return this.config.debug&&console.log("[Sazito SDK] Cache hit:",t),{data:e}}}const s=await this.request("GET",i,e);return s.data&&!1!==e?.cache&&this.cache.set(n,s.data),s}async post(t,e,a){const r=this.buildUrl(t),i=this.isMultipartBody(e),n=e?i?e:h(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("POST",r,{...a,body:n,rawBody:i,omitJsonContentType:i})}async put(t,e,a){const r=this.buildUrl(t),i=this.isMultipartBody(e),n=e?i?e:h(e):void 0,s=this.getApiName(t);return this.cache.deletePattern(`GET:.*${s}`),this.request("PUT",r,{...a,body:n,rawBody:i,omitJsonContentType:i})}async delete(t,e){const a=this.buildUrl(t),r=this.getApiName(t);return this.cache.deletePattern(`GET:.*${r}`),this.request("DELETE",a,e)}async request(t,e,a,r=0){const i=new AbortController,n=a?.signal||i.signal,s=a?.timeout||this.config.timeout,o=setTimeout(()=>i.abort(),s);try{const i=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(!i.ok&&this.shouldRetry(i.status)&&r<s)return this.config.debug&&console.log(`[Sazito SDK] Retrying request (${r+1}/${s}):`,e),await this.delay(this.config.retry.retryDelay*(r+1)),this.request(t,e,a,r+1);const d=await this.parseResponseBody(i);if(a?.skipTransform&&i.ok)return{data:d};const c=void 0!==d?.result?d.result:d;this.config.debug&&console.log(`[Sazito SDK] ${t} ${e}:`,{status:i.status,data:c});let p=c?m(c):c;const u=["cart","product","user","order","invoice","payment","shippingAddress"];if(p&&"object"==typeof p&&!Array.isArray(p)){const t=Object.keys(p);1===t.length&&u.includes(t[0])&&"object"==typeof p[t[0]]&&null!==p[t[0]]&&(p=p[t[0]])}return i.ok?{data:p}:{error:{status:i.status,message:this.extractErrorMessage(p,i.statusText),type:"api",details:p}}}catch(t){return clearTimeout(o),this.config.debug&&console.error("[Sazito SDK] Request failed:",t),{error:{message:"AbortError"===t?.name?"Request timeout":t?.message||"Network error",type:"network",details:this.serializeErrorDetails(t)}}}}async parseResponseBody(t){const e=await t.text();if(!e)return;const a=t.headers.get("content-type");if(!a?.includes("application/json"))return e;try{return JSON.parse(e)}catch{return e}}extractErrorMessage(t,e){const a=t=>{if("string"==typeof t)return t.trim()||void 0;if(Array.isArray(t))for(const e of t){const t=a(e);if(t)return t}else if(t&&"object"==typeof t)for(const e of["message","error","errors","detail","title"]){const r=a(t[e]);if(r)return r}};return a(t)||e||"Request failed"}serializeErrorDetails(t){return{name:"string"==typeof t?.name?t.name:"Error",message:"string"==typeof t?.message?t.message:String(t)}}buildUrl(t,e){const a=`${this.baseUrl}${t}`;if(!e||0===Object.keys(e).length)return a;const r=new URLSearchParams;return Object.entries(e).forEach(([t,e])=>{null!=e&&r.append(t,String(e))}),`${a}?${r.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 r=this.tokenStorage.get();return r&&(a.Authorization=r),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 ut{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 lt{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 ut)}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 mt="/api/v1/product_categories",ht="/api/v1/search",yt="/api/v2/carts",gt="/api/v2/invoices",ft="/api/v2/shipping_addresses",bt="/api/v2/payments",_t="/api/v1/orders",vt="/api/v1/users",At="/api/v1/sessions",wt="/api/v1/feedbacks",Pt="/api/v1/cms_pages",It="/api/v1/images",Ct="/api/v1/scheduler/events",St="/api/v1/scheduler/bookings",Et="/api/v1/entity_route/route",zt="/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}`,r=await this.http.get(Et,{...e,params:{url_part:a}});if(r.data){const t=it(r.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 r.error?{error:r.error}:{error:{message:"No data returned from product endpoint",type:"api"}}}async list(t,e){const a=this.transformFilters(t),r=await this.http.get("/api/v1/products",{...e,params:a});if(r.data){return{data:Q(r.data)}}return r}async search(t,e,a){const r={query:t,search_direction:"center",page_size:e?.pageSize||20,page_number:e?.page||1},i=await this.http.get(ht,{...a,params:r});if(i.data){return{data:W(i.data)}}return i}}class Nt{constructor(t){this.http=t}async get(t,e){const a=await this.http.get(`${mt}/${t}`,e);if(a.data){const t=function(t){const e=y(t);return e?tt(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 r=await this.http.get(mt,{...e,params:a});if(r.data){const t=function(t){const e=y(t);return e?(e.categories&&Array.isArray(e.categories)&&(e.categories=e.categories.map(et)),u(e.tree)&&u(e.tree.treeStructure)&&Array.isArray(e.tree.treeStructure.nodes)&&(e.tree.treeStructure.nodes=e.tree.treeStructure.nodes.map(nt)),e):{}}(r.data);return{data:t}}return r}}class kt{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(`${yt}/0`,{...t,params:{identifier:e.identifier}});return a.data?{data:E(a.data)}:(a.error&&this.clearCart(),a)}async create(t,e){const a=await this.http.post(yt,t,e);if(!a.data)return a;const r=E(a.data);return this.persistCartCredentials(r),{data:r}}async addItem(t,e,a,r){return this.addItemWithAttributes(t,e,{formAttributes:a},r)}async addItemWithAttributes(t,e,a,r){const i=this.credentials.getCartCredentials();if(!i)return this.create({variants:[{id:t,count:e,formAttributes:a?.formAttributes}],schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},r);const n=await this.http.post(`${yt}/0/add_products_to_cart`,{identifier:i.identifier,variants:[{id:t,count:e}],formAttributes:a?.formAttributes,schedulerBookingAttributes:a?.schedulerBookingAttributes,coupon:a?.coupon},r);if(n.data){const t=E(n.data);return this.persistCartCredentials(t),{data:t}}return 422===n.error?.status&&this.clearCart(),n}async updateItem(t,e,a,r,i){return this.updateItemWithAttributes(t,e,a,{formAttributes:r},i)}async updateItemWithAttributes(t,e,a,r,i){const n=this.credentials.getCartCredentials();if(!n)return{error:{message:"No cart found",type:"validation"}};const s=await this.http.post(`${yt}/0/update_products_in_cart`,{identifier:n.identifier,cartProductId:String(t),variants:[{id:e,count:a}],formAttributes:r?.formAttributes,coupon:r?.coupon,deleteCoupon:r?.deleteCoupon},i);if(s.data){const t=E(s.data);return this.persistCartCredentials(t),{data:t}}return s}async removeItem(t,e,a){const r=this.credentials.getCartCredentials();if(!r)return{error:{message:"No cart found",type:"validation"}};const i=await this.http.post(`${yt}/0/remove_products_from_cart`,{identifier:r.identifier,cartProductId:String(t),variants:[{id:e}]},a);if(i.data){const t=E(i.data);return this.persistCartCredentials(t),{data:t}}return i}clearCart(){this.credentials.clearCartCredentials()}}class xt{constructor(t){this.http=t}async list(t,e){const a={pageNumber:t?.pageNumber??1,pageSize:t?.pageSize??20};t?.filters&&t.filters.length>0&&(a.filters=JSON.stringify(t.filters));const r=await this.http.get(_t,{...e,params:a});return r.data?{data:N(r.data)}:r}async get(t,e){const a=await this.http.get(`${_t}/${t}`,e);return a.data?{data:T(a.data)}:a}}class Rt{constructor(t,e){this.http=t,this.credentials=e}normalizeInvoiceResponse(t){return t.data?{data:z(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 r=await this.http.post(`${gt}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(r)}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(gt,{cart_id:String(0),cart_identifier:e.identifier},t);if(a.data){const t=z(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 r=await this.http.post(`${gt}/${a.id}/refresh`,{cart_id:String(0),cart_identifier:e.identifier,identifier:a.identifier},t);return this.normalizeInvoiceResponse(r)}async addShippingAddress(t,e,a){const r=this.credentials.getCartCredentials(),i=this.credentials.getInvoiceCredentials();if(!r||!i)return{error:{message:"No cart or invoice found",type:"validation"}};const n=await this.http.post(`${gt}/${i.id}/add_shipping_address`,{identifier:i.identifier,shipping_address_identifier:e,cart_id:0,cart_identifier:r.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 r=await this.http.post(`${gt}/${a.id}/add_discount_code`,{identifier:a.identifier,discount_code:t.toUpperCase()},e);return r.data?(this.credentials.setDiscountCode(t.toUpperCase()),{data:z(r.data)}):r}async assignShippingMethod(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const r=t.map(t=>({...t,invoiceItemIds:t.invoiceItemIds.map(t=>String(t))})),i=await this.http.post(`${gt}/${a.id}/add_shipping_method`,{identifier:a.identifier,shippings:r},e);return this.normalizeInvoiceResponse(i)}async addDetails(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const r=await this.http.post(`${gt}/${a.id}/add_invoice_details`,{identifier:a.identifier,user_comment:t},e);return this.normalizeInvoiceResponse(r)}async addForm(t,e){const a=this.credentials.getInvoiceCredentials();if(!a)return{error:{message:"No invoice found",type:"validation"}};const r=await this.http.post(`${gt}/${a.id}/add_form`,{invoiceIdentifier:t.invoiceIdentifier||t.identifier||a.identifier,formAttributes:t.formAttributes},e);return this.normalizeInvoiceResponse(r)}async addCredit(t){const e=this.credentials.getInvoiceCredentials();if(!e)return{error:{message:"No invoice found",type:"validation"}};const a=await this.http.post(`${gt}/${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(`${gt}/${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(`${gt}/${e.id}/applicable_shipping_methods`,{...t,cache:t?.cache??!1,params:{identifier:e.identifier}});return a.data?{data:Z(a.data)}:a}clearInvoice(){this.credentials.clearInvoiceCredentials()}}class Ot{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,r=t.shippingAddress??t.shipping_address??t.data;if(void 0===r)break;e=r}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),r=await this.http.post(ft,{shipping_address:a},e);if(r.data){const t=x(this.unwrapAddressPayload(r.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):r}return r}async updateAddress(t,e){const a=this.credentials.getShippingCredentials();if(!a)return this.createAddress(t,e);const r=this.sanitizeAddressInput(t),i=await this.http.post(ft,{identifier:a.identifier,shipping_address:r},e);if(i.data){const t=x(this.unwrapAddressPayload(i.data));return t?(this.credentials.setShippingCredentials({id:t.id,identifier:t.identifier}),{data:t}):i}return i}async listAddresses(t){const e=await this.http.get(ft,{...t,cache:t?.cache??!1});if(e.error)return{error:e.error};return{data:this.extractAddressList(e.data).map(t=>x(this.unwrapAddressPayload(t))).filter(t=>Boolean(t?.identifier)).sort((t,e)=>e.id-t.id)}}async getAddress(t){const e=this.credentials.getShippingCredentials();if(!e)return{error:{message:"No shipping address found",type:"validation"}};const a=await this.http.get(`${ft}/${e.id}`,{...t,params:{identifier:e.identifier}});if(a.data){const t=x(this.unwrapAddressPayload(a.data));return t?{data:t}:a}return a}async getMethods(t){const e=await this.http.get("/api/v2/shipping_methods",t);return e.data?{data:H(e.data)}:e.error?{error:e.error}:{data:[]}}clearAddress(){this.credentials.clearShippingCredentials()}}class $t{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(`${bt}/list`,{invoice_identifier:e.identifier},t);return a.data?{data:J(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 r=await this.http.post(bt,{invoice_identifier:a.identifier,payment_type:t},{...e,skipTransform:!0});if(r.error)return{error:r.error};if(r.data){const t=r.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),r=e.payment_type,i={id:a,identifier:t,amount:Number(e.payment_amount??0),paymentType:{id:null!=r?.id?Number(r.id):void 0,code:r?.reference_code??""}};return t&&this.credentials.setPaymentCredentials({id:a,identifier:t}),{data:i}}}return{data:r.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:r,...i}=t??{},n=await this.http.post(`${bt}/${a.id}/process_payment_step`,{paymentIdentifier:r||a.identifier,...i},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 r=this.buildProcessStepFormData(t,a.identifier);if(!r)return{error:{message:"FormData is not available in this runtime.",type:"validation"}};const i=await this.http.post(`${bt}/${a.id}/process_payment_step`,r,e);return this.finalizeStepResponse(i,a.id,e)}async pollUntilSettled(t,e=15e3){let a=!0;for(;a;){const r=await this.verify(void 0,t);if(!r.data)return r;if("pending"!==r.data.action)return a=!1,r;await new Promise(t=>setTimeout(t,e))}return{error:{message:"Payment polling exited unexpectedly",type:"api"}}}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=h(t),r=new FormData;return Object.entries(a).forEach(([t,e])=>{this.appendFormValue(r,t,e)}),r.has("payment_identifier")||r.append("payment_identifier",e),r}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 r=t=>!!t&&"object"==typeof t&&!Array.isArray(t);let i=t.data;if("string"==typeof i)try{i=JSON.parse(i)}catch{return{error:{message:"Invalid payment step response",type:"api"}}}const n=i;if(r(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=r(n)&&r(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 Dt{constructor(t){this.http=t}normalizeUserResponse(t){if(!t.data)return t;const e=R(t.data);return e?{data:e}:t}normalizeLoginResponse(t){if(!t.data||!t.data.user)return t;const e=R(t.data.user);return e?{data:{...t.data,user:e}}:t}async login(t,e){const a=await this.http.post(`${At}/login`,t,e);return this.normalizeLoginResponse(a)}async requestMobileOTP(t,e){return this.http.post(`${At}/login_request`,t,e)}async verifyMobileOTP(t,e){const a=await this.http.post(`${At}/login_request_verification`,t,e);return this.normalizeLoginResponse(a)}async requestEmailLogin(t,e){return this.http.post(`${vt}/email_login_request`,t,e)}async register(t,e){const a=await this.http.post(`${vt}/register`,t,e);return this.normalizeUserResponse(a)}async getCurrentUser(t){const e=await this.http.get(`${vt}/current`,t);return this.normalizeUserResponse(e)}async updateProfile(t,e,a){const r=await this.http.put(`${vt}/${t}`,e,a);return this.normalizeUserResponse(r)}async requestMobilePhoneUpdate(t,e){return this.http.post(`${vt}/update_mobile_phone_request`,t,e)}async verifyMobilePhoneUpdate(t,e){const a=await this.http.post(`${vt}/update_mobile_phone_verification`,t,e);return this.normalizeUserResponse(a)}async forgotPassword(t,e){return this.http.post(`${vt}/forgot_password`,t,e)}async revivePassword(t,e){const a=await this.http.post(`${vt}/revive_password`,t,e);return this.normalizeLoginResponse(a)}async mergeUser(t){return this.http.post(`${vt}/merge_user`,{},t)}}class Gt{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 r=this.transformFilters(e),i=await this.http.get(ht,{...a,params:{...r,query:t,page_number:r.page_number??1,page_size:r.page_size??20,search_direction:"center"}});if(i.data){return{data:W(i.data)}}return i}}class Ft{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(zt,t,e)}async getProductStatistics(t,e){const a=await this.http.get(`${zt}/${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 r=await this.http.get(`${zt}/${t}`,{...a,params:{page_number:e?.pageNumber??1,page_size:e?.pageSize??10}});if(r.data){const t=r.data.data||r.data;return{data:this.normalizeProductReviewsResponse(t)}}return r}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 r=await this.http.post("/api/v1/service/filemanager/uploads/public/tajrobe",a,e);if(r.data){return{data:{images:Array.isArray(r.data.images)?r.data.images:Array.isArray(r.data.data?.images)?r.data.data.images:Array.isArray(r.data.result?.images)?r.data.result.images:[]}}}return r}async list(t,e){return this.http.get(wt,{...e,params:this.transformLegacyFilters(t)})}async create(t,e){return this.http.post(wt,t,e)}async get(t,e){return this.http.get(`${wt}/${t}`,e)}}class Mt{constructor(t){this.http=t}validateInvoiceId(t){return!Number.isFinite(t)||t<=0?{error:{message:"Invalid invoice ID",type:"validation"}}:null}async getBalance(t){return this.http.get("/api/v1/users/wallet/balance",t)}async listTransactions(t,e){const a=t?.pageNumber??t?.page_number??1,r=t?.pageSize??t?.page_size??20,i=await this.http.get("/api/v1/wallet/transactions",{...e,params:{pageNumber:a,pageSize:r}});return i.data?{data:k(i.data)}:i}async applyCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const r=await this.http.post(`${gt}/${t}/add_credit`,{},e);return r.data?{data:z(r.data)}:r}async removeCredit(t,e){const a=this.validateInvoiceId(t);if(a)return a;const r=await this.http.post(`${gt}/${t}/remove_credit`,{},e);return r.data?{data:z(r.data)}:r}}class jt{constructor(t){this.http=t}missingDataError(t){return{error:{message:`No data returned from ${t} endpoint`,type:"api"}}}unexpectedEntityError(t,e,a,r=400){return{error:{message:`Expected ${t} at ${a}, but got ${e}`,type:"api",status:r,details:{expected:t,actual:e,urlPath:a}}}}async getPage(t,e){const a=await this.http.get(Et,{...e,params:{url_part:t}});if(a.error)return{error:a.error};if(!a.data)return this.missingDataError("CMS page");const r=it(a.data);return"cms_page"===r.entityType&&r.entity?"blog"===r.entity.cmsPageType?this.unexpectedEntityError("CMS page","blog page",t):{data:r.entity}:this.unexpectedEntityError("CMS page",r.entityType||"unknown entity",t,"unknown"===r.entityType?404:400)}async listPages(t,e){const a=ot({...t,cmsPageTypes:"normal"}),r=await this.http.get(Pt,{...e,params:a});return r.error?{error:r.error}:r.data?{data:st(r.data)}:this.missingDataError("CMS pages")}async getBlogPost(t,e){const a=await this.http.get(Et,{...e,params:{url_part:t}});if(a.error)return{error:a.error};if(!a.data)return this.missingDataError("blog post");const r=it(a.data);return"cms_page"===r.entityType&&r.entity?"blog"!==r.entity.cmsPageType?this.unexpectedEntityError("blog post","CMS page",t):{data:r.entity}:this.unexpectedEntityError("blog post",r.entityType||"unknown entity",t,"unknown"===r.entityType?404:400)}async listBlogPosts(t,e){const a=ot({...t,cmsPageTypes:"blog"}),r=await this.http.get(Pt,{...e,params:a});return r.error?{error:r.error}:r.data?{data:st(r.data)}:this.missingDataError("blog posts")}async listAll(t,e){const a=ot(t),r=await this.http.get(Pt,{...e,params:a});return r.error?{error:r.error}:r.data?{data:st(r.data)}:this.missingDataError("CMS content")}}class Bt{constructor(t){this.http=t}async upload(t,e){const a=new FormData;a.append("image",t);const r={...e?.headers};return delete r["Content-Type"],this.http.post(It,a,{...e,headers:r})}async delete(t,e){return this.http.delete(`${It}/${t}`,e)}}class Ut{constructor(t){this.http=t}async track(t,e){const a=e??((r=t)&&"object"==typeof r&&("retries"in r||"timeout"in r||"cache"in r||"headers"in r||"signal"in r)?t:void 0);var r;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 Kt{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(Ct,{...e,params:this.transformEventFilters(t)})}async getEvent(t,e){const a=await this.http.get(`${Ct}/${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(St,t,e)}async listBookings(t){return this.http.get(St,t)}async cancelBooking(t,e){return this.http.post(`${St}/${t}/cancel`,{},e)}}class qt{constructor(t){this.http=t}async resolve(t,e){const a=await this.http.get(Et,{...e,params:{url_part:t}});if(a.data){return{data:it(a.data)}}return a}}class Lt{constructor(t){this.http=t}async getHeaderMenu(t="headermenu",e){const a=await this.http.get("/api/v1/trees/fetch_single",{...e,params:{identifier:t}});if(a.error)return{error:a.error};const r=ct(a.data),i=r?.tree?.treeStructure?.nodes||[];return{data:this.convertRawTreeToNavigation(i)}}convertRawTreeToNavigation(t){if(!t||0===t.length)return[];return t.map(t=>({name:this.findNodeTitle(t),url:this.findNodeUrl(t),children:this.convertRawTreeToNavigation(t.children||[]),shouldBeDropped:this.shouldDropNode(t)})).filter(t=>!t.shouldBeDropped).map(({shouldBeDropped:t,...e})=>e)}findNodeTitle(t){const{details:e,entity:a}=t,r=this.firstNonEmpty(e?.title,e?.name),i=this.firstNonEmpty(a?.title,a?.name);return!0===e?.isTitleDefault?i||r:r||i}firstNonEmpty(...t){return t.find(t=>"string"==typeof t&&t.trim().length>0)||""}findNodeUrl(t){return"product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType?t.entity?.url||"#":"url"===t.entityType&&t.details?.url||"#"}shouldDropNode(t){return("product"===t.entityType||"product_category"===t.entityType||"cms_page"===t.entityType||"blog_page"===t.entityType)&&!t.entity?.enabled}}class Yt{constructor(t){this.http=t}async getInfo(t){const e=await this.http.get("/api/v2/general/info",t);return e.data?{data:g(e.data)}:e.error?{error:e.error}:{error:{type:"api",message:"No data returned from general info endpoint."}}}async getFeatures(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.features}}async getCheckoutConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.checkout}}async getWalletConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.wallet}}async getTajrobeConfig(t){const e=await this.getInfo(t);return e.error?{error:e.error}:{data:e.data?.settings?.tajrobe}}}class Vt{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 r=await this.http.post("/api/v1/service/filemanager/uploads/private/productform",a,e);if(r.data){const t=r.data?.data?.file?.serveKey||r.data?.file?.serveKey||r.data?.serveKey;return{data:{serveKey:String(t??"")}}}return r}}function Qt(t){return null!==t&&"object"==typeof t&&!Array.isArray(t)}function Wt(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 Jt(t){return"string"==typeof t?t.trim():""}class Ht{constructor(t){this.http=t}normalizeCity(t){return Qt(t)?{id:Wt(t.id),name:Jt(t.name),latitude:Wt(t.latitude),longitude:Wt(t.longitude)}:{id:0,name:"",latitude:0,longitude:0}}normalizeRegion(t){if(!Qt(t))return{id:0,name:"",cities:[]};const e=Array.isArray(t.cities)?t.cities:[];return{id:Wt(t.id),name:Jt(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:Qt(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 Zt{constructor(t,a){const r=e(t);this.http=new pt(r),this.tokenStorage=this.http.getTokenStorage(),this.credentialsManager=a??new lt,this.products=new Tt(this.http),this.categories=new Nt(this.http),this.cart=new kt(this.http,this.credentialsManager),this.invoices=new Rt(this.http,this.credentialsManager),this.shipping=new Ot(this.http,this.credentialsManager),this.payments=new $t(this.http,this.credentialsManager),this.orders=new xt(this.http),this.users=new Dt(this.http),this.search=new Gt(this.http),this.feedbacks=new Ft(this.http),this.wallet=new Mt(this.http),this.cms=new jt(this.http),this.images=new Bt(this.http),this.visits=new Ut(this.http),this.booking=new Kt(this.http),this.entityRoutes=new qt(this.http),this.menu=new Lt(this.http),this.general=new Yt(this.http),this.dynamicForms=new Vt(this.http),this.regions=new Ht(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 Xt(t){return function(t){if(!t||"object"!=typeof t)return!1;const e=t;return e.http instanceof pt&&e.credentials instanceof lt}(t)?t:function(t){const a=e(t);return{http:new pt(a),credentials:new lt}}(t)}function te(t){const{http:e}=Xt(t);return new Tt(e)}function ee(t){const{http:e}=Xt(t);return new Nt(e)}function ae(t){const{http:e,credentials:a}=Xt(t);return new kt(e,a)}function re(t){const{http:e}=Xt(t);return new xt(e)}function ie(t){const{http:e,credentials:a}=Xt(t);return new Rt(e,a)}function ne(t){const{http:e,credentials:a}=Xt(t);return new Ot(e,a)}function se(t){const{http:e,credentials:a}=Xt(t);return new $t(e,a)}function oe(t){const{http:e}=Xt(t);return new Dt(e)}function de(t){const{http:e}=Xt(t);return new Gt(e)}function ce(t){const{http:e}=Xt(t);return new Ft(e)}function pe(t){const{http:e}=Xt(t);return new Mt(e)}function ue(t){const{http:e}=Xt(t);return new jt(e)}function le(t){const{http:e}=Xt(t);return new Bt(e)}function me(t){const{http:e}=Xt(t);return new Ut(e)}function he(t){const{http:e}=Xt(t);return new Kt(e)}function ye(t){const{http:e}=Xt(t);return new qt(e)}function ge(t){const{http:e}=Xt(t);return new Lt(e)}function fe(t){const{http:e}=Xt(t);return new Yt(e)}function be(t){const{http:e}=Xt(t);return new Vt(e)}function _e(t){const{http:e}=Xt(t);return new Ht(e)}exports.CredentialsManager=lt,exports.HttpClient=pt,exports.MemoryStorage=ut,exports.SazitoClient=Zt,exports.TokenStorage=a,exports.booking=he,exports.cart=ae,exports.categories=ee,exports.cms=ue,exports.createBookingAPI=he,exports.createCMSAPI=ue,exports.createCartAPI=ae,exports.createCategoriesAPI=ee,exports.createDynamicFormsAPI=be,exports.createEntityRoutesAPI=ye,exports.createFeedbacksAPI=ce,exports.createGeneralAPI=fe,exports.createImagesAPI=le,exports.createInvoicesAPI=ie,exports.createMenuAPI=ge,exports.createOrdersAPI=re,exports.createPaymentsAPI=se,exports.createProductsAPI=te,exports.createRegionsAPI=_e,exports.createSazitoClient=function(t,e){return new Zt(t,e)},exports.createSearchAPI=de,exports.createShippingAPI=ne,exports.createUsersAPI=oe,exports.createVisitsAPI=me,exports.createWalletAPI=pe,exports.dynamicForms=be,exports.entityRoutes=ye,exports.feedbacks=ce,exports.general=fe,exports.images=le,exports.invoices=ie,exports.menu=ge,exports.orders=re,exports.payments=se,exports.products=te,exports.regions=_e,exports.search=de,exports.shipping=ne,exports.toEnglishDigits=n,exports.transformAddToCartInput=function(t,e,a){const r={product_variants:[{id:t,count:e}]};return a&&(r.form_attributes=h(a)),r},exports.transformApiResponse=y,exports.transformCartResponse=E,exports.transformCreateCartInput=function(t){if(!u(t))return{product_variants:[]};const e=t.variants||t.productVariants||[],a={product_variants:Array.isArray(e)?e.map(t=>u(t)?{id:t.id||t.variantId,count:t.count||t.quantity,form_attributes:t.formAttributes?h(t.formAttributes):void 0}:{}):[]};return t.coupon&&(a.coupon=t.coupon),a},exports.transformInvoiceResponse=z,exports.transformProductListResponse=Q,exports.transformRequestKeys=h,exports.transformResponseKeys=m,exports.transformShippingAddressInput=function(t){if(u(t)){const e={...t};return delete e.user,{shipping_address:h(e)}}return{shipping_address:h(t)}},exports.users=oe,exports.visits=me,exports.wallet=pe;