@leadmetrics-ai/website-sdk 1.1.4 → 1.1.5

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":"index.cjs.js","sources":["../node_modules/tslib/tslib.es6.js","../src/storage/index.ts","../src/analytics/index.ts","../src/client/index.ts","../src/blog/index.ts","../src/models.ts","../src/utils/notification.ts","../src/cart/index.ts","../src/products/index.ts","../src/form/client.ts","../src/form/index.ts","../src/form/types.ts","../src/newsletter/index.ts","../src/user/index.ts","../src/utils/persistence.ts","../src/utils/securityHeaders.ts","../src/faq/index.ts","../src/albums/index.ts","../src/collections/index.ts","../src/career/index.ts","../src/cart/types.ts","../src/career/types.ts","../src/blog/types.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\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);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\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;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\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]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\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);\r\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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export class StorageManager {\r\n // Helper function to check if running in the browser\r\n private isBrowser(): boolean {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n // Create a random ID combining random numbers and the current timestamp\r\n private createRandomId(): string {\r\n return (\r\n Math.random().toString(36).substring(2) +\r\n new Date().getTime().toString(36)\r\n );\r\n }\r\n\r\n // Retrieve or create a session ID in sessionStorage\r\n getSessionId(): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n let sessionId = sessionStorage.getItem(\"lm-sid\");\r\n if (!sessionId) {\r\n sessionId = this.createRandomId();\r\n sessionStorage.setItem(\"lm-sid\", sessionId);\r\n }\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n // Retrieve or create a user ID in localStorage\r\n getUserId(): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n let userId = localStorage.getItem(\"lm-uid\");\r\n if (!userId) {\r\n userId = this.createRandomId();\r\n localStorage.setItem(\"lm-uid\", userId);\r\n }\r\n return userId;\r\n }\r\n return null;\r\n }\r\n\r\n // General getValue method for retrieving items from localStorage\r\n getLocalStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n return localStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in localStorage\r\n setLocalStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from localStorage\r\n removeLocalStorageValue(key: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n // General getValue method for retrieving items from sessionStorage\r\n getSessionStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n return sessionStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in sessionStorage\r\n setSessionStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from sessionStorage\r\n removeSessionStorageValue(key: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n}\r\n","import { StorageManager } from \"../storage\";\r\n\r\nexport class AnalyticService {\r\n private storageService: StorageManager;\r\n\r\n constructor() {\r\n this.storageService = new StorageManager();\r\n }\r\n\r\n getFS(): string | null {\r\n const userId = this.storageService.getUserId();\r\n const sessionId = this.storageService.getSessionId();\r\n\r\n if (userId && sessionId) {\r\n return `${userId}:${sessionId}`;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { StorageManager } from \"../storage\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\nconst storageManager = new StorageManager();\r\n\r\nconst client = axios.create({\r\n baseURL:\r\n process.env.NEXT_PUBLIC_API_BASE_URL ||\r\n \"https://client-api.ind.leadmetrics.ai/api/client/v1/\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nclient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set Authorization token from localStorage if available\r\n const token = storageManager.getLocalStorageValue(\"authToken\");\r\n if (token) {\r\n config.headers = config.headers || {};\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nclient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await client(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default client;\r\n","import client from \"../client\";\r\nimport { PostModel, BlogCategoryModel } from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst getBlogCategories = async () => {\r\n return await client\r\n .get<BlogCategoryModel[]>(\"posts/categories\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedPost = async () => {\r\n return await client.get<PostModel>(\"posts/featured\").then((res) => res.data);\r\n};\r\n\r\nconst getBlogPosts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForCategory = async (count: number, category: string) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\r\n \"posts?size=\" + count + \"&category=\" + category\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPost = async (slug: string | string[] | undefined) => {\r\n return await client.get<PostModel>(\"posts/\" + slug).then((res) => res.data);\r\n};\r\n\r\nconst incrementPostView = async (id: string) => {\r\n return await client.post(`posts/${id}/add-view`).then((res) => res.data);\r\n};\r\n\r\nconst getSimilarPosts = async (id: string, count: number) => {\r\n return await client\r\n .get<PostModel[]>(\"posts/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllPosts = async () => {\r\n return await client.get<PostModel[]>(\"posts/all\").then((res) => res.data);\r\n};\r\n\r\nexport const blogService = {\r\n getBlogCategories,\r\n getFeaturedPost,\r\n getBlogPosts,\r\n getBlogPostsForPage,\r\n getBlogPostsForCategory,\r\n getBlogPost,\r\n getSimilarPosts,\r\n getAllPosts,\r\n incrementPostView,\r\n};\r\n","export class BaseModel {\r\n public id!: string;\r\n public refId!: string;\r\n public createdOn!: Date;\r\n}\r\n\r\nexport class UserCreatedModel extends BaseModel {\r\n public createdByUserId!: string;\r\n}\r\n\r\nexport class UserModifiableModel extends UserCreatedModel {\r\n public updatedOn?: Date;\r\n public updatedByUserId?: string;\r\n public deletedOn?: Date;\r\n public deletedByUserId?: string;\r\n}\r\n\r\nexport class PagingInfo {\r\n public currentPage: number;\r\n public itemsPerPage: number;\r\n public hasNextPage: boolean;\r\n public totalItems: number;\r\n\r\n constructor(currentPage: number, itemsPerPage: number, hasNextPage: boolean) {\r\n this.currentPage = currentPage;\r\n this.itemsPerPage = itemsPerPage;\r\n this.hasNextPage = hasNextPage;\r\n this.totalItems = 0;\r\n }\r\n}\r\n\r\nexport class SearchResult<T> {\r\n public items: Array<T> = [];\r\n public pagingInfo!: PagingInfo;\r\n}","// Simple notification service for displaying messages to users\r\nexport const showNotification = (\r\n message: string,\r\n type: \"success\" | \"error\" | \"info\" = \"info\"\r\n) => {\r\n // Simple alert-based notification - can be enhanced later\r\n if (type === \"error\") {\r\n alert(`Error: ${message}`);\r\n } else if (type === \"success\") {\r\n alert(`Success: ${message}`);\r\n } else {\r\n alert(message);\r\n }\r\n};\r\n\r\n// Notification service object\r\nexport const notificationService = {\r\n success: (message: string) => showNotification(message, \"success\"),\r\n error: (message: string) => showNotification(message, \"error\"),\r\n info: (message: string) => showNotification(message, \"info\"),\r\n};\r\n\r\nexport default notificationService;\r\n","import client from \"../client\";\r\nimport { Cart, NewLineItem, ShippingAddress } from \"./types\";\r\nimport { notificationService } from \"../utils/notification\";\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst getCart = async (id: string) => {\r\n return await client.get<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst createCart = async (body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n return;\r\n }\r\n\r\n // Get UTM tags as a comma-separated string\r\n const utmTags = getUTMTags();\r\n\r\n return await client.post<Cart>(\"carts\", body).then((res) => {\r\n if (res.data.id) {\r\n client.put(`carts/${res.data.id}/info`, {\r\n tags: utmTags,\r\n });\r\n }\r\n return res.data;\r\n });\r\n};\r\n\r\nconst updateCart = async (id: string, body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n }\r\n\r\n return await client\r\n .put<Cart>(`carts/${id}/line-items`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst deleteCart = async (id: string) => {\r\n return await client.delete<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst setShippingAddress = async (id: string, body: ShippingAddress) => {\r\n return await client\r\n .put<Cart>(`carts/${id}/shipping-address`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getShippingCost = async (\r\n cartId: string,\r\n body: { provider: string; zone: string }\r\n) => {\r\n return await client.post(`shipping/${cartId}`, body).then((res) => res.data);\r\n};\r\n\r\nconst checkoutCart = async (cartId: string) => {\r\n return await client.post(`carts/${cartId}/checkout`).then((res) => res.data);\r\n};\r\n\r\nconst checkOrderStatus = async (orderId: string) => {\r\n return await client.put(`orders/${orderId}/Status`).then((res) => res.data);\r\n};\r\n\r\nexport const cartService = {\r\n getCart,\r\n createCart,\r\n updateCart,\r\n deleteCart,\r\n setShippingAddress,\r\n getShippingCost,\r\n checkoutCart,\r\n checkOrderStatus,\r\n};\r\n","import { get } from \"http\";\r\nimport client from \"../client\";\r\nimport { SearchResult } from \"../models\";\r\nimport {\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Backward compatibility aliases\r\n ProductModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n} from \"./types\";\r\n\r\nconst getAllProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all/featured\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductCategory = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductCategoryModel>(\"productcategories/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllProducts = async () => {\r\n return await client\r\n .get<ProductModel[]>(\"products/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProducts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProducts = async (\r\n q: string,\r\n category: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?q=\" +\r\n q +\r\n \"&category=\" +\r\n category +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsByCategorySlug = async (\r\n categorySlug: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?\" +\r\n \"categorySlug=\" +\r\n categorySlug +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsVariants = async ({\r\n page,\r\n size,\r\n maxPrice,\r\n minPrice,\r\n query,\r\n}: {\r\n page?: number;\r\n size?: number;\r\n maxPrice?: number;\r\n minPrice?: number;\r\n query?: string;\r\n} = {}) => {\r\n try {\r\n const params = new URLSearchParams();\r\n\r\n if (page !== undefined) params.append(\"page\", String(page));\r\n if (size !== undefined) params.append(\"size\", String(size));\r\n if (maxPrice !== undefined) params.append(\"maxPrice\", String(maxPrice));\r\n if (minPrice !== undefined) params.append(\"minPrice\", String(minPrice));\r\n if (query) params.append(\"Query\", query);\r\n\r\n const response = await client.get<SearchResult<ProductSearchVariantModel>>(\r\n `products/variants?${params.toString()}`\r\n );\r\n\r\n return response.data;\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n\r\nconst getProduct = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductModel>(\"products/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getSimilarProducts = async (id: string, count: number) => {\r\n return await client\r\n .get<ProductModel[]>(\"products/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all products from a category slug\r\nconst getAllProductsByCategorySlug = async (slug: string) => {\r\n return await client\r\n .get<CategoryProductResponse>(\"productcategories/\" + slug + \"/products\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all categories with the same parent slug\r\nconst getCategoriesByParentSlug = async (slug: string) => {\r\n return await client\r\n .get<ParentCategoryResponse>(\"productcategories/\" + slug + \"/subcategories\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getProductsByHierarchy = async (slug: string) => {\r\n return await client\r\n .get<ProductHierarchyResponse>(\r\n \"productcategories/\" + slug + \"/products/hierarchy\"\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getAllParentCategoriesSlugsWithChildren = async () => {\r\n return await client\r\n .get<ParentCategorySlugsResponse[]>(\"productcategories/parentcategory/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const productService = {\r\n getAllProductCategories,\r\n getFeaturedProductCategories,\r\n getProductCategory,\r\n getProducts,\r\n getProductsForPage,\r\n searchProducts,\r\n searchProductsByCategorySlug,\r\n getAllProducts,\r\n getProduct,\r\n getSimilarProducts,\r\n searchProductsVariants,\r\n getAllProductsByCategorySlug,\r\n getCategoriesByParentSlug,\r\n getProductsByHierarchy,\r\n getAllParentCategoriesSlugsWithChildren,\r\n};\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\nconst formClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nformClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nformClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await formClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default formClient;\r\n","import * as yup from \"yup\";\r\nimport formClient from \"./client\";\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n};\r\n\r\n// Define base schema with type-safe indexing\r\nconst baseSchema: Partial<Record<string, yup.StringSchema>> = {\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n};\r\n\r\n// Function to dynamically build a validation schema for fields in payload\r\nconst getValidationSchema = (payload: Record<string, string>) => {\r\n const schemaFields = Object.keys(payload).reduce((acc, key) => {\r\n if (baseSchema[key]) {\r\n acc[key] = baseSchema[key] as yup.StringSchema;\r\n }\r\n return acc;\r\n }, {} as Record<string, yup.StringSchema>);\r\n return yup.object().shape(schemaFields);\r\n};\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst post = async (\r\n formId: string,\r\n payload: Record<string, string>\r\n): Promise<unknown> => {\r\n const formUrl = \"/forms/\" + formId;\r\n\r\n // Get UTM tags\r\n const utmTags = getUTMTags();\r\n\r\n // Merge UTM tags with the payload only if they exist\r\n const updatedPayload =\r\n Object.keys(utmTags).length > 0 ? { ...payload, ...utmTags } : payload;\r\n\r\n // Get the validation schema based on existing fields in the payload\r\n const validationSchema = getValidationSchema(payload);\r\n\r\n // Validate the payload dynamically\r\n await validationSchema.validate(payload, { abortEarly: false });\r\n\r\n // Send the updated payload\r\n return await formClient.post(formUrl, updatedPayload).then((res) => res.data);\r\n};\r\n\r\nexport const formService = {\r\n post,\r\n};\r\n","import * as yup from \"yup\";\r\n\r\nexport class ContactUsModel {\r\n public name!: string;\r\n public email!: string;\r\n public mobile!: string;\r\n public whatsapp!: string;\r\n public message!: string;\r\n}\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n password: /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$/,\r\n};\r\n\r\nexport const ContactUsSchema = yup.object().shape({\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n});\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { SubscriptionResponse } from \"./types\";\r\n\r\n/**\r\n * Newsletter Service with dedicated client for newsletter API\r\n *\r\n * Usage:\r\n * ```typescript\r\n * import { newsletterService, SubscriptionResponse } from '@leadmetrics-ai/website-sdk';\r\n *\r\n * const result: SubscriptionResponse = await newsletterService.subscribeNewsletter('user@example.com');\r\n *\r\n * if (result.value.result === \"Subscribed\") {\r\n * console.log('Successfully subscribed!');\r\n * } else if (result.value.result === \"AlreadySubscribed\") {\r\n * console.log('Already subscribed!');\r\n * } else {\r\n * console.log('Invalid state:', result.value.message);\r\n * }\r\n * ```\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\n// Create a separate client for newsletter service with its own base URL\r\nconst newsletterClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1/forms\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor for newsletter client\r\nnewsletterClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with retry logic for newsletter client\r\nnewsletterClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await newsletterClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst subscribeNewsletter = async (\r\n email: string\r\n): Promise<SubscriptionResponse> => {\r\n const response = await newsletterClient.post<SubscriptionResponse>(\r\n \"/newsletter/subscription\",\r\n { email }\r\n );\r\n return response.data;\r\n};\r\n\r\nexport const newsletterService = {\r\n subscribeNewsletter,\r\n};\r\n","import client from \"../client\";\r\nimport type {\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n} from \"./types\";\r\n\r\n// User registration\r\nexport const userRegister = async (\r\n data: RegisterData\r\n): Promise<RegisterResponse> => {\r\n return client.post(\"/user/register\", data).then((res) => res.data);\r\n};\r\n\r\n// User login\r\nexport const userLogin = async (data: LoginData): Promise<LoginResponse> => {\r\n return client.post(\"/user/login\", data).then((res) => res.data);\r\n};\r\n\r\n// Get user profile\r\nexport const getUserProfile = async (): Promise<any> => {\r\n return client.get(\"/user/profile\").then((res) => res.data);\r\n};\r\n\r\n// Update user profile\r\nexport const updateUserProfile = async (data: any): Promise<any> => {\r\n return client.put(\"/user/profile\", data).then((res) => res.data);\r\n};\r\n\r\n// Refresh token\r\nexport const refreshUserToken = async (): Promise<any> => {\r\n return client.post(\"/user/refresh-token\").then((res) => res.data);\r\n};\r\n\r\n// Password reset request\r\nexport const requestPasswordReset = async (email: string): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-request\", { email })\r\n .then((res) => res.data);\r\n};\r\n\r\n// Password reset confirmation\r\nexport const confirmPasswordReset = async (\r\n token: string,\r\n newPassword: string\r\n): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-confirm\", { token, newPassword })\r\n .then((res) => res.data);\r\n};\r\n\r\n// User service object\r\nconst userService = {\r\n userRegister,\r\n userLogin,\r\n getUserProfile,\r\n updateUserProfile,\r\n refreshUserToken,\r\n requestPasswordReset,\r\n confirmPasswordReset,\r\n};\r\n\r\nexport default userService;\r\n","/**\r\n * Persistence layer with expiration based on localStorage.\r\n */\r\n\r\nconst storageMock = {\r\n length: 0,\r\n getItem() {},\r\n setItem() {},\r\n removeItem() {},\r\n clear() {},\r\n};\r\n\r\nclass NamespacedLocalStorage {\r\n localStorage;\r\n key;\r\n constructor(localStorage: any, key: string) {\r\n this.localStorage = localStorage;\r\n this.key = key;\r\n }\r\n _makeKey(key: string): string {\r\n return `${this.key}__${key}`;\r\n }\r\n getItem(name: any) {\r\n return this.localStorage.getItem(this._makeKey(name));\r\n }\r\n setItem(name: any, value: any) {\r\n return this.localStorage.setItem(this._makeKey(name), value);\r\n }\r\n removeItem(name: any) {\r\n return this.localStorage.removeItem(this._makeKey(name));\r\n }\r\n}\r\n\r\nexport default class BrowserPersistence {\r\n static KEY = \"LM_BROWSER_PERSISTENCE\";\r\n storage;\r\n constructor(localStorage = globalThis.localStorage || storageMock) {\r\n this.storage = new NamespacedLocalStorage(\r\n localStorage,\r\n BrowserPersistence.KEY\r\n );\r\n }\r\n getRawItem(name: string) {\r\n return this.storage.getItem(name);\r\n }\r\n getItem(name: string) {\r\n const now = Date.now();\r\n const item = this.storage.getItem(name);\r\n if (!item) {\r\n return undefined;\r\n }\r\n const { value, ttl, timeStored } = JSON.parse(item);\r\n\r\n if (ttl && now - timeStored > ttl * 1000) {\r\n this.storage.removeItem(name);\r\n return undefined;\r\n }\r\n\r\n return JSON.parse(value);\r\n }\r\n setItem(name: string, value: any, ttl: any = 3600) {\r\n const timeStored = Date.now();\r\n this.storage.setItem(\r\n name,\r\n JSON.stringify({\r\n value: JSON.stringify(value),\r\n timeStored,\r\n ttl,\r\n })\r\n );\r\n }\r\n removeItem(name: any) {\r\n this.storage.removeItem(name);\r\n }\r\n}\r\n","export interface SecurityHeader {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nconst defaultContentSecurityPolicy: string[] = [\r\n \"default-src 'self'\",\r\n \"script-src 'self' 'unsafe-inline' https://www.googletagmanager.com\",\r\n \"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com\",\r\n \"img-src 'self' data: blob: https://assets.leadmetrics.ai https://lmsamediaprodeastasia.blob.core.windows.net https://lmsaprodcentralindia.blob.core.windows.net https://images.unsplash.com https://leadmetrics.ai\",\r\n \"font-src 'self' https://fonts.gstatic.com\",\r\n \"connect-src 'self' https://api.ind.leadmetrics.ai https://www.google-analytics.com https://www.googletagmanager.com\",\r\n \"frame-ancestors 'none'\",\r\n \"object-src 'none'\",\r\n \"base-uri 'self'\",\r\n];\r\n\r\nconst defaultHeaders: SecurityHeader[] = [\r\n {\r\n key: \"Content-Security-Policy\",\r\n value: defaultContentSecurityPolicy.join(\"; \"),\r\n },\r\n {\r\n key: \"X-Content-Type-Options\",\r\n value: \"nosniff\",\r\n },\r\n {\r\n key: \"Referrer-Policy\",\r\n value: \"strict-origin-when-cross-origin\",\r\n },\r\n];\r\n\r\nexport interface SecurityHeaderOptions {\r\n extendCsp?: string[];\r\n omitHeaders?: string[];\r\n additionalHeaders?: SecurityHeader[];\r\n}\r\n\r\nconst buildContentSecurityPolicy = (extendCsp: string[] = []): string => {\r\n return [...defaultContentSecurityPolicy, ...extendCsp].join(\"; \");\r\n};\r\n\r\nexport const getDefaultSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): SecurityHeader[] => {\r\n const { extendCsp = [], omitHeaders = [], additionalHeaders = [] } = options;\r\n\r\n const headers = defaultHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n const cspIndex = headers.findIndex((header) => header.key === \"Content-Security-Policy\");\r\n\r\n if (cspIndex !== -1) {\r\n headers[cspIndex].value = buildContentSecurityPolicy(extendCsp);\r\n }\r\n\r\n const mergedAdditionalHeaders = additionalHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n return [...headers, ...mergedAdditionalHeaders];\r\n};\r\n\r\nexport const getNextSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): Array<{ source: string; headers: SecurityHeader[] }> => {\r\n return [\r\n {\r\n source: \"/(.*)\",\r\n headers: getDefaultSecurityHeaders(options),\r\n },\r\n ];\r\n};\r\n\r\nexport const securityHeadersConfig = {\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n};\r\n\r\nexport default securityHeadersConfig;\r\n","import client from \"../client\";\r\nimport { FAQData } from \"./types\";\r\n\r\nconst getFaq = async (slug: string) => {\r\n return await client.get<FAQData>(`faqs/${slug}`).then((res) => res.data);\r\n};\r\n\r\nexport const faqService = {\r\n getFaq,\r\n};\r\n","import client from \"../client\";\r\nimport { Album, AlbumResponse } from \"./types\";\r\n\r\nconst getAllAlbums = async () => {\r\n return await client.get<AlbumResponse>(`albums`).then((res) => res.data);\r\n};\r\n\r\nconst getAlbumById = async (id: string) => {\r\n return await client.get<Album>(`albums/${id}`).then((res) => res.data);\r\n};\r\n\r\nexport const albumService = {\r\n getAllAlbums,\r\n getAlbumById,\r\n};\r\n","import client from \"../client\";\r\nimport { Collections, CollectionDetails } from \"./types\";\r\n\r\nconst getAllCollections = async () => {\r\n return await client\r\n .get<Collections[]>(`collections/all`)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getCollectionsDetails = async (id: string) => {\r\n return await client\r\n .get<CollectionDetails>(`collections/${id}/products`)\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const collectionService = {\r\n getAllCollections,\r\n getCollectionsDetails,\r\n};\r\n","import client from \"../client\";\r\nimport {\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n} from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst sanitizeFreeText = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\\u202E\\u202D]/g, \"\")\r\n .replace(/[^A-Za-z0-9\\s'.-]/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\nconst sanitizeEmail = (value: string) =>\r\n value\r\n .replace(/[^A-Za-z0-9@._+-]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizePhone = (value: string) =>\r\n value\r\n .replace(/[^0-9+]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeFileName = (value: string) =>\r\n value\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'\\\\]/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeContent = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeUrl = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'<>]/g, \"\") // Remove potential XSS characters from URL\r\n .trim();\r\n\r\nconst getAllJobs = async (): Promise<JobModel[]> => {\r\n try {\r\n const response = await client.get<JobModel[]>(\"jobs\");\r\n // API returns plain array, not SearchResult wrapper\r\n const data = response?.data;\r\n\r\n // Ensure we always return an array\r\n if (Array.isArray(data)) {\r\n return data;\r\n }\r\n\r\n // Fallback: check if it's wrapped in items property\r\n if (\r\n data &&\r\n typeof data === \"object\" &&\r\n \"items\" in data &&\r\n Array.isArray((data as any).items)\r\n ) {\r\n return (data as any).items;\r\n }\r\n\r\n console.warn(\"Unexpected jobs data format:\", data);\r\n return [];\r\n } catch (error) {\r\n console.error(\"Error fetching jobs:\", error);\r\n return []; // Return empty array on error\r\n }\r\n};\r\n\r\nconst getJobBySlug = async (slug: string | undefined) => {\r\n return await client\r\n .get<JobModel>(`jobs/by-slug/${slug}`)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst searchJobs = async (params?: {\r\n search?: string;\r\n category?: string;\r\n location?: string;\r\n employmentType?: string;\r\n page?: number;\r\n size?: number;\r\n}): Promise<SearchResult<JobModel>> => {\r\n try {\r\n const queryParams = new URLSearchParams();\r\n\r\n if (params?.search) queryParams.append(\"search\", params.search);\r\n if (params?.category) queryParams.append(\"category\", params.category);\r\n if (params?.location) queryParams.append(\"location\", params.location);\r\n if (params?.employmentType)\r\n queryParams.append(\"employmentType\", params.employmentType);\r\n if (params?.page) queryParams.append(\"page\", params.page.toString());\r\n if (params?.size) queryParams.append(\"size\", params.size.toString());\r\n\r\n const queryString = queryParams.toString();\r\n const url = queryString ? `jobs?${queryString}` : \"jobs\";\r\n\r\n const response = await client.get<SearchResult<JobModel>>(url);\r\n\r\n // Ensure items is always an array\r\n return {\r\n items: Array.isArray(response?.data?.items) ? response.data.items : [],\r\n pagingInfo: response?.data?.pagingInfo || {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n } catch (error) {\r\n console.error(\"Error searching jobs:\", error);\r\n // Return empty result on error\r\n return {\r\n items: [],\r\n pagingInfo: {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n }\r\n};\r\n\r\nconst applyForJob = async (\r\n data: JobApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n if (data.jobId) formData.append(\"JobId\", data.jobId);\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"jobs/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst submitCandidateApplication = async (\r\n data: CandidateApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"candidates/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nexport const careerService = {\r\n getAllJobs,\r\n getJobBySlug,\r\n searchJobs,\r\n applyForJob,\r\n submitCandidateApplication,\r\n};\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport class Cart extends UserModifiableModel {\r\n lineItems?: LineItem[];\r\n shippingAddress?: ShippingAddress;\r\n total!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n shippingFee?: ShippingFee;\r\n}\r\n\r\nexport class ShippingFee {\r\n feeAmount!: number;\r\n feeType!: string;\r\n feeValue!: number;\r\n}\r\n\r\nexport class LineItem {\r\n id!: string;\r\n productId!: string;\r\n variantId!: string;\r\n productSlug!: string;\r\n productName!: string;\r\n productImage!: string;\r\n price!: number;\r\n quantity!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n attributes!: Record<string, string>;\r\n}\r\n\r\nexport class NewLineItem {\r\n productId!: string;\r\n quantity!: number;\r\n id!: string;\r\n}\r\n\r\nexport class ShippingAddress {\r\n id!: string;\r\n name!: string;\r\n email!: string;\r\n mobile!: string;\r\n address!: string;\r\n city!: string;\r\n zipcode!: string;\r\n state!: string;\r\n country!: string;\r\n landmark?: string;\r\n alternateMobile?: string;\r\n deliveryInstructions?: string;\r\n isDefault!: boolean;\r\n}\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport interface JobLocation {\r\n city: string;\r\n state: string;\r\n country: string;\r\n remote: boolean;\r\n hybrid: boolean;\r\n}\r\n\r\nexport interface JobSalary {\r\n min: number;\r\n max: number;\r\n currency: string;\r\n}\r\n\r\nexport interface JobRequirements {\r\n experience: string;\r\n education: string;\r\n requiredSkills: string[];\r\n preferredSkills: string[];\r\n}\r\n\r\nexport interface JobCategory {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface HiringManager {\r\n id: string;\r\n name: string;\r\n email: string;\r\n}\r\n\r\nexport interface JobStats {\r\n views: number;\r\n applications: number;\r\n activeApplications: number;\r\n}\r\n\r\nexport class JobModel extends UserModifiableModel {\r\n title!: string;\r\n slug!: string;\r\n description!: string;\r\n category!: JobCategory;\r\n department!: string;\r\n employmentType!: string;\r\n location!: JobLocation;\r\n salary!: JobSalary;\r\n requirements!: JobRequirements;\r\n status!: string;\r\n numberOfPositions!: number;\r\n postedDate!: Date;\r\n closingDate!: Date;\r\n hiringManager!: HiringManager;\r\n stats!: JobStats;\r\n isActive!: boolean;\r\n tenantId!: string;\r\n}\r\n\r\nexport interface JobApplicationData {\r\n jobId?: string;\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number | null;\r\n currency: string;\r\n currentSalary?: number | null;\r\n expectedSalary?: number | null;\r\n noticePeriod?: number | null;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File | null;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface CandidateApplicationData {\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number;\r\n currency: string;\r\n currentSalary?: number;\r\n expectedSalary?: number;\r\n noticePeriod?: number;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface JobApplicationResponse {\r\n success: boolean;\r\n message: string;\r\n applicationId?: string;\r\n}\r\n","import { UserModifiableModel } from \"../models\";\r\nimport { FAQItem } from \"../faq/types\";\r\n\r\nexport class PostModel extends UserModifiableModel {\r\n slug!: string;\r\n isFeatured!: boolean;\r\n isActive!: boolean;\r\n category!: string;\r\n featuredImage!: string;\r\n title!: string;\r\n previewContent!: string;\r\n content!: string;\r\n readTime!: number;\r\n impressions!: number;\r\n views!: number;\r\n likes!: number;\r\n publishedOn!: Date;\r\n tags?: string[];\r\n categoryInfo!: {\r\n id: string | null;\r\n name: string | null;\r\n slug: string | null;\r\n };\r\n seo!: {\r\n title: string;\r\n description: string;\r\n keywords: string;\r\n };\r\n author?: {\r\n name?: string;\r\n id?: string;\r\n };\r\n faq?: FAQItem[];\r\n}\r\n\r\nexport type BlogCategoryModel = {\r\n name: string;\r\n slug: string;\r\n};\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","StorageManager","isBrowser","window","createRandomId","Math","random","toString","substring","Date","getTime","getSessionId","this","sessionStorage","sessionId","getItem","setItem","getUserId","localStorage","userId","getLocalStorageValue","key","setLocalStorageValue","removeLocalStorageValue","removeItem","getSessionStorageValue","setSessionStorageValue","removeSessionStorageValue","AnalyticService","constructor","storageService","getFS","analyticService","storageManager","client","axios","create","baseURL","process","env","NEXT_PUBLIC_API_BASE_URL","timeout","RETRY_CONFIG","shouldRetry","error","_b","_a","config","metadata","skipRetry","response","status","interceptors","request","use","NEXT_PUBLIC_API_KEY","headers","token","Authorization","fs","Object","assign","startTime","now","retryCount","navigator","userAgent","originalRequest","delay","attempt","baseDelay","maxDelay","pow","min","calculateDelay","ms","setTimeout","retryError","isNetworkError","code","message","includes","isServerError","isClientError","_c","canRetry","blogService","getBlogCategories","get","res","data","getFeaturedPost","getBlogPosts","count","getBlogPostsForPage","page","getBlogPostsForCategory","category","getBlogPost","slug","getSimilarPosts","id","getAllPosts","incrementPostView","post","BaseModel","UserCreatedModel","UserModifiableModel","showNotification","type","alert","notificationService","success","info","cartService","getCart","createCart","body","quantity","utmTags","params","URLSearchParams","location","search","forEach","utmKey","has","keys","length","getUTMTags","put","tags","updateCart","deleteCart","delete","setShippingAddress","getShippingCost","cartId","checkoutCart","checkOrderStatus","orderId","productService","getAllProductCategories","getFeaturedProductCategories","getProductCategory","getProducts","getProductsForPage","searchProducts","q","sort","searchProductsByCategorySlug","categorySlug","getAllProducts","getProduct","getSimilarProducts","searchProductsVariants","args_1","size","maxPrice","minPrice","query","undefined","append","String","getAllProductsByCategorySlug","getCategoriesByParentSlug","getProductsByHierarchy","getAllParentCategoriesSlugsWithChildren","formClient","baseSchema","name","yup","string","required","email","mobile","matches","formService","formId","payload","formUrl","updatedPayload","validationSchema","schemaFields","reduce","acc","object","shape","getValidationSchema","validate","abortEarly","newsletterClient","newsletterService","subscribeNewsletter","userService","userRegister","userLogin","getUserProfile","updateUserProfile","refreshUserToken","requestPasswordReset","confirmPasswordReset","newPassword","storageMock","clear","NamespacedLocalStorage","_makeKey","BrowserPersistence","globalThis","storage","KEY","getRawItem","item","ttl","timeStored","JSON","parse","stringify","defaultContentSecurityPolicy","defaultHeaders","join","getDefaultSecurityHeaders","options","extendCsp","omitHeaders","additionalHeaders","filter","header","map","cspIndex","findIndex","buildContentSecurityPolicy","mergedAdditionalHeaders","getNextSecurityHeaders","source","securityHeadersConfig","faqService","getFaq","albumService","getAllAlbums","getAlbumById","collectionService","getAllCollections","getCollectionsDetails","sanitizeFreeText","replace","trim","sanitizeEmail","sanitizePhone","sanitizeFileName","sanitizeContent","sanitizeUrl","careerService","getAllJobs","Array","isArray","items","console","warn","getJobBySlug","searchJobs","queryParams","employmentType","queryString","url","pagingInfo","currentPage","itemsPerPage","hasNextPage","totalItems","applyForJob","sanitizedName","sanitizedEmail","sanitizedMobile","formData","FormData","jobId","resume","experience","Number","currency","currentSalary","expectedSalary","noticePeriod","nationality","coverLetter","photo","linkedInUrl","submitCandidateApplication"],"mappings":"+TAkHO,SAASA,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAQ,CAAG,MAAOG,GAAKL,EAAOK,GAAO,CAC3F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,GAAO,CAC9F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAO,KAIhBO,KAAKR,EAAWK,EAAY,CAC9GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OACtE,GACA,CAqMkD,mBAApBO,iBAAiCA,sBC/TlDC,EAEH,SAAAC,GACN,MAAyB,oBAAXC,MACf,CAGO,cAAAC,GACN,OACEC,KAAKC,SAASC,SAAS,IAAIC,UAAU,IACrC,IAAIC,MAAOC,UAAUH,SAAS,GAEjC,CAGD,YAAAI,GACE,GAAIC,KAAKV,aAAeC,OAAOU,eAAgB,CAC7C,IAAIC,EAAYD,eAAeE,QAAQ,UAKvC,OAJKD,IACHA,EAAYF,KAAKR,iBACjBS,eAAeG,QAAQ,SAAUF,IAE5BA,CACR,CACD,OAAO,IACR,CAGD,SAAAG,GACE,GAAIL,KAAKV,aAAeC,OAAOe,aAAc,CAC3C,IAAIC,EAASD,aAAaH,QAAQ,UAKlC,OAJKI,IACHA,EAASP,KAAKR,iBACdc,aAAaF,QAAQ,SAAUG,IAE1BA,CACR,CACD,OAAO,IACR,CAGD,oBAAAC,CAAqBC,GACnB,OAAIT,KAAKV,aAAeC,OAAOe,aACtBA,aAAaH,QAAQM,GAEvB,IACR,CAGD,oBAAAC,CAAqBD,EAAa9B,GAC5BqB,KAAKV,aAAeC,OAAOe,cAC7BA,aAAaF,QAAQK,EAAK9B,EAE7B,CAGD,uBAAAgC,CAAwBF,GAClBT,KAAKV,aAAeC,OAAOe,cAC7BA,aAAaM,WAAWH,EAE3B,CAGD,sBAAAI,CAAuBJ,GACrB,OAAIT,KAAKV,aAAeC,OAAOU,eACtBA,eAAeE,QAAQM,GAEzB,IACR,CAGD,sBAAAK,CAAuBL,EAAa9B,GAC9BqB,KAAKV,aAAeC,OAAOU,gBAC7BA,eAAeG,QAAQK,EAAK9B,EAE/B,CAGD,yBAAAoC,CAA0BN,GACpBT,KAAKV,aAAeC,OAAOU,gBAC7BA,eAAeW,WAAWH,EAE7B,QChFUO,EAGX,WAAAC,GACEjB,KAAKkB,eAAiB,IAAI7B,CAC3B,CAED,KAAA8B,GACE,MAAMZ,EAASP,KAAKkB,eAAeb,YAC7BH,EAAYF,KAAKkB,eAAenB,eAEtC,OAAIQ,GAAUL,EACL,GAAGK,KAAUL,IAGf,IACR,ECcH,MAAMkB,EAAkB,IAAIJ,EACtBK,EAAiB,IAAIhC,EAErBiC,EAASC,EAAMC,OAAO,CAC1BC,QACEC,QAAQC,IAAIC,0BACZ,uDACFC,QAAS,MAILC,EACK,EADLA,EAEQ,IAFRA,EAGM,IAgBNC,EAAeC,YAEnB,GAA0B,QAAtBC,UAAAC,EAAAF,EAAMG,6BAAQC,gBAAQ,IAAAH,OAAA,EAAAA,EAAEI,UAC1B,OAAO,EAIT,IAAKL,EAAMM,SACT,OAAO,EAGT,MAAMC,EAASP,EAAMM,SAASC,OAC9B,OACEA,GAAU,KACC,MAAXA,GACW,MAAXA,GACW,MAAXA,GACW,MAAXA,CACA,EAcJjB,EAAOkB,aAAaC,QAAQC,KACnBP,GAAUjE,OAAA,OAAA,OAAA,GAAA,kBACf,IAEMwD,QAAQC,IAAIgB,sBACdR,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQ,WAAalB,QAAQC,IAAIgB,qBAI1C,MAAME,EAAQxB,EAAeb,qBAAqB,aAC9CqC,IACFV,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQE,cAAgB,UAAUD,KAI3C,MAAME,EAAK3B,EAAgBD,QAqB3B,OApBI4B,IACFZ,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAY,GAAIG,GAIzBZ,EAAOC,SAAQY,OAAAC,OAAAD,OAAAC,OAAA,GACVd,EAAOC,UAAQ,CAClBc,UAAWrD,KAAKsD,MAChBC,YAA2B,QAAflB,EAAAC,EAAOC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEkB,aAAc,IAIvB,oBAAX7D,SACT4C,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QACL,cACE,uBAAuBS,UAAUC,aAGhCnB,CACR,CAAC,MAAOH,GACP,OAAOG,CACR,CACH,MACCH,GACQzD,QAAQE,OAAOuD,KAK1BV,EAAOkB,aAAaF,SAASI,KAC1BJ,IAEKA,EAASH,OAAOC,WAClBE,EAASH,OAAOC,SAASgB,WAAa,GAEjCd,KAEFN,GAAS9D,OAAA,OAAA,OAAA,GAAA,sBACd,MAAMqF,EAAkBvB,EAAMG,OAG9B,IAAKoB,EACH,OAAOhF,QAAQE,OAAOuD,GAInBuB,EAAgBnB,WACnBmB,EAAgBnB,SAAW,CAAEgB,WAAY,IAG3C,MAAMA,EAAaG,EAAgBnB,SAASgB,YAAc,EAK1D,GAFiBA,EAAatB,GAAwBC,EAAYC,GAEpD,CAEZuB,EAAgBnB,SAASgB,WAAaA,EAAa,EAGnD,MAAMI,EAzHW,EACrBC,EACAC,EACAC,KAEA,MAAMH,EAAQE,EAAYjE,KAAKmE,IAAI,EAAGH,EAAU,GAChD,OAAOhE,KAAKoE,IAAIL,EAAOG,EAAS,EAmHdG,CACZP,EAAgBnB,SAASgB,WACzBtB,EACAA,SA/HOiC,EAmIGP,EAlIhB,IAAIjF,SAASC,GAAYwF,WAAWxF,EAASuF,MAoIzC,IAEE,aAAazC,EAAOiC,EACrB,CAAC,MAAOU,GAEPjC,EAAQiC,CACT,CACF,CA5IS,IAACF,EAsJX,OAPA/B,EAAMkC,eA9Ga,CAAClC,UACtB,OACGA,EAAMM,WACS,kBAAfN,EAAMmC,MACU,gBAAfnC,EAAMmC,MACS,iBAAfnC,EAAMmC,OACS,QAAfjC,EAAAF,EAAMoC,eAAS,IAAAlC,OAAA,EAAAA,EAAAmC,SAAS,kBAC1B,EAuGuBH,CAAelC,GACtCA,EAAMsC,eAAgC,QAAhBpC,EAAAF,EAAMM,gBAAU,IAAAJ,OAAA,EAAAA,EAAAK,SAAU,IAChDP,EAAMuC,eACY,UAAhBvC,EAAMM,gBAAU,IAAAL,OAAA,EAAAA,EAAAM,SAAU,cAAOiC,EAAAxC,EAAMM,+BAAUC,QAAS,IAC5DP,EAAMoB,WAAaA,EACnBpB,EAAMyC,SAAW1C,EAAYC,IAAUoB,EAAatB,EAE7CvD,QAAQE,OAAOuD,EACxB,MCrMF,MAgDa0C,EAAc,CACzBC,kBAjDwB,IAAWzG,OAAA,OAAA,OAAA,GAAA,YACnC,aAAaoD,EACVsD,IAAyB,oBACzB1F,MAAM2F,GAAQA,EAAIC,MACvB,IA8CEC,gBA5CsB,IAAW7G,OAAA,OAAA,OAAA,GAAA,YACjC,aAAaoD,EAAOsD,IAAe,kBAAkB1F,MAAM2F,GAAQA,EAAIC,MACzE,IA2CEE,aAzC0BC,GAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC3C,aAAaoD,EACVsD,IAA6B,cAAgBK,GAC7C/F,MAAM2F,GAAQA,EAAIC,MACvB,IAsCEI,oBApC0B,CAAOD,EAAeE,IAAgBjH,OAAA,OAAA,OAAA,GAAA,YAChE,aAAaoD,EACVsD,IAA6B,cAAgBK,EAAQ,SAAWE,GAChEjG,MAAM2F,GAAQA,EAAIC,MACvB,IAiCEM,wBA/B8B,CAAOH,EAAeI,IAAoBnH,OAAA,OAAA,OAAA,GAAA,YACxE,aAAaoD,EACVsD,IACC,cAAgBK,EAAQ,aAAeI,GAExCnG,MAAM2F,GAAQA,EAAIC,MACvB,IA0BEQ,YAxByBC,GAAuCrH,OAAA,OAAA,OAAA,GAAA,YAChE,aAAaoD,EAAOsD,IAAe,SAAWW,GAAMrG,MAAM2F,GAAQA,EAAIC,MACxE,IAuBEU,gBAjBsB,CAAOC,EAAYR,IAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC1D,aAAaoD,EACVsD,IAAiB,SAAWa,EAAK,kBAAoBR,GACrD/F,MAAM2F,GAAQA,EAAIC,MACvB,IAcEY,YAZkB,IAAWxH,OAAA,OAAA,OAAA,GAAA,YAC7B,aAAaoD,EAAOsD,IAAiB,aAAa1F,MAAM2F,GAAQA,EAAIC,MACtE,IAWEa,kBAvB+BF,GAAcvH,OAAA,OAAA,OAAA,GAAA,YAC7C,aAAaoD,EAAOsE,KAAK,SAASH,cAAevG,MAAM2F,GAAQA,EAAIC,MACrE,WCxCae,GAMP,MAAOC,UAAyBD,GAIhC,MAAOE,UAA4BD,GCTlC,MAAME,EAAmB,CAC9B5B,EACA6B,EAAqC,UAGxB,UAATA,EACFC,MAAM,UAAU9B,KACE,YAAT6B,EACTC,MAAM,YAAY9B,KAElB8B,MAAM9B,EACP,EAIU+B,EAAsB,CACjCC,QAAUhC,GAAoB4B,EAAiB5B,EAAS,WACxDpC,MAAQoC,GAAoB4B,EAAiB5B,EAAS,SACtDiC,KAAOjC,GAAoB4B,EAAiB5B,EAAS,SCiE1CkC,EAAc,CACzBC,QA7DqBd,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACnC,aAAaoD,EAAOsD,IAAU,SAASa,KAAMvG,MAAM2F,GAAQA,EAAIC,MACjE,IA4DE0B,WA1DwBC,GAAqBvI,OAAA,OAAA,OAAA,GAAA,YAE7C,GAAIuI,EAAKC,SAAW,EAElB,YADAP,EAAoBnE,MAAM,qCAK5B,MAAM2E,EA/BW,MACjB,MAAMC,EAAS,IAAIC,gBAAgBtH,OAAOuH,SAASC,QAC7CJ,EAAkC,CAAA,EAcxC,MAZA,CACE,aACA,aACA,eACA,WACA,eACAK,SAASC,IACLL,EAAOM,IAAID,KACbN,EAAQM,GAAUL,EAAOhC,IAAIqC,IAAW,GACzC,IAGIjE,OAAOmE,KAAKR,GAASS,OAAS,EAAIT,EAAU,EAAE,EAerCU,GAEhB,aAAa/F,EAAOsE,KAAW,QAASa,GAAMvH,MAAM2F,IAC9CA,EAAIC,KAAKW,IACXnE,EAAOgG,IAAI,SAASzC,EAAIC,KAAKW,UAAW,CACtC8B,KAAMZ,IAGH9B,EAAIC,OAEf,IAyCE0C,WAvCiB,CAAO/B,EAAYgB,IAAqBvI,OAAA,OAAA,OAAA,GAAA,YAMzD,OAJIuI,EAAKC,SAAW,GAClBP,EAAoBnE,MAAM,2CAGfV,EACVgG,IAAU,SAAS7B,eAAiBgB,GACpCvH,MAAM2F,GAAQA,EAAIC,MACvB,IA+BE2C,WA7BwBhC,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACtC,aAAaoD,EAAOoG,OAAa,SAASjC,KAAMvG,MAAM2F,GAAQA,EAAIC,MACpE,IA4BE6C,mBA1ByB,CAAOlC,EAAYgB,IAAyBvI,OAAA,OAAA,OAAA,GAAA,YACrE,aAAaoD,EACVgG,IAAU,SAAS7B,qBAAuBgB,GAC1CvH,MAAM2F,GAAQA,EAAIC,MACvB,IAuBE8C,gBArBsB,CACtBC,EACApB,IACEvI,OAAA,OAAA,OAAA,GAAA,YACF,aAAaoD,EAAOsE,KAAK,YAAYiC,IAAUpB,GAAMvH,MAAM2F,GAAQA,EAAIC,MACzE,IAiBEgD,aAf0BD,GAAkB3J,OAAA,OAAA,OAAA,GAAA,YAC5C,aAAaoD,EAAOsE,KAAK,SAASiC,cAAmB3I,MAAM2F,GAAQA,EAAIC,MACzE,IAcEiD,iBAZ8BC,GAAmB9J,OAAA,OAAA,OAAA,GAAA,YACjD,aAAaoD,EAAOgG,IAAI,UAAUU,YAAkB9I,MAAM2F,GAAQA,EAAIC,MACxE,KC/DA,MA0JamD,EAAiB,CAC5BC,wBA3J8B,IAAWhK,OAAA,OAAA,OAAA,GAAA,YACzC,aAAaoD,EACVsD,IAA4B,yBAC5B1F,MAAM2F,GAAQA,EAAIC,MACvB,IAwJEqD,6BAtJmC,IAAWjK,OAAA,OAAA,OAAA,GAAA,YAC9C,aAAaoD,EACVsD,IAA4B,kCAC5B1F,MAAM2F,GAAQA,EAAIC,MACvB,IAmJEsD,mBAjJgC7C,GAAuCrH,OAAA,OAAA,OAAA,GAAA,YACvE,aAAaoD,EACVsD,IAA0B,qBAAuBW,GACjDrG,MAAM2F,GAAQA,EAAIC,MACvB,IA8IEuD,YAtIyBpD,GAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC1C,aAAaoD,EACVsD,IAAgC,iBAAmBK,GACnD/F,MAAM2F,GAAQA,EAAIC,MACvB,IAmIEwD,mBAjIyB,CAAOrD,EAAeE,IAAgBjH,OAAA,OAAA,OAAA,GAAA,YAC/D,aAAaoD,EACVsD,IAAgC,iBAAmBK,EAAQ,SAAWE,GACtEjG,MAAM2F,GAAQA,EAAIC,MACvB,IA8HEyD,eA5HqB,CACrBC,EACAnD,EACAJ,EACAE,EACAsD,IACEvK,OAAA,OAAA,OAAA,GAAA,YACF,aAAaoD,EACVsD,IACC,cACE4D,EACA,aACAnD,EACA,SACAJ,EACA,SACAE,EACA,SACAsD,GAEHvJ,MAAM2F,GAAQA,EAAIC,MACvB,IAwGE4D,6BAtGmC,CACnCC,EACA1D,EACAE,EACAsD,IACEvK,OAAA,OAAA,OAAA,GAAA,YACF,aAAaoD,EACVsD,IACC,yBAEE+D,EACA,SACA1D,EACA,SACAE,EACA,SACAsD,GAEHvJ,MAAM2F,GAAQA,EAAIC,MACvB,IAoFE8D,eAhJqB,IAAW1K,OAAA,OAAA,OAAA,GAAA,YAChC,aAAaoD,EACVsD,IAAoB,gBACpB1F,MAAM2F,GAAQA,EAAIC,MACvB,IA6IE+D,WAnDwBtD,GAAuCrH,OAAA,OAAA,OAAA,GAAA,YAC/D,aAAaoD,EACVsD,IAAkB,YAAcW,GAChCrG,MAAM2F,GAAQA,EAAIC,MACvB,IAgDEgE,mBA9CyB,CAAOrD,EAAYR,IAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC7D,aAAaoD,EACVsD,IAAoB,YAAca,EAAK,kBAAoBR,GAC3D/F,MAAM2F,GAAQA,EAAIC,MACvB,IA2CEiE,uBArF6B,IAAAC,IAYrB9K,OAAA,EAAA,IAAA8K,QAAA,GAAA,WAZ4B7D,KACpCA,EAAI8D,KACJA,EAAIC,SACJA,EAAQC,SACRA,EAAQC,MACRA,GAOE,IACF,IACE,MAAMxC,EAAS,IAAIC,qBAENwC,IAATlE,GAAoByB,EAAO0C,OAAO,OAAQC,OAAOpE,SACxCkE,IAATJ,GAAoBrC,EAAO0C,OAAO,OAAQC,OAAON,SACpCI,IAAbH,GAAwBtC,EAAO0C,OAAO,WAAYC,OAAOL,SAC5CG,IAAbF,GAAwBvC,EAAO0C,OAAO,WAAYC,OAAOJ,IACzDC,GAAOxC,EAAO0C,OAAO,QAASF,GAMlC,aAJuB9H,EAAOsD,IAC5B,qBAAqBgC,EAAOjH,eAGdmF,IACjB,CAAC,MAAO9C,GACP,MAAMA,CACP,CACH,IAwDEwH,6BAzC0CjE,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YAC1D,aAAaoD,EACVsD,IAA6B,qBAAuBW,EAAO,aAC3DrG,MAAM2F,GAAQA,EAAIC,MACvB,IAsCE2E,0BAnCuClE,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YACvD,aAAaoD,EACVsD,IAA4B,qBAAuBW,EAAO,kBAC1DrG,MAAM2F,GAAQA,EAAIC,MACvB,IAgCE4E,uBA7BoCnE,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YACpD,aAAaoD,EACVsD,IACC,qBAAuBW,EAAO,uBAE/BrG,MAAM2F,GAAQA,EAAIC,MACvB,IAwBE6E,wCArB8C,IAAWzL,OAAA,OAAA,OAAA,GAAA,YACzD,aAAaoD,EACVsD,IAAmC,wCACnC1F,MAAM2F,GAAQA,EAAIC,MACvB,KC5IM1D,EAAkB,IAAIJ,EAEtB4I,EAAarI,EAAMC,OAAO,CAC9BC,QAAS,oDACTI,QAAS,MAILC,EACK,EADLA,EAEQ,IAFRA,EAGM,IAgBNC,EAAeC,YAEnB,GAA0B,QAAtBC,UAAAC,EAAAF,EAAMG,6BAAQC,gBAAQ,IAAAH,OAAA,EAAAA,EAAEI,UAC1B,OAAO,EAIT,IAAKL,EAAMM,SACT,OAAO,EAGT,MAAMC,EAASP,EAAMM,SAASC,OAC9B,OACEA,GAAU,KACC,MAAXA,GACW,MAAXA,GACW,MAAXA,GACW,MAAXA,CACA,EAcJqH,EAAWpH,aAAaC,QAAQC,KACvBP,GAAUjE,OAAA,OAAA,OAAA,GAAA,kBACf,IAEMwD,QAAQC,IAAIgB,sBACdR,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQ,WAAalB,QAAQC,IAAIgB,qBAI1C,MAAMI,EAAK3B,EAAgBD,QAqB3B,OApBI4B,IACFZ,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAY,GAAIG,GAIzBZ,EAAOC,SAAQY,OAAAC,OAAAD,OAAAC,OAAA,GACVd,EAAOC,UAAQ,CAClBc,UAAWrD,KAAKsD,MAChBC,YAA2B,QAAflB,EAAAC,EAAOC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEkB,aAAc,IAIvB,oBAAX7D,SACT4C,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QACL,cACE,uBAAuBS,UAAUC,aAGhCnB,CACR,CAAC,MAAOH,GACP,OAAOG,CACR,CACH,MACCH,GACQzD,QAAQE,OAAOuD,KAK1B4H,EAAWpH,aAAaF,SAASI,KAC9BJ,IAEKA,EAASH,OAAOC,WAClBE,EAASH,OAAOC,SAASgB,WAAa,GAEjCd,KAEFN,GAAS9D,OAAA,OAAA,OAAA,GAAA,sBACd,MAAMqF,EAAkBvB,EAAMG,OAG9B,IAAKoB,EACH,OAAOhF,QAAQE,OAAOuD,GAInBuB,EAAgBnB,WACnBmB,EAAgBnB,SAAW,CAAEgB,WAAY,IAG3C,MAAMA,EAAaG,EAAgBnB,SAASgB,YAAc,EAK1D,GAFiBA,EAAatB,GAAwBC,EAAYC,GAEpD,CAEZuB,EAAgBnB,SAASgB,WAAaA,EAAa,EAGnD,MAAMI,EAlHW,EACrBC,EACAC,EACAC,KAEA,MAAMH,EAAQE,EAAYjE,KAAKmE,IAAI,EAAGH,EAAU,GAChD,OAAOhE,KAAKoE,IAAIL,EAAOG,EAAS,EA4GdG,CACZP,EAAgBnB,SAASgB,WACzBtB,EACAA,SAxHOiC,EA4HGP,EA3HhB,IAAIjF,SAASC,GAAYwF,WAAWxF,EAASuF,MA6HzC,IAEE,aAAa6F,EAAWrG,EACzB,CAAC,MAAOU,GAEPjC,EAAQiC,CACT,CACF,CArIS,IAACF,EA+IX,OAPA/B,EAAMkC,eAvGa,CAAClC,UACtB,OACGA,EAAMM,WACS,kBAAfN,EAAMmC,MACU,gBAAfnC,EAAMmC,MACS,iBAAfnC,EAAMmC,OACS,QAAfjC,EAAAF,EAAMoC,eAAS,IAAAlC,OAAA,EAAAA,EAAAmC,SAAS,kBAC1B,EAgGuBH,CAAelC,GACtCA,EAAMsC,eAAgC,QAAhBpC,EAAAF,EAAMM,gBAAU,IAAAJ,OAAA,EAAAA,EAAAK,SAAU,IAChDP,EAAMuC,eACY,UAAhBvC,EAAMM,gBAAU,IAAAL,OAAA,EAAAA,EAAAM,SAAU,cAAOiC,EAAAxC,EAAMM,+BAAUC,QAAS,IAC5DP,EAAMoB,WAAaA,EACnBpB,EAAMyC,SAAW1C,EAAYC,IAAUoB,EAAatB,EAE7CvD,QAAQE,OAAOuD,EACxB,MC3LF,MAMM6H,EAAwD,CAC5DC,KAAMC,EAAIC,SAASC,SAAS,0BAA0BpG,IAAI,GAC1DqG,MAAOH,EACJC,SACAC,SAAS,2BACTC,MAAM,8BACTC,OAAQJ,EACLC,SACAC,SAAS,mCACTG,QAbD,0GAagC,sCAClChG,QAAS2F,EAAIC,SAASC,SAAS,6BAA6BpG,IAAI,IAyDrDwG,EAAc,CACzBzE,KAxBW,CACX0E,EACAC,IACoBrM,OAAA,OAAA,OAAA,GAAA,YACpB,MAAMsM,EAAU,UAAYF,EAGtB3D,EA1BW,MACjB,MAAMC,EAAS,IAAIC,gBAAgBtH,OAAOuH,SAASC,QAC7CJ,EAAkC,CAAA,EAcxC,MAZA,CACE,aACA,aACA,eACA,WACA,eACAK,SAASC,IACLL,EAAOM,IAAID,KACbN,EAAQM,GAAUL,EAAOhC,IAAIqC,IAAW,GACzC,IAGIjE,OAAOmE,KAAKR,GAASS,OAAS,EAAIT,EAAU,EAAE,EAUrCU,GAGVoD,EACJzH,OAAOmE,KAAKR,GAASS,OAAS,iCAASmD,GAAY5D,GAAY4D,EAG3DG,EA5CoB,CAACH,IAC3B,MAAMI,EAAe3H,OAAOmE,KAAKoD,GAASK,QAAO,CAACC,EAAKpK,KACjDoJ,EAAWpJ,KACboK,EAAIpK,GAAOoJ,EAAWpJ,IAEjBoK,IACN,CAAsC,GACzC,OAAOd,EAAIe,SAASC,MAAMJ,EAAa,EAqCdK,CAAoBT,GAM7C,aAHMG,EAAiBO,SAASV,EAAS,CAAEW,YAAY,UAG1CtB,EAAWhE,KAAK4E,EAASC,GAAgBvL,MAAM2F,GAAQA,EAAIC,MAC1E,KC1D+BiF,EAAIe,SAASC,MAAM,CAChDjB,KAAMC,EAAIC,SAASC,SAAS,0BAA0BpG,IAAI,GAC1DqG,MAAOH,EACJC,SACAC,SAAS,2BACTC,MAAM,8BACTC,OAAQJ,EACLC,SACAC,SAAS,mCACTG,QAbD,0GAagC,sCAClChG,QAAS2F,EAAIC,SAASC,SAAS,6BAA6BpG,IAAI,KCQlE,MAAMzC,EAAkB,IAAIJ,EAGtBmK,EAAmB5J,EAAMC,OAAO,CACpCC,QAAS,0DACTI,QAAS,MAILC,EACK,EADLA,EAEQ,IAFRA,EAGM,IAgBNC,EAAeC,YAEnB,GAA0B,QAAtBC,UAAAC,EAAAF,EAAMG,6BAAQC,gBAAQ,IAAAH,OAAA,EAAAA,EAAEI,UAC1B,OAAO,EAIT,IAAKL,EAAMM,SACT,OAAO,EAGT,MAAMC,EAASP,EAAMM,SAASC,OAC9B,OACEA,GAAU,KACC,MAAXA,GACW,MAAXA,GACW,MAAXA,GACW,MAAXA,CACA,EAcJ4I,EAAiB3I,aAAaC,QAAQC,KAC7BP,GAAUjE,OAAA,OAAA,OAAA,GAAA,kBACf,IAEMwD,QAAQC,IAAIgB,sBACdR,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQ,WAAalB,QAAQC,IAAIgB,qBAI1C,MAAMI,EAAK3B,EAAgBD,QAa3B,OAZI4B,IACFZ,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAY,GAAIG,GAIzBZ,EAAOC,SAAQY,OAAAC,OAAAD,OAAAC,OAAA,GACVd,EAAOC,UAAQ,CAClBc,UAAWrD,KAAKsD,MAChBC,YAA2B,QAAflB,EAAAC,EAAOC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEkB,aAAc,IAGtCjB,CACR,CAAC,MAAOH,GACP,OAAOG,CACR,CACH,MACCH,GACQzD,QAAQE,OAAOuD,KAK1BmJ,EAAiB3I,aAAaF,SAASI,KACpCJ,IAEKA,EAASH,OAAOC,WAClBE,EAASH,OAAOC,SAASgB,WAAa,GAEjCd,KAEFN,GAAS9D,OAAA,OAAA,OAAA,GAAA,sBACd,MAAMqF,EAAkBvB,EAAMG,OAG9B,IAAKoB,EACH,OAAOhF,QAAQE,OAAOuD,GAInBuB,EAAgBnB,WACnBmB,EAAgBnB,SAAW,CAAEgB,WAAY,IAG3C,MAAMA,EAAaG,EAAgBnB,SAASgB,YAAc,EAK1D,GAFiBA,EAAatB,GAAwBC,EAAYC,GAEpD,CAEZuB,EAAgBnB,SAASgB,WAAaA,EAAa,EAGnD,MAAMI,EA1GW,EACrBC,EACAC,EACAC,KAEA,MAAMH,EAAQE,EAAYjE,KAAKmE,IAAI,EAAGH,EAAU,GAChD,OAAOhE,KAAKoE,IAAIL,EAAOG,EAAS,EAoGdG,CACZP,EAAgBnB,SAASgB,WACzBtB,EACAA,SAhHOiC,EAoHGP,EAnHhB,IAAIjF,SAASC,GAAYwF,WAAWxF,EAASuF,MAqHzC,IAEE,aAAaoH,EAAiB5H,EAC/B,CAAC,MAAOU,GAEPjC,EAAQiC,CACT,CACF,CA7HS,IAACF,EAuIX,OAPA/B,EAAMkC,eA/Fa,CAAClC,UACtB,OACGA,EAAMM,WACS,kBAAfN,EAAMmC,MACU,gBAAfnC,EAAMmC,MACS,iBAAfnC,EAAMmC,OACS,QAAfjC,EAAAF,EAAMoC,eAAS,IAAAlC,OAAA,EAAAA,EAAAmC,SAAS,kBAC1B,EAwFuBH,CAAelC,GACtCA,EAAMsC,eAAgC,QAAhBpC,EAAAF,EAAMM,gBAAU,IAAAJ,OAAA,EAAAA,EAAAK,SAAU,IAChDP,EAAMuC,eACY,UAAhBvC,EAAMM,gBAAU,IAAAL,OAAA,EAAAA,EAAAM,SAAU,cAAOiC,EAAAxC,EAAMM,+BAAUC,QAAS,IAC5DP,EAAMoB,WAAaA,EACnBpB,EAAMyC,SAAW1C,EAAYC,IAAUoB,EAAatB,EAE7CvD,QAAQE,OAAOuD,EACxB,MAGF,MAUaoJ,EAAoB,CAC/BC,oBAVAnB,GACiChM,OAAA,OAAA,OAAA,GAAA,YAKjC,aAJuBiN,EAAiBvF,KACtC,2BACA,CAAEsE,WAEYpF,IAClB,KC5LO,MA4CDwG,EAAc,CAClBC,aA5CAzG,GAC6B5G,OAAA,OAAA,OAAA,GAAA,YAC7B,OAAOoD,EAAOsE,KAAK,iBAAkBd,GAAM5F,MAAM2F,GAAQA,EAAIC,MAC/D,IA0CE0G,UAvC8B1G,GAA2C5G,OAAA,OAAA,OAAA,GAAA,YACzE,OAAOoD,EAAOsE,KAAK,cAAed,GAAM5F,MAAM2F,GAAQA,EAAIC,MAC5D,IAsCE2G,eAnC4B,IAAyBvN,OAAA,OAAA,OAAA,GAAA,YACrD,OAAOoD,EAAOsD,IAAI,iBAAiB1F,MAAM2F,GAAQA,EAAIC,MACvD,IAkCE4G,kBA/BsC5G,GAA2B5G,OAAA,OAAA,OAAA,GAAA,YACjE,OAAOoD,EAAOgG,IAAI,gBAAiBxC,GAAM5F,MAAM2F,GAAQA,EAAIC,MAC7D,IA8BE6G,iBA3B8B,IAAyBzN,OAAA,OAAA,OAAA,GAAA,YACvD,OAAOoD,EAAOsE,KAAK,uBAAuB1G,MAAM2F,GAAQA,EAAIC,MAC9D,IA0BE8G,qBAvByC1B,GAA+BhM,OAAA,OAAA,OAAA,GAAA,YACxE,OAAOoD,EACJsE,KAAK,+BAAgC,CAAEsE,UACvChL,MAAM2F,GAAQA,EAAIC,MACvB,IAoBE+G,qBAjBkC,CAClChJ,EACAiJ,IACgB5N,OAAA,OAAA,OAAA,GAAA,YAChB,OAAOoD,EACJsE,KAAK,+BAAgC,CAAE/C,QAAOiJ,gBAC9C5M,MAAM2F,GAAQA,EAAIC,MACvB,KC9CMiH,EAAc,CAClB3E,OAAQ,EACR,OAAAjH,GAAY,EACZ,OAAAC,GAAY,EACZ,UAAAQ,GAAe,EACf,KAAAoL,GAAU,GAGZ,MAAMC,EAGJ,WAAAhL,CAAYX,EAAmBG,GAC7BT,KAAKM,aAAeA,EACpBN,KAAKS,IAAMA,CACZ,CACD,QAAAyL,CAASzL,GACP,MAAO,GAAGT,KAAKS,QAAQA,GACxB,CACD,OAAAN,CAAQ2J,GACN,OAAO9J,KAAKM,aAAaH,QAAQH,KAAKkM,SAASpC,GAChD,CACD,OAAA1J,CAAQ0J,EAAWnL,GACjB,OAAOqB,KAAKM,aAAaF,QAAQJ,KAAKkM,SAASpC,GAAOnL,EACvD,CACD,UAAAiC,CAAWkJ,GACT,OAAO9J,KAAKM,aAAaM,WAAWZ,KAAKkM,SAASpC,GACnD,EAGH,MAAqBqC,EAGnB,WAAAlL,CAAYX,EAAe8L,WAAW9L,cAAgByL,GACpD/L,KAAKqM,QAAU,IAAIJ,EACjB3L,EACA6L,EAAmBG,IAEtB,CACD,UAAAC,CAAWzC,GACT,OAAO9J,KAAKqM,QAAQlM,QAAQ2J,EAC7B,CACD,OAAA3J,CAAQ2J,GACN,MAAM3G,EAAMtD,KAAKsD,MACXqJ,EAAOxM,KAAKqM,QAAQlM,QAAQ2J,GAClC,IAAK0C,EACH,OAEF,MAAM7N,MAAEA,EAAK8N,IAAEA,EAAGC,WAAEA,GAAeC,KAAKC,MAAMJ,GAE9C,KAAIC,GAAOtJ,EAAMuJ,EAAmB,IAAND,GAK9B,OAAOE,KAAKC,MAAMjO,GAJhBqB,KAAKqM,QAAQzL,WAAWkJ,EAK3B,CACD,OAAA1J,CAAQ0J,EAAcnL,EAAY8N,EAAW,MAC3C,MAAMC,EAAa7M,KAAKsD,MACxBnD,KAAKqM,QAAQjM,QACX0J,EACA6C,KAAKE,UAAU,CACblO,MAAOgO,KAAKE,UAAUlO,GACtB+N,aACAD,QAGL,CACD,UAAA7L,CAAWkJ,GACT9J,KAAKqM,QAAQzL,WAAWkJ,EACzB,EAvCMqC,EAAGG,IAAG,yBC7Bf,MAAMQ,EAAyC,CAC7C,qBACA,qEACA,gEACA,qNACA,4CACA,sHACA,yBACA,oBACA,mBAGIC,EAAmC,CACvC,CACEtM,IAAK,0BACL9B,MAAOmO,EAA6BE,KAAK,OAE3C,CACEvM,IAAK,yBACL9B,MAAO,WAET,CACE8B,IAAK,kBACL9B,MAAO,oCAcEsO,EAA4B,CACvCC,EAAiC,MAEjC,MAAMC,UAAEA,EAAY,GAAEC,YAAEA,EAAc,GAAEC,kBAAEA,EAAoB,IAAOH,EAE/DtK,EAAUmK,EACbO,QAAQC,IAAYH,EAAY/I,SAASkJ,EAAO9M,OAChD+M,KAAKD,GAAiBvK,OAAAC,OAAA,GAAAsK,KAEnBE,EAAW7K,EAAQ8K,WAAWH,GAA0B,4BAAfA,EAAO9M,OAEpC,IAAdgN,IACF7K,EAAQ6K,GAAU9O,MAhBa,EAACwO,EAAsB,KACjD,IAAIL,KAAiCK,GAAWH,KAAK,MAehCW,CAA2BR,IAGvD,MAAMS,EAA0BP,EAC7BC,QAAQC,IAAYH,EAAY/I,SAASkJ,EAAO9M,OAChD+M,KAAKD,GAAiBvK,OAAAC,OAAA,GAAAsK,KAEzB,MAAO,IAAI3K,KAAYgL,EAAwB,EAGpCC,EAAyB,CACpCX,EAAiC,KAE1B,CACL,CACEY,OAAQ,QACRlL,QAASqK,EAA0BC,KAK5Ba,EAAwB,CACnCd,4BACAY,kKC1EF,MAIaG,EAAa,CACxBC,OALoB1I,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YACpC,aAAaoD,EAAOsD,IAAa,QAAQW,KAAQrG,MAAM2F,GAAQA,EAAIC,MACrE,KCMaoJ,EAAe,CAC1BC,aATmB,IAAWjQ,OAAA,OAAA,OAAA,GAAA,YAC9B,aAAaoD,EAAOsD,IAAmB,UAAU1F,MAAM2F,GAAQA,EAAIC,MACrE,IAQEsJ,aAN0B3I,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACxC,aAAaoD,EAAOsD,IAAW,UAAUa,KAAMvG,MAAM2F,GAAQA,EAAIC,MACnE,KCMauJ,EAAoB,CAC/BC,kBAbwB,IAAWpQ,OAAA,OAAA,OAAA,GAAA,YACnC,aAAaoD,EACVsD,IAAmB,mBACnB1F,MAAM2F,GAAQA,EAAIC,MACvB,IAUEyJ,sBARmC9I,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACjD,aAAaoD,EACVsD,IAAuB,eAAea,cACtCvG,MAAM2F,GAAQA,EAAIC,MACvB,KCJM0J,EAAoB7P,GACxBA,EACG8P,QAAQ,kCAAmC,IAC3CA,QAAQ,WAAY,IACpBA,QAAQ,kBAAmB,IAC3BA,QAAQ,qBAAsB,IAC9BA,QAAQ,OAAQ,KAChBC,OAECC,EAAiBhQ,GACrBA,EACG8P,QAAQ,qBAAsB,IAC9BA,QAAQ,OAAQ,IAChBC,OAECE,EAAiBjQ,GACrBA,EACG8P,QAAQ,WAAY,IACpBA,QAAQ,OAAQ,IAChBC,OAECG,EAAoBlQ,GACxBA,EACG8P,QAAQ,WAAY,IACpBA,QAAQ,UAAW,IACnBC,OAECI,EAAmBnQ,GACvBA,EACG8P,QAAQ,kCAAmC,IAC3CA,QAAQ,WAAY,IACpBC,OAECK,GAAepQ,GACnBA,EACG8P,QAAQ,kCAAmC,IAC3CA,QAAQ,WAAY,IACpBA,QAAQ,UAAW,IACnBC,OA2MQM,GAAgB,CAC3BC,WA1MiB,IAAgC/Q,OAAA,OAAA,OAAA,GAAA,YACjD,IACE,MAAMoE,QAAiBhB,EAAOsD,IAAgB,QAExCE,EAAOxC,aAAA,EAAAA,EAAUwC,KAGvB,OAAIoK,MAAMC,QAAQrK,GACTA,EAKPA,GACgB,iBAATA,GACP,UAAWA,GACXoK,MAAMC,QAASrK,EAAasK,OAEpBtK,EAAasK,OAGvBC,QAAQC,KAAK,+BAAgCxK,GACtC,GACR,CAAC,MAAO9C,GAEP,OADAqN,QAAQrN,MAAM,uBAAwBA,GAC/B,EACR,CACH,IAgLEuN,aA9K0BhK,GAA4BrH,OAAA,OAAA,OAAA,GAAA,YACtD,aAAaoD,EACVsD,IAAc,gBAAgBW,KAC9BrG,MAAM2F,GAAaA,EAAIC,MAC5B,IA2KE0K,WAzKwB5I,GAOY1I,OAAA,OAAA,OAAA,GAAA,oBACpC,IACE,MAAMuR,EAAc,IAAI5I,iBAEpBD,aAAA,EAAAA,EAAQG,SAAQ0I,EAAYnG,OAAO,SAAU1C,EAAOG,SACpDH,aAAA,EAAAA,EAAQvB,WAAUoK,EAAYnG,OAAO,WAAY1C,EAAOvB,WACxDuB,aAAA,EAAAA,EAAQE,WAAU2I,EAAYnG,OAAO,WAAY1C,EAAOE,WACxDF,aAAA,EAAAA,EAAQ8I,iBACVD,EAAYnG,OAAO,iBAAkB1C,EAAO8I,iBAC1C9I,aAAA,EAAAA,EAAQzB,OAAMsK,EAAYnG,OAAO,OAAQ1C,EAAOzB,KAAKxF,aACrDiH,aAAA,EAAAA,EAAQqC,OAAMwG,EAAYnG,OAAO,OAAQ1C,EAAOqC,KAAKtJ,YAEzD,MAAMgQ,EAAcF,EAAY9P,WAC1BiQ,EAAMD,EAAc,QAAQA,IAAgB,OAE5CrN,QAAiBhB,EAAOsD,IAA4BgL,GAG1D,MAAO,CACLR,MAAOF,MAAMC,QAAwB,QAAhBjN,EAAAI,aAAA,EAAAA,EAAUwC,YAAM,IAAA5C,OAAA,EAAAA,EAAAkN,OAAS9M,EAASwC,KAAKsK,MAAQ,GACpES,YAA4B,QAAhB5N,EAAAK,aAAA,EAAAA,EAAUwC,YAAM,IAAA7C,OAAA,EAAAA,EAAA4N,aAAc,CACxCC,YAAa,EACbC,aAAc,GACdC,aAAa,EACbC,WAAY,GAGjB,CAAC,MAAOjO,GAGP,OAFAqN,QAAQrN,MAAM,wBAAyBA,GAEhC,CACLoN,MAAO,GACPS,WAAY,CACVC,YAAa,EACbC,aAAc,GACdC,aAAa,EACbC,WAAY,GAGjB,CACH,IA2HEC,YAxHApL,GACmC5G,OAAA,OAAA,OAAA,GAAA,YACnC,MAAMiS,EAAgB3B,EAAiB1J,EAAKgF,OAAShF,EAAKgF,KAAK4E,OACzD0B,EAAiBzB,EAAc7J,EAAKoF,QAAUpF,EAAKoF,MAAMwE,OACzD2B,EAAkBzB,EAAc9J,EAAKqF,SAAWrF,EAAKqF,OAAOuE,OAC5D4B,EAAW,IAAIC,SA+BrB,GA5BIzL,EAAK0L,OAAOF,EAAShH,OAAO,QAASxE,EAAK0L,OAC9CF,EAAShH,OAAO,OAAQ6G,GACxBG,EAAShH,OAAO,QAAS8G,GACzBE,EAAShH,OAAO,QAAS+G,GACzBC,EAAShH,OAAO,SAAUxE,EAAK2L,OAAQ5B,EAAiB/J,EAAK2L,OAAO3G,YAI5CT,IAApBvE,EAAK4L,YAAgD,OAApB5L,EAAK4L,YACxCJ,EAAShH,OAAO,aAAcqH,OAAO7L,EAAK4L,YAAY/Q,YACpDmF,EAAK8L,UACPN,EAAShH,OAAO,WAAYkF,EAAiB1J,EAAK8L,gBACzBvH,IAAvBvE,EAAK+L,eAAsD,OAAvB/L,EAAK+L,eAC3CP,EAAShH,OAAO,gBAAiBqH,OAAO7L,EAAK+L,eAAelR,iBAClC0J,IAAxBvE,EAAKgM,gBAAwD,OAAxBhM,EAAKgM,gBAC5CR,EAAShH,OAAO,iBAAkBqH,OAAO7L,EAAKgM,gBAAgBnR,iBACtC0J,IAAtBvE,EAAKiM,cAAoD,OAAtBjM,EAAKiM,cAC1CT,EAAShH,OAAO,qBAAsBqH,OAAO7L,EAAKiM,cAAcpR,YAC9DmF,EAAKkM,aACPV,EAAShH,OAAO,cAAekF,EAAiB1J,EAAKkM,cACnDlM,EAAKmM,aACPX,EAAShH,OAAO,cAAewF,EAAgBhK,EAAKmM,cAClDnM,EAAKoM,OACPZ,EAAShH,OAAO,QAASxE,EAAKoM,MAAOrC,EAAiB/J,EAAKoM,MAAMpH,OAC/DhF,EAAKqM,aACPb,EAAShH,OAAO,cAAeyF,GAAYjK,EAAKqM,cAG5B,oBAAX5R,OAAwB,CACjC,MAAMqH,EAAS,IAAIC,gBAAgBtH,OAAOuH,SAASC,QACnC,CACd,aACA,aACA,eACA,WACA,eAGMC,SAASvG,IACXmG,EAAOM,IAAIzG,IACb6P,EAAShH,OAAO7I,EAAKmG,EAAOhC,IAAInE,IAAQ,GACzC,GAEJ,CAED,aAAaa,EACVsE,KAA6B,aAAc0K,GAC3CpR,MAAM2F,GAAaA,EAAIC,MAC5B,IAiEEsM,2BA9DAtM,GACmC5G,OAAA,OAAA,OAAA,GAAA,YACnC,MAAMiS,EAAgB3B,EAAiB1J,EAAKgF,OAAShF,EAAKgF,KAAK4E,OACzD0B,EAAiBzB,EAAc7J,EAAKoF,QAAUpF,EAAKoF,MAAMwE,OACzD2B,EAAkBzB,EAAc9J,EAAKqF,SAAWrF,EAAKqF,OAAOuE,OAC5D4B,EAAW,IAAIC,SA8BrB,GA3BAD,EAAShH,OAAO,OAAQ6G,GACxBG,EAAShH,OAAO,QAAS8G,GACzBE,EAAShH,OAAO,QAAS+G,GACzBC,EAAShH,OAAO,SAAUxE,EAAK2L,OAAQ5B,EAAiB/J,EAAK2L,OAAO3G,YAI5CT,IAApBvE,EAAK4L,YAAgD,OAApB5L,EAAK4L,YACxCJ,EAAShH,OAAO,aAAcqH,OAAO7L,EAAK4L,YAAY/Q,YACpDmF,EAAK8L,UACPN,EAAShH,OAAO,WAAYkF,EAAiB1J,EAAK8L,gBACzBvH,IAAvBvE,EAAK+L,eAAsD,OAAvB/L,EAAK+L,eAC3CP,EAAShH,OAAO,gBAAiBqH,OAAO7L,EAAK+L,eAAelR,iBAClC0J,IAAxBvE,EAAKgM,gBAAwD,OAAxBhM,EAAKgM,gBAC5CR,EAAShH,OAAO,iBAAkBqH,OAAO7L,EAAKgM,gBAAgBnR,iBACtC0J,IAAtBvE,EAAKiM,cAAoD,OAAtBjM,EAAKiM,cAC1CT,EAAShH,OAAO,qBAAsBqH,OAAO7L,EAAKiM,cAAcpR,YAC9DmF,EAAKkM,aACPV,EAAShH,OAAO,cAAekF,EAAiB1J,EAAKkM,cACnDlM,EAAKmM,aACPX,EAAShH,OAAO,cAAewF,EAAgBhK,EAAKmM,cAClDnM,EAAKoM,OACPZ,EAAShH,OAAO,QAASxE,EAAKoM,MAAOrC,EAAiB/J,EAAKoM,MAAMpH,OAC/DhF,EAAKqM,aACPb,EAAShH,OAAO,cAAeyF,GAAYjK,EAAKqM,cAG5B,oBAAX5R,OAAwB,CACjC,MAAMqH,EAAS,IAAIC,gBAAgBtH,OAAOuH,SAASC,QACnC,CACd,aACA,aACA,eACA,WACA,eAGMC,SAASvG,IACXmG,EAAOM,IAAIzG,IACb6P,EAAShH,OAAO7I,EAAKmG,EAAOhC,IAAInE,IAAQ,GACzC,GAEJ,CAED,aAAaa,EACVsE,KAA6B,mBAAoB0K,GACjDpR,MAAM2F,GAAaA,EAAIC,MAC5B,kBCtPM,cAAoBiB,oDCsCpB,cAAwBA,kHhBjB5B,WAAA9E,CAAY6O,EAAqBC,EAAsBC,GACrDhQ,KAAK8P,YAAcA,EACnB9P,KAAK+P,aAAeA,EACpB/P,KAAKgQ,YAAcA,EACnBhQ,KAAKiQ,WAAa,CACnB,oDiBzBG,cAAyBlK,+BjB4B/B,WAAA9E,GACSjB,KAAKoP,MAAa,EAE1B","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.cjs.js","sources":["../node_modules/tslib/tslib.es6.js","../src/storage/index.ts","../src/analytics/index.ts","../src/client/index.ts","../src/blog/index.ts","../src/models.ts","../src/utils/notification.ts","../src/cart/index.ts","../src/products/index.ts","../src/form/client.ts","../src/form/index.ts","../src/form/types.ts","../src/newsletter/index.ts","../src/user/index.ts","../src/utils/persistence.ts","../src/utils/securityHeaders.ts","../src/faq/index.ts","../src/albums/index.ts","../src/collections/index.ts","../src/career/index.ts","../src/cart/types.ts","../src/career/types.ts","../src/blog/types.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\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);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\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;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\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]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\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);\r\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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export class StorageManager {\r\n // Helper function to check if running in the browser\r\n private isBrowser(): boolean {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n // Create a random ID combining random numbers and the current timestamp\r\n private createRandomId(): string {\r\n return (\r\n Math.random().toString(36).substring(2) +\r\n new Date().getTime().toString(36)\r\n );\r\n }\r\n\r\n // Retrieve or create a session ID in sessionStorage\r\n getSessionId(): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n let sessionId = sessionStorage.getItem(\"lm-sid\");\r\n if (!sessionId) {\r\n sessionId = this.createRandomId();\r\n sessionStorage.setItem(\"lm-sid\", sessionId);\r\n }\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n // Retrieve or create a user ID in localStorage\r\n getUserId(): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n let userId = localStorage.getItem(\"lm-uid\");\r\n if (!userId) {\r\n userId = this.createRandomId();\r\n localStorage.setItem(\"lm-uid\", userId);\r\n }\r\n return userId;\r\n }\r\n return null;\r\n }\r\n\r\n // General getValue method for retrieving items from localStorage\r\n getLocalStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n return localStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in localStorage\r\n setLocalStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from localStorage\r\n removeLocalStorageValue(key: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n // General getValue method for retrieving items from sessionStorage\r\n getSessionStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n return sessionStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in sessionStorage\r\n setSessionStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from sessionStorage\r\n removeSessionStorageValue(key: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n}\r\n","import { StorageManager } from \"../storage\";\r\n\r\nexport class AnalyticService {\r\n private storageService: StorageManager;\r\n\r\n constructor() {\r\n this.storageService = new StorageManager();\r\n }\r\n\r\n getFS(): string | null {\r\n const userId = this.storageService.getUserId();\r\n const sessionId = this.storageService.getSessionId();\r\n\r\n if (userId && sessionId) {\r\n return `${userId}:${sessionId}`;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { StorageManager } from \"../storage\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\nconst storageManager = new StorageManager();\r\n\r\nconst client = axios.create({\r\n baseURL:\r\n process.env.NEXT_PUBLIC_API_BASE_URL ||\r\n \"https://client-api.ind.leadmetrics.ai/api/client/v1/\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nclient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set Authorization token from localStorage if available\r\n const token = storageManager.getLocalStorageValue(\"authToken\");\r\n if (token) {\r\n config.headers = config.headers || {};\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nclient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await client(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default client;\r\n","import client from \"../client\";\r\nimport { PostModel, BlogCategoryModel } from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst getBlogCategories = async () => {\r\n return await client\r\n .get<BlogCategoryModel[]>(\"posts/categories\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedPost = async () => {\r\n return await client.get<PostModel>(\"posts/featured\").then((res) => res.data);\r\n};\r\n\r\nconst getBlogPosts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForCategory = async (count: number, category: string) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\r\n \"posts?size=\" + count + \"&category=\" + category\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPost = async (slug: string | string[] | undefined) => {\r\n return await client.get<PostModel>(\"posts/\" + slug).then((res) => res.data);\r\n};\r\n\r\nconst incrementPostView = async (id: string) => {\r\n return await client.post(`posts/${id}/add-view`).then((res) => res.data);\r\n};\r\n\r\nconst getSimilarPosts = async (id: string, count: number) => {\r\n return await client\r\n .get<PostModel[]>(\"posts/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllPosts = async () => {\r\n return await client.get<PostModel[]>(\"posts/all\").then((res) => res.data);\r\n};\r\n\r\nexport const blogService = {\r\n getBlogCategories,\r\n getFeaturedPost,\r\n getBlogPosts,\r\n getBlogPostsForPage,\r\n getBlogPostsForCategory,\r\n getBlogPost,\r\n getSimilarPosts,\r\n getAllPosts,\r\n incrementPostView,\r\n};\r\n","export class BaseModel {\r\n public id!: string;\r\n public refId!: string;\r\n public createdOn!: Date;\r\n}\r\n\r\nexport class UserCreatedModel extends BaseModel {\r\n public createdByUserId!: string;\r\n}\r\n\r\nexport class UserModifiableModel extends UserCreatedModel {\r\n public updatedOn?: Date;\r\n public updatedByUserId?: string;\r\n public deletedOn?: Date;\r\n public deletedByUserId?: string;\r\n}\r\n\r\nexport class PagingInfo {\r\n public currentPage: number;\r\n public itemsPerPage: number;\r\n public hasNextPage: boolean;\r\n public totalItems: number;\r\n\r\n constructor(currentPage: number, itemsPerPage: number, hasNextPage: boolean) {\r\n this.currentPage = currentPage;\r\n this.itemsPerPage = itemsPerPage;\r\n this.hasNextPage = hasNextPage;\r\n this.totalItems = 0;\r\n }\r\n}\r\n\r\nexport class SearchResult<T> {\r\n public items: Array<T> = [];\r\n public pagingInfo!: PagingInfo;\r\n}","// Simple notification service for displaying messages to users\r\nexport const showNotification = (\r\n message: string,\r\n type: \"success\" | \"error\" | \"info\" = \"info\"\r\n) => {\r\n // Simple alert-based notification - can be enhanced later\r\n if (type === \"error\") {\r\n alert(`Error: ${message}`);\r\n } else if (type === \"success\") {\r\n alert(`Success: ${message}`);\r\n } else {\r\n alert(message);\r\n }\r\n};\r\n\r\n// Notification service object\r\nexport const notificationService = {\r\n success: (message: string) => showNotification(message, \"success\"),\r\n error: (message: string) => showNotification(message, \"error\"),\r\n info: (message: string) => showNotification(message, \"info\"),\r\n};\r\n\r\nexport default notificationService;\r\n","import client from \"../client\";\r\nimport { Cart, NewLineItem, ShippingAddress } from \"./types\";\r\nimport { notificationService } from \"../utils/notification\";\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst getCart = async (id: string) => {\r\n return await client.get<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst createCart = async (body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n return;\r\n }\r\n\r\n // Get UTM tags as a comma-separated string\r\n const utmTags = getUTMTags();\r\n\r\n return await client.post<Cart>(\"carts\", body).then((res) => {\r\n if (res.data.id) {\r\n client.put(`carts/${res.data.id}/info`, {\r\n tags: utmTags,\r\n });\r\n }\r\n return res.data;\r\n });\r\n};\r\n\r\nconst updateCart = async (id: string, body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n }\r\n\r\n return await client\r\n .put<Cart>(`carts/${id}/line-items`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst deleteCart = async (id: string) => {\r\n return await client.delete<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst setShippingAddress = async (id: string, body: ShippingAddress) => {\r\n return await client\r\n .put<Cart>(`carts/${id}/shipping-address`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getShippingCost = async (\r\n cartId: string,\r\n body: { provider: string; zone: string }\r\n) => {\r\n return await client.post(`shipping/${cartId}`, body).then((res) => res.data);\r\n};\r\n\r\nconst checkoutCart = async (cartId: string) => {\r\n return await client.post(`carts/${cartId}/checkout`).then((res) => res.data);\r\n};\r\n\r\nconst checkOrderStatus = async (orderId: string) => {\r\n return await client.put(`orders/${orderId}/Status`).then((res) => res.data);\r\n};\r\n\r\nexport const cartService = {\r\n getCart,\r\n createCart,\r\n updateCart,\r\n deleteCart,\r\n setShippingAddress,\r\n getShippingCost,\r\n checkoutCart,\r\n checkOrderStatus,\r\n};\r\n","import { get } from \"http\";\r\nimport client from \"../client\";\r\nimport { SearchResult } from \"../models\";\r\nimport {\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Backward compatibility aliases\r\n ProductModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n} from \"./types\";\r\n\r\nconst getAllProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all/featured\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductCategory = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductCategoryModel>(\"productcategories/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllProducts = async () => {\r\n return await client\r\n .get<ProductModel[]>(\"products/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProducts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProducts = async (\r\n q: string,\r\n category: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?q=\" +\r\n q +\r\n \"&category=\" +\r\n category +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsByCategorySlug = async (\r\n categorySlug: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?\" +\r\n \"categorySlug=\" +\r\n categorySlug +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsVariants = async ({\r\n page,\r\n size,\r\n maxPrice,\r\n minPrice,\r\n query,\r\n}: {\r\n page?: number;\r\n size?: number;\r\n maxPrice?: number;\r\n minPrice?: number;\r\n query?: string;\r\n} = {}) => {\r\n try {\r\n const params = new URLSearchParams();\r\n\r\n if (page !== undefined) params.append(\"page\", String(page));\r\n if (size !== undefined) params.append(\"size\", String(size));\r\n if (maxPrice !== undefined) params.append(\"maxPrice\", String(maxPrice));\r\n if (minPrice !== undefined) params.append(\"minPrice\", String(minPrice));\r\n if (query) params.append(\"Query\", query);\r\n\r\n const response = await client.get<SearchResult<ProductSearchVariantModel>>(\r\n `products/variants?${params.toString()}`\r\n );\r\n\r\n return response.data;\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n\r\nconst getProduct = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductModel>(\"products/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getSimilarProducts = async (id: string, count: number) => {\r\n return await client\r\n .get<ProductModel[]>(\"products/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all products from a category slug\r\nconst getAllProductsByCategorySlug = async (slug: string) => {\r\n return await client\r\n .get<CategoryProductResponse>(\"productcategories/\" + slug + \"/products\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all categories with the same parent slug\r\nconst getCategoriesByParentSlug = async (slug: string) => {\r\n return await client\r\n .get<ParentCategoryResponse>(\"productcategories/\" + slug + \"/subcategories\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getProductsByHierarchy = async (slug: string) => {\r\n return await client\r\n .get<ProductHierarchyResponse>(\r\n \"productcategories/\" + slug + \"/products/hierarchy\"\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getAllParentCategoriesSlugsWithChildren = async () => {\r\n return await client\r\n .get<ParentCategorySlugsResponse[]>(\"productcategories/parentcategory/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const productService = {\r\n getAllProductCategories,\r\n getFeaturedProductCategories,\r\n getProductCategory,\r\n getProducts,\r\n getProductsForPage,\r\n searchProducts,\r\n searchProductsByCategorySlug,\r\n getAllProducts,\r\n getProduct,\r\n getSimilarProducts,\r\n searchProductsVariants,\r\n getAllProductsByCategorySlug,\r\n getCategoriesByParentSlug,\r\n getProductsByHierarchy,\r\n getAllParentCategoriesSlugsWithChildren,\r\n};\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\nconst formClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nformClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nformClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await formClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default formClient;\r\n","import * as yup from \"yup\";\r\nimport formClient from \"./client\";\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n};\r\n\r\n// Define base schema with type-safe indexing\r\nconst baseSchema: Partial<Record<string, yup.StringSchema>> = {\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n};\r\n\r\n// Function to dynamically build a validation schema for fields in payload\r\nconst getValidationSchema = (payload: Record<string, string>) => {\r\n const schemaFields = Object.keys(payload).reduce((acc, key) => {\r\n if (baseSchema[key]) {\r\n acc[key] = baseSchema[key] as yup.StringSchema;\r\n }\r\n return acc;\r\n }, {} as Record<string, yup.StringSchema>);\r\n return yup.object().shape(schemaFields);\r\n};\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst post = async (\r\n formId: string,\r\n payload: Record<string, string>\r\n): Promise<unknown> => {\r\n const formUrl = \"/forms/\" + formId;\r\n\r\n // Get UTM tags\r\n const utmTags = getUTMTags();\r\n\r\n // Merge UTM tags with the payload only if they exist\r\n const updatedPayload =\r\n Object.keys(utmTags).length > 0 ? { ...payload, ...utmTags } : payload;\r\n\r\n // Get the validation schema based on existing fields in the payload\r\n const validationSchema = getValidationSchema(payload);\r\n\r\n // Validate the payload dynamically\r\n await validationSchema.validate(payload, { abortEarly: false });\r\n\r\n // Send the updated payload\r\n return await formClient.post(formUrl, updatedPayload).then((res) => res.data);\r\n};\r\n\r\nexport const formService = {\r\n post,\r\n};\r\n","import * as yup from \"yup\";\r\n\r\nexport class ContactUsModel {\r\n public name!: string;\r\n public email!: string;\r\n public mobile!: string;\r\n public whatsapp!: string;\r\n public message!: string;\r\n}\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n password: /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$/,\r\n};\r\n\r\nexport const ContactUsSchema = yup.object().shape({\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n});\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { SubscriptionResponse } from \"./types\";\r\n\r\n/**\r\n * Newsletter Service with dedicated client for newsletter API\r\n *\r\n * Usage:\r\n * ```typescript\r\n * import { newsletterService, SubscriptionResponse } from '@leadmetrics-ai/website-sdk';\r\n *\r\n * const result: SubscriptionResponse = await newsletterService.subscribeNewsletter('user@example.com');\r\n *\r\n * if (result.value.result === \"Subscribed\") {\r\n * console.log('Successfully subscribed!');\r\n * } else if (result.value.result === \"AlreadySubscribed\") {\r\n * console.log('Already subscribed!');\r\n * } else {\r\n * console.log('Invalid state:', result.value.message);\r\n * }\r\n * ```\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\n// Create a separate client for newsletter service with its own base URL\r\nconst newsletterClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1/forms\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor for newsletter client\r\nnewsletterClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with retry logic for newsletter client\r\nnewsletterClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await newsletterClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst subscribeNewsletter = async (\r\n email: string\r\n): Promise<SubscriptionResponse> => {\r\n const response = await newsletterClient.post<SubscriptionResponse>(\r\n \"/newsletter/subscription\",\r\n { email }\r\n );\r\n return response.data;\r\n};\r\n\r\nexport const newsletterService = {\r\n subscribeNewsletter,\r\n};\r\n","import client from \"../client\";\r\nimport type {\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n} from \"./types\";\r\n\r\n// User registration\r\nexport const userRegister = async (\r\n data: RegisterData\r\n): Promise<RegisterResponse> => {\r\n return client.post(\"/user/register\", data).then((res) => res.data);\r\n};\r\n\r\n// User login\r\nexport const userLogin = async (data: LoginData): Promise<LoginResponse> => {\r\n return client.post(\"/user/login\", data).then((res) => res.data);\r\n};\r\n\r\n// Get user profile\r\nexport const getUserProfile = async (): Promise<any> => {\r\n return client.get(\"/user/profile\").then((res) => res.data);\r\n};\r\n\r\n// Update user profile\r\nexport const updateUserProfile = async (data: any): Promise<any> => {\r\n return client.put(\"/user/profile\", data).then((res) => res.data);\r\n};\r\n\r\n// Refresh token\r\nexport const refreshUserToken = async (): Promise<any> => {\r\n return client.post(\"/user/refresh-token\").then((res) => res.data);\r\n};\r\n\r\n// Password reset request\r\nexport const requestPasswordReset = async (email: string): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-request\", { email })\r\n .then((res) => res.data);\r\n};\r\n\r\n// Password reset confirmation\r\nexport const confirmPasswordReset = async (\r\n token: string,\r\n newPassword: string\r\n): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-confirm\", { token, newPassword })\r\n .then((res) => res.data);\r\n};\r\n\r\n// User service object\r\nconst userService = {\r\n userRegister,\r\n userLogin,\r\n getUserProfile,\r\n updateUserProfile,\r\n refreshUserToken,\r\n requestPasswordReset,\r\n confirmPasswordReset,\r\n};\r\n\r\nexport default userService;\r\n","/**\r\n * Persistence layer with expiration based on localStorage.\r\n */\r\n\r\nconst storageMock = {\r\n length: 0,\r\n getItem() {},\r\n setItem() {},\r\n removeItem() {},\r\n clear() {},\r\n};\r\n\r\nclass NamespacedLocalStorage {\r\n localStorage;\r\n key;\r\n constructor(localStorage: any, key: string) {\r\n this.localStorage = localStorage;\r\n this.key = key;\r\n }\r\n _makeKey(key: string): string {\r\n return `${this.key}__${key}`;\r\n }\r\n getItem(name: any) {\r\n return this.localStorage.getItem(this._makeKey(name));\r\n }\r\n setItem(name: any, value: any) {\r\n return this.localStorage.setItem(this._makeKey(name), value);\r\n }\r\n removeItem(name: any) {\r\n return this.localStorage.removeItem(this._makeKey(name));\r\n }\r\n}\r\n\r\nexport default class BrowserPersistence {\r\n static KEY = \"LM_BROWSER_PERSISTENCE\";\r\n storage;\r\n constructor(localStorage = globalThis.localStorage || storageMock) {\r\n this.storage = new NamespacedLocalStorage(\r\n localStorage,\r\n BrowserPersistence.KEY\r\n );\r\n }\r\n getRawItem(name: string) {\r\n return this.storage.getItem(name);\r\n }\r\n getItem(name: string) {\r\n const now = Date.now();\r\n const item = this.storage.getItem(name);\r\n if (!item) {\r\n return undefined;\r\n }\r\n const { value, ttl, timeStored } = JSON.parse(item);\r\n\r\n if (ttl && now - timeStored > ttl * 1000) {\r\n this.storage.removeItem(name);\r\n return undefined;\r\n }\r\n\r\n return JSON.parse(value);\r\n }\r\n setItem(name: string, value: any, ttl: any = 3600) {\r\n const timeStored = Date.now();\r\n this.storage.setItem(\r\n name,\r\n JSON.stringify({\r\n value: JSON.stringify(value),\r\n timeStored,\r\n ttl,\r\n })\r\n );\r\n }\r\n removeItem(name: any) {\r\n this.storage.removeItem(name);\r\n }\r\n}\r\n","export interface SecurityHeader {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nconst defaultContentSecurityPolicy: string[] = [\r\n \"default-src 'self'\",\r\n \"script-src 'self' 'unsafe-inline' https://www.googletagmanager.com\",\r\n \"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com\",\r\n \"img-src 'self' data: blob: https://assets.leadmetrics.ai https://lmsamediaprodeastasia.blob.core.windows.net https://lmsaprodcentralindia.blob.core.windows.net https://images.unsplash.com https://leadmetrics.ai\",\r\n \"font-src 'self' https://fonts.gstatic.com\",\r\n \"connect-src 'self' https://api.ind.leadmetrics.ai https://www.google-analytics.com https://www.googletagmanager.com\",\r\n \"frame-ancestors 'none'\",\r\n \"object-src 'none'\",\r\n \"base-uri 'self'\",\r\n];\r\n\r\nconst defaultHeaders: SecurityHeader[] = [\r\n {\r\n key: \"Content-Security-Policy\",\r\n value: defaultContentSecurityPolicy.join(\"; \"),\r\n },\r\n {\r\n key: \"X-Content-Type-Options\",\r\n value: \"nosniff\",\r\n },\r\n {\r\n key: \"Referrer-Policy\",\r\n value: \"strict-origin-when-cross-origin\",\r\n },\r\n];\r\n\r\nexport interface SecurityHeaderOptions {\r\n extendCsp?: string[];\r\n omitHeaders?: string[];\r\n additionalHeaders?: SecurityHeader[];\r\n}\r\n\r\nconst buildContentSecurityPolicy = (extendCsp: string[] = []): string => {\r\n return [...defaultContentSecurityPolicy, ...extendCsp].join(\"; \");\r\n};\r\n\r\nexport const getDefaultSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): SecurityHeader[] => {\r\n const { extendCsp = [], omitHeaders = [], additionalHeaders = [] } = options;\r\n\r\n const headers = defaultHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n const cspIndex = headers.findIndex((header) => header.key === \"Content-Security-Policy\");\r\n\r\n if (cspIndex !== -1) {\r\n headers[cspIndex].value = buildContentSecurityPolicy(extendCsp);\r\n }\r\n\r\n const mergedAdditionalHeaders = additionalHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n return [...headers, ...mergedAdditionalHeaders];\r\n};\r\n\r\nexport const getNextSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): Array<{ source: string; headers: SecurityHeader[] }> => {\r\n return [\r\n {\r\n source: \"/(.*)\",\r\n headers: getDefaultSecurityHeaders(options),\r\n },\r\n ];\r\n};\r\n\r\nexport const securityHeadersConfig = {\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n};\r\n\r\nexport default securityHeadersConfig;\r\n","import client from \"../client\";\r\nimport { FAQData } from \"./types\";\r\n\r\nconst getFaq = async (slug: string) => {\r\n return await client.get<FAQData>(`faqs/${slug}`).then((res) => res.data);\r\n};\r\n\r\nexport const faqService = {\r\n getFaq,\r\n};\r\n","import client from \"../client\";\r\nimport { Album, AlbumResponse } from \"./types\";\r\n\r\nconst getAllAlbums = async () => {\r\n return await client.get<AlbumResponse>(`albums`).then((res) => res.data);\r\n};\r\n\r\nconst getAlbumById = async (id: string) => {\r\n return await client.get<Album>(`albums/${id}`).then((res) => res.data);\r\n};\r\n\r\nexport const albumService = {\r\n getAllAlbums,\r\n getAlbumById,\r\n};\r\n","import client from \"../client\";\r\nimport { Collections, CollectionDetails } from \"./types\";\r\n\r\nconst getAllCollections = async () => {\r\n return await client\r\n .get<Collections[]>(`collections/all`)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getCollectionsDetails = async (id: string) => {\r\n return await client\r\n .get<CollectionDetails>(`collections/${id}/products`)\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const collectionService = {\r\n getAllCollections,\r\n getCollectionsDetails,\r\n};\r\n","import client from \"../client\";\r\nimport {\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n} from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst sanitizeFreeText = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\\u202E\\u202D]/g, \"\")\r\n .replace(/[^A-Za-z0-9\\s'.-]/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\nconst sanitizeEmail = (value: string) =>\r\n value\r\n .replace(/[^A-Za-z0-9@._+-]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizePhone = (value: string) =>\r\n value\r\n .replace(/[^0-9+]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeFileName = (value: string) =>\r\n value\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'\\\\]/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeContent = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeUrl = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'<>]/g, \"\") // Remove potential XSS characters from URL\r\n .trim();\r\n\r\nconst getAllJobs = async (): Promise<JobModel[]> => {\r\n try {\r\n const response = await client.get<JobModel[]>(\"jobs\");\r\n // API returns plain array, not SearchResult wrapper\r\n const data = response?.data;\r\n\r\n // Ensure we always return an array\r\n if (Array.isArray(data)) {\r\n return data;\r\n }\r\n\r\n // Fallback: check if it's wrapped in items property\r\n if (\r\n data &&\r\n typeof data === \"object\" &&\r\n \"items\" in data &&\r\n Array.isArray((data as any).items)\r\n ) {\r\n return (data as any).items;\r\n }\r\n\r\n console.warn(\"Unexpected jobs data format:\", data);\r\n return [];\r\n } catch (error) {\r\n console.error(\"Error fetching jobs:\", error);\r\n return []; // Return empty array on error\r\n }\r\n};\r\n\r\nconst getJobBySlug = async (slug: string | undefined) => {\r\n return await client\r\n .get<JobModel>(`jobs/by-slug/${slug}`)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst searchJobs = async (params?: {\r\n search?: string;\r\n category?: string;\r\n location?: string;\r\n employmentType?: string;\r\n page?: number;\r\n size?: number;\r\n}): Promise<SearchResult<JobModel>> => {\r\n try {\r\n const queryParams = new URLSearchParams();\r\n\r\n if (params?.search) queryParams.append(\"search\", params.search);\r\n if (params?.category) queryParams.append(\"category\", params.category);\r\n if (params?.location) queryParams.append(\"location\", params.location);\r\n if (params?.employmentType)\r\n queryParams.append(\"employmentType\", params.employmentType);\r\n if (params?.page) queryParams.append(\"page\", params.page.toString());\r\n if (params?.size) queryParams.append(\"size\", params.size.toString());\r\n\r\n const queryString = queryParams.toString();\r\n const url = queryString ? `jobs?${queryString}` : \"jobs\";\r\n\r\n const response = await client.get<SearchResult<JobModel>>(url);\r\n\r\n // Ensure items is always an array\r\n return {\r\n items: Array.isArray(response?.data?.items) ? response.data.items : [],\r\n pagingInfo: response?.data?.pagingInfo || {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n } catch (error) {\r\n console.error(\"Error searching jobs:\", error);\r\n // Return empty result on error\r\n return {\r\n items: [],\r\n pagingInfo: {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n }\r\n};\r\n\r\nconst applyForJob = async (\r\n data: JobApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n if (data.jobId) formData.append(\"JobId\", data.jobId);\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"jobs/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst submitCandidateApplication = async (\r\n data: CandidateApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"candidates/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nexport const careerService = {\r\n getAllJobs,\r\n getJobBySlug,\r\n searchJobs,\r\n applyForJob,\r\n submitCandidateApplication,\r\n};\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport class Cart extends UserModifiableModel {\r\n lineItems?: LineItem[];\r\n shippingAddress?: ShippingAddress;\r\n total!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n shippingFee?: ShippingFee;\r\n}\r\n\r\nexport class ShippingFee {\r\n feeAmount!: number;\r\n feeType!: string;\r\n feeValue!: number;\r\n}\r\n\r\nexport class LineItem {\r\n id!: string;\r\n productId!: string;\r\n variantId!: string;\r\n productSlug!: string;\r\n productName!: string;\r\n productImage!: string;\r\n price!: number;\r\n quantity!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n attributes!: Record<string, string>;\r\n}\r\n\r\nexport class NewLineItem {\r\n productId!: string;\r\n quantity!: number;\r\n id!: string;\r\n}\r\n\r\nexport class ShippingAddress {\r\n id!: string;\r\n name!: string;\r\n email!: string;\r\n mobile!: string;\r\n address!: string;\r\n city!: string;\r\n zipcode!: string;\r\n state!: string;\r\n country!: string;\r\n landmark?: string;\r\n alternateMobile?: string;\r\n deliveryInstructions?: string;\r\n isDefault!: boolean;\r\n}\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport interface JobLocation {\r\n city: string;\r\n state: string;\r\n country: string;\r\n remote: boolean;\r\n hybrid: boolean;\r\n}\r\n\r\nexport interface JobSalary {\r\n min: number;\r\n max: number;\r\n currency: string;\r\n}\r\n\r\nexport interface JobRequirements {\r\n experience: string;\r\n education: string;\r\n requiredSkills: string[];\r\n preferredSkills: string[];\r\n}\r\n\r\nexport interface JobCategory {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface HiringManager {\r\n id: string;\r\n name: string;\r\n email: string;\r\n}\r\n\r\nexport interface JobStats {\r\n views: number;\r\n applications: number;\r\n activeApplications: number;\r\n}\r\n\r\nexport class JobModel extends UserModifiableModel {\r\n title!: string;\r\n slug!: string;\r\n description!: string;\r\n category!: JobCategory;\r\n department!: string;\r\n employmentType!: string;\r\n location!: JobLocation;\r\n salary!: JobSalary;\r\n requirements!: JobRequirements;\r\n status!: string;\r\n numberOfPositions!: number;\r\n postedDate!: Date;\r\n closingDate!: Date;\r\n hiringManager!: HiringManager;\r\n stats!: JobStats;\r\n isActive!: boolean;\r\n tenantId!: string;\r\n}\r\n\r\nexport interface JobApplicationData {\r\n jobId?: string;\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number | null;\r\n currency: string;\r\n currentSalary?: number | null;\r\n expectedSalary?: number | null;\r\n noticePeriod?: number | null;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File | null;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface CandidateApplicationData {\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number | null;\r\n currency: string;\r\n currentSalary?: number | null;\r\n expectedSalary?: number | null;\r\n noticePeriod?: number | null;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File | null;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface JobApplicationResponse {\r\n success: boolean;\r\n message: string;\r\n applicationId?: string;\r\n}\r\n","import { UserModifiableModel } from \"../models\";\r\nimport { FAQItem } from \"../faq/types\";\r\n\r\nexport class PostModel extends UserModifiableModel {\r\n slug!: string;\r\n isFeatured!: boolean;\r\n isActive!: boolean;\r\n category!: string;\r\n featuredImage!: string;\r\n title!: string;\r\n previewContent!: string;\r\n content!: string;\r\n readTime!: number;\r\n impressions!: number;\r\n views!: number;\r\n likes!: number;\r\n publishedOn!: Date;\r\n tags?: string[];\r\n categoryInfo!: {\r\n id: string | null;\r\n name: string | null;\r\n slug: string | null;\r\n };\r\n seo!: {\r\n title: string;\r\n description: string;\r\n keywords: string;\r\n };\r\n author?: {\r\n name?: string;\r\n id?: string;\r\n };\r\n faq?: FAQItem[];\r\n}\r\n\r\nexport type BlogCategoryModel = {\r\n name: string;\r\n slug: string;\r\n};\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","StorageManager","isBrowser","window","createRandomId","Math","random","toString","substring","Date","getTime","getSessionId","this","sessionStorage","sessionId","getItem","setItem","getUserId","localStorage","userId","getLocalStorageValue","key","setLocalStorageValue","removeLocalStorageValue","removeItem","getSessionStorageValue","setSessionStorageValue","removeSessionStorageValue","AnalyticService","constructor","storageService","getFS","analyticService","storageManager","client","axios","create","baseURL","process","env","NEXT_PUBLIC_API_BASE_URL","timeout","RETRY_CONFIG","shouldRetry","error","_b","_a","config","metadata","skipRetry","response","status","interceptors","request","use","NEXT_PUBLIC_API_KEY","headers","token","Authorization","fs","Object","assign","startTime","now","retryCount","navigator","userAgent","originalRequest","delay","attempt","baseDelay","maxDelay","pow","min","calculateDelay","ms","setTimeout","retryError","isNetworkError","code","message","includes","isServerError","isClientError","_c","canRetry","blogService","getBlogCategories","get","res","data","getFeaturedPost","getBlogPosts","count","getBlogPostsForPage","page","getBlogPostsForCategory","category","getBlogPost","slug","getSimilarPosts","id","getAllPosts","incrementPostView","post","BaseModel","UserCreatedModel","UserModifiableModel","showNotification","type","alert","notificationService","success","info","cartService","getCart","createCart","body","quantity","utmTags","params","URLSearchParams","location","search","forEach","utmKey","has","keys","length","getUTMTags","put","tags","updateCart","deleteCart","delete","setShippingAddress","getShippingCost","cartId","checkoutCart","checkOrderStatus","orderId","productService","getAllProductCategories","getFeaturedProductCategories","getProductCategory","getProducts","getProductsForPage","searchProducts","q","sort","searchProductsByCategorySlug","categorySlug","getAllProducts","getProduct","getSimilarProducts","searchProductsVariants","args_1","size","maxPrice","minPrice","query","undefined","append","String","getAllProductsByCategorySlug","getCategoriesByParentSlug","getProductsByHierarchy","getAllParentCategoriesSlugsWithChildren","formClient","baseSchema","name","yup","string","required","email","mobile","matches","formService","formId","payload","formUrl","updatedPayload","validationSchema","schemaFields","reduce","acc","object","shape","getValidationSchema","validate","abortEarly","newsletterClient","newsletterService","subscribeNewsletter","userService","userRegister","userLogin","getUserProfile","updateUserProfile","refreshUserToken","requestPasswordReset","confirmPasswordReset","newPassword","storageMock","clear","NamespacedLocalStorage","_makeKey","BrowserPersistence","globalThis","storage","KEY","getRawItem","item","ttl","timeStored","JSON","parse","stringify","defaultContentSecurityPolicy","defaultHeaders","join","getDefaultSecurityHeaders","options","extendCsp","omitHeaders","additionalHeaders","filter","header","map","cspIndex","findIndex","buildContentSecurityPolicy","mergedAdditionalHeaders","getNextSecurityHeaders","source","securityHeadersConfig","faqService","getFaq","albumService","getAllAlbums","getAlbumById","collectionService","getAllCollections","getCollectionsDetails","sanitizeFreeText","replace","trim","sanitizeEmail","sanitizePhone","sanitizeFileName","sanitizeContent","sanitizeUrl","careerService","getAllJobs","Array","isArray","items","console","warn","getJobBySlug","searchJobs","queryParams","employmentType","queryString","url","pagingInfo","currentPage","itemsPerPage","hasNextPage","totalItems","applyForJob","sanitizedName","sanitizedEmail","sanitizedMobile","formData","FormData","jobId","resume","experience","Number","currency","currentSalary","expectedSalary","noticePeriod","nationality","coverLetter","photo","linkedInUrl","submitCandidateApplication"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.d.ts CHANGED
@@ -691,14 +691,14 @@ interface CandidateApplicationData {
691
691
  email: string;
692
692
  mobile: string;
693
693
  resume: File;
694
- experience?: number;
694
+ experience?: number | null;
695
695
  currency: string;
696
- currentSalary?: number;
697
- expectedSalary?: number;
698
- noticePeriod?: number;
696
+ currentSalary?: number | null;
697
+ expectedSalary?: number | null;
698
+ noticePeriod?: number | null;
699
699
  nationality?: string;
700
700
  coverLetter?: string;
701
- photo?: File;
701
+ photo?: File | null;
702
702
  linkedInUrl?: string;
703
703
  }
704
704
  interface JobApplicationResponse {
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/storage/index.ts","../src/analytics/index.ts","../src/client/index.ts","../src/blog/index.ts","../src/models.ts","../src/blog/types.ts","../src/utils/notification.ts","../src/cart/index.ts","../src/cart/types.ts","../src/products/index.ts","../src/form/client.ts","../src/form/index.ts","../src/form/types.ts","../src/newsletter/index.ts","../src/newsletter/types.ts","../src/user/index.ts","../src/utils/persistence.ts","../src/utils/securityHeaders.ts","../src/faq/index.ts","../src/albums/index.ts","../src/collections/index.ts","../src/career/index.ts","../src/career/types.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\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);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\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;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\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]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\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);\r\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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export class StorageManager {\r\n // Helper function to check if running in the browser\r\n private isBrowser(): boolean {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n // Create a random ID combining random numbers and the current timestamp\r\n private createRandomId(): string {\r\n return (\r\n Math.random().toString(36).substring(2) +\r\n new Date().getTime().toString(36)\r\n );\r\n }\r\n\r\n // Retrieve or create a session ID in sessionStorage\r\n getSessionId(): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n let sessionId = sessionStorage.getItem(\"lm-sid\");\r\n if (!sessionId) {\r\n sessionId = this.createRandomId();\r\n sessionStorage.setItem(\"lm-sid\", sessionId);\r\n }\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n // Retrieve or create a user ID in localStorage\r\n getUserId(): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n let userId = localStorage.getItem(\"lm-uid\");\r\n if (!userId) {\r\n userId = this.createRandomId();\r\n localStorage.setItem(\"lm-uid\", userId);\r\n }\r\n return userId;\r\n }\r\n return null;\r\n }\r\n\r\n // General getValue method for retrieving items from localStorage\r\n getLocalStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n return localStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in localStorage\r\n setLocalStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from localStorage\r\n removeLocalStorageValue(key: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n // General getValue method for retrieving items from sessionStorage\r\n getSessionStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n return sessionStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in sessionStorage\r\n setSessionStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from sessionStorage\r\n removeSessionStorageValue(key: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n}\r\n","import { StorageManager } from \"../storage\";\r\n\r\nexport class AnalyticService {\r\n private storageService: StorageManager;\r\n\r\n constructor() {\r\n this.storageService = new StorageManager();\r\n }\r\n\r\n getFS(): string | null {\r\n const userId = this.storageService.getUserId();\r\n const sessionId = this.storageService.getSessionId();\r\n\r\n if (userId && sessionId) {\r\n return `${userId}:${sessionId}`;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { StorageManager } from \"../storage\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\nconst storageManager = new StorageManager();\r\n\r\nconst client = axios.create({\r\n baseURL:\r\n process.env.NEXT_PUBLIC_API_BASE_URL ||\r\n \"https://client-api.ind.leadmetrics.ai/api/client/v1/\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nclient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set Authorization token from localStorage if available\r\n const token = storageManager.getLocalStorageValue(\"authToken\");\r\n if (token) {\r\n config.headers = config.headers || {};\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nclient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await client(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default client;\r\n","import client from \"../client\";\r\nimport { PostModel, BlogCategoryModel } from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst getBlogCategories = async () => {\r\n return await client\r\n .get<BlogCategoryModel[]>(\"posts/categories\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedPost = async () => {\r\n return await client.get<PostModel>(\"posts/featured\").then((res) => res.data);\r\n};\r\n\r\nconst getBlogPosts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForCategory = async (count: number, category: string) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\r\n \"posts?size=\" + count + \"&category=\" + category\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPost = async (slug: string | string[] | undefined) => {\r\n return await client.get<PostModel>(\"posts/\" + slug).then((res) => res.data);\r\n};\r\n\r\nconst incrementPostView = async (id: string) => {\r\n return await client.post(`posts/${id}/add-view`).then((res) => res.data);\r\n};\r\n\r\nconst getSimilarPosts = async (id: string, count: number) => {\r\n return await client\r\n .get<PostModel[]>(\"posts/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllPosts = async () => {\r\n return await client.get<PostModel[]>(\"posts/all\").then((res) => res.data);\r\n};\r\n\r\nexport const blogService = {\r\n getBlogCategories,\r\n getFeaturedPost,\r\n getBlogPosts,\r\n getBlogPostsForPage,\r\n getBlogPostsForCategory,\r\n getBlogPost,\r\n getSimilarPosts,\r\n getAllPosts,\r\n incrementPostView,\r\n};\r\n","export class BaseModel {\r\n public id!: string;\r\n public refId!: string;\r\n public createdOn!: Date;\r\n}\r\n\r\nexport class UserCreatedModel extends BaseModel {\r\n public createdByUserId!: string;\r\n}\r\n\r\nexport class UserModifiableModel extends UserCreatedModel {\r\n public updatedOn?: Date;\r\n public updatedByUserId?: string;\r\n public deletedOn?: Date;\r\n public deletedByUserId?: string;\r\n}\r\n\r\nexport class PagingInfo {\r\n public currentPage: number;\r\n public itemsPerPage: number;\r\n public hasNextPage: boolean;\r\n public totalItems: number;\r\n\r\n constructor(currentPage: number, itemsPerPage: number, hasNextPage: boolean) {\r\n this.currentPage = currentPage;\r\n this.itemsPerPage = itemsPerPage;\r\n this.hasNextPage = hasNextPage;\r\n this.totalItems = 0;\r\n }\r\n}\r\n\r\nexport class SearchResult<T> {\r\n public items: Array<T> = [];\r\n public pagingInfo!: PagingInfo;\r\n}","import { UserModifiableModel } from \"../models\";\r\nimport { FAQItem } from \"../faq/types\";\r\n\r\nexport class PostModel extends UserModifiableModel {\r\n slug!: string;\r\n isFeatured!: boolean;\r\n isActive!: boolean;\r\n category!: string;\r\n featuredImage!: string;\r\n title!: string;\r\n previewContent!: string;\r\n content!: string;\r\n readTime!: number;\r\n impressions!: number;\r\n views!: number;\r\n likes!: number;\r\n publishedOn!: Date;\r\n tags?: string[];\r\n categoryInfo!: {\r\n id: string | null;\r\n name: string | null;\r\n slug: string | null;\r\n };\r\n seo!: {\r\n title: string;\r\n description: string;\r\n keywords: string;\r\n };\r\n author?: {\r\n name?: string;\r\n id?: string;\r\n };\r\n faq?: FAQItem[];\r\n}\r\n\r\nexport type BlogCategoryModel = {\r\n name: string;\r\n slug: string;\r\n};\r\n","// Simple notification service for displaying messages to users\r\nexport const showNotification = (\r\n message: string,\r\n type: \"success\" | \"error\" | \"info\" = \"info\"\r\n) => {\r\n // Simple alert-based notification - can be enhanced later\r\n if (type === \"error\") {\r\n alert(`Error: ${message}`);\r\n } else if (type === \"success\") {\r\n alert(`Success: ${message}`);\r\n } else {\r\n alert(message);\r\n }\r\n};\r\n\r\n// Notification service object\r\nexport const notificationService = {\r\n success: (message: string) => showNotification(message, \"success\"),\r\n error: (message: string) => showNotification(message, \"error\"),\r\n info: (message: string) => showNotification(message, \"info\"),\r\n};\r\n\r\nexport default notificationService;\r\n","import client from \"../client\";\r\nimport { Cart, NewLineItem, ShippingAddress } from \"./types\";\r\nimport { notificationService } from \"../utils/notification\";\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst getCart = async (id: string) => {\r\n return await client.get<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst createCart = async (body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n return;\r\n }\r\n\r\n // Get UTM tags as a comma-separated string\r\n const utmTags = getUTMTags();\r\n\r\n return await client.post<Cart>(\"carts\", body).then((res) => {\r\n if (res.data.id) {\r\n client.put(`carts/${res.data.id}/info`, {\r\n tags: utmTags,\r\n });\r\n }\r\n return res.data;\r\n });\r\n};\r\n\r\nconst updateCart = async (id: string, body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n }\r\n\r\n return await client\r\n .put<Cart>(`carts/${id}/line-items`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst deleteCart = async (id: string) => {\r\n return await client.delete<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst setShippingAddress = async (id: string, body: ShippingAddress) => {\r\n return await client\r\n .put<Cart>(`carts/${id}/shipping-address`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getShippingCost = async (\r\n cartId: string,\r\n body: { provider: string; zone: string }\r\n) => {\r\n return await client.post(`shipping/${cartId}`, body).then((res) => res.data);\r\n};\r\n\r\nconst checkoutCart = async (cartId: string) => {\r\n return await client.post(`carts/${cartId}/checkout`).then((res) => res.data);\r\n};\r\n\r\nconst checkOrderStatus = async (orderId: string) => {\r\n return await client.put(`orders/${orderId}/Status`).then((res) => res.data);\r\n};\r\n\r\nexport const cartService = {\r\n getCart,\r\n createCart,\r\n updateCart,\r\n deleteCart,\r\n setShippingAddress,\r\n getShippingCost,\r\n checkoutCart,\r\n checkOrderStatus,\r\n};\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport class Cart extends UserModifiableModel {\r\n lineItems?: LineItem[];\r\n shippingAddress?: ShippingAddress;\r\n total!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n shippingFee?: ShippingFee;\r\n}\r\n\r\nexport class ShippingFee {\r\n feeAmount!: number;\r\n feeType!: string;\r\n feeValue!: number;\r\n}\r\n\r\nexport class LineItem {\r\n id!: string;\r\n productId!: string;\r\n variantId!: string;\r\n productSlug!: string;\r\n productName!: string;\r\n productImage!: string;\r\n price!: number;\r\n quantity!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n attributes!: Record<string, string>;\r\n}\r\n\r\nexport class NewLineItem {\r\n productId!: string;\r\n quantity!: number;\r\n id!: string;\r\n}\r\n\r\nexport class ShippingAddress {\r\n id!: string;\r\n name!: string;\r\n email!: string;\r\n mobile!: string;\r\n address!: string;\r\n city!: string;\r\n zipcode!: string;\r\n state!: string;\r\n country!: string;\r\n landmark?: string;\r\n alternateMobile?: string;\r\n deliveryInstructions?: string;\r\n isDefault!: boolean;\r\n}\r\n","import { get } from \"http\";\r\nimport client from \"../client\";\r\nimport { SearchResult } from \"../models\";\r\nimport {\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Backward compatibility aliases\r\n ProductModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n} from \"./types\";\r\n\r\nconst getAllProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all/featured\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductCategory = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductCategoryModel>(\"productcategories/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllProducts = async () => {\r\n return await client\r\n .get<ProductModel[]>(\"products/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProducts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProducts = async (\r\n q: string,\r\n category: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?q=\" +\r\n q +\r\n \"&category=\" +\r\n category +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsByCategorySlug = async (\r\n categorySlug: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?\" +\r\n \"categorySlug=\" +\r\n categorySlug +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsVariants = async ({\r\n page,\r\n size,\r\n maxPrice,\r\n minPrice,\r\n query,\r\n}: {\r\n page?: number;\r\n size?: number;\r\n maxPrice?: number;\r\n minPrice?: number;\r\n query?: string;\r\n} = {}) => {\r\n try {\r\n const params = new URLSearchParams();\r\n\r\n if (page !== undefined) params.append(\"page\", String(page));\r\n if (size !== undefined) params.append(\"size\", String(size));\r\n if (maxPrice !== undefined) params.append(\"maxPrice\", String(maxPrice));\r\n if (minPrice !== undefined) params.append(\"minPrice\", String(minPrice));\r\n if (query) params.append(\"Query\", query);\r\n\r\n const response = await client.get<SearchResult<ProductSearchVariantModel>>(\r\n `products/variants?${params.toString()}`\r\n );\r\n\r\n return response.data;\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n\r\nconst getProduct = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductModel>(\"products/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getSimilarProducts = async (id: string, count: number) => {\r\n return await client\r\n .get<ProductModel[]>(\"products/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all products from a category slug\r\nconst getAllProductsByCategorySlug = async (slug: string) => {\r\n return await client\r\n .get<CategoryProductResponse>(\"productcategories/\" + slug + \"/products\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all categories with the same parent slug\r\nconst getCategoriesByParentSlug = async (slug: string) => {\r\n return await client\r\n .get<ParentCategoryResponse>(\"productcategories/\" + slug + \"/subcategories\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getProductsByHierarchy = async (slug: string) => {\r\n return await client\r\n .get<ProductHierarchyResponse>(\r\n \"productcategories/\" + slug + \"/products/hierarchy\"\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getAllParentCategoriesSlugsWithChildren = async () => {\r\n return await client\r\n .get<ParentCategorySlugsResponse[]>(\"productcategories/parentcategory/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const productService = {\r\n getAllProductCategories,\r\n getFeaturedProductCategories,\r\n getProductCategory,\r\n getProducts,\r\n getProductsForPage,\r\n searchProducts,\r\n searchProductsByCategorySlug,\r\n getAllProducts,\r\n getProduct,\r\n getSimilarProducts,\r\n searchProductsVariants,\r\n getAllProductsByCategorySlug,\r\n getCategoriesByParentSlug,\r\n getProductsByHierarchy,\r\n getAllParentCategoriesSlugsWithChildren,\r\n};\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\nconst formClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nformClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nformClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await formClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default formClient;\r\n","import * as yup from \"yup\";\r\nimport formClient from \"./client\";\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n};\r\n\r\n// Define base schema with type-safe indexing\r\nconst baseSchema: Partial<Record<string, yup.StringSchema>> = {\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n};\r\n\r\n// Function to dynamically build a validation schema for fields in payload\r\nconst getValidationSchema = (payload: Record<string, string>) => {\r\n const schemaFields = Object.keys(payload).reduce((acc, key) => {\r\n if (baseSchema[key]) {\r\n acc[key] = baseSchema[key] as yup.StringSchema;\r\n }\r\n return acc;\r\n }, {} as Record<string, yup.StringSchema>);\r\n return yup.object().shape(schemaFields);\r\n};\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst post = async (\r\n formId: string,\r\n payload: Record<string, string>\r\n): Promise<unknown> => {\r\n const formUrl = \"/forms/\" + formId;\r\n\r\n // Get UTM tags\r\n const utmTags = getUTMTags();\r\n\r\n // Merge UTM tags with the payload only if they exist\r\n const updatedPayload =\r\n Object.keys(utmTags).length > 0 ? { ...payload, ...utmTags } : payload;\r\n\r\n // Get the validation schema based on existing fields in the payload\r\n const validationSchema = getValidationSchema(payload);\r\n\r\n // Validate the payload dynamically\r\n await validationSchema.validate(payload, { abortEarly: false });\r\n\r\n // Send the updated payload\r\n return await formClient.post(formUrl, updatedPayload).then((res) => res.data);\r\n};\r\n\r\nexport const formService = {\r\n post,\r\n};\r\n","import * as yup from \"yup\";\r\n\r\nexport class ContactUsModel {\r\n public name!: string;\r\n public email!: string;\r\n public mobile!: string;\r\n public whatsapp!: string;\r\n public message!: string;\r\n}\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n password: /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$/,\r\n};\r\n\r\nexport const ContactUsSchema = yup.object().shape({\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n});\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { SubscriptionResponse } from \"./types\";\r\n\r\n/**\r\n * Newsletter Service with dedicated client for newsletter API\r\n *\r\n * Usage:\r\n * ```typescript\r\n * import { newsletterService, SubscriptionResponse } from '@leadmetrics-ai/website-sdk';\r\n *\r\n * const result: SubscriptionResponse = await newsletterService.subscribeNewsletter('user@example.com');\r\n *\r\n * if (result.value.result === \"Subscribed\") {\r\n * console.log('Successfully subscribed!');\r\n * } else if (result.value.result === \"AlreadySubscribed\") {\r\n * console.log('Already subscribed!');\r\n * } else {\r\n * console.log('Invalid state:', result.value.message);\r\n * }\r\n * ```\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\n// Create a separate client for newsletter service with its own base URL\r\nconst newsletterClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1/forms\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor for newsletter client\r\nnewsletterClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with retry logic for newsletter client\r\nnewsletterClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await newsletterClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst subscribeNewsletter = async (\r\n email: string\r\n): Promise<SubscriptionResponse> => {\r\n const response = await newsletterClient.post<SubscriptionResponse>(\r\n \"/newsletter/subscription\",\r\n { email }\r\n );\r\n return response.data;\r\n};\r\n\r\nexport const newsletterService = {\r\n subscribeNewsletter,\r\n};\r\n","export class NewsletterModel {\r\n public email!: string;\r\n}\r\n\r\nexport type SubscriptionResponse = {\r\n value: {\r\n result: \"Subscribed\" | \"AlreadySubscribed\" | \"InvalidState\";\r\n message?: string;\r\n };\r\n};\r\n","import client from \"../client\";\r\nimport type {\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n} from \"./types\";\r\n\r\n// User registration\r\nexport const userRegister = async (\r\n data: RegisterData\r\n): Promise<RegisterResponse> => {\r\n return client.post(\"/user/register\", data).then((res) => res.data);\r\n};\r\n\r\n// User login\r\nexport const userLogin = async (data: LoginData): Promise<LoginResponse> => {\r\n return client.post(\"/user/login\", data).then((res) => res.data);\r\n};\r\n\r\n// Get user profile\r\nexport const getUserProfile = async (): Promise<any> => {\r\n return client.get(\"/user/profile\").then((res) => res.data);\r\n};\r\n\r\n// Update user profile\r\nexport const updateUserProfile = async (data: any): Promise<any> => {\r\n return client.put(\"/user/profile\", data).then((res) => res.data);\r\n};\r\n\r\n// Refresh token\r\nexport const refreshUserToken = async (): Promise<any> => {\r\n return client.post(\"/user/refresh-token\").then((res) => res.data);\r\n};\r\n\r\n// Password reset request\r\nexport const requestPasswordReset = async (email: string): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-request\", { email })\r\n .then((res) => res.data);\r\n};\r\n\r\n// Password reset confirmation\r\nexport const confirmPasswordReset = async (\r\n token: string,\r\n newPassword: string\r\n): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-confirm\", { token, newPassword })\r\n .then((res) => res.data);\r\n};\r\n\r\n// User service object\r\nconst userService = {\r\n userRegister,\r\n userLogin,\r\n getUserProfile,\r\n updateUserProfile,\r\n refreshUserToken,\r\n requestPasswordReset,\r\n confirmPasswordReset,\r\n};\r\n\r\nexport default userService;\r\n","/**\r\n * Persistence layer with expiration based on localStorage.\r\n */\r\n\r\nconst storageMock = {\r\n length: 0,\r\n getItem() {},\r\n setItem() {},\r\n removeItem() {},\r\n clear() {},\r\n};\r\n\r\nclass NamespacedLocalStorage {\r\n localStorage;\r\n key;\r\n constructor(localStorage: any, key: string) {\r\n this.localStorage = localStorage;\r\n this.key = key;\r\n }\r\n _makeKey(key: string): string {\r\n return `${this.key}__${key}`;\r\n }\r\n getItem(name: any) {\r\n return this.localStorage.getItem(this._makeKey(name));\r\n }\r\n setItem(name: any, value: any) {\r\n return this.localStorage.setItem(this._makeKey(name), value);\r\n }\r\n removeItem(name: any) {\r\n return this.localStorage.removeItem(this._makeKey(name));\r\n }\r\n}\r\n\r\nexport default class BrowserPersistence {\r\n static KEY = \"LM_BROWSER_PERSISTENCE\";\r\n storage;\r\n constructor(localStorage = globalThis.localStorage || storageMock) {\r\n this.storage = new NamespacedLocalStorage(\r\n localStorage,\r\n BrowserPersistence.KEY\r\n );\r\n }\r\n getRawItem(name: string) {\r\n return this.storage.getItem(name);\r\n }\r\n getItem(name: string) {\r\n const now = Date.now();\r\n const item = this.storage.getItem(name);\r\n if (!item) {\r\n return undefined;\r\n }\r\n const { value, ttl, timeStored } = JSON.parse(item);\r\n\r\n if (ttl && now - timeStored > ttl * 1000) {\r\n this.storage.removeItem(name);\r\n return undefined;\r\n }\r\n\r\n return JSON.parse(value);\r\n }\r\n setItem(name: string, value: any, ttl: any = 3600) {\r\n const timeStored = Date.now();\r\n this.storage.setItem(\r\n name,\r\n JSON.stringify({\r\n value: JSON.stringify(value),\r\n timeStored,\r\n ttl,\r\n })\r\n );\r\n }\r\n removeItem(name: any) {\r\n this.storage.removeItem(name);\r\n }\r\n}\r\n","export interface SecurityHeader {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nconst defaultContentSecurityPolicy: string[] = [\r\n \"default-src 'self'\",\r\n \"script-src 'self' 'unsafe-inline' https://www.googletagmanager.com\",\r\n \"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com\",\r\n \"img-src 'self' data: blob: https://assets.leadmetrics.ai https://lmsamediaprodeastasia.blob.core.windows.net https://lmsaprodcentralindia.blob.core.windows.net https://images.unsplash.com https://leadmetrics.ai\",\r\n \"font-src 'self' https://fonts.gstatic.com\",\r\n \"connect-src 'self' https://api.ind.leadmetrics.ai https://www.google-analytics.com https://www.googletagmanager.com\",\r\n \"frame-ancestors 'none'\",\r\n \"object-src 'none'\",\r\n \"base-uri 'self'\",\r\n];\r\n\r\nconst defaultHeaders: SecurityHeader[] = [\r\n {\r\n key: \"Content-Security-Policy\",\r\n value: defaultContentSecurityPolicy.join(\"; \"),\r\n },\r\n {\r\n key: \"X-Content-Type-Options\",\r\n value: \"nosniff\",\r\n },\r\n {\r\n key: \"Referrer-Policy\",\r\n value: \"strict-origin-when-cross-origin\",\r\n },\r\n];\r\n\r\nexport interface SecurityHeaderOptions {\r\n extendCsp?: string[];\r\n omitHeaders?: string[];\r\n additionalHeaders?: SecurityHeader[];\r\n}\r\n\r\nconst buildContentSecurityPolicy = (extendCsp: string[] = []): string => {\r\n return [...defaultContentSecurityPolicy, ...extendCsp].join(\"; \");\r\n};\r\n\r\nexport const getDefaultSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): SecurityHeader[] => {\r\n const { extendCsp = [], omitHeaders = [], additionalHeaders = [] } = options;\r\n\r\n const headers = defaultHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n const cspIndex = headers.findIndex((header) => header.key === \"Content-Security-Policy\");\r\n\r\n if (cspIndex !== -1) {\r\n headers[cspIndex].value = buildContentSecurityPolicy(extendCsp);\r\n }\r\n\r\n const mergedAdditionalHeaders = additionalHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n return [...headers, ...mergedAdditionalHeaders];\r\n};\r\n\r\nexport const getNextSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): Array<{ source: string; headers: SecurityHeader[] }> => {\r\n return [\r\n {\r\n source: \"/(.*)\",\r\n headers: getDefaultSecurityHeaders(options),\r\n },\r\n ];\r\n};\r\n\r\nexport const securityHeadersConfig = {\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n};\r\n\r\nexport default securityHeadersConfig;\r\n","import client from \"../client\";\r\nimport { FAQData } from \"./types\";\r\n\r\nconst getFaq = async (slug: string) => {\r\n return await client.get<FAQData>(`faqs/${slug}`).then((res) => res.data);\r\n};\r\n\r\nexport const faqService = {\r\n getFaq,\r\n};\r\n","import client from \"../client\";\r\nimport { Album, AlbumResponse } from \"./types\";\r\n\r\nconst getAllAlbums = async () => {\r\n return await client.get<AlbumResponse>(`albums`).then((res) => res.data);\r\n};\r\n\r\nconst getAlbumById = async (id: string) => {\r\n return await client.get<Album>(`albums/${id}`).then((res) => res.data);\r\n};\r\n\r\nexport const albumService = {\r\n getAllAlbums,\r\n getAlbumById,\r\n};\r\n","import client from \"../client\";\r\nimport { Collections, CollectionDetails } from \"./types\";\r\n\r\nconst getAllCollections = async () => {\r\n return await client\r\n .get<Collections[]>(`collections/all`)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getCollectionsDetails = async (id: string) => {\r\n return await client\r\n .get<CollectionDetails>(`collections/${id}/products`)\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const collectionService = {\r\n getAllCollections,\r\n getCollectionsDetails,\r\n};\r\n","import client from \"../client\";\r\nimport {\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n} from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst sanitizeFreeText = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\\u202E\\u202D]/g, \"\")\r\n .replace(/[^A-Za-z0-9\\s'.-]/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\nconst sanitizeEmail = (value: string) =>\r\n value\r\n .replace(/[^A-Za-z0-9@._+-]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizePhone = (value: string) =>\r\n value\r\n .replace(/[^0-9+]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeFileName = (value: string) =>\r\n value\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'\\\\]/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeContent = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeUrl = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'<>]/g, \"\") // Remove potential XSS characters from URL\r\n .trim();\r\n\r\nconst getAllJobs = async (): Promise<JobModel[]> => {\r\n try {\r\n const response = await client.get<JobModel[]>(\"jobs\");\r\n // API returns plain array, not SearchResult wrapper\r\n const data = response?.data;\r\n\r\n // Ensure we always return an array\r\n if (Array.isArray(data)) {\r\n return data;\r\n }\r\n\r\n // Fallback: check if it's wrapped in items property\r\n if (\r\n data &&\r\n typeof data === \"object\" &&\r\n \"items\" in data &&\r\n Array.isArray((data as any).items)\r\n ) {\r\n return (data as any).items;\r\n }\r\n\r\n console.warn(\"Unexpected jobs data format:\", data);\r\n return [];\r\n } catch (error) {\r\n console.error(\"Error fetching jobs:\", error);\r\n return []; // Return empty array on error\r\n }\r\n};\r\n\r\nconst getJobBySlug = async (slug: string | undefined) => {\r\n return await client\r\n .get<JobModel>(`jobs/by-slug/${slug}`)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst searchJobs = async (params?: {\r\n search?: string;\r\n category?: string;\r\n location?: string;\r\n employmentType?: string;\r\n page?: number;\r\n size?: number;\r\n}): Promise<SearchResult<JobModel>> => {\r\n try {\r\n const queryParams = new URLSearchParams();\r\n\r\n if (params?.search) queryParams.append(\"search\", params.search);\r\n if (params?.category) queryParams.append(\"category\", params.category);\r\n if (params?.location) queryParams.append(\"location\", params.location);\r\n if (params?.employmentType)\r\n queryParams.append(\"employmentType\", params.employmentType);\r\n if (params?.page) queryParams.append(\"page\", params.page.toString());\r\n if (params?.size) queryParams.append(\"size\", params.size.toString());\r\n\r\n const queryString = queryParams.toString();\r\n const url = queryString ? `jobs?${queryString}` : \"jobs\";\r\n\r\n const response = await client.get<SearchResult<JobModel>>(url);\r\n\r\n // Ensure items is always an array\r\n return {\r\n items: Array.isArray(response?.data?.items) ? response.data.items : [],\r\n pagingInfo: response?.data?.pagingInfo || {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n } catch (error) {\r\n console.error(\"Error searching jobs:\", error);\r\n // Return empty result on error\r\n return {\r\n items: [],\r\n pagingInfo: {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n }\r\n};\r\n\r\nconst applyForJob = async (\r\n data: JobApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n if (data.jobId) formData.append(\"JobId\", data.jobId);\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"jobs/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst submitCandidateApplication = async (\r\n data: CandidateApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"candidates/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nexport const careerService = {\r\n getAllJobs,\r\n getJobBySlug,\r\n searchJobs,\r\n applyForJob,\r\n submitCandidateApplication,\r\n};\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport interface JobLocation {\r\n city: string;\r\n state: string;\r\n country: string;\r\n remote: boolean;\r\n hybrid: boolean;\r\n}\r\n\r\nexport interface JobSalary {\r\n min: number;\r\n max: number;\r\n currency: string;\r\n}\r\n\r\nexport interface JobRequirements {\r\n experience: string;\r\n education: string;\r\n requiredSkills: string[];\r\n preferredSkills: string[];\r\n}\r\n\r\nexport interface JobCategory {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface HiringManager {\r\n id: string;\r\n name: string;\r\n email: string;\r\n}\r\n\r\nexport interface JobStats {\r\n views: number;\r\n applications: number;\r\n activeApplications: number;\r\n}\r\n\r\nexport class JobModel extends UserModifiableModel {\r\n title!: string;\r\n slug!: string;\r\n description!: string;\r\n category!: JobCategory;\r\n department!: string;\r\n employmentType!: string;\r\n location!: JobLocation;\r\n salary!: JobSalary;\r\n requirements!: JobRequirements;\r\n status!: string;\r\n numberOfPositions!: number;\r\n postedDate!: Date;\r\n closingDate!: Date;\r\n hiringManager!: HiringManager;\r\n stats!: JobStats;\r\n isActive!: boolean;\r\n tenantId!: string;\r\n}\r\n\r\nexport interface JobApplicationData {\r\n jobId?: string;\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number | null;\r\n currency: string;\r\n currentSalary?: number | null;\r\n expectedSalary?: number | null;\r\n noticePeriod?: number | null;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File | null;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface CandidateApplicationData {\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number;\r\n currency: string;\r\n currentSalary?: number;\r\n expectedSalary?: number;\r\n noticePeriod?: number;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface JobApplicationResponse {\r\n success: boolean;\r\n message: string;\r\n applicationId?: string;\r\n}\r\n","import { blogService } from \"./blog\";\r\nimport { PostModel, BlogCategoryModel } from \"./blog/types\";\r\nimport { cartService } from \"./cart\";\r\nimport { Cart, NewLineItem, ShippingAddress, LineItem } from \"./cart/types\";\r\nimport { productService } from \"./products\";\r\nimport {\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Backward compatibility aliases\r\n ProductModel,\r\n ProductVariantModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n} from \"./products/types\";\r\nimport { formService } from \"./form\";\r\nimport { ContactUsModel } from \"./form/types\";\r\nimport { newsletterService } from \"./newsletter\";\r\nimport { NewsletterModel, SubscriptionResponse } from \"./newsletter/types\";\r\nimport userService from \"./user\";\r\nimport {\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n UserResult,\r\n RegisterResult,\r\n} from \"./user/types\";\r\nimport * as Utils from \"./utils\";\r\nimport { notificationService } from \"./utils/notification\";\r\nimport { PagingInfo, SearchResult } from \"./models\";\r\nimport { faqService } from \"./faq\";\r\nimport { FAQData } from \"./faq/types\";\r\nimport { albumService } from \"./albums\";\r\nimport { Album, AlbumResponse } from \"./albums/types\";\r\nimport { collectionService } from \"./collections\";\r\nimport {\r\n CollectionDetails,\r\n Collections,\r\n ProductDetails,\r\n} from \"./collections/types\";\r\nimport { careerService } from \"./career\";\r\nimport {\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n} from \"./career/types\";\r\nimport {\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n SecurityHeader,\r\n SecurityHeaderOptions,\r\n} from \"./utils/securityHeaders\";\r\n\r\nexport class PostEventModel {\r\n title?: string;\r\n start?: Date;\r\n end?: Date;\r\n resource?: any;\r\n}\r\n\r\nexport {\r\n blogService,\r\n PostModel,\r\n BlogCategoryModel,\r\n cartService,\r\n Cart,\r\n LineItem,\r\n NewLineItem,\r\n ShippingAddress,\r\n productService,\r\n // Product types - new interfaces\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Product types - backward compatibility\r\n ProductModel,\r\n ProductVariantModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n formService,\r\n ContactUsModel,\r\n newsletterService,\r\n NewsletterModel,\r\n SubscriptionResponse,\r\n notificationService,\r\n Utils,\r\n SearchResult,\r\n PagingInfo,\r\n faqService,\r\n FAQData,\r\n albumService,\r\n Album,\r\n AlbumResponse,\r\n collectionService,\r\n Collections,\r\n CollectionDetails,\r\n ProductDetails,\r\n userService,\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n UserResult,\r\n RegisterResult,\r\n careerService,\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n SecurityHeader,\r\n SecurityHeaderOptions,\r\n};\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","StorageManager","isBrowser","window","createRandomId","Math","random","toString","substring","Date","getTime","getSessionId","this","sessionStorage","sessionId","getItem","setItem","getUserId","localStorage","userId","getLocalStorageValue","key","setLocalStorageValue","removeLocalStorageValue","removeItem","getSessionStorageValue","setSessionStorageValue","removeSessionStorageValue","AnalyticService","constructor","storageService","getFS","analyticService","storageManager","client","axios","create","baseURL","process","env","NEXT_PUBLIC_API_BASE_URL","timeout","RETRY_CONFIG","shouldRetry","error","_b","_a","config","metadata","skipRetry","response","status","interceptors","request","use","NEXT_PUBLIC_API_KEY","headers","token","Authorization","fs","Object","assign","startTime","now","retryCount","navigator","userAgent","originalRequest","delay","attempt","baseDelay","maxDelay","pow","min","calculateDelay","ms","setTimeout","retryError","isNetworkError","code","message","includes","isServerError","isClientError","_c","canRetry","blogService","getBlogCategories","get","res","data","getFeaturedPost","getBlogPosts","count","getBlogPostsForPage","page","getBlogPostsForCategory","category","getBlogPost","slug","getSimilarPosts","id","getAllPosts","incrementPostView","post","BaseModel","UserCreatedModel","UserModifiableModel","PagingInfo","currentPage","itemsPerPage","hasNextPage","totalItems","SearchResult","items","PostModel","showNotification","type","alert","notificationService","success","info","cartService","getCart","createCart","body","quantity","utmTags","params","URLSearchParams","location","search","forEach","utmKey","has","keys","length","getUTMTags","put","tags","updateCart","deleteCart","delete","setShippingAddress","getShippingCost","cartId","checkoutCart","checkOrderStatus","orderId","Cart","LineItem","NewLineItem","ShippingAddress","productService","getAllProductCategories","getFeaturedProductCategories","getProductCategory","getProducts","getProductsForPage","searchProducts","q","sort","searchProductsByCategorySlug","categorySlug","getAllProducts","getProduct","getSimilarProducts","searchProductsVariants","args_1","size","maxPrice","minPrice","query","undefined","append","String","getAllProductsByCategorySlug","getCategoriesByParentSlug","getProductsByHierarchy","getAllParentCategoriesSlugsWithChildren","formClient","baseSchema","name","yup","string","required","email","mobile","matches","formService","formId","payload","formUrl","updatedPayload","validationSchema","schemaFields","reduce","acc","object","shape","getValidationSchema","validate","abortEarly","ContactUsModel","newsletterClient","newsletterService","subscribeNewsletter","NewsletterModel","userService","userRegister","userLogin","getUserProfile","updateUserProfile","refreshUserToken","requestPasswordReset","confirmPasswordReset","newPassword","storageMock","clear","NamespacedLocalStorage","_makeKey","BrowserPersistence","globalThis","storage","KEY","getRawItem","item","ttl","timeStored","JSON","parse","stringify","defaultContentSecurityPolicy","defaultHeaders","join","getDefaultSecurityHeaders","options","extendCsp","omitHeaders","additionalHeaders","filter","header","map","cspIndex","findIndex","buildContentSecurityPolicy","mergedAdditionalHeaders","getNextSecurityHeaders","source","securityHeadersConfig","faqService","getFaq","albumService","getAllAlbums","getAlbumById","collectionService","getAllCollections","getCollectionsDetails","sanitizeFreeText","replace","trim","sanitizeEmail","sanitizePhone","sanitizeFileName","sanitizeContent","sanitizeUrl","careerService","getAllJobs","Array","isArray","console","warn","getJobBySlug","searchJobs","queryParams","employmentType","queryString","url","pagingInfo","applyForJob","sanitizedName","sanitizedEmail","sanitizedMobile","formData","FormData","jobId","resume","experience","Number","currency","currentSalary","expectedSalary","noticePeriod","nationality","coverLetter","photo","linkedInUrl","submitCandidateApplication","JobModel","PostEventModel"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/storage/index.ts","../src/analytics/index.ts","../src/client/index.ts","../src/blog/index.ts","../src/models.ts","../src/blog/types.ts","../src/utils/notification.ts","../src/cart/index.ts","../src/cart/types.ts","../src/products/index.ts","../src/form/client.ts","../src/form/index.ts","../src/form/types.ts","../src/newsletter/index.ts","../src/newsletter/types.ts","../src/user/index.ts","../src/utils/persistence.ts","../src/utils/securityHeaders.ts","../src/faq/index.ts","../src/albums/index.ts","../src/collections/index.ts","../src/career/index.ts","../src/career/types.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\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);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\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;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\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]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\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; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\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);\r\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); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\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\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\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\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","export class StorageManager {\r\n // Helper function to check if running in the browser\r\n private isBrowser(): boolean {\r\n return typeof window !== \"undefined\";\r\n }\r\n\r\n // Create a random ID combining random numbers and the current timestamp\r\n private createRandomId(): string {\r\n return (\r\n Math.random().toString(36).substring(2) +\r\n new Date().getTime().toString(36)\r\n );\r\n }\r\n\r\n // Retrieve or create a session ID in sessionStorage\r\n getSessionId(): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n let sessionId = sessionStorage.getItem(\"lm-sid\");\r\n if (!sessionId) {\r\n sessionId = this.createRandomId();\r\n sessionStorage.setItem(\"lm-sid\", sessionId);\r\n }\r\n return sessionId;\r\n }\r\n return null;\r\n }\r\n\r\n // Retrieve or create a user ID in localStorage\r\n getUserId(): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n let userId = localStorage.getItem(\"lm-uid\");\r\n if (!userId) {\r\n userId = this.createRandomId();\r\n localStorage.setItem(\"lm-uid\", userId);\r\n }\r\n return userId;\r\n }\r\n return null;\r\n }\r\n\r\n // General getValue method for retrieving items from localStorage\r\n getLocalStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.localStorage) {\r\n return localStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in localStorage\r\n setLocalStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from localStorage\r\n removeLocalStorageValue(key: string): void {\r\n if (this.isBrowser() && window.localStorage) {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n\r\n // General getValue method for retrieving items from sessionStorage\r\n getSessionStorageValue(key: string): string | null {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n return sessionStorage.getItem(key);\r\n }\r\n return null;\r\n }\r\n\r\n // General setValue method for setting items in sessionStorage\r\n setSessionStorageValue(key: string, value: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.setItem(key, value);\r\n }\r\n }\r\n\r\n // General removeValue method for removing items from sessionStorage\r\n removeSessionStorageValue(key: string): void {\r\n if (this.isBrowser() && window.sessionStorage) {\r\n sessionStorage.removeItem(key);\r\n }\r\n }\r\n}\r\n","import { StorageManager } from \"../storage\";\r\n\r\nexport class AnalyticService {\r\n private storageService: StorageManager;\r\n\r\n constructor() {\r\n this.storageService = new StorageManager();\r\n }\r\n\r\n getFS(): string | null {\r\n const userId = this.storageService.getUserId();\r\n const sessionId = this.storageService.getSessionId();\r\n\r\n if (userId && sessionId) {\r\n return `${userId}:${sessionId}`;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { StorageManager } from \"../storage\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\nconst storageManager = new StorageManager();\r\n\r\nconst client = axios.create({\r\n baseURL:\r\n process.env.NEXT_PUBLIC_API_BASE_URL ||\r\n \"https://client-api.ind.leadmetrics.ai/api/client/v1/\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nclient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set Authorization token from localStorage if available\r\n const token = storageManager.getLocalStorageValue(\"authToken\");\r\n if (token) {\r\n config.headers = config.headers || {};\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nclient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await client(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default client;\r\n","import client from \"../client\";\r\nimport { PostModel, BlogCategoryModel } from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst getBlogCategories = async () => {\r\n return await client\r\n .get<BlogCategoryModel[]>(\"posts/categories\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedPost = async () => {\r\n return await client.get<PostModel>(\"posts/featured\").then((res) => res.data);\r\n};\r\n\r\nconst getBlogPosts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\"posts?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPostsForCategory = async (count: number, category: string) => {\r\n return await client\r\n .get<SearchResult<PostModel>>(\r\n \"posts?size=\" + count + \"&category=\" + category\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getBlogPost = async (slug: string | string[] | undefined) => {\r\n return await client.get<PostModel>(\"posts/\" + slug).then((res) => res.data);\r\n};\r\n\r\nconst incrementPostView = async (id: string) => {\r\n return await client.post(`posts/${id}/add-view`).then((res) => res.data);\r\n};\r\n\r\nconst getSimilarPosts = async (id: string, count: number) => {\r\n return await client\r\n .get<PostModel[]>(\"posts/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllPosts = async () => {\r\n return await client.get<PostModel[]>(\"posts/all\").then((res) => res.data);\r\n};\r\n\r\nexport const blogService = {\r\n getBlogCategories,\r\n getFeaturedPost,\r\n getBlogPosts,\r\n getBlogPostsForPage,\r\n getBlogPostsForCategory,\r\n getBlogPost,\r\n getSimilarPosts,\r\n getAllPosts,\r\n incrementPostView,\r\n};\r\n","export class BaseModel {\r\n public id!: string;\r\n public refId!: string;\r\n public createdOn!: Date;\r\n}\r\n\r\nexport class UserCreatedModel extends BaseModel {\r\n public createdByUserId!: string;\r\n}\r\n\r\nexport class UserModifiableModel extends UserCreatedModel {\r\n public updatedOn?: Date;\r\n public updatedByUserId?: string;\r\n public deletedOn?: Date;\r\n public deletedByUserId?: string;\r\n}\r\n\r\nexport class PagingInfo {\r\n public currentPage: number;\r\n public itemsPerPage: number;\r\n public hasNextPage: boolean;\r\n public totalItems: number;\r\n\r\n constructor(currentPage: number, itemsPerPage: number, hasNextPage: boolean) {\r\n this.currentPage = currentPage;\r\n this.itemsPerPage = itemsPerPage;\r\n this.hasNextPage = hasNextPage;\r\n this.totalItems = 0;\r\n }\r\n}\r\n\r\nexport class SearchResult<T> {\r\n public items: Array<T> = [];\r\n public pagingInfo!: PagingInfo;\r\n}","import { UserModifiableModel } from \"../models\";\r\nimport { FAQItem } from \"../faq/types\";\r\n\r\nexport class PostModel extends UserModifiableModel {\r\n slug!: string;\r\n isFeatured!: boolean;\r\n isActive!: boolean;\r\n category!: string;\r\n featuredImage!: string;\r\n title!: string;\r\n previewContent!: string;\r\n content!: string;\r\n readTime!: number;\r\n impressions!: number;\r\n views!: number;\r\n likes!: number;\r\n publishedOn!: Date;\r\n tags?: string[];\r\n categoryInfo!: {\r\n id: string | null;\r\n name: string | null;\r\n slug: string | null;\r\n };\r\n seo!: {\r\n title: string;\r\n description: string;\r\n keywords: string;\r\n };\r\n author?: {\r\n name?: string;\r\n id?: string;\r\n };\r\n faq?: FAQItem[];\r\n}\r\n\r\nexport type BlogCategoryModel = {\r\n name: string;\r\n slug: string;\r\n};\r\n","// Simple notification service for displaying messages to users\r\nexport const showNotification = (\r\n message: string,\r\n type: \"success\" | \"error\" | \"info\" = \"info\"\r\n) => {\r\n // Simple alert-based notification - can be enhanced later\r\n if (type === \"error\") {\r\n alert(`Error: ${message}`);\r\n } else if (type === \"success\") {\r\n alert(`Success: ${message}`);\r\n } else {\r\n alert(message);\r\n }\r\n};\r\n\r\n// Notification service object\r\nexport const notificationService = {\r\n success: (message: string) => showNotification(message, \"success\"),\r\n error: (message: string) => showNotification(message, \"error\"),\r\n info: (message: string) => showNotification(message, \"info\"),\r\n};\r\n\r\nexport default notificationService;\r\n","import client from \"../client\";\r\nimport { Cart, NewLineItem, ShippingAddress } from \"./types\";\r\nimport { notificationService } from \"../utils/notification\";\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst getCart = async (id: string) => {\r\n return await client.get<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst createCart = async (body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n return;\r\n }\r\n\r\n // Get UTM tags as a comma-separated string\r\n const utmTags = getUTMTags();\r\n\r\n return await client.post<Cart>(\"carts\", body).then((res) => {\r\n if (res.data.id) {\r\n client.put(`carts/${res.data.id}/info`, {\r\n tags: utmTags,\r\n });\r\n }\r\n return res.data;\r\n });\r\n};\r\n\r\nconst updateCart = async (id: string, body: NewLineItem) => {\r\n // Validate quantity\r\n if (body.quantity < 0) {\r\n notificationService.error(\"Quantity must be a positive value\");\r\n }\r\n\r\n return await client\r\n .put<Cart>(`carts/${id}/line-items`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst deleteCart = async (id: string) => {\r\n return await client.delete<Cart>(`carts/${id}`).then((res) => res.data);\r\n};\r\n\r\nconst setShippingAddress = async (id: string, body: ShippingAddress) => {\r\n return await client\r\n .put<Cart>(`carts/${id}/shipping-address`, body)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getShippingCost = async (\r\n cartId: string,\r\n body: { provider: string; zone: string }\r\n) => {\r\n return await client.post(`shipping/${cartId}`, body).then((res) => res.data);\r\n};\r\n\r\nconst checkoutCart = async (cartId: string) => {\r\n return await client.post(`carts/${cartId}/checkout`).then((res) => res.data);\r\n};\r\n\r\nconst checkOrderStatus = async (orderId: string) => {\r\n return await client.put(`orders/${orderId}/Status`).then((res) => res.data);\r\n};\r\n\r\nexport const cartService = {\r\n getCart,\r\n createCart,\r\n updateCart,\r\n deleteCart,\r\n setShippingAddress,\r\n getShippingCost,\r\n checkoutCart,\r\n checkOrderStatus,\r\n};\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport class Cart extends UserModifiableModel {\r\n lineItems?: LineItem[];\r\n shippingAddress?: ShippingAddress;\r\n total!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n shippingFee?: ShippingFee;\r\n}\r\n\r\nexport class ShippingFee {\r\n feeAmount!: number;\r\n feeType!: string;\r\n feeValue!: number;\r\n}\r\n\r\nexport class LineItem {\r\n id!: string;\r\n productId!: string;\r\n variantId!: string;\r\n productSlug!: string;\r\n productName!: string;\r\n productImage!: string;\r\n price!: number;\r\n quantity!: number;\r\n currency!: string;\r\n currencySymbol!: string;\r\n attributes!: Record<string, string>;\r\n}\r\n\r\nexport class NewLineItem {\r\n productId!: string;\r\n quantity!: number;\r\n id!: string;\r\n}\r\n\r\nexport class ShippingAddress {\r\n id!: string;\r\n name!: string;\r\n email!: string;\r\n mobile!: string;\r\n address!: string;\r\n city!: string;\r\n zipcode!: string;\r\n state!: string;\r\n country!: string;\r\n landmark?: string;\r\n alternateMobile?: string;\r\n deliveryInstructions?: string;\r\n isDefault!: boolean;\r\n}\r\n","import { get } from \"http\";\r\nimport client from \"../client\";\r\nimport { SearchResult } from \"../models\";\r\nimport {\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Backward compatibility aliases\r\n ProductModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n} from \"./types\";\r\n\r\nconst getAllProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getFeaturedProductCategories = async () => {\r\n return await client\r\n .get<ProductCategoryModel[]>(\"productcategories/all/featured\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductCategory = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductCategoryModel>(\"productcategories/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getAllProducts = async () => {\r\n return await client\r\n .get<ProductModel[]>(\"products/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProducts = async (count: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getProductsForPage = async (count: number, page: number) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\"products?size=\" + count + \"&page=\" + page)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProducts = async (\r\n q: string,\r\n category: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?q=\" +\r\n q +\r\n \"&category=\" +\r\n category +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsByCategorySlug = async (\r\n categorySlug: string,\r\n count: number,\r\n page: number,\r\n sort: string\r\n) => {\r\n return await client\r\n .get<SearchResult<ProductModel>>(\r\n \"products?\" +\r\n \"categorySlug=\" +\r\n categorySlug +\r\n \"&size=\" +\r\n count +\r\n \"&page=\" +\r\n page +\r\n \"&sort=\" +\r\n sort\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\nconst searchProductsVariants = async ({\r\n page,\r\n size,\r\n maxPrice,\r\n minPrice,\r\n query,\r\n}: {\r\n page?: number;\r\n size?: number;\r\n maxPrice?: number;\r\n minPrice?: number;\r\n query?: string;\r\n} = {}) => {\r\n try {\r\n const params = new URLSearchParams();\r\n\r\n if (page !== undefined) params.append(\"page\", String(page));\r\n if (size !== undefined) params.append(\"size\", String(size));\r\n if (maxPrice !== undefined) params.append(\"maxPrice\", String(maxPrice));\r\n if (minPrice !== undefined) params.append(\"minPrice\", String(minPrice));\r\n if (query) params.append(\"Query\", query);\r\n\r\n const response = await client.get<SearchResult<ProductSearchVariantModel>>(\r\n `products/variants?${params.toString()}`\r\n );\r\n\r\n return response.data;\r\n } catch (error) {\r\n throw error;\r\n }\r\n};\r\n\r\nconst getProduct = async (slug: string | string[] | undefined) => {\r\n return await client\r\n .get<ProductModel>(\"products/\" + slug)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getSimilarProducts = async (id: string, count: number) => {\r\n return await client\r\n .get<ProductModel[]>(\"products/\" + id + \"/similar?count=\" + count)\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all products from a category slug\r\nconst getAllProductsByCategorySlug = async (slug: string) => {\r\n return await client\r\n .get<CategoryProductResponse>(\"productcategories/\" + slug + \"/products\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all categories with the same parent slug\r\nconst getCategoriesByParentSlug = async (slug: string) => {\r\n return await client\r\n .get<ParentCategoryResponse>(\"productcategories/\" + slug + \"/subcategories\")\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getProductsByHierarchy = async (slug: string) => {\r\n return await client\r\n .get<ProductHierarchyResponse>(\r\n \"productcategories/\" + slug + \"/products/hierarchy\"\r\n )\r\n .then((res) => res.data);\r\n};\r\n\r\n// get all the items from a category or a parent category\r\nconst getAllParentCategoriesSlugsWithChildren = async () => {\r\n return await client\r\n .get<ParentCategorySlugsResponse[]>(\"productcategories/parentcategory/all\")\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const productService = {\r\n getAllProductCategories,\r\n getFeaturedProductCategories,\r\n getProductCategory,\r\n getProducts,\r\n getProductsForPage,\r\n searchProducts,\r\n searchProductsByCategorySlug,\r\n getAllProducts,\r\n getProduct,\r\n getSimilarProducts,\r\n searchProductsVariants,\r\n getAllProductsByCategorySlug,\r\n getCategoriesByParentSlug,\r\n getProductsByHierarchy,\r\n getAllParentCategoriesSlugsWithChildren,\r\n};\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\n\r\n/**\r\n * Internal HTTP Client with automatic retry logic and error handling\r\n *\r\n * Features:\r\n * - Automatic API key injection\r\n * - Session/fingerprint tracking\r\n * - Retry on network errors, timeouts, and server errors (5xx)\r\n * - Exponential backoff with max delay cap\r\n * - Enhanced error information for debugging\r\n *\r\n * Retry Configuration:\r\n * - Max retries: 3\r\n * - Base delay: 1000ms\r\n * - Max delay: 30000ms (30 seconds)\r\n * - Retry on: Network errors, 5xx, 408, 429, 503, 504\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\nconst formClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor\r\nformClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n // Add user agent for better tracking\r\n if (typeof window !== \"undefined\") {\r\n config.headers = config.headers || {};\r\n config.headers[\r\n \"User-Agent\"\r\n ] = `LeadMetrics-SDK/1.0 ${navigator.userAgent}`;\r\n }\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with comprehensive retry logic\r\nformClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await formClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default formClient;\r\n","import * as yup from \"yup\";\r\nimport formClient from \"./client\";\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n};\r\n\r\n// Define base schema with type-safe indexing\r\nconst baseSchema: Partial<Record<string, yup.StringSchema>> = {\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n};\r\n\r\n// Function to dynamically build a validation schema for fields in payload\r\nconst getValidationSchema = (payload: Record<string, string>) => {\r\n const schemaFields = Object.keys(payload).reduce((acc, key) => {\r\n if (baseSchema[key]) {\r\n acc[key] = baseSchema[key] as yup.StringSchema;\r\n }\r\n return acc;\r\n }, {} as Record<string, yup.StringSchema>);\r\n return yup.object().shape(schemaFields);\r\n};\r\n\r\n// Function to get UTM tags from the URL\r\nconst getUTMTags = (): Record<string, string> => {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmTags: Record<string, string> = {};\r\n\r\n [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ].forEach((utmKey) => {\r\n if (params.has(utmKey)) {\r\n utmTags[utmKey] = params.get(utmKey) || \"\";\r\n }\r\n });\r\n\r\n return Object.keys(utmTags).length > 0 ? utmTags : {};\r\n};\r\n\r\nconst post = async (\r\n formId: string,\r\n payload: Record<string, string>\r\n): Promise<unknown> => {\r\n const formUrl = \"/forms/\" + formId;\r\n\r\n // Get UTM tags\r\n const utmTags = getUTMTags();\r\n\r\n // Merge UTM tags with the payload only if they exist\r\n const updatedPayload =\r\n Object.keys(utmTags).length > 0 ? { ...payload, ...utmTags } : payload;\r\n\r\n // Get the validation schema based on existing fields in the payload\r\n const validationSchema = getValidationSchema(payload);\r\n\r\n // Validate the payload dynamically\r\n await validationSchema.validate(payload, { abortEarly: false });\r\n\r\n // Send the updated payload\r\n return await formClient.post(formUrl, updatedPayload).then((res) => res.data);\r\n};\r\n\r\nexport const formService = {\r\n post,\r\n};\r\n","import * as yup from \"yup\";\r\n\r\nexport class ContactUsModel {\r\n public name!: string;\r\n public email!: string;\r\n public mobile!: string;\r\n public whatsapp!: string;\r\n public message!: string;\r\n}\r\n\r\nconst regexExpression = {\r\n phone:\r\n /^((\\\\+[1-9]{1,4}[ \\\\-]*)|(\\\\([0-9]{2,3}\\\\)[ \\\\-]*)|([0-9]{2,4})[ \\\\-]*)*?[0-9]{3,4}?[ \\\\-]*[0-9]{3,4}?$/,\r\n password: /^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$/,\r\n};\r\n\r\nexport const ContactUsSchema = yup.object().shape({\r\n name: yup.string().required(\"Please enter your name\").min(3),\r\n email: yup\r\n .string()\r\n .required(\"Please enter your email\")\r\n .email(\"Please enter a valid email\"),\r\n mobile: yup\r\n .string()\r\n .required(\"Please enter your mobile number\")\r\n .matches(regexExpression.phone, \"Please enter a valid mobile number\"),\r\n message: yup.string().required(\"Please enter your message\").min(5),\r\n});\r\n","import axios from \"axios\";\r\nimport { AnalyticService } from \"../analytics\";\r\nimport { SubscriptionResponse } from \"./types\";\r\n\r\n/**\r\n * Newsletter Service with dedicated client for newsletter API\r\n *\r\n * Usage:\r\n * ```typescript\r\n * import { newsletterService, SubscriptionResponse } from '@leadmetrics-ai/website-sdk';\r\n *\r\n * const result: SubscriptionResponse = await newsletterService.subscribeNewsletter('user@example.com');\r\n *\r\n * if (result.value.result === \"Subscribed\") {\r\n * console.log('Successfully subscribed!');\r\n * } else if (result.value.result === \"AlreadySubscribed\") {\r\n * console.log('Already subscribed!');\r\n * } else {\r\n * console.log('Invalid state:', result.value.message);\r\n * }\r\n * ```\r\n */\r\n\r\n// Extend Axios config to include metadata\r\ndeclare module \"axios\" {\r\n interface InternalAxiosRequestConfig {\r\n metadata?: {\r\n startTime?: number;\r\n retryCount?: number;\r\n skipRetry?: boolean;\r\n };\r\n }\r\n}\r\n\r\nconst analyticService = new AnalyticService();\r\n\r\n// Create a separate client for newsletter service with its own base URL\r\nconst newsletterClient = axios.create({\r\n baseURL: \"https://client-api.ind.leadmetrics.ai/api/form/v1/forms\",\r\n timeout: 30000, // 30 seconds timeout\r\n});\r\n\r\n// Internal retry configuration\r\nconst RETRY_CONFIG = {\r\n retries: 3,\r\n retryDelay: 1000,\r\n maxDelay: 30000, // Maximum delay of 30 seconds\r\n};\r\n\r\n// Utility functions\r\nconst sleep = (ms: number): Promise<void> =>\r\n new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst calculateDelay = (\r\n attempt: number,\r\n baseDelay: number,\r\n maxDelay: number\r\n): number => {\r\n const delay = baseDelay * Math.pow(2, attempt - 1); // Exponential backoff\r\n return Math.min(delay, maxDelay); // Cap at maximum delay\r\n};\r\n\r\nconst shouldRetry = (error: any): boolean => {\r\n // Don't retry if explicitly disabled\r\n if (error.config?.metadata?.skipRetry) {\r\n return false;\r\n }\r\n\r\n // Retry on network errors (no response)\r\n if (!error.response) {\r\n return true;\r\n }\r\n\r\n const status = error.response.status;\r\n return (\r\n status >= 500 || // Server errors (500-599)\r\n status === 408 || // Request timeout\r\n status === 429 || // Too many requests\r\n status === 503 || // Service unavailable\r\n status === 504 // Gateway timeout\r\n );\r\n};\r\n\r\nconst isNetworkError = (error: any): boolean => {\r\n return (\r\n !error.response &&\r\n (error.code === \"NETWORK_ERROR\" ||\r\n error.code === \"ERR_NETWORK\" ||\r\n error.code === \"ECONNABORTED\" ||\r\n error.message?.includes(\"Network Error\"))\r\n );\r\n};\r\n\r\n// Request interceptor for newsletter client\r\nnewsletterClient.interceptors.request.use(\r\n async (config) => {\r\n try {\r\n // Set API key\r\n if (process.env.NEXT_PUBLIC_API_KEY) {\r\n config.headers = config.headers || {};\r\n config.headers[\"Api-Key\"] = process.env.NEXT_PUBLIC_API_KEY;\r\n }\r\n\r\n // Set fingerprint/session tracking\r\n const fs = analyticService.getFS();\r\n if (fs) {\r\n config.headers = config.headers || {};\r\n config.headers[\"fs\"] = fs;\r\n }\r\n\r\n // Add request timestamp and retry metadata\r\n config.metadata = {\r\n ...config.metadata,\r\n startTime: Date.now(),\r\n retryCount: config.metadata?.retryCount || 0,\r\n };\r\n\r\n return config;\r\n } catch (error) {\r\n return config;\r\n }\r\n },\r\n (error) => {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\n// Response interceptor with retry logic for newsletter client\r\nnewsletterClient.interceptors.response.use(\r\n (response) => {\r\n // Reset retry count on successful response\r\n if (response.config.metadata) {\r\n response.config.metadata.retryCount = 0;\r\n }\r\n return response;\r\n },\r\n async (error) => {\r\n const originalRequest = error.config;\r\n\r\n // If no original request, reject immediately\r\n if (!originalRequest) {\r\n return Promise.reject(error);\r\n }\r\n\r\n // Initialize metadata if not exists\r\n if (!originalRequest.metadata) {\r\n originalRequest.metadata = { retryCount: 0 };\r\n }\r\n\r\n const retryCount = originalRequest.metadata.retryCount || 0;\r\n\r\n // Check if we should retry\r\n const canRetry = retryCount < RETRY_CONFIG.retries && shouldRetry(error);\r\n\r\n if (canRetry) {\r\n // Increment retry count\r\n originalRequest.metadata.retryCount = retryCount + 1;\r\n\r\n // Calculate delay with exponential backoff and cap\r\n const delay = calculateDelay(\r\n originalRequest.metadata.retryCount,\r\n RETRY_CONFIG.retryDelay,\r\n RETRY_CONFIG.maxDelay\r\n );\r\n\r\n // Wait before retrying\r\n await sleep(delay);\r\n\r\n try {\r\n // Retry the request\r\n return await newsletterClient(originalRequest);\r\n } catch (retryError) {\r\n // If retry also fails, continue with normal error handling\r\n error = retryError;\r\n }\r\n }\r\n\r\n // Add additional error properties for better handling\r\n error.isNetworkError = isNetworkError(error);\r\n error.isServerError = error.response?.status >= 500;\r\n error.isClientError =\r\n error.response?.status >= 400 && error.response?.status < 500;\r\n error.retryCount = retryCount;\r\n error.canRetry = shouldRetry(error) && retryCount < RETRY_CONFIG.retries;\r\n\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nconst subscribeNewsletter = async (\r\n email: string\r\n): Promise<SubscriptionResponse> => {\r\n const response = await newsletterClient.post<SubscriptionResponse>(\r\n \"/newsletter/subscription\",\r\n { email }\r\n );\r\n return response.data;\r\n};\r\n\r\nexport const newsletterService = {\r\n subscribeNewsletter,\r\n};\r\n","export class NewsletterModel {\r\n public email!: string;\r\n}\r\n\r\nexport type SubscriptionResponse = {\r\n value: {\r\n result: \"Subscribed\" | \"AlreadySubscribed\" | \"InvalidState\";\r\n message?: string;\r\n };\r\n};\r\n","import client from \"../client\";\r\nimport type {\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n} from \"./types\";\r\n\r\n// User registration\r\nexport const userRegister = async (\r\n data: RegisterData\r\n): Promise<RegisterResponse> => {\r\n return client.post(\"/user/register\", data).then((res) => res.data);\r\n};\r\n\r\n// User login\r\nexport const userLogin = async (data: LoginData): Promise<LoginResponse> => {\r\n return client.post(\"/user/login\", data).then((res) => res.data);\r\n};\r\n\r\n// Get user profile\r\nexport const getUserProfile = async (): Promise<any> => {\r\n return client.get(\"/user/profile\").then((res) => res.data);\r\n};\r\n\r\n// Update user profile\r\nexport const updateUserProfile = async (data: any): Promise<any> => {\r\n return client.put(\"/user/profile\", data).then((res) => res.data);\r\n};\r\n\r\n// Refresh token\r\nexport const refreshUserToken = async (): Promise<any> => {\r\n return client.post(\"/user/refresh-token\").then((res) => res.data);\r\n};\r\n\r\n// Password reset request\r\nexport const requestPasswordReset = async (email: string): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-request\", { email })\r\n .then((res) => res.data);\r\n};\r\n\r\n// Password reset confirmation\r\nexport const confirmPasswordReset = async (\r\n token: string,\r\n newPassword: string\r\n): Promise<any> => {\r\n return client\r\n .post(\"/user/password/reset-confirm\", { token, newPassword })\r\n .then((res) => res.data);\r\n};\r\n\r\n// User service object\r\nconst userService = {\r\n userRegister,\r\n userLogin,\r\n getUserProfile,\r\n updateUserProfile,\r\n refreshUserToken,\r\n requestPasswordReset,\r\n confirmPasswordReset,\r\n};\r\n\r\nexport default userService;\r\n","/**\r\n * Persistence layer with expiration based on localStorage.\r\n */\r\n\r\nconst storageMock = {\r\n length: 0,\r\n getItem() {},\r\n setItem() {},\r\n removeItem() {},\r\n clear() {},\r\n};\r\n\r\nclass NamespacedLocalStorage {\r\n localStorage;\r\n key;\r\n constructor(localStorage: any, key: string) {\r\n this.localStorage = localStorage;\r\n this.key = key;\r\n }\r\n _makeKey(key: string): string {\r\n return `${this.key}__${key}`;\r\n }\r\n getItem(name: any) {\r\n return this.localStorage.getItem(this._makeKey(name));\r\n }\r\n setItem(name: any, value: any) {\r\n return this.localStorage.setItem(this._makeKey(name), value);\r\n }\r\n removeItem(name: any) {\r\n return this.localStorage.removeItem(this._makeKey(name));\r\n }\r\n}\r\n\r\nexport default class BrowserPersistence {\r\n static KEY = \"LM_BROWSER_PERSISTENCE\";\r\n storage;\r\n constructor(localStorage = globalThis.localStorage || storageMock) {\r\n this.storage = new NamespacedLocalStorage(\r\n localStorage,\r\n BrowserPersistence.KEY\r\n );\r\n }\r\n getRawItem(name: string) {\r\n return this.storage.getItem(name);\r\n }\r\n getItem(name: string) {\r\n const now = Date.now();\r\n const item = this.storage.getItem(name);\r\n if (!item) {\r\n return undefined;\r\n }\r\n const { value, ttl, timeStored } = JSON.parse(item);\r\n\r\n if (ttl && now - timeStored > ttl * 1000) {\r\n this.storage.removeItem(name);\r\n return undefined;\r\n }\r\n\r\n return JSON.parse(value);\r\n }\r\n setItem(name: string, value: any, ttl: any = 3600) {\r\n const timeStored = Date.now();\r\n this.storage.setItem(\r\n name,\r\n JSON.stringify({\r\n value: JSON.stringify(value),\r\n timeStored,\r\n ttl,\r\n })\r\n );\r\n }\r\n removeItem(name: any) {\r\n this.storage.removeItem(name);\r\n }\r\n}\r\n","export interface SecurityHeader {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nconst defaultContentSecurityPolicy: string[] = [\r\n \"default-src 'self'\",\r\n \"script-src 'self' 'unsafe-inline' https://www.googletagmanager.com\",\r\n \"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com\",\r\n \"img-src 'self' data: blob: https://assets.leadmetrics.ai https://lmsamediaprodeastasia.blob.core.windows.net https://lmsaprodcentralindia.blob.core.windows.net https://images.unsplash.com https://leadmetrics.ai\",\r\n \"font-src 'self' https://fonts.gstatic.com\",\r\n \"connect-src 'self' https://api.ind.leadmetrics.ai https://www.google-analytics.com https://www.googletagmanager.com\",\r\n \"frame-ancestors 'none'\",\r\n \"object-src 'none'\",\r\n \"base-uri 'self'\",\r\n];\r\n\r\nconst defaultHeaders: SecurityHeader[] = [\r\n {\r\n key: \"Content-Security-Policy\",\r\n value: defaultContentSecurityPolicy.join(\"; \"),\r\n },\r\n {\r\n key: \"X-Content-Type-Options\",\r\n value: \"nosniff\",\r\n },\r\n {\r\n key: \"Referrer-Policy\",\r\n value: \"strict-origin-when-cross-origin\",\r\n },\r\n];\r\n\r\nexport interface SecurityHeaderOptions {\r\n extendCsp?: string[];\r\n omitHeaders?: string[];\r\n additionalHeaders?: SecurityHeader[];\r\n}\r\n\r\nconst buildContentSecurityPolicy = (extendCsp: string[] = []): string => {\r\n return [...defaultContentSecurityPolicy, ...extendCsp].join(\"; \");\r\n};\r\n\r\nexport const getDefaultSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): SecurityHeader[] => {\r\n const { extendCsp = [], omitHeaders = [], additionalHeaders = [] } = options;\r\n\r\n const headers = defaultHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n const cspIndex = headers.findIndex((header) => header.key === \"Content-Security-Policy\");\r\n\r\n if (cspIndex !== -1) {\r\n headers[cspIndex].value = buildContentSecurityPolicy(extendCsp);\r\n }\r\n\r\n const mergedAdditionalHeaders = additionalHeaders\r\n .filter((header) => !omitHeaders.includes(header.key))\r\n .map((header) => ({ ...header }));\r\n\r\n return [...headers, ...mergedAdditionalHeaders];\r\n};\r\n\r\nexport const getNextSecurityHeaders = (\r\n options: SecurityHeaderOptions = {}\r\n): Array<{ source: string; headers: SecurityHeader[] }> => {\r\n return [\r\n {\r\n source: \"/(.*)\",\r\n headers: getDefaultSecurityHeaders(options),\r\n },\r\n ];\r\n};\r\n\r\nexport const securityHeadersConfig = {\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n};\r\n\r\nexport default securityHeadersConfig;\r\n","import client from \"../client\";\r\nimport { FAQData } from \"./types\";\r\n\r\nconst getFaq = async (slug: string) => {\r\n return await client.get<FAQData>(`faqs/${slug}`).then((res) => res.data);\r\n};\r\n\r\nexport const faqService = {\r\n getFaq,\r\n};\r\n","import client from \"../client\";\r\nimport { Album, AlbumResponse } from \"./types\";\r\n\r\nconst getAllAlbums = async () => {\r\n return await client.get<AlbumResponse>(`albums`).then((res) => res.data);\r\n};\r\n\r\nconst getAlbumById = async (id: string) => {\r\n return await client.get<Album>(`albums/${id}`).then((res) => res.data);\r\n};\r\n\r\nexport const albumService = {\r\n getAllAlbums,\r\n getAlbumById,\r\n};\r\n","import client from \"../client\";\r\nimport { Collections, CollectionDetails } from \"./types\";\r\n\r\nconst getAllCollections = async () => {\r\n return await client\r\n .get<Collections[]>(`collections/all`)\r\n .then((res) => res.data);\r\n};\r\n\r\nconst getCollectionsDetails = async (id: string) => {\r\n return await client\r\n .get<CollectionDetails>(`collections/${id}/products`)\r\n .then((res) => res.data);\r\n};\r\n\r\nexport const collectionService = {\r\n getAllCollections,\r\n getCollectionsDetails,\r\n};\r\n","import client from \"../client\";\r\nimport {\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n} from \"./types\";\r\nimport { SearchResult } from \"../models\";\r\n\r\nconst sanitizeFreeText = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\\u202E\\u202D]/g, \"\")\r\n .replace(/[^A-Za-z0-9\\s'.-]/g, \"\")\r\n .replace(/\\s+/g, \" \")\r\n .trim();\r\n\r\nconst sanitizeEmail = (value: string) =>\r\n value\r\n .replace(/[^A-Za-z0-9@._+-]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizePhone = (value: string) =>\r\n value\r\n .replace(/[^0-9+]/g, \"\")\r\n .replace(/\\s+/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeFileName = (value: string) =>\r\n value\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'\\\\]/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeContent = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .trim();\r\n\r\nconst sanitizeUrl = (value: string) =>\r\n value\r\n .replace(/<script.*?>[\\s\\S]*?<\\/script>/gi, \"\")\r\n .replace(/<[^>]*>/g, \"\")\r\n .replace(/[\"'<>]/g, \"\") // Remove potential XSS characters from URL\r\n .trim();\r\n\r\nconst getAllJobs = async (): Promise<JobModel[]> => {\r\n try {\r\n const response = await client.get<JobModel[]>(\"jobs\");\r\n // API returns plain array, not SearchResult wrapper\r\n const data = response?.data;\r\n\r\n // Ensure we always return an array\r\n if (Array.isArray(data)) {\r\n return data;\r\n }\r\n\r\n // Fallback: check if it's wrapped in items property\r\n if (\r\n data &&\r\n typeof data === \"object\" &&\r\n \"items\" in data &&\r\n Array.isArray((data as any).items)\r\n ) {\r\n return (data as any).items;\r\n }\r\n\r\n console.warn(\"Unexpected jobs data format:\", data);\r\n return [];\r\n } catch (error) {\r\n console.error(\"Error fetching jobs:\", error);\r\n return []; // Return empty array on error\r\n }\r\n};\r\n\r\nconst getJobBySlug = async (slug: string | undefined) => {\r\n return await client\r\n .get<JobModel>(`jobs/by-slug/${slug}`)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst searchJobs = async (params?: {\r\n search?: string;\r\n category?: string;\r\n location?: string;\r\n employmentType?: string;\r\n page?: number;\r\n size?: number;\r\n}): Promise<SearchResult<JobModel>> => {\r\n try {\r\n const queryParams = new URLSearchParams();\r\n\r\n if (params?.search) queryParams.append(\"search\", params.search);\r\n if (params?.category) queryParams.append(\"category\", params.category);\r\n if (params?.location) queryParams.append(\"location\", params.location);\r\n if (params?.employmentType)\r\n queryParams.append(\"employmentType\", params.employmentType);\r\n if (params?.page) queryParams.append(\"page\", params.page.toString());\r\n if (params?.size) queryParams.append(\"size\", params.size.toString());\r\n\r\n const queryString = queryParams.toString();\r\n const url = queryString ? `jobs?${queryString}` : \"jobs\";\r\n\r\n const response = await client.get<SearchResult<JobModel>>(url);\r\n\r\n // Ensure items is always an array\r\n return {\r\n items: Array.isArray(response?.data?.items) ? response.data.items : [],\r\n pagingInfo: response?.data?.pagingInfo || {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n } catch (error) {\r\n console.error(\"Error searching jobs:\", error);\r\n // Return empty result on error\r\n return {\r\n items: [],\r\n pagingInfo: {\r\n currentPage: 1,\r\n itemsPerPage: 10,\r\n hasNextPage: false,\r\n totalItems: 0,\r\n },\r\n };\r\n }\r\n};\r\n\r\nconst applyForJob = async (\r\n data: JobApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n if (data.jobId) formData.append(\"JobId\", data.jobId);\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"jobs/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nconst submitCandidateApplication = async (\r\n data: CandidateApplicationData\r\n): Promise<JobApplicationResponse> => {\r\n const sanitizedName = sanitizeFreeText(data.name) || data.name.trim();\r\n const sanitizedEmail = sanitizeEmail(data.email) || data.email.trim();\r\n const sanitizedMobile = sanitizePhone(data.mobile) || data.mobile.trim();\r\n const formData = new FormData();\r\n\r\n // API expects capitalized field names\r\n formData.append(\"Name\", sanitizedName);\r\n formData.append(\"Email\", sanitizedEmail);\r\n formData.append(\"Phone\", sanitizedMobile); // API expects \"Phone\" not \"mobile\"\r\n formData.append(\"Resume\", data.resume, sanitizeFileName(data.resume.name));\r\n\r\n // New Fields\r\n // Numeric fields: Explicitly cast to Number to ensure safety against injection if types are bypassed\r\n if (data.experience !== undefined && data.experience !== null)\r\n formData.append(\"Experience\", Number(data.experience).toString());\r\n if (data.currency)\r\n formData.append(\"Currency\", sanitizeFreeText(data.currency));\r\n if (data.currentSalary !== undefined && data.currentSalary !== null)\r\n formData.append(\"CurrentSalary\", Number(data.currentSalary).toString());\r\n if (data.expectedSalary !== undefined && data.expectedSalary !== null)\r\n formData.append(\"ExpectedSalary\", Number(data.expectedSalary).toString());\r\n if (data.noticePeriod !== undefined && data.noticePeriod !== null)\r\n formData.append(\"NoticePeriodMonths\", Number(data.noticePeriod).toString());\r\n if (data.nationality)\r\n formData.append(\"Nationality\", sanitizeFreeText(data.nationality));\r\n if (data.coverLetter)\r\n formData.append(\"CoverLetter\", sanitizeContent(data.coverLetter));\r\n if (data.photo)\r\n formData.append(\"Photo\", data.photo, sanitizeFileName(data.photo.name));\r\n if (data.linkedInUrl)\r\n formData.append(\"LinkedInUrl\", sanitizeUrl(data.linkedInUrl));\r\n\r\n // Get UTM tags\r\n if (typeof window !== \"undefined\") {\r\n const params = new URLSearchParams(window.location.search);\r\n const utmKeys = [\r\n \"utm_source\",\r\n \"utm_medium\",\r\n \"utm_campaign\",\r\n \"utm_term\",\r\n \"utm_content\",\r\n ];\r\n\r\n utmKeys.forEach((key) => {\r\n if (params.has(key)) {\r\n formData.append(key, params.get(key) || \"\");\r\n }\r\n });\r\n }\r\n\r\n return await client\r\n .post<JobApplicationResponse>(\"candidates/apply\", formData)\r\n .then((res: any) => res.data);\r\n};\r\n\r\nexport const careerService = {\r\n getAllJobs,\r\n getJobBySlug,\r\n searchJobs,\r\n applyForJob,\r\n submitCandidateApplication,\r\n};\r\n","import { UserModifiableModel } from \"../models\";\r\n\r\nexport interface JobLocation {\r\n city: string;\r\n state: string;\r\n country: string;\r\n remote: boolean;\r\n hybrid: boolean;\r\n}\r\n\r\nexport interface JobSalary {\r\n min: number;\r\n max: number;\r\n currency: string;\r\n}\r\n\r\nexport interface JobRequirements {\r\n experience: string;\r\n education: string;\r\n requiredSkills: string[];\r\n preferredSkills: string[];\r\n}\r\n\r\nexport interface JobCategory {\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface HiringManager {\r\n id: string;\r\n name: string;\r\n email: string;\r\n}\r\n\r\nexport interface JobStats {\r\n views: number;\r\n applications: number;\r\n activeApplications: number;\r\n}\r\n\r\nexport class JobModel extends UserModifiableModel {\r\n title!: string;\r\n slug!: string;\r\n description!: string;\r\n category!: JobCategory;\r\n department!: string;\r\n employmentType!: string;\r\n location!: JobLocation;\r\n salary!: JobSalary;\r\n requirements!: JobRequirements;\r\n status!: string;\r\n numberOfPositions!: number;\r\n postedDate!: Date;\r\n closingDate!: Date;\r\n hiringManager!: HiringManager;\r\n stats!: JobStats;\r\n isActive!: boolean;\r\n tenantId!: string;\r\n}\r\n\r\nexport interface JobApplicationData {\r\n jobId?: string;\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number | null;\r\n currency: string;\r\n currentSalary?: number | null;\r\n expectedSalary?: number | null;\r\n noticePeriod?: number | null;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File | null;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface CandidateApplicationData {\r\n name: string;\r\n email: string;\r\n mobile: string;\r\n resume: File;\r\n experience?: number | null;\r\n currency: string;\r\n currentSalary?: number | null;\r\n expectedSalary?: number | null;\r\n noticePeriod?: number | null;\r\n nationality?: string;\r\n coverLetter?: string;\r\n photo?: File | null;\r\n linkedInUrl?: string;\r\n}\r\n\r\nexport interface JobApplicationResponse {\r\n success: boolean;\r\n message: string;\r\n applicationId?: string;\r\n}\r\n","import { blogService } from \"./blog\";\r\nimport { PostModel, BlogCategoryModel } from \"./blog/types\";\r\nimport { cartService } from \"./cart\";\r\nimport { Cart, NewLineItem, ShippingAddress, LineItem } from \"./cart/types\";\r\nimport { productService } from \"./products\";\r\nimport {\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Backward compatibility aliases\r\n ProductModel,\r\n ProductVariantModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n} from \"./products/types\";\r\nimport { formService } from \"./form\";\r\nimport { ContactUsModel } from \"./form/types\";\r\nimport { newsletterService } from \"./newsletter\";\r\nimport { NewsletterModel, SubscriptionResponse } from \"./newsletter/types\";\r\nimport userService from \"./user\";\r\nimport {\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n UserResult,\r\n RegisterResult,\r\n} from \"./user/types\";\r\nimport * as Utils from \"./utils\";\r\nimport { notificationService } from \"./utils/notification\";\r\nimport { PagingInfo, SearchResult } from \"./models\";\r\nimport { faqService } from \"./faq\";\r\nimport { FAQData } from \"./faq/types\";\r\nimport { albumService } from \"./albums\";\r\nimport { Album, AlbumResponse } from \"./albums/types\";\r\nimport { collectionService } from \"./collections\";\r\nimport {\r\n CollectionDetails,\r\n Collections,\r\n ProductDetails,\r\n} from \"./collections/types\";\r\nimport { careerService } from \"./career\";\r\nimport {\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n} from \"./career/types\";\r\nimport {\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n SecurityHeader,\r\n SecurityHeaderOptions,\r\n} from \"./utils/securityHeaders\";\r\n\r\nexport class PostEventModel {\r\n title?: string;\r\n start?: Date;\r\n end?: Date;\r\n resource?: any;\r\n}\r\n\r\nexport {\r\n blogService,\r\n PostModel,\r\n BlogCategoryModel,\r\n cartService,\r\n Cart,\r\n LineItem,\r\n NewLineItem,\r\n ShippingAddress,\r\n productService,\r\n // Product types - new interfaces\r\n ProductData,\r\n ProductVariant,\r\n ProductCategory,\r\n ProductSearchVariant,\r\n ProductSubCategory,\r\n ProductHierarchyResponse,\r\n CategoryProductResponse,\r\n ParentCategoryResponse,\r\n ParentCategorySlugsResponse,\r\n // Product types - backward compatibility\r\n ProductModel,\r\n ProductVariantModel,\r\n ProductCategoryModel,\r\n ProductSearchVariantModel,\r\n formService,\r\n ContactUsModel,\r\n newsletterService,\r\n NewsletterModel,\r\n SubscriptionResponse,\r\n notificationService,\r\n Utils,\r\n SearchResult,\r\n PagingInfo,\r\n faqService,\r\n FAQData,\r\n albumService,\r\n Album,\r\n AlbumResponse,\r\n collectionService,\r\n Collections,\r\n CollectionDetails,\r\n ProductDetails,\r\n userService,\r\n RegisterData,\r\n LoginData,\r\n RegisterResponse,\r\n LoginResponse,\r\n UserResult,\r\n RegisterResult,\r\n careerService,\r\n JobModel,\r\n JobApplicationData,\r\n CandidateApplicationData,\r\n JobApplicationResponse,\r\n getDefaultSecurityHeaders,\r\n getNextSecurityHeaders,\r\n SecurityHeader,\r\n SecurityHeaderOptions,\r\n};\r\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","StorageManager","isBrowser","window","createRandomId","Math","random","toString","substring","Date","getTime","getSessionId","this","sessionStorage","sessionId","getItem","setItem","getUserId","localStorage","userId","getLocalStorageValue","key","setLocalStorageValue","removeLocalStorageValue","removeItem","getSessionStorageValue","setSessionStorageValue","removeSessionStorageValue","AnalyticService","constructor","storageService","getFS","analyticService","storageManager","client","axios","create","baseURL","process","env","NEXT_PUBLIC_API_BASE_URL","timeout","RETRY_CONFIG","shouldRetry","error","_b","_a","config","metadata","skipRetry","response","status","interceptors","request","use","NEXT_PUBLIC_API_KEY","headers","token","Authorization","fs","Object","assign","startTime","now","retryCount","navigator","userAgent","originalRequest","delay","attempt","baseDelay","maxDelay","pow","min","calculateDelay","ms","setTimeout","retryError","isNetworkError","code","message","includes","isServerError","isClientError","_c","canRetry","blogService","getBlogCategories","get","res","data","getFeaturedPost","getBlogPosts","count","getBlogPostsForPage","page","getBlogPostsForCategory","category","getBlogPost","slug","getSimilarPosts","id","getAllPosts","incrementPostView","post","BaseModel","UserCreatedModel","UserModifiableModel","PagingInfo","currentPage","itemsPerPage","hasNextPage","totalItems","SearchResult","items","PostModel","showNotification","type","alert","notificationService","success","info","cartService","getCart","createCart","body","quantity","utmTags","params","URLSearchParams","location","search","forEach","utmKey","has","keys","length","getUTMTags","put","tags","updateCart","deleteCart","delete","setShippingAddress","getShippingCost","cartId","checkoutCart","checkOrderStatus","orderId","Cart","LineItem","NewLineItem","ShippingAddress","productService","getAllProductCategories","getFeaturedProductCategories","getProductCategory","getProducts","getProductsForPage","searchProducts","q","sort","searchProductsByCategorySlug","categorySlug","getAllProducts","getProduct","getSimilarProducts","searchProductsVariants","args_1","size","maxPrice","minPrice","query","undefined","append","String","getAllProductsByCategorySlug","getCategoriesByParentSlug","getProductsByHierarchy","getAllParentCategoriesSlugsWithChildren","formClient","baseSchema","name","yup","string","required","email","mobile","matches","formService","formId","payload","formUrl","updatedPayload","validationSchema","schemaFields","reduce","acc","object","shape","getValidationSchema","validate","abortEarly","ContactUsModel","newsletterClient","newsletterService","subscribeNewsletter","NewsletterModel","userService","userRegister","userLogin","getUserProfile","updateUserProfile","refreshUserToken","requestPasswordReset","confirmPasswordReset","newPassword","storageMock","clear","NamespacedLocalStorage","_makeKey","BrowserPersistence","globalThis","storage","KEY","getRawItem","item","ttl","timeStored","JSON","parse","stringify","defaultContentSecurityPolicy","defaultHeaders","join","getDefaultSecurityHeaders","options","extendCsp","omitHeaders","additionalHeaders","filter","header","map","cspIndex","findIndex","buildContentSecurityPolicy","mergedAdditionalHeaders","getNextSecurityHeaders","source","securityHeadersConfig","faqService","getFaq","albumService","getAllAlbums","getAlbumById","collectionService","getAllCollections","getCollectionsDetails","sanitizeFreeText","replace","trim","sanitizeEmail","sanitizePhone","sanitizeFileName","sanitizeContent","sanitizeUrl","careerService","getAllJobs","Array","isArray","console","warn","getJobBySlug","searchJobs","queryParams","employmentType","queryString","url","pagingInfo","applyForJob","sanitizedName","sanitizedEmail","sanitizedMobile","formData","FormData","jobId","resume","experience","Number","currency","currentSalary","expectedSalary","noticePeriod","nationality","coverLetter","photo","linkedInUrl","submitCandidateApplication","JobModel","PostEventModel"],"mappings":"2CAkHO,SAASA,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAQ,CAAG,MAAOG,GAAKL,EAAOK,GAAO,CAC3F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAU,CAAC,MAAOG,GAAKL,EAAOK,GAAO,CAC9F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAO,KAIhBO,KAAKR,EAAWK,EAAY,CAC9GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OACtE,GACA,CAqMkD,mBAApBO,iBAAiCA,sBC/TlDC,EAEH,SAAAC,GACN,MAAyB,oBAAXC,MACf,CAGO,cAAAC,GACN,OACEC,KAAKC,SAASC,SAAS,IAAIC,UAAU,IACrC,IAAIC,MAAOC,UAAUH,SAAS,GAEjC,CAGD,YAAAI,GACE,GAAIC,KAAKV,aAAeC,OAAOU,eAAgB,CAC7C,IAAIC,EAAYD,eAAeE,QAAQ,UAKvC,OAJKD,IACHA,EAAYF,KAAKR,iBACjBS,eAAeG,QAAQ,SAAUF,IAE5BA,CACR,CACD,OAAO,IACR,CAGD,SAAAG,GACE,GAAIL,KAAKV,aAAeC,OAAOe,aAAc,CAC3C,IAAIC,EAASD,aAAaH,QAAQ,UAKlC,OAJKI,IACHA,EAASP,KAAKR,iBACdc,aAAaF,QAAQ,SAAUG,IAE1BA,CACR,CACD,OAAO,IACR,CAGD,oBAAAC,CAAqBC,GACnB,OAAIT,KAAKV,aAAeC,OAAOe,aACtBA,aAAaH,QAAQM,GAEvB,IACR,CAGD,oBAAAC,CAAqBD,EAAa9B,GAC5BqB,KAAKV,aAAeC,OAAOe,cAC7BA,aAAaF,QAAQK,EAAK9B,EAE7B,CAGD,uBAAAgC,CAAwBF,GAClBT,KAAKV,aAAeC,OAAOe,cAC7BA,aAAaM,WAAWH,EAE3B,CAGD,sBAAAI,CAAuBJ,GACrB,OAAIT,KAAKV,aAAeC,OAAOU,eACtBA,eAAeE,QAAQM,GAEzB,IACR,CAGD,sBAAAK,CAAuBL,EAAa9B,GAC9BqB,KAAKV,aAAeC,OAAOU,gBAC7BA,eAAeG,QAAQK,EAAK9B,EAE/B,CAGD,yBAAAoC,CAA0BN,GACpBT,KAAKV,aAAeC,OAAOU,gBAC7BA,eAAeW,WAAWH,EAE7B,QChFUO,EAGX,WAAAC,GACEjB,KAAKkB,eAAiB,IAAI7B,CAC3B,CAED,KAAA8B,GACE,MAAMZ,EAASP,KAAKkB,eAAeb,YAC7BH,EAAYF,KAAKkB,eAAenB,eAEtC,OAAIQ,GAAUL,EACL,GAAGK,KAAUL,IAGf,IACR,ECcH,MAAMkB,EAAkB,IAAIJ,EACtBK,EAAiB,IAAIhC,EAErBiC,EAASC,EAAMC,OAAO,CAC1BC,QACEC,QAAQC,IAAIC,0BACZ,uDACFC,QAAS,MAILC,EACK,EADLA,EAEQ,IAFRA,EAGM,IAgBNC,EAAeC,YAEnB,GAA0B,QAAtBC,UAAAC,EAAAF,EAAMG,6BAAQC,gBAAQ,IAAAH,OAAA,EAAAA,EAAEI,UAC1B,OAAO,EAIT,IAAKL,EAAMM,SACT,OAAO,EAGT,MAAMC,EAASP,EAAMM,SAASC,OAC9B,OACEA,GAAU,KACC,MAAXA,GACW,MAAXA,GACW,MAAXA,GACW,MAAXA,CACA,EAcJjB,EAAOkB,aAAaC,QAAQC,KACnBP,GAAUjE,OAAA,OAAA,OAAA,GAAA,kBACf,IAEMwD,QAAQC,IAAIgB,sBACdR,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQ,WAAalB,QAAQC,IAAIgB,qBAI1C,MAAME,EAAQxB,EAAeb,qBAAqB,aAC9CqC,IACFV,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQE,cAAgB,UAAUD,KAI3C,MAAME,EAAK3B,EAAgBD,QAqB3B,OApBI4B,IACFZ,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAY,GAAIG,GAIzBZ,EAAOC,SAAQY,OAAAC,OAAAD,OAAAC,OAAA,GACVd,EAAOC,UAAQ,CAClBc,UAAWrD,KAAKsD,MAChBC,YAA2B,QAAflB,EAAAC,EAAOC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEkB,aAAc,IAIvB,oBAAX7D,SACT4C,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QACL,cACE,uBAAuBS,UAAUC,aAGhCnB,CACR,CAAC,MAAOH,GACP,OAAOG,CACR,CACH,MACCH,GACQzD,QAAQE,OAAOuD,KAK1BV,EAAOkB,aAAaF,SAASI,KAC1BJ,IAEKA,EAASH,OAAOC,WAClBE,EAASH,OAAOC,SAASgB,WAAa,GAEjCd,KAEFN,GAAS9D,OAAA,OAAA,OAAA,GAAA,sBACd,MAAMqF,EAAkBvB,EAAMG,OAG9B,IAAKoB,EACH,OAAOhF,QAAQE,OAAOuD,GAInBuB,EAAgBnB,WACnBmB,EAAgBnB,SAAW,CAAEgB,WAAY,IAG3C,MAAMA,EAAaG,EAAgBnB,SAASgB,YAAc,EAK1D,GAFiBA,EAAatB,GAAwBC,EAAYC,GAEpD,CAEZuB,EAAgBnB,SAASgB,WAAaA,EAAa,EAGnD,MAAMI,EAzHW,EACrBC,EACAC,EACAC,KAEA,MAAMH,EAAQE,EAAYjE,KAAKmE,IAAI,EAAGH,EAAU,GAChD,OAAOhE,KAAKoE,IAAIL,EAAOG,EAAS,EAmHdG,CACZP,EAAgBnB,SAASgB,WACzBtB,EACAA,SA/HOiC,EAmIGP,EAlIhB,IAAIjF,SAASC,GAAYwF,WAAWxF,EAASuF,MAoIzC,IAEE,aAAazC,EAAOiC,EACrB,CAAC,MAAOU,GAEPjC,EAAQiC,CACT,CACF,CA5IS,IAACF,EAsJX,OAPA/B,EAAMkC,eA9Ga,CAAClC,UACtB,OACGA,EAAMM,WACS,kBAAfN,EAAMmC,MACU,gBAAfnC,EAAMmC,MACS,iBAAfnC,EAAMmC,OACS,QAAfjC,EAAAF,EAAMoC,eAAS,IAAAlC,OAAA,EAAAA,EAAAmC,SAAS,kBAC1B,EAuGuBH,CAAelC,GACtCA,EAAMsC,eAAgC,QAAhBpC,EAAAF,EAAMM,gBAAU,IAAAJ,OAAA,EAAAA,EAAAK,SAAU,IAChDP,EAAMuC,eACY,UAAhBvC,EAAMM,gBAAU,IAAAL,OAAA,EAAAA,EAAAM,SAAU,cAAOiC,EAAAxC,EAAMM,+BAAUC,QAAS,IAC5DP,EAAMoB,WAAaA,EACnBpB,EAAMyC,SAAW1C,EAAYC,IAAUoB,EAAatB,EAE7CvD,QAAQE,OAAOuD,EACxB,MCrMF,MAgDa0C,EAAc,CACzBC,kBAjDwB,IAAWzG,OAAA,OAAA,OAAA,GAAA,YACnC,aAAaoD,EACVsD,IAAyB,oBACzB1F,MAAM2F,GAAQA,EAAIC,MACvB,IA8CEC,gBA5CsB,IAAW7G,OAAA,OAAA,OAAA,GAAA,YACjC,aAAaoD,EAAOsD,IAAe,kBAAkB1F,MAAM2F,GAAQA,EAAIC,MACzE,IA2CEE,aAzC0BC,GAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC3C,aAAaoD,EACVsD,IAA6B,cAAgBK,GAC7C/F,MAAM2F,GAAQA,EAAIC,MACvB,IAsCEI,oBApC0B,CAAOD,EAAeE,IAAgBjH,OAAA,OAAA,OAAA,GAAA,YAChE,aAAaoD,EACVsD,IAA6B,cAAgBK,EAAQ,SAAWE,GAChEjG,MAAM2F,GAAQA,EAAIC,MACvB,IAiCEM,wBA/B8B,CAAOH,EAAeI,IAAoBnH,OAAA,OAAA,OAAA,GAAA,YACxE,aAAaoD,EACVsD,IACC,cAAgBK,EAAQ,aAAeI,GAExCnG,MAAM2F,GAAQA,EAAIC,MACvB,IA0BEQ,YAxByBC,GAAuCrH,OAAA,OAAA,OAAA,GAAA,YAChE,aAAaoD,EAAOsD,IAAe,SAAWW,GAAMrG,MAAM2F,GAAQA,EAAIC,MACxE,IAuBEU,gBAjBsB,CAAOC,EAAYR,IAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC1D,aAAaoD,EACVsD,IAAiB,SAAWa,EAAK,kBAAoBR,GACrD/F,MAAM2F,GAAQA,EAAIC,MACvB,IAcEY,YAZkB,IAAWxH,OAAA,OAAA,OAAA,GAAA,YAC7B,aAAaoD,EAAOsD,IAAiB,aAAa1F,MAAM2F,GAAQA,EAAIC,MACtE,IAWEa,kBAvB+BF,GAAcvH,OAAA,OAAA,OAAA,GAAA,YAC7C,aAAaoD,EAAOsE,KAAK,SAASH,cAAevG,MAAM2F,GAAQA,EAAIC,MACrE,WCxCae,GAMP,MAAOC,UAAyBD,GAIhC,MAAOE,UAA4BD,SAO5BE,EAMX,WAAA/E,CAAYgF,EAAqBC,EAAsBC,GACrDnG,KAAKiG,YAAcA,EACnBjG,KAAKkG,aAAeA,EACpBlG,KAAKmG,YAAcA,EACnBnG,KAAKoG,WAAa,CACnB,QAGUC,EAAb,WAAApF,GACSjB,KAAKsG,MAAa,EAE1B,EC/BK,MAAOC,UAAkBR,GCFxB,MAAMS,EAAmB,CAC9BpC,EACAqC,EAAqC,UAGxB,UAATA,EACFC,MAAM,UAAUtC,KACE,YAATqC,EACTC,MAAM,YAAYtC,KAElBsC,MAAMtC,EACP,EAIUuC,EAAsB,CACjCC,QAAUxC,GAAoBoC,EAAiBpC,EAAS,WACxDpC,MAAQoC,GAAoBoC,EAAiBpC,EAAS,SACtDyC,KAAOzC,GAAoBoC,EAAiBpC,EAAS,SCiE1C0C,EAAc,CACzBC,QA7DqBtB,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACnC,aAAaoD,EAAOsD,IAAU,SAASa,KAAMvG,MAAM2F,GAAQA,EAAIC,MACjE,IA4DEkC,WA1DwBC,GAAqB/I,OAAA,OAAA,OAAA,GAAA,YAE7C,GAAI+I,EAAKC,SAAW,EAElB,YADAP,EAAoB3E,MAAM,qCAK5B,MAAMmF,EA/BW,MACjB,MAAMC,EAAS,IAAIC,gBAAgB9H,OAAO+H,SAASC,QAC7CJ,EAAkC,CAAA,EAcxC,MAZA,CACE,aACA,aACA,eACA,WACA,eACAK,SAASC,IACLL,EAAOM,IAAID,KACbN,EAAQM,GAAUL,EAAOxC,IAAI6C,IAAW,GACzC,IAGIzE,OAAO2E,KAAKR,GAASS,OAAS,EAAIT,EAAU,EAAE,EAerCU,GAEhB,aAAavG,EAAOsE,KAAW,QAASqB,GAAM/H,MAAM2F,IAC9CA,EAAIC,KAAKW,IACXnE,EAAOwG,IAAI,SAASjD,EAAIC,KAAKW,UAAW,CACtCsC,KAAMZ,IAGHtC,EAAIC,OAEf,IAyCEkD,WAvCiB,CAAOvC,EAAYwB,IAAqB/I,OAAA,OAAA,OAAA,GAAA,YAMzD,OAJI+I,EAAKC,SAAW,GAClBP,EAAoB3E,MAAM,2CAGfV,EACVwG,IAAU,SAASrC,eAAiBwB,GACpC/H,MAAM2F,GAAQA,EAAIC,MACvB,IA+BEmD,WA7BwBxC,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACtC,aAAaoD,EAAO4G,OAAa,SAASzC,KAAMvG,MAAM2F,GAAQA,EAAIC,MACpE,IA4BEqD,mBA1ByB,CAAO1C,EAAYwB,IAAyB/I,OAAA,OAAA,OAAA,GAAA,YACrE,aAAaoD,EACVwG,IAAU,SAASrC,qBAAuBwB,GAC1C/H,MAAM2F,GAAQA,EAAIC,MACvB,IAuBEsD,gBArBsB,CACtBC,EACApB,IACE/I,OAAA,OAAA,OAAA,GAAA,YACF,aAAaoD,EAAOsE,KAAK,YAAYyC,IAAUpB,GAAM/H,MAAM2F,GAAQA,EAAIC,MACzE,IAiBEwD,aAf0BD,GAAkBnK,OAAA,OAAA,OAAA,GAAA,YAC5C,aAAaoD,EAAOsE,KAAK,SAASyC,cAAmBnJ,MAAM2F,GAAQA,EAAIC,MACzE,IAcEyD,iBAZ8BC,GAAmBtK,OAAA,OAAA,OAAA,GAAA,YACjD,aAAaoD,EAAOwG,IAAI,UAAUU,YAAkBtJ,MAAM2F,GAAQA,EAAIC,MACxE,KChFM,MAAO2D,UAAa1C,SAeb2C,SAcAC,SAMAC,GClBb,MA0JaC,EAAiB,CAC5BC,wBA3J8B,IAAW5K,OAAA,OAAA,OAAA,GAAA,YACzC,aAAaoD,EACVsD,IAA4B,yBAC5B1F,MAAM2F,GAAQA,EAAIC,MACvB,IAwJEiE,6BAtJmC,IAAW7K,OAAA,OAAA,OAAA,GAAA,YAC9C,aAAaoD,EACVsD,IAA4B,kCAC5B1F,MAAM2F,GAAQA,EAAIC,MACvB,IAmJEkE,mBAjJgCzD,GAAuCrH,OAAA,OAAA,OAAA,GAAA,YACvE,aAAaoD,EACVsD,IAA0B,qBAAuBW,GACjDrG,MAAM2F,GAAQA,EAAIC,MACvB,IA8IEmE,YAtIyBhE,GAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC1C,aAAaoD,EACVsD,IAAgC,iBAAmBK,GACnD/F,MAAM2F,GAAQA,EAAIC,MACvB,IAmIEoE,mBAjIyB,CAAOjE,EAAeE,IAAgBjH,OAAA,OAAA,OAAA,GAAA,YAC/D,aAAaoD,EACVsD,IAAgC,iBAAmBK,EAAQ,SAAWE,GACtEjG,MAAM2F,GAAQA,EAAIC,MACvB,IA8HEqE,eA5HqB,CACrBC,EACA/D,EACAJ,EACAE,EACAkE,IACEnL,OAAA,OAAA,OAAA,GAAA,YACF,aAAaoD,EACVsD,IACC,cACEwE,EACA,aACA/D,EACA,SACAJ,EACA,SACAE,EACA,SACAkE,GAEHnK,MAAM2F,GAAQA,EAAIC,MACvB,IAwGEwE,6BAtGmC,CACnCC,EACAtE,EACAE,EACAkE,IACEnL,OAAA,OAAA,OAAA,GAAA,YACF,aAAaoD,EACVsD,IACC,yBAEE2E,EACA,SACAtE,EACA,SACAE,EACA,SACAkE,GAEHnK,MAAM2F,GAAQA,EAAIC,MACvB,IAoFE0E,eAhJqB,IAAWtL,OAAA,OAAA,OAAA,GAAA,YAChC,aAAaoD,EACVsD,IAAoB,gBACpB1F,MAAM2F,GAAQA,EAAIC,MACvB,IA6IE2E,WAnDwBlE,GAAuCrH,OAAA,OAAA,OAAA,GAAA,YAC/D,aAAaoD,EACVsD,IAAkB,YAAcW,GAChCrG,MAAM2F,GAAQA,EAAIC,MACvB,IAgDE4E,mBA9CyB,CAAOjE,EAAYR,IAAiB/G,OAAA,OAAA,OAAA,GAAA,YAC7D,aAAaoD,EACVsD,IAAoB,YAAca,EAAK,kBAAoBR,GAC3D/F,MAAM2F,GAAQA,EAAIC,MACvB,IA2CE6E,uBArF6B,IAAAC,IAYrB1L,OAAA,EAAA,IAAA0L,QAAA,GAAA,WAZ4BzE,KACpCA,EAAI0E,KACJA,EAAIC,SACJA,EAAQC,SACRA,EAAQC,MACRA,GAOE,IACF,IACE,MAAM5C,EAAS,IAAIC,qBAEN4C,IAAT9E,GAAoBiC,EAAO8C,OAAO,OAAQC,OAAOhF,SACxC8E,IAATJ,GAAoBzC,EAAO8C,OAAO,OAAQC,OAAON,SACpCI,IAAbH,GAAwB1C,EAAO8C,OAAO,WAAYC,OAAOL,SAC5CG,IAAbF,GAAwB3C,EAAO8C,OAAO,WAAYC,OAAOJ,IACzDC,GAAO5C,EAAO8C,OAAO,QAASF,GAMlC,aAJuB1I,EAAOsD,IAC5B,qBAAqBwC,EAAOzH,eAGdmF,IACjB,CAAC,MAAO9C,GACP,MAAMA,CACP,CACH,IAwDEoI,6BAzC0C7E,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YAC1D,aAAaoD,EACVsD,IAA6B,qBAAuBW,EAAO,aAC3DrG,MAAM2F,GAAQA,EAAIC,MACvB,IAsCEuF,0BAnCuC9E,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YACvD,aAAaoD,EACVsD,IAA4B,qBAAuBW,EAAO,kBAC1DrG,MAAM2F,GAAQA,EAAIC,MACvB,IAgCEwF,uBA7BoC/E,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YACpD,aAAaoD,EACVsD,IACC,qBAAuBW,EAAO,uBAE/BrG,MAAM2F,GAAQA,EAAIC,MACvB,IAwBEyF,wCArB8C,IAAWrM,OAAA,OAAA,OAAA,GAAA,YACzD,aAAaoD,EACVsD,IAAmC,wCACnC1F,MAAM2F,GAAQA,EAAIC,MACvB,KC5IM1D,EAAkB,IAAIJ,EAEtBwJ,EAAajJ,EAAMC,OAAO,CAC9BC,QAAS,oDACTI,QAAS,MAILC,EACK,EADLA,EAEQ,IAFRA,EAGM,IAgBNC,EAAeC,YAEnB,GAA0B,QAAtBC,UAAAC,EAAAF,EAAMG,6BAAQC,gBAAQ,IAAAH,OAAA,EAAAA,EAAEI,UAC1B,OAAO,EAIT,IAAKL,EAAMM,SACT,OAAO,EAGT,MAAMC,EAASP,EAAMM,SAASC,OAC9B,OACEA,GAAU,KACC,MAAXA,GACW,MAAXA,GACW,MAAXA,GACW,MAAXA,CACA,EAcJiI,EAAWhI,aAAaC,QAAQC,KACvBP,GAAUjE,OAAA,OAAA,OAAA,GAAA,kBACf,IAEMwD,QAAQC,IAAIgB,sBACdR,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQ,WAAalB,QAAQC,IAAIgB,qBAI1C,MAAMI,EAAK3B,EAAgBD,QAqB3B,OApBI4B,IACFZ,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAY,GAAIG,GAIzBZ,EAAOC,SAAQY,OAAAC,OAAAD,OAAAC,OAAA,GACVd,EAAOC,UAAQ,CAClBc,UAAWrD,KAAKsD,MAChBC,YAA2B,QAAflB,EAAAC,EAAOC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEkB,aAAc,IAIvB,oBAAX7D,SACT4C,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QACL,cACE,uBAAuBS,UAAUC,aAGhCnB,CACR,CAAC,MAAOH,GACP,OAAOG,CACR,CACH,MACCH,GACQzD,QAAQE,OAAOuD,KAK1BwI,EAAWhI,aAAaF,SAASI,KAC9BJ,IAEKA,EAASH,OAAOC,WAClBE,EAASH,OAAOC,SAASgB,WAAa,GAEjCd,KAEFN,GAAS9D,OAAA,OAAA,OAAA,GAAA,sBACd,MAAMqF,EAAkBvB,EAAMG,OAG9B,IAAKoB,EACH,OAAOhF,QAAQE,OAAOuD,GAInBuB,EAAgBnB,WACnBmB,EAAgBnB,SAAW,CAAEgB,WAAY,IAG3C,MAAMA,EAAaG,EAAgBnB,SAASgB,YAAc,EAK1D,GAFiBA,EAAatB,GAAwBC,EAAYC,GAEpD,CAEZuB,EAAgBnB,SAASgB,WAAaA,EAAa,EAGnD,MAAMI,EAlHW,EACrBC,EACAC,EACAC,KAEA,MAAMH,EAAQE,EAAYjE,KAAKmE,IAAI,EAAGH,EAAU,GAChD,OAAOhE,KAAKoE,IAAIL,EAAOG,EAAS,EA4GdG,CACZP,EAAgBnB,SAASgB,WACzBtB,EACAA,SAxHOiC,EA4HGP,EA3HhB,IAAIjF,SAASC,GAAYwF,WAAWxF,EAASuF,MA6HzC,IAEE,aAAayG,EAAWjH,EACzB,CAAC,MAAOU,GAEPjC,EAAQiC,CACT,CACF,CArIS,IAACF,EA+IX,OAPA/B,EAAMkC,eAvGa,CAAClC,UACtB,OACGA,EAAMM,WACS,kBAAfN,EAAMmC,MACU,gBAAfnC,EAAMmC,MACS,iBAAfnC,EAAMmC,OACS,QAAfjC,EAAAF,EAAMoC,eAAS,IAAAlC,OAAA,EAAAA,EAAAmC,SAAS,kBAC1B,EAgGuBH,CAAelC,GACtCA,EAAMsC,eAAgC,QAAhBpC,EAAAF,EAAMM,gBAAU,IAAAJ,OAAA,EAAAA,EAAAK,SAAU,IAChDP,EAAMuC,eACY,UAAhBvC,EAAMM,gBAAU,IAAAL,OAAA,EAAAA,EAAAM,SAAU,cAAOiC,EAAAxC,EAAMM,+BAAUC,QAAS,IAC5DP,EAAMoB,WAAaA,EACnBpB,EAAMyC,SAAW1C,EAAYC,IAAUoB,EAAatB,EAE7CvD,QAAQE,OAAOuD,EACxB,MC3LF,MAMMyI,EAAwD,CAC5DC,KAAMC,EAAIC,SAASC,SAAS,0BAA0BhH,IAAI,GAC1DiH,MAAOH,EACJC,SACAC,SAAS,2BACTC,MAAM,8BACTC,OAAQJ,EACLC,SACAC,SAAS,mCACTG,QAbD,0GAagC,sCAClC5G,QAASuG,EAAIC,SAASC,SAAS,6BAA6BhH,IAAI,IAyDrDoH,EAAc,CACzBrF,KAxBW,CACXsF,EACAC,IACoBjN,OAAA,OAAA,OAAA,GAAA,YACpB,MAAMkN,EAAU,UAAYF,EAGtB/D,EA1BW,MACjB,MAAMC,EAAS,IAAIC,gBAAgB9H,OAAO+H,SAASC,QAC7CJ,EAAkC,CAAA,EAcxC,MAZA,CACE,aACA,aACA,eACA,WACA,eACAK,SAASC,IACLL,EAAOM,IAAID,KACbN,EAAQM,GAAUL,EAAOxC,IAAI6C,IAAW,GACzC,IAGIzE,OAAO2E,KAAKR,GAASS,OAAS,EAAIT,EAAU,EAAE,EAUrCU,GAGVwD,EACJrI,OAAO2E,KAAKR,GAASS,OAAS,iCAASuD,GAAYhE,GAAYgE,EAG3DG,EA5CoB,CAACH,IAC3B,MAAMI,EAAevI,OAAO2E,KAAKwD,GAASK,QAAO,CAACC,EAAKhL,KACjDgK,EAAWhK,KACbgL,EAAIhL,GAAOgK,EAAWhK,IAEjBgL,IACN,CAAsC,GACzC,OAAOd,EAAIe,SAASC,MAAMJ,EAAa,EAqCdK,CAAoBT,GAM7C,aAHMG,EAAiBO,SAASV,EAAS,CAAEW,YAAY,UAG1CtB,EAAW5E,KAAKwF,EAASC,GAAgBnM,MAAM2F,GAAQA,EAAIC,MAC1E,WCxEaiH,GAckBpB,EAAIe,SAASC,MAAM,CAChDjB,KAAMC,EAAIC,SAASC,SAAS,0BAA0BhH,IAAI,GAC1DiH,MAAOH,EACJC,SACAC,SAAS,2BACTC,MAAM,8BACTC,OAAQJ,EACLC,SACAC,SAAS,mCACTG,QAbD,0GAagC,sCAClC5G,QAASuG,EAAIC,SAASC,SAAS,6BAA6BhH,IAAI,KCQlE,MAAMzC,EAAkB,IAAIJ,EAGtBgL,EAAmBzK,EAAMC,OAAO,CACpCC,QAAS,0DACTI,QAAS,MAILC,EACK,EADLA,EAEQ,IAFRA,EAGM,IAgBNC,EAAeC,YAEnB,GAA0B,QAAtBC,UAAAC,EAAAF,EAAMG,6BAAQC,gBAAQ,IAAAH,OAAA,EAAAA,EAAEI,UAC1B,OAAO,EAIT,IAAKL,EAAMM,SACT,OAAO,EAGT,MAAMC,EAASP,EAAMM,SAASC,OAC9B,OACEA,GAAU,KACC,MAAXA,GACW,MAAXA,GACW,MAAXA,GACW,MAAXA,CACA,EAcJyJ,EAAiBxJ,aAAaC,QAAQC,KAC7BP,GAAUjE,OAAA,OAAA,OAAA,GAAA,kBACf,IAEMwD,QAAQC,IAAIgB,sBACdR,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAQ,WAAalB,QAAQC,IAAIgB,qBAI1C,MAAMI,EAAK3B,EAAgBD,QAa3B,OAZI4B,IACFZ,EAAOS,QAAUT,EAAOS,SAAW,CAAA,EACnCT,EAAOS,QAAY,GAAIG,GAIzBZ,EAAOC,SAAQY,OAAAC,OAAAD,OAAAC,OAAA,GACVd,EAAOC,UAAQ,CAClBc,UAAWrD,KAAKsD,MAChBC,YAA2B,QAAflB,EAAAC,EAAOC,gBAAQ,IAAAF,OAAA,EAAAA,EAAEkB,aAAc,IAGtCjB,CACR,CAAC,MAAOH,GACP,OAAOG,CACR,CACH,MACCH,GACQzD,QAAQE,OAAOuD,KAK1BgK,EAAiBxJ,aAAaF,SAASI,KACpCJ,IAEKA,EAASH,OAAOC,WAClBE,EAASH,OAAOC,SAASgB,WAAa,GAEjCd,KAEFN,GAAS9D,OAAA,OAAA,OAAA,GAAA,sBACd,MAAMqF,EAAkBvB,EAAMG,OAG9B,IAAKoB,EACH,OAAOhF,QAAQE,OAAOuD,GAInBuB,EAAgBnB,WACnBmB,EAAgBnB,SAAW,CAAEgB,WAAY,IAG3C,MAAMA,EAAaG,EAAgBnB,SAASgB,YAAc,EAK1D,GAFiBA,EAAatB,GAAwBC,EAAYC,GAEpD,CAEZuB,EAAgBnB,SAASgB,WAAaA,EAAa,EAGnD,MAAMI,EA1GW,EACrBC,EACAC,EACAC,KAEA,MAAMH,EAAQE,EAAYjE,KAAKmE,IAAI,EAAGH,EAAU,GAChD,OAAOhE,KAAKoE,IAAIL,EAAOG,EAAS,EAoGdG,CACZP,EAAgBnB,SAASgB,WACzBtB,EACAA,SAhHOiC,EAoHGP,EAnHhB,IAAIjF,SAASC,GAAYwF,WAAWxF,EAASuF,MAqHzC,IAEE,aAAaiI,EAAiBzI,EAC/B,CAAC,MAAOU,GAEPjC,EAAQiC,CACT,CACF,CA7HS,IAACF,EAuIX,OAPA/B,EAAMkC,eA/Fa,CAAClC,UACtB,OACGA,EAAMM,WACS,kBAAfN,EAAMmC,MACU,gBAAfnC,EAAMmC,MACS,iBAAfnC,EAAMmC,OACS,QAAfjC,EAAAF,EAAMoC,eAAS,IAAAlC,OAAA,EAAAA,EAAAmC,SAAS,kBAC1B,EAwFuBH,CAAelC,GACtCA,EAAMsC,eAAgC,QAAhBpC,EAAAF,EAAMM,gBAAU,IAAAJ,OAAA,EAAAA,EAAAK,SAAU,IAChDP,EAAMuC,eACY,UAAhBvC,EAAMM,gBAAU,IAAAL,OAAA,EAAAA,EAAAM,SAAU,cAAOiC,EAAAxC,EAAMM,+BAAUC,QAAS,IAC5DP,EAAMoB,WAAaA,EACnBpB,EAAMyC,SAAW1C,EAAYC,IAAUoB,EAAatB,EAE7CvD,QAAQE,OAAOuD,EACxB,MAGF,MAUaiK,EAAoB,CAC/BC,oBAVApB,GACiC5M,OAAA,OAAA,OAAA,GAAA,YAKjC,aAJuB8N,EAAiBpG,KACtC,2BACA,CAAEkF,WAEYhG,IAClB,WCrMaqH,GCSN,MA4CDC,EAAc,CAClBC,aA5CAvH,GAC6B5G,OAAA,OAAA,OAAA,GAAA,YAC7B,OAAOoD,EAAOsE,KAAK,iBAAkBd,GAAM5F,MAAM2F,GAAQA,EAAIC,MAC/D,IA0CEwH,UAvC8BxH,GAA2C5G,OAAA,OAAA,OAAA,GAAA,YACzE,OAAOoD,EAAOsE,KAAK,cAAed,GAAM5F,MAAM2F,GAAQA,EAAIC,MAC5D,IAsCEyH,eAnC4B,IAAyBrO,OAAA,OAAA,OAAA,GAAA,YACrD,OAAOoD,EAAOsD,IAAI,iBAAiB1F,MAAM2F,GAAQA,EAAIC,MACvD,IAkCE0H,kBA/BsC1H,GAA2B5G,OAAA,OAAA,OAAA,GAAA,YACjE,OAAOoD,EAAOwG,IAAI,gBAAiBhD,GAAM5F,MAAM2F,GAAQA,EAAIC,MAC7D,IA8BE2H,iBA3B8B,IAAyBvO,OAAA,OAAA,OAAA,GAAA,YACvD,OAAOoD,EAAOsE,KAAK,uBAAuB1G,MAAM2F,GAAQA,EAAIC,MAC9D,IA0BE4H,qBAvByC5B,GAA+B5M,OAAA,OAAA,OAAA,GAAA,YACxE,OAAOoD,EACJsE,KAAK,+BAAgC,CAAEkF,UACvC5L,MAAM2F,GAAQA,EAAIC,MACvB,IAoBE6H,qBAjBkC,CAClC9J,EACA+J,IACgB1O,OAAA,OAAA,OAAA,GAAA,YAChB,OAAOoD,EACJsE,KAAK,+BAAgC,CAAE/C,QAAO+J,gBAC9C1N,MAAM2F,GAAQA,EAAIC,MACvB,KC9CM+H,EAAc,CAClBjF,OAAQ,EACR,OAAAzH,GAAY,EACZ,OAAAC,GAAY,EACZ,UAAAQ,GAAe,EACf,KAAAkM,GAAU,GAGZ,MAAMC,EAGJ,WAAA9L,CAAYX,EAAmBG,GAC7BT,KAAKM,aAAeA,EACpBN,KAAKS,IAAMA,CACZ,CACD,QAAAuM,CAASvM,GACP,MAAO,GAAGT,KAAKS,QAAQA,GACxB,CACD,OAAAN,CAAQuK,GACN,OAAO1K,KAAKM,aAAaH,QAAQH,KAAKgN,SAAStC,GAChD,CACD,OAAAtK,CAAQsK,EAAW/L,GACjB,OAAOqB,KAAKM,aAAaF,QAAQJ,KAAKgN,SAAStC,GAAO/L,EACvD,CACD,UAAAiC,CAAW8J,GACT,OAAO1K,KAAKM,aAAaM,WAAWZ,KAAKgN,SAAStC,GACnD,EAGH,MAAqBuC,EAGnB,WAAAhM,CAAYX,EAAe4M,WAAW5M,cAAgBuM,GACpD7M,KAAKmN,QAAU,IAAIJ,EACjBzM,EACA2M,EAAmBG,IAEtB,CACD,UAAAC,CAAW3C,GACT,OAAO1K,KAAKmN,QAAQhN,QAAQuK,EAC7B,CACD,OAAAvK,CAAQuK,GACN,MAAMvH,EAAMtD,KAAKsD,MACXmK,EAAOtN,KAAKmN,QAAQhN,QAAQuK,GAClC,IAAK4C,EACH,OAEF,MAAM3O,MAAEA,EAAK4O,IAAEA,EAAGC,WAAEA,GAAeC,KAAKC,MAAMJ,GAE9C,KAAIC,GAAOpK,EAAMqK,EAAmB,IAAND,GAK9B,OAAOE,KAAKC,MAAM/O,GAJhBqB,KAAKmN,QAAQvM,WAAW8J,EAK3B,CACD,OAAAtK,CAAQsK,EAAc/L,EAAY4O,EAAW,MAC3C,MAAMC,EAAa3N,KAAKsD,MACxBnD,KAAKmN,QAAQ/M,QACXsK,EACA+C,KAAKE,UAAU,CACbhP,MAAO8O,KAAKE,UAAUhP,GACtB6O,aACAD,QAGL,CACD,UAAA3M,CAAW8J,GACT1K,KAAKmN,QAAQvM,WAAW8J,EACzB,EAvCMuC,EAAGG,IAAG,yBC7Bf,MAAMQ,EAAyC,CAC7C,qBACA,qEACA,gEACA,qNACA,4CACA,sHACA,yBACA,oBACA,mBAGIC,EAAmC,CACvC,CACEpN,IAAK,0BACL9B,MAAOiP,EAA6BE,KAAK,OAE3C,CACErN,IAAK,yBACL9B,MAAO,WAET,CACE8B,IAAK,kBACL9B,MAAO,oCAcEoP,EAA4B,CACvCC,EAAiC,MAEjC,MAAMC,UAAEA,EAAY,GAAEC,YAAEA,EAAc,GAAEC,kBAAEA,EAAoB,IAAOH,EAE/DpL,EAAUiL,EACbO,QAAQC,IAAYH,EAAY7J,SAASgK,EAAO5N,OAChD6N,KAAKD,GAAiBrL,OAAAC,OAAA,GAAAoL,KAEnBE,EAAW3L,EAAQ4L,WAAWH,GAA0B,4BAAfA,EAAO5N,OAEpC,IAAd8N,IACF3L,EAAQ2L,GAAU5P,MAhBa,EAACsP,EAAsB,KACjD,IAAIL,KAAiCK,GAAWH,KAAK,MAehCW,CAA2BR,IAGvD,MAAMS,EAA0BP,EAC7BC,QAAQC,IAAYH,EAAY7J,SAASgK,EAAO5N,OAChD6N,KAAKD,GAAiBrL,OAAAC,OAAA,GAAAoL,KAEzB,MAAO,IAAIzL,KAAY8L,EAAwB,EAGpCC,EAAyB,CACpCX,EAAiC,KAE1B,CACL,CACEY,OAAQ,QACRhM,QAASmL,EAA0BC,KAK5Ba,EAAwB,CACnCd,4BACAY,kKC1EF,MAIaG,GAAa,CACxBC,OALoBxJ,GAAgBrH,OAAA,OAAA,OAAA,GAAA,YACpC,aAAaoD,EAAOsD,IAAa,QAAQW,KAAQrG,MAAM2F,GAAQA,EAAIC,MACrE,KCMakK,GAAe,CAC1BC,aATmB,IAAW/Q,OAAA,OAAA,OAAA,GAAA,YAC9B,aAAaoD,EAAOsD,IAAmB,UAAU1F,MAAM2F,GAAQA,EAAIC,MACrE,IAQEoK,aAN0BzJ,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACxC,aAAaoD,EAAOsD,IAAW,UAAUa,KAAMvG,MAAM2F,GAAQA,EAAIC,MACnE,KCMaqK,GAAoB,CAC/BC,kBAbwB,IAAWlR,OAAA,OAAA,OAAA,GAAA,YACnC,aAAaoD,EACVsD,IAAmB,mBACnB1F,MAAM2F,GAAQA,EAAIC,MACvB,IAUEuK,sBARmC5J,GAAcvH,OAAA,OAAA,OAAA,GAAA,YACjD,aAAaoD,EACVsD,IAAuB,eAAea,cACtCvG,MAAM2F,GAAQA,EAAIC,MACvB,KCJMwK,GAAoB3Q,GACxBA,EACG4Q,QAAQ,kCAAmC,IAC3CA,QAAQ,WAAY,IACpBA,QAAQ,kBAAmB,IAC3BA,QAAQ,qBAAsB,IAC9BA,QAAQ,OAAQ,KAChBC,OAECC,GAAiB9Q,GACrBA,EACG4Q,QAAQ,qBAAsB,IAC9BA,QAAQ,OAAQ,IAChBC,OAECE,GAAiB/Q,GACrBA,EACG4Q,QAAQ,WAAY,IACpBA,QAAQ,OAAQ,IAChBC,OAECG,GAAoBhR,GACxBA,EACG4Q,QAAQ,WAAY,IACpBA,QAAQ,UAAW,IACnBC,OAECI,GAAmBjR,GACvBA,EACG4Q,QAAQ,kCAAmC,IAC3CA,QAAQ,WAAY,IACpBC,OAECK,GAAelR,GACnBA,EACG4Q,QAAQ,kCAAmC,IAC3CA,QAAQ,WAAY,IACpBA,QAAQ,UAAW,IACnBC,OA2MQM,GAAgB,CAC3BC,WA1MiB,IAAgC7R,OAAA,OAAA,OAAA,GAAA,YACjD,IACE,MAAMoE,QAAiBhB,EAAOsD,IAAgB,QAExCE,EAAOxC,aAAA,EAAAA,EAAUwC,KAGvB,OAAIkL,MAAMC,QAAQnL,GACTA,EAKPA,GACgB,iBAATA,GACP,UAAWA,GACXkL,MAAMC,QAASnL,EAAawB,OAEpBxB,EAAawB,OAGvB4J,QAAQC,KAAK,+BAAgCrL,GACtC,GACR,CAAC,MAAO9C,GAEP,OADAkO,QAAQlO,MAAM,uBAAwBA,GAC/B,EACR,CACH,IAgLEoO,aA9K0B7K,GAA4BrH,OAAA,OAAA,OAAA,GAAA,YACtD,aAAaoD,EACVsD,IAAc,gBAAgBW,KAC9BrG,MAAM2F,GAAaA,EAAIC,MAC5B,IA2KEuL,WAzKwBjJ,GAOYlJ,OAAA,OAAA,OAAA,GAAA,oBACpC,IACE,MAAMoS,EAAc,IAAIjJ,iBAEpBD,aAAA,EAAAA,EAAQG,SAAQ+I,EAAYpG,OAAO,SAAU9C,EAAOG,SACpDH,aAAA,EAAAA,EAAQ/B,WAAUiL,EAAYpG,OAAO,WAAY9C,EAAO/B,WACxD+B,aAAA,EAAAA,EAAQE,WAAUgJ,EAAYpG,OAAO,WAAY9C,EAAOE,WACxDF,aAAA,EAAAA,EAAQmJ,iBACVD,EAAYpG,OAAO,iBAAkB9C,EAAOmJ,iBAC1CnJ,aAAA,EAAAA,EAAQjC,OAAMmL,EAAYpG,OAAO,OAAQ9C,EAAOjC,KAAKxF,aACrDyH,aAAA,EAAAA,EAAQyC,OAAMyG,EAAYpG,OAAO,OAAQ9C,EAAOyC,KAAKlK,YAEzD,MAAM6Q,EAAcF,EAAY3Q,WAC1B8Q,EAAMD,EAAc,QAAQA,IAAgB,OAE5ClO,QAAiBhB,EAAOsD,IAA4B6L,GAG1D,MAAO,CACLnK,MAAO0J,MAAMC,QAAwB,QAAhB/N,EAAAI,aAAA,EAAAA,EAAUwC,YAAM,IAAA5C,OAAA,EAAAA,EAAAoE,OAAShE,EAASwC,KAAKwB,MAAQ,GACpEoK,YAA4B,QAAhBzO,EAAAK,aAAA,EAAAA,EAAUwC,YAAM,IAAA7C,OAAA,EAAAA,EAAAyO,aAAc,CACxCzK,YAAa,EACbC,aAAc,GACdC,aAAa,EACbC,WAAY,GAGjB,CAAC,MAAOpE,GAGP,OAFAkO,QAAQlO,MAAM,wBAAyBA,GAEhC,CACLsE,MAAO,GACPoK,WAAY,CACVzK,YAAa,EACbC,aAAc,GACdC,aAAa,EACbC,WAAY,GAGjB,CACH,IA2HEuK,YAxHA7L,GACmC5G,OAAA,OAAA,OAAA,GAAA,YACnC,MAAM0S,EAAgBtB,GAAiBxK,EAAK4F,OAAS5F,EAAK4F,KAAK8E,OACzDqB,EAAiBpB,GAAc3K,EAAKgG,QAAUhG,EAAKgG,MAAM0E,OACzDsB,EAAkBpB,GAAc5K,EAAKiG,SAAWjG,EAAKiG,OAAOyE,OAC5DuB,EAAW,IAAIC,SA+BrB,GA5BIlM,EAAKmM,OAAOF,EAAS7G,OAAO,QAASpF,EAAKmM,OAC9CF,EAAS7G,OAAO,OAAQ0G,GACxBG,EAAS7G,OAAO,QAAS2G,GACzBE,EAAS7G,OAAO,QAAS4G,GACzBC,EAAS7G,OAAO,SAAUpF,EAAKoM,OAAQvB,GAAiB7K,EAAKoM,OAAOxG,YAI5CT,IAApBnF,EAAKqM,YAAgD,OAApBrM,EAAKqM,YACxCJ,EAAS7G,OAAO,aAAckH,OAAOtM,EAAKqM,YAAYxR,YACpDmF,EAAKuM,UACPN,EAAS7G,OAAO,WAAYoF,GAAiBxK,EAAKuM,gBACzBpH,IAAvBnF,EAAKwM,eAAsD,OAAvBxM,EAAKwM,eAC3CP,EAAS7G,OAAO,gBAAiBkH,OAAOtM,EAAKwM,eAAe3R,iBAClCsK,IAAxBnF,EAAKyM,gBAAwD,OAAxBzM,EAAKyM,gBAC5CR,EAAS7G,OAAO,iBAAkBkH,OAAOtM,EAAKyM,gBAAgB5R,iBACtCsK,IAAtBnF,EAAK0M,cAAoD,OAAtB1M,EAAK0M,cAC1CT,EAAS7G,OAAO,qBAAsBkH,OAAOtM,EAAK0M,cAAc7R,YAC9DmF,EAAK2M,aACPV,EAAS7G,OAAO,cAAeoF,GAAiBxK,EAAK2M,cACnD3M,EAAK4M,aACPX,EAAS7G,OAAO,cAAe0F,GAAgB9K,EAAK4M,cAClD5M,EAAK6M,OACPZ,EAAS7G,OAAO,QAASpF,EAAK6M,MAAOhC,GAAiB7K,EAAK6M,MAAMjH,OAC/D5F,EAAK8M,aACPb,EAAS7G,OAAO,cAAe2F,GAAY/K,EAAK8M,cAG5B,oBAAXrS,OAAwB,CACjC,MAAM6H,EAAS,IAAIC,gBAAgB9H,OAAO+H,SAASC,QACnC,CACd,aACA,aACA,eACA,WACA,eAGMC,SAAS/G,IACX2G,EAAOM,IAAIjH,IACbsQ,EAAS7G,OAAOzJ,EAAK2G,EAAOxC,IAAInE,IAAQ,GACzC,GAEJ,CAED,aAAaa,EACVsE,KAA6B,aAAcmL,GAC3C7R,MAAM2F,GAAaA,EAAIC,MAC5B,IAiEE+M,2BA9DA/M,GACmC5G,OAAA,OAAA,OAAA,GAAA,YACnC,MAAM0S,EAAgBtB,GAAiBxK,EAAK4F,OAAS5F,EAAK4F,KAAK8E,OACzDqB,EAAiBpB,GAAc3K,EAAKgG,QAAUhG,EAAKgG,MAAM0E,OACzDsB,EAAkBpB,GAAc5K,EAAKiG,SAAWjG,EAAKiG,OAAOyE,OAC5DuB,EAAW,IAAIC,SA8BrB,GA3BAD,EAAS7G,OAAO,OAAQ0G,GACxBG,EAAS7G,OAAO,QAAS2G,GACzBE,EAAS7G,OAAO,QAAS4G,GACzBC,EAAS7G,OAAO,SAAUpF,EAAKoM,OAAQvB,GAAiB7K,EAAKoM,OAAOxG,YAI5CT,IAApBnF,EAAKqM,YAAgD,OAApBrM,EAAKqM,YACxCJ,EAAS7G,OAAO,aAAckH,OAAOtM,EAAKqM,YAAYxR,YACpDmF,EAAKuM,UACPN,EAAS7G,OAAO,WAAYoF,GAAiBxK,EAAKuM,gBACzBpH,IAAvBnF,EAAKwM,eAAsD,OAAvBxM,EAAKwM,eAC3CP,EAAS7G,OAAO,gBAAiBkH,OAAOtM,EAAKwM,eAAe3R,iBAClCsK,IAAxBnF,EAAKyM,gBAAwD,OAAxBzM,EAAKyM,gBAC5CR,EAAS7G,OAAO,iBAAkBkH,OAAOtM,EAAKyM,gBAAgB5R,iBACtCsK,IAAtBnF,EAAK0M,cAAoD,OAAtB1M,EAAK0M,cAC1CT,EAAS7G,OAAO,qBAAsBkH,OAAOtM,EAAK0M,cAAc7R,YAC9DmF,EAAK2M,aACPV,EAAS7G,OAAO,cAAeoF,GAAiBxK,EAAK2M,cACnD3M,EAAK4M,aACPX,EAAS7G,OAAO,cAAe0F,GAAgB9K,EAAK4M,cAClD5M,EAAK6M,OACPZ,EAAS7G,OAAO,QAASpF,EAAK6M,MAAOhC,GAAiB7K,EAAK6M,MAAMjH,OAC/D5F,EAAK8M,aACPb,EAAS7G,OAAO,cAAe2F,GAAY/K,EAAK8M,cAG5B,oBAAXrS,OAAwB,CACjC,MAAM6H,EAAS,IAAIC,gBAAgB9H,OAAO+H,SAASC,QACnC,CACd,aACA,aACA,eACA,WACA,eAGMC,SAAS/G,IACX2G,EAAOM,IAAIjH,IACbsQ,EAAS7G,OAAOzJ,EAAK2G,EAAOxC,IAAInE,IAAQ,GACzC,GAEJ,CAED,aAAaa,EACVsE,KAA6B,mBAAoBmL,GACjD7R,MAAM2F,GAAaA,EAAIC,MAC5B,KChNM,MAAOgN,WAAiB/L,SCqBjBgM","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leadmetrics-ai/website-sdk",
3
- "version": "1.1.4",
3
+ "version": "1.1.5",
4
4
  "description": "Leadmetrics SDK for building Websites",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",