@lightspeed/ecom-headless 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.3 - 2026-02-25
4
+
5
+ ### Added
6
+
7
+ - Add support for REST API :: Product reviews :: Get product reviews.
8
+
9
+ ## 1.1.2 - 2025-12-09
10
+
11
+ ### Changed
12
+
13
+ - Add dependency to the new internal packages.
14
+
3
15
  ## 1.1.1 - 2025-10-23
4
16
 
5
17
  ### Changed
@@ -1,2 +1,2 @@
1
- "use strict";const getStoreId=require("../shared/ecom-headless.CiGkSfL9.cjs"),API_BASE_URL="https://app.ecwid.com/api/v3/",API_TIMEOUT=1e4;let o;const getApiConfig=()=>{if(o===void 0)throw new Error(getStoreId.ERROR_MESSAGES.CONFIG_NOT_INITIALIZED);return o},initStorefrontApi=async r=>{if(r.publicToken===void 0)throw new Error(getStoreId.ERROR_MESSAGES.CONFIG_PUBLIC_TOKEN_REQUIRED);const e=r.storeId??await getStoreId.getStoreId();if(e===void 0)throw new Error(getStoreId.ERROR_MESSAGES.CONFIG_STORE_ID_NOT_FOUND);o={baseURL:r.baseURL??API_BASE_URL,publicToken:r.publicToken,storeId:e}};class TimeoutError extends Error{constructor(e,s,n){super(`Request timeout${n?` after ${n}ms`:""}${e?` for ${s} ${e}`:""}`),this.name="TimeoutError"}}function createTimeoutError(r,e,s){return new TimeoutError(r,e,s)}function isAbortError(r){return r instanceof Error&&r.name==="AbortError"}function isObject(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function isFetchAvailable(){return typeof globalThis.fetch=="function"}function buildRequestHeaders(r,e={}){return{Authorization:`Bearer ${r}`,"X-Lightspeed-Request-Origin":"ecom-headless",redirect:"follow",...e.headers}}function prepareRequestBody(r,e){if(!(r==="GET"||e===void 0)){if(typeof e=="string")return e;if(isObject(e))return JSON.stringify(e)}}async function parseResponseData(r,e){switch(e){case"json":return r.json();case"blob":return r.blob();default:try{return await r.json()}catch{return r}}}function createTimeoutController(r){if(typeof AbortController>"u")return{};const e=new AbortController,s=setTimeout(()=>{e.abort()},r);return{controller:e,timer:s}}function clearTimeoutController(r){r.timer!==void 0&&clearTimeout(r.timer)}function u(r,e){if(e!==void 0)return`${encodeURIComponent(r)}=${encodeURIComponent(String(e))}`}function a(r){if(r.startsWith("http://")||r.startsWith("https://"))return r;const{baseURL:e}=getApiConfig(),s=e.endsWith("/")?e:e+"/",n=r.startsWith("/")?r.slice(1):r;return s+n}function buildUrlWithParams(r,e){const s=a(r);if(e===void 0)return s;const n=Object.entries(e).map(([c,i])=>u(c,i)).filter(c=>c!==void 0);return n.length>0?`${s}?${n.join("&")}`:s}function createClient(){const{publicToken:r}=getApiConfig();async function e(s,n,c,i){const d=c?.timeout??API_TIMEOUT,l=createTimeoutController(d);try{const p=buildRequestHeaders(r,c),h=buildUrlWithParams(n,c?.params),f=await fetch(h,{method:s,headers:p,body:prepareRequestBody(s,i),signal:l.controller?.signal}),g=await parseResponseData(f,c?.responseType);return Object.assign(f,{data:g})}catch(p){throw isAbortError(p)?createTimeoutError(n,s,d):p}finally{clearTimeoutController(l)}}return{get:(s,n)=>e("GET",s,n),post:(s,n,c)=>e("POST",s,c,n),put:(s,n,c)=>e("PUT",s,c,n),patch:(s,n,c)=>e("PATCH",s,c,n),delete:(s,n)=>e("DELETE",s,n)}}let t;function getApiClient(){if(t!==void 0)return t;if(!isFetchAvailable())throw new Error(getStoreId.ERROR_MESSAGES.FETCH_API_NOT_AVAILABLE);return t=createClient(),t}const searchCategories=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/categories`;return(await e.get(c,n)).data},searchCategoriesByPath=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/categoriesByPath`;return(await e.get(c,n)).data},searchProducts=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/products`;return(await e.get(c,n)).data},getProduct=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n}=r,c={params:r},i=`${s}/products/${n}`;return(await e.get(i,c)).data},downloadProductFile=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n,fileId:c}=r,i={responseType:"blob"},d=`${s}/products/${n}/files/${c}`;return(await e.get(d,i)).data},searchProductVariations=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n}=r,c={params:r},i=`${s}/products/${n}/combinations`;return(await e.get(i,c)).data},getProductVariation=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n,combinationId:c}=r,i={params:r},d=`${s}/products/${n}/combinations/${c}`;return(await e.get(d,i)).data},searchProductTypes=async()=>{const r=getApiClient(),{storeId:e}=getApiConfig(),s=`${e}/classes`;return(await r.get(s)).data},getProductType=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/classes/${r.classId}`;return(await e.get(c,n)).data},searchProductBrands=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/brands`;return(await e.get(c,n)).data},getStoreProfile=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/profile`;return(await e.get(c,n)).data};exports.downloadProductFile=downloadProductFile;exports.getApiConfig=getApiConfig;exports.getProduct=getProduct;exports.getProductType=getProductType;exports.getProductVariation=getProductVariation;exports.getStoreProfile=getStoreProfile;exports.initStorefrontApi=initStorefrontApi;exports.searchCategories=searchCategories;exports.searchCategoriesByPath=searchCategoriesByPath;exports.searchProductBrands=searchProductBrands;exports.searchProductTypes=searchProductTypes;exports.searchProductVariations=searchProductVariations;exports.searchProducts=searchProducts;
1
+ "use strict";const getStoreId=require("../shared/ecom-headless.CiGkSfL9.cjs"),API_BASE_URL="https://app.ecwid.com/api/v3/",API_TIMEOUT=1e4;let o;const getApiConfig=()=>{if(o===void 0)throw new Error(getStoreId.ERROR_MESSAGES.CONFIG_NOT_INITIALIZED);return o},initStorefrontApi=async r=>{if(r.publicToken===void 0)throw new Error(getStoreId.ERROR_MESSAGES.CONFIG_PUBLIC_TOKEN_REQUIRED);const e=r.storeId??await getStoreId.getStoreId();if(e===void 0)throw new Error(getStoreId.ERROR_MESSAGES.CONFIG_STORE_ID_NOT_FOUND);o={baseURL:r.baseURL??API_BASE_URL,publicToken:r.publicToken,storeId:e}};class TimeoutError extends Error{constructor(e,s,n){super(`Request timeout${n?` after ${n}ms`:""}${e?` for ${s} ${e}`:""}`),this.name="TimeoutError"}}function createTimeoutError(r,e,s){return new TimeoutError(r,e,s)}function isAbortError(r){return r instanceof Error&&r.name==="AbortError"}function isObject(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function isFetchAvailable(){return typeof globalThis.fetch=="function"}function buildRequestHeaders(r,e={}){return{Authorization:`Bearer ${r}`,"X-Lightspeed-Request-Origin":"ecom-headless",redirect:"follow",...e.headers}}function prepareRequestBody(r,e){if(!(r==="GET"||e===void 0)){if(typeof e=="string")return e;if(isObject(e))return JSON.stringify(e)}}async function parseResponseData(r,e){switch(e){case"json":return r.json();case"blob":return r.blob();default:try{return await r.json()}catch{return r}}}function createTimeoutController(r){if(typeof AbortController>"u")return{};const e=new AbortController,s=setTimeout(()=>{e.abort()},r);return{controller:e,timer:s}}function clearTimeoutController(r){r.timer!==void 0&&clearTimeout(r.timer)}function u(r,e){if(e!==void 0)return`${encodeURIComponent(r)}=${encodeURIComponent(String(e))}`}function a(r){if(r.startsWith("http://")||r.startsWith("https://"))return r;const{baseURL:e}=getApiConfig(),s=e.endsWith("/")?e:e+"/",n=r.startsWith("/")?r.slice(1):r;return s+n}function buildUrlWithParams(r,e){const s=a(r);if(e===void 0)return s;const n=Object.entries(e).map(([c,i])=>u(c,i)).filter(c=>c!==void 0);return n.length>0?`${s}?${n.join("&")}`:s}function createClient(){const{publicToken:r}=getApiConfig();async function e(s,n,c,i){const d=c?.timeout??API_TIMEOUT,l=createTimeoutController(d);try{const p=buildRequestHeaders(r,c),g=buildUrlWithParams(n,c?.params),f=await fetch(g,{method:s,headers:p,body:prepareRequestBody(s,i),signal:l.controller?.signal}),h=await parseResponseData(f,c?.responseType);return Object.assign(f,{data:h})}catch(p){throw isAbortError(p)?createTimeoutError(n,s,d):p}finally{clearTimeoutController(l)}}return{get:(s,n)=>e("GET",s,n),post:(s,n,c)=>e("POST",s,c,n),put:(s,n,c)=>e("PUT",s,c,n),patch:(s,n,c)=>e("PATCH",s,c,n),delete:(s,n)=>e("DELETE",s,n)}}let t;function getApiClient(){if(t!==void 0)return t;if(!isFetchAvailable())throw new Error(getStoreId.ERROR_MESSAGES.FETCH_API_NOT_AVAILABLE);return t=createClient(),t}const searchCategories=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/categories`;return(await e.get(c,n)).data},searchCategoriesByPath=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/categoriesByPath`;return(await e.get(c,n)).data},searchProducts=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/products`;return(await e.get(c,n)).data},getProduct=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n}=r,c={params:r},i=`${s}/products/${n}`;return(await e.get(i,c)).data},downloadProductFile=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n,fileId:c}=r,i={responseType:"blob"},d=`${s}/products/${n}/files/${c}`;return(await e.get(d,i)).data},searchProductVariations=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n}=r,c={params:r},i=`${s}/products/${n}/combinations`;return(await e.get(i,c)).data},getProductVariation=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),{productId:n,combinationId:c}=r,i={params:r},d=`${s}/products/${n}/combinations/${c}`;return(await e.get(d,i)).data},searchProductTypes=async()=>{const r=getApiClient(),{storeId:e}=getApiConfig(),s=`${e}/classes`;return(await r.get(s)).data},getProductType=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/classes/${r.classId}`;return(await e.get(c,n)).data},searchProductBrands=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/brands`;return(await e.get(c,n)).data},getStoreProfile=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/profile`;return(await e.get(c,n)).data},getReviews=async r=>{const e=getApiClient(),{storeId:s}=getApiConfig(),n={params:r},c=`${s}/reviews`;return(await e.get(c,n)).data};exports.downloadProductFile=downloadProductFile;exports.getApiConfig=getApiConfig;exports.getProduct=getProduct;exports.getProductType=getProductType;exports.getProductVariation=getProductVariation;exports.getReviews=getReviews;exports.getStoreProfile=getStoreProfile;exports.initStorefrontApi=initStorefrontApi;exports.searchCategories=searchCategories;exports.searchCategoriesByPath=searchCategoriesByPath;exports.searchProductBrands=searchProductBrands;exports.searchProductTypes=searchProductTypes;exports.searchProductVariations=searchProductVariations;exports.searchProducts=searchProducts;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/api/config/constants.ts","../../src/api/config/index.ts","../../src/client/utils/errors.ts","../../src/client/utils/is-object.ts","../../src/client/utils/request.ts","../../src/client/utils/response.ts","../../src/client/utils/timeout.ts","../../src/client/utils/url.ts","../../src/client/create-client.ts","../../src/client/index.ts","../../src/api/categories/search-categories.ts","../../src/api/categories/search-categories-by-path.ts","../../src/api/products/search-products.ts","../../src/api/products/get-product.ts","../../src/api/products/download-product-file.ts","../../src/api/products/search-product-variations.ts","../../src/api/products/get-product-variation.ts","../../src/api/products/search-product-types.ts","../../src/api/products/get-product-type.ts","../../src/api/products/search-product-brands.ts","../../src/api/store/get-store-profile.ts"],"sourcesContent":["export const API_BASE_URL = 'https://app.ecwid.com/api/v3/';\nexport const API_TIMEOUT = 10000;\n","import { API_BASE_URL } from '@/api/config/constants';\nimport { ERROR_MESSAGES } from '@/client/constants';\nimport { getStoreId } from '@/storefront';\nimport { ApiConfig } from '@/types';\n\nlet apiConfig: Required<ApiConfig> | undefined;\n\n/**\n * Get the API configuration.\n *\n * @example\n * ```typescript\n * import { getApiConfig, ApiConfig } from '@lightspeed/ecom-headless';\n *\n * const config: ApiConfig = getApiConfig();\n * ```\n */\nexport const getApiConfig = (): Required<ApiConfig> => {\n if (apiConfig === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_NOT_INITIALIZED);\n }\n\n return apiConfig;\n};\n\n/**\n * Initialize the Storefront API client.\n *\n * @example\n * ```typescript\n * import { initStorefrontApi } from '@lightspeed/ecom-headless';\n *\n * await initStorefrontApi({\n * publicToken: 'YOUR_PUBLIC_TOKEN',\n * storeId: 'YOUR_STORE_ID'\n * });\n * ```\n *\n * @remarks\n * - This method must be called before using any other API methods.\n * - If storeId is not provided, it will be auto-detected. If detection fails, an error will be thrown.\n */\nexport const initStorefrontApi = async (config: ApiConfig): Promise<void> => {\n if (config.publicToken === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_PUBLIC_TOKEN_REQUIRED);\n }\n\n const storeId = config.storeId ?? await getStoreId();\n\n if (storeId === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_STORE_ID_NOT_FOUND);\n }\n\n apiConfig = {\n baseURL: config.baseURL ?? API_BASE_URL,\n publicToken: config.publicToken,\n storeId,\n } satisfies Required<ApiConfig>;\n};\n","export class TimeoutError extends Error {\n constructor(url?: string, method?: string, timeout?: number) {\n super(\n `Request timeout${timeout ? ` after ${timeout}ms` : ''}${url ? ` for ${method} ${url}` : ''}`,\n );\n this.name = 'TimeoutError';\n }\n}\n\nexport function createTimeoutError(url?: string, method?: string, timeout?: number): TimeoutError {\n return new TimeoutError(url, method, timeout);\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { isObject } from '@/client/utils';\nimport { BaseHeaders, RequestConfig, RequestData } from '@/types';\n\nexport function isFetchAvailable(): boolean {\n return typeof globalThis.fetch === 'function';\n}\n\nexport function buildRequestHeaders(\n publicToken: string,\n config: RequestConfig = {},\n): Record<string, string> & BaseHeaders {\n return {\n 'Authorization': `Bearer ${publicToken}`,\n 'X-Lightspeed-Request-Origin': 'ecom-headless',\n 'redirect': 'follow',\n ...config.headers,\n };\n}\n\nexport function prepareRequestBody(\n method: string,\n data: RequestData,\n): BodyInit | undefined {\n if (method === 'GET' || data === undefined) {\n return undefined;\n }\n\n if (typeof data === 'string') {\n return data;\n }\n\n if (isObject(data)) {\n return JSON.stringify(data);\n }\n\n return undefined;\n}\n","import { ResponseType } from '@/types';\n\nexport async function parseResponseData(\n response: Response,\n responseType?: ResponseType,\n): Promise<ReturnType<typeof response.json> | ReturnType<typeof response.blob> | Response> {\n switch (responseType) {\n case 'json':\n return response.json();\n case 'blob':\n return response.blob();\n default:\n try {\n return await response.json();\n } catch {\n return response;\n }\n }\n}\n","interface TimeoutController {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n}\n\nexport function createTimeoutController(timeout: number): {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n} {\n if (typeof AbortController === 'undefined') {\n return {};\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => {\n controller.abort();\n }, timeout);\n\n return { controller, timer };\n}\n\nexport function clearTimeoutController(timeoutController: TimeoutController): void {\n if (timeoutController.timer !== undefined) {\n clearTimeout(timeoutController.timer);\n }\n}\n","import { getApiConfig } from '@/api';\nimport { QueryParams } from '@/types';\n\nfunction processQueryParam(\n key: string,\n value: QueryParams[string],\n): string | undefined {\n if (value === undefined) {\n return;\n }\n\n return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;\n}\n\nfunction createUrl(path: string): string {\n if (path.startsWith('http://') || path.startsWith('https://')) {\n return path;\n }\n\n const { baseURL } = getApiConfig();\n const normalizedBase = baseURL.endsWith('/') ? baseURL : baseURL + '/';\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n\n return normalizedBase + normalizedPath;\n}\n\nexport function buildUrlWithParams(path: string, params?: QueryParams): string {\n const url = createUrl(path);\n\n if (params === undefined) {\n return url;\n }\n\n const queryParams = Object\n .entries(params)\n .map(([key, value]) => processQueryParam(key, value))\n .filter((param): param is string => param !== undefined);\n\n if (queryParams.length > 0) {\n return `${url}?${queryParams.join('&')}`;\n }\n\n return url;\n}\n","import { getApiConfig } from '@/api/config';\nimport { API_TIMEOUT } from '@/api/config/constants';\nimport {\n buildRequestHeaders,\n buildUrlWithParams,\n clearTimeoutController,\n createTimeoutController,\n createTimeoutError,\n isAbortError,\n parseResponseData,\n prepareRequestBody,\n} from '@/client/utils';\nimport { HttpClient, RequestConfig, RequestData, HttpResponse } from '@/types';\n\nexport function createClient(): HttpClient {\n const { publicToken } = getApiConfig();\n\n async function request<T = unknown>(\n method: string,\n path: string,\n config?: RequestConfig,\n requestData?: RequestData,\n ): Promise<HttpResponse<T>> {\n const timeout = config?.timeout ?? API_TIMEOUT;\n const timeoutController = createTimeoutController(timeout);\n\n try {\n const headers = buildRequestHeaders(publicToken, config);\n const finalUrl = buildUrlWithParams(path, config?.params);\n\n const response = await fetch(finalUrl, {\n method,\n headers,\n body: prepareRequestBody(method, requestData),\n signal: timeoutController.controller?.signal,\n });\n\n const parsedResponseData = await parseResponseData(response, config?.responseType);\n\n return Object.assign(response, {\n data: parsedResponseData,\n }) satisfies HttpResponse<T>;\n } catch (error) {\n if (isAbortError(error)) {\n throw createTimeoutError(path, method, timeout);\n }\n\n throw error;\n } finally {\n clearTimeoutController(timeoutController);\n }\n }\n\n return {\n get: <T>(url: string, config?: RequestConfig) => request<T>('GET', url, config),\n post: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('POST', url, config, data),\n put: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PUT', url, config, data),\n patch: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PATCH', url, config, data),\n delete: <T>(url: string, config?: RequestConfig) => request<T>('DELETE', url, config),\n };\n}\n","import { ERROR_MESSAGES } from '@/client/constants';\nimport { createClient } from '@/client/create-client';\nimport { isFetchAvailable } from '@/client/utils';\nimport { HttpClient } from '@/types';\n\nlet client: HttpClient | undefined;\n\n/**\n * Get the singleton instance of the API client.\n * @returns The HTTP client instance\n * @throws {Error} If the fetch API is not available or client creation fails\n */\nexport function getApiClient(): HttpClient {\n if (client !== undefined) {\n return client;\n }\n\n if (!isFetchAvailable()) {\n throw new Error(ERROR_MESSAGES.FETCH_API_NOT_AVAILABLE);\n }\n\n client = createClient();\n\n return client;\n}\n\n/**\n * Reset the singleton API client instance.\n * Useful for testing or when configuration changes require a fresh client.\n */\nexport function resetApiClient(): void {\n client = undefined;\n}\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesParams, SearchCategoriesResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories in the store based on provided parameters.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategories, SearchCategoriesResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesResponse = await searchCategories();\n * ```\n */\nexport const searchCategories = async (\n params?: SearchCategoriesParams,\n): Promise<SearchCategoriesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesParams> = {\n params,\n };\n\n const url = `${storeId}/categories`;\n const response = await apiClient.get<SearchCategoriesResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesByPathParams, SearchCategoriesByPathResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories by path using a delimiter-separated path string.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories-by-path | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategoriesByPath, SearchCategoriesByPathResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesByPathResponse = await searchCategoriesByPath({\n * path: \"Electronics/Phones/Smartphones\",\n * delimiter: \"/\"\n * });\n * ```\n */\nexport const searchCategoriesByPath = async (\n params: SearchCategoriesByPathParams,\n): Promise<SearchCategoriesByPathResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesByPathParams> = {\n params,\n };\n\n const url = `${storeId}/categoriesByPath`;\n const response = await apiClient.get<SearchCategoriesByPathResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductsParams, SearchProductsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for products in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-products | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProducts, SearchProductsResponse } from '@lightspeed/ecom-headless';\n *\n * const products: SearchProductsResponse = await searchProducts({ keyword: 'laptop' });\n * ```\n */\nexport const searchProducts = async (\n params?: SearchProductsParams,\n): Promise<SearchProductsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductsParams> = {\n params,\n };\n\n const url = `${storeId}/products`;\n const response = await apiClient.get<SearchProductsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductParams, GetProductResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/get-product | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProduct, GetProductResponse } from '@lightspeed/ecom-headless';\n *\n * const product: GetProductResponse = await getProduct({ productId: 123 });\n * ```\n */\nexport const getProduct = async (\n params: GetProductParams,\n): Promise<GetProductResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<GetProductParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}`;\n const response = await apiClient.get<GetProductResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { DownloadProductFileParams, DownloadProductFileResponse, RequestConfig } from '@/types';\n\n/**\n * Download a product file from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-files/download-product-file | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { downloadProductFile, DownloadProductFileResponse } from '@lightspeed/ecom-headless';\n *\n * const file: DownloadProductFileResponse = await downloadProductFile({ productId: 123, fileId: 456 });\n * ```\n */\nexport const downloadProductFile = async (\n params: DownloadProductFileParams,\n): Promise<DownloadProductFileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, fileId } = params;\n const options: RequestConfig<DownloadProductFileParams> = {\n responseType: 'blob',\n };\n\n const url = `${storeId}/products/${productId}/files/${fileId}`;\n const response = await apiClient.get<DownloadProductFileResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductVariationsParams, SearchProductVariationsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product variations in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/search-product-variations | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductVariations, SearchProductVariationsResponse } from '@lightspeed/ecom-headless';\n *\n * const variations: SearchProductVariationsResponse = await searchProductVariations({ productId: 123 });\n * ```\n */\nexport const searchProductVariations = async (\n params: SearchProductVariationsParams,\n): Promise<SearchProductVariationsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<SearchProductVariationsParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations`;\n const response = await apiClient.get<SearchProductVariationsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductVariationParams, GetProductVariationResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product variation from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/get-product-variation | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductVariation, GetProductVariationResponse } from '@lightspeed/ecom-headless';\n *\n * const variation: GetProductVariationResponse = await getProductVariation({\n * productId: 123,\n * combinationId: 456\n * });\n * ```\n */\nexport const getProductVariation = async (\n params: GetProductVariationParams,\n): Promise<GetProductVariationResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, combinationId } = params;\n const options: RequestConfig<GetProductVariationParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations/${combinationId}`;\n const response = await apiClient.get<GetProductVariationResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductTypesResponse } from '@/types';\n\n/**\n * Search for product types in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/search-product-types | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductTypes, SearchProductTypesResponse } from '@lightspeed/ecom-headless';\n *\n * const productTypes: SearchProductTypesResponse = await searchProductTypes();\n * ```\n */\nexport const searchProductTypes = async (): Promise<SearchProductTypesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n\n const url = `${storeId}/classes`;\n const response = await apiClient.get<SearchProductTypesResponse>(url);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductTypeParams, GetProductTypeResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product type from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/get-product-type | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductType, GetProductTypeResponse } from '@lightspeed/ecom-headless';\n *\n * const productType: GetProductTypeResponse = await getProductType({ classId: 0 });\n * ```\n */\nexport const getProductType = async (\n params: GetProductTypeParams,\n): Promise<GetProductTypeResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetProductTypeParams> = {\n params,\n };\n\n const url = `${storeId}/classes/${params.classId}`;\n const response = await apiClient.get<GetProductTypeResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductBrandsParams, SearchProductBrandsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product brands in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-product-brands | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductBrands, SearchProductBrandsResponse } from '@lightspeed/ecom-headless';\n *\n * const brands: SearchProductBrandsResponse = await searchProductBrands({ limit: 10 });\n * ```\n */\nexport const searchProductBrands = async (\n params?: SearchProductBrandsParams,\n): Promise<SearchProductBrandsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductBrandsParams> = {\n params,\n };\n\n const url = `${storeId}/brands`;\n const response = await apiClient.get<SearchProductBrandsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetStoreProfileParams, GetStoreProfileResponse, RequestConfig } from '@/types';\n\n/**\n * Get basic information about an Ecwid store: settings, store location, email, etc.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/store-profile/get-store-profile | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getStoreProfile, GetStoreProfileResponse } from '@lightspeed/ecom-headless';\n *\n * const profile: GetStoreProfileResponse = await getStoreProfile();\n * ```\n */\nexport const getStoreProfile = async (\n params?: GetStoreProfileParams,\n): Promise<GetStoreProfileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetStoreProfileParams> = {\n params,\n };\n\n const url = `${storeId}/profile`;\n const response = await apiClient.get<GetStoreProfileResponse>(url, options);\n return response.data;\n};\n"],"names":["apiConfig","ERROR_MESSAGES","config","storeId","getStoreId","API_BASE_URL","url","method","timeout","error","value","publicToken","data","isObject","response","responseType","controller","timer","timeoutController","processQueryParam","key","createUrl","path","baseURL","getApiConfig","normalizedBase","normalizedPath","params","queryParams","param","request","requestData","API_TIMEOUT","createTimeoutController","headers","buildRequestHeaders","finalUrl","buildUrlWithParams","prepareRequestBody","parsedResponseData","parseResponseData","isAbortError","createTimeoutError","clearTimeoutController","client","isFetchAvailable","createClient","apiClient","getApiClient","options","productId","fileId","combinationId"],"mappings":"8EAAa,aAAe,gCACf,YAAc,ICI3B,IAAIA,QAYS,aAAe,IAA2B,CACrD,GAAIA,IAAc,OAChB,MAAM,IAAI,MAAMC,WAAe,eAAA,sBAAsB,EAGvD,OAAOD,CACT,EAmBa,kBAAoB,MAAOE,GAAqC,CAC3E,GAAIA,EAAO,cAAgB,OACzB,MAAM,IAAI,MAAMD,WAAAA,eAAe,4BAA4B,EAG7D,MAAME,EAAUD,EAAO,SAAW,MAAME,WAAW,WAAA,EAEnD,GAAID,IAAY,OACd,MAAM,IAAI,MAAMF,WAAAA,eAAe,yBAAyB,EAG1DD,EAAY,CACV,QAASE,EAAO,SAAWG,aAC3B,YAAaH,EAAO,YACpB,QAAAC,CACF,CACF,EC1Da,MAAA,qBAAqB,KAAM,CACtC,YAAYG,EAAcC,EAAiBC,EAAkB,CAC3D,MACE,kBAAkBA,EAAU,UAAUA,CAAO,KAAO,EAAE,GAAGF,EAAM,QAAQC,CAAM,IAAID,CAAG,GAAK,EAAE,EAC7F,EACA,KAAK,KAAO,cACd,CACF,CAEO,SAAS,mBAAmBA,EAAcC,EAAiBC,EAAgC,CAChG,OAAO,IAAI,aAAaF,EAAKC,EAAQC,CAAO,CAC9C,CAEO,SAAS,aAAaC,EAAyB,CACpD,OAAOA,aAAiB,OAASA,EAAM,OAAS,YAClD,CCfO,SAAS,SAASC,EAAkD,CACzE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,CAC5E,CCCgB,SAAA,kBAA4B,CAC1C,OAAO,OAAO,WAAW,OAAU,UACrC,CAEO,SAAS,oBACdC,EACAT,EAAwB,GACc,CACtC,MAAO,CACL,cAAiB,UAAUS,CAAW,GACtC,8BAA+B,gBAC/B,SAAY,SACZ,GAAGT,EAAO,OACZ,CACF,CAEO,SAAS,mBACdK,EACAK,EACsB,CACtB,GAAI,EAAAL,IAAW,OAASK,IAAS,QAIjC,CAAI,GAAA,OAAOA,GAAS,SAClB,OAAOA,EAGT,GAAIC,SAASD,CAAI,EACf,OAAO,KAAK,UAAUA,CAAI,CAI9B,CAAA,CClCA,eAAsB,kBACpBE,EACAC,EACyF,CACzF,OAAQA,GACN,IAAK,OACH,OAAOD,EAAS,KAAK,EACvB,IAAK,OACH,OAAOA,EAAS,KAAA,EAClB,QACE,GAAI,CACF,OAAO,MAAMA,EAAS,MACxB,MAAQ,CACN,OAAOA,CACT,CACJ,CACF,CCbO,SAAS,wBAAwBN,EAGtC,CACA,GAAI,OAAO,gBAAoB,IAC7B,MAAO,GAGT,MAAMQ,EAAa,IAAI,gBACjBC,EAAQ,WAAW,IAAM,CAC7BD,EAAW,OACb,EAAGR,CAAO,EAEV,MAAO,CAAE,WAAAQ,EAAY,MAAAC,CAAM,CAC7B,UAEgB,uBAAuBC,EAA4C,CAC7EA,EAAkB,QAAU,QAC9B,aAAaA,EAAkB,KAAK,CAExC,CCtBA,SAASC,EACPC,EACAV,EACoB,CACpB,GAAIA,IAAU,OAId,MAAO,GAAG,mBAAmBU,CAAG,CAAC,IAAI,mBAAmB,OAAOV,CAAK,CAAC,CAAC,EACxE,CAEA,SAASW,EAAUC,EAAsB,CACvC,GAAIA,EAAK,WAAW,SAAS,GAAKA,EAAK,WAAW,UAAU,EAC1D,OAAOA,EAGT,KAAM,CAAE,QAAAC,CAAQ,EAAIC,aAAa,EAC3BC,EAAiBF,EAAQ,SAAS,GAAG,EAAIA,EAAUA,EAAU,IAC7DG,EAAiBJ,EAAK,WAAW,GAAG,EAAIA,EAAK,MAAM,CAAC,EAAIA,EAE9D,OAAOG,EAAiBC,CAC1B,CAEO,SAAS,mBAAmBJ,EAAcK,EAA8B,CAC7E,MAAMrB,EAAMe,EAAUC,CAAI,EAE1B,GAAIK,IAAW,OACb,OAAOrB,EAGT,MAAMsB,EAAc,OACjB,QAAQD,CAAM,EACd,IAAI,CAAC,CAACP,EAAKV,CAAK,IAAMS,EAAkBC,EAAKV,CAAK,CAAC,EACnD,OAAQmB,GAA2BA,IAAU,MAAS,EAEzD,OAAID,EAAY,OAAS,EAChB,GAAGtB,CAAG,IAAIsB,EAAY,KAAK,GAAG,CAAC,GAGjCtB,CACT,UC7BgB,cAA2B,CACzC,KAAM,CAAE,YAAAK,CAAY,EAAIa,aAExB,EAAA,eAAeM,EACbvB,EACAe,EACApB,EACA6B,EAC0B,CAC1B,MAAMvB,EAAUN,GAAQ,SAAW8B,YAC7Bd,EAAoBe,wBAAwBzB,CAAO,EAEzD,GAAI,CACF,MAAM0B,EAAUC,oBAAoBxB,EAAaT,CAAM,EACjDkC,EAAWC,mBAAmBf,EAAMpB,GAAQ,MAAM,EAElDY,EAAW,MAAM,MAAMsB,EAAU,CACrC,OAAA7B,EACA,QAAA2B,EACA,KAAMI,mBAAmB/B,EAAQwB,CAAW,EAC5C,OAAQb,EAAkB,YAAY,MACxC,CAAC,EAEKqB,EAAqB,MAAMC,kBAAkB1B,EAAUZ,GAAQ,YAAY,EAEjF,OAAO,OAAO,OAAOY,EAAU,CAC7B,KAAMyB,CACR,CAAC,CACH,OAAS9B,EAAO,CACd,MAAIgC,aAAahC,CAAK,EACdiC,mBAAmBpB,EAAMf,EAAQC,CAAO,EAG1CC,CACR,SACEkC,uBAAuBzB,CAAiB,CAC1C,CACF,CAEA,MAAO,CACL,IAAK,CAAIZ,EAAaJ,IAA2B4B,EAAW,MAAOxB,EAAKJ,CAAM,EAC9E,KAAM,CAAII,EAAaM,EAAoBV,IAA2B4B,EAAW,OAAQxB,EAAKJ,EAAQU,CAAI,EAC1G,IAAK,CAAIN,EAAaM,EAAoBV,IAA2B4B,EAAW,MAAOxB,EAAKJ,EAAQU,CAAI,EACxG,MAAO,CAAIN,EAAaM,EAAoBV,IAA2B4B,EAAW,QAASxB,EAAKJ,EAAQU,CAAI,EAC5G,OAAQ,CAAIN,EAAaJ,IAA2B4B,EAAW,SAAUxB,EAAKJ,CAAM,CACtF,CACF,CCvDA,IAAI0C,EAOG,SAAS,cAA2B,CACzC,GAAIA,IAAW,OACb,OAAOA,EAGT,GAAI,CAACC,iBAAiB,EACpB,MAAM,IAAI,MAAM5C,0BAAe,uBAAuB,EAGxD,OAAA2C,EAASE,aAAAA,EAEFF,CACT,CCRO,MAAM,iBAAmB,MAC9BjB,GACsC,CACtC,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,eACdyB,EAAiD,CACrD,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,cAEtB,OADiB,MAAM4C,EAAU,IAA8BzC,EAAK2C,CAAO,GAC3D,IAClB,ECTa,uBAAyB,MACpCtB,GAC4C,CAC5C,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,eACdyB,EAAuD,CAC3D,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,oBAEtB,OADiB,MAAM4C,EAAU,IAAoCzC,EAAK2C,CAAO,GACjE,IAClB,ECfa,eAAiB,MAC5BtB,GACoC,CACpC,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,eACdyB,EAA+C,CACnD,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,YAEtB,OADiB,MAAM4C,EAAU,IAA4BzC,EAAK2C,CAAO,GACzD,IAClB,ECZa,WAAa,MACxBtB,GACgC,CAChC,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,aAAa,EAC3B,CAAE,UAAA0B,CAAU,EAAIvB,EAChBsB,EAA2C,CAC/C,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,aAAa+C,CAAS,GAE5C,OADiB,MAAMH,EAAU,IAAwBzC,EAAK2C,CAAO,GACrD,IAClB,ECba,oBAAsB,MACjCtB,GACyC,CACzC,MAAMoB,EAAYC,eACZ,CAAE,QAAA7C,CAAQ,EAAIqB,aAAa,EAC3B,CAAE,UAAA0B,EAAW,OAAAC,CAAO,EAAIxB,EACxBsB,EAAoD,CACxD,aAAc,MAChB,EAEM3C,EAAM,GAAGH,CAAO,aAAa+C,CAAS,UAAUC,CAAM,GAE5D,OADiB,MAAMJ,EAAU,IAAiCzC,EAAK2C,CAAO,GAC9D,IAClB,ECba,wBAA0B,MACrCtB,GAC6C,CAC7C,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,aAAa,EAC3B,CAAE,UAAA0B,CAAU,EAAIvB,EAChBsB,EAAwD,CAC5D,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,aAAa+C,CAAS,gBAE5C,OADiB,MAAMH,EAAU,IAAqCzC,EAAK2C,CAAO,GAClE,IAClB,ECVa,oBAAsB,MACjCtB,GACyC,CACzC,MAAMoB,EAAYC,eACZ,CAAE,QAAA7C,CAAQ,EAAIqB,aAAa,EAC3B,CAAE,UAAA0B,EAAW,cAAAE,CAAc,EAAIzB,EAC/BsB,EAAoD,CACxD,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,aAAa+C,CAAS,iBAAiBE,CAAa,GAE1E,OADiB,MAAML,EAAU,IAAiCzC,EAAK2C,CAAO,GAC9D,IAClB,EChBa,mBAAqB,SAAiD,CACjF,MAAMF,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,aAAa,EAE3BlB,EAAM,GAAGH,CAAO,WAEtB,OADiB,MAAM4C,EAAU,IAAgCzC,CAAG,GACpD,IAClB,ECPa,eAAiB,MAC5BqB,GACoC,CACpC,MAAMoB,EAAYC,aACZ,EAAA,CAAE,QAAA7C,CAAQ,EAAIqB,aAAa,EAC3ByB,EAA+C,CACnD,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,YAAYwB,EAAO,OAAO,GAEhD,OADiB,MAAMoB,EAAU,IAA4BzC,EAAK2C,CAAO,GACzD,IAClB,ECZa,oBAAsB,MACjCtB,GACyC,CACzC,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,eACdyB,EAAoD,CACxD,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,UAEtB,OADiB,MAAM4C,EAAU,IAAiCzC,EAAK2C,CAAO,GAC9D,IAClB,ECZa,gBAAkB,MAC7BtB,GACqC,CACrC,MAAMoB,EAAYC,aAAa,EACzB,CAAE,QAAA7C,CAAQ,EAAIqB,eACdyB,EAAgD,CACpD,OAAAtB,CACF,EAEMrB,EAAM,GAAGH,CAAO,WAEtB,OADiB,MAAM4C,EAAU,IAA6BzC,EAAK2C,CAAO,GAC1D,IAClB"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/api/config/constants.ts","../../src/api/config/index.ts","../../src/client/utils/errors.ts","../../src/client/utils/is-object.ts","../../src/client/utils/request.ts","../../src/client/utils/response.ts","../../src/client/utils/timeout.ts","../../src/client/utils/url.ts","../../src/client/create-client.ts","../../src/client/index.ts","../../src/api/categories/search-categories.ts","../../src/api/categories/search-categories-by-path.ts","../../src/api/products/search-products.ts","../../src/api/products/get-product.ts","../../src/api/products/download-product-file.ts","../../src/api/products/search-product-variations.ts","../../src/api/products/get-product-variation.ts","../../src/api/products/search-product-types.ts","../../src/api/products/get-product-type.ts","../../src/api/products/search-product-brands.ts","../../src/api/store/get-store-profile.ts","../../src/api/reviews/get-reviews.ts"],"sourcesContent":["export const API_BASE_URL = 'https://app.ecwid.com/api/v3/';\nexport const API_TIMEOUT = 10000;\n","import { API_BASE_URL } from '@/api/config/constants';\nimport { ERROR_MESSAGES } from '@/client/constants';\nimport { getStoreId } from '@/storefront';\nimport { ApiConfig } from '@/types';\n\nlet apiConfig: Required<ApiConfig> | undefined;\n\n/**\n * Get the API configuration.\n *\n * @example\n * ```typescript\n * import { getApiConfig, ApiConfig } from '@lightspeed/ecom-headless';\n *\n * const config: ApiConfig = getApiConfig();\n * ```\n */\nexport const getApiConfig = (): Required<ApiConfig> => {\n if (apiConfig === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_NOT_INITIALIZED);\n }\n\n return apiConfig;\n};\n\n/**\n * Initialize the Storefront API client.\n *\n * @example\n * ```typescript\n * import { initStorefrontApi } from '@lightspeed/ecom-headless';\n *\n * await initStorefrontApi({\n * publicToken: 'YOUR_PUBLIC_TOKEN',\n * storeId: 'YOUR_STORE_ID'\n * });\n * ```\n *\n * @remarks\n * - This method must be called before using any other API methods.\n * - If storeId is not provided, it will be auto-detected. If detection fails, an error will be thrown.\n */\nexport const initStorefrontApi = async (config: ApiConfig): Promise<void> => {\n if (config.publicToken === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_PUBLIC_TOKEN_REQUIRED);\n }\n\n const storeId = config.storeId ?? await getStoreId();\n\n if (storeId === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_STORE_ID_NOT_FOUND);\n }\n\n apiConfig = {\n baseURL: config.baseURL ?? API_BASE_URL,\n publicToken: config.publicToken,\n storeId,\n } satisfies Required<ApiConfig>;\n};\n","export class TimeoutError extends Error {\n constructor(url?: string, method?: string, timeout?: number) {\n super(\n `Request timeout${timeout ? ` after ${timeout}ms` : ''}${url ? ` for ${method} ${url}` : ''}`,\n );\n this.name = 'TimeoutError';\n }\n}\n\nexport function createTimeoutError(url?: string, method?: string, timeout?: number): TimeoutError {\n return new TimeoutError(url, method, timeout);\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { isObject } from '@/client/utils';\nimport { BaseHeaders, RequestConfig, RequestData } from '@/types';\n\nexport function isFetchAvailable(): boolean {\n return typeof globalThis.fetch === 'function';\n}\n\nexport function buildRequestHeaders(\n publicToken: string,\n config: RequestConfig = {},\n): Record<string, string> & BaseHeaders {\n return {\n 'Authorization': `Bearer ${publicToken}`,\n 'X-Lightspeed-Request-Origin': 'ecom-headless',\n 'redirect': 'follow',\n ...config.headers,\n };\n}\n\nexport function prepareRequestBody(\n method: string,\n data: RequestData,\n): BodyInit | undefined {\n if (method === 'GET' || data === undefined) {\n return undefined;\n }\n\n if (typeof data === 'string') {\n return data;\n }\n\n if (isObject(data)) {\n return JSON.stringify(data);\n }\n\n return undefined;\n}\n","import { ResponseType } from '@/types';\n\nexport async function parseResponseData(\n response: Response,\n responseType?: ResponseType,\n): Promise<ReturnType<typeof response.json> | ReturnType<typeof response.blob> | Response> {\n switch (responseType) {\n case 'json':\n return response.json();\n case 'blob':\n return response.blob();\n default:\n try {\n return await response.json();\n } catch {\n return response;\n }\n }\n}\n","interface TimeoutController {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n}\n\nexport function createTimeoutController(timeout: number): {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n} {\n if (typeof AbortController === 'undefined') {\n return {};\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => {\n controller.abort();\n }, timeout);\n\n return { controller, timer };\n}\n\nexport function clearTimeoutController(timeoutController: TimeoutController): void {\n if (timeoutController.timer !== undefined) {\n clearTimeout(timeoutController.timer);\n }\n}\n","import { getApiConfig } from '@/api';\nimport { QueryParams } from '@/types';\n\nfunction processQueryParam(\n key: string,\n value: QueryParams[string],\n): string | undefined {\n if (value === undefined) {\n return;\n }\n\n return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;\n}\n\nfunction createUrl(path: string): string {\n if (path.startsWith('http://') || path.startsWith('https://')) {\n return path;\n }\n\n const { baseURL } = getApiConfig();\n const normalizedBase = baseURL.endsWith('/') ? baseURL : baseURL + '/';\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n\n return normalizedBase + normalizedPath;\n}\n\nexport function buildUrlWithParams(path: string, params?: QueryParams): string {\n const url = createUrl(path);\n\n if (params === undefined) {\n return url;\n }\n\n const queryParams = Object\n .entries(params)\n .map(([key, value]) => processQueryParam(key, value))\n .filter((param): param is string => param !== undefined);\n\n if (queryParams.length > 0) {\n return `${url}?${queryParams.join('&')}`;\n }\n\n return url;\n}\n","import { getApiConfig } from '@/api/config';\nimport { API_TIMEOUT } from '@/api/config/constants';\nimport {\n buildRequestHeaders,\n buildUrlWithParams,\n clearTimeoutController,\n createTimeoutController,\n createTimeoutError,\n isAbortError,\n parseResponseData,\n prepareRequestBody,\n} from '@/client/utils';\nimport { HttpClient, RequestConfig, RequestData, HttpResponse } from '@/types';\n\nexport function createClient(): HttpClient {\n const { publicToken } = getApiConfig();\n\n async function request<T = unknown>(\n method: string,\n path: string,\n config?: RequestConfig,\n requestData?: RequestData,\n ): Promise<HttpResponse<T>> {\n const timeout = config?.timeout ?? API_TIMEOUT;\n const timeoutController = createTimeoutController(timeout);\n\n try {\n const headers = buildRequestHeaders(publicToken, config);\n const finalUrl = buildUrlWithParams(path, config?.params);\n\n const response = await fetch(finalUrl, {\n method,\n headers,\n body: prepareRequestBody(method, requestData),\n signal: timeoutController.controller?.signal,\n });\n\n const parsedResponseData = await parseResponseData(response, config?.responseType);\n\n return Object.assign(response, {\n data: parsedResponseData,\n }) satisfies HttpResponse<T>;\n } catch (error) {\n if (isAbortError(error)) {\n throw createTimeoutError(path, method, timeout);\n }\n\n throw error;\n } finally {\n clearTimeoutController(timeoutController);\n }\n }\n\n return {\n get: <T>(url: string, config?: RequestConfig) => request<T>('GET', url, config),\n post: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('POST', url, config, data),\n put: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PUT', url, config, data),\n patch: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PATCH', url, config, data),\n delete: <T>(url: string, config?: RequestConfig) => request<T>('DELETE', url, config),\n };\n}\n","import { ERROR_MESSAGES } from '@/client/constants';\nimport { createClient } from '@/client/create-client';\nimport { isFetchAvailable } from '@/client/utils';\nimport { HttpClient } from '@/types';\n\nlet client: HttpClient | undefined;\n\n/**\n * Get the singleton instance of the API client.\n * @returns The HTTP client instance\n * @throws {Error} If the fetch API is not available or client creation fails\n */\nexport function getApiClient(): HttpClient {\n if (client !== undefined) {\n return client;\n }\n\n if (!isFetchAvailable()) {\n throw new Error(ERROR_MESSAGES.FETCH_API_NOT_AVAILABLE);\n }\n\n client = createClient();\n\n return client;\n}\n\n/**\n * Reset the singleton API client instance.\n * Useful for testing or when configuration changes require a fresh client.\n */\nexport function resetApiClient(): void {\n client = undefined;\n}\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesParams, SearchCategoriesResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories in the store based on provided parameters.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategories, SearchCategoriesResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesResponse = await searchCategories();\n * ```\n */\nexport const searchCategories = async (\n params?: SearchCategoriesParams,\n): Promise<SearchCategoriesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesParams> = {\n params,\n };\n\n const url = `${storeId}/categories`;\n const response = await apiClient.get<SearchCategoriesResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesByPathParams, SearchCategoriesByPathResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories by path using a delimiter-separated path string.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories-by-path | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategoriesByPath, SearchCategoriesByPathResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesByPathResponse = await searchCategoriesByPath({\n * path: \"Electronics/Phones/Smartphones\",\n * delimiter: \"/\"\n * });\n * ```\n */\nexport const searchCategoriesByPath = async (\n params: SearchCategoriesByPathParams,\n): Promise<SearchCategoriesByPathResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesByPathParams> = {\n params,\n };\n\n const url = `${storeId}/categoriesByPath`;\n const response = await apiClient.get<SearchCategoriesByPathResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductsParams, SearchProductsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for products in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-products | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProducts, SearchProductsResponse } from '@lightspeed/ecom-headless';\n *\n * const products: SearchProductsResponse = await searchProducts({ keyword: 'laptop' });\n * ```\n */\nexport const searchProducts = async (\n params?: SearchProductsParams,\n): Promise<SearchProductsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductsParams> = {\n params,\n };\n\n const url = `${storeId}/products`;\n const response = await apiClient.get<SearchProductsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductParams, GetProductResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/get-product | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProduct, GetProductResponse } from '@lightspeed/ecom-headless';\n *\n * const product: GetProductResponse = await getProduct({ productId: 123 });\n * ```\n */\nexport const getProduct = async (\n params: GetProductParams,\n): Promise<GetProductResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<GetProductParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}`;\n const response = await apiClient.get<GetProductResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { DownloadProductFileParams, DownloadProductFileResponse, RequestConfig } from '@/types';\n\n/**\n * Download a product file from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-files/download-product-file | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { downloadProductFile, DownloadProductFileResponse } from '@lightspeed/ecom-headless';\n *\n * const file: DownloadProductFileResponse = await downloadProductFile({ productId: 123, fileId: 456 });\n * ```\n */\nexport const downloadProductFile = async (\n params: DownloadProductFileParams,\n): Promise<DownloadProductFileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, fileId } = params;\n const options: RequestConfig<DownloadProductFileParams> = {\n responseType: 'blob',\n };\n\n const url = `${storeId}/products/${productId}/files/${fileId}`;\n const response = await apiClient.get<DownloadProductFileResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductVariationsParams, SearchProductVariationsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product variations in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/search-product-variations | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductVariations, SearchProductVariationsResponse } from '@lightspeed/ecom-headless';\n *\n * const variations: SearchProductVariationsResponse = await searchProductVariations({ productId: 123 });\n * ```\n */\nexport const searchProductVariations = async (\n params: SearchProductVariationsParams,\n): Promise<SearchProductVariationsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<SearchProductVariationsParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations`;\n const response = await apiClient.get<SearchProductVariationsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductVariationParams, GetProductVariationResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product variation from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/get-product-variation | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductVariation, GetProductVariationResponse } from '@lightspeed/ecom-headless';\n *\n * const variation: GetProductVariationResponse = await getProductVariation({\n * productId: 123,\n * combinationId: 456\n * });\n * ```\n */\nexport const getProductVariation = async (\n params: GetProductVariationParams,\n): Promise<GetProductVariationResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, combinationId } = params;\n const options: RequestConfig<GetProductVariationParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations/${combinationId}`;\n const response = await apiClient.get<GetProductVariationResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductTypesResponse } from '@/types';\n\n/**\n * Search for product types in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/search-product-types | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductTypes, SearchProductTypesResponse } from '@lightspeed/ecom-headless';\n *\n * const productTypes: SearchProductTypesResponse = await searchProductTypes();\n * ```\n */\nexport const searchProductTypes = async (): Promise<SearchProductTypesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n\n const url = `${storeId}/classes`;\n const response = await apiClient.get<SearchProductTypesResponse>(url);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductTypeParams, GetProductTypeResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product type from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/get-product-type | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductType, GetProductTypeResponse } from '@lightspeed/ecom-headless';\n *\n * const productType: GetProductTypeResponse = await getProductType({ classId: 0 });\n * ```\n */\nexport const getProductType = async (\n params: GetProductTypeParams,\n): Promise<GetProductTypeResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetProductTypeParams> = {\n params,\n };\n\n const url = `${storeId}/classes/${params.classId}`;\n const response = await apiClient.get<GetProductTypeResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductBrandsParams, SearchProductBrandsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product brands in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-product-brands | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductBrands, SearchProductBrandsResponse } from '@lightspeed/ecom-headless';\n *\n * const brands: SearchProductBrandsResponse = await searchProductBrands({ limit: 10 });\n * ```\n */\nexport const searchProductBrands = async (\n params?: SearchProductBrandsParams,\n): Promise<SearchProductBrandsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductBrandsParams> = {\n params,\n };\n\n const url = `${storeId}/brands`;\n const response = await apiClient.get<SearchProductBrandsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetStoreProfileParams, GetStoreProfileResponse, RequestConfig } from '@/types';\n\n/**\n * Get basic information about an Ecwid store: settings, store location, email, etc.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/store-profile/get-store-profile | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getStoreProfile, GetStoreProfileResponse } from '@lightspeed/ecom-headless';\n *\n * const profile: GetStoreProfileResponse = await getStoreProfile();\n * ```\n */\nexport const getStoreProfile = async (\n params?: GetStoreProfileParams,\n): Promise<GetStoreProfileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetStoreProfileParams> = {\n params,\n };\n\n const url = `${storeId}/profile`;\n const response = await apiClient.get<GetStoreProfileResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetReviewsParams, GetReviewsResponse, RequestConfig } from '@/types';\n\n/**\n * Get product reviews from a store.\n * Returns published reviews when accessed with a public token.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/reviews/get-reviews | Ecwid API Documentation}\n *\n * @param params - Query parameters with optional offset and limit for pagination\n * @returns Promise resolving to GetReviewsResponse containing paginated reviews\n * @throws Error if API client is not initialized or request fails\n *\n * @example\n * ```typescript\n * import { getReviews } from '@lightspeed/ecom-headless';\n *\n * const response = await getReviews({ limit: 3 });\n * response.items.forEach(review => {\n * console.log(`${review.rating}⭐ - ${review.review}`);\n * });\n * ```\n */\nexport const getReviews = async (\n params?: GetReviewsParams,\n): Promise<GetReviewsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetReviewsParams> = {\n params,\n };\n\n const url = `${storeId}/reviews`;\n const response = await apiClient.get<GetReviewsResponse>(url, options);\n return response.data;\n};\n"],"names":["apiConfig","ERROR_MESSAGES","config","storeId","getStoreId","API_BASE_URL","url","method","timeout","error","value","publicToken","data","isObject","response","responseType","controller","timer","timeoutController","processQueryParam","key","createUrl","path","baseURL","getApiConfig","normalizedBase","normalizedPath","params","queryParams","param","request","requestData","API_TIMEOUT","createTimeoutController","headers","buildRequestHeaders","finalUrl","buildUrlWithParams","prepareRequestBody","parsedResponseData","parseResponseData","isAbortError","createTimeoutError","clearTimeoutController","client","isFetchAvailable","createClient","apiClient","getApiClient","options","productId","fileId","combinationId"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { b5 as ApiConfig, d as SearchCategoriesParams, c as SearchCategoriesResponse, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, K as SearchProductsParams, J as SearchProductsResponse, N as GetProductParams, M as GetProductResponse, Q as DownloadProductFileParams, O as DownloadProductFileResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, V as GetProductVariationParams, U as GetProductVariationResponse, X as SearchProductTypesResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, b4 as GetStoreProfileParams, b3 as GetStoreProfileResponse } from '../shared/ecom-headless.DTL4WyVk.cjs';
1
+ import { b7 as ApiConfig, d as SearchCategoriesParams, c as SearchCategoriesResponse, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, K as SearchProductsParams, J as SearchProductsResponse, N as GetProductParams, M as GetProductResponse, Q as DownloadProductFileParams, O as DownloadProductFileResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, V as GetProductVariationParams, U as GetProductVariationResponse, X as SearchProductTypesResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, b6 as GetStoreProfileParams, b5 as GetStoreProfileResponse, a1 as GetReviewsParams, a0 as GetReviewsResponse } from '../shared/ecom-headless.Bkwk1yoz.cjs';
2
2
  import 'buffer';
3
3
 
4
4
  /**
@@ -191,4 +191,26 @@ declare const searchProductBrands: (params?: SearchProductBrandsParams) => Promi
191
191
  */
192
192
  declare const getStoreProfile: (params?: GetStoreProfileParams) => Promise<GetStoreProfileResponse>;
193
193
 
194
- export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts };
194
+ /**
195
+ * Get product reviews from a store.
196
+ * Returns published reviews when accessed with a public token.
197
+ *
198
+ * @see {@link https://docs.ecwid.com/api-reference/rest-api/reviews/get-reviews | Ecwid API Documentation}
199
+ *
200
+ * @param params - Query parameters with optional offset and limit for pagination
201
+ * @returns Promise resolving to GetReviewsResponse containing paginated reviews
202
+ * @throws Error if API client is not initialized or request fails
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * import { getReviews } from '@lightspeed/ecom-headless';
207
+ *
208
+ * const response = await getReviews({ limit: 3 });
209
+ * response.items.forEach(review => {
210
+ * console.log(`${review.rating}⭐ - ${review.review}`);
211
+ * });
212
+ * ```
213
+ */
214
+ declare const getReviews: (params?: GetReviewsParams) => Promise<GetReviewsResponse>;
215
+
216
+ export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getReviews, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts };
@@ -1,4 +1,4 @@
1
- import { b5 as ApiConfig, d as SearchCategoriesParams, c as SearchCategoriesResponse, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, K as SearchProductsParams, J as SearchProductsResponse, N as GetProductParams, M as GetProductResponse, Q as DownloadProductFileParams, O as DownloadProductFileResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, V as GetProductVariationParams, U as GetProductVariationResponse, X as SearchProductTypesResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, b4 as GetStoreProfileParams, b3 as GetStoreProfileResponse } from '../shared/ecom-headless.DTL4WyVk.mjs';
1
+ import { b7 as ApiConfig, d as SearchCategoriesParams, c as SearchCategoriesResponse, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, K as SearchProductsParams, J as SearchProductsResponse, N as GetProductParams, M as GetProductResponse, Q as DownloadProductFileParams, O as DownloadProductFileResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, V as GetProductVariationParams, U as GetProductVariationResponse, X as SearchProductTypesResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, b6 as GetStoreProfileParams, b5 as GetStoreProfileResponse, a1 as GetReviewsParams, a0 as GetReviewsResponse } from '../shared/ecom-headless.Bkwk1yoz.mjs';
2
2
  import 'buffer';
