tanya-chatbot 0.6.6 → 0.6.8
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanya-chatbot.cjs.js","sources":["../src/inject-style.ts","../src/store/reducers/storeReducer.ts","../src/store/reducers/productReducer.ts","../src/store/index.ts","../src/components/provider/reduxProvider.tsx","../src/components/lib/utils.ts","../src/components/ui/popover.tsx","../src/config/api.ts","../src/components/utils/fetchTokenBmGrant.ts","../src/components/utils/fetchExistingRegisterCustomerToken.ts","../src/sfcc-apis/session/index.ts","../src/components/utils/index.ts","../src/components/utils/helper.js","../src/components/carousel/ProductCarousel.tsx","../src/components/carousel/ProductDisplay.tsx","../src/components/api/api.ts","../src/config/constant.ts","../src/components/utils/localStorage.ts","../src/components/product/ProductDisplayCard.tsx","../src/components/tanya-widget/tanya-shopping-assistent.tsx","../node_modules/tslib/tslib.es6.mjs","../node_modules/ts-invariant/lib/invariant.js","../node_modules/@apollo/client/version.js","../node_modules/@apollo/client/utilities/globals/maybe.js","../node_modules/@apollo/client/utilities/globals/global.js","../node_modules/@apollo/client/utilities/common/makeUniqueId.js","../node_modules/@apollo/client/utilities/common/stringifyForDisplay.js","../node_modules/@apollo/client/utilities/globals/invariantWrappers.js","../node_modules/@apollo/client/utilities/graphql/getFromAST.js","../node_modules/@wry/context/lib/slot.js","../node_modules/@wry/context/lib/index.js","../node_modules/optimism/lib/context.js","../node_modules/zen-observable-ts/module.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/@apollo/client/utilities/observables/Observable.js","../node_modules/@apollo/client/link/utils/validateOperation.js","../node_modules/@apollo/client/link/utils/createOperation.js","../node_modules/@apollo/client/link/utils/transformOperation.js","../node_modules/@apollo/client/utilities/deprecation/index.js","../node_modules/@apollo/client/link/core/ApolloLink.js","../node_modules/@apollo/client/link/context/index.js","../src/components/utils/generateToken.js","../src/components/graphQL/apollo-client.ts","../src/components/tanya-widget/TanyaWrapper.tsx"],"sourcesContent":["import css from \"./index.css?inline\";\nimport { useEffect } from \"react\";\n\nexport function TanyaChatbotProvider() {\n useEffect(() => {\n if (typeof document !== \"undefined\") {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }\n }, []);\n\n return null;\n}\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { Store } from \"../../components/graphQL/queries/types\";\n\ninterface StoreState {\n store?: Store;\n}\n\nconst initialState: StoreState = {\n store: {\n storeCode: \"\",\n storeName: \"\",\n storeDescription: \"\",\n activeCatalogId: 0,\n isDefault: false,\n logoDarkBg: \"\",\n logoLightBg: \"\",\n logoTransparent: \"\",\n catalogs: [],\n themeColor: \"\",\n themeContrastColor: \"\",\n tanyaThemeColor: \"\",\n tanyaThemeColorLight: \"\",\n favicon: \"\",\n websiteTitle: \"\",\n flowId: \"\",\n aliasId: \"\",\n searchConfigs: {\n endpoint: \"\",\n accessKey: \"\",\n secretKey: \"\",\n },\n homePageCategories: [],\n carouselImages: {\n web: [],\n mobile: [],\n },\n otherImages: {\n web: [],\n mobile: [],\n },\n },\n};\n\nexport const storeSlice = createSlice({\n name: \"store\",\n initialState,\n reducers: {\n setStore: (state, action: PayloadAction<Store>) => {\n state.store = action.payload;\n },\n },\n});\n\nexport const { setStore } = storeSlice.actions;\n\nexport default storeSlice.reducer;\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { SearchProduct } from \"../../components/graphQL/queries/types\";\n\ninterface ProductState {\n product: SearchProduct | null;\n}\n\nconst initialState: ProductState = {\n product: null,\n};\n\nexport const productSlice = createSlice({\n name: \"product\",\n initialState,\n reducers: {\n setProduct: (state, action: PayloadAction<SearchProduct | null>) => {\n state.product = action.payload;\n },\n },\n});\n\nexport const { setProduct } = productSlice.actions;\n\nexport default productSlice.reducer;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport storeReducer from \"./reducers/storeReducer\";\nimport productReducer from \"./reducers/productReducer\";\n\nconst store = configureStore({\n reducer: {\n store: storeReducer,\n product: productReducer,\n },\n});\n\nexport default store;\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n","import { Provider } from \"react-redux\";\nimport store from \"../../store\";\n\nconst ReduxProvider = ({ children }: { children: React.ReactNode }) => {\n return <Provider store={store}>{children}</Provider>;\n};\n\nexport default ReduxProvider;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const notifySFCC = ( basketId?: string) => {\n const event = new CustomEvent(\"reactCartUpdated\", {\n detail: {\n cartUpdated: true,\n basketId,\n },\n });\n window.dispatchEvent(event);\n};\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\n\r\nimport { cn } from \"../lib/utils\";\r\n\r\nfunction Popover({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\r\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\r\n}\r\n\r\nfunction PopoverTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\r\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\r\n}\r\n\r\nfunction PopoverContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\r\n return (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n data-slot=\"popover-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction PopoverAnchor({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\r\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\r\n}\r\n\r\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\r\n","function stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n// Helper function to convert ArrayBuffer to hex string\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n const byteArray = new Uint8Array(buffer);\n const hexCodes = [...byteArray].map((value) => {\n const hexCode = value.toString(16);\n const paddedHexCode = hexCode.padStart(2, \"0\");\n return paddedHexCode;\n });\n return hexCodes.join(\"\");\n}\n\n// SHA256 hash using Web Crypto API\nasync function sha256(data: string): Promise<ArrayBuffer> {\n const encoder = new TextEncoder();\n return await crypto.subtle.digest(\"SHA-256\", encoder.encode(data));\n}\n\n// HMAC-SHA256 using Web Crypto API\nasync function hmacSha256(\n key: ArrayBuffer | Uint8Array,\n data: string\n): Promise<ArrayBuffer> {\n const cryptoKey = await crypto.subtle.importKey(\n \"raw\",\n key,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n\n const encoder = new TextEncoder();\n return await crypto.subtle.sign(\"HMAC\", cryptoKey, encoder.encode(data));\n}\n\n// Get signing key\nasync function getSignatureKey(\n key: string,\n dateStamp: string,\n regionName: string,\n serviceName: string\n): Promise<ArrayBuffer> {\n const kDate = await hmacSha256(stringToUint8Array(\"AWS4\" + key), dateStamp);\n const kRegion = await hmacSha256(kDate, regionName);\n const kService = await hmacSha256(kRegion, serviceName);\n const kSigning = await hmacSha256(kService, \"aws4_request\");\n return kSigning;\n}\n\nexport async function createSignedHeaders(\n url: string,\n method: string,\n payload: string,\n accessKeyId: string,\n secretAccessKey: string,\n region: string,\n service: string\n): Promise<Record<string, string>> {\n const urlObj = new URL(url);\n const host = urlObj.hostname;\n const pathname = urlObj.pathname;\n const search = urlObj.search;\n\n const now = new Date();\n const amzDate = now.toISOString().replace(/[:\\-]|\\.\\d{3}/g, \"\");\n const dateStamp = amzDate.substring(0, 8);\n const payloadHash = arrayBufferToHex(await sha256(payload));\n const contentLength = new TextEncoder().encode(payload).length.toString();\n\n const canonicalHeaders =\n `content-length:${contentLength}\\n` +\n `content-type:application/json\\n` +\n `host:${host}\\n` +\n `x-amz-content-sha256:${payloadHash}\\n` +\n `x-amz-date:${amzDate}\\n`;\n\n const signedHeaders =\n \"content-length;content-type;host;x-amz-content-sha256;x-amz-date\";\n\n const canonicalRequest = [\n method,\n pathname,\n search.slice(1),\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join(\"\\n\");\n\n const algorithm = \"AWS4-HMAC-SHA256\";\n const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n const stringToSign = [\n algorithm,\n amzDate,\n credentialScope,\n arrayBufferToHex(await sha256(canonicalRequest)),\n ].join(\"\\n\");\n\n const signingKey = await getSignatureKey(\n secretAccessKey,\n dateStamp,\n region,\n service\n );\n\n const signature = arrayBufferToHex(\n await hmacSha256(signingKey, stringToSign)\n );\n\n const authorizationHeader = `${algorithm} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n return {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": contentLength,\n \"X-Amz-Content-Sha256\": payloadHash,\n \"X-Amz-Date\": amzDate,\n Authorization: authorizationHeader,\n };\n}\n\nexport const apiConfig = () => {\n const aiConversationUrl = `https://mdv3qwfi2j.execute-api.us-east-1.amazonaws.com/dev/api/bedrock/invoke/stream`;\n const xAPIKey = \"BJBtjpPkqGatuoa3qJqdR8aHXSsHkgvGaootbubi\";\n // const serverUrl = \"https://tanya-sfcc-server.vercel.app/\";\n const serverUrl = import.meta.env.VITE_SERVER_BASE_URL;\n // const serverUrl = \"\";\n const basePath = import.meta.env.VITE_SCAPI_ENVIRONMENT ? \"sc-api\" : \"api\";\n\n return { aiConversationUrl, xAPIKey, serverUrl, basePath };\n};\n","import axios from \"axios\";\r\nimport { getHost, getSiteId } from \".\";\r\n\r\n// email:password:client need to be pass in encrypt form in the auth of fetchTokenBmGrant\r\n\r\n// email:password:client is different from user to user\r\nexport const fetchTokenBmGrant = async () => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-bm-grant?baseUrl=${getHost()}&siteId=${getSiteId()}`\r\n );\r\n if (response.status === 200 && response.data.access_token) {\r\n return response.data.access_token;\r\n } else {\r\n console.error(\"Failed to fetch token:\", response.data);\r\n return null;\r\n }\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error fetching token:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","import axios from \"axios\";\r\nimport { clientId, getHost, getSiteId, organisationId, shortCode } from \".\";\r\n\r\ninterface Customer {\r\n access_token: string;\r\n customerId: string;\r\n}\r\n\r\n// function getCookie(name: string): string | null {\r\n// const value = `; ${document.cookie}`;\r\n// console.log(\"parts\", value,value.includes(\"dwsid\"));\r\n// const parts = value.split(`; ${name}=`);\r\n// if (parts.length === 2) return parts.pop()?.split(\";\").shift() || null;\r\n// return null;\r\n// }\r\n\r\nexport const fetchExistingRegisterCustomerToken = async ({\r\n access_token,\r\n customerId,\r\n}: Customer) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-register-customer/${customerId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n // console.log(\"customer token res fe\", response.data)\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n\r\nexport const fetchExistingGuestCustomerToken = async (\r\n access_token: string,\r\n) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const dwsid = JSON.parse(sessionStorage.getItem(\"customerData\")|| \"{}\").dwsid // fetch cookie\r\n\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-guest-customer?dwsid=${dwsid}&baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","import axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../../components/utils\";\n\nexport async function authData() {\n if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n return \"\";\n }\n const siteId = getSiteId();\n const accessKey = \"access_token\" + \"_\" + siteId;\n const expiresInKey = \"expires_in\" + \"_\" + siteId;\n const expires_in = localStorage.getItem(expiresInKey);\n const access_token = localStorage.getItem(accessKey);\n console.log(access_token);\n const isGuest =\n JSON.parse(sessionStorage.getItem(\"customerData\") || \"{}\")?.isGuest || true;\n // if (\n // expires_in &&\n // access_token &&\n // new Date().getTime() < parseInt(expires_in)\n // // && (isGuest === localStorage.getItem(\"isGuest\") || \"true\")\n // ) {\n console.log(\"access token found in local storage\");\n return { access_token, expires_in };\n // }\n // const { serverUrl } = apiConfig();\n // const dwsid = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).dwsid;\n\n // const customerMail = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).usrRef;\n\n // try {\n // const endpoint = isGuest ? \"unregister-auth\" : \"register-auth\";\n // const res = await axios.get(\n // `${serverUrl}sc-api/${endpoint}?dwsid=${dwsid}&email=${customerMail}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}&siteId=${getSiteId()}&token=true`,\n // {\n // withCredentials: true,\n // }\n // );\n // // localStorage.setItem(accessKey, res.data.access_token);\n // // localStorage.setItem(\n // // expiresInKey,\n // // String(new Date().getTime() + res.data.expires_in * 1000)\n // // );\n // // localStorage.setItem(\"isGuest\", isGuest ? \"true\" : \"false\");\n // return res.data;\n // } catch (err) {\n // console.log(err);\n // }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport { fetchTokenBmGrant } from \"./fetchTokenBmGrant\";\nimport { fetchExistingGuestCustomerToken } from \"./fetchExistingRegisterCustomerToken\";\nimport { authData } from \"../../sfcc-apis/session\";\n\nexport const getHost = () => {\n const host = sessionStorage.getItem(\"Host\");\n return host;\n};\n\nexport const getSiteId = () => {\n const siteId = sessionStorage.getItem(\"SiteId\");\n return siteId;\n};\n\nexport const clientId = () => {\n const clientId = sessionStorage.getItem(\"pubCfg\");\n return clientId;\n};\n\nexport const shortCode = () => {\n const shortCode = sessionStorage.getItem(\"envRef\");\n return shortCode;\n};\n\nexport const organisationId = () => {\n const orgRef = sessionStorage.getItem(\"orgRef\");\n return orgRef;\n};\n\nexport const getSearchResults = async (query: string) => {\n console.log('fetching results');\n const { serverUrl, basePath } = apiConfig();\n let token = \"\";\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n const res = await authData();\n console.log(\"the token from getSearchResults\", res);\n token = res.access_token;\n }\n\n try {\n const host = getHost();\n const response = await axios.get(\n `${serverUrl}${basePath}/search-sfcc?baseUrl=${host}&query=${query}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n return response.data.hits;\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n throw error;\n }\n};\n\nexport const getProductById = async (id: number | string) => {\n if (!id) throw new Error(\"Product ID is required\");\n const { serverUrl, basePath } = apiConfig();\n const host = getHost();\n console.log(\"calling access\");\n const { access_token } = await authData();\n const response = await axios.get(\n `${serverUrl}${basePath}/product-sfcc/${id}?baseUrl=${host}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${access_token}`,\n },\n }\n );\n\n return response.data;\n};\n\nexport const getInterestApi = async (customerId: any) => {\n if (!customerId) throw new Error(\"customerId is required\");\n const access_token = await fetchTokenBmGrant();\n\n const { customer_token } = await fetchExistingGuestCustomerToken(\n access_token\n );\n const { serverUrl, basePath } = apiConfig();\n const data = await authData();\n const token = data.access_token;\n\n const response = await axios.get(\n `${serverUrl}${basePath}/get-interest?baseUrl=${getHost()}&customerId=${customerId}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: import.meta.env.VITE_SCAPI_ENVIRONMENT\n ? `Bearer ${token}`\n : `${customer_token}`,\n },\n }\n );\n\n return response.data;\n};\n","import CryptoJS from \"crypto-js\";\nconst SECRET_KEY = \"admin_one\";\nexport const displayData = (data) => {\n if (typeof data === \"string\") {\n return String(data);\n }\n return String(data[\"en-US\"] || data);\n};\nexport const imageUrlArray = (data) => {\n if (data?.image) {\n return [data.image];\n }\n else if (\"variants\" in data) {\n return data.variants[0].images;\n }\n return data.masterVariant.images.map((image) => image.url);\n};\nexport const currencyFormatter = (data, currencyCode) => {\n return data.toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: currencyCode || \"USD\",\n });\n};\nexport const priceFormatter = (data) => {\n if (\"variants\" in data) {\n return {\n centAmount: data.variants[0]?.prices.EUR.max,\n currencyCode: \"DOL\",\n };\n }\n return {\n centAmount: data.masterVariant?.prices[0].value.centAmount,\n currencyCode: data.masterVariant?.prices[0].value.currencyCode,\n };\n};\nexport const encryptData = (data) => {\n return CryptoJS.AES.encrypt(JSON.stringify(data), SECRET_KEY).toString();\n};\nexport const decryptData = (cipherText) => {\n const bytes = CryptoJS.AES.decrypt(cipherText, SECRET_KEY);\n return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n};\nexport const initialCapital = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nexport const laterDate = (day) => {\n const fiveDaysLater = new Date();\n fiveDaysLater.setDate(fiveDaysLater.getDate() + day);\n const formattedDate = fiveDaysLater.toLocaleDateString(\"en-US\", {\n day: \"numeric\",\n month: \"long\",\n });\n return formattedDate;\n};\nexport const stringReducer = (text, length) => {\n return text.length < length ? text : text.slice(0, length) + \"...\";\n};\nexport const formatStringToHtml = (str) => {\n return str\n .split(\"\\\\n\")\n .map((line, index) => {\n const numberedPoint = line.match(/^(\\d+)\\.\\s(.+)/);\n if (numberedPoint) {\n return `<p key=${index} class=\"mb-2\"><strong>${numberedPoint[1]}.</strong> ${numberedPoint[2]}</p>`;\n }\n return line.trim() ? `<p key=${index} class=\"mb-2\">${line}</p>` : \"<br/>\";\n })\n .join(\"\");\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useDispatch } from \"react-redux\";\nimport type { SearchProduct } from \"../graphQL/queries/types\";\nimport {\n stringReducer,\n priceFormatter,\n currencyFormatter,\n displayData,\n imageUrlArray,\n} from \"../utils/helper\";\nimport { useEffect, useState } from \"react\";\nimport { setProduct } from \"../../store/reducers/productReducer\";\nimport { getProductById } from \"../utils\";\n\nfunction useResponsiveProductsPerPage() {\n const getProductsPerPage = () => {\n if (window.innerWidth < 425) return 1; // Below Mobile-L\n if (window.innerWidth < 768) return 2; // Mobile-L to md\n return 4; // md and above\n };\n\n const [productsPerPage, setProductsPerPage] = useState(getProductsPerPage);\n\n useEffect(() => {\n const handleResize = () => setProductsPerPage(getProductsPerPage());\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return productsPerPage;\n}\n\nconst ProductCarousel = ({\n product,\n}: // storeDetails,\n{\n product: SearchProduct[];\n storeDetails: any;\n}) => {\n const dispatch = useDispatch();\n // const selectedProduct = useSelector((state: any) => state.product.product);\n const productsPerPage = useResponsiveProductsPerPage();\n const [startIndex, setStartIndex] = useState(0);\n\n const nextProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex + productsPerPage >= product.length\n ? 0\n : prevIndex + productsPerPage\n );\n };\n\n const prevProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex - productsPerPage < 0\n ? product.length - (product.length % productsPerPage || productsPerPage)\n : prevIndex - productsPerPage\n );\n };\n\n const getProduct = async (id: number | string) => {\n const product = await getProductById(id);\n dispatch(setProduct(product));\n };\n\n return (\n <div className=\"mt-2 overflow-x-hidden\">\n <div className=\"flex items-center justify-center gap-4 relative\">\n {product?.length > productsPerPage && (\n <button\n onClick={prevProducts}\n className=\"absolute z-50 left-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-left\" width=\"25\" /> */}\n <\n </button>\n )}\n\n <div className=\"flex gap-5 justify-center flex-1 overflow-hidden\">\n {product\n .slice(startIndex, startIndex + productsPerPage)\n .map((prod) => (\n <div\n key={prod.productId}\n className=\"flex-shrink-0 flex flex-col w-[150px] h-[200px] p-2 items-center justify-between cursor-pointer bg-[#FFFFFF] rounded-[10px] shadow-[0px_2px_2px_0px_#9292BC40]\"\n onClick={() => {\n getProduct(prod.product_id ?? prod.productId);\n }}\n >\n {/* Image */}\n <div className=\"w-full p-2 flex items-center justify-center bg-white\">\n <img\n src={\n imageUrlArray(prod)[0]?.link ||\n imageUrlArray(prod)[0] || // fallback if it's a string\n \"https://via.placeholder.com/120\"\n }\n alt={prod?.productName ? prod.productName : \"Product\"}\n className=\"w-28 h-28 rounded-[10px] transition-transform duration-300 hover:scale-125 object-cover\"\n />\n </div>\n\n {/* Price & Name */}\n <div\n className=\"text-white w-full p-2 text-[12px] text-center h-[60px]\"\n // style={{ background: storeDetails.tanyaThemeColor }}\n >\n <div className=\"relative inline-block group\">\n <div className=\"w-full line-clamp-1 overflow-hidden text-ellipsis text-[#000000] font-medium font-nunitoSans\">\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n\n {/* Tooltip */}\n <div\n className=\"absolute left-0 top-full mt-1 w-max max-w-[200px] p-2 bg-white shadow-lg text-black text-xs rounded opacity-0 transition-opacity duration-300 group-hover:opacity-100 z-50 pointer-events-auto\"\n style={{\n position: \"absolute\",\n top: \"-100%\",\n left: \"0\",\n marginBottom: \"5px\",\n zIndex: 50,\n }}\n >\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n </div>\n <div className=\" flex text-center items-center gap-2 text-[14px] text-[#14121F] font-bold font-nunitoSans text-base mb-1\">\n <p>\n {currencyFormatter(\n prod?.price\n ? Number(prod?.price)\n : priceFormatter(prod).centAmount || 0,\n priceFormatter(prod)?.currencyCode\n )}\n </p>\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans truncate\">\n ${Number(prod?.price).toFixed(2) ?? 0 + 5}\n </p>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {product?.length > productsPerPage && (\n <button\n onClick={nextProducts}\n className=\"absolute z-50 right-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-right\" width=\"25\" /> */}\n >\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default ProductCarousel;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ProductCarousel from \"./ProductCarousel\";\nimport { initialCapital } from \"../utils/helper\";\n\nconst ProductDisplay = ({ chat, storeDetails }: any) => {\n return (\n <div className=\"bg-[#FFFFFF] px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\">\n {chat.map((products: any, i: number) => (\n <div\n key={i}\n className=\"mb-4 p-3 rounded-xl\"\n style={{ \n background: \"linear-gradient(109.52deg, #F0EEF5 36.91%, #F4F3EE 100.34%\",\n // backgroundColor: storeDetails.tanyaThemeColorLight \n }} // slightly darker grey // light grey section bg\n >\n <div\n className=\"font-nunitoSans font-bold text-sm text-[#494949] p-2 w-fit rounded-[20px]\"\n // style={{\n // color: storeDetails?.tanyaThemeContrastColor,\n // border: `1px solid ${storeDetails.tanyaThemeColor}`,\n // backgroundColor: storeDetails.tanyaThemeColor,\n // }}\n >\n {initialCapital(products.keyword) || \"No keyword\"}\n </div>\n\n <ProductCarousel\n product={products.items}\n storeDetails={storeDetails}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default ProductDisplay;\n","import { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getHost,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../utils\";\nimport { getAccessToken } from \"../utils/getAccessToken\";\nimport axios from \"axios\";\n\nexport const fetchStoreConfig = async (storeCode: string) => {\n try {\n const token = await getAccessToken();\n const { serverUrl } = apiConfig();\n const response = await axios.get(\n `${serverUrl}api/logo?storeCode=${storeCode}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return response.data;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n return error;\n // console.error(\"Error fetching logo details:\", error);\n }\n};\n\ninterface Product {\n product_id: string;\n quantity: number;\n}\n\nexport const createBasket = async (customer_token: string, data?: any) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/create?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n data,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n window.postMessage(\n {\n type: \"WIDGET_CREATED_BASKET\",\n basketId: response.data?.basket_id || response.data?.basketId,\n },\n \"*\"\n );\n\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error creating basket:\", error.response || error.message);\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const addProductToBasket = async (\n basketId: string,\n products: Product[],\n customer_token: string\n) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/add-product/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n products,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n\n if (response.status === 200 && response.data) {\n return response.data;\n }\n return null;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\n \"Error adding products to basket:\",\n error.response || error.message\n );\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const fetchBasket = async ({\n basketId,\n customer_token,\n}: {\n basketId: string;\n customer_token: string;\n}) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.get(\n `${URL}${basePath}/basket/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n return { status: response.status, data: response.data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return { status: error.response?.status, data: null };\n } else {\n return { status: null, data: null };\n }\n }\n};\n","export const BASKET_ID_KEY = \"sfcc_basket_id\";\r\nexport const TOKEN_KEY = \"sfcc_customer_token\";\r\nexport const TOKEN_EXPIRY_KEY = \"sfcc_token_expiry\";\r\n\r\nexport const EXPIRY_TIME = 5 * 60 * 1000; // 5 minutes in milliseconds\r\nexport const BUFFER_TIME = 10 * 1000; // 10 seconds buffer before expiry\r\nexport const VERSION = \"1.0.0\";","import {\r\n BASKET_ID_KEY,\r\n EXPIRY_TIME,\r\n TOKEN_EXPIRY_KEY,\r\n TOKEN_KEY,\r\n} from \"../../config/constant\";\r\n\r\nexport const getStoredBasketId = (): string | null => {\r\n try {\r\n return localStorage.getItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading basket ID from storage:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredBasketId = (basketId: string | null): void => {\r\n try {\r\n if (basketId) {\r\n localStorage.setItem(BASKET_ID_KEY, basketId);\r\n } else {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error saving basket ID to storage:\", error);\r\n }\r\n};\r\n\r\nexport const clearBasketStorage = (): void => {\r\n try {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error clearing basket storage:\", error);\r\n }\r\n};\r\n\r\nexport const getStoredToken = (): string | null => {\r\n try {\r\n return localStorage.getItem(TOKEN_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading token:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredToken = (token: string | null): void => {\r\n try {\r\n if (token) {\r\n localStorage.setItem(TOKEN_KEY, token);\r\n const expiryTime = Date.now() + EXPIRY_TIME;\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, expiryTime.toString());\r\n } else {\r\n localStorage.removeItem(TOKEN_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error storing token:\", error);\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useEffect, useState } from \"react\"; // Add useMemo here when uncomment the color, size, width code\r\n// import { useEffect, useMemo, useState } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { setProduct } from \"../../store/reducers/productReducer\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\n// import { fetchTokenSFCC } from \"../utils/fetchTokenSFCC\";\r\nimport {\r\n getStoredBasketId,\r\n // getStoredToken,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { toast } from \"react-toastify\";\r\nimport { BASKET_ID_KEY, TOKEN_EXPIRY_KEY } from \"../../config/constant\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport {\r\n // fetchExistingRegisterCustomerToken,\r\n fetchExistingGuestCustomerToken,\r\n} from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { authData } from \"../../sfcc-apis/session\";\r\n\r\nconst ANIMATION_DURATION = 300; // ms\r\n\r\nconst ProductDisplayCard = ({ addToCartPwa }) => {\r\n const dispatch = useDispatch();\r\n const product = useSelector((state: any) => state.product.product);\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const [show, setShow] = useState(!!product);\r\n\r\n useEffect(() => {\r\n setShow(!!product);\r\n }, [product]);\r\n\r\n if (!product) return null;\r\n\r\n // const { sizeAttr, colorAttr, widthAttr } = attributes;\r\n\r\n const addToCart = async () => {\r\n try {\r\n // Check if product and variants exist\r\n\r\n if (\r\n !product?.variants?.[0]?.product_id &&\r\n !(product.type.item || product.type.bundle) &&\r\n !product?.variants?.[0]?.productId\r\n ) {\r\n toast.error(\"Variants not available\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ];\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n let customer_token = \"\";\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n const authDetails = await authData();\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n } else {\r\n console.log(\"token from bm grant\");\r\n const access_token = await fetchTokenBmGrant();\r\n const customerTokenData = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n customer_token = customerTokenData.customer_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n\r\n // const response = await addToCartPwa(\r\n // productData\r\n // // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n\r\n const basketResponse = await createBasket(customer_token, data);\r\n if (!basketResponse?.basket_id && !basketResponse?.basketId) {\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // else if (basketResponse?.basketId) {\r\n // toast.success(`Added to cart`, {\r\n // position: \"bottom-right\",\r\n // autoClose: 3000,\r\n // hideProgressBar: false,\r\n // closeOnClick: true,\r\n // pauseOnHover: true,\r\n // draggable: true,\r\n // });\r\n // }\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n console.log(\"adding product to basket\");\r\n const response = await addProductToBasket(\r\n basketResponse?.basket_id || basketResponse?.basketId,\r\n productData,\r\n customer_token\r\n );\r\n // const response = await addToCartPwa(\r\n // productData,\r\n // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n console.log(\"object added to basket\");\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n return;\r\n }\r\n\r\n const response = await addProductToBasket(\r\n basketId,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n };\r\n\r\n // Function to generate and redirect to the product detail page\r\n const viewMore = () => {\r\n if (!product) return;\r\n const path = window.location.origin +\"/product/\" +product.id;\r\n console.log(\"path\", path);\r\n window.location.href = path; //redirect to sfcc product details url\r\n };\r\n console.log(product, \"the prod\");\r\n return (\r\n <>\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(() => dispatch(setProduct(null)), ANIMATION_DURATION);\r\n }}\r\n />\r\n <div\r\n className={`\r\n flex flex-col gap-2 items-center h-[90vh] absolute right-0 bottom-0 z-50 w-full md:w-1/2 md:h-[100vh] lg:w-1/2 lg:h-[100vh] shadow-xl p-2 border-l-2 bg-white border-gray-200 overflow-y-scroll\r\n transition-all duration-300\r\n ${\r\n show\r\n ? \"translate-y-0 md:translate-y-0 md:translate-x-0 opacity-100\"\r\n : \"translate-y-full md:translate-y-0 md:translate-x-full opacity-0 pointer-events-none\"\r\n }\r\n `}\r\n style={{ willChange: \"transform, opacity\" }}\r\n // Prevent click inside card from closing\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* name and close button */}\r\n <div className=\"mt-3 flex flex-row justify-between w-full \">\r\n <div>\r\n <p className=\"text-[#000000] font-bold font-nunitoSans\">\r\n {product.name}\r\n </p>\r\n </div>\r\n <div>\r\n <div\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n >\r\n ✕\r\n </div>\r\n {/* <Icon\r\n icon=\"mdi:close\"\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n /> */}\r\n </div>\r\n </div>\r\n {/* image and variants */}\r\n <div className=\"flex flex-row gap-2 items-center flex-wrap\">\r\n <div className=\"flex flex-row items-center justify-center w-[120px] h-[120px] my-5\">\r\n <img\r\n src={\r\n import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups?.[0]?.images?.[0]?.link\r\n : product.image_groups?.[0]?.images?.[0]?.link ||\r\n \"https://via.placeholder.com/120\"\r\n }\r\n alt={product.name}\r\n className=\"rounded-[10px]\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col items-center gap-2\">\r\n {(import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups\r\n : product.image_groups\r\n )\r\n .slice(1, 2)\r\n .map((group: any) =>\r\n group.images\r\n .slice(1, 2)\r\n .map((image: any) => (\r\n <img\r\n key={image.link}\r\n src={image.link}\r\n alt={product.name}\r\n className=\"rounded-[10px] w-[60px] h-[60px]\"\r\n />\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n {/* price and discount */}\r\n <div className=\"flex flex-row items-center justify-between w-full\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <p className=\"text-[#14121F] font-bold font-nunitoSans\">\r\n {\" \"}\r\n ${product.price.toFixed(2)}\r\n </p>{\" \"}\r\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans\">\r\n {\" \"}\r\n ${(product.price + 5).toFixed(2)}\r\n </p>\r\n </div>\r\n <div>\r\n <p className=\"text-[#EC5050] font-bold font-nunitoSans\">\r\n {product.discount}\r\n </p>\r\n </div>\r\n </div>\r\n {/* horizontal line */}\r\n <div className=\"mt-2 w-full border-t-2 border-gray-200\"></div>\r\n <div className=\"w-full text-left\">\r\n <div className=\"text-[#323135] font-bold font-nunitoSans mt-3 text-[14px]\">\r\n Product Details\r\n </div>\r\n <div\r\n className=\"text-[#68656E] font-normal font-nunitoSans text-xs pl-2 mt-3\"\r\n dangerouslySetInnerHTML={{\r\n __html: product.short_description || product.longDescription,\r\n }}\r\n ></div>\r\n </div>\r\n {/* rating and reviews */}\r\n <div className=\"mt-4 flex flex-col gap-2 w-full p-2\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <div className=\"flex items-center gap-2 text-left font-nunitoSans\">\r\n <div className=\"text-[#323135] font-bold\">\r\n {product?.rating?.rate || 0} /{\" \"}\r\n <span className=\"text-[#68656E]\">5</span>\r\n </div>\r\n <div className=\"text-[#323135] font-semibold text-sm\">\r\n Overall Rating\r\n </div>\r\n <div className=\"text-[#68656E] font-semibold text-sm\">\r\n {product?.rating?.count || 0} ratings\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"mt-2 flex flex-row items-center gap-2\">\r\n {Array.from({ length: 5 }).map((_, index) => (\r\n <Icon\r\n key={index}\r\n icon=\"mdi:star\"\r\n width=\"20\"\r\n height=\"20\"\r\n className={`text-yellow-500 \r\n ${\r\n product?.rating?.rate > index\r\n ? \"text-yellow-500\"\r\n : \"text-gray-300\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"flex flex-col items-center justify-between font-nunitoSans font-semibold w-5/6 text-black gap-2\"\r\n style={{ marginTop: \"40px\" }}\r\n >\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={addToCart}\r\n >\r\n Add to Cart\r\n </button>\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer mb-16\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={viewMore}\r\n >\r\n View more\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ProductDisplayCard;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { Popover, PopoverTrigger } from \"../ui/popover\";\r\nimport { getInterestApi, getProductById, getSearchResults } from \"../utils\";\r\nimport type { SearchProduct } from \"../graphQL/queries/types\";\r\nimport { formatStringToHtml } from \"../utils/helper\";\r\nimport ProductDisplay from \"../carousel/ProductDisplay\";\r\nimport { useSelector } from \"react-redux\";\r\nimport ProductDisplayCard from \"../product/ProductDisplayCard\";\r\nimport { toast } from \"react-toastify\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport { fetchExistingGuestCustomerToken } from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport {\r\n BASKET_ID_KEY,\r\n TOKEN_EXPIRY_KEY,\r\n VERSION,\r\n} from \"../../config/constant\";\r\nimport {\r\n getStoredBasketId,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { authData } from \"../../sfcc-apis/session\";\r\n\r\ntype ProductSnapshot = {\r\n id: string;\r\n name: string;\r\n image: string | null;\r\n price: number | null;\r\n points: number;\r\n quantity: number;\r\n};\r\n\r\nconst TanyaShoppingAssistantStream = ({\r\n tanyaConfig,\r\n basketId,\r\n addToCart,\r\n}: {\r\n tanyaConfig?: any;\r\n basketId?: string;\r\n addToCart?: any;\r\n}) => {\r\n // Shopping options\r\n const shoppingOptions = [\r\n \"Myself\",\r\n \"My Child\",\r\n \"My Grandchild\",\r\n \"Niece/Nephew\",\r\n \"My Friends\",\r\n \"Others\",\r\n ];\r\n\r\n const payloadMapping: Record<string, string> = {\r\n Myself: \"himself/herself\",\r\n \"My Child\": \"his/her child\",\r\n \"My Grandchild\": \"his/her grandchild\",\r\n \"Niece/Nephew\": \"his/her niece/nephew\",\r\n \"My Friends\": \"his/her friends\",\r\n Others: \"others\",\r\n };\r\n const productName = useRef<string | null>(null);\r\n const productId = useRef<number | null>(null);\r\n const productImage = useRef<string | null>(null);\r\n const productPrice = useRef<number | null>(null);\r\n const [authDetails, setAuthDetails] = useState<any>(null);\r\n const lastChat = useRef(null);\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [isAnimating, setIsAnimating] = useState(false);\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [adding, setAdding] = useState<boolean>(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [productLoading, setProductLoading] = useState(false);\r\n const [inputText, setInputText] = useState(\"\");\r\n const [whom, setWhom] = useState(\"\");\r\n const mapSnapshotToProduct = (snap: ProductSnapshot): any => ({\r\n id: snap.id,\r\n title: snap.name,\r\n image: snap.image ?? \"\",\r\n price: snap.price ?? 0,\r\n });\r\n // const dispatch = useDispatch();\r\n\r\n const [chatHistory, setChatHistory] = useState<\r\n {\r\n query: string;\r\n response: string;\r\n potentialQuestions: string;\r\n products?: { keyword: string; items: SearchProduct[] }[];\r\n keywords: string;\r\n noResults?: boolean;\r\n secondaryResponse?: string;\r\n secondaryLoading?: boolean;\r\n productSnapshot?: ProductSnapshot; // NEW\r\n }[]\r\n >([]);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n // const storeCode =\r\n // searchParams.get(\"storeCode\") || localStorage.getItem(\"storeCode\");\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const product = useSelector((s: any) => s.product.product);\r\n\r\n // Runs once on mount\r\n useEffect(() => {\r\n const currentAccessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n const savedChatToken = localStorage.getItem(\r\n `chat-token-${tanyaConfig.siteId}`\r\n );\r\n\r\n if (currentAccessToken && savedChatToken === currentAccessToken) {\r\n // Token matches → restore chat history\r\n const savedHistory = localStorage.getItem(\"chatHistory\");\r\n if (savedHistory) {\r\n setChatHistory(JSON.parse(savedHistory));\r\n }\r\n } else {\r\n // Token missing OR mismatch → reset chat data\r\n localStorage.setItem(\"chatHistory\", JSON.stringify([]));\r\n localStorage.setItem(\r\n `chat-token-${tanyaConfig.siteId}`,\r\n currentAccessToken || \"\"\r\n );\r\n }\r\n }, []);\r\n\r\n // Runs whenever chatHistory updates\r\n useEffect(() => {\r\n localStorage.setItem(\"chatHistory\", JSON.stringify(chatHistory));\r\n\r\n const accessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n if (accessToken) {\r\n localStorage.setItem(`chat-token-${tanyaConfig.siteId}`, accessToken);\r\n }\r\n }, [chatHistory]);\r\n\r\n const openPanel = () => {\r\n setIsVisible(true);\r\n setTimeout(() => setIsAnimating(true), 10); // trigger opening animation\r\n };\r\n\r\n const closePanel = () => {\r\n setIsAnimating(false);\r\n setTimeout(() => setIsVisible(false), 300); // // wait for exit animation\r\n };\r\n\r\n useEffect(() => {\r\n if (isOpen) openPanel();\r\n else closePanel();\r\n }, [isOpen]);\r\n\r\n const handleWhomSelection = (selected: string) => {\r\n setWhom(payloadMapping[selected]);\r\n };\r\n\r\n useEffect(() => {\r\n if (isVisible && scrollRef.current) {\r\n scrollRef.current.scrollTo({\r\n top: scrollRef.current.scrollHeight,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n }, [chatHistory, isVisible]);\r\n\r\n let cachedToken: any = null;\r\n let tokenExpiry: any = null;\r\n\r\n const getJWTToken = async () => {\r\n if (cachedToken && tokenExpiry && Date.now() < tokenExpiry) {\r\n return cachedToken;\r\n }\r\n\r\n try {\r\n const tokenUrl =\r\n \"https://us-east-1lsr29ln3u.auth.us-east-1.amazoncognito.com/oauth2/token\";\r\n\r\n const tokenPayload = new URLSearchParams({\r\n grant_type: \"client_credentials\",\r\n client_id: \"4i8rd70sgt961tc4dhskgf08c\",\r\n client_secret: \"bnsfq1220loh2cn2cm2ttn8fdhdpt0u8m1fgj8vfk2rn61aurjg\",\r\n scope: \"default-m2m-resource-server-8xzfzo/read\",\r\n });\r\n\r\n const tokenResponse = await fetch(tokenUrl, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n body: tokenPayload,\r\n });\r\n\r\n if (!tokenResponse.ok) {\r\n throw new Error(\r\n `Token request failed! status: ${tokenResponse.status}`\r\n );\r\n }\r\n\r\n const tokenData = await tokenResponse.json();\r\n\r\n // Cache the token\r\n cachedToken = tokenData.access_token;\r\n const expiresIn = tokenData.expires_in || 3600; // Default to 1 hour\r\n tokenExpiry = Date.now() + (expiresIn - 60) * 1000; // Refresh 1 minute before expiry\r\n\r\n return cachedToken;\r\n } catch (error) {\r\n console.error(\"Error obtaining JWT token:\", error);\r\n // Clear cache on error\r\n cachedToken = null;\r\n tokenExpiry = null;\r\n return null;\r\n }\r\n };\r\n\r\n const getAuthDetails = async () => {\r\n const data = await authData(); // <- calls your async function\r\n if (data == null) return;\r\n setAuthDetails(data); // <- saves the result in state\r\n };\r\n\r\n useEffect(() => {\r\n if (tanyaConfig?.siteId) {\r\n const { clientID, host, organizationID, shortCode, siteId } = tanyaConfig;\r\n sessionStorage.setItem(\"Host\", host);\r\n sessionStorage.setItem(\"SiteId\", siteId);\r\n sessionStorage.setItem(\"pubCfg\", btoa(clientID));\r\n sessionStorage.setItem(\"envRef\", shortCode);\r\n sessionStorage.setItem(\"orgRef\", organizationID);\r\n }\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n getAuthDetails();\r\n console.log(\"scapi environment v1\");\r\n } else {\r\n console.log(\"ocapi environment\");\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (basketId) {\r\n console.log(\"setting the basket id\", basketId);\r\n setStoredBasketId(basketId);\r\n }\r\n }, [basketId]);\r\n\r\n const getInterests = async () => {\r\n const customer_id = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n ).customerId;\r\n const res = await getInterestApi(customer_id || \"\");\r\n return res.c_interests;\r\n };\r\n\r\n const runSecondaryFlow = async (productTitle: string, points: number) => {\r\n console.log(\"in secondary flow\", VERSION);\r\n const interests = await getInterests();\r\n console.log(interests, \"interests of customer\", VERSION);\r\n if (!interests) return;\r\n try {\r\n // surprise animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1 ? { ...msg, secondaryLoading: true } : msg\r\n )\r\n );\r\n\r\n const accessToken = await getJWTToken();\r\n if (!accessToken) throw new Error(\"Failed to fetch token\");\r\n\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"Q166PR519W\",\r\n flowAliasId: \"HKFUVLWVH2\",\r\n input: {\r\n loyaltyPoints: \"\",\r\n productName: productTitle,\r\n productPoints: String(points || 0),\r\n interests: interests,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n\r\n if (parsedData.index === 0) {\r\n // attach response & stop animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n secondaryResponse: parsedData.data,\r\n secondaryLoading: false,\r\n }\r\n : msg\r\n )\r\n );\r\n }\r\n // ignore 1/2/3\r\n } catch (e) {\r\n // stop animation on parse error too\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? { ...msg, secondaryLoading: false }\r\n : msg\r\n )\r\n );\r\n console.error(\"Secondary flow JSON parse error:\", e);\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(\"Secondary flow error:\", e);\r\n }\r\n };\r\n\r\n const handleSendMessage = async (question?: string) => {\r\n const newQuery = question || inputText.trim();\r\n if (!newQuery) return;\r\n\r\n setIsLoading(true);\r\n setInputText(\"\");\r\n\r\n productName.current = null;\r\n productId.current = null;\r\n productImage.current = null;\r\n productPrice.current = null;\r\n\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: newQuery,\r\n response: \"Thinking for what suits you best...\",\r\n potentialQuestions: \"\",\r\n products: [],\r\n keywords: \"Thinking for best products...\",\r\n },\r\n ]);\r\n\r\n try {\r\n const sanitizedWhom = whom;\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n\r\n // Get JWT access token\r\n const accessToken = await getJWTToken();\r\n if (!accessToken) {\r\n throw new Error(\"Failed to obtain access token\");\r\n }\r\n\r\n // Build the invoke flow URL\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"MMHQKYI1NE\",\r\n flowAliasId: \"SZF9ZK1ATE\",\r\n input: {\r\n userPrompt: newQuery,\r\n whom: sanitizedWhom,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n let keywords = \"\";\r\n\r\n while (true) {\r\n setProductLoading(true);\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n if (parsedData.index == 1) keywords = parsedData.data;\r\n\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n [parsedData.index == 0\r\n ? \"response\"\r\n : parsedData.index == 1\r\n ? \"keywords\"\r\n : parsedData.index == 2\r\n ? \"potentialQuestions\"\r\n : \"end\"]: parsedData.data,\r\n }\r\n : msg\r\n )\r\n );\r\n } catch (error) {\r\n console.error(\"Error parsing JSON:\", error);\r\n }\r\n }\r\n }\r\n }\r\n getKeywords(sanitizeKeywords(keywords));\r\n } catch (error) {\r\n console.error(\"Error sending message to Tanya:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const sanitizeKeywords = (response: string) => {\r\n const keywordMatch = response.match(\r\n /top five relevant product or category names are: (.*)/i\r\n );\r\n const keywordsString = keywordMatch ? keywordMatch[1] : response;\r\n const keywordsArray = keywordsString.split(\", \");\r\n const sanitizedKeywords = keywordsArray.map((keyword) => {\r\n return keyword.replace(/\\s*(Toys|Bags|Miniature|etc\\.*)\\s*/gi, \"\").trim();\r\n });\r\n const uniqueKeywords = [...new Set(sanitizedKeywords)].filter(Boolean);\r\n return uniqueKeywords.join(\",\");\r\n };\r\n\r\n const getKeywords = async (keywords: string[] | string) => {\r\n const keys = typeof keywords === \"string\" ? keywords.split(\",\") : keywords;\r\n\r\n setProductLoading(true);\r\n\r\n try {\r\n // fire all API requests in parallel\r\n const responses = await Promise.all(\r\n keys.map((k) => getSearchResults(k).catch(() => [])) // prevent Promise.all crash\r\n );\r\n\r\n // build product array\r\n const productData = keys\r\n .map((keyword, idx) => ({\r\n keyword,\r\n items: responses[idx] ?? [],\r\n loading: false,\r\n }))\r\n .filter((p) => p.items.length > 0);\r\n\r\n // extract first product for snapshot\r\n const firstProduct = productData[0]?.items?.[0];\r\n if (firstProduct) {\r\n productId.current = firstProduct.product_id;\r\n productName.current = firstProduct.product_name;\r\n productImage.current = firstProduct.image?.link;\r\n const price =\r\n typeof firstProduct.price === \"number\" ? firstProduct.price : null;\r\n productPrice.current = price;\r\n }\r\n\r\n // apply single chatHistory update\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n products: productData,\r\n productSnapshot: firstProduct\r\n ? {\r\n id: productId.current,\r\n name: productName.current,\r\n image: productImage.current,\r\n price: productPrice.current,\r\n points: 0,\r\n quantity: 1,\r\n }\r\n : msg.productSnapshot,\r\n }\r\n : msg\r\n )\r\n );\r\n\r\n // run secondary flow only if user logged in + snapshot ready\r\n if (firstProduct) {\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n if (!customerData?.isGuest) {\r\n console.log(\"running secondary flow\", VERSION);\r\n runSecondaryFlow(productName.current, 0);\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"error in keyword search\", err);\r\n } finally {\r\n setProductLoading(false);\r\n }\r\n };\r\n\r\n const handleAddToCart = async (productToBeAdded: any, quantity: number) => {\r\n setAdding(true);\r\n try {\r\n const product = await getProductById(productToBeAdded.id);\r\n if (\r\n !(\r\n product?.variants?.[0]?.product_id ||\r\n product?.variants?.[0]?.productId\r\n ) &&\r\n !(product.type.item || product.type.bundle)\r\n ) {\r\n setAdding(false);\r\n toast.error(\"Variants not found\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: quantity,\r\n },\r\n ];\r\n console.log(productData, \"product data\", \"app version\", VERSION);\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n const access_token = await fetchTokenBmGrant();\r\n\r\n let { customer_token } = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n console.log(basketIdFromCustomer, \"basketIdFromCustomer\");\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n setAdding(false);\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n const basketResponse = await createBasket(customer_token, data);\r\n console.log(\r\n basketResponse,\r\n basketResponse?.basket_id,\r\n basketResponse?.basketId,\r\n \"the basket response\"\r\n );\r\n if (!(basketResponse?.basket_id || !basketResponse?.basketId)) {\r\n setAdding(false);\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // Store new basket ID\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n // const response = await addProductToBasket(\r\n // basketResponse?.basket_id || basketResponse?.basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart(\r\n {\r\n productId,\r\n quantity,\r\n },\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n setAdding(false);\r\n return;\r\n }\r\n\r\n // const response = await addProductToBasket(\r\n // basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart({\r\n productId,\r\n quantity,\r\n });\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n setAdding(false);\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n setAdding(false);\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n setAdding(false);\r\n };\r\n\r\n // useEffect(() => {\r\n // if (lastChat.current)\r\n // lastChat.current.scrollIntoView({ behavior: \"smooth\" });\r\n // }, [lastChat.current]);\r\n\r\n useEffect(() => {\r\n if (isVisible) setTimeout(() => setIsAnimating(true), 10);\r\n else setIsAnimating(false);\r\n }, [isVisible]);\r\n\r\n // Update the main container div's className\r\n return (\r\n <div className=\"relative flex justify-center\">\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onClick={() => setIsOpen(true)}\r\n style={\r\n {\r\n // background: storeDetails.tanyaThemeColor,\r\n }\r\n }\r\n className=\"flex items-center rounded-lg cursor-pointer hover:opacity-90 transition-opacity p-0\"\r\n >\r\n <div className=\"flex flex-col\">\r\n <svg\r\n width=\"40\"\r\n height=\"40\"\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_958_585)\">\r\n <path\r\n d=\"M30.0002 5C31.7683 5 33.464 5.70238 34.7142 6.95262C35.9644 8.20286 36.6668 9.89856 36.6668 11.6667V25C36.6668 26.7681 35.9644 28.4638 34.7142 29.714C33.464 30.9643 31.7683 31.6667 30.0002 31.6667H25.6902L21.1785 36.1783C20.8915 36.4653 20.5097 36.6377 20.1046 36.6631C19.6996 36.6886 19.2992 36.5654 18.9785 36.3167L18.8218 36.1783L14.3085 31.6667H10.0002C8.28976 31.6667 6.64478 31.0093 5.40548 29.8305C4.16617 28.6516 3.42735 27.0416 3.34183 25.3333L3.3335 25V11.6667C3.3335 9.89856 4.03588 8.20286 5.28612 6.95262C6.53636 5.70238 8.23205 5 10.0002 5H30.0002Z\"\r\n fill=\"url(#paint0_linear_958_585)\"\r\n />\r\n <path\r\n d=\"M28.3335 15.6511V11.6667C28.3335 11.6667 22.2774 12.6042 20.1148 15.4167C17.9521 18.2292 18.6644 26.6667 18.6644 26.6667H22.5321C22.5321 26.6667 22.0614 18.9323 23.4989 17.2917C24.9364 15.6511 28.3335 15.6511 28.3335 15.6511Z\"\r\n fill=\"white\"\r\n />\r\n <path\r\n d=\"M13.3335 11.6667H19.6184V15.4167H13.3335V11.6667Z\"\r\n fill=\"white\"\r\n />\r\n </g>\r\n <defs>\r\n <linearGradient\r\n id=\"paint0_linear_958_585\"\r\n x1=\"20.0002\"\r\n y1=\"5\"\r\n x2=\"35.0002\"\r\n y2=\"30\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#452697\" />\r\n <stop offset=\"1\" stopColor=\"#7C5BFF\" />\r\n </linearGradient>\r\n <clipPath id=\"clip0_958_585\">\r\n <rect width=\"40\" height=\"40\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n </PopoverTrigger>\r\n\r\n {/* Absolute Positioned PopoverContent and Custom Sidebar Panel */}\r\n {isVisible && (\r\n <>\r\n {/* Overlay For closing tanya popup by clicking on side or background */}\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => setIsOpen(false)}\r\n />\r\n <div\r\n className={`\r\n fixed z-50 h-screen w-[100vw] sm:w-[80vw] md:w-[770px] border-0 bg-white lg:rounded-l-xl overflow-hidden flex flex-col shadow-[0px_4px_10px_0px_#5F499840]\r\n top-0 right-0\r\n transition-transform duration-300 ease-in-out\r\n lg:transform lg:translate-y-0\r\n \r\n `}\r\n // ${\r\n // isAnimating\r\n // ? \"lg:translate-x-0 translate-y-0\"\r\n // : \"lg:translate-x-full translate-y-full\"\r\n // }\r\n style={{\r\n background:\r\n \"linear-gradient(170.1deg, #FFFFFF 60.03%, #E3DEEF 99.59%)\",\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n className={`flex justify-between p-3 bg-[#FFFFFF] border border-b-1 border-[#E5E5E5] `} //lg:rounded-tl-xl lg:rounded-bl-xl\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.5rem\",\r\n }}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <div\r\n className=\"flex gap-2 w-28 h-12 text-center items-center p-2 border rounded-l-[20px] rounded-tr-[20px]\"\r\n style={{\r\n background:\r\n \"linear-gradient(265.62deg, #6851C6 5.24%, #8668FF 98.49%)\",\r\n }}\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 15 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M15 4.48438V0.5C15 0.5 8.94395 1.4375 6.78127 4.25C4.61859 7.0625 5.33095 15.5 5.33095 15.5H9.19857C9.19857 15.5 8.72793 7.76562 10.1654 6.125C11.6029 4.48438 15 4.48438 15 4.48438Z\"\r\n fill=\"white\"\r\n />\r\n <path d=\"M0 0.5H6.28488V4.25H0V0.5Z\" fill=\"white\" />\r\n </svg>\r\n\r\n <p className=\"text-[#FFFFFF] font-nunitoSans font-semibold\">\r\n TANYA\r\n </p>\r\n </div>\r\n <p\r\n className=\"text-[#5B5B5B] font-nunitoSans font-semibold\"\r\n style={{ fontStyle: \"italic\" }}\r\n >\r\n {\" \"}\r\n Your AI shopping assistant !{\" \"}\r\n </p>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"1.25rem\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n {/* close icon */}\r\n <button onClick={() => setIsOpen(false)}>\r\n <svg\r\n width=\"24\"\r\n height=\"25\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6036)\">\r\n <path\r\n d=\"M18 6.5L6 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6.5L18 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6036\">\r\n <rect\r\n width=\"24\"\r\n height=\"24\"\r\n fill=\"white\"\r\n transform=\"translate(0 0.5)\"\r\n />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Chat Container */}\r\n <div className={`flex h-full md:flex-row lg:flex-row`}>\r\n <div\r\n className={`flex flex-col h-full ${\r\n product ? \"lg:w-2/3 w-full\" : \"w-full\"\r\n }`}\r\n >\r\n {/* Chat Body - Scrollable */}\r\n <div\r\n ref={scrollRef}\r\n className=\"overflow-y-auto pr-5 pb-2 space-y-4 hide-scrollbar flex-grow mb-24\"\r\n >\r\n {/* Shopping Options */}\r\n {storeDetails?.whomRequired && (\r\n <div\r\n className=\"mx-3 p-3 rounded-2xl bg-[#FFFFFF]\"\r\n // style={{\r\n // color: storeDetails?.tanyaThemeContrastColor,\r\n // backgroundColor: storeDetails.tanyaThemeColor, //need to comment\r\n // width: \"fit-content\",\r\n // }}\r\n >\r\n <div className=\"flex gap-2 bg-[#FFFFFF]\">\r\n {/* <Icon\r\n icon=\"mdi:shopping\"\r\n color=\"white\"\r\n width=\"22\"\r\n height=\"22\"\r\n /> */}\r\n <p className=\"font-bold font-nunitoSans text-[#494949]\">\r\n Is this for you or someone else?\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {shoppingOptions.map((option) => (\r\n <button\r\n key={option}\r\n onClick={() => handleWhomSelection(option)}\r\n className=\"px-2 py-2 font-semibold text-xs text-[#18181B] bg-[#F3F3F3] rounded-2xl\"\r\n style={{\r\n backgroundColor:\r\n whom === payloadMapping[option]\r\n ? \"#FFFFFF\"\r\n : \"#F3F3F3\",\r\n borderColor:\r\n whom === payloadMapping[option]\r\n ? \"#BBB3DD\"\r\n : \"\",\r\n }}\r\n >\r\n {option}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n {/* Chat History */}\r\n {chatHistory.map((chat, index) => (\r\n <div key={index}>\r\n <div\r\n className=\"flex justify-end\"\r\n // ref={\r\n // index == chatHistory.length - 1 ? lastChat : null\r\n // }\r\n >\r\n <p className=\"text-sm font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n {chat.query}\r\n </p>\r\n </div>\r\n {chat.response && chat.response.includes(\"Thinking\") ? (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans animate-pulse font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n ) : (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n )}\r\n {productLoading &&\r\n !chat.response.includes(\"Thinking\") &&\r\n chat.products?.length == 0 && (\r\n <div>\r\n <p className=\"text-sm animate-pulse font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n Finding best products for you\r\n </p>\r\n </div>\r\n )}\r\n {chat?.products && chat?.products?.length > 0 && (\r\n <ProductDisplay\r\n chat={chat.products}\r\n storeDetails={storeDetails}\r\n />\r\n )}\r\n\r\n {/* Potential Questions */}\r\n {chat?.potentialQuestions.length > 0 && (\r\n <div className=\"my-2 px-4 text-sm text-gray-700\">\r\n <p\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949]\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n Why not explore these inquiries...\r\n </p>\r\n {chat.potentialQuestions\r\n .split(\",\")\r\n .map((question, idx) => (\r\n <button\r\n key={idx}\r\n className={`cursor-pointer font-nunitoSans font-semibold text-[#232323] border bg-[#804C9E0D] border-${storeDetails.themeDarkColor} m-1 rounded-xl px-2 py-1`}\r\n onClick={() => handleSendMessage(question)}\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n {question}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {chat?.secondaryLoading && (\r\n <div className=\"mt-3 mb-4 px-4\">\r\n <div\r\n className=\"tanya-surprise-wrapper bg-indigo-300 text-sm px-7 py-4 rounded-r-xl rounded-bl-2xl w-full relative overflow-hidden\"\r\n style={{\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex gap-1\">\r\n <div className=\"tanya-sparkle tanya-sparkle-1\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-2\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-3\">\r\n ✨\r\n </div>\r\n </div>\r\n <div className=\"tanya-shimmer\" />\r\n <p\r\n className=\"font-semibold tanya-pulse\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n I’ve found a special surprise crafted just for\r\n you… hang on a sec!\r\n </p>\r\n <p\r\n className=\"tanya-dots mt-1\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n • • •\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Secondary Response (from secondary flow) */}\r\n {chat?.secondaryResponse && (\r\n <>\r\n <div className=\"mt-3 mb-8 px-4 bg-indigo-300 rounded-tr-[5px]\">\r\n {/* Chat Response */}\r\n <div\r\n className=\"text-sm text-[#232323] bg-[#FFFFFF] px-7 py-4 rounded-br-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(\r\n chat.secondaryResponse\r\n ),\r\n }}\r\n />\r\n {chat.productSnapshot && (\r\n // chat.productSnapshot.points > 0 &&\r\n <div className=\"mt-4 w-full\">\r\n <div\r\n className=\"flex gap-4 items-stretch rounded-2xl p-4\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n <div\r\n className=\"flex-shrink-0 rounded-xl overflow-hidden border\"\r\n style={{\r\n width: 112,\r\n height: 112,\r\n borderColor: \"#eee\",\r\n }}\r\n >\r\n {chat.productSnapshot.image ? (\r\n <img\r\n src={chat.productSnapshot.image}\r\n alt={chat.productSnapshot.name}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full flex items-center justify-center text-xs text-gray-500\">\r\n No Image\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-col flex-1 justify-between\">\r\n <div>\r\n <p className=\"font-semibold text-[15px] leading-snug\">\r\n {chat.productSnapshot.name}\r\n </p>\r\n <p className=\"mt-1 text-[14px] font-medium\">\r\n {chat.productSnapshot.price != null\r\n ? new Intl.NumberFormat(undefined, {\r\n style: \"currency\",\r\n currency:\r\n storeDetails?.currency ||\r\n \"USD\",\r\n }).format(\r\n chat.productSnapshot.price\r\n )\r\n : \"\"}\r\n </p>\r\n\r\n {chat.productSnapshot.points > 0 && (\r\n <p className=\"mt-1 text-xs opacity-80\">\r\n You will earn{\" \"}\r\n <strong>\r\n {chat.productSnapshot.points}{\" \"}\r\n points\r\n </strong>\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div className=\"mt-3 flex items-center gap-3\">\r\n <div className=\"flex items-center border rounded-full overflow-hidden\">\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity: Math.max(\r\n 1,\r\n m.productSnapshot\r\n .quantity - 1\r\n ),\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n −\r\n </button>\r\n <div className=\"px-3 py-1 text-sm select-none\">\r\n {chat.productSnapshot.quantity}\r\n </div>\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity:\r\n m.productSnapshot\r\n .quantity + 1,\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n +\r\n </button>\r\n </div>\r\n <button\r\n onClick={() => {\r\n handleAddToCart(\r\n mapSnapshotToProduct(\r\n chat.productSnapshot!\r\n ),\r\n chat.productSnapshot!.quantity\r\n );\r\n }}\r\n disabled={adding}\r\n className=\"px-4 py-2 rounded-full font-medium\"\r\n style={{\r\n background:\r\n storeDetails.tanyaThemeColor,\r\n color:\r\n storeDetails?.tanyaThemeContrastColor ||\r\n \"#fff\",\r\n opacity: adding ? 0.8 : 1,\r\n }}\r\n >\r\n {adding ? \"Adding...\" : \"Add to cart\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n <div className=\"mb-20\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Sticky Bottom Input Bar */}\r\n <div className=\"flex flex-col gap-2 sticky bottom-0 left-0 right-0 bg-[#E3DEEF] z-50 px-4 py-2\">\r\n {/* Gradient Border Wrapper */}\r\n <div\r\n className=\"p-[1px] rounded-xl\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, #B09FFF 0%, #8D79F6 100%)\",\r\n }}\r\n >\r\n {/* Input + Mic + Submit */}\r\n <div className=\"flex items-center bg-[#FFFFFF] flex-1 rounded-xl px-2 py-1\">\r\n <input\r\n className=\"flex-1 bg-[#FFFFFF] text-[#232323] outline-none border-none px-2 py-2 text-sm\"\r\n placeholder=\"How can I help you...\"\r\n value={inputText}\r\n autoFocus\r\n onChange={(e) => setInputText(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && !isLoading)\r\n handleSendMessage();\r\n }}\r\n />\r\n {/* Mic Icon */}\r\n {/* <button\r\n type=\"button\"\r\n className=\"p-2 text-[#959595] hover:text-[#6952C7]\"\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6086)\">\r\n <path\r\n d=\"M7.5 4.16663C7.5 3.50358 7.76339 2.8677 8.23223 2.39886C8.70107 1.93002 9.33696 1.66663 10 1.66663C10.663 1.66663 11.2989 1.93002 11.7678 2.39886C12.2366 2.8677 12.5 3.50358 12.5 4.16663V8.33329C12.5 8.99633 12.2366 9.63222 11.7678 10.1011C11.2989 10.5699 10.663 10.8333 10 10.8333C9.33696 10.8333 8.70107 10.5699 8.23223 10.1011C7.76339 9.63222 7.5 8.99633 7.5 8.33329V4.16663Z\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M4.1665 8.33337C4.1665 9.88047 4.78109 11.3642 5.87505 12.4582C6.96901 13.5521 8.45274 14.1667 9.99984 14.1667C11.5469 14.1667 13.0307 13.5521 14.1246 12.4582C15.2186 11.3642 15.8332 9.88047 15.8332 8.33337\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6.6665 17.5H13.3332\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M10 14.1666V17.5\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6086\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button> */}\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"p-3\"\r\n onClick={() => handleSendMessage()}\r\n >\r\n {isLoading ? (\r\n <div\r\n className=\"p-3 animate-spin rounded-full h-3 w-3 border-b-2\"\r\n style={{\r\n borderBottom: \"2px solid\",\r\n color: storeDetails.tanyaThemeColor,\r\n }}\r\n />\r\n ) : (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M16.6357 13.6701L18.3521 8.5208C19.8516 4.02242 20.6013 1.77322 19.414 0.585948C18.2268 -0.601312 15.9776 0.148418 11.4792 1.64788L6.32987 3.36432C2.69923 4.57453 0.883923 5.17964 0.368062 6.06698C-0.122688 6.91112 -0.122688 7.95369 0.368062 8.7978C0.883923 9.6852 2.69923 10.2903 6.32987 11.5005C6.77981 11.6505 7.28601 11.5434 7.62294 11.2096L13.1286 5.75495C13.4383 5.44808 13.9382 5.45041 14.245 5.76015C14.5519 6.06989 14.5496 6.56975 14.2398 6.87662L8.8231 12.2432C8.4518 12.6111 8.3342 13.1742 8.4995 13.6701C9.7097 17.3007 10.3148 19.1161 11.2022 19.6319C12.0463 20.1227 13.0889 20.1227 13.933 19.6319C14.8204 19.1161 15.4255 17.3008 16.6357 13.6701Z\"\r\n fill=\"#6952C7\"\r\n />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ProductDisplayCard addToCartPwa={addToCart} />\r\n </div>\r\n {/* </PopoverContent> */}\r\n </div>\r\n </>\r\n )}\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TanyaShoppingAssistantStream;\r\n\r\n// ${import.meta.env.VITE_SERVER_BASE_URL}api/web-bff/assistantStream\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __extends } from \"tslib\";\nvar genericMessage = \"Invariant Violation\";\nvar _a = Object.setPrototypeOf, setPrototypeOf = _a === void 0 ? function (obj, proto) {\n obj.__proto__ = proto;\n return obj;\n} : _a;\nvar InvariantError = /** @class */ (function (_super) {\n __extends(InvariantError, _super);\n function InvariantError(message) {\n if (message === void 0) { message = genericMessage; }\n var _this = _super.call(this, typeof message === \"number\"\n ? genericMessage + \": \" + message + \" (see https://github.com/apollographql/invariant-packages)\"\n : message) || this;\n _this.framesToPop = 1;\n _this.name = genericMessage;\n setPrototypeOf(_this, InvariantError.prototype);\n return _this;\n }\n return InvariantError;\n}(Error));\nexport { InvariantError };\nexport function invariant(condition, message) {\n if (!condition) {\n throw new InvariantError(message);\n }\n}\nvar verbosityLevels = [\"debug\", \"log\", \"warn\", \"error\", \"silent\"];\nvar verbosityLevel = verbosityLevels.indexOf(\"log\");\nfunction wrapConsoleMethod(name) {\n return function () {\n if (verbosityLevels.indexOf(name) >= verbosityLevel) {\n // Default to console.log if this host environment happens not to provide\n // all the console.* methods we need.\n var method = console[name] || console.log;\n return method.apply(console, arguments);\n }\n };\n}\n(function (invariant) {\n invariant.debug = wrapConsoleMethod(\"debug\");\n invariant.log = wrapConsoleMethod(\"log\");\n invariant.warn = wrapConsoleMethod(\"warn\");\n invariant.error = wrapConsoleMethod(\"error\");\n})(invariant || (invariant = {}));\nexport function setVerbosity(level) {\n var old = verbosityLevels[verbosityLevel];\n verbosityLevel = Math.max(0, verbosityLevels.indexOf(level));\n return old;\n}\nexport default invariant;\n//# sourceMappingURL=invariant.js.map","export var version = \"3.14.0\";\n//# sourceMappingURL=version.js.map","export function maybe(thunk) {\n try {\n return thunk();\n }\n catch (_a) { }\n}\n//# sourceMappingURL=maybe.js.map","import { maybe } from \"./maybe.js\";\nexport default (maybe(function () { return globalThis; }) ||\n maybe(function () { return window; }) ||\n maybe(function () { return self; }) ||\n maybe(function () { return global; }) || // We don't expect the Function constructor ever to be invoked at runtime, as\n// long as at least one of globalThis, window, self, or global is defined, so\n// we are under no obligation to make it easy for static analysis tools to\n// detect syntactic usage of the Function constructor. If you think you can\n// improve your static analysis to detect this obfuscation, think again. This\n// is an arms race you cannot win, at least not in JavaScript.\nmaybe(function () {\n return maybe.constructor(\"return this\")();\n}));\n//# sourceMappingURL=global.js.map","var prefixCounts = new Map();\n// These IDs won't be globally unique, but they will be unique within this\n// process, thanks to the counter, and unguessable thanks to the random suffix.\nexport function makeUniqueId(prefix) {\n var count = prefixCounts.get(prefix) || 1;\n prefixCounts.set(prefix, count + 1);\n return \"\".concat(prefix, \":\").concat(count, \":\").concat(Math.random().toString(36).slice(2));\n}\n//# sourceMappingURL=makeUniqueId.js.map","import { makeUniqueId } from \"./makeUniqueId.js\";\nexport function stringifyForDisplay(value, space) {\n if (space === void 0) { space = 0; }\n var undefId = makeUniqueId(\"stringifyForDisplay\");\n return JSON.stringify(value, function (key, value) {\n return value === void 0 ? undefId : value;\n }, space)\n .split(JSON.stringify(undefId))\n .join(\"<undefined>\");\n}\n//# sourceMappingURL=stringifyForDisplay.js.map","import { invariant as originalInvariant, InvariantError } from \"ts-invariant\";\nimport { version } from \"../../version.js\";\nimport global from \"./global.js\";\nimport { stringifyForDisplay } from \"../common/stringifyForDisplay.js\";\nfunction wrap(fn) {\n return function (message) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof message === \"number\") {\n var arg0 = message;\n message = getHandledErrorMsg(arg0);\n if (!message) {\n message = getFallbackErrorMsg(arg0, args);\n args = [];\n }\n }\n fn.apply(void 0, [message].concat(args));\n };\n}\nvar invariant = Object.assign(function invariant(condition, message) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (!condition) {\n originalInvariant(condition, getHandledErrorMsg(message, args) || getFallbackErrorMsg(message, args));\n }\n}, {\n debug: wrap(originalInvariant.debug),\n log: wrap(originalInvariant.log),\n warn: wrap(originalInvariant.warn),\n error: wrap(originalInvariant.error),\n});\n/**\n * Returns an InvariantError.\n *\n * `message` can only be a string, a concatenation of strings, or a ternary statement\n * that results in a string. This will be enforced on build, where the message will\n * be replaced with a message number.\n * String substitutions with %s are supported and will also return\n * pretty-stringified objects.\n * Excess `optionalParams` will be swallowed.\n */\nfunction newInvariantError(message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n return new InvariantError(getHandledErrorMsg(message, optionalParams) ||\n getFallbackErrorMsg(message, optionalParams));\n}\nvar ApolloErrorMessageHandler = Symbol.for(\"ApolloErrorMessageHandler_\" + version);\nfunction stringify(arg) {\n if (typeof arg == \"string\") {\n return arg;\n }\n try {\n return stringifyForDisplay(arg, 2).slice(0, 1000);\n }\n catch (_a) {\n return \"<non-serializable>\";\n }\n}\nfunction getHandledErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return (global[ApolloErrorMessageHandler] &&\n global[ApolloErrorMessageHandler](message, messageArgs.map(stringify)));\n}\nfunction getFallbackErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return \"An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#\".concat(encodeURIComponent(JSON.stringify({\n version: version,\n message: message,\n args: messageArgs.map(stringify),\n })));\n}\nexport { invariant, InvariantError, newInvariantError, ApolloErrorMessageHandler, };\n//# sourceMappingURL=invariantWrappers.js.map","import { invariant, newInvariantError } from \"../globals/index.js\";\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc) {\n invariant(doc && doc.kind === \"Document\", 116);\n var operations = doc.definitions\n .filter(function (d) { return d.kind !== \"FragmentDefinition\"; })\n .map(function (definition) {\n if (definition.kind !== \"OperationDefinition\") {\n throw newInvariantError(117, definition.kind);\n }\n return definition;\n });\n invariant(operations.length <= 1, 118, operations.length);\n return doc;\n}\nexport function getOperationDefinition(doc) {\n checkDocument(doc);\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"OperationDefinition\";\n })[0];\n}\nexport function getOperationName(doc) {\n return (doc.definitions\n .filter(function (definition) {\n return definition.kind === \"OperationDefinition\" && !!definition.name;\n })\n .map(function (x) { return x.name.value; })[0] || null);\n}\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(doc) {\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"FragmentDefinition\";\n });\n}\nexport function getQueryDefinition(doc) {\n var queryDef = getOperationDefinition(doc);\n invariant(queryDef && queryDef.operation === \"query\", 119);\n return queryDef;\n}\nexport function getFragmentDefinition(doc) {\n invariant(doc.kind === \"Document\", 120);\n invariant(doc.definitions.length <= 1, 121);\n var fragmentDef = doc.definitions[0];\n invariant(fragmentDef.kind === \"FragmentDefinition\", 122);\n return fragmentDef;\n}\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(queryDoc) {\n checkDocument(queryDoc);\n var fragmentDefinition;\n for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) {\n var definition = _a[_i];\n if (definition.kind === \"OperationDefinition\") {\n var operation = definition.operation;\n if (operation === \"query\" ||\n operation === \"mutation\" ||\n operation === \"subscription\") {\n return definition;\n }\n }\n if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition;\n }\n }\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n throw newInvariantError(123);\n}\nexport function getDefaultValues(definition) {\n var defaultValues = Object.create(null);\n var defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach(function (def) {\n if (def.defaultValue) {\n valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue);\n }\n });\n }\n return defaultValues;\n}\n//# sourceMappingURL=getFromAST.js.map","// This currentContext variable will only be used if the makeSlotClass\n// function is called, which happens only if this is the first copy of the\n// @wry/context package to be imported.\nlet currentContext = null;\n// This unique internal object is used to denote the absence of a value\n// for a given Slot, and is never exposed to outside code.\nconst MISSING_VALUE = {};\nlet idCounter = 1;\n// Although we can't do anything about the cost of duplicated code from\n// accidentally bundling multiple copies of the @wry/context package, we can\n// avoid creating the Slot class more than once using makeSlotClass.\nconst makeSlotClass = () => class Slot {\n constructor() {\n // If you have a Slot object, you can find out its slot.id, but you cannot\n // guess the slot.id of a Slot you don't have access to, thanks to the\n // randomized suffix.\n this.id = [\n \"slot\",\n idCounter++,\n Date.now(),\n Math.random().toString(36).slice(2),\n ].join(\":\");\n }\n hasValue() {\n for (let context = currentContext; context; context = context.parent) {\n // We use the Slot object iself as a key to its value, which means the\n // value cannot be obtained without a reference to the Slot object.\n if (this.id in context.slots) {\n const value = context.slots[this.id];\n if (value === MISSING_VALUE)\n break;\n if (context !== currentContext) {\n // Cache the value in currentContext.slots so the next lookup will\n // be faster. This caching is safe because the tree of contexts and\n // the values of the slots are logically immutable.\n currentContext.slots[this.id] = value;\n }\n return true;\n }\n }\n if (currentContext) {\n // If a value was not found for this Slot, it's never going to be found\n // no matter how many times we look it up, so we might as well cache\n // the absence of the value, too.\n currentContext.slots[this.id] = MISSING_VALUE;\n }\n return false;\n }\n getValue() {\n if (this.hasValue()) {\n return currentContext.slots[this.id];\n }\n }\n withValue(value, callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n const slots = {\n __proto__: null,\n [this.id]: value,\n };\n const parent = currentContext;\n currentContext = { parent, slots };\n try {\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = parent;\n }\n }\n // Capture the current context and wrap a callback function so that it\n // reestablishes the captured context when called.\n static bind(callback) {\n const context = currentContext;\n return function () {\n const saved = currentContext;\n try {\n currentContext = context;\n return callback.apply(this, arguments);\n }\n finally {\n currentContext = saved;\n }\n };\n }\n // Immediately run a callback function without any captured context.\n static noContext(callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n if (currentContext) {\n const saved = currentContext;\n try {\n currentContext = null;\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = saved;\n }\n }\n else {\n return callback.apply(thisArg, args);\n }\n }\n};\nfunction maybe(fn) {\n try {\n return fn();\n }\n catch (ignored) { }\n}\n// We store a single global implementation of the Slot class as a permanent\n// non-enumerable property of the globalThis object. This obfuscation does\n// nothing to prevent access to the Slot class, but at least it ensures the\n// implementation (i.e. currentContext) cannot be tampered with, and all copies\n// of the @wry/context package (hopefully just one) will share the same Slot\n// implementation. Since the first copy of the @wry/context package to be\n// imported wins, this technique imposes a steep cost for any future breaking\n// changes to the Slot class.\nconst globalKey = \"@wry/context:Slot\";\nconst host = \n// Prefer globalThis when available.\n// https://github.com/benjamn/wryware/issues/347\nmaybe(() => globalThis) ||\n // Fall back to global, which works in Node.js and may be converted by some\n // bundlers to the appropriate identifier (window, self, ...) depending on the\n // bundling target. https://github.com/endojs/endo/issues/576#issuecomment-1178515224\n maybe(() => global) ||\n // Otherwise, use a dummy host that's local to this module. We used to fall\n // back to using the Array constructor as a namespace, but that was flagged in\n // https://github.com/benjamn/wryware/issues/347, and can be avoided.\n Object.create(null);\n// Whichever globalHost we're using, make TypeScript happy about the additional\n// globalKey property.\nconst globalHost = host;\nexport const Slot = globalHost[globalKey] ||\n // Earlier versions of this package stored the globalKey property on the Array\n // constructor, so we check there as well, to prevent Slot class duplication.\n Array[globalKey] ||\n (function (Slot) {\n try {\n Object.defineProperty(globalHost, globalKey, {\n value: Slot,\n enumerable: false,\n writable: false,\n // When it was possible for globalHost to be the Array constructor (a\n // legacy Slot dedup strategy), it was important for the property to be\n // configurable:true so it could be deleted. That does not seem to be as\n // important when globalHost is the global object, but I don't want to\n // cause similar problems again, and configurable:true seems safest.\n // https://github.com/endojs/endo/issues/576#issuecomment-1178274008\n configurable: true\n });\n }\n finally {\n return Slot;\n }\n })(makeSlotClass());\n//# sourceMappingURL=slot.js.map","import { Slot } from \"./slot.js\";\nexport { Slot };\nexport const { bind, noContext } = Slot;\n// Like global.setTimeout, except the callback runs with captured context.\nexport { setTimeoutWithContext as setTimeout };\nfunction setTimeoutWithContext(callback, delay) {\n return setTimeout(bind(callback), delay);\n}\n// Turn any generator function into an async function (using yield instead\n// of await), with context automatically preserved across yields.\nexport function asyncFromGen(genFn) {\n return function () {\n const gen = genFn.apply(this, arguments);\n const boundNext = bind(gen.next);\n const boundThrow = bind(gen.throw);\n return new Promise((resolve, reject) => {\n function invoke(method, argument) {\n try {\n var result = method.call(gen, argument);\n }\n catch (error) {\n return reject(error);\n }\n const next = result.done ? resolve : invokeNext;\n if (isPromiseLike(result.value)) {\n result.value.then(next, result.done ? reject : invokeThrow);\n }\n else {\n next(result.value);\n }\n }\n const invokeNext = (value) => invoke(boundNext, value);\n const invokeThrow = (error) => invoke(boundThrow, error);\n invokeNext();\n });\n };\n}\nfunction isPromiseLike(value) {\n return value && typeof value.then === \"function\";\n}\n// If you use the fibers npm package to implement coroutines in Node.js,\n// you should call this function at least once to ensure context management\n// remains coherent across any yields.\nconst wrappedFibers = [];\nexport function wrapYieldingFiberMethods(Fiber) {\n // There can be only one implementation of Fiber per process, so this array\n // should never grow longer than one element.\n if (wrappedFibers.indexOf(Fiber) < 0) {\n const wrap = (obj, method) => {\n const fn = obj[method];\n obj[method] = function () {\n return noContext(fn, arguments, this);\n };\n };\n // These methods can yield, according to\n // https://github.com/laverdet/node-fibers/blob/ddebed9b8ae3883e57f822e2108e6943e5c8d2a8/fibers.js#L97-L100\n wrap(Fiber, \"yield\");\n wrap(Fiber.prototype, \"run\");\n wrap(Fiber.prototype, \"throwInto\");\n wrappedFibers.push(Fiber);\n }\n return Fiber;\n}\n//# sourceMappingURL=index.js.map","import { Slot } from \"@wry/context\";\nexport const parentEntrySlot = new Slot();\nexport function nonReactive(fn) {\n return parentEntrySlot.withValue(void 0, fn);\n}\nexport { Slot };\nexport { bind as bindContext, noContext, setTimeout, asyncFromGen, } from \"@wry/context\";\n//# sourceMappingURL=context.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\n\t\t\tif (typeof Symbol.for === 'function') {\n\t\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t\t// META: It's a resource locator!\n\t\t\t\tresult = Symbol.for('https://github.com/benlesh/symbol-observable');\n\t\t\t} else {\n\t\t\t\t// Symbol.for didn't exist! The best we can do at this point is a totally \n\t\t\t\t// unique symbol. Note that the string argument here is a descriptor, not\n\t\t\t\t// an identifier. This symbol is unique.\n\t\t\t\tresult = Symbol('https://github.com/benlesh/symbol-observable');\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tSymbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import { Observable } from \"zen-observable-ts\";\n// This simplified polyfill attempts to follow the ECMAScript Observable\n// proposal (https://github.com/zenparsing/es-observable)\nimport \"symbol-observable\";\n// The zen-observable package defines Observable.prototype[Symbol.observable]\n// when Symbol is supported, but RxJS interop depends on also setting this fake\n// '@@observable' string as a polyfill for Symbol.observable.\nvar prototype = Observable.prototype;\nvar fakeObsSymbol = \"@@observable\";\nif (!prototype[fakeObsSymbol]) {\n // @ts-expect-error\n prototype[fakeObsSymbol] = function () {\n return this;\n };\n}\nexport { Observable };\n//# sourceMappingURL=Observable.js.map","import { newInvariantError } from \"../../utilities/globals/index.js\";\nexport function validateOperation(operation) {\n var OPERATION_FIELDS = [\n \"query\",\n \"operationName\",\n \"variables\",\n \"extensions\",\n \"context\",\n ];\n for (var _i = 0, _a = Object.keys(operation); _i < _a.length; _i++) {\n var key = _a[_i];\n if (OPERATION_FIELDS.indexOf(key) < 0) {\n throw newInvariantError(58, key);\n }\n }\n return operation;\n}\n//# sourceMappingURL=validateOperation.js.map","import { __assign } from \"tslib\";\nexport function createOperation(starting, operation) {\n var context = __assign({}, starting);\n var setContext = function (next) {\n if (typeof next === \"function\") {\n context = __assign(__assign({}, context), next(context));\n }\n else {\n context = __assign(__assign({}, context), next);\n }\n };\n var getContext = function () { return (__assign({}, context)); };\n Object.defineProperty(operation, \"setContext\", {\n enumerable: false,\n value: setContext,\n });\n Object.defineProperty(operation, \"getContext\", {\n enumerable: false,\n value: getContext,\n });\n return operation;\n}\n//# sourceMappingURL=createOperation.js.map","import { getOperationName } from \"../../utilities/index.js\";\nexport function transformOperation(operation) {\n var transformedOperation = {\n variables: operation.variables || {},\n extensions: operation.extensions || {},\n operationName: operation.operationName,\n query: operation.query,\n };\n // Best guess at an operation name\n if (!transformedOperation.operationName) {\n transformedOperation.operationName =\n typeof transformedOperation.query !== \"string\" ?\n getOperationName(transformedOperation.query) || undefined\n : \"\";\n }\n return transformedOperation;\n}\n//# sourceMappingURL=transformOperation.js.map","import { __spreadArray } from \"tslib\";\nimport { Slot } from \"optimism\";\nimport { invariant, global as untypedGlobal } from \"../globals/index.js\";\nvar muteAllDeprecations = Symbol.for(\"apollo.deprecations\");\nvar global = untypedGlobal;\nvar slot = new Slot();\nfunction isMuted(name) {\n return global[muteAllDeprecations] || (slot.getValue() || []).includes(name);\n}\nexport function muteDeprecations(name) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return slot.withValue.apply(slot, __spreadArray([Array.isArray(name) ? name : [name]], args, false));\n}\nexport function warnRemovedOption(options, name, callSite, recommendation) {\n if (recommendation === void 0) { recommendation = \"Please remove this option.\"; }\n warnDeprecated(name, function () {\n if (name in options) {\n globalThis.__DEV__ !== false && invariant.warn(104, callSite, name, recommendation);\n }\n });\n}\nexport function warnDeprecated(name, cb) {\n if (!isMuted(name)) {\n cb();\n }\n}\nexport function withDisabledDeprecations() {\n var _a;\n var prev = global[muteAllDeprecations];\n global[muteAllDeprecations] = true;\n return _a = {},\n _a[Symbol.dispose] = function () {\n global[muteAllDeprecations] = prev;\n },\n _a;\n}\n//# sourceMappingURL=index.js.map","import { newInvariantError, invariant } from \"../../utilities/globals/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { validateOperation, createOperation, transformOperation, } from \"../utils/index.js\";\nimport { warnDeprecated } from \"../../utilities/deprecation/index.js\";\nfunction passthrough(op, forward) {\n return (forward ? forward(op) : Observable.of());\n}\nfunction toLink(handler) {\n return typeof handler === \"function\" ? new ApolloLink(handler) : handler;\n}\nfunction isTerminating(link) {\n return link.request.length <= 1;\n}\nvar ApolloLink = /** @class */ (function () {\n function ApolloLink(request) {\n if (request)\n this.request = request;\n }\n ApolloLink.empty = function () {\n return new ApolloLink(function () { return Observable.of(); });\n };\n ApolloLink.from = function (links) {\n if (links.length === 0)\n return ApolloLink.empty();\n return links.map(toLink).reduce(function (x, y) { return x.concat(y); });\n };\n ApolloLink.split = function (test, left, right) {\n var leftLink = toLink(left);\n var rightLink = toLink(right || new ApolloLink(passthrough));\n var ret;\n if (isTerminating(leftLink) && isTerminating(rightLink)) {\n ret = new ApolloLink(function (operation) {\n return test(operation) ?\n leftLink.request(operation) || Observable.of()\n : rightLink.request(operation) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return test(operation) ?\n leftLink.request(operation, forward) || Observable.of()\n : rightLink.request(operation, forward) || Observable.of();\n });\n }\n return Object.assign(ret, { left: leftLink, right: rightLink });\n };\n ApolloLink.execute = function (link, operation) {\n return (link.request(createOperation(operation.context, transformOperation(validateOperation(operation)))) || Observable.of());\n };\n ApolloLink.concat = function (first, second) {\n var firstLink = toLink(first);\n if (isTerminating(firstLink)) {\n globalThis.__DEV__ !== false && invariant.warn(47, firstLink);\n return firstLink;\n }\n var nextLink = toLink(second);\n var ret;\n if (isTerminating(nextLink)) {\n ret = new ApolloLink(function (operation) {\n return firstLink.request(operation, function (op) { return nextLink.request(op) || Observable.of(); }) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return (firstLink.request(operation, function (op) {\n return nextLink.request(op, forward) || Observable.of();\n }) || Observable.of());\n });\n }\n return Object.assign(ret, { left: firstLink, right: nextLink });\n };\n ApolloLink.prototype.split = function (test, left, right) {\n return this.concat(ApolloLink.split(test, left, right || new ApolloLink(passthrough)));\n };\n ApolloLink.prototype.concat = function (next) {\n return ApolloLink.concat(this, next);\n };\n ApolloLink.prototype.request = function (operation, forward) {\n throw newInvariantError(48);\n };\n /**\n * @deprecated `onError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.onError = function (error, observer) {\n if (globalThis.__DEV__ !== false) {\n warnDeprecated(\"onError\", function () {\n globalThis.__DEV__ !== false && invariant.warn(49);\n });\n }\n if (observer && observer.error) {\n observer.error(error);\n // Returning false indicates that observer.error does not need to be\n // called again, since it was already called (on the previous line).\n // Calling observer.error again would not cause any real problems,\n // since only the first call matters, but custom onError functions\n // might have other reasons for wanting to prevent the default\n // behavior by returning false.\n return false;\n }\n // Throw errors will be passed to observer.error.\n throw error;\n };\n /**\n * @deprecated `setOnError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.setOnError = function (fn) {\n if (globalThis.__DEV__ !== false) {\n globalThis.__DEV__ !== false && invariant.warn(50);\n }\n this.onError = fn;\n return this;\n };\n return ApolloLink;\n}());\nexport { ApolloLink };\n//# sourceMappingURL=ApolloLink.js.map","import { __rest } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nexport function setContext(setter) {\n return new ApolloLink(function (operation, forward) {\n var request = __rest(operation, []);\n return new Observable(function (observer) {\n var handle;\n var closed = false;\n Promise.resolve(request)\n .then(function (req) { return setter(req, operation.getContext()); })\n .then(operation.setContext)\n .then(function () {\n // if the observer is already closed, no need to subscribe.\n if (closed)\n return;\n handle = forward(operation).subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n })\n .catch(observer.error.bind(observer));\n return function () {\n closed = true;\n if (handle)\n handle.unsubscribe();\n };\n });\n });\n}\n//# sourceMappingURL=index.js.map","import axios from \"axios\";\nexport const generateToken = async () => {\n const URL = import.meta.env.VITE_TOKEN_URL;\n const clientId = import.meta.env.VITE_CLIENT_ID;\n const clientSecret = import.meta.env.VITE_CLIENT_SECRET;\n if (!URL || !clientId || !clientSecret) {\n console.error(\"Missing token credentials\");\n throw new Error(\"Missing token credentials\");\n }\n const authHeader = \"Basic \" +\n btoa(encodeURIComponent(clientId) + \":\" + encodeURIComponent(clientSecret));\n try {\n const response = await axios.post(URL, new URLSearchParams({ grant_type: \"client_credentials\" }), // Only grant_type in body\n {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Authorization: authHeader,\n },\n });\n if (response.status === 200 && response.data.access_token) {\n return response.data.access_token;\n }\n else {\n console.error(\"Failed to fetch token:\", response.data);\n return null;\n }\n }\n catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error fetching token:\", error.response || error.message);\n }\n else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n","import { ApolloClient, InMemoryCache, createHttpLink } from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { generateToken } from \"../utils/generateToken\";\n\nconst BASE_URL = import.meta.env.VITE_BASE_URL;\n\nif (!BASE_URL) {\n console.error(\"Missing base URL\");\n throw new Error(\"Missing base URL\");\n}\n\nconst httpLink = createHttpLink({\n uri: `${BASE_URL}`,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n // Always get fresh token instead of storing it\n const token = await generateToken();\n\n return {\n headers: {\n ...headers,\n authorization: `Bearer ${token}`,\n },\n };\n});\n\nexport const apolloClient = new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: \"cache-and-network\",\n },\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApolloProvider } from \"@apollo/client\";\nimport ReduxProvider from \"../provider/reduxProvider\";\nimport TanyaShoppingAssistantStream from \"./tanya-shopping-assistent\";\nimport { apolloClient } from \"../graphQL/apollo-client\";\n\nconst TanyaWrapper = (props: any) => {\n \n const { tanyaConfig } = props;\n return (\n <ApolloProvider client={apolloClient}>\n <ReduxProvider>\n <TanyaShoppingAssistantStream tanyaConfig={tanyaConfig} />\n </ReduxProvider>\n </ApolloProvider>\n );\n};\n\nexport default TanyaWrapper;\n"],"names":["TanyaChatbotProvider","useEffect","style","css","initialState","storeSlice","createSlice","state","action","setStore","storeReducer","productSlice","setProduct","productReducer","store","configureStore","ReduxProvider","children","jsx","Provider","notifySFCC","basketId","event","Popover","props","PopoverPrimitive","PopoverTrigger","apiConfig","fetchTokenBmGrant","URL","response","axios","getHost","getSiteId","error","fetchExistingGuestCustomerToken","access_token","dwsid","clientId","shortCode","organisationId","authData","siteId","accessKey","expiresInKey","expires_in","_a","getSearchResults","query","serverUrl","basePath","token","res","host","getProductById","id","getInterestApi","customerId","customer_token","displayData","data","imageUrlArray","image","currencyFormatter","currencyCode","priceFormatter","_b","_c","initialCapital","text","stringReducer","length","formatStringToHtml","str","line","index","numberedPoint","useResponsiveProductsPerPage","getProductsPerPage","productsPerPage","setProductsPerPage","useState","handleResize","ProductCarousel","product","dispatch","useDispatch","startIndex","setStartIndex","nextProducts","prevIndex","prevProducts","getProduct","jsxs","prod","_d","ProductDisplay","chat","storeDetails","products","i","createBasket","addProductToBasket","fetchBasket","BASKET_ID_KEY","TOKEN_KEY","TOKEN_EXPIRY_KEY","EXPIRY_TIME","VERSION","setStoredBasketId","setStoredToken","expiryTime","ANIMATION_DURATION","ProductDisplayCard","addToCartPwa","useSelector","s","show","setShow","addToCart","toast","productData","_e","_f","customerData","basketIdFromCustomer","tokenExpiry","currentTime","newExpiryTime","fetchBasketResponse","_i","_j","basketResponse","_k","_l","_m","_n","_o","_p","viewMore","path","Fragment","e","group","_","Icon","TanyaShoppingAssistantStream","tanyaConfig","shoppingOptions","payloadMapping","productName","useRef","productId","productImage","productPrice","authDetails","setAuthDetails","isOpen","setIsOpen","isAnimating","setIsAnimating","isVisible","setIsVisible","adding","setAdding","isLoading","setIsLoading","productLoading","setProductLoading","inputText","setInputText","whom","setWhom","mapSnapshotToProduct","snap","chatHistory","setChatHistory","scrollRef","currentAccessToken","savedChatToken","savedHistory","accessToken","openPanel","closePanel","handleWhomSelection","selected","cachedToken","getJWTToken","tokenUrl","tokenPayload","tokenResponse","tokenData","expiresIn","getAuthDetails","clientID","organizationID","getInterests","customer_id","runSecondaryFlow","productTitle","points","interests","prev","msg","idx","user","isLoggedIn","invokeUrl","payload","reader","decoder","buffer","done","value","lines","jsonData","parsedData","handleSendMessage","question","newQuery","sanitizedWhom","keywords","getKeywords","sanitizeKeywords","keywordMatch","sanitizedKeywords","keyword","keys","responses","k","p","firstProduct","price","err","handleAddToCart","productToBeAdded","quantity","option","m","extendStatics","d","b","__extends","__","__assign","t","n","__rest","genericMessage","setPrototypeOf","obj","proto","InvariantError","_super","message","_this","invariant","condition","verbosityLevels","verbosityLevel","wrapConsoleMethod","name","method","version","maybe","thunk","untypedGlobal","prefixCounts","makeUniqueId","prefix","count","stringifyForDisplay","space","undefId","key","wrap","fn","args","arg0","getHandledErrorMsg","getFallbackErrorMsg","originalInvariant","newInvariantError","optionalParams","ApolloErrorMessageHandler","stringify","arg","messageArgs","global","getOperationName","doc","definition","x","currentContext","MISSING_VALUE","idCounter","makeSlotClass","context","callback","thisArg","slots","parent","saved","globalKey","globalHost","Slot","bind","noContext","_createForOfIteratorHelperLoose","o","allowArrayLike","it","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr","len","arr2","_defineProperties","target","descriptor","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","unsubscribe","closeSubscription","flushSubscription","queue","notifySubscription","type","observer","onNotify","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_proto","_proto2","_proto3","resolve","reject","_this2","C","_this3","_this4","hasSeed","hasValue","seed","acc","first","_this5","_len","sources","_key","startNext","next","v","_this6","subscriptions","outer","inner","completeIfDone","observable","_iterator","_step","item","_len2","items","_key2","symbolObservablePonyfill","root","result","Symbol","ponyfill","prototype","fakeObsSymbol","validateOperation","operation","OPERATION_FIELDS","createOperation","starting","setContext","getContext","transformOperation","transformedOperation","muteAllDeprecations","slot","isMuted","warnDeprecated","cb","passthrough","op","forward","toLink","handler","ApolloLink","isTerminating","link","request","links","y","test","left","right","leftLink","rightLink","ret","second","firstLink","nextLink","setter","handle","closed","req","generateToken","authHeader","BASE_URL","httpLink","createHttpLink","authLink","headers","apolloClient","ApolloClient","InMemoryCache","TanyaWrapper","ApolloProvider"],"mappings":"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","x_google_ignoreList":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}
|
|
1
|
+
{"version":3,"file":"tanya-chatbot.cjs.js","sources":["../src/inject-style.ts","../src/store/reducers/storeReducer.ts","../src/store/reducers/productReducer.ts","../src/store/index.ts","../src/components/provider/reduxProvider.tsx","../src/components/lib/utils.ts","../src/components/ui/popover.tsx","../src/config/api.ts","../src/components/utils/fetchTokenBmGrant.ts","../src/components/utils/fetchExistingRegisterCustomerToken.ts","../src/sfcc-apis/session/index.ts","../src/components/utils/index.ts","../src/components/utils/helper.js","../src/components/carousel/ProductCarousel.tsx","../src/components/carousel/ProductDisplay.tsx","../src/components/api/api.ts","../src/config/constant.ts","../src/components/utils/localStorage.ts","../src/components/product/ProductDisplayCard.tsx","../src/components/tanya-widget/tanya-shopping-assistent.tsx","../node_modules/tslib/tslib.es6.mjs","../node_modules/ts-invariant/lib/invariant.js","../node_modules/@apollo/client/version.js","../node_modules/@apollo/client/utilities/globals/maybe.js","../node_modules/@apollo/client/utilities/globals/global.js","../node_modules/@apollo/client/utilities/common/makeUniqueId.js","../node_modules/@apollo/client/utilities/common/stringifyForDisplay.js","../node_modules/@apollo/client/utilities/globals/invariantWrappers.js","../node_modules/@apollo/client/utilities/graphql/getFromAST.js","../node_modules/@wry/context/lib/slot.js","../node_modules/@wry/context/lib/index.js","../node_modules/optimism/lib/context.js","../node_modules/zen-observable-ts/module.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/@apollo/client/utilities/observables/Observable.js","../node_modules/@apollo/client/link/utils/validateOperation.js","../node_modules/@apollo/client/link/utils/createOperation.js","../node_modules/@apollo/client/link/utils/transformOperation.js","../node_modules/@apollo/client/utilities/deprecation/index.js","../node_modules/@apollo/client/link/core/ApolloLink.js","../node_modules/@apollo/client/link/context/index.js","../src/components/utils/generateToken.js","../src/components/graphQL/apollo-client.ts","../src/components/tanya-widget/TanyaWrapper.tsx"],"sourcesContent":["import css from \"./index.css?inline\";\nimport { useEffect } from \"react\";\n\nexport function TanyaChatbotProvider() {\n useEffect(() => {\n if (typeof document !== \"undefined\") {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }\n }, []);\n\n return null;\n}\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { Store } from \"../../components/graphQL/queries/types\";\n\ninterface StoreState {\n store?: Store;\n}\n\nconst initialState: StoreState = {\n store: {\n storeCode: \"\",\n storeName: \"\",\n storeDescription: \"\",\n activeCatalogId: 0,\n isDefault: false,\n logoDarkBg: \"\",\n logoLightBg: \"\",\n logoTransparent: \"\",\n catalogs: [],\n themeColor: \"\",\n themeContrastColor: \"\",\n tanyaThemeColor: \"\",\n tanyaThemeColorLight: \"\",\n favicon: \"\",\n websiteTitle: \"\",\n flowId: \"\",\n aliasId: \"\",\n searchConfigs: {\n endpoint: \"\",\n accessKey: \"\",\n secretKey: \"\",\n },\n homePageCategories: [],\n carouselImages: {\n web: [],\n mobile: [],\n },\n otherImages: {\n web: [],\n mobile: [],\n },\n },\n};\n\nexport const storeSlice = createSlice({\n name: \"store\",\n initialState,\n reducers: {\n setStore: (state, action: PayloadAction<Store>) => {\n state.store = action.payload;\n },\n },\n});\n\nexport const { setStore } = storeSlice.actions;\n\nexport default storeSlice.reducer;\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { SearchProduct } from \"../../components/graphQL/queries/types\";\n\ninterface ProductState {\n product: SearchProduct | null;\n}\n\nconst initialState: ProductState = {\n product: null,\n};\n\nexport const productSlice = createSlice({\n name: \"product\",\n initialState,\n reducers: {\n setProduct: (state, action: PayloadAction<SearchProduct | null>) => {\n state.product = action.payload;\n },\n },\n});\n\nexport const { setProduct } = productSlice.actions;\n\nexport default productSlice.reducer;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport storeReducer from \"./reducers/storeReducer\";\nimport productReducer from \"./reducers/productReducer\";\n\nconst store = configureStore({\n reducer: {\n store: storeReducer,\n product: productReducer,\n },\n});\n\nexport default store;\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n","import { Provider } from \"react-redux\";\nimport store from \"../../store\";\n\nconst ReduxProvider = ({ children }: { children: React.ReactNode }) => {\n return <Provider store={store}>{children}</Provider>;\n};\n\nexport default ReduxProvider;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const notifySFCC = ( basketId?: string) => {\n const event = new CustomEvent(\"reactCartUpdated\", {\n detail: {\n cartUpdated: true,\n basketId,\n },\n });\n window.dispatchEvent(event);\n};\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\n\r\nimport { cn } from \"../lib/utils\";\r\n\r\nfunction Popover({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\r\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\r\n}\r\n\r\nfunction PopoverTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\r\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\r\n}\r\n\r\nfunction PopoverContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\r\n return (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n data-slot=\"popover-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction PopoverAnchor({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\r\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\r\n}\r\n\r\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\r\n","function stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n// Helper function to convert ArrayBuffer to hex string\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n const byteArray = new Uint8Array(buffer);\n const hexCodes = [...byteArray].map((value) => {\n const hexCode = value.toString(16);\n const paddedHexCode = hexCode.padStart(2, \"0\");\n return paddedHexCode;\n });\n return hexCodes.join(\"\");\n}\n\n// SHA256 hash using Web Crypto API\nasync function sha256(data: string): Promise<ArrayBuffer> {\n const encoder = new TextEncoder();\n return await crypto.subtle.digest(\"SHA-256\", encoder.encode(data));\n}\n\n// HMAC-SHA256 using Web Crypto API\nasync function hmacSha256(\n key: ArrayBuffer | Uint8Array,\n data: string\n): Promise<ArrayBuffer> {\n const cryptoKey = await crypto.subtle.importKey(\n \"raw\",\n key,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n\n const encoder = new TextEncoder();\n return await crypto.subtle.sign(\"HMAC\", cryptoKey, encoder.encode(data));\n}\n\n// Get signing key\nasync function getSignatureKey(\n key: string,\n dateStamp: string,\n regionName: string,\n serviceName: string\n): Promise<ArrayBuffer> {\n const kDate = await hmacSha256(stringToUint8Array(\"AWS4\" + key), dateStamp);\n const kRegion = await hmacSha256(kDate, regionName);\n const kService = await hmacSha256(kRegion, serviceName);\n const kSigning = await hmacSha256(kService, \"aws4_request\");\n return kSigning;\n}\n\nexport async function createSignedHeaders(\n url: string,\n method: string,\n payload: string,\n accessKeyId: string,\n secretAccessKey: string,\n region: string,\n service: string\n): Promise<Record<string, string>> {\n const urlObj = new URL(url);\n const host = urlObj.hostname;\n const pathname = urlObj.pathname;\n const search = urlObj.search;\n\n const now = new Date();\n const amzDate = now.toISOString().replace(/[:\\-]|\\.\\d{3}/g, \"\");\n const dateStamp = amzDate.substring(0, 8);\n const payloadHash = arrayBufferToHex(await sha256(payload));\n const contentLength = new TextEncoder().encode(payload).length.toString();\n\n const canonicalHeaders =\n `content-length:${contentLength}\\n` +\n `content-type:application/json\\n` +\n `host:${host}\\n` +\n `x-amz-content-sha256:${payloadHash}\\n` +\n `x-amz-date:${amzDate}\\n`;\n\n const signedHeaders =\n \"content-length;content-type;host;x-amz-content-sha256;x-amz-date\";\n\n const canonicalRequest = [\n method,\n pathname,\n search.slice(1),\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join(\"\\n\");\n\n const algorithm = \"AWS4-HMAC-SHA256\";\n const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n const stringToSign = [\n algorithm,\n amzDate,\n credentialScope,\n arrayBufferToHex(await sha256(canonicalRequest)),\n ].join(\"\\n\");\n\n const signingKey = await getSignatureKey(\n secretAccessKey,\n dateStamp,\n region,\n service\n );\n\n const signature = arrayBufferToHex(\n await hmacSha256(signingKey, stringToSign)\n );\n\n const authorizationHeader = `${algorithm} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n return {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": contentLength,\n \"X-Amz-Content-Sha256\": payloadHash,\n \"X-Amz-Date\": amzDate,\n Authorization: authorizationHeader,\n };\n}\n\nexport const apiConfig = () => {\n const aiConversationUrl = `https://mdv3qwfi2j.execute-api.us-east-1.amazonaws.com/dev/api/bedrock/invoke/stream`;\n const xAPIKey = \"BJBtjpPkqGatuoa3qJqdR8aHXSsHkgvGaootbubi\";\n // const serverUrl = \"https://tanya-sfcc-server.vercel.app/\";\n const serverUrl = import.meta.env.VITE_SERVER_BASE_URL;\n // const serverUrl = \"\";\n const basePath = import.meta.env.VITE_SCAPI_ENVIRONMENT ? \"sc-api\" : \"api\";\n\n return { aiConversationUrl, xAPIKey, serverUrl, basePath };\n};\n","import axios from \"axios\";\r\nimport { getHost, getSiteId } from \".\";\r\n\r\n// email:password:client need to be pass in encrypt form in the auth of fetchTokenBmGrant\r\n\r\n// email:password:client is different from user to user\r\nexport const fetchTokenBmGrant = async () => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-bm-grant?baseUrl=${getHost()}&siteId=${getSiteId()}`\r\n );\r\n if (response.status === 200 && response.data.access_token) {\r\n return response.data.access_token;\r\n } else {\r\n console.error(\"Failed to fetch token:\", response.data);\r\n return null;\r\n }\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error fetching token:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","import axios from \"axios\";\r\nimport { clientId, getHost, getSiteId, organisationId, shortCode } from \".\";\r\n\r\ninterface Customer {\r\n access_token: string;\r\n customerId: string;\r\n}\r\n\r\n// function getCookie(name: string): string | null {\r\n// const value = `; ${document.cookie}`;\r\n// console.log(\"parts\", value,value.includes(\"dwsid\"));\r\n// const parts = value.split(`; ${name}=`);\r\n// if (parts.length === 2) return parts.pop()?.split(\";\").shift() || null;\r\n// return null;\r\n// }\r\n\r\nexport const fetchExistingRegisterCustomerToken = async ({\r\n access_token,\r\n customerId,\r\n}: Customer) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-register-customer/${customerId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n // console.log(\"customer token res fe\", response.data)\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n\r\nexport const fetchExistingGuestCustomerToken = async (\r\n access_token: string,\r\n) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const dwsid = JSON.parse(sessionStorage.getItem(\"customerData\")|| \"{}\").dwsid // fetch cookie\r\n\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-guest-customer?dwsid=${dwsid}&baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","import axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../../components/utils\";\n\nexport async function authData() {\n if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n return \"\";\n }\n const siteId = getSiteId();\n const accessKey = \"access_token\" + \"_\" + siteId;\n const expiresInKey = \"expires_in\" + \"_\" + siteId;\n const expires_in = localStorage.getItem(expiresInKey);\n const access_token = localStorage.getItem(accessKey);\n console.log(access_token);\n const isGuest =\n JSON.parse(sessionStorage.getItem(\"customerData\") || \"{}\")?.isGuest || true;\n // if (\n // expires_in &&\n // access_token &&\n // new Date().getTime() < parseInt(expires_in)\n // // && (isGuest === localStorage.getItem(\"isGuest\") || \"true\")\n // ) {\n console.log(\"access token found in local storage\");\n return { access_token, expires_in };\n // }\n // const { serverUrl } = apiConfig();\n // const dwsid = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).dwsid;\n\n // const customerMail = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).usrRef;\n\n // try {\n // const endpoint = isGuest ? \"unregister-auth\" : \"register-auth\";\n // const res = await axios.get(\n // `${serverUrl}sc-api/${endpoint}?dwsid=${dwsid}&email=${customerMail}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}&siteId=${getSiteId()}&token=true`,\n // {\n // withCredentials: true,\n // }\n // );\n // // localStorage.setItem(accessKey, res.data.access_token);\n // // localStorage.setItem(\n // // expiresInKey,\n // // String(new Date().getTime() + res.data.expires_in * 1000)\n // // );\n // // localStorage.setItem(\"isGuest\", isGuest ? \"true\" : \"false\");\n // return res.data;\n // } catch (err) {\n // console.log(err);\n // }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport { fetchTokenBmGrant } from \"./fetchTokenBmGrant\";\nimport { fetchExistingGuestCustomerToken } from \"./fetchExistingRegisterCustomerToken\";\nimport { authData } from \"../../sfcc-apis/session\";\n\nexport const getHost = () => {\n const host = sessionStorage.getItem(\"Host\");\n return host;\n};\n\nexport const getSiteId = () => {\n const siteId = sessionStorage.getItem(\"SiteId\");\n return siteId;\n};\n\nexport const clientId = () => {\n const clientId = sessionStorage.getItem(\"pubCfg\");\n return clientId;\n};\n\nexport const shortCode = () => {\n const shortCode = sessionStorage.getItem(\"envRef\");\n return shortCode;\n};\n\nexport const organisationId = () => {\n const orgRef = sessionStorage.getItem(\"orgRef\");\n return orgRef;\n};\n\nexport const getSearchResults = async (query: string) => {\n console.log('fetching results');\n const { serverUrl, basePath } = apiConfig();\n let token = \"\";\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n const res = await authData();\n console.log(\"the token from getSearchResults\", res);\n token = res.access_token;\n }\n\n try {\n const host = getHost();\n const response = await axios.get(\n `${serverUrl}${basePath}/search-sfcc?baseUrl=${host}&query=${query}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n return response.data.hits;\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n throw error;\n }\n};\n\nexport const getProductById = async (id: number | string) => {\n if (!id) throw new Error(\"Product ID is required\");\n const { serverUrl, basePath } = apiConfig();\n const host = getHost();\n console.log(\"calling access\");\n const { access_token } = await authData();\n const response = await axios.get(\n `${serverUrl}${basePath}/product-sfcc/${id}?baseUrl=${host}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${access_token}`,\n },\n }\n );\n\n return response.data;\n};\n\nexport const getInterestApi = async (customerId: any) => {\n if (!customerId) throw new Error(\"customerId is required\");\n const access_token = await fetchTokenBmGrant();\n\n const { customer_token } = await fetchExistingGuestCustomerToken(\n access_token\n );\n const { serverUrl, basePath } = apiConfig();\n const data = await authData();\n const token = data.access_token;\n\n const response = await axios.get(\n `${serverUrl}${basePath}/get-interest?baseUrl=${getHost()}&customerId=${customerId}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: import.meta.env.VITE_SCAPI_ENVIRONMENT\n ? `Bearer ${token}`\n : `${customer_token}`,\n },\n }\n );\n\n return response.data;\n};\n","import CryptoJS from \"crypto-js\";\nconst SECRET_KEY = \"admin_one\";\nexport const displayData = (data) => {\n if (typeof data === \"string\") {\n return String(data);\n }\n return String(data[\"en-US\"] || data);\n};\nexport const imageUrlArray = (data) => {\n if (data?.image) {\n return [data.image];\n }\n else if (\"variants\" in data) {\n return data.variants[0].images;\n }\n return data.masterVariant.images.map((image) => image.url);\n};\nexport const currencyFormatter = (data, currencyCode) => {\n return data.toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: currencyCode || \"USD\",\n });\n};\nexport const priceFormatter = (data) => {\n if (\"variants\" in data) {\n return {\n centAmount: data.variants[0]?.prices.EUR.max,\n currencyCode: \"DOL\",\n };\n }\n return {\n centAmount: data.masterVariant?.prices[0].value.centAmount,\n currencyCode: data.masterVariant?.prices[0].value.currencyCode,\n };\n};\nexport const encryptData = (data) => {\n return CryptoJS.AES.encrypt(JSON.stringify(data), SECRET_KEY).toString();\n};\nexport const decryptData = (cipherText) => {\n const bytes = CryptoJS.AES.decrypt(cipherText, SECRET_KEY);\n return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n};\nexport const initialCapital = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nexport const laterDate = (day) => {\n const fiveDaysLater = new Date();\n fiveDaysLater.setDate(fiveDaysLater.getDate() + day);\n const formattedDate = fiveDaysLater.toLocaleDateString(\"en-US\", {\n day: \"numeric\",\n month: \"long\",\n });\n return formattedDate;\n};\nexport const stringReducer = (text, length) => {\n return text.length < length ? text : text.slice(0, length) + \"...\";\n};\nexport const formatStringToHtml = (str) => {\n return str\n .split(\"\\\\n\")\n .map((line, index) => {\n const numberedPoint = line.match(/^(\\d+)\\.\\s(.+)/);\n if (numberedPoint) {\n return `<p key=${index} class=\"mb-2\"><strong>${numberedPoint[1]}.</strong> ${numberedPoint[2]}</p>`;\n }\n return line.trim() ? `<p key=${index} class=\"mb-2\">${line}</p>` : \"<br/>\";\n })\n .join(\"\");\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useDispatch } from \"react-redux\";\nimport type { SearchProduct } from \"../graphQL/queries/types\";\nimport {\n stringReducer,\n priceFormatter,\n currencyFormatter,\n displayData,\n imageUrlArray,\n} from \"../utils/helper\";\nimport { useEffect, useState } from \"react\";\nimport { setProduct } from \"../../store/reducers/productReducer\";\nimport { getProductById } from \"../utils\";\n\nfunction useResponsiveProductsPerPage() {\n const getProductsPerPage = () => {\n if (window.innerWidth < 425) return 1; // Below Mobile-L\n if (window.innerWidth < 768) return 2; // Mobile-L to md\n return 4; // md and above\n };\n\n const [productsPerPage, setProductsPerPage] = useState(getProductsPerPage);\n\n useEffect(() => {\n const handleResize = () => setProductsPerPage(getProductsPerPage());\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return productsPerPage;\n}\n\nconst ProductCarousel = ({\n product,\n}: // storeDetails,\n{\n product: SearchProduct[];\n storeDetails: any;\n}) => {\n const dispatch = useDispatch();\n // const selectedProduct = useSelector((state: any) => state.product.product);\n const productsPerPage = useResponsiveProductsPerPage();\n const [startIndex, setStartIndex] = useState(0);\n\n const nextProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex + productsPerPage >= product.length\n ? 0\n : prevIndex + productsPerPage\n );\n };\n\n const prevProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex - productsPerPage < 0\n ? product.length - (product.length % productsPerPage || productsPerPage)\n : prevIndex - productsPerPage\n );\n };\n\n const getProduct = async (id: number | string) => {\n const product = await getProductById(id);\n dispatch(setProduct(product));\n };\n\n return (\n <div className=\"mt-2 overflow-x-hidden\">\n <div className=\"flex items-center justify-center gap-4 relative\">\n {product?.length > productsPerPage && (\n <button\n onClick={prevProducts}\n className=\"absolute z-50 left-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-left\" width=\"25\" /> */}\n <\n </button>\n )}\n\n <div className=\"flex gap-5 justify-center flex-1 overflow-hidden\">\n {product\n .slice(startIndex, startIndex + productsPerPage)\n .map((prod) => (\n <div\n key={prod.productId}\n className=\"flex-shrink-0 flex flex-col w-[150px] h-[200px] p-2 items-center justify-between cursor-pointer bg-[#FFFFFF] rounded-[10px] shadow-[0px_2px_2px_0px_#9292BC40]\"\n onClick={() => {\n getProduct(prod.product_id ?? prod.productId);\n }}\n >\n {/* Image */}\n <div className=\"w-full p-2 flex items-center justify-center bg-white\">\n <img\n src={\n imageUrlArray(prod)[0]?.link ||\n imageUrlArray(prod)[0] || // fallback if it's a string\n \"https://via.placeholder.com/120\"\n }\n alt={prod?.productName ? prod.productName : \"Product\"}\n className=\"w-28 h-28 rounded-[10px] transition-transform duration-300 hover:scale-125 object-cover\"\n />\n </div>\n\n {/* Price & Name */}\n <div\n className=\"text-white w-full p-2 text-[12px] text-center h-[60px]\"\n // style={{ background: storeDetails.tanyaThemeColor }}\n >\n <div className=\"relative inline-block group\">\n <div className=\"w-full line-clamp-1 overflow-hidden text-ellipsis text-[#000000] font-medium font-nunitoSans\">\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n\n {/* Tooltip */}\n <div\n className=\"absolute left-0 top-full mt-1 w-max max-w-[200px] p-2 bg-white shadow-lg text-black text-xs rounded opacity-0 transition-opacity duration-300 group-hover:opacity-100 z-50 pointer-events-auto\"\n style={{\n position: \"absolute\",\n top: \"-100%\",\n left: \"0\",\n marginBottom: \"5px\",\n zIndex: 50,\n }}\n >\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n </div>\n <div className=\" flex text-center items-center gap-2 text-[14px] text-[#14121F] font-bold font-nunitoSans text-base mb-1\">\n <p>\n {currencyFormatter(\n prod?.price\n ? Number(prod?.price)\n : priceFormatter(prod).centAmount || 0,\n priceFormatter(prod)?.currencyCode\n )}\n </p>\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans truncate\">\n ${Number(prod?.price).toFixed(2) ?? 0 + 5}\n </p>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {product?.length > productsPerPage && (\n <button\n onClick={nextProducts}\n className=\"absolute z-50 right-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-right\" width=\"25\" /> */}\n >\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default ProductCarousel;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ProductCarousel from \"./ProductCarousel\";\nimport { initialCapital } from \"../utils/helper\";\n\nconst ProductDisplay = ({ chat, storeDetails }: any) => {\n return (\n <div className=\"bg-[#FFFFFF] px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\">\n {chat.map((products: any, i: number) => (\n <div\n key={i}\n className=\"mb-4 p-3 rounded-xl\"\n style={{ \n background: \"linear-gradient(109.52deg, #F0EEF5 36.91%, #F4F3EE 100.34%\",\n // backgroundColor: storeDetails.tanyaThemeColorLight \n }} // slightly darker grey // light grey section bg\n >\n <div\n className=\"font-nunitoSans font-bold text-sm text-[#494949] p-2 w-fit rounded-[20px]\"\n // style={{\n // color: storeDetails?.tanyaThemeContrastColor,\n // border: `1px solid ${storeDetails.tanyaThemeColor}`,\n // backgroundColor: storeDetails.tanyaThemeColor,\n // }}\n >\n {initialCapital(products.keyword) || \"No keyword\"}\n </div>\n\n <ProductCarousel\n product={products.items}\n storeDetails={storeDetails}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default ProductDisplay;\n","import { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getHost,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../utils\";\nimport { getAccessToken } from \"../utils/getAccessToken\";\nimport axios from \"axios\";\n\nexport const fetchStoreConfig = async (storeCode: string) => {\n try {\n const token = await getAccessToken();\n const { serverUrl } = apiConfig();\n const response = await axios.get(\n `${serverUrl}api/logo?storeCode=${storeCode}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return response.data;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n return error;\n // console.error(\"Error fetching logo details:\", error);\n }\n};\n\ninterface Product {\n product_id: string;\n quantity: number;\n}\n\nexport const createBasket = async (customer_token: string, data?: any) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/create?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n data,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n window.postMessage(\n {\n type: \"WIDGET_CREATED_BASKET\",\n basketId: response.data?.basket_id || response.data?.basketId,\n },\n \"*\"\n );\n\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error creating basket:\", error.response || error.message);\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const addProductToBasket = async (\n basketId: string,\n products: Product[],\n customer_token: string\n) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/add-product/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n products,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n\n if (response.status === 200 && response.data) {\n return response.data;\n }\n return null;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\n \"Error adding products to basket:\",\n error.response || error.message\n );\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const fetchBasket = async ({\n basketId,\n customer_token,\n}: {\n basketId: string;\n customer_token: string;\n}) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.get(\n `${URL}${basePath}/basket/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n return { status: response.status, data: response.data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return { status: error.response?.status, data: null };\n } else {\n return { status: null, data: null };\n }\n }\n};\n","export const BASKET_ID_KEY = \"sfcc_basket_id\";\r\nexport const TOKEN_KEY = \"sfcc_customer_token\";\r\nexport const TOKEN_EXPIRY_KEY = \"sfcc_token_expiry\";\r\n\r\nexport const EXPIRY_TIME = 5 * 60 * 1000; // 5 minutes in milliseconds\r\nexport const BUFFER_TIME = 10 * 1000; // 10 seconds buffer before expiry\r\nexport const VERSION = \"1.0.0\";","import {\r\n BASKET_ID_KEY,\r\n EXPIRY_TIME,\r\n TOKEN_EXPIRY_KEY,\r\n TOKEN_KEY,\r\n} from \"../../config/constant\";\r\n\r\nexport const getStoredBasketId = (): string | null => {\r\n try {\r\n return localStorage.getItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading basket ID from storage:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredBasketId = (basketId: string | null): void => {\r\n try {\r\n if (basketId) {\r\n localStorage.setItem(BASKET_ID_KEY, basketId);\r\n } else {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error saving basket ID to storage:\", error);\r\n }\r\n};\r\n\r\nexport const clearBasketStorage = (): void => {\r\n try {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error clearing basket storage:\", error);\r\n }\r\n};\r\n\r\nexport const getStoredToken = (): string | null => {\r\n try {\r\n return localStorage.getItem(TOKEN_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading token:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredToken = (token: string | null): void => {\r\n try {\r\n if (token) {\r\n localStorage.setItem(TOKEN_KEY, token);\r\n const expiryTime = Date.now() + EXPIRY_TIME;\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, expiryTime.toString());\r\n } else {\r\n localStorage.removeItem(TOKEN_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error storing token:\", error);\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useEffect, useState } from \"react\"; // Add useMemo here when uncomment the color, size, width code\r\n// import { useEffect, useMemo, useState } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { setProduct } from \"../../store/reducers/productReducer\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\n// import { fetchTokenSFCC } from \"../utils/fetchTokenSFCC\";\r\nimport {\r\n getStoredBasketId,\r\n // getStoredToken,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { toast } from \"react-toastify\";\r\nimport { BASKET_ID_KEY, TOKEN_EXPIRY_KEY } from \"../../config/constant\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport {\r\n // fetchExistingRegisterCustomerToken,\r\n fetchExistingGuestCustomerToken,\r\n} from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { authData } from \"../../sfcc-apis/session\";\r\n\r\nconst ANIMATION_DURATION = 300; // ms\r\n\r\nconst ProductDisplayCard = ({ addToCartPwa }) => {\r\n const dispatch = useDispatch();\r\n const product = useSelector((state: any) => state.product.product);\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const [show, setShow] = useState(!!product);\r\n\r\n useEffect(() => {\r\n setShow(!!product);\r\n }, [product]);\r\n\r\n if (!product) return null;\r\n\r\n // const { sizeAttr, colorAttr, widthAttr } = attributes;\r\n\r\n const addToCart = async () => {\r\n try {\r\n // Check if product and variants exist\r\n\r\n if (\r\n !product?.variants?.[0]?.product_id &&\r\n !(product.type.item || product.type.bundle) &&\r\n !product?.variants?.[0]?.productId\r\n ) {\r\n toast.error(\"Variants not available\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ];\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n let customer_token = \"\";\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n const authDetails = await authData();\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n } else {\r\n console.log(\"token from bm grant\");\r\n const access_token = await fetchTokenBmGrant();\r\n const customerTokenData = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n customer_token = customerTokenData.customer_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n\r\n // const response = await addToCartPwa(\r\n // productData\r\n // // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n\r\n const basketResponse = await createBasket(customer_token, data);\r\n if (!basketResponse?.basket_id && !basketResponse?.basketId) {\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // else if (basketResponse?.basketId) {\r\n // toast.success(`Added to cart`, {\r\n // position: \"bottom-right\",\r\n // autoClose: 3000,\r\n // hideProgressBar: false,\r\n // closeOnClick: true,\r\n // pauseOnHover: true,\r\n // draggable: true,\r\n // });\r\n // }\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n console.log(\"adding product to basket\");\r\n const response = await addProductToBasket(\r\n basketResponse?.basket_id || basketResponse?.basketId,\r\n productData,\r\n customer_token\r\n );\r\n // const response = await addToCartPwa(\r\n // productData,\r\n // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n console.log(\"object added to basket\");\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n return;\r\n }\r\n\r\n const response = await addProductToBasket(\r\n basketId,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n };\r\n\r\n // Function to generate and redirect to the product detail page\r\n const viewMore = () => {\r\n if (!product) return;\r\n const path = window.location.origin +\"/product/\" +product.id;\r\n console.log(\"path\", path);\r\n window.location.href = path; //redirect to sfcc product details url\r\n };\r\n console.log(product, \"the prod\");\r\n return (\r\n <>\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(() => dispatch(setProduct(null)), ANIMATION_DURATION);\r\n }}\r\n />\r\n <div\r\n className={`\r\n flex flex-col gap-2 items-center h-[90vh] absolute right-0 bottom-0 z-50 w-full md:w-1/2 md:h-[100vh] lg:w-1/2 lg:h-[100vh] shadow-xl p-2 border-l-2 bg-white border-gray-200 overflow-y-scroll\r\n transition-all duration-300\r\n ${\r\n show\r\n ? \"translate-y-0 md:translate-y-0 md:translate-x-0 opacity-100\"\r\n : \"translate-y-full md:translate-y-0 md:translate-x-full opacity-0 pointer-events-none\"\r\n }\r\n `}\r\n style={{ willChange: \"transform, opacity\" }}\r\n // Prevent click inside card from closing\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* name and close button */}\r\n <div className=\"mt-3 flex flex-row justify-between w-full \">\r\n <div>\r\n <p className=\"text-[#000000] font-bold font-nunitoSans\">\r\n {product.name}\r\n </p>\r\n </div>\r\n <div>\r\n <div\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n >\r\n ✕\r\n </div>\r\n {/* <Icon\r\n icon=\"mdi:close\"\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n /> */}\r\n </div>\r\n </div>\r\n {/* image and variants */}\r\n <div className=\"flex flex-row gap-2 items-center flex-wrap\">\r\n <div className=\"flex flex-row items-center justify-center w-[120px] h-[120px] my-5\">\r\n <img\r\n src={\r\n import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups?.[0]?.images?.[0]?.link\r\n : product.image_groups?.[0]?.images?.[0]?.link ||\r\n \"https://via.placeholder.com/120\"\r\n }\r\n alt={product.name}\r\n className=\"rounded-[10px]\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col items-center gap-2\">\r\n {(import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups\r\n : product.image_groups\r\n )\r\n .slice(1, 2)\r\n .map((group: any) =>\r\n group.images\r\n .slice(1, 2)\r\n .map((image: any) => (\r\n <img\r\n key={image.link}\r\n src={image.link}\r\n alt={product.name}\r\n className=\"rounded-[10px] w-[60px] h-[60px]\"\r\n />\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n {/* price and discount */}\r\n <div className=\"flex flex-row items-center justify-between w-full\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <p className=\"text-[#14121F] font-bold font-nunitoSans\">\r\n {\" \"}\r\n ${product.price.toFixed(2)}\r\n </p>{\" \"}\r\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans\">\r\n {\" \"}\r\n ${(product.price + 5).toFixed(2)}\r\n </p>\r\n </div>\r\n <div>\r\n <p className=\"text-[#EC5050] font-bold font-nunitoSans\">\r\n {product.discount}\r\n </p>\r\n </div>\r\n </div>\r\n {/* horizontal line */}\r\n <div className=\"mt-2 w-full border-t-2 border-gray-200\"></div>\r\n <div className=\"w-full text-left\">\r\n <div className=\"text-[#323135] font-bold font-nunitoSans mt-3 text-[14px]\">\r\n Product Details\r\n </div>\r\n <div\r\n className=\"text-[#68656E] font-normal font-nunitoSans text-xs pl-2 mt-3\"\r\n dangerouslySetInnerHTML={{\r\n __html: product.short_description || product.longDescription,\r\n }}\r\n ></div>\r\n </div>\r\n {/* rating and reviews */}\r\n <div className=\"mt-4 flex flex-col gap-2 w-full p-2\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <div className=\"flex items-center gap-2 text-left font-nunitoSans\">\r\n <div className=\"text-[#323135] font-bold\">\r\n {product?.rating?.rate || 0} /{\" \"}\r\n <span className=\"text-[#68656E]\">5</span>\r\n </div>\r\n <div className=\"text-[#323135] font-semibold text-sm\">\r\n Overall Rating\r\n </div>\r\n <div className=\"text-[#68656E] font-semibold text-sm\">\r\n {product?.rating?.count || 0} ratings\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"mt-2 flex flex-row items-center gap-2\">\r\n {Array.from({ length: 5 }).map((_, index) => (\r\n <Icon\r\n key={index}\r\n icon=\"mdi:star\"\r\n width=\"20\"\r\n height=\"20\"\r\n className={`text-yellow-500 \r\n ${\r\n product?.rating?.rate > index\r\n ? \"text-yellow-500\"\r\n : \"text-gray-300\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"flex flex-col items-center justify-between font-nunitoSans font-semibold w-5/6 text-black gap-2\"\r\n style={{ marginTop: \"40px\" }}\r\n >\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={addToCart}\r\n >\r\n Add to Cart\r\n </button>\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer mb-16\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={viewMore}\r\n >\r\n View more\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ProductDisplayCard;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { Popover, PopoverTrigger } from \"../ui/popover\";\r\nimport { getInterestApi, getProductById, getSearchResults } from \"../utils\";\r\nimport type { SearchProduct } from \"../graphQL/queries/types\";\r\nimport { formatStringToHtml } from \"../utils/helper\";\r\nimport ProductDisplay from \"../carousel/ProductDisplay\";\r\nimport { useSelector } from \"react-redux\";\r\nimport ProductDisplayCard from \"../product/ProductDisplayCard\";\r\nimport { toast } from \"react-toastify\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport { fetchExistingGuestCustomerToken } from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport {\r\n BASKET_ID_KEY,\r\n TOKEN_EXPIRY_KEY,\r\n VERSION,\r\n} from \"../../config/constant\";\r\nimport {\r\n getStoredBasketId,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { authData } from \"../../sfcc-apis/session\";\r\n\r\ntype ProductSnapshot = {\r\n id: string;\r\n name: string;\r\n image: string | null;\r\n price: number | null;\r\n points: number;\r\n quantity: number;\r\n};\r\n\r\nconst TanyaShoppingAssistantStream = ({\r\n tanyaConfig,\r\n basketId,\r\n addToCart,\r\n}: {\r\n tanyaConfig?: any;\r\n basketId?: string;\r\n addToCart?: any;\r\n}) => {\r\n // Shopping options\r\n const shoppingOptions = [\r\n \"Myself\",\r\n \"My Child\",\r\n \"My Grandchild\",\r\n \"Niece/Nephew\",\r\n \"My Friends\",\r\n \"Others\",\r\n ];\r\n\r\n const payloadMapping: Record<string, string> = {\r\n Myself: \"himself/herself\",\r\n \"My Child\": \"his/her child\",\r\n \"My Grandchild\": \"his/her grandchild\",\r\n \"Niece/Nephew\": \"his/her niece/nephew\",\r\n \"My Friends\": \"his/her friends\",\r\n Others: \"others\",\r\n };\r\n const productName = useRef<string | null>(null);\r\n const productId = useRef<number | null>(null);\r\n const productImage = useRef<string | null>(null);\r\n const productPrice = useRef<number | null>(null);\r\n const [authDetails, setAuthDetails] = useState<any>(null);\r\n const lastChat = useRef(null);\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [isAnimating, setIsAnimating] = useState(false);\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [adding, setAdding] = useState<boolean>(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [productLoading, setProductLoading] = useState(false);\r\n const [inputText, setInputText] = useState(\"\");\r\n const [whom, setWhom] = useState(\"\");\r\n const mapSnapshotToProduct = (snap: ProductSnapshot): any => ({\r\n id: snap.id,\r\n title: snap.name,\r\n image: snap.image ?? \"\",\r\n price: snap.price ?? 0,\r\n });\r\n // const dispatch = useDispatch();\r\n\r\n const [chatHistory, setChatHistory] = useState<\r\n {\r\n query: string;\r\n response: string;\r\n potentialQuestions: string;\r\n products?: { keyword: string; items: SearchProduct[] }[];\r\n keywords: string;\r\n noResults?: boolean;\r\n secondaryResponse?: string;\r\n secondaryLoading?: boolean;\r\n productSnapshot?: ProductSnapshot; // NEW\r\n }[]\r\n >([]);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n // const storeCode =\r\n // searchParams.get(\"storeCode\") || localStorage.getItem(\"storeCode\");\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const product = useSelector((s: any) => s.product.product);\r\n\r\n // Runs once on mount\r\n useEffect(() => {\r\n const currentAccessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n const savedChatToken = localStorage.getItem(\r\n `chat-token-${tanyaConfig.siteId}`\r\n );\r\n\r\n if (currentAccessToken && savedChatToken === currentAccessToken) {\r\n // Token matches → restore chat history\r\n const savedHistory = localStorage.getItem(\"chatHistory\");\r\n if (savedHistory) {\r\n setChatHistory(JSON.parse(savedHistory));\r\n }\r\n } else {\r\n // Token missing OR mismatch → reset chat data\r\n localStorage.setItem(\"chatHistory\", JSON.stringify([]));\r\n localStorage.setItem(\r\n `chat-token-${tanyaConfig.siteId}`,\r\n currentAccessToken || \"\"\r\n );\r\n }\r\n }, []);\r\n\r\n // Runs whenever chatHistory updates\r\n useEffect(() => {\r\n localStorage.setItem(\"chatHistory\", JSON.stringify(chatHistory));\r\n\r\n const accessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n if (accessToken) {\r\n localStorage.setItem(`chat-token-${tanyaConfig.siteId}`, accessToken);\r\n }\r\n }, [chatHistory]);\r\n\r\n const openPanel = () => {\r\n setIsVisible(true);\r\n setTimeout(() => setIsAnimating(true), 10); // trigger opening animation\r\n };\r\n\r\n const closePanel = () => {\r\n setIsAnimating(false);\r\n setTimeout(() => setIsVisible(false), 300); // // wait for exit animation\r\n };\r\n\r\n useEffect(() => {\r\n if (isOpen) openPanel();\r\n else closePanel();\r\n }, [isOpen]);\r\n\r\n const handleWhomSelection = (selected: string) => {\r\n setWhom(payloadMapping[selected]);\r\n };\r\n\r\n useEffect(() => {\r\n if (isVisible && scrollRef.current) {\r\n scrollRef.current.scrollTo({\r\n top: scrollRef.current.scrollHeight,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n }, [chatHistory, isVisible]);\r\n\r\n let cachedToken: any = null;\r\n let tokenExpiry: any = null;\r\n\r\n const getJWTToken = async () => {\r\n if (cachedToken && tokenExpiry && Date.now() < tokenExpiry) {\r\n return cachedToken;\r\n }\r\n\r\n try {\r\n const tokenUrl =\r\n \"https://us-east-1lsr29ln3u.auth.us-east-1.amazoncognito.com/oauth2/token\";\r\n\r\n const tokenPayload = new URLSearchParams({\r\n grant_type: \"client_credentials\",\r\n client_id: \"4i8rd70sgt961tc4dhskgf08c\",\r\n client_secret: \"bnsfq1220loh2cn2cm2ttn8fdhdpt0u8m1fgj8vfk2rn61aurjg\",\r\n scope: \"default-m2m-resource-server-8xzfzo/read\",\r\n });\r\n\r\n const tokenResponse = await fetch(tokenUrl, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n },\r\n body: tokenPayload,\r\n });\r\n\r\n if (!tokenResponse.ok) {\r\n throw new Error(\r\n `Token request failed! status: ${tokenResponse.status}`\r\n );\r\n }\r\n\r\n const tokenData = await tokenResponse.json();\r\n\r\n // Cache the token\r\n cachedToken = tokenData.access_token;\r\n const expiresIn = tokenData.expires_in || 3600; // Default to 1 hour\r\n tokenExpiry = Date.now() + (expiresIn - 60) * 1000; // Refresh 1 minute before expiry\r\n\r\n return cachedToken;\r\n } catch (error) {\r\n console.error(\"Error obtaining JWT token:\", error);\r\n // Clear cache on error\r\n cachedToken = null;\r\n tokenExpiry = null;\r\n return null;\r\n }\r\n };\r\n\r\n const getAuthDetails = async () => {\r\n const data = await authData(); // <- calls your async function\r\n if (data == null) return;\r\n setAuthDetails(data); // <- saves the result in state\r\n };\r\n\r\n useEffect(() => {\r\n if (tanyaConfig?.siteId) {\r\n const { clientID, host, organizationID, shortCode, siteId } = tanyaConfig;\r\n sessionStorage.setItem(\"Host\", host);\r\n sessionStorage.setItem(\"SiteId\", siteId);\r\n sessionStorage.setItem(\"pubCfg\", btoa(clientID));\r\n sessionStorage.setItem(\"envRef\", shortCode);\r\n sessionStorage.setItem(\"orgRef\", organizationID);\r\n }\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n getAuthDetails();\r\n console.log(\"scapi environment v1\");\r\n } else {\r\n console.log(\"ocapi environment\");\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (basketId) {\r\n console.log(\"setting the basket id\", basketId);\r\n setStoredBasketId(basketId);\r\n }\r\n }, [basketId]);\r\n\r\n const getInterests = async () => {\r\n const customer_id = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n ).customerId;\r\n const res = await getInterestApi(customer_id || \"\");\r\n return res.c_interests;\r\n };\r\n\r\n const runSecondaryFlow = async (productTitle: string, points: number) => {\r\n console.log(\"in secondary flow\", VERSION);\r\n const interests = await getInterests();\r\n console.log(interests, \"interests of customer\", VERSION);\r\n if (!interests) return;\r\n try {\r\n // surprise animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1 ? { ...msg, secondaryLoading: true } : msg\r\n )\r\n );\r\n\r\n const accessToken = await getJWTToken();\r\n if (!accessToken) throw new Error(\"Failed to fetch token\");\r\n\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"Q166PR519W\",\r\n flowAliasId: \"HKFUVLWVH2\",\r\n input: {\r\n loyaltyPoints: \"\",\r\n productName: productTitle,\r\n productPoints: String(points || 0),\r\n interests: interests,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n\r\n if (parsedData.index === 0) {\r\n // attach response & stop animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n secondaryResponse: parsedData.data,\r\n secondaryLoading: false,\r\n }\r\n : msg\r\n )\r\n );\r\n }\r\n // ignore 1/2/3\r\n } catch (e) {\r\n // stop animation on parse error too\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? { ...msg, secondaryLoading: false }\r\n : msg\r\n )\r\n );\r\n console.error(\"Secondary flow JSON parse error:\", e);\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(\"Secondary flow error:\", e);\r\n }\r\n };\r\n\r\n const handleSendMessage = async (question?: string) => {\r\n const newQuery = question || inputText.trim();\r\n if (!newQuery) return;\r\n\r\n setIsLoading(true);\r\n setInputText(\"\");\r\n\r\n productName.current = null;\r\n productId.current = null;\r\n productImage.current = null;\r\n productPrice.current = null;\r\n\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: newQuery,\r\n response: \"Thinking for what suits you best...\",\r\n potentialQuestions: \"\",\r\n products: [],\r\n keywords: \"Thinking for best products...\",\r\n },\r\n ]);\r\n\r\n try {\r\n const sanitizedWhom = whom;\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n\r\n // Get JWT access token\r\n const accessToken = await getJWTToken();\r\n if (!accessToken) {\r\n throw new Error(\"Failed to obtain access token\");\r\n }\r\n\r\n // Build the invoke flow URL\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"MMHQKYI1NE\",\r\n flowAliasId: \"SZF9ZK1ATE\",\r\n input: {\r\n userPrompt: newQuery,\r\n whom: sanitizedWhom,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n let keywords = \"\";\r\n\r\n while (true) {\r\n setProductLoading(true);\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n if (parsedData.index == 1) keywords = parsedData.data;\r\n\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n [parsedData.index == 0\r\n ? \"response\"\r\n : parsedData.index == 1\r\n ? \"keywords\"\r\n : parsedData.index == 2\r\n ? \"potentialQuestions\"\r\n : \"end\"]: parsedData.data,\r\n }\r\n : msg\r\n )\r\n );\r\n } catch (error) {\r\n console.error(\"Error parsing JSON:\", error);\r\n }\r\n }\r\n }\r\n }\r\n getKeywords(sanitizeKeywords(keywords));\r\n } catch (error) {\r\n console.error(\"Error sending message to Tanya:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const sanitizeKeywords = (response: string) => {\r\n const keywordMatch = response.match(\r\n /top five relevant product or category names are: (.*)/i\r\n );\r\n const keywordsString = keywordMatch ? keywordMatch[1] : response;\r\n const keywordsArray = keywordsString.split(\", \");\r\n const sanitizedKeywords = keywordsArray.map((keyword) => {\r\n return keyword.replace(/\\s*(Toys|Bags|Miniature|etc\\.*)\\s*/gi, \"\").trim();\r\n });\r\n const uniqueKeywords = [...new Set(sanitizedKeywords)].filter(Boolean);\r\n return uniqueKeywords.join(\",\");\r\n };\r\n\r\n const getKeywords = async (keywords: string[] | string) => {\r\n const keys = typeof keywords === \"string\" ? keywords.split(\",\") : keywords;\r\n\r\n setProductLoading(true);\r\n\r\n try {\r\n // fire all API requests in parallel\r\n const responses = await Promise.all(\r\n keys.map((k) => getSearchResults(k).catch(() => [])) // prevent Promise.all crash\r\n );\r\n\r\n // build product array\r\n const productData = keys\r\n .map((keyword, idx) => ({\r\n keyword,\r\n items: responses[idx] ?? [],\r\n loading: false,\r\n }))\r\n .filter((p) => p.items.length > 0);\r\n\r\n // extract first product for snapshot\r\n const firstProduct = productData[0]?.items?.[0];\r\n if (firstProduct) {\r\n productId.current = firstProduct.product_id;\r\n productName.current = firstProduct.product_name;\r\n productImage.current = firstProduct.image?.link;\r\n const price =\r\n typeof firstProduct.price === \"number\" ? firstProduct.price : null;\r\n productPrice.current = price;\r\n }\r\n\r\n // apply single chatHistory update\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n products: productData,\r\n productSnapshot: firstProduct\r\n ? {\r\n id: productId.current,\r\n name: productName.current,\r\n image: productImage.current,\r\n price: productPrice.current,\r\n points: 0,\r\n quantity: 1,\r\n }\r\n : msg.productSnapshot,\r\n }\r\n : msg\r\n )\r\n );\r\n\r\n // run secondary flow only if user logged in + snapshot ready\r\n if (firstProduct) {\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n if (!customerData?.isGuest) {\r\n console.log(\"running secondary flow\", VERSION);\r\n runSecondaryFlow(productName.current, 0);\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"error in keyword search\", err);\r\n } finally {\r\n setProductLoading(false);\r\n }\r\n };\r\n\r\n const handleAddToCart = async (productToBeAdded: any, quantity: number) => {\r\n setAdding(true);\r\n try {\r\n const product = await getProductById(productToBeAdded.id);\r\n if (\r\n !(\r\n product?.variants?.[0]?.product_id ||\r\n product?.variants?.[0]?.productId\r\n ) &&\r\n !(product.type.item || product.type.bundle)\r\n ) {\r\n setAdding(false);\r\n toast.error(\"Variants not found\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: quantity,\r\n },\r\n ];\r\n console.log(productData, \"product data\", \"app version\", VERSION);\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n const access_token = await fetchTokenBmGrant();\r\n\r\n let { customer_token } = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n console.log(basketIdFromCustomer, \"basketIdFromCustomer\");\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n setAdding(false);\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n const basketResponse = await createBasket(customer_token, data);\r\n console.log(\r\n basketResponse,\r\n basketResponse?.basket_id,\r\n basketResponse?.basketId,\r\n \"the basket response\"\r\n );\r\n if (!(basketResponse?.basket_id || !basketResponse?.basketId)) {\r\n setAdding(false);\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // Store new basket ID\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n // const response = await addProductToBasket(\r\n // basketResponse?.basket_id || basketResponse?.basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart(\r\n {\r\n productId,\r\n quantity,\r\n },\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n setAdding(false);\r\n return;\r\n }\r\n\r\n // const response = await addProductToBasket(\r\n // basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart({\r\n productId,\r\n quantity,\r\n });\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n setAdding(false);\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n setAdding(false);\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n setAdding(false);\r\n };\r\n\r\n // useEffect(() => {\r\n // if (lastChat.current)\r\n // lastChat.current.scrollIntoView({ behavior: \"smooth\" });\r\n // }, [lastChat.current]);\r\n\r\n useEffect(() => {\r\n if (isVisible) setTimeout(() => setIsAnimating(true), 10);\r\n else setIsAnimating(false);\r\n }, [isVisible]);\r\n\r\n // Update the main container div's className\r\n return (\r\n <div className=\"relative flex justify-center\">\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onClick={() => setIsOpen(true)}\r\n style={\r\n {\r\n // background: storeDetails.tanyaThemeColor,\r\n }\r\n }\r\n className=\"flex items-center rounded-lg cursor-pointer hover:opacity-90 transition-opacity p-0\"\r\n >\r\n <div className=\"flex flex-col\">\r\n <svg\r\n width=\"40\"\r\n height=\"40\"\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_958_585)\">\r\n <path\r\n d=\"M30.0002 5C31.7683 5 33.464 5.70238 34.7142 6.95262C35.9644 8.20286 36.6668 9.89856 36.6668 11.6667V25C36.6668 26.7681 35.9644 28.4638 34.7142 29.714C33.464 30.9643 31.7683 31.6667 30.0002 31.6667H25.6902L21.1785 36.1783C20.8915 36.4653 20.5097 36.6377 20.1046 36.6631C19.6996 36.6886 19.2992 36.5654 18.9785 36.3167L18.8218 36.1783L14.3085 31.6667H10.0002C8.28976 31.6667 6.64478 31.0093 5.40548 29.8305C4.16617 28.6516 3.42735 27.0416 3.34183 25.3333L3.3335 25V11.6667C3.3335 9.89856 4.03588 8.20286 5.28612 6.95262C6.53636 5.70238 8.23205 5 10.0002 5H30.0002Z\"\r\n fill=\"url(#paint0_linear_958_585)\"\r\n />\r\n <path\r\n d=\"M28.3335 15.6511V11.6667C28.3335 11.6667 22.2774 12.6042 20.1148 15.4167C17.9521 18.2292 18.6644 26.6667 18.6644 26.6667H22.5321C22.5321 26.6667 22.0614 18.9323 23.4989 17.2917C24.9364 15.6511 28.3335 15.6511 28.3335 15.6511Z\"\r\n fill=\"white\"\r\n />\r\n <path\r\n d=\"M13.3335 11.6667H19.6184V15.4167H13.3335V11.6667Z\"\r\n fill=\"white\"\r\n />\r\n </g>\r\n <defs>\r\n <linearGradient\r\n id=\"paint0_linear_958_585\"\r\n x1=\"20.0002\"\r\n y1=\"5\"\r\n x2=\"35.0002\"\r\n y2=\"30\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#452697\" />\r\n <stop offset=\"1\" stopColor=\"#7C5BFF\" />\r\n </linearGradient>\r\n <clipPath id=\"clip0_958_585\">\r\n <rect width=\"40\" height=\"40\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n </PopoverTrigger>\r\n\r\n {/* Absolute Positioned PopoverContent and Custom Sidebar Panel */}\r\n {isVisible && (\r\n <>\r\n {/* Overlay For closing tanya popup by clicking on side or background */}\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => setIsOpen(false)}\r\n />\r\n <div\r\n className={`\r\n fixed z-50 h-screen w-[100vw] sm:w-[80vw] md:w-[770px] border-0 bg-white lg:rounded-l-xl overflow-hidden flex flex-col shadow-[0px_4px_10px_0px_#5F499840]\r\n top-0 right-0\r\n transition-transform duration-300 ease-in-out\r\n lg:transform lg:translate-y-0\r\n \r\n `}\r\n // ${\r\n // isAnimating\r\n // ? \"lg:translate-x-0 translate-y-0\"\r\n // : \"lg:translate-x-full translate-y-full\"\r\n // }\r\n style={{\r\n background:\r\n \"linear-gradient(170.1deg, #FFFFFF 60.03%, #E3DEEF 99.59%)\",\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n className={`flex justify-between p-3 bg-[#FFFFFF] border border-b-1 border-[#E5E5E5] `} //lg:rounded-tl-xl lg:rounded-bl-xl\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.5rem\",\r\n }}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <div\r\n className=\"flex gap-2 w-28 h-12 text-center items-center p-2 border rounded-l-[20px] rounded-tr-[20px]\"\r\n style={{\r\n background:\r\n \"linear-gradient(265.62deg, #6851C6 5.24%, #8668FF 98.49%)\",\r\n }}\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 15 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M15 4.48438V0.5C15 0.5 8.94395 1.4375 6.78127 4.25C4.61859 7.0625 5.33095 15.5 5.33095 15.5H9.19857C9.19857 15.5 8.72793 7.76562 10.1654 6.125C11.6029 4.48438 15 4.48438 15 4.48438Z\"\r\n fill=\"white\"\r\n />\r\n <path d=\"M0 0.5H6.28488V4.25H0V0.5Z\" fill=\"white\" />\r\n </svg>\r\n\r\n <p className=\"text-[#FFFFFF] font-nunitoSans font-semibold\">\r\n TANYA\r\n </p>\r\n </div>\r\n <p\r\n className=\"text-[#5B5B5B] font-nunitoSans font-semibold\"\r\n style={{ fontStyle: \"italic\" }}\r\n >\r\n {\" \"}\r\n Your AI shopping assistant !{\" \"}\r\n </p>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"1.25rem\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n {/* close icon */}\r\n <button onClick={() => setIsOpen(false)}>\r\n <svg\r\n width=\"24\"\r\n height=\"25\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6036)\">\r\n <path\r\n d=\"M18 6.5L6 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6.5L18 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6036\">\r\n <rect\r\n width=\"24\"\r\n height=\"24\"\r\n fill=\"white\"\r\n transform=\"translate(0 0.5)\"\r\n />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Chat Container */}\r\n <div className={`flex h-full md:flex-row lg:flex-row`}>\r\n <div\r\n className={`flex flex-col h-full ${\r\n product ? \"lg:w-2/3 w-full\" : \"w-full\"\r\n }`}\r\n >\r\n {/* Chat Body - Scrollable */}\r\n <div\r\n ref={scrollRef}\r\n className=\"overflow-y-auto pr-5 pb-2 space-y-4 hide-scrollbar flex-grow mb-24\"\r\n >\r\n {/* Shopping Options */}\r\n {storeDetails?.whomRequired && (\r\n <div\r\n className=\"mx-3 p-3 rounded-2xl bg-[#FFFFFF]\"\r\n // style={{\r\n // color: storeDetails?.tanyaThemeContrastColor,\r\n // backgroundColor: storeDetails.tanyaThemeColor, //need to comment\r\n // width: \"fit-content\",\r\n // }}\r\n >\r\n <div className=\"flex gap-2 bg-[#FFFFFF]\">\r\n {/* <Icon\r\n icon=\"mdi:shopping\"\r\n color=\"white\"\r\n width=\"22\"\r\n height=\"22\"\r\n /> */}\r\n <p className=\"font-bold font-nunitoSans text-[#494949]\">\r\n Is this for you or someone else?\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {shoppingOptions.map((option) => (\r\n <button\r\n key={option}\r\n onClick={() => handleWhomSelection(option)}\r\n className=\"px-2 py-2 font-semibold text-xs text-[#18181B] bg-[#F3F3F3] rounded-2xl\"\r\n style={{\r\n backgroundColor:\r\n whom === payloadMapping[option]\r\n ? \"#FFFFFF\"\r\n : \"#F3F3F3\",\r\n borderColor:\r\n whom === payloadMapping[option]\r\n ? \"#BBB3DD\"\r\n : \"\",\r\n }}\r\n >\r\n {option}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n {/* Chat History */}\r\n {chatHistory.map((chat, index) => (\r\n <div key={index}>\r\n <div\r\n className=\"flex justify-end\"\r\n // ref={\r\n // index == chatHistory.length - 1 ? lastChat : null\r\n // }\r\n >\r\n <p className=\"text-sm font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n {chat.query}\r\n </p>\r\n </div>\r\n {chat.response && chat.response.includes(\"Thinking\") ? (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans animate-pulse font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n ) : (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n )}\r\n {productLoading &&\r\n !chat.response.includes(\"Thinking\") &&\r\n chat.products?.length == 0 && (\r\n <div>\r\n <p className=\"text-sm animate-pulse font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n Finding best products for you\r\n </p>\r\n </div>\r\n )}\r\n {chat?.products && chat?.products?.length > 0 && (\r\n <ProductDisplay\r\n chat={chat.products}\r\n storeDetails={storeDetails}\r\n />\r\n )}\r\n\r\n {/* Potential Questions */}\r\n {chat?.potentialQuestions.length > 0 && (\r\n <div className=\"my-2 px-4 text-sm text-gray-700\">\r\n <p\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949]\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n Why not explore these inquiries...\r\n </p>\r\n {chat.potentialQuestions\r\n .split(\",\")\r\n .map((question, idx) => (\r\n <button\r\n key={idx}\r\n className={`cursor-pointer font-nunitoSans font-semibold text-[#232323] border bg-[#804C9E0D] border-${storeDetails.themeDarkColor} m-1 rounded-xl px-2 py-1`}\r\n onClick={() => handleSendMessage(question)}\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n {question}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {chat?.secondaryLoading && (\r\n <div className=\"mt-3 mb-4 px-4\">\r\n <div\r\n className=\"tanya-surprise-wrapper bg-indigo-300 text-sm px-7 py-4 rounded-r-xl rounded-bl-2xl w-full relative overflow-hidden\"\r\n style={{\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex gap-1\">\r\n <div className=\"tanya-sparkle tanya-sparkle-1\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-2\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-3\">\r\n ✨\r\n </div>\r\n </div>\r\n <div className=\"tanya-shimmer\" />\r\n <p\r\n className=\"font-semibold tanya-pulse\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n I’ve found a special surprise crafted just for\r\n you… hang on a sec!\r\n </p>\r\n <p\r\n className=\"tanya-dots mt-1\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n • • •\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Secondary Response (from secondary flow) */}\r\n {chat?.secondaryResponse && (\r\n <>\r\n <div className=\"mt-3 mb-8 px-4 bg-indigo-300 rounded-tr-[5px]\">\r\n {/* Chat Response */}\r\n <div\r\n className=\"text-sm text-[#232323] bg-[#FFFFFF] px-7 py-4 rounded-br-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(\r\n chat.secondaryResponse\r\n ),\r\n }}\r\n />\r\n {chat.productSnapshot && (\r\n // chat.productSnapshot.points > 0 &&\r\n <div className=\"mt-4 w-full\">\r\n <div\r\n className=\"flex gap-4 items-stretch rounded-2xl p-4\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n <div\r\n className=\"flex-shrink-0 rounded-xl overflow-hidden border\"\r\n style={{\r\n width: 112,\r\n height: 112,\r\n borderColor: \"#eee\",\r\n }}\r\n >\r\n {chat.productSnapshot.image ? (\r\n <img\r\n src={chat.productSnapshot.image}\r\n alt={chat.productSnapshot.name}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full flex items-center justify-center text-xs text-gray-500\">\r\n No Image\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-col flex-1 justify-between\">\r\n <div>\r\n <p className=\"font-semibold text-[15px] leading-snug\">\r\n {chat.productSnapshot.name}\r\n </p>\r\n <p className=\"mt-1 text-[14px] font-medium\">\r\n {chat.productSnapshot.price != null\r\n ? new Intl.NumberFormat(undefined, {\r\n style: \"currency\",\r\n currency:\r\n storeDetails?.currency ||\r\n \"USD\",\r\n }).format(\r\n chat.productSnapshot.price\r\n )\r\n : \"\"}\r\n </p>\r\n\r\n {chat.productSnapshot.points > 0 && (\r\n <p className=\"mt-1 text-xs opacity-80\">\r\n You will earn{\" \"}\r\n <strong>\r\n {chat.productSnapshot.points}{\" \"}\r\n points\r\n </strong>\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div className=\"mt-3 flex items-center gap-3\">\r\n <div className=\"flex items-center border rounded-full overflow-hidden\">\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity: Math.max(\r\n 1,\r\n m.productSnapshot\r\n .quantity - 1\r\n ),\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n −\r\n </button>\r\n <div className=\"px-3 py-1 text-sm select-none\">\r\n {chat.productSnapshot.quantity}\r\n </div>\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity:\r\n m.productSnapshot\r\n .quantity + 1,\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n +\r\n </button>\r\n </div>\r\n <button\r\n onClick={() => {\r\n handleAddToCart(\r\n mapSnapshotToProduct(\r\n chat.productSnapshot!\r\n ),\r\n chat.productSnapshot!.quantity\r\n );\r\n }}\r\n disabled={adding}\r\n className=\"px-4 py-2 rounded-full font-medium\"\r\n style={{\r\n background:\r\n storeDetails.tanyaThemeColor,\r\n color:\r\n storeDetails?.tanyaThemeContrastColor ||\r\n \"#fff\",\r\n opacity: adding ? 0.8 : 1,\r\n }}\r\n >\r\n {adding ? \"Adding...\" : \"Add to cart\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n <div className=\"mb-20\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Sticky Bottom Input Bar */}\r\n <div className=\"flex flex-col gap-2 sticky bottom-0 left-0 right-0 bg-[#E3DEEF] z-50 px-4 py-2\">\r\n {/* Gradient Border Wrapper */}\r\n <div\r\n className=\"p-[1px] rounded-xl\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, #B09FFF 0%, #8D79F6 100%)\",\r\n }}\r\n >\r\n {/* Input + Mic + Submit */}\r\n <div className=\"flex items-center bg-[#FFFFFF] flex-1 rounded-xl px-2 py-1\">\r\n <input\r\n className=\"flex-1 bg-[#FFFFFF] text-[#232323] outline-none border-none px-2 py-2 text-sm\"\r\n placeholder=\"How can I help you...\"\r\n value={inputText}\r\n autoFocus\r\n onChange={(e) => setInputText(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && !isLoading)\r\n handleSendMessage();\r\n }}\r\n />\r\n {/* Mic Icon */}\r\n {/* <button\r\n type=\"button\"\r\n className=\"p-2 text-[#959595] hover:text-[#6952C7]\"\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6086)\">\r\n <path\r\n d=\"M7.5 4.16663C7.5 3.50358 7.76339 2.8677 8.23223 2.39886C8.70107 1.93002 9.33696 1.66663 10 1.66663C10.663 1.66663 11.2989 1.93002 11.7678 2.39886C12.2366 2.8677 12.5 3.50358 12.5 4.16663V8.33329C12.5 8.99633 12.2366 9.63222 11.7678 10.1011C11.2989 10.5699 10.663 10.8333 10 10.8333C9.33696 10.8333 8.70107 10.5699 8.23223 10.1011C7.76339 9.63222 7.5 8.99633 7.5 8.33329V4.16663Z\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M4.1665 8.33337C4.1665 9.88047 4.78109 11.3642 5.87505 12.4582C6.96901 13.5521 8.45274 14.1667 9.99984 14.1667C11.5469 14.1667 13.0307 13.5521 14.1246 12.4582C15.2186 11.3642 15.8332 9.88047 15.8332 8.33337\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6.6665 17.5H13.3332\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M10 14.1666V17.5\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6086\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button> */}\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"p-3\"\r\n onClick={() => handleSendMessage()}\r\n >\r\n {isLoading ? (\r\n <div\r\n className=\"p-3 animate-spin rounded-full h-3 w-3 border-b-2\"\r\n style={{\r\n borderBottom: \"2px solid\",\r\n color: storeDetails.tanyaThemeColor,\r\n }}\r\n />\r\n ) : (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M16.6357 13.6701L18.3521 8.5208C19.8516 4.02242 20.6013 1.77322 19.414 0.585948C18.2268 -0.601312 15.9776 0.148418 11.4792 1.64788L6.32987 3.36432C2.69923 4.57453 0.883923 5.17964 0.368062 6.06698C-0.122688 6.91112 -0.122688 7.95369 0.368062 8.7978C0.883923 9.6852 2.69923 10.2903 6.32987 11.5005C6.77981 11.6505 7.28601 11.5434 7.62294 11.2096L13.1286 5.75495C13.4383 5.44808 13.9382 5.45041 14.245 5.76015C14.5519 6.06989 14.5496 6.56975 14.2398 6.87662L8.8231 12.2432C8.4518 12.6111 8.3342 13.1742 8.4995 13.6701C9.7097 17.3007 10.3148 19.1161 11.2022 19.6319C12.0463 20.1227 13.0889 20.1227 13.933 19.6319C14.8204 19.1161 15.4255 17.3008 16.6357 13.6701Z\"\r\n fill=\"#6952C7\"\r\n />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ProductDisplayCard addToCartPwa={addToCart} />\r\n </div>\r\n {/* </PopoverContent> */}\r\n </div>\r\n </>\r\n )}\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TanyaShoppingAssistantStream;\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __extends } from \"tslib\";\nvar genericMessage = \"Invariant Violation\";\nvar _a = Object.setPrototypeOf, setPrototypeOf = _a === void 0 ? function (obj, proto) {\n obj.__proto__ = proto;\n return obj;\n} : _a;\nvar InvariantError = /** @class */ (function (_super) {\n __extends(InvariantError, _super);\n function InvariantError(message) {\n if (message === void 0) { message = genericMessage; }\n var _this = _super.call(this, typeof message === \"number\"\n ? genericMessage + \": \" + message + \" (see https://github.com/apollographql/invariant-packages)\"\n : message) || this;\n _this.framesToPop = 1;\n _this.name = genericMessage;\n setPrototypeOf(_this, InvariantError.prototype);\n return _this;\n }\n return InvariantError;\n}(Error));\nexport { InvariantError };\nexport function invariant(condition, message) {\n if (!condition) {\n throw new InvariantError(message);\n }\n}\nvar verbosityLevels = [\"debug\", \"log\", \"warn\", \"error\", \"silent\"];\nvar verbosityLevel = verbosityLevels.indexOf(\"log\");\nfunction wrapConsoleMethod(name) {\n return function () {\n if (verbosityLevels.indexOf(name) >= verbosityLevel) {\n // Default to console.log if this host environment happens not to provide\n // all the console.* methods we need.\n var method = console[name] || console.log;\n return method.apply(console, arguments);\n }\n };\n}\n(function (invariant) {\n invariant.debug = wrapConsoleMethod(\"debug\");\n invariant.log = wrapConsoleMethod(\"log\");\n invariant.warn = wrapConsoleMethod(\"warn\");\n invariant.error = wrapConsoleMethod(\"error\");\n})(invariant || (invariant = {}));\nexport function setVerbosity(level) {\n var old = verbosityLevels[verbosityLevel];\n verbosityLevel = Math.max(0, verbosityLevels.indexOf(level));\n return old;\n}\nexport default invariant;\n//# sourceMappingURL=invariant.js.map","export var version = \"3.14.0\";\n//# sourceMappingURL=version.js.map","export function maybe(thunk) {\n try {\n return thunk();\n }\n catch (_a) { }\n}\n//# sourceMappingURL=maybe.js.map","import { maybe } from \"./maybe.js\";\nexport default (maybe(function () { return globalThis; }) ||\n maybe(function () { return window; }) ||\n maybe(function () { return self; }) ||\n maybe(function () { return global; }) || // We don't expect the Function constructor ever to be invoked at runtime, as\n// long as at least one of globalThis, window, self, or global is defined, so\n// we are under no obligation to make it easy for static analysis tools to\n// detect syntactic usage of the Function constructor. If you think you can\n// improve your static analysis to detect this obfuscation, think again. This\n// is an arms race you cannot win, at least not in JavaScript.\nmaybe(function () {\n return maybe.constructor(\"return this\")();\n}));\n//# sourceMappingURL=global.js.map","var prefixCounts = new Map();\n// These IDs won't be globally unique, but they will be unique within this\n// process, thanks to the counter, and unguessable thanks to the random suffix.\nexport function makeUniqueId(prefix) {\n var count = prefixCounts.get(prefix) || 1;\n prefixCounts.set(prefix, count + 1);\n return \"\".concat(prefix, \":\").concat(count, \":\").concat(Math.random().toString(36).slice(2));\n}\n//# sourceMappingURL=makeUniqueId.js.map","import { makeUniqueId } from \"./makeUniqueId.js\";\nexport function stringifyForDisplay(value, space) {\n if (space === void 0) { space = 0; }\n var undefId = makeUniqueId(\"stringifyForDisplay\");\n return JSON.stringify(value, function (key, value) {\n return value === void 0 ? undefId : value;\n }, space)\n .split(JSON.stringify(undefId))\n .join(\"<undefined>\");\n}\n//# sourceMappingURL=stringifyForDisplay.js.map","import { invariant as originalInvariant, InvariantError } from \"ts-invariant\";\nimport { version } from \"../../version.js\";\nimport global from \"./global.js\";\nimport { stringifyForDisplay } from \"../common/stringifyForDisplay.js\";\nfunction wrap(fn) {\n return function (message) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof message === \"number\") {\n var arg0 = message;\n message = getHandledErrorMsg(arg0);\n if (!message) {\n message = getFallbackErrorMsg(arg0, args);\n args = [];\n }\n }\n fn.apply(void 0, [message].concat(args));\n };\n}\nvar invariant = Object.assign(function invariant(condition, message) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (!condition) {\n originalInvariant(condition, getHandledErrorMsg(message, args) || getFallbackErrorMsg(message, args));\n }\n}, {\n debug: wrap(originalInvariant.debug),\n log: wrap(originalInvariant.log),\n warn: wrap(originalInvariant.warn),\n error: wrap(originalInvariant.error),\n});\n/**\n * Returns an InvariantError.\n *\n * `message` can only be a string, a concatenation of strings, or a ternary statement\n * that results in a string. This will be enforced on build, where the message will\n * be replaced with a message number.\n * String substitutions with %s are supported and will also return\n * pretty-stringified objects.\n * Excess `optionalParams` will be swallowed.\n */\nfunction newInvariantError(message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n return new InvariantError(getHandledErrorMsg(message, optionalParams) ||\n getFallbackErrorMsg(message, optionalParams));\n}\nvar ApolloErrorMessageHandler = Symbol.for(\"ApolloErrorMessageHandler_\" + version);\nfunction stringify(arg) {\n if (typeof arg == \"string\") {\n return arg;\n }\n try {\n return stringifyForDisplay(arg, 2).slice(0, 1000);\n }\n catch (_a) {\n return \"<non-serializable>\";\n }\n}\nfunction getHandledErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return (global[ApolloErrorMessageHandler] &&\n global[ApolloErrorMessageHandler](message, messageArgs.map(stringify)));\n}\nfunction getFallbackErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return \"An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#\".concat(encodeURIComponent(JSON.stringify({\n version: version,\n message: message,\n args: messageArgs.map(stringify),\n })));\n}\nexport { invariant, InvariantError, newInvariantError, ApolloErrorMessageHandler, };\n//# sourceMappingURL=invariantWrappers.js.map","import { invariant, newInvariantError } from \"../globals/index.js\";\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc) {\n invariant(doc && doc.kind === \"Document\", 116);\n var operations = doc.definitions\n .filter(function (d) { return d.kind !== \"FragmentDefinition\"; })\n .map(function (definition) {\n if (definition.kind !== \"OperationDefinition\") {\n throw newInvariantError(117, definition.kind);\n }\n return definition;\n });\n invariant(operations.length <= 1, 118, operations.length);\n return doc;\n}\nexport function getOperationDefinition(doc) {\n checkDocument(doc);\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"OperationDefinition\";\n })[0];\n}\nexport function getOperationName(doc) {\n return (doc.definitions\n .filter(function (definition) {\n return definition.kind === \"OperationDefinition\" && !!definition.name;\n })\n .map(function (x) { return x.name.value; })[0] || null);\n}\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(doc) {\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"FragmentDefinition\";\n });\n}\nexport function getQueryDefinition(doc) {\n var queryDef = getOperationDefinition(doc);\n invariant(queryDef && queryDef.operation === \"query\", 119);\n return queryDef;\n}\nexport function getFragmentDefinition(doc) {\n invariant(doc.kind === \"Document\", 120);\n invariant(doc.definitions.length <= 1, 121);\n var fragmentDef = doc.definitions[0];\n invariant(fragmentDef.kind === \"FragmentDefinition\", 122);\n return fragmentDef;\n}\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(queryDoc) {\n checkDocument(queryDoc);\n var fragmentDefinition;\n for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) {\n var definition = _a[_i];\n if (definition.kind === \"OperationDefinition\") {\n var operation = definition.operation;\n if (operation === \"query\" ||\n operation === \"mutation\" ||\n operation === \"subscription\") {\n return definition;\n }\n }\n if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition;\n }\n }\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n throw newInvariantError(123);\n}\nexport function getDefaultValues(definition) {\n var defaultValues = Object.create(null);\n var defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach(function (def) {\n if (def.defaultValue) {\n valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue);\n }\n });\n }\n return defaultValues;\n}\n//# sourceMappingURL=getFromAST.js.map","// This currentContext variable will only be used if the makeSlotClass\n// function is called, which happens only if this is the first copy of the\n// @wry/context package to be imported.\nlet currentContext = null;\n// This unique internal object is used to denote the absence of a value\n// for a given Slot, and is never exposed to outside code.\nconst MISSING_VALUE = {};\nlet idCounter = 1;\n// Although we can't do anything about the cost of duplicated code from\n// accidentally bundling multiple copies of the @wry/context package, we can\n// avoid creating the Slot class more than once using makeSlotClass.\nconst makeSlotClass = () => class Slot {\n constructor() {\n // If you have a Slot object, you can find out its slot.id, but you cannot\n // guess the slot.id of a Slot you don't have access to, thanks to the\n // randomized suffix.\n this.id = [\n \"slot\",\n idCounter++,\n Date.now(),\n Math.random().toString(36).slice(2),\n ].join(\":\");\n }\n hasValue() {\n for (let context = currentContext; context; context = context.parent) {\n // We use the Slot object iself as a key to its value, which means the\n // value cannot be obtained without a reference to the Slot object.\n if (this.id in context.slots) {\n const value = context.slots[this.id];\n if (value === MISSING_VALUE)\n break;\n if (context !== currentContext) {\n // Cache the value in currentContext.slots so the next lookup will\n // be faster. This caching is safe because the tree of contexts and\n // the values of the slots are logically immutable.\n currentContext.slots[this.id] = value;\n }\n return true;\n }\n }\n if (currentContext) {\n // If a value was not found for this Slot, it's never going to be found\n // no matter how many times we look it up, so we might as well cache\n // the absence of the value, too.\n currentContext.slots[this.id] = MISSING_VALUE;\n }\n return false;\n }\n getValue() {\n if (this.hasValue()) {\n return currentContext.slots[this.id];\n }\n }\n withValue(value, callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n const slots = {\n __proto__: null,\n [this.id]: value,\n };\n const parent = currentContext;\n currentContext = { parent, slots };\n try {\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = parent;\n }\n }\n // Capture the current context and wrap a callback function so that it\n // reestablishes the captured context when called.\n static bind(callback) {\n const context = currentContext;\n return function () {\n const saved = currentContext;\n try {\n currentContext = context;\n return callback.apply(this, arguments);\n }\n finally {\n currentContext = saved;\n }\n };\n }\n // Immediately run a callback function without any captured context.\n static noContext(callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n if (currentContext) {\n const saved = currentContext;\n try {\n currentContext = null;\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = saved;\n }\n }\n else {\n return callback.apply(thisArg, args);\n }\n }\n};\nfunction maybe(fn) {\n try {\n return fn();\n }\n catch (ignored) { }\n}\n// We store a single global implementation of the Slot class as a permanent\n// non-enumerable property of the globalThis object. This obfuscation does\n// nothing to prevent access to the Slot class, but at least it ensures the\n// implementation (i.e. currentContext) cannot be tampered with, and all copies\n// of the @wry/context package (hopefully just one) will share the same Slot\n// implementation. Since the first copy of the @wry/context package to be\n// imported wins, this technique imposes a steep cost for any future breaking\n// changes to the Slot class.\nconst globalKey = \"@wry/context:Slot\";\nconst host = \n// Prefer globalThis when available.\n// https://github.com/benjamn/wryware/issues/347\nmaybe(() => globalThis) ||\n // Fall back to global, which works in Node.js and may be converted by some\n // bundlers to the appropriate identifier (window, self, ...) depending on the\n // bundling target. https://github.com/endojs/endo/issues/576#issuecomment-1178515224\n maybe(() => global) ||\n // Otherwise, use a dummy host that's local to this module. We used to fall\n // back to using the Array constructor as a namespace, but that was flagged in\n // https://github.com/benjamn/wryware/issues/347, and can be avoided.\n Object.create(null);\n// Whichever globalHost we're using, make TypeScript happy about the additional\n// globalKey property.\nconst globalHost = host;\nexport const Slot = globalHost[globalKey] ||\n // Earlier versions of this package stored the globalKey property on the Array\n // constructor, so we check there as well, to prevent Slot class duplication.\n Array[globalKey] ||\n (function (Slot) {\n try {\n Object.defineProperty(globalHost, globalKey, {\n value: Slot,\n enumerable: false,\n writable: false,\n // When it was possible for globalHost to be the Array constructor (a\n // legacy Slot dedup strategy), it was important for the property to be\n // configurable:true so it could be deleted. That does not seem to be as\n // important when globalHost is the global object, but I don't want to\n // cause similar problems again, and configurable:true seems safest.\n // https://github.com/endojs/endo/issues/576#issuecomment-1178274008\n configurable: true\n });\n }\n finally {\n return Slot;\n }\n })(makeSlotClass());\n//# sourceMappingURL=slot.js.map","import { Slot } from \"./slot.js\";\nexport { Slot };\nexport const { bind, noContext } = Slot;\n// Like global.setTimeout, except the callback runs with captured context.\nexport { setTimeoutWithContext as setTimeout };\nfunction setTimeoutWithContext(callback, delay) {\n return setTimeout(bind(callback), delay);\n}\n// Turn any generator function into an async function (using yield instead\n// of await), with context automatically preserved across yields.\nexport function asyncFromGen(genFn) {\n return function () {\n const gen = genFn.apply(this, arguments);\n const boundNext = bind(gen.next);\n const boundThrow = bind(gen.throw);\n return new Promise((resolve, reject) => {\n function invoke(method, argument) {\n try {\n var result = method.call(gen, argument);\n }\n catch (error) {\n return reject(error);\n }\n const next = result.done ? resolve : invokeNext;\n if (isPromiseLike(result.value)) {\n result.value.then(next, result.done ? reject : invokeThrow);\n }\n else {\n next(result.value);\n }\n }\n const invokeNext = (value) => invoke(boundNext, value);\n const invokeThrow = (error) => invoke(boundThrow, error);\n invokeNext();\n });\n };\n}\nfunction isPromiseLike(value) {\n return value && typeof value.then === \"function\";\n}\n// If you use the fibers npm package to implement coroutines in Node.js,\n// you should call this function at least once to ensure context management\n// remains coherent across any yields.\nconst wrappedFibers = [];\nexport function wrapYieldingFiberMethods(Fiber) {\n // There can be only one implementation of Fiber per process, so this array\n // should never grow longer than one element.\n if (wrappedFibers.indexOf(Fiber) < 0) {\n const wrap = (obj, method) => {\n const fn = obj[method];\n obj[method] = function () {\n return noContext(fn, arguments, this);\n };\n };\n // These methods can yield, according to\n // https://github.com/laverdet/node-fibers/blob/ddebed9b8ae3883e57f822e2108e6943e5c8d2a8/fibers.js#L97-L100\n wrap(Fiber, \"yield\");\n wrap(Fiber.prototype, \"run\");\n wrap(Fiber.prototype, \"throwInto\");\n wrappedFibers.push(Fiber);\n }\n return Fiber;\n}\n//# sourceMappingURL=index.js.map","import { Slot } from \"@wry/context\";\nexport const parentEntrySlot = new Slot();\nexport function nonReactive(fn) {\n return parentEntrySlot.withValue(void 0, fn);\n}\nexport { Slot };\nexport { bind as bindContext, noContext, setTimeout, asyncFromGen, } from \"@wry/context\";\n//# sourceMappingURL=context.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\n\t\t\tif (typeof Symbol.for === 'function') {\n\t\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t\t// META: It's a resource locator!\n\t\t\t\tresult = Symbol.for('https://github.com/benlesh/symbol-observable');\n\t\t\t} else {\n\t\t\t\t// Symbol.for didn't exist! The best we can do at this point is a totally \n\t\t\t\t// unique symbol. Note that the string argument here is a descriptor, not\n\t\t\t\t// an identifier. This symbol is unique.\n\t\t\t\tresult = Symbol('https://github.com/benlesh/symbol-observable');\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tSymbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import { Observable } from \"zen-observable-ts\";\n// This simplified polyfill attempts to follow the ECMAScript Observable\n// proposal (https://github.com/zenparsing/es-observable)\nimport \"symbol-observable\";\n// The zen-observable package defines Observable.prototype[Symbol.observable]\n// when Symbol is supported, but RxJS interop depends on also setting this fake\n// '@@observable' string as a polyfill for Symbol.observable.\nvar prototype = Observable.prototype;\nvar fakeObsSymbol = \"@@observable\";\nif (!prototype[fakeObsSymbol]) {\n // @ts-expect-error\n prototype[fakeObsSymbol] = function () {\n return this;\n };\n}\nexport { Observable };\n//# sourceMappingURL=Observable.js.map","import { newInvariantError } from \"../../utilities/globals/index.js\";\nexport function validateOperation(operation) {\n var OPERATION_FIELDS = [\n \"query\",\n \"operationName\",\n \"variables\",\n \"extensions\",\n \"context\",\n ];\n for (var _i = 0, _a = Object.keys(operation); _i < _a.length; _i++) {\n var key = _a[_i];\n if (OPERATION_FIELDS.indexOf(key) < 0) {\n throw newInvariantError(58, key);\n }\n }\n return operation;\n}\n//# sourceMappingURL=validateOperation.js.map","import { __assign } from \"tslib\";\nexport function createOperation(starting, operation) {\n var context = __assign({}, starting);\n var setContext = function (next) {\n if (typeof next === \"function\") {\n context = __assign(__assign({}, context), next(context));\n }\n else {\n context = __assign(__assign({}, context), next);\n }\n };\n var getContext = function () { return (__assign({}, context)); };\n Object.defineProperty(operation, \"setContext\", {\n enumerable: false,\n value: setContext,\n });\n Object.defineProperty(operation, \"getContext\", {\n enumerable: false,\n value: getContext,\n });\n return operation;\n}\n//# sourceMappingURL=createOperation.js.map","import { getOperationName } from \"../../utilities/index.js\";\nexport function transformOperation(operation) {\n var transformedOperation = {\n variables: operation.variables || {},\n extensions: operation.extensions || {},\n operationName: operation.operationName,\n query: operation.query,\n };\n // Best guess at an operation name\n if (!transformedOperation.operationName) {\n transformedOperation.operationName =\n typeof transformedOperation.query !== \"string\" ?\n getOperationName(transformedOperation.query) || undefined\n : \"\";\n }\n return transformedOperation;\n}\n//# sourceMappingURL=transformOperation.js.map","import { __spreadArray } from \"tslib\";\nimport { Slot } from \"optimism\";\nimport { invariant, global as untypedGlobal } from \"../globals/index.js\";\nvar muteAllDeprecations = Symbol.for(\"apollo.deprecations\");\nvar global = untypedGlobal;\nvar slot = new Slot();\nfunction isMuted(name) {\n return global[muteAllDeprecations] || (slot.getValue() || []).includes(name);\n}\nexport function muteDeprecations(name) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return slot.withValue.apply(slot, __spreadArray([Array.isArray(name) ? name : [name]], args, false));\n}\nexport function warnRemovedOption(options, name, callSite, recommendation) {\n if (recommendation === void 0) { recommendation = \"Please remove this option.\"; }\n warnDeprecated(name, function () {\n if (name in options) {\n globalThis.__DEV__ !== false && invariant.warn(104, callSite, name, recommendation);\n }\n });\n}\nexport function warnDeprecated(name, cb) {\n if (!isMuted(name)) {\n cb();\n }\n}\nexport function withDisabledDeprecations() {\n var _a;\n var prev = global[muteAllDeprecations];\n global[muteAllDeprecations] = true;\n return _a = {},\n _a[Symbol.dispose] = function () {\n global[muteAllDeprecations] = prev;\n },\n _a;\n}\n//# sourceMappingURL=index.js.map","import { newInvariantError, invariant } from \"../../utilities/globals/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { validateOperation, createOperation, transformOperation, } from \"../utils/index.js\";\nimport { warnDeprecated } from \"../../utilities/deprecation/index.js\";\nfunction passthrough(op, forward) {\n return (forward ? forward(op) : Observable.of());\n}\nfunction toLink(handler) {\n return typeof handler === \"function\" ? new ApolloLink(handler) : handler;\n}\nfunction isTerminating(link) {\n return link.request.length <= 1;\n}\nvar ApolloLink = /** @class */ (function () {\n function ApolloLink(request) {\n if (request)\n this.request = request;\n }\n ApolloLink.empty = function () {\n return new ApolloLink(function () { return Observable.of(); });\n };\n ApolloLink.from = function (links) {\n if (links.length === 0)\n return ApolloLink.empty();\n return links.map(toLink).reduce(function (x, y) { return x.concat(y); });\n };\n ApolloLink.split = function (test, left, right) {\n var leftLink = toLink(left);\n var rightLink = toLink(right || new ApolloLink(passthrough));\n var ret;\n if (isTerminating(leftLink) && isTerminating(rightLink)) {\n ret = new ApolloLink(function (operation) {\n return test(operation) ?\n leftLink.request(operation) || Observable.of()\n : rightLink.request(operation) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return test(operation) ?\n leftLink.request(operation, forward) || Observable.of()\n : rightLink.request(operation, forward) || Observable.of();\n });\n }\n return Object.assign(ret, { left: leftLink, right: rightLink });\n };\n ApolloLink.execute = function (link, operation) {\n return (link.request(createOperation(operation.context, transformOperation(validateOperation(operation)))) || Observable.of());\n };\n ApolloLink.concat = function (first, second) {\n var firstLink = toLink(first);\n if (isTerminating(firstLink)) {\n globalThis.__DEV__ !== false && invariant.warn(47, firstLink);\n return firstLink;\n }\n var nextLink = toLink(second);\n var ret;\n if (isTerminating(nextLink)) {\n ret = new ApolloLink(function (operation) {\n return firstLink.request(operation, function (op) { return nextLink.request(op) || Observable.of(); }) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return (firstLink.request(operation, function (op) {\n return nextLink.request(op, forward) || Observable.of();\n }) || Observable.of());\n });\n }\n return Object.assign(ret, { left: firstLink, right: nextLink });\n };\n ApolloLink.prototype.split = function (test, left, right) {\n return this.concat(ApolloLink.split(test, left, right || new ApolloLink(passthrough)));\n };\n ApolloLink.prototype.concat = function (next) {\n return ApolloLink.concat(this, next);\n };\n ApolloLink.prototype.request = function (operation, forward) {\n throw newInvariantError(48);\n };\n /**\n * @deprecated `onError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.onError = function (error, observer) {\n if (globalThis.__DEV__ !== false) {\n warnDeprecated(\"onError\", function () {\n globalThis.__DEV__ !== false && invariant.warn(49);\n });\n }\n if (observer && observer.error) {\n observer.error(error);\n // Returning false indicates that observer.error does not need to be\n // called again, since it was already called (on the previous line).\n // Calling observer.error again would not cause any real problems,\n // since only the first call matters, but custom onError functions\n // might have other reasons for wanting to prevent the default\n // behavior by returning false.\n return false;\n }\n // Throw errors will be passed to observer.error.\n throw error;\n };\n /**\n * @deprecated `setOnError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.setOnError = function (fn) {\n if (globalThis.__DEV__ !== false) {\n globalThis.__DEV__ !== false && invariant.warn(50);\n }\n this.onError = fn;\n return this;\n };\n return ApolloLink;\n}());\nexport { ApolloLink };\n//# sourceMappingURL=ApolloLink.js.map","import { __rest } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nexport function setContext(setter) {\n return new ApolloLink(function (operation, forward) {\n var request = __rest(operation, []);\n return new Observable(function (observer) {\n var handle;\n var closed = false;\n Promise.resolve(request)\n .then(function (req) { return setter(req, operation.getContext()); })\n .then(operation.setContext)\n .then(function () {\n // if the observer is already closed, no need to subscribe.\n if (closed)\n return;\n handle = forward(operation).subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n })\n .catch(observer.error.bind(observer));\n return function () {\n closed = true;\n if (handle)\n handle.unsubscribe();\n };\n });\n });\n}\n//# sourceMappingURL=index.js.map","import axios from \"axios\";\nexport const generateToken = async () => {\n const URL = import.meta.env.VITE_TOKEN_URL;\n const clientId = import.meta.env.VITE_CLIENT_ID;\n const clientSecret = import.meta.env.VITE_CLIENT_SECRET;\n if (!URL || !clientId || !clientSecret) {\n console.error(\"Missing token credentials\");\n throw new Error(\"Missing token credentials\");\n }\n const authHeader = \"Basic \" +\n btoa(encodeURIComponent(clientId) + \":\" + encodeURIComponent(clientSecret));\n try {\n const response = await axios.post(URL, new URLSearchParams({ grant_type: \"client_credentials\" }), // Only grant_type in body\n {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Authorization: authHeader,\n },\n });\n if (response.status === 200 && response.data.access_token) {\n return response.data.access_token;\n }\n else {\n console.error(\"Failed to fetch token:\", response.data);\n return null;\n }\n }\n catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error fetching token:\", error.response || error.message);\n }\n else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n","import { ApolloClient, InMemoryCache, createHttpLink } from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { generateToken } from \"../utils/generateToken\";\n\nconst BASE_URL = import.meta.env.VITE_BASE_URL;\n\nif (!BASE_URL) {\n console.error(\"Missing base URL\");\n throw new Error(\"Missing base URL\");\n}\n\nconst httpLink = createHttpLink({\n uri: `${BASE_URL}`,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n // Always get fresh token instead of storing it\n const token = await generateToken();\n\n return {\n headers: {\n ...headers,\n authorization: `Bearer ${token}`,\n },\n };\n});\n\nexport const apolloClient = new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: \"cache-and-network\",\n },\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApolloProvider } from \"@apollo/client\";\nimport ReduxProvider from \"../provider/reduxProvider\";\nimport TanyaShoppingAssistantStream from \"./tanya-shopping-assistent\";\nimport { apolloClient } from \"../graphQL/apollo-client\";\n\nconst TanyaWrapper = (props: any) => {\n \n const { tanyaConfig } = props;\n return (\n <ApolloProvider client={apolloClient}>\n <ReduxProvider>\n <TanyaShoppingAssistantStream tanyaConfig={tanyaConfig} />\n </ReduxProvider>\n </ApolloProvider>\n );\n};\n\nexport default TanyaWrapper;\n"],"names":["TanyaChatbotProvider","useEffect","style","css","initialState","storeSlice","createSlice","state","action","setStore","storeReducer","productSlice","setProduct","productReducer","store","configureStore","ReduxProvider","children","jsx","Provider","notifySFCC","basketId","event","Popover","props","PopoverPrimitive","PopoverTrigger","apiConfig","fetchTokenBmGrant","URL","response","axios","getHost","getSiteId","error","fetchExistingGuestCustomerToken","access_token","dwsid","clientId","shortCode","organisationId","authData","siteId","accessKey","expiresInKey","expires_in","_a","getSearchResults","query","serverUrl","basePath","token","res","host","getProductById","id","getInterestApi","customerId","customer_token","displayData","data","imageUrlArray","image","currencyFormatter","currencyCode","priceFormatter","_b","_c","initialCapital","text","stringReducer","length","formatStringToHtml","str","line","index","numberedPoint","useResponsiveProductsPerPage","getProductsPerPage","productsPerPage","setProductsPerPage","useState","handleResize","ProductCarousel","product","dispatch","useDispatch","startIndex","setStartIndex","nextProducts","prevIndex","prevProducts","getProduct","jsxs","prod","_d","ProductDisplay","chat","storeDetails","products","i","createBasket","addProductToBasket","fetchBasket","BASKET_ID_KEY","TOKEN_KEY","TOKEN_EXPIRY_KEY","EXPIRY_TIME","VERSION","setStoredBasketId","setStoredToken","expiryTime","ANIMATION_DURATION","ProductDisplayCard","addToCartPwa","useSelector","s","show","setShow","addToCart","toast","productData","_e","_f","customerData","basketIdFromCustomer","tokenExpiry","currentTime","newExpiryTime","fetchBasketResponse","_i","_j","basketResponse","_k","_l","_m","_n","_o","_p","viewMore","path","Fragment","e","group","_","Icon","TanyaShoppingAssistantStream","tanyaConfig","shoppingOptions","payloadMapping","productName","useRef","productId","productImage","productPrice","authDetails","setAuthDetails","isOpen","setIsOpen","isAnimating","setIsAnimating","isVisible","setIsVisible","adding","setAdding","isLoading","setIsLoading","productLoading","setProductLoading","inputText","setInputText","whom","setWhom","mapSnapshotToProduct","snap","chatHistory","setChatHistory","scrollRef","currentAccessToken","savedChatToken","savedHistory","accessToken","openPanel","closePanel","handleWhomSelection","selected","cachedToken","getJWTToken","tokenUrl","tokenPayload","tokenResponse","tokenData","expiresIn","getAuthDetails","clientID","organizationID","getInterests","customer_id","runSecondaryFlow","productTitle","points","interests","prev","msg","idx","user","isLoggedIn","invokeUrl","payload","reader","decoder","buffer","done","value","lines","jsonData","parsedData","handleSendMessage","question","newQuery","sanitizedWhom","keywords","getKeywords","sanitizeKeywords","keywordMatch","sanitizedKeywords","keyword","keys","responses","k","p","firstProduct","price","err","handleAddToCart","productToBeAdded","quantity","option","m","extendStatics","d","b","__extends","__","__assign","t","n","__rest","genericMessage","setPrototypeOf","obj","proto","InvariantError","_super","message","_this","invariant","condition","verbosityLevels","verbosityLevel","wrapConsoleMethod","name","method","version","maybe","thunk","untypedGlobal","prefixCounts","makeUniqueId","prefix","count","stringifyForDisplay","space","undefId","key","wrap","fn","args","arg0","getHandledErrorMsg","getFallbackErrorMsg","originalInvariant","newInvariantError","optionalParams","ApolloErrorMessageHandler","stringify","arg","messageArgs","global","getOperationName","doc","definition","x","currentContext","MISSING_VALUE","idCounter","makeSlotClass","context","callback","thisArg","slots","parent","saved","globalKey","globalHost","Slot","bind","noContext","_createForOfIteratorHelperLoose","o","allowArrayLike","it","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr","len","arr2","_defineProperties","target","descriptor","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","unsubscribe","closeSubscription","flushSubscription","queue","notifySubscription","type","observer","onNotify","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_proto","_proto2","_proto3","resolve","reject","_this2","C","_this3","_this4","hasSeed","hasValue","seed","acc","first","_this5","_len","sources","_key","startNext","next","v","_this6","subscriptions","outer","inner","completeIfDone","observable","_iterator","_step","item","_len2","items","_key2","symbolObservablePonyfill","root","result","Symbol","ponyfill","prototype","fakeObsSymbol","validateOperation","operation","OPERATION_FIELDS","createOperation","starting","setContext","getContext","transformOperation","transformedOperation","muteAllDeprecations","slot","isMuted","warnDeprecated","cb","passthrough","op","forward","toLink","handler","ApolloLink","isTerminating","link","request","links","y","test","left","right","leftLink","rightLink","ret","second","firstLink","nextLink","setter","handle","closed","req","generateToken","authHeader","BASE_URL","httpLink","createHttpLink","authLink","headers","apolloClient","ApolloClient","InMemoryCache","TanyaWrapper","ApolloProvider"],"mappings":"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","x_google_ignoreList":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}
|