3
3
 
4
4
  /**
@@ -191,4 +191,26 @@ declare const searchProductBrands: (params?: SearchProductBrandsParams) => Promi
191
191
  */
192
192
  declare const getStoreProfile: (params?: GetStoreProfileParams) => Promise<GetStoreProfileResponse>;
193
193
 
194
- export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts };
194
+ /**
195
+ * Get product reviews from a store.
196
+ * Returns published reviews when accessed with a public token.
197
+ *
198
+ * @see {@link https://docs.ecwid.com/api-reference/rest-api/reviews/get-reviews | Ecwid API Documentation}
199
+ *
200
+ * @param params - Query parameters with optional offset and limit for pagination
201
+ * @returns Promise resolving to GetReviewsResponse containing paginated reviews
202
+ * @throws Error if API client is not initialized or request fails
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * import { getReviews } from '@lightspeed/ecom-headless';
207
+ *
208
+ * const response = await getReviews({ limit: 3 });
209
+ * response.items.forEach(review => {
210
+ * console.log(`${review.rating}⭐ - ${review.review}`);
211
+ * });
212
+ * ```
213
+ */
214
+ declare const getReviews: (params?: GetReviewsParams) => Promise<GetReviewsResponse>;
215
+
216
+ export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getReviews, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts };
@@ -1,4 +1,4 @@
1
- import { b5 as ApiConfig, d as SearchCategoriesParams, c as SearchCategoriesResponse, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, K as SearchProductsParams, J as SearchProductsResponse, N as GetProductParams, M as GetProductResponse, Q as DownloadProductFileParams, O as DownloadProductFileResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, V as GetProductVariationParams, U as GetProductVariationResponse, X as SearchProductTypesResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, b4 as GetStoreProfileParams, b3 as GetStoreProfileResponse } from '../shared/ecom-headless.DTL4WyVk.js';
1
+ import { b7 as ApiConfig, d as SearchCategoriesParams, c as SearchCategoriesResponse, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, K as SearchProductsParams, J as SearchProductsResponse, N as GetProductParams, M as GetProductResponse, Q as DownloadProductFileParams, O as DownloadProductFileResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, V as GetProductVariationParams, U as GetProductVariationResponse, X as SearchProductTypesResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, b6 as GetStoreProfileParams, b5 as GetStoreProfileResponse, a1 as GetReviewsParams, a0 as GetReviewsResponse } from '../shared/ecom-headless.Bkwk1yoz.js';
2
2
  import 'buffer';
3
3
 
4
4
  /**
@@ -191,4 +191,26 @@ declare const searchProductBrands: (params?: SearchProductBrandsParams) => Promi
191
191
  */
192
192
  declare const getStoreProfile: (params?: GetStoreProfileParams) => Promise<GetStoreProfileResponse>;
193
193
 
194
- export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts };
194
+ /**
195
+ * Get product reviews from a store.
196
+ * Returns published reviews when accessed with a public token.
197
+ *
198
+ * @see {@link https://docs.ecwid.com/api-reference/rest-api/reviews/get-reviews | Ecwid API Documentation}
199
+ *
200
+ * @param params - Query parameters with optional offset and limit for pagination
201
+ * @returns Promise resolving to GetReviewsResponse containing paginated reviews
202
+ * @throws Error if API client is not initialized or request fails
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * import { getReviews } from '@lightspeed/ecom-headless';
207
+ *
208
+ * const response = await getReviews({ limit: 3 });
209
+ * response.items.forEach(review => {
210
+ * console.log(`${review.rating}⭐ - ${review.review}`);
211
+ * });
212
+ * ```
213
+ */
214
+ declare const getReviews: (params?: GetReviewsParams) => Promise<GetReviewsResponse>;
215
+
216
+ export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getReviews, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts };
@@ -1,2 +1,2 @@
1
- import{E as l,a as g}from"../shared/ecom-headless.biFHUae1.mjs";const y="https://app.ecwid.com/api/v3/",T=1e4;let p;const s=()=>{if(p===void 0)throw new Error(l.CONFIG_NOT_INITIALIZED);return p},b=async t=>{if(t.publicToken===void 0)throw new Error(l.CONFIG_PUBLIC_TOKEN_REQUIRED);const r=t.storeId??await g();if(r===void 0)throw new Error(l.CONFIG_STORE_ID_NOT_FOUND);p={baseURL:t.baseURL??y,publicToken:t.publicToken,storeId:r}};class w extends Error{constructor(r,e,o){super(`Request timeout${o?` after ${o}ms`:""}${r?` for ${e} ${r}`:""}`),this.name="TimeoutError"}}function E(t,r,e){return new w(t,r,e)}function $(t){return t instanceof Error&&t.name==="AbortError"}function A(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function P(){return typeof globalThis.fetch=="function"}function C(t,r={}){return{Authorization:`Bearer ${t}`,"X-Lightspeed-Request-Origin":"ecom-headless",redirect:"follow",...r.headers}}function O(t,r){if(!(t==="GET"||r===void 0)){if(typeof r=="string")return r;if(A(r))return JSON.stringify(r)}}async function R(t,r){switch(r){case"json":return t.json();case"blob":return t.blob();default:try{return await t.json()}catch{return t}}}function _(t){if(typeof AbortController>"u")return{};const r=new AbortController,e=setTimeout(()=>{r.abort()},t);return{controller:r,timer:e}}function U(t){t.timer!==void 0&&clearTimeout(t.timer)}function v(t,r){if(r!==void 0)return`${encodeURIComponent(t)}=${encodeURIComponent(String(r))}`}function S(t){if(t.startsWith("http://")||t.startsWith("https://"))return t;const{baseURL:r}=s(),e=r.endsWith("/")?r:r+"/",o=t.startsWith("/")?t.slice(1):t;return e+o}function L(t,r){const e=S(t);if(r===void 0)return e;const o=Object.entries(r).map(([n,a])=>v(n,a)).filter(n=>n!==void 0);return o.length>0?`${e}?${o.join("&")}`:e}function N(){const{publicToken:t}=s();async function r(e,o,n,a){const c=n?.timeout??T,f=_(c);try{const u=C(t,n),h=L(o,n?.params),I=await fetch(h,{method:e,headers:u,body:O(e,a),signal:f.controller?.signal}),m=await R(I,n?.responseType);return Object.assign(I,{data:m})}catch(u){throw $(u)?E(o,e,c):u}finally{U(f)}}return{get:(e,o)=>r("GET",e,o),post:(e,o,n)=>r("POST",e,n,o),put:(e,o,n)=>r("PUT",e,n,o),patch:(e,o,n)=>r("PATCH",e,n,o),delete:(e,o)=>r("DELETE",e,o)}}let d;function i(){if(d!==void 0)return d;if(!P())throw new Error(l.FETCH_API_NOT_AVAILABLE);return d=N(),d}const j=async t=>{const r=i(),{storeId:e}=s(),o={params:t},n=`${e}/categories`;return(await r.get(n,o)).data},B=async t=>{const r=i(),{storeId:e}=s(),o={params:t},n=`${e}/categoriesByPath`;return(await r.get(n,o)).data},F=async t=>{const r=i(),{storeId:e}=s(),o={params:t},n=`${e}/products`;return(await r.get(n,o)).data},D=async t=>{const r=i(),{storeId:e}=s(),{productId:o}=t,n={params:t},a=`${e}/products/${o}`;return(await r.get(a,n)).data},G=async t=>{const r=i(),{storeId:e}=s(),{productId:o,fileId:n}=t,a={responseType:"blob"},c=`${e}/products/${o}/files/${n}`;return(await r.get(c,a)).data},W=async t=>{const r=i(),{storeId:e}=s(),{productId:o}=t,n={params:t},a=`${e}/products/${o}/combinations`;return(await r.get(a,n)).data},k=async t=>{const r=i(),{storeId:e}=s(),{productId:o,combinationId:n}=t,a={params:t},c=`${e}/products/${o}/combinations/${n}`;return(await r.get(c,a)).data},q=async()=>{const t=i(),{storeId:r}=s(),e=`${r}/classes`;return(await t.get(e)).data},H=async t=>{const r=i(),{storeId:e}=s(),o={params:t},n=`${e}/classes/${t.classId}`;return(await r.get(n,o)).data},V=async t=>{const r=i(),{storeId:e}=s(),o={params:t},n=`${e}/brands`;return(await r.get(n,o)).data},x=async t=>{const r=i(),{storeId:e}=s(),o={params:t},n=`${e}/profile`;return(await r.get(n,o)).data};export{G as downloadProductFile,s as getApiConfig,D as getProduct,H as getProductType,k as getProductVariation,x as getStoreProfile,b as initStorefrontApi,j as searchCategories,B as searchCategoriesByPath,V as searchProductBrands,q as searchProductTypes,W as searchProductVariations,F as searchProducts};
1
+ import{E as p,a as g}from"../shared/ecom-headless.biFHUae1.mjs";const w="https://app.ecwid.com/api/v3/",y=1e4;let l;const s=()=>{if(l===void 0)throw new Error(p.CONFIG_NOT_INITIALIZED);return l},T=async t=>{if(t.publicToken===void 0)throw new Error(p.CONFIG_PUBLIC_TOKEN_REQUIRED);const r=t.storeId??await g();if(r===void 0)throw new Error(p.CONFIG_STORE_ID_NOT_FOUND);l={baseURL:t.baseURL??w,publicToken:t.publicToken,storeId:r}};class b extends Error{constructor(r,e,o){super(`Request timeout${o?` after ${o}ms`:""}${r?` for ${e} ${r}`:""}`),this.name="TimeoutError"}}function E(t,r,e){return new b(t,r,e)}function $(t){return t instanceof Error&&t.name==="AbortError"}function A(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function P(){return typeof globalThis.fetch=="function"}function R(t,r={}){return{Authorization:`Bearer ${t}`,"X-Lightspeed-Request-Origin":"ecom-headless",redirect:"follow",...r.headers}}function C(t,r){if(!(t==="GET"||r===void 0)){if(typeof r=="string")return r;if(A(r))return JSON.stringify(r)}}async function O(t,r){switch(r){case"json":return t.json();case"blob":return t.blob();default:try{return await t.json()}catch{return t}}}function _(t){if(typeof AbortController>"u")return{};const r=new AbortController,e=setTimeout(()=>{r.abort()},t);return{controller:r,timer:e}}function v(t){t.timer!==void 0&&clearTimeout(t.timer)}function U(t,r){if(r!==void 0)return`${encodeURIComponent(t)}=${encodeURIComponent(String(r))}`}function S(t){if(t.startsWith("http://")||t.startsWith("https://"))return t;const{baseURL:r}=s(),e=r.endsWith("/")?r:r+"/",o=t.startsWith("/")?t.slice(1):t;return e+o}function L(t,r){const e=S(t);if(r===void 0)return e;const o=Object.entries(r).map(([n,i])=>U(n,i)).filter(n=>n!==void 0);return o.length>0?`${e}?${o.join("&")}`:e}function N(){const{publicToken:t}=s();async function r(e,o,n,i){const c=n?.timeout??y,f=_(c);try{const u=R(t,n),m=L(o,n?.params),I=await fetch(m,{method:e,headers:u,body:C(e,i),signal:f.controller?.signal}),h=await O(I,n?.responseType);return Object.assign(I,{data:h})}catch(u){throw $(u)?E(o,e,c):u}finally{v(f)}}return{get:(e,o)=>r("GET",e,o),post:(e,o,n)=>r("POST",e,n,o),put:(e,o,n)=>r("PUT",e,n,o),patch:(e,o,n)=>r("PATCH",e,n,o),delete:(e,o)=>r("DELETE",e,o)}}let d;function a(){if(d!==void 0)return d;if(!P())throw new Error(p.FETCH_API_NOT_AVAILABLE);return d=N(),d}const j=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/categories`;return(await r.get(n,o)).data},B=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/categoriesByPath`;return(await r.get(n,o)).data},F=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/products`;return(await r.get(n,o)).data},D=async t=>{const r=a(),{storeId:e}=s(),{productId:o}=t,n={params:t},i=`${e}/products/${o}`;return(await r.get(i,n)).data},G=async t=>{const r=a(),{storeId:e}=s(),{productId:o,fileId:n}=t,i={responseType:"blob"},c=`${e}/products/${o}/files/${n}`;return(await r.get(c,i)).data},W=async t=>{const r=a(),{storeId:e}=s(),{productId:o}=t,n={params:t},i=`${e}/products/${o}/combinations`;return(await r.get(i,n)).data},k=async t=>{const r=a(),{storeId:e}=s(),{productId:o,combinationId:n}=t,i={params:t},c=`${e}/products/${o}/combinations/${n}`;return(await r.get(c,i)).data},q=async()=>{const t=a(),{storeId:r}=s(),e=`${r}/classes`;return(await t.get(e)).data},H=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/classes/${t.classId}`;return(await r.get(n,o)).data},V=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/brands`;return(await r.get(n,o)).data},x=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/profile`;return(await r.get(n,o)).data},M=async t=>{const r=a(),{storeId:e}=s(),o={params:t},n=`${e}/reviews`;return(await r.get(n,o)).data};export{G as downloadProductFile,s as getApiConfig,D as getProduct,H as getProductType,k as getProductVariation,M as getReviews,x as getStoreProfile,T as initStorefrontApi,j as searchCategories,B as searchCategoriesByPath,V as searchProductBrands,q as searchProductTypes,W as searchProductVariations,F as searchProducts};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/api/config/constants.ts","../../src/api/config/index.ts","../../src/client/utils/errors.ts","../../src/client/utils/is-object.ts","../../src/client/utils/request.ts","../../src/client/utils/response.ts","../../src/client/utils/timeout.ts","../../src/client/utils/url.ts","../../src/client/create-client.ts","../../src/client/index.ts","../../src/api/categories/search-categories.ts","../../src/api/categories/search-categories-by-path.ts","../../src/api/products/search-products.ts","../../src/api/products/get-product.ts","../../src/api/products/download-product-file.ts","../../src/api/products/search-product-variations.ts","../../src/api/products/get-product-variation.ts","../../src/api/products/search-product-types.ts","../../src/api/products/get-product-type.ts","../../src/api/products/search-product-brands.ts","../../src/api/store/get-store-profile.ts"],"sourcesContent":["export const API_BASE_URL = 'https://app.ecwid.com/api/v3/';\nexport const API_TIMEOUT = 10000;\n","import { API_BASE_URL } from '@/api/config/constants';\nimport { ERROR_MESSAGES } from '@/client/constants';\nimport { getStoreId } from '@/storefront';\nimport { ApiConfig } from '@/types';\n\nlet apiConfig: Required<ApiConfig> | undefined;\n\n/**\n * Get the API configuration.\n *\n * @example\n * ```typescript\n * import { getApiConfig, ApiConfig } from '@lightspeed/ecom-headless';\n *\n * const config: ApiConfig = getApiConfig();\n * ```\n */\nexport const getApiConfig = (): Required<ApiConfig> => {\n if (apiConfig === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_NOT_INITIALIZED);\n }\n\n return apiConfig;\n};\n\n/**\n * Initialize the Storefront API client.\n *\n * @example\n * ```typescript\n * import { initStorefrontApi } from '@lightspeed/ecom-headless';\n *\n * await initStorefrontApi({\n * publicToken: 'YOUR_PUBLIC_TOKEN',\n * storeId: 'YOUR_STORE_ID'\n * });\n * ```\n *\n * @remarks\n * - This method must be called before using any other API methods.\n * - If storeId is not provided, it will be auto-detected. If detection fails, an error will be thrown.\n */\nexport const initStorefrontApi = async (config: ApiConfig): Promise<void> => {\n if (config.publicToken === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_PUBLIC_TOKEN_REQUIRED);\n }\n\n const storeId = config.storeId ?? await getStoreId();\n\n if (storeId === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_STORE_ID_NOT_FOUND);\n }\n\n apiConfig = {\n baseURL: config.baseURL ?? API_BASE_URL,\n publicToken: config.publicToken,\n storeId,\n } satisfies Required<ApiConfig>;\n};\n","export class TimeoutError extends Error {\n constructor(url?: string, method?: string, timeout?: number) {\n super(\n `Request timeout${timeout ? ` after ${timeout}ms` : ''}${url ? ` for ${method} ${url}` : ''}`,\n );\n this.name = 'TimeoutError';\n }\n}\n\nexport function createTimeoutError(url?: string, method?: string, timeout?: number): TimeoutError {\n return new TimeoutError(url, method, timeout);\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { isObject } from '@/client/utils';\nimport { BaseHeaders, RequestConfig, RequestData } from '@/types';\n\nexport function isFetchAvailable(): boolean {\n return typeof globalThis.fetch === 'function';\n}\n\nexport function buildRequestHeaders(\n publicToken: string,\n config: RequestConfig = {},\n): Record<string, string> & BaseHeaders {\n return {\n 'Authorization': `Bearer ${publicToken}`,\n 'X-Lightspeed-Request-Origin': 'ecom-headless',\n 'redirect': 'follow',\n ...config.headers,\n };\n}\n\nexport function prepareRequestBody(\n method: string,\n data: RequestData,\n): BodyInit | undefined {\n if (method === 'GET' || data === undefined) {\n return undefined;\n }\n\n if (typeof data === 'string') {\n return data;\n }\n\n if (isObject(data)) {\n return JSON.stringify(data);\n }\n\n return undefined;\n}\n","import { ResponseType } from '@/types';\n\nexport async function parseResponseData(\n response: Response,\n responseType?: ResponseType,\n): Promise<ReturnType<typeof response.json> | ReturnType<typeof response.blob> | Response> {\n switch (responseType) {\n case 'json':\n return response.json();\n case 'blob':\n return response.blob();\n default:\n try {\n return await response.json();\n } catch {\n return response;\n }\n }\n}\n","interface TimeoutController {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n}\n\nexport function createTimeoutController(timeout: number): {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n} {\n if (typeof AbortController === 'undefined') {\n return {};\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => {\n controller.abort();\n }, timeout);\n\n return { controller, timer };\n}\n\nexport function clearTimeoutController(timeoutController: TimeoutController): void {\n if (timeoutController.timer !== undefined) {\n clearTimeout(timeoutController.timer);\n }\n}\n","import { getApiConfig } from '@/api';\nimport { QueryParams } from '@/types';\n\nfunction processQueryParam(\n key: string,\n value: QueryParams[string],\n): string | undefined {\n if (value === undefined) {\n return;\n }\n\n return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;\n}\n\nfunction createUrl(path: string): string {\n if (path.startsWith('http://') || path.startsWith('https://')) {\n return path;\n }\n\n const { baseURL } = getApiConfig();\n const normalizedBase = baseURL.endsWith('/') ? baseURL : baseURL + '/';\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n\n return normalizedBase + normalizedPath;\n}\n\nexport function buildUrlWithParams(path: string, params?: QueryParams): string {\n const url = createUrl(path);\n\n if (params === undefined) {\n return url;\n }\n\n const queryParams = Object\n .entries(params)\n .map(([key, value]) => processQueryParam(key, value))\n .filter((param): param is string => param !== undefined);\n\n if (queryParams.length > 0) {\n return `${url}?${queryParams.join('&')}`;\n }\n\n return url;\n}\n","import { getApiConfig } from '@/api/config';\nimport { API_TIMEOUT } from '@/api/config/constants';\nimport {\n buildRequestHeaders,\n buildUrlWithParams,\n clearTimeoutController,\n createTimeoutController,\n createTimeoutError,\n isAbortError,\n parseResponseData,\n prepareRequestBody,\n} from '@/client/utils';\nimport { HttpClient, RequestConfig, RequestData, HttpResponse } from '@/types';\n\nexport function createClient(): HttpClient {\n const { publicToken } = getApiConfig();\n\n async function request<T = unknown>(\n method: string,\n path: string,\n config?: RequestConfig,\n requestData?: RequestData,\n ): Promise<HttpResponse<T>> {\n const timeout = config?.timeout ?? API_TIMEOUT;\n const timeoutController = createTimeoutController(timeout);\n\n try {\n const headers = buildRequestHeaders(publicToken, config);\n const finalUrl = buildUrlWithParams(path, config?.params);\n\n const response = await fetch(finalUrl, {\n method,\n headers,\n body: prepareRequestBody(method, requestData),\n signal: timeoutController.controller?.signal,\n });\n\n const parsedResponseData = await parseResponseData(response, config?.responseType);\n\n return Object.assign(response, {\n data: parsedResponseData,\n }) satisfies HttpResponse<T>;\n } catch (error) {\n if (isAbortError(error)) {\n throw createTimeoutError(path, method, timeout);\n }\n\n throw error;\n } finally {\n clearTimeoutController(timeoutController);\n }\n }\n\n return {\n get: <T>(url: string, config?: RequestConfig) => request<T>('GET', url, config),\n post: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('POST', url, config, data),\n put: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PUT', url, config, data),\n patch: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PATCH', url, config, data),\n delete: <T>(url: string, config?: RequestConfig) => request<T>('DELETE', url, config),\n };\n}\n","import { ERROR_MESSAGES } from '@/client/constants';\nimport { createClient } from '@/client/create-client';\nimport { isFetchAvailable } from '@/client/utils';\nimport { HttpClient } from '@/types';\n\nlet client: HttpClient | undefined;\n\n/**\n * Get the singleton instance of the API client.\n * @returns The HTTP client instance\n * @throws {Error} If the fetch API is not available or client creation fails\n */\nexport function getApiClient(): HttpClient {\n if (client !== undefined) {\n return client;\n }\n\n if (!isFetchAvailable()) {\n throw new Error(ERROR_MESSAGES.FETCH_API_NOT_AVAILABLE);\n }\n\n client = createClient();\n\n return client;\n}\n\n/**\n * Reset the singleton API client instance.\n * Useful for testing or when configuration changes require a fresh client.\n */\nexport function resetApiClient(): void {\n client = undefined;\n}\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesParams, SearchCategoriesResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories in the store based on provided parameters.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategories, SearchCategoriesResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesResponse = await searchCategories();\n * ```\n */\nexport const searchCategories = async (\n params?: SearchCategoriesParams,\n): Promise<SearchCategoriesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesParams> = {\n params,\n };\n\n const url = `${storeId}/categories`;\n const response = await apiClient.get<SearchCategoriesResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesByPathParams, SearchCategoriesByPathResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories by path using a delimiter-separated path string.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories-by-path | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategoriesByPath, SearchCategoriesByPathResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesByPathResponse = await searchCategoriesByPath({\n * path: \"Electronics/Phones/Smartphones\",\n * delimiter: \"/\"\n * });\n * ```\n */\nexport const searchCategoriesByPath = async (\n params: SearchCategoriesByPathParams,\n): Promise<SearchCategoriesByPathResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesByPathParams> = {\n params,\n };\n\n const url = `${storeId}/categoriesByPath`;\n const response = await apiClient.get<SearchCategoriesByPathResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductsParams, SearchProductsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for products in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-products | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProducts, SearchProductsResponse } from '@lightspeed/ecom-headless';\n *\n * const products: SearchProductsResponse = await searchProducts({ keyword: 'laptop' });\n * ```\n */\nexport const searchProducts = async (\n params?: SearchProductsParams,\n): Promise<SearchProductsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductsParams> = {\n params,\n };\n\n const url = `${storeId}/products`;\n const response = await apiClient.get<SearchProductsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductParams, GetProductResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/get-product | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProduct, GetProductResponse } from '@lightspeed/ecom-headless';\n *\n * const product: GetProductResponse = await getProduct({ productId: 123 });\n * ```\n */\nexport const getProduct = async (\n params: GetProductParams,\n): Promise<GetProductResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<GetProductParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}`;\n const response = await apiClient.get<GetProductResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { DownloadProductFileParams, DownloadProductFileResponse, RequestConfig } from '@/types';\n\n/**\n * Download a product file from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-files/download-product-file | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { downloadProductFile, DownloadProductFileResponse } from '@lightspeed/ecom-headless';\n *\n * const file: DownloadProductFileResponse = await downloadProductFile({ productId: 123, fileId: 456 });\n * ```\n */\nexport const downloadProductFile = async (\n params: DownloadProductFileParams,\n): Promise<DownloadProductFileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, fileId } = params;\n const options: RequestConfig<DownloadProductFileParams> = {\n responseType: 'blob',\n };\n\n const url = `${storeId}/products/${productId}/files/${fileId}`;\n const response = await apiClient.get<DownloadProductFileResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductVariationsParams, SearchProductVariationsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product variations in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/search-product-variations | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductVariations, SearchProductVariationsResponse } from '@lightspeed/ecom-headless';\n *\n * const variations: SearchProductVariationsResponse = await searchProductVariations({ productId: 123 });\n * ```\n */\nexport const searchProductVariations = async (\n params: SearchProductVariationsParams,\n): Promise<SearchProductVariationsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<SearchProductVariationsParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations`;\n const response = await apiClient.get<SearchProductVariationsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductVariationParams, GetProductVariationResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product variation from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/get-product-variation | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductVariation, GetProductVariationResponse } from '@lightspeed/ecom-headless';\n *\n * const variation: GetProductVariationResponse = await getProductVariation({\n * productId: 123,\n * combinationId: 456\n * });\n * ```\n */\nexport const getProductVariation = async (\n params: GetProductVariationParams,\n): Promise<GetProductVariationResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, combinationId } = params;\n const options: RequestConfig<GetProductVariationParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations/${combinationId}`;\n const response = await apiClient.get<GetProductVariationResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductTypesResponse } from '@/types';\n\n/**\n * Search for product types in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/search-product-types | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductTypes, SearchProductTypesResponse } from '@lightspeed/ecom-headless';\n *\n * const productTypes: SearchProductTypesResponse = await searchProductTypes();\n * ```\n */\nexport const searchProductTypes = async (): Promise<SearchProductTypesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n\n const url = `${storeId}/classes`;\n const response = await apiClient.get<SearchProductTypesResponse>(url);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductTypeParams, GetProductTypeResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product type from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/get-product-type | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductType, GetProductTypeResponse } from '@lightspeed/ecom-headless';\n *\n * const productType: GetProductTypeResponse = await getProductType({ classId: 0 });\n * ```\n */\nexport const getProductType = async (\n params: GetProductTypeParams,\n): Promise<GetProductTypeResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetProductTypeParams> = {\n params,\n };\n\n const url = `${storeId}/classes/${params.classId}`;\n const response = await apiClient.get<GetProductTypeResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductBrandsParams, SearchProductBrandsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product brands in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-product-brands | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductBrands, SearchProductBrandsResponse } from '@lightspeed/ecom-headless';\n *\n * const brands: SearchProductBrandsResponse = await searchProductBrands({ limit: 10 });\n * ```\n */\nexport const searchProductBrands = async (\n params?: SearchProductBrandsParams,\n): Promise<SearchProductBrandsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductBrandsParams> = {\n params,\n };\n\n const url = `${storeId}/brands`;\n const response = await apiClient.get<SearchProductBrandsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetStoreProfileParams, GetStoreProfileResponse, RequestConfig } from '@/types';\n\n/**\n * Get basic information about an Ecwid store: settings, store location, email, etc.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/store-profile/get-store-profile | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getStoreProfile, GetStoreProfileResponse } from '@lightspeed/ecom-headless';\n *\n * const profile: GetStoreProfileResponse = await getStoreProfile();\n * ```\n */\nexport const getStoreProfile = async (\n params?: GetStoreProfileParams,\n): Promise<GetStoreProfileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetStoreProfileParams> = {\n params,\n };\n\n const url = `${storeId}/profile`;\n const response = await apiClient.get<GetStoreProfileResponse>(url, options);\n return response.data;\n};\n"],"names":["API_BASE_URL","API_TIMEOUT","apiConfig","getApiConfig","ERROR_MESSAGES","initStorefrontApi","config","storeId","getStoreId","TimeoutError","url","method","timeout","createTimeoutError","isAbortError","error","isObject","value","isFetchAvailable","buildRequestHeaders","publicToken","prepareRequestBody","data","parseResponseData","response","responseType","createTimeoutController","controller","timer","clearTimeoutController","timeoutController","processQueryParam","key","createUrl","path","baseURL","normalizedBase","normalizedPath","buildUrlWithParams","params","queryParams","param","createClient","request","requestData","headers","finalUrl","parsedResponseData","client","getApiClient","searchCategories","apiClient","options","searchCategoriesByPath","searchProducts","getProduct","productId","downloadProductFile","fileId","searchProductVariations","getProductVariation","combinationId","searchProductTypes","getProductType","searchProductBrands","getStoreProfile"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/api/config/constants.ts","../../src/api/config/index.ts","../../src/client/utils/errors.ts","../../src/client/utils/is-object.ts","../../src/client/utils/request.ts","../../src/client/utils/response.ts","../../src/client/utils/timeout.ts","../../src/client/utils/url.ts","../../src/client/create-client.ts","../../src/client/index.ts","../../src/api/categories/search-categories.ts","../../src/api/categories/search-categories-by-path.ts","../../src/api/products/search-products.ts","../../src/api/products/get-product.ts","../../src/api/products/download-product-file.ts","../../src/api/products/search-product-variations.ts","../../src/api/products/get-product-variation.ts","../../src/api/products/search-product-types.ts","../../src/api/products/get-product-type.ts","../../src/api/products/search-product-brands.ts","../../src/api/store/get-store-profile.ts","../../src/api/reviews/get-reviews.ts"],"sourcesContent":["export const API_BASE_URL = 'https://app.ecwid.com/api/v3/';\nexport const API_TIMEOUT = 10000;\n","import { API_BASE_URL } from '@/api/config/constants';\nimport { ERROR_MESSAGES } from '@/client/constants';\nimport { getStoreId } from '@/storefront';\nimport { ApiConfig } from '@/types';\n\nlet apiConfig: Required<ApiConfig> | undefined;\n\n/**\n * Get the API configuration.\n *\n * @example\n * ```typescript\n * import { getApiConfig, ApiConfig } from '@lightspeed/ecom-headless';\n *\n * const config: ApiConfig = getApiConfig();\n * ```\n */\nexport const getApiConfig = (): Required<ApiConfig> => {\n if (apiConfig === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_NOT_INITIALIZED);\n }\n\n return apiConfig;\n};\n\n/**\n * Initialize the Storefront API client.\n *\n * @example\n * ```typescript\n * import { initStorefrontApi } from '@lightspeed/ecom-headless';\n *\n * await initStorefrontApi({\n * publicToken: 'YOUR_PUBLIC_TOKEN',\n * storeId: 'YOUR_STORE_ID'\n * });\n * ```\n *\n * @remarks\n * - This method must be called before using any other API methods.\n * - If storeId is not provided, it will be auto-detected. If detection fails, an error will be thrown.\n */\nexport const initStorefrontApi = async (config: ApiConfig): Promise<void> => {\n if (config.publicToken === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_PUBLIC_TOKEN_REQUIRED);\n }\n\n const storeId = config.storeId ?? await getStoreId();\n\n if (storeId === undefined) {\n throw new Error(ERROR_MESSAGES.CONFIG_STORE_ID_NOT_FOUND);\n }\n\n apiConfig = {\n baseURL: config.baseURL ?? API_BASE_URL,\n publicToken: config.publicToken,\n storeId,\n } satisfies Required<ApiConfig>;\n};\n","export class TimeoutError extends Error {\n constructor(url?: string, method?: string, timeout?: number) {\n super(\n `Request timeout${timeout ? ` after ${timeout}ms` : ''}${url ? ` for ${method} ${url}` : ''}`,\n );\n this.name = 'TimeoutError';\n }\n}\n\nexport function createTimeoutError(url?: string, method?: string, timeout?: number): TimeoutError {\n return new TimeoutError(url, method, timeout);\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { isObject } from '@/client/utils';\nimport { BaseHeaders, RequestConfig, RequestData } from '@/types';\n\nexport function isFetchAvailable(): boolean {\n return typeof globalThis.fetch === 'function';\n}\n\nexport function buildRequestHeaders(\n publicToken: string,\n config: RequestConfig = {},\n): Record<string, string> & BaseHeaders {\n return {\n 'Authorization': `Bearer ${publicToken}`,\n 'X-Lightspeed-Request-Origin': 'ecom-headless',\n 'redirect': 'follow',\n ...config.headers,\n };\n}\n\nexport function prepareRequestBody(\n method: string,\n data: RequestData,\n): BodyInit | undefined {\n if (method === 'GET' || data === undefined) {\n return undefined;\n }\n\n if (typeof data === 'string') {\n return data;\n }\n\n if (isObject(data)) {\n return JSON.stringify(data);\n }\n\n return undefined;\n}\n","import { ResponseType } from '@/types';\n\nexport async function parseResponseData(\n response: Response,\n responseType?: ResponseType,\n): Promise<ReturnType<typeof response.json> | ReturnType<typeof response.blob> | Response> {\n switch (responseType) {\n case 'json':\n return response.json();\n case 'blob':\n return response.blob();\n default:\n try {\n return await response.json();\n } catch {\n return response;\n }\n }\n}\n","interface TimeoutController {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n}\n\nexport function createTimeoutController(timeout: number): {\n controller?: AbortController;\n timer?: ReturnType<typeof setTimeout>;\n} {\n if (typeof AbortController === 'undefined') {\n return {};\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => {\n controller.abort();\n }, timeout);\n\n return { controller, timer };\n}\n\nexport function clearTimeoutController(timeoutController: TimeoutController): void {\n if (timeoutController.timer !== undefined) {\n clearTimeout(timeoutController.timer);\n }\n}\n","import { getApiConfig } from '@/api';\nimport { QueryParams } from '@/types';\n\nfunction processQueryParam(\n key: string,\n value: QueryParams[string],\n): string | undefined {\n if (value === undefined) {\n return;\n }\n\n return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`;\n}\n\nfunction createUrl(path: string): string {\n if (path.startsWith('http://') || path.startsWith('https://')) {\n return path;\n }\n\n const { baseURL } = getApiConfig();\n const normalizedBase = baseURL.endsWith('/') ? baseURL : baseURL + '/';\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n\n return normalizedBase + normalizedPath;\n}\n\nexport function buildUrlWithParams(path: string, params?: QueryParams): string {\n const url = createUrl(path);\n\n if (params === undefined) {\n return url;\n }\n\n const queryParams = Object\n .entries(params)\n .map(([key, value]) => processQueryParam(key, value))\n .filter((param): param is string => param !== undefined);\n\n if (queryParams.length > 0) {\n return `${url}?${queryParams.join('&')}`;\n }\n\n return url;\n}\n","import { getApiConfig } from '@/api/config';\nimport { API_TIMEOUT } from '@/api/config/constants';\nimport {\n buildRequestHeaders,\n buildUrlWithParams,\n clearTimeoutController,\n createTimeoutController,\n createTimeoutError,\n isAbortError,\n parseResponseData,\n prepareRequestBody,\n} from '@/client/utils';\nimport { HttpClient, RequestConfig, RequestData, HttpResponse } from '@/types';\n\nexport function createClient(): HttpClient {\n const { publicToken } = getApiConfig();\n\n async function request<T = unknown>(\n method: string,\n path: string,\n config?: RequestConfig,\n requestData?: RequestData,\n ): Promise<HttpResponse<T>> {\n const timeout = config?.timeout ?? API_TIMEOUT;\n const timeoutController = createTimeoutController(timeout);\n\n try {\n const headers = buildRequestHeaders(publicToken, config);\n const finalUrl = buildUrlWithParams(path, config?.params);\n\n const response = await fetch(finalUrl, {\n method,\n headers,\n body: prepareRequestBody(method, requestData),\n signal: timeoutController.controller?.signal,\n });\n\n const parsedResponseData = await parseResponseData(response, config?.responseType);\n\n return Object.assign(response, {\n data: parsedResponseData,\n }) satisfies HttpResponse<T>;\n } catch (error) {\n if (isAbortError(error)) {\n throw createTimeoutError(path, method, timeout);\n }\n\n throw error;\n } finally {\n clearTimeoutController(timeoutController);\n }\n }\n\n return {\n get: <T>(url: string, config?: RequestConfig) => request<T>('GET', url, config),\n post: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('POST', url, config, data),\n put: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PUT', url, config, data),\n patch: <T>(url: string, data?: RequestData, config?: RequestConfig) => request<T>('PATCH', url, config, data),\n delete: <T>(url: string, config?: RequestConfig) => request<T>('DELETE', url, config),\n };\n}\n","import { ERROR_MESSAGES } from '@/client/constants';\nimport { createClient } from '@/client/create-client';\nimport { isFetchAvailable } from '@/client/utils';\nimport { HttpClient } from '@/types';\n\nlet client: HttpClient | undefined;\n\n/**\n * Get the singleton instance of the API client.\n * @returns The HTTP client instance\n * @throws {Error} If the fetch API is not available or client creation fails\n */\nexport function getApiClient(): HttpClient {\n if (client !== undefined) {\n return client;\n }\n\n if (!isFetchAvailable()) {\n throw new Error(ERROR_MESSAGES.FETCH_API_NOT_AVAILABLE);\n }\n\n client = createClient();\n\n return client;\n}\n\n/**\n * Reset the singleton API client instance.\n * Useful for testing or when configuration changes require a fresh client.\n */\nexport function resetApiClient(): void {\n client = undefined;\n}\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesParams, SearchCategoriesResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories in the store based on provided parameters.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategories, SearchCategoriesResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesResponse = await searchCategories();\n * ```\n */\nexport const searchCategories = async (\n params?: SearchCategoriesParams,\n): Promise<SearchCategoriesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesParams> = {\n params,\n };\n\n const url = `${storeId}/categories`;\n const response = await apiClient.get<SearchCategoriesResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchCategoriesByPathParams, SearchCategoriesByPathResponse, RequestConfig } from '@/types';\n\n/**\n * Search categories by path using a delimiter-separated path string.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/categories/search-categories-by-path | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchCategoriesByPath, SearchCategoriesByPathResponse } from '@lightspeed/ecom-headless';\n *\n * const categories: SearchCategoriesByPathResponse = await searchCategoriesByPath({\n * path: \"Electronics/Phones/Smartphones\",\n * delimiter: \"/\"\n * });\n * ```\n */\nexport const searchCategoriesByPath = async (\n params: SearchCategoriesByPathParams,\n): Promise<SearchCategoriesByPathResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchCategoriesByPathParams> = {\n params,\n };\n\n const url = `${storeId}/categoriesByPath`;\n const response = await apiClient.get<SearchCategoriesByPathResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductsParams, SearchProductsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for products in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-products | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProducts, SearchProductsResponse } from '@lightspeed/ecom-headless';\n *\n * const products: SearchProductsResponse = await searchProducts({ keyword: 'laptop' });\n * ```\n */\nexport const searchProducts = async (\n params?: SearchProductsParams,\n): Promise<SearchProductsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductsParams> = {\n params,\n };\n\n const url = `${storeId}/products`;\n const response = await apiClient.get<SearchProductsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductParams, GetProductResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/get-product | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProduct, GetProductResponse } from '@lightspeed/ecom-headless';\n *\n * const product: GetProductResponse = await getProduct({ productId: 123 });\n * ```\n */\nexport const getProduct = async (\n params: GetProductParams,\n): Promise<GetProductResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<GetProductParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}`;\n const response = await apiClient.get<GetProductResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { DownloadProductFileParams, DownloadProductFileResponse, RequestConfig } from '@/types';\n\n/**\n * Download a product file from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-files/download-product-file | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { downloadProductFile, DownloadProductFileResponse } from '@lightspeed/ecom-headless';\n *\n * const file: DownloadProductFileResponse = await downloadProductFile({ productId: 123, fileId: 456 });\n * ```\n */\nexport const downloadProductFile = async (\n params: DownloadProductFileParams,\n): Promise<DownloadProductFileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, fileId } = params;\n const options: RequestConfig<DownloadProductFileParams> = {\n responseType: 'blob',\n };\n\n const url = `${storeId}/products/${productId}/files/${fileId}`;\n const response = await apiClient.get<DownloadProductFileResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductVariationsParams, SearchProductVariationsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product variations in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/search-product-variations | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductVariations, SearchProductVariationsResponse } from '@lightspeed/ecom-headless';\n *\n * const variations: SearchProductVariationsResponse = await searchProductVariations({ productId: 123 });\n * ```\n */\nexport const searchProductVariations = async (\n params: SearchProductVariationsParams,\n): Promise<SearchProductVariationsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId } = params;\n const options: RequestConfig<SearchProductVariationsParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations`;\n const response = await apiClient.get<SearchProductVariationsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductVariationParams, GetProductVariationResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product variation from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-variations/get-product-variation | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductVariation, GetProductVariationResponse } from '@lightspeed/ecom-headless';\n *\n * const variation: GetProductVariationResponse = await getProductVariation({\n * productId: 123,\n * combinationId: 456\n * });\n * ```\n */\nexport const getProductVariation = async (\n params: GetProductVariationParams,\n): Promise<GetProductVariationResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const { productId, combinationId } = params;\n const options: RequestConfig<GetProductVariationParams> = {\n params,\n };\n\n const url = `${storeId}/products/${productId}/combinations/${combinationId}`;\n const response = await apiClient.get<GetProductVariationResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductTypesResponse } from '@/types';\n\n/**\n * Search for product types in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/search-product-types | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductTypes, SearchProductTypesResponse } from '@lightspeed/ecom-headless';\n *\n * const productTypes: SearchProductTypesResponse = await searchProductTypes();\n * ```\n */\nexport const searchProductTypes = async (): Promise<SearchProductTypesResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n\n const url = `${storeId}/classes`;\n const response = await apiClient.get<SearchProductTypesResponse>(url);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetProductTypeParams, GetProductTypeResponse, RequestConfig } from '@/types';\n\n/**\n * Get a product type from a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/product-types-and-attributes/get-product-type | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getProductType, GetProductTypeResponse } from '@lightspeed/ecom-headless';\n *\n * const productType: GetProductTypeResponse = await getProductType({ classId: 0 });\n * ```\n */\nexport const getProductType = async (\n params: GetProductTypeParams,\n): Promise<GetProductTypeResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetProductTypeParams> = {\n params,\n };\n\n const url = `${storeId}/classes/${params.classId}`;\n const response = await apiClient.get<GetProductTypeResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { SearchProductBrandsParams, SearchProductBrandsResponse, RequestConfig } from '@/types';\n\n/**\n * Search for product brands in a store.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/products/search-product-brands | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { searchProductBrands, SearchProductBrandsResponse } from '@lightspeed/ecom-headless';\n *\n * const brands: SearchProductBrandsResponse = await searchProductBrands({ limit: 10 });\n * ```\n */\nexport const searchProductBrands = async (\n params?: SearchProductBrandsParams,\n): Promise<SearchProductBrandsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<SearchProductBrandsParams> = {\n params,\n };\n\n const url = `${storeId}/brands`;\n const response = await apiClient.get<SearchProductBrandsResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetStoreProfileParams, GetStoreProfileResponse, RequestConfig } from '@/types';\n\n/**\n * Get basic information about an Ecwid store: settings, store location, email, etc.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/store-profile/get-store-profile | Ecwid API Documentation}\n *\n * @example\n * ```typescript\n * import { getStoreProfile, GetStoreProfileResponse } from '@lightspeed/ecom-headless';\n *\n * const profile: GetStoreProfileResponse = await getStoreProfile();\n * ```\n */\nexport const getStoreProfile = async (\n params?: GetStoreProfileParams,\n): Promise<GetStoreProfileResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetStoreProfileParams> = {\n params,\n };\n\n const url = `${storeId}/profile`;\n const response = await apiClient.get<GetStoreProfileResponse>(url, options);\n return response.data;\n};\n","import { getApiConfig } from '@/api/config';\nimport { getApiClient } from '@/client';\nimport { GetReviewsParams, GetReviewsResponse, RequestConfig } from '@/types';\n\n/**\n * Get product reviews from a store.\n * Returns published reviews when accessed with a public token.\n *\n * @see {@link https://docs.ecwid.com/api-reference/rest-api/reviews/get-reviews | Ecwid API Documentation}\n *\n * @param params - Query parameters with optional offset and limit for pagination\n * @returns Promise resolving to GetReviewsResponse containing paginated reviews\n * @throws Error if API client is not initialized or request fails\n *\n * @example\n * ```typescript\n * import { getReviews } from '@lightspeed/ecom-headless';\n *\n * const response = await getReviews({ limit: 3 });\n * response.items.forEach(review => {\n * console.log(`${review.rating}⭐ - ${review.review}`);\n * });\n * ```\n */\nexport const getReviews = async (\n params?: GetReviewsParams,\n): Promise<GetReviewsResponse> => {\n const apiClient = getApiClient();\n const { storeId } = getApiConfig();\n const options: RequestConfig<GetReviewsParams> = {\n params,\n };\n\n const url = `${storeId}/reviews`;\n const response = await apiClient.get<GetReviewsResponse>(url, options);\n return response.data;\n};\n"],"names":["API_BASE_URL","API_TIMEOUT","apiConfig","getApiConfig","ERROR_MESSAGES","initStorefrontApi","config","storeId","getStoreId","TimeoutError","url","method","timeout","createTimeoutError","isAbortError","error","isObject","value","isFetchAvailable","buildRequestHeaders","publicToken","prepareRequestBody","data","parseResponseData","response","responseType","createTimeoutController","controller","timer","clearTimeoutController","timeoutController","processQueryParam","key","createUrl","path","baseURL","normalizedBase","normalizedPath","buildUrlWithParams","params","queryParams","param","createClient","request","requestData","headers","finalUrl","parsedResponseData","client","getApiClient","searchCategories","apiClient","options","searchCategoriesByPath","searchProducts","getProduct","productId","downloadProductFile","fileId","searchProductVariations","getProductVariation","combinationId","searchProductTypes","getProductType","searchProductBrands","getStoreProfile","getReviews"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";const api_index=require("./api/index.cjs"),storefront_index=require("./storefront/index.cjs"),getStoreId=require("./shared/ecom-headless.CiGkSfL9.cjs"),CustomerCookieConsentValues={UNDEFINED:"UNDEFINED",ACCEPTED:"ACCEPTED",DECLINED:"DECLINED",ANALYTICS_ONLY:"ANALYTICS_ONLY",PERSONALIZATION_ONLY:"PERSONALIZATION_ONLY"},EcwidWidgetValues={MINICART:"Minicart",SEARCH_PANEL:"SearchPanel",PRODUCT_BROWSER:"ProductBrowser",CATEGORIES:"Categories",PRODUCT:"Product"},JsApiPageValues={ACCOUNT_REGISTRATION:"ACCOUNT_REGISTRATION",ACCOUNT_RESET_PASSWORD:"ACCOUNT_RESET_PASSWORD",ACCOUNT_REVIEWS:"ACCOUNT_REVIEWS",ACCOUNT_ROOT:"ACCOUNT_ROOT",ACCOUNT_SUBSCRIPTION:"ACCOUNT_SUBSCRIPTION",CART:"CART",CATEGORY:"CATEGORY",CHECKOUT_ADDRESS:"CHECKOUT_ADDRESS",CHECKOUT_DELIVERY:"CHECKOUT_DELIVERY",CHECKOUT_ORDER_CONFIRMATION:"ORDER_CONFIRMATION",CHECKOUT_ORDER_FAILURE:"ORDER_FAILURE",CHECKOUT_PAYMENT:"CHECKOUT_PAYMENT_DETAILS",CHECKOUT_RESULT:"CHECKOUT_RESULT",CHECKOUT_TAX_INFORMATION:"CHECKOUT_TAX_INFORMATION",DOWNLOAD_ERROR:"DOWNLOAD_ERROR",FAVORITES:"FAVORITES",MISSING:"MISSING",PRODUCT:"PRODUCT",SEARCH:"SEARCH",SIGN_IN:"SIGN_IN",SUBSCRIBE:"SUBSCRIBE_PAGE",TERMS:"TERMS",UNSUBSCRIBE:"UNSUBSCRIBE_PAGE"},LegalPageTypeValues={ABOUT:"about",PRIVACY_POLICY:"privacy-policy",RETURNS:"returns",SHIPPING_PAYMENT:"shipping-payment",TERMS:"terms"},SortByValues={RELEVANCE:"RELEVANCE",DEFINED_BY_STORE_OWNER:"DEFINED_BY_STORE_OWNER",ADDED_TIME_DESC:"ADDED_TIME_DESC",ADDED_TIME_ASC:"ADDED_TIME_ASC",NAME_ASC:"NAME_ASC",NAME_DESC:"NAME_DESC",PRICE_ASC:"PRICE_ASC",PRICE_DESC:"PRICE_DESC",UPDATED_TIME_ASC:"UPDATED_TIME_ASC",UPDATED_TIME_DESC:"UPDATED_TIME_DESC"},VisitorLocationSourceValues={SHIPPING_ADDRESS:"SHIPPING_ADDRESS",BILLING_ADDRESS:"BILLING_ADDRESS",IP_ADDRESS:"IP_ADDRESS"};exports.downloadProductFile=api_index.downloadProductFile;exports.getApiConfig=api_index.getApiConfig;exports.getProduct=api_index.getProduct;exports.getProductType=api_index.getProductType;exports.getProductVariation=api_index.getProductVariation;exports.getStoreProfile=api_index.getStoreProfile;exports.initStorefrontApi=api_index.initStorefrontApi;exports.searchCategories=api_index.searchCategories;exports.searchCategoriesByPath=api_index.searchCategoriesByPath;exports.searchProductBrands=api_index.searchProductBrands;exports.searchProductTypes=api_index.searchProductTypes;exports.searchProductVariations=api_index.searchProductVariations;exports.searchProducts=api_index.searchProducts;exports.Cart=storefront_index.Cart;exports.Customer=storefront_index.Customer;exports.OnCartChanged=storefront_index.OnCartChanged;exports.OnConsentChanged=storefront_index.OnConsentChanged;exports.OnPageLoad=storefront_index.OnPageLoad;exports.OnPageLoaded=storefront_index.OnPageLoaded;exports.OnPageSwitch=storefront_index.OnPageSwitch;exports.OnSetProfile=storefront_index.OnSetProfile;exports.formatCurrency=storefront_index.formatCurrency;exports.getAppPublicConfig=storefront_index.getAppPublicConfig;exports.getAppPublicToken=storefront_index.getAppPublicToken;exports.getInitializedWidgets=storefront_index.getInitializedWidgets;exports.getStorefrontLang=storefront_index.getStorefrontLang;exports.getTrackingConsent=storefront_index.getTrackingConsent;exports.getVisitorLocation=storefront_index.getVisitorLocation;exports.isStorefrontV3=storefront_index.isStorefrontV3;exports.openPage=storefront_index.openPage;exports.setTrackingConsent=storefront_index.setTrackingConsent;exports.getOwnerId=getStoreId.getOwnerId;exports.getStoreId=getStoreId.getStoreId;exports.CustomerCookieConsentValues=CustomerCookieConsentValues;exports.EcwidWidgetValues=EcwidWidgetValues;exports.JsApiPageValues=JsApiPageValues;exports.LegalPageTypeValues=LegalPageTypeValues;exports.SortByValues=SortByValues;exports.VisitorLocationSourceValues=VisitorLocationSourceValues;
1
+ "use strict";const api_index=require("./api/index.cjs"),storefront_index=require("./storefront/index.cjs"),getStoreId=require("./shared/ecom-headless.CiGkSfL9.cjs"),CustomerCookieConsentValues={UNDEFINED:"UNDEFINED",ACCEPTED:"ACCEPTED",DECLINED:"DECLINED",ANALYTICS_ONLY:"ANALYTICS_ONLY",PERSONALIZATION_ONLY:"PERSONALIZATION_ONLY"},EcwidWidgetValues={MINICART:"Minicart",SEARCH_PANEL:"SearchPanel",PRODUCT_BROWSER:"ProductBrowser",CATEGORIES:"Categories",PRODUCT:"Product"},JsApiPageValues={ACCOUNT_REGISTRATION:"ACCOUNT_REGISTRATION",ACCOUNT_RESET_PASSWORD:"ACCOUNT_RESET_PASSWORD",ACCOUNT_REVIEWS:"ACCOUNT_REVIEWS",ACCOUNT_ROOT:"ACCOUNT_ROOT",ACCOUNT_SUBSCRIPTION:"ACCOUNT_SUBSCRIPTION",CART:"CART",CATEGORY:"CATEGORY",CHECKOUT_ADDRESS:"CHECKOUT_ADDRESS",CHECKOUT_DELIVERY:"CHECKOUT_DELIVERY",CHECKOUT_ORDER_CONFIRMATION:"ORDER_CONFIRMATION",CHECKOUT_ORDER_FAILURE:"ORDER_FAILURE",CHECKOUT_PAYMENT:"CHECKOUT_PAYMENT_DETAILS",CHECKOUT_RESULT:"CHECKOUT_RESULT",CHECKOUT_TAX_INFORMATION:"CHECKOUT_TAX_INFORMATION",DOWNLOAD_ERROR:"DOWNLOAD_ERROR",FAVORITES:"FAVORITES",MISSING:"MISSING",PRODUCT:"PRODUCT",SEARCH:"SEARCH",SIGN_IN:"SIGN_IN",SUBSCRIBE:"SUBSCRIBE_PAGE",TERMS:"TERMS",UNSUBSCRIBE:"UNSUBSCRIBE_PAGE"},LegalPageTypeValues={ABOUT:"about",PRIVACY_POLICY:"privacy-policy",RETURNS:"returns",SHIPPING_PAYMENT:"shipping-payment",TERMS:"terms"},SortByValues={RELEVANCE:"RELEVANCE",DEFINED_BY_STORE_OWNER:"DEFINED_BY_STORE_OWNER",ADDED_TIME_DESC:"ADDED_TIME_DESC",ADDED_TIME_ASC:"ADDED_TIME_ASC",NAME_ASC:"NAME_ASC",NAME_DESC:"NAME_DESC",PRICE_ASC:"PRICE_ASC",PRICE_DESC:"PRICE_DESC",UPDATED_TIME_ASC:"UPDATED_TIME_ASC",UPDATED_TIME_DESC:"UPDATED_TIME_DESC"},VisitorLocationSourceValues={SHIPPING_ADDRESS:"SHIPPING_ADDRESS",BILLING_ADDRESS:"BILLING_ADDRESS",IP_ADDRESS:"IP_ADDRESS"};exports.downloadProductFile=api_index.downloadProductFile;exports.getApiConfig=api_index.getApiConfig;exports.getProduct=api_index.getProduct;exports.getProductType=api_index.getProductType;exports.getProductVariation=api_index.getProductVariation;exports.getReviews=api_index.getReviews;exports.getStoreProfile=api_index.getStoreProfile;exports.initStorefrontApi=api_index.initStorefrontApi;exports.searchCategories=api_index.searchCategories;exports.searchCategoriesByPath=api_index.searchCategoriesByPath;exports.searchProductBrands=api_index.searchProductBrands;exports.searchProductTypes=api_index.searchProductTypes;exports.searchProductVariations=api_index.searchProductVariations;exports.searchProducts=api_index.searchProducts;exports.Cart=storefront_index.Cart;exports.Customer=storefront_index.Customer;exports.OnCartChanged=storefront_index.OnCartChanged;exports.OnConsentChanged=storefront_index.OnConsentChanged;exports.OnPageLoad=storefront_index.OnPageLoad;exports.OnPageLoaded=storefront_index.OnPageLoaded;exports.OnPageSwitch=storefront_index.OnPageSwitch;exports.OnSetProfile=storefront_index.OnSetProfile;exports.formatCurrency=storefront_index.formatCurrency;exports.getAppPublicConfig=storefront_index.getAppPublicConfig;exports.getAppPublicToken=storefront_index.getAppPublicToken;exports.getInitializedWidgets=storefront_index.getInitializedWidgets;exports.getStorefrontLang=storefront_index.getStorefrontLang;exports.getTrackingConsent=storefront_index.getTrackingConsent;exports.getVisitorLocation=storefront_index.getVisitorLocation;exports.isStorefrontV3=storefront_index.isStorefrontV3;exports.openPage=storefront_index.openPage;exports.setTrackingConsent=storefront_index.setTrackingConsent;exports.getOwnerId=getStoreId.getOwnerId;exports.getStoreId=getStoreId.getStoreId;exports.CustomerCookieConsentValues=CustomerCookieConsentValues;exports.EcwidWidgetValues=EcwidWidgetValues;exports.JsApiPageValues=JsApiPageValues;exports.LegalPageTypeValues=LegalPageTypeValues;exports.SortByValues=SortByValues;exports.VisitorLocationSourceValues=VisitorLocationSourceValues;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts } from './api/index.cjs';
1
+ export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getReviews, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts } from './api/index.cjs';
2
2
  export { q as Cart, r as Customer, E as EcwidWidgetValues, O as OnCartChanged, k as OnConsentChanged, l as OnPageLoad, m as OnPageLoaded, n as OnPageSwitch, p as OnSetProfile, f as formatCurrency, g as getAppPublicConfig, a as getAppPublicToken, b as getInitializedWidgets, c as getOwnerId, d as getStoreId, e as getStorefrontLang, h as getTrackingConsent, i as getVisitorLocation, j as isStorefrontV3, o as openPage, s as setTrackingConsent } from './shared/ecom-headless.n2b3FM61.cjs';
3
3
  export { a as AddProductData, b as AddProductParameter, A as AddProductRecurringChargeSettings, v as BaseJsApiPage, B as BillingPerson, d as CartAddProductCallback, i as CartApi, g as CartCalculateTotalCallback, f as CartClearCallback, p as CartData, n as CartDominatingColor, c as CartGetCallback, h as CartGoToCheckoutCallback, m as CartImageBorderInfo, o as CartItem, k as CartMediaItem, j as CartProduct, e as CartRemoveProductCallback, l as CartVideoInfo, s as CustomerApi, C as CustomerCookieConsentValues, t as CustomerData, q as CustomerGetCallback, r as CustomerSignOutCallback, E as EcwidApiPromise, w as JsApiFilterParams, u as JsApiPage, J as JsApiPageValues, L as LegalPageTypeValues, O as Order, R as RecurringChargeSettings, S as ShippingAddress, T as TrackingConsent, x as VisitorLocation, V as VisitorLocationSourceValues } from './shared/ecom-headless.BTRqua6N.cjs';
4
- export { aW as AbandonedSales, a4 as Account, a6 as AccountBilling, ac as AddressFormat, am as AdminMessages, b5 as ApiConfig, av as ApplePay, aw as ApplePayOptions, a2 as AsQueryParams, aN as BlackoutDates, aM as BusinessHours, a7 as BusinessRegistrationID, aJ as CarrierMethod, aL as CarrierSettings, C as Category, a as CategoryImage, b as CategoryImageAlt, a8 as Company, b1 as CustomTipSettings, al as CustomerMarketingMessages, an as CustomerOrderMessages, a9 as DesignSettings, Q as DownloadProductFileParams, O as DownloadProductFileResponse, aa as FbMessengerSettings, ab as FeatureToggle, az as FilterSection, aB as FlatRate, ad as FormatsAndUnits, ae as GeneralInfo, aQ as GeoPolygon, N as GetProductParams, M as GetProductResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, V as GetProductVariationParams, U as GetProductVariationResponse, b4 as GetStoreProfileParams, b3 as GetStoreProfileResponse, af as GiftCardProduct, ag as GiftCardSettings, aI as HandlingFee, as as InstructionsForCustomer, ah as Languages, ai as LegalPage, aj as LegalPagesSettings, a5 as LimitsAndRestrictions, L as LowestPriceSettings, ao as MailNotifications, ak as MailNotificationsSettings, ap as MailchimpSettings, aq as OrderInvoiceSettings, a0 as PaginatedResponse, ax as Payment, au as PaymentOption, ar as PaymentShippingSettings, at as PaymentSurcharge, ay as PhoneNotifications, aK as PostageDimensions, I as Product, h as ProductAttribute, g as ProductAttributeType, P as ProductAttributeVisibility, r as ProductBorderInfo, i as ProductBrand, j as ProductCategory, l as ProductCombination, k as ProductCombinationOption, m as ProductCompositeComponent, n as ProductDimensions, q as ProductDominatingColor, o as ProductFavorites, p as ProductFile, aA as ProductFiltersSettings, s as ProductGalleryImage, t as ProductImage, u as ProductImageAlt, x as ProductMedia, v as ProductMediaImage, w as ProductMediaVideo, z as ProductOption, y as ProductOptionChoice, E as ProductRecurringChargeSettings, A as ProductRelatedCategory, B as ProductRelatedProducts, D as ProductShipping, F as ProductSubscriptionSettings, G as ProductTax, H as ProductType, a1 as QueryParams, aF as Rate, aE as RateCondition, aD as Rates, aC as RatesTable, aY as RecurringSubscriptionsSettings, aG as RegistrationAnswers, aH as SalePrice, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, d as SearchCategoriesParams, c as SearchCategoriesResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, X as SearchProductTypesResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, K as SearchProductsParams, J as SearchProductsResponse, aP as Shipping, aO as ShippingOption, aS as SocialLink, aT as SocialLinksSettings, S as SortByValues, aU as StarterSite, aV as StoreProfile, aX as StoreSettings, aR as StoreZone, aZ as SupportedPaymentMethodsStatuses, a$ as Tax, a_ as TaxRule, b0 as TaxSettings, b2 as TipsSettings, a3 as Translations, W as WholesalePrice } from './shared/ecom-headless.DTL4WyVk.cjs';
4
+ export { aY as AbandonedSales, a6 as Account, a8 as AccountBilling, ae as AddressFormat, ao as AdminMessages, b7 as ApiConfig, ax as ApplePay, ay as ApplePayOptions, a4 as AsQueryParams, aP as BlackoutDates, aO as BusinessHours, a9 as BusinessRegistrationID, aL as CarrierMethod, aN as CarrierSettings, C as Category, a as CategoryImage, b as CategoryImageAlt, aa as Company, b3 as CustomTipSettings, an as CustomerMarketingMessages, ap as CustomerOrderMessages, ab as DesignSettings, Q as DownloadProductFileParams, O as DownloadProductFileResponse, ac as FbMessengerSettings, ad as FeatureToggle, aB as FilterSection, aD as FlatRate, af as FormatsAndUnits, ag as GeneralInfo, aS as GeoPolygon, N as GetProductParams, M as GetProductResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, V as GetProductVariationParams, U as GetProductVariationResponse, a1 as GetReviewsParams, a0 as GetReviewsResponse, b6 as GetStoreProfileParams, b5 as GetStoreProfileResponse, ah as GiftCardProduct, ai as GiftCardSettings, aK as HandlingFee, au as InstructionsForCustomer, aj as Languages, ak as LegalPage, al as LegalPagesSettings, a7 as LimitsAndRestrictions, L as LowestPriceSettings, aq as MailNotifications, am as MailNotificationsSettings, ar as MailchimpSettings, as as OrderInvoiceSettings, a2 as PaginatedResponse, az as Payment, aw as PaymentOption, at as PaymentShippingSettings, av as PaymentSurcharge, aA as PhoneNotifications, aM as PostageDimensions, I as Product, h as ProductAttribute, g as ProductAttributeType, P as ProductAttributeVisibility, r as ProductBorderInfo, i as ProductBrand, j as ProductCategory, l as ProductCombination, k as ProductCombinationOption, m as ProductCompositeComponent, n as ProductDimensions, q as ProductDominatingColor, o as ProductFavorites, p as ProductFile, aC as ProductFiltersSettings, s as ProductGalleryImage, t as ProductImage, u as ProductImageAlt, x as ProductMedia, v as ProductMediaImage, w as ProductMediaVideo, z as ProductOption, y as ProductOptionChoice, E as ProductRecurringChargeSettings, A as ProductRelatedCategory, B as ProductRelatedProducts, D as ProductShipping, F as ProductSubscriptionSettings, G as ProductTax, H as ProductType, a3 as QueryParams, aH as Rate, aG as RateCondition, aF as Rates, aE as RatesTable, a_ as RecurringSubscriptionsSettings, aI as RegistrationAnswers, aJ as SalePrice, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, d as SearchCategoriesParams, c as SearchCategoriesResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, X as SearchProductTypesResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, K as SearchProductsParams, J as SearchProductsResponse, aR as Shipping, aQ as ShippingOption, aU as SocialLink, aV as SocialLinksSettings, S as SortByValues, aW as StarterSite, aX as StoreProfile, aZ as StoreSettings, aT as StoreZone, a$ as SupportedPaymentMethodsStatuses, b1 as Tax, b0 as TaxRule, b2 as TaxSettings, b4 as TipsSettings, a5 as Translations, W as WholesalePrice } from './shared/ecom-headless.Bkwk1yoz.cjs';
5
5
  import 'buffer';
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts } from './api/index.mjs';
1
+ export { downloadProductFile, getApiConfig, getProduct, getProductType, getProductVariation, getReviews, getStoreProfile, initStorefrontApi, searchCategories, searchCategoriesByPath, searchProductBrands, searchProductTypes, searchProductVariations, searchProducts } from './api/index.mjs';
2
2
  export { q as Cart, r as Customer, E as EcwidWidgetValues, O as OnCartChanged, k as OnConsentChanged, l as OnPageLoad, m as OnPageLoaded, n as OnPageSwitch, p as OnSetProfile, f as formatCurrency, g as getAppPublicConfig, a as getAppPublicToken, b as getInitializedWidgets, c as getOwnerId, d as getStoreId, e as getStorefrontLang, h as getTrackingConsent, i as getVisitorLocation, j as isStorefrontV3, o as openPage, s as setTrackingConsent } from './shared/ecom-headless.fwEDqznC.mjs';
3
3
  export { a as AddProductData, b as AddProductParameter, A as AddProductRecurringChargeSettings, v as BaseJsApiPage, B as BillingPerson, d as CartAddProductCallback, i as CartApi, g as CartCalculateTotalCallback, f as CartClearCallback, p as CartData, n as CartDominatingColor, c as CartGetCallback, h as CartGoToCheckoutCallback, m as CartImageBorderInfo, o as CartItem, k as CartMediaItem, j as CartProduct, e as CartRemoveProductCallback, l as CartVideoInfo, s as CustomerApi, C as CustomerCookieConsentValues, t as CustomerData, q as CustomerGetCallback, r as CustomerSignOutCallback, E as EcwidApiPromise, w as JsApiFilterParams, u as JsApiPage, J as JsApiPageValues, L as LegalPageTypeValues, O as Order, R as RecurringChargeSettings, S as ShippingAddress, T as TrackingConsent, x as VisitorLocation, V as VisitorLocationSourceValues } from './shared/ecom-headless.BTRqua6N.mjs';
4
- export { aW as AbandonedSales, a4 as Account, a6 as AccountBilling, ac as AddressFormat, am as AdminMessages, b5 as ApiConfig, av as ApplePay, aw as ApplePayOptions, a2 as AsQueryParams, aN as BlackoutDates, aM as BusinessHours, a7 as BusinessRegistrationID, aJ as CarrierMethod, aL as CarrierSettings, C as Category, a as CategoryImage, b as CategoryImageAlt, a8 as Company, b1 as CustomTipSettings, al as CustomerMarketingMessages, an as CustomerOrderMessages, a9 as DesignSettings, Q as DownloadProductFileParams, O as DownloadProductFileResponse, aa as FbMessengerSettings, ab as FeatureToggle, az as FilterSection, aB as FlatRate, ad as FormatsAndUnits, ae as GeneralInfo, aQ as GeoPolygon, N as GetProductParams, M as GetProductResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, V as GetProductVariationParams, U as GetProductVariationResponse, b4 as GetStoreProfileParams, b3 as GetStoreProfileResponse, af as GiftCardProduct, ag as GiftCardSettings, aI as HandlingFee, as as InstructionsForCustomer, ah as Languages, ai as LegalPage, aj as LegalPagesSettings, a5 as LimitsAndRestrictions, L as LowestPriceSettings, ao as MailNotifications, ak as MailNotificationsSettings, ap as MailchimpSettings, aq as OrderInvoiceSettings, a0 as PaginatedResponse, ax as Payment, au as PaymentOption, ar as PaymentShippingSettings, at as PaymentSurcharge, ay as PhoneNotifications, aK as PostageDimensions, I as Product, h as ProductAttribute, g as ProductAttributeType, P as ProductAttributeVisibility, r as ProductBorderInfo, i as ProductBrand, j as ProductCategory, l as ProductCombination, k as ProductCombinationOption, m as ProductCompositeComponent, n as ProductDimensions, q as ProductDominatingColor, o as ProductFavorites, p as ProductFile, aA as ProductFiltersSettings, s as ProductGalleryImage, t as ProductImage, u as ProductImageAlt, x as ProductMedia, v as ProductMediaImage, w as ProductMediaVideo, z as ProductOption, y as ProductOptionChoice, E as ProductRecurringChargeSettings, A as ProductRelatedCategory, B as ProductRelatedProducts, D as ProductShipping, F as ProductSubscriptionSettings, G as ProductTax, H as ProductType, a1 as QueryParams, aF as Rate, aE as RateCondition, aD as Rates, aC as RatesTable, aY as RecurringSubscriptionsSettings, aG as RegistrationAnswers, aH as SalePrice, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, d as SearchCategoriesParams, c as SearchCategoriesResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, X as SearchProductTypesResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, K as SearchProductsParams, J as SearchProductsResponse, aP as Shipping, aO as ShippingOption, aS as SocialLink, aT as SocialLinksSettings, S as SortByValues, aU as StarterSite, aV as StoreProfile, aX as StoreSettings, aR as StoreZone, aZ as SupportedPaymentMethodsStatuses, a$ as Tax, a_ as TaxRule, b0 as TaxSettings, b2 as TipsSettings, a3 as Translations, W as WholesalePrice } from './shared/ecom-headless.DTL4WyVk.mjs';
4
+ export { aY as AbandonedSales, a6 as Account, a8 as AccountBilling, ae as AddressFormat, ao as AdminMessages, b7 as ApiConfig, ax as ApplePay, ay as ApplePayOptions, a4 as AsQueryParams, aP as BlackoutDates, aO as BusinessHours, a9 as BusinessRegistrationID, aL as CarrierMethod, aN as CarrierSettings, C as Category, a as CategoryImage, b as CategoryImageAlt, aa as Company, b3 as CustomTipSettings, an as CustomerMarketingMessages, ap as CustomerOrderMessages, ab as DesignSettings, Q as DownloadProductFileParams, O as DownloadProductFileResponse, ac as FbMessengerSettings, ad as FeatureToggle, aB as FilterSection, aD as FlatRate, af as FormatsAndUnits, ag as GeneralInfo, aS as GeoPolygon, N as GetProductParams, M as GetProductResponse, Z as GetProductTypeParams, Y as GetProductTypeResponse, V as GetProductVariationParams, U as GetProductVariationResponse, a1 as GetReviewsParams, a0 as GetReviewsResponse, b6 as GetStoreProfileParams, b5 as GetStoreProfileResponse, ah as GiftCardProduct, ai as GiftCardSettings, aK as HandlingFee, au as InstructionsForCustomer, aj as Languages, ak as LegalPage, al as LegalPagesSettings, a7 as LimitsAndRestrictions, L as LowestPriceSettings, aq as MailNotifications, am as MailNotificationsSettings, ar as MailchimpSettings, as as OrderInvoiceSettings, a2 as PaginatedResponse, az as Payment, aw as PaymentOption, at as PaymentShippingSettings, av as PaymentSurcharge, aA as PhoneNotifications, aM as PostageDimensions, I as Product, h as ProductAttribute, g as ProductAttributeType, P as ProductAttributeVisibility, r as ProductBorderInfo, i as ProductBrand, j as ProductCategory, l as ProductCombination, k as ProductCombinationOption, m as ProductCompositeComponent, n as ProductDimensions, q as ProductDominatingColor, o as ProductFavorites, p as ProductFile, aC as ProductFiltersSettings, s as ProductGalleryImage, t as ProductImage, u as ProductImageAlt, x as ProductMedia, v as ProductMediaImage, w as ProductMediaVideo, z as ProductOption, y as ProductOptionChoice, E as ProductRecurringChargeSettings, A as ProductRelatedCategory, B as ProductRelatedProducts, D as ProductShipping, F as ProductSubscriptionSettings, G as ProductTax, H as ProductType, a3 as QueryParams, aH as Rate, aG as RateCondition, aF as Rates, aE as RatesTable, a_ as RecurringSubscriptionsSettings, aI as RegistrationAnswers, aJ as SalePrice, f as SearchCategoriesByPathParams, e as SearchCategoriesByPathResponse, d as SearchCategoriesParams, c as SearchCategoriesResponse, $ as SearchProductBrandsParams, _ as SearchProductBrandsResponse, X as SearchProductTypesResponse, T as SearchProductVariationsParams, R as SearchProductVariationsResponse, K as SearchProductsParams, J as SearchProductsResponse, aR as Shipping, aQ as ShippingOption, aU as SocialLink, aV as SocialLinksSettings, S as SortByValues, aW as StarterSite, aX as StoreProfile, aZ as StoreSettings, aT as StoreZone, a$ as SupportedPaymentMethodsStatuses, b1 as Tax, b0 as TaxRule, b2 as TaxSettings, b4 as TipsSettings, a5 as Translations, W as WholesalePrice } from './shared/ecom-headless.Bkwk1yoz.mjs';
5
5
  import 'buffer